diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f11916e766b..3354ee1c842 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,9 +4,5 @@ # For syntax help see: # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax -# The @googleapis/api-spanner-java is the default owner for changes in this repo -* @googleapis/yoshi-java @googleapis/api-spanner-java -**/*.java @googleapis/api-spanner-java - -# The java-samples-reviewers team is the default owner for samples changes -samples/**/*.java @googleapis/java-samples-reviewers @googleapis/api-spanner-java +# The @googleapis/spanner-team is the default owner for changes in this repo +* @googleapis/cloud-sdk-java-team @googleapis/spanner-team diff --git a/.github/generated-files-bot.yml b/.github/generated-files-bot.yml index c644a24e112..e58cdcbad65 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 2853b1763cf..5ddaeef6217 100644 --- a/.github/release-please.yml +++ b/.github/release-please.yml @@ -3,42 +3,29 @@ bumpMinorPreMajor: true handleGHRelease: true branches: - branch: 3.3.x - releaseType: java-yoshi - bumpMinorPreMajor: true - handleGHRelease: true - branch: 4.0.x - releaseType: java-yoshi - bumpMinorPreMajor: true - handleGHRelease: true - branch: 5.2.x - releaseType: java-yoshi - bumpMinorPreMajor: true - handleGHRelease: true - - releaseType: java-lts - bumpMinorPreMajor: true - handleGHRelease: true - branch: 6.4.4-sp - - releaseType: java-backport - bumpMinorPreMajor: true - handleGHRelease: true - branch: 6.14.x - - releaseType: java-yoshi - bumpMinorPreMajor: true - handleGHRelease: true - branch: 6.23.x - - releaseType: java-yoshi - bumpMinorPreMajor: true - handleGHRelease: true - branch: 6.33.x - - releaseType: java-backport - bumpMinorPreMajor: true - handleGHRelease: true - branch: 6.55.x - - releaseType: java-backport - bumpMinorPreMajor: true - handleGHRelease: true - branch: 6.67.x + - branch: 6.4.4-sp + releaseType: java-lts + - branch: 6.14.x + releaseType: java-backport + - branch: 6.23.x + - branch: 6.33.x + - branch: 6.55.x + releaseType: java-backport + - branch: 6.67.x + releaseType: java-backport + - branch: 6.66.x + releaseType: java-backport + - branch: 6.88.x + releaseType: java-backport + - branch: 6.96.x + releaseType: java-backport + - branch: 6.95.x + releaseType: java-backport + - branch: protobuf-4.x-rc + manifest: true - releaseType: java-backport bumpMinorPreMajor: true handleGHRelease: true - branch: 6.66.x + branch: 6.109.x diff --git a/.github/scripts/update_generation_config.sh b/.github/scripts/update_generation_config.sh index 561a313040f..74d0e6cc410 100644 --- a/.github/scripts/update_generation_config.sh +++ b/.github/scripts/update_generation_config.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -e +set -ex # 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 @@ -15,8 +15,27 @@ set -e function get_latest_released_version() { local group_id=$1 local artifact_id=$2 - latest=$(curl -s "https://search.maven.org/solrsearch/select?q=g:${group_id}+AND+a:${artifact_id}&core=gav&rows=500&wt=json" | jq -r '.response.docs[] | select(.v | test("^[0-9]+(\\.[0-9]+)*$")) | .v' | sort -V | tail -n 1) - echo "${latest}" + group_id_url_path="$(sed 's|\.|/|g' <<< "${group_id}")" + url="https://repo1.maven.org/maven2/${group_id_url_path}/${artifact_id}/maven-metadata.xml" + xml_content=$(curl -s --fail "${url}") + + # 1. Extract all version tags + # 2. Strip the XML tags to leave just the version numbers + # 3. Filter for strictly numbers.numbers.numbers (e.g., 2.54.0) + # 4. Sort by version (V) and take the last one (tail -n 1) + latest=$(echo "${xml_content}" \ + | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' \ + | sed -E 's/<[^>]+>//g' \ + | 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. @@ -28,11 +47,23 @@ function update_config() { 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 @@ -48,6 +79,10 @@ case "${key}" in generation_config="$2" shift ;; + --workflow) + workflow="$2" + shift + ;; *) echo "Invalid option: [$1]" exit 1 @@ -71,21 +106,34 @@ if [ -z "${generation_config}" ]; then 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)" -# try to find a open pull request associated with the branch +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 +# 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. +# 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 @@ -94,25 +142,43 @@ popd rm -rf tmp-googleapis update_config "googleapis_commitish" "${latest_commit}" "${generation_config}" -# update gapic-generator-java version to the latest +# 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 libraries-bom version to the latest +# 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}" +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 -git commit -m "${title}" + if [ -z "${pr_num}" ]; then git remote add remote_repo https://cloud-java-bot:"${GH_TOKEN}@github.com/${repo}.git" - git fetch -q --unshallow remote_repo + 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 diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index d779decd658..66933646d40 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -14,13 +14,10 @@ branchProtectionRules: - units (8) - units (11) - 'Kokoro - Test: Integration' - - 'Kokoro - Test: Integration with Multiplexed Sessions' - cla/google - checkstyle - compile (8) - compile (11) - - units-with-multiplexed-session (8) - - units-with-multiplexed-session (11) - unmanaged_dependency_check - library_generation - pattern: 3.3.x @@ -154,13 +151,90 @@ branchProtectionRules: - units (8) - units (11) - 'Kokoro - Test: Integration' - - 'Kokoro - Test: Integration with Multiplexed Sessions' - cla/google - checkstyle - compile (8) - compile (11) - units-with-multiplexed-session (8) - units-with-multiplexed-session (11) + - pattern: 6.88.x + isAdminEnforced: true + requiredApprovingReviewCount: 1 + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: false + requiredStatusCheckContexts: + - dependencies (17) + - lint + - javadoc + - units (8) + - units (11) + - 'Kokoro - Test: Integration' + - cla/google + - checkstyle + - compile (8) + - compile (11) + - units-with-multiplexed-session (8) + - units-with-multiplexed-session (11) + - unmanaged_dependency_check + - library_generation + - pattern: 6.96.x + isAdminEnforced: true + requiredApprovingReviewCount: 1 + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: false + requiredStatusCheckContexts: + - dependencies (17) + - lint + - javadoc + - units (8) + - units (11) + - 'Kokoro - Test: Integration' + - cla/google + - checkstyle + - compile (8) + - compile (11) + - units-with-multiplexed-session (8) + - units-with-multiplexed-session (11) + - unmanaged_dependency_check + - library_generation + - pattern: 6.95.x + isAdminEnforced: true + requiredApprovingReviewCount: 1 + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: false + requiredStatusCheckContexts: + - dependencies (17) + - lint + - javadoc + - units (8) + - units (11) + - 'Kokoro - Test: Integration' + - cla/google + - checkstyle + - compile (8) + - compile (11) + - units-with-multiplexed-session (8) + - units-with-multiplexed-session (11) + - unmanaged_dependency_check + - library_generation + - pattern: 6.109.x + isAdminEnforced: true + requiredApprovingReviewCount: 1 + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: false + requiredStatusCheckContexts: + - dependencies (17) + - lint + - javadoc + - units (8) + - units (11) + - 'Kokoro - Test: Integration' + - cla/google + - checkstyle + - compile (8) + - compile (11) + - unmanaged_dependency_check + - library_generation permissionRules: - team: yoshi-admins permission: admin diff --git a/.github/trusted-contribution.yml b/.github/trusted-contribution.yml index a0ba1f7d907..88d3ac9bf1a 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/auto-release.yaml b/.github/workflows/auto-release.yaml index 18d92e5a28d..0cda6b04f72 100644 --- a/.github/workflows/auto-release.yaml +++ b/.github/workflows/auto-release.yaml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest if: contains(github.head_ref, 'release-please') steps: - - uses: actions/github-script@v7 + - uses: actions/github-script@v8 with: github-token: ${{secrets.YOSHI_APPROVER_TOKEN}} debug: true diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ee28d7f8a66..ae7ec53f5d7 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -25,7 +25,7 @@ jobs: strategy: fail-fast: false matrix: - java: [11, 17, 21] + java: [11, 17, 21, 25] steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v3 @@ -36,24 +36,6 @@ jobs: - run: .kokoro/build.sh env: JOB_TYPE: test - units-with-multiplexed-session: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - java: [ 11, 17, 21 ] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 - with: - distribution: temurin - java-version: ${{matrix.java}} - - run: java -version - - run: .kokoro/build.sh - env: - JOB_TYPE: test - GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS: true - GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS: true units-java8: # Building using Java 17 and run the tests with Java 8 runtime name: "units (8)" @@ -73,27 +55,6 @@ jobs: - run: .kokoro/build.sh env: JOB_TYPE: test - units-with-multiplexed-session8: - # Building using Java 17 and run the tests with Java 8 runtime - name: "units-with-multiplexed-session (8)" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 - with: - java-version: 8 - distribution: temurin - - run: echo "SUREFIRE_JVM_OPT=-Djvm=${JAVA_HOME}/bin/java" >> $GITHUB_ENV - shell: bash - - uses: actions/setup-java@v3 - with: - java-version: 17 - distribution: temurin - - run: .kokoro/build.sh - env: - JOB_TYPE: test - GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS: true - GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS: true windows: runs-on: windows-latest steps: diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml index 35aa3b151d6..e8f02234113 100644 --- a/.github/workflows/hermetic_library_generation.yaml +++ b/.github/workflows/hermetic_library_generation.yaml @@ -32,14 +32,14 @@ jobs: else echo "SHOULD_RUN=true" >> $GITHUB_ENV fi - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 if: env.SHOULD_RUN == 'true' with: fetch-depth: 0 - token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} - - uses: googleapis/sdk-platform-java/.github/scripts@v2.50.0 + token: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }} + - uses: googleapis/sdk-platform-java/.github/scripts@v2.68.0 if: env.SHOULD_RUN == 'true' with: base_ref: ${{ github.base_ref }} head_ref: ${{ github.head_ref }} - token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} + token: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }} diff --git a/.github/workflows/integration-tests-against-emulator-with-multiplexed-session.yaml b/.github/workflows/integration-tests-against-emulator-with-multiplexed-session.yaml deleted file mode 100644 index bd7dfef3972..00000000000 --- a/.github/workflows/integration-tests-against-emulator-with-multiplexed-session.yaml +++ /dev/null @@ -1,42 +0,0 @@ -on: - push: - branches: - - main - pull_request: -name: integration-tests-against-emulator-with-multiplexed-session -jobs: - units: - runs-on: ubuntu-latest - - services: - emulator: - image: gcr.io/cloud-spanner-emulator/emulator:latest - ports: - - 9010:9010 - - 9020:9020 - - steps: - - uses: actions/checkout@v4 - - uses: stCarolas/setup-maven@v5 - with: - maven-version: 3.8.1 - # Build with JDK 11 and run tests with JDK 8 - - uses: actions/setup-java@v4 - with: - java-version: 11 - distribution: temurin - - name: Compiling main library - run: .kokoro/build.sh - - uses: actions/setup-java@v4 - with: - java-version: 8 - distribution: temurin - - name: Running tests - run: | - mvn -V -B -Dspanner.testenv.instance="" -Penable-integration-tests \ - -DtrimStackTrace=false -Dclirr.skip=true -Denforcer.skip=true \ - -Dmaven.main.skip=true -fae verify - env: - JOB_TYPE: test - SPANNER_EMULATOR_HOST: localhost:9010 - GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS: true diff --git a/.github/workflows/integration-tests-against-emulator.yaml b/.github/workflows/integration-tests-against-emulator.yaml index f4ac97a8fe5..c1f81dd8f2b 100644 --- a/.github/workflows/integration-tests-against-emulator.yaml +++ b/.github/workflows/integration-tests-against-emulator.yaml @@ -16,18 +16,18 @@ jobs: - 9020:9020 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: stCarolas/setup-maven@v5 with: maven-version: 3.8.1 # Build with JDK 11 and run tests with JDK 8 - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: java-version: 11 distribution: temurin - name: Compiling main library run: .kokoro/build.sh - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: java-version: 8 distribution: temurin diff --git a/.github/workflows/renovate_config_check.yaml b/.github/workflows/renovate_config_check.yaml index 7c5ec7865e1..47b9e87c98b 100644 --- a/.github/workflows/renovate_config_check.yaml +++ b/.github/workflows/renovate_config_check.yaml @@ -7,7 +7,7 @@ on: jobs: renovate_bot_config_validation: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Checkout code @@ -16,7 +16,7 @@ jobs: - name: Set up Node.js 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 36e725f6aa2..37e2b4054f9 100644 --- a/.github/workflows/samples.yaml +++ b/.github/workflows/samples.yaml @@ -8,7 +8,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-java@v1 with: - java-version: 8 + java-version: 11 - 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 f5298fed0f2..fc713448ef8 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@v4 - - uses: actions/setup-java@v4 + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 with: distribution: temurin java-version: 11 @@ -17,6 +17,6 @@ jobs: # repository .kokoro/build.sh - name: Unmanaged dependency check - uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.40.0 + uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.58.0 with: bom-path: google-cloud-spanner-bom/pom.xml diff --git a/.github/workflows/update_generation_config.yaml b/.github/workflows/update_generation_config.yaml index f15c807853d..8de9d67eae7 100644 --- a/.github/workflows/update_generation_config.yaml +++ b/.github/workflows/update_generation_config.yaml @@ -28,7 +28,11 @@ jobs: steps: - uses: actions/checkout@v4 with: - token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} + fetch-depth: 0 + token: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }} + - name: Install Dependencies + shell: bash + run: sudo apt-get update && sudo apt-get install -y libxml2-utils - name: Update params in generation config to latest shell: bash run: | @@ -36,7 +40,8 @@ jobs: [ -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}"\ + --base_branch "${base_branch}" \ --repo ${{ github.repository }} env: - GH_TOKEN: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} + GH_TOKEN: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }} + diff --git a/.kokoro/build.sh b/.kokoro/build.sh index d603c59859b..caeff7a8b95 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -82,7 +82,7 @@ test) RETURN_CODE=$? ;; lint) - mvn com.coveo:fmt-maven-plugin:check + mvn com.spotify.fmt:fmt-maven-plugin:check RETURN_CODE=$? ;; javadoc) @@ -105,21 +105,6 @@ integration) RETURN_CODE=$? ;; integration-directpath-enabled) - mvn -B ${INTEGRATION_TEST_ARGS} \ - -ntp \ - -Penable-integration-tests \ - -Djava.net.preferIPv4Stack=true \ - -DtrimStackTrace=false \ - -Dclirr.skip=true \ - -Denforcer.skip=true \ - -Dmaven.main.skip=true \ - -Dspanner.testenv.instance=projects/span-cloud-testing/instances/spanner-java-client-directpath \ - -Dspanner.gce.config.project_id=span-cloud-testing \ - -fae \ - verify - RETURN_CODE=$? - ;; -integration-multiplexed-sessions-enabled) mvn -B ${INTEGRATION_TEST_ARGS} \ -ntp \ -Penable-integration-tests \ @@ -129,7 +114,7 @@ integration-multiplexed-sessions-enabled) -Denforcer.skip=true \ -Dmaven.main.skip=true \ -Dspanner.gce.config.project_id=gcloud-devel \ - -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-multiplexed-sessions \ + -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-directpath \ -fae \ verify RETURN_CODE=$? @@ -160,7 +145,7 @@ integration-cloud-devel-directpath-enabled) -Denforcer.skip=true \ -Dmaven.main.skip=true \ -Dspanner.gce.config.server_url=https://staging-wrenchworks.sandbox.googleapis.com \ - -Dspanner.testenv.instance=projects/span-cloud-testing/instances/spanner-java-client-directpath \ + -Dspanner.testenv.instance=projects/span-cloud-testing/instances/cloud-spanner-java-directpath \ -Dspanner.gce.config.project_id=span-cloud-testing \ -fae \ verify @@ -184,12 +169,14 @@ integration-cloud-staging|integration-cloud-staging-directpath-enabled) ;; graalvm) # Run Unit and Integration Tests with Native Image - mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests + # NOTE: These integration tests run on the Emulator. + mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-graalvm RETURN_CODE=$? ;; graalvm17) # Run Unit and Integration Tests with Native Image - mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests + # NOTE: These integration tests run on the Emulator. + mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-graalvm RETURN_CODE=$? ;; slowtests) @@ -206,12 +193,17 @@ slowtests) verify RETURN_CODE=$? ;; -samples) +samples|samples-slow-tests) SAMPLES_DIR=samples + PROFILES='' # only run ITs in snapshot/ on presubmit PRs. run ITs in all 3 samples/ subdirectories otherwise. if [[ ! -z ${KOKORO_GITHUB_PULL_REQUEST_NUMBER} ]] then SAMPLES_DIR=samples/snapshot + elif [[ ${JOB_TYPE} = 'samples-slow-tests' ]] + then + SAMPLES_DIR=samples/snippets + PROFILES='-Pslow-tests,!integration-tests' fi if [[ -f ${SAMPLES_DIR}/pom.xml ]] @@ -227,6 +219,7 @@ samples) -DtrimStackTrace=false \ -Dclirr.skip=true \ -Denforcer.skip=true \ + ${PROFILES} \ -fae \ verify RETURN_CODE=$? diff --git a/.kokoro/continuous/integration-cloud-devel-directpath-enabled.cfg b/.kokoro/continuous/integration-cloud-devel-directpath-enabled.cfg index f73563d19a7..c17e92f53e5 100644 --- a/.kokoro/continuous/integration-cloud-devel-directpath-enabled.cfg +++ b/.kokoro/continuous/integration-cloud-devel-directpath-enabled.cfg @@ -27,6 +27,6 @@ env_vars: { } env_vars: { - key: "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" + key: "GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS" value: "true" } diff --git a/.kokoro/continuous/integration-cloud-staging-directpath-enabled.cfg b/.kokoro/continuous/integration-cloud-staging-directpath-enabled.cfg index 7bc2e7fed21..e9a9ef9c76f 100644 --- a/.kokoro/continuous/integration-cloud-staging-directpath-enabled.cfg +++ b/.kokoro/continuous/integration-cloud-staging-directpath-enabled.cfg @@ -27,6 +27,6 @@ env_vars: { } env_vars: { - key: "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" + key: "GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS" value: "true" } diff --git a/.kokoro/continuous/java8.cfg b/.kokoro/continuous/java8.cfg deleted file mode 100644 index 495cc7bacd6..00000000000 --- a/.kokoro/continuous/java8.cfg +++ /dev/null @@ -1,12 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "REPORT_COVERAGE" - value: "true" -} diff --git a/.kokoro/nightly/integration-cloud-devel-directpath-enabled.cfg b/.kokoro/nightly/integration-cloud-devel-directpath-enabled.cfg index c1fc3da819e..fa53b07d62f 100644 --- a/.kokoro/nightly/integration-cloud-devel-directpath-enabled.cfg +++ b/.kokoro/nightly/integration-cloud-devel-directpath-enabled.cfg @@ -22,7 +22,6 @@ env_vars: { } env_vars: { - key: "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" + key: "GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS" value: "true" } - diff --git a/.kokoro/nightly/integration-cloud-staging-directpath-enabled.cfg b/.kokoro/nightly/integration-cloud-staging-directpath-enabled.cfg index 29444d79a60..c951f87b5ae 100644 --- a/.kokoro/nightly/integration-cloud-staging-directpath-enabled.cfg +++ b/.kokoro/nightly/integration-cloud-staging-directpath-enabled.cfg @@ -22,6 +22,6 @@ env_vars: { } env_vars: { - key: "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" + key: "GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS" value: "true" } diff --git a/.kokoro/nightly/integration-directpath-enabled.cfg b/.kokoro/nightly/integration-directpath-enabled.cfg index e8d750a34a7..9d77a33d84d 100644 --- a/.kokoro/nightly/integration-directpath-enabled.cfg +++ b/.kokoro/nightly/integration-directpath-enabled.cfg @@ -37,6 +37,6 @@ env_vars: { } env_vars: { - key: "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" + key: "GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS" value: "true" } diff --git a/.kokoro/presubmit/java11-samples.cfg b/.kokoro/nightly/java11-samples-slow-tests.cfg similarity index 87% rename from .kokoro/presubmit/java11-samples.cfg rename to .kokoro/nightly/java11-samples-slow-tests.cfg index 2812301e787..7246153b048 100644 --- a/.kokoro/presubmit/java11-samples.cfg +++ b/.kokoro/nightly/java11-samples-slow-tests.cfg @@ -8,7 +8,7 @@ env_vars: { env_vars: { key: "JOB_TYPE" - value: "samples" + value: "samples-slow-tests" } # TODO: remove this after we've migrated all tests and scripts @@ -32,3 +32,8 @@ env_vars: { value: "java-it-service-account" } +env_vars: { + key: "ENABLE_BUILD_COP" + value: "true" +} + diff --git a/.kokoro/nightly/java7.cfg b/.kokoro/nightly/java7.cfg deleted file mode 100644 index cb24f44eea3..00000000000 --- a/.kokoro/nightly/java7.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java7" -} diff --git a/.kokoro/nightly/java8-win.cfg b/.kokoro/nightly/java8-win.cfg deleted file mode 100644 index b219b38ad4a..00000000000 --- a/.kokoro/nightly/java8-win.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -build_file: "java-spanner/.kokoro/build.bat" diff --git a/.kokoro/presubmit/clirr.cfg b/.kokoro/presubmit/clirr.cfg deleted file mode 100644 index ec572442e2e..00000000000 --- a/.kokoro/presubmit/clirr.cfg +++ /dev/null @@ -1,13 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. - -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "JOB_TYPE" - value: "clirr" -} \ No newline at end of file diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native-a.cfg similarity index 77% rename from .kokoro/presubmit/graalvm-native.cfg rename to .kokoro/presubmit/graalvm-native-a.cfg index a836c97f04b..de4ac9dbfa6 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.40.0" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.58.0" # {x-version-update:google-cloud-shared-dependencies:current} } env_vars: { @@ -31,3 +31,8 @@ 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/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-b.cfg similarity index 74% rename from .kokoro/presubmit/graalvm-native-17.cfg rename to .kokoro/presubmit/graalvm-native-b.cfg index 82ed3a43e49..d8ae3b32223 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.40.0" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.58.0" # {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 @@ -30,4 +30,9 @@ env_vars: { 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/java8-samples.cfg b/.kokoro/presubmit/graalvm-native-c.cfg similarity index 67% rename from .kokoro/presubmit/java8-samples.cfg rename to .kokoro/presubmit/graalvm-native-c.cfg index 49a231b9f2a..0e9d1203a7e 100644 --- a/.kokoro/presubmit/java8-samples.cfg +++ b/.kokoro/presubmit/graalvm-native-c.cfg @@ -3,12 +3,12 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.58.0" # {x-version-update:google-cloud-shared-dependencies:current} } env_vars: { key: "JOB_TYPE" - value: "samples" + value: "graalvm" } # TODO: remove this after we've migrated all tests and scripts @@ -32,3 +32,7 @@ env_vars: { 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-cloud-devel.cfg b/.kokoro/presubmit/integration-cloud-devel.cfg deleted file mode 100644 index 94b698199e1..00000000000 --- a/.kokoro/presubmit/integration-cloud-devel.cfg +++ /dev/null @@ -1,22 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "JOB_TYPE" - value: "integration-cloud-devel" -} - -env_vars: { - key: "GOOGLE_APPLICATION_CREDENTIALS" - value: "secret_manager/java-client-testing" -} - -env_vars: { - key: "SECRET_MANAGER_KEYS" - value: "java-client-testing" -} diff --git a/.kokoro/presubmit/integration-directpath-enabled.cfg b/.kokoro/presubmit/integration-directpath-enabled.cfg index e619d7e8207..1a921363936 100644 --- a/.kokoro/presubmit/integration-directpath-enabled.cfg +++ b/.kokoro/presubmit/integration-directpath-enabled.cfg @@ -24,15 +24,15 @@ env_vars: { env_vars: { key: "GOOGLE_APPLICATION_CREDENTIALS" - value: "secret_manager/java-client-testing" + value: "secret_manager/java-it-service-account" } env_vars: { key: "SECRET_MANAGER_KEYS" - value: "java-client-testing" + value: "java-it-service-account" } env_vars: { - key: "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" + key: "GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS" value: "true" -} +} \ No newline at end of file diff --git a/.kokoro/presubmit/integration-multiplexed-sessions-enabled.cfg b/.kokoro/presubmit/integration-multiplexed-sessions-enabled.cfg deleted file mode 100644 index 49edd2e8df6..00000000000 --- a/.kokoro/presubmit/integration-multiplexed-sessions-enabled.cfg +++ /dev/null @@ -1,43 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "JOB_TYPE" - value: "integration-multiplexed-sessions-enabled" -} - -# 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: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS" - value: "true" -} - -env_vars: { - key: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS" - value: "true" -} diff --git a/.kokoro/presubmit/java11.cfg b/.kokoro/presubmit/java11.cfg deleted file mode 100644 index 709f2b4c73d..00000000000 --- a/.kokoro/presubmit/java11.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java11" -} diff --git a/.kokoro/presubmit/java7.cfg b/.kokoro/presubmit/java7.cfg deleted file mode 100644 index cb24f44eea3..00000000000 --- a/.kokoro/presubmit/java7.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java7" -} diff --git a/.kokoro/presubmit/java8-osx.cfg b/.kokoro/presubmit/java8-osx.cfg deleted file mode 100644 index 63f547222f5..00000000000 --- a/.kokoro/presubmit/java8-osx.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -build_file: "java-spanner/.kokoro/build.sh" diff --git a/.kokoro/presubmit/java8-win.cfg b/.kokoro/presubmit/java8-win.cfg deleted file mode 100644 index b219b38ad4a..00000000000 --- a/.kokoro/presubmit/java8-win.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -build_file: "java-spanner/.kokoro/build.bat" diff --git a/.kokoro/presubmit/java8.cfg b/.kokoro/presubmit/java8.cfg deleted file mode 100644 index 495cc7bacd6..00000000000 --- a/.kokoro/presubmit/java8.cfg +++ /dev/null @@ -1,12 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "REPORT_COVERAGE" - value: "true" -} diff --git a/.kokoro/presubmit/linkage-monitor.cfg b/.kokoro/presubmit/linkage-monitor.cfg deleted file mode 100644 index 083448f9f80..00000000000 --- a/.kokoro/presubmit/linkage-monitor.cfg +++ /dev/null @@ -1,12 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/java-spanner/.kokoro/linkage-monitor.sh" -} \ No newline at end of file diff --git a/.kokoro/presubmit/lint.cfg b/.kokoro/presubmit/lint.cfg deleted file mode 100644 index 6d323c8ae76..00000000000 --- a/.kokoro/presubmit/lint.cfg +++ /dev/null @@ -1,13 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. - -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "JOB_TYPE" - value: "lint" -} \ No newline at end of file diff --git a/.kokoro/presubmit/samples.cfg b/.kokoro/presubmit/samples.cfg index 724216504ef..2cabe201bcd 100644 --- a/.kokoro/presubmit/samples.cfg +++ b/.kokoro/presubmit/samples.cfg @@ -31,3 +31,8 @@ env_vars: { key: "SECRET_MANAGER_KEYS" value: "java-it-service-account" } + +env_vars: { + key: "ENABLE_BUILD_COP" + value: "true" +} diff --git a/.readme-partials.yaml b/.readme-partials.yaml index 65ae24d8b58..392f727e622 100644 --- a/.readme-partials.yaml +++ b/.readme-partials.yaml @@ -52,217 +52,30 @@ custom_content: | ## Metrics - ### Available client-side metrics: - - * `spanner/max_in_use_sessions`: This returns the maximum - number of sessions that have been in use during the last maintenance window - interval, so as to provide an indication of the amount of activity currently - in the database. - - * `spanner/max_allowed_sessions`: This shows the maximum - number of sessions allowed. - - * `spanner/num_sessions_in_pool`: This metric allows users to - see instance-level and database-level data for the total number of sessions in - the pool at this very moment. - - * `spanner/num_acquired_sessions`: This metric allows - users to see the total number of acquired sessions. - - * `spanner/num_released_sessions`: This metric allows - users to see the total number of released (destroyed) sessions. - - * `spanner/get_session_timeouts`: This gives you an - indication of the total number of get session timed-out instead of being - granted (the thread that requested the session is placed in a wait queue where - it waits until a session is released into the pool by another thread) due to - pool exhaustion since the server process started. - - * `spanner/gfe_latency`: This metric shows latency between - Google's network receiving an RPC and reading back the first byte of the response. - - * `spanner/gfe_header_missing_count`: This metric shows the - number of RPC responses received without the server-timing header, most likely - indicating that the RPC never reached Google's network. - - ### Instrument with OpenTelemetry - - Cloud Spanner client supports [OpenTelemetry Metrics](https://opentelemetry.io/), - which gives insight into the client internals and aids in debugging/troubleshooting - production issues. OpenTelemetry metrics will provide you with enough data to enable you to - spot, and investigate the cause of any unusual deviations from normal behavior. - - All Cloud Spanner Metrics are prefixed with `spanner/` and uses `cloud.google.com/java` as [Instrumentation Scope](https://opentelemetry.io/docs/concepts/instrumentation-scope/). The - metrics will be tagged with: - * `database`: the target database name. - * `instance_id`: the instance id of the target Spanner instance. - * `client_id`: the user defined database client id. - - By default, the functionality is disabled. You need to add OpenTelemetry dependencies, enable OpenTelemetry metrics and must configure the OpenTelemetry with appropriate exporters at the startup of your application: - - #### OpenTelemetry Dependencies - If you are using Maven, add this to your pom.xml file - ```xml - - io.opentelemetry - opentelemetry-sdk - {opentelemetry.version} - - - io.opentelemetry - opentelemetry-sdk-metrics - {opentelemetry.version} - - - io.opentelemetry - opentelemetry-exporter-otlp - {opentelemetry.version} - - ``` - If you are using Gradle, add this to your dependencies - ```Groovy - compile 'io.opentelemetry:opentelemetry-sdk:{opentelemetry.version}' - compile 'io.opentelemetry:opentelemetry-sdk-metrics:{opentelemetry.version}' - compile 'io.opentelemetry:opentelemetry-exporter-oltp:{opentelemetry.version}' - ``` - - #### OpenTelemetry Configuration - By default, all metrics are disabled. To enable metrics and configure the OpenTelemetry follow below: - - ```java - // Enable OpenTelemetry metrics before injecting OpenTelemetry object. - SpannerOptions.enableOpenTelemetryMetrics(); - - SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder() - // Use Otlp exporter or any other exporter of your choice. - .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()) - .build()) - .build(); - - OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() - .setMeterProvider(sdkMeterProvider) - .build() - - SpannerOptions options = SpannerOptions.newBuilder() - // Inject OpenTelemetry object via Spanner Options or register OpenTelemetry object as Global - .setOpenTelemetry(openTelemetry) - .build(); - - Spanner spanner = options.getService(); - ``` + Cloud Spanner client supports [client-side metrics](https://cloud.google.com/spanner/docs/view-manage-client-side-metrics) that you can use along with server-side metrics to optimize performance and troubleshoot performance issues if they occur. - #### OpenTelemetry SQL Statement Tracing - The OpenTelemetry traces that are generated by the Java client include any request and transaction - tags that have been set. The traces can also include the SQL statements that are executed and the - name of the thread that executes the statement. Enable this with the `enableExtendedTracing` - option: + Client-side metrics are measured from the time a request leaves your application to the time your application receives the response. + In contrast, server-side metrics are measured from the time Spanner receives a request until the last byte of data is sent to the client. + + These metrics are enabled by default. You can opt out of using client-side metrics with the following code: ``` SpannerOptions options = SpannerOptions.newBuilder() - .setOpenTelemetry(openTelemetry) - .setEnableExtendedTracing(true) + .setBuiltInMetricsEnabled(false) .build(); ``` - This option can also be enabled by setting the environment variable - `SPANNER_ENABLE_EXTENDED_TRACING=true`. - - #### OpenTelemetry API Tracing - You can enable tracing of each API call that the Spanner client executes with the `enableApiTracing` - option. These traces also include any retry attempts for an API call: - - ``` - SpannerOptions options = SpannerOptions.newBuilder() - .setOpenTelemetry(openTelemetry) - .setEnableApiTracing(true) - .build(); - ``` - - This option can also be enabled by setting the environment variable - `SPANNER_ENABLE_API_TRACING=true`. + You can also disable these metrics by setting `SPANNER_DISABLE_BUILTIN_METRICS` to `true`. - > Note: The attribute keys that are used for additional information about retry attempts and the number of requests might change in a future release. - - - ### Instrument with OpenCensus - - > Note: OpenCensus project is deprecated. See [Sunsetting OpenCensus](https://opentelemetry.io/blog/2023/sunsetting-opencensus/). - We recommend migrating to OpenTelemetry, the successor project. - - Cloud Spanner client supports [Opencensus Metrics](https://opencensus.io/stats/), - which gives insight into the client internals and aids in debugging/troubleshooting - production issues. OpenCensus metrics will provide you with enough data to enable you to - spot, and investigate the cause of any unusual deviations from normal behavior. - - All Cloud Spanner Metrics are prefixed with `cloud.google.com/java/spanner` - - The metrics are tagged with: - * `database`: the target database name. - * `instance_id`: the instance id of the target Spanner instance. - * `client_id`: the user defined database client id. - * `library_version`: the version of the library that you're using. - - - By default, the functionality is disabled. You need to include opencensus-impl - dependency to collect the data and exporter dependency to export to backend. - - [Click here](https://medium.com/google-cloud/troubleshooting-cloud-spanner-applications-with-opencensus-2cf424c4c590) for more information. - - #### OpenCensus Dependencies - - If you are using Maven, add this to your pom.xml file - ```xml - - io.opencensus - opencensus-impl - 0.30.0 - runtime - - - io.opencensus - opencensus-exporter-stats-stackdriver - 0.30.0 - - ``` - If you are using Gradle, add this to your dependencies - ```Groovy - compile 'io.opencensus:opencensus-impl:0.30.0' - compile 'io.opencensus:opencensus-exporter-stats-stackdriver:0.30.0' - ``` - - #### Configure the OpenCensus Exporter - - At the start of your application configure the exporter: - - ```java - import io.opencensus.exporter.stats.stackdriver.StackdriverStatsExporter; - // Enable OpenCensus exporters to export metrics to Stackdriver Monitoring. - // Exporters use Application Default Credentials to authenticate. - // See https://developers.google.com/identity/protocols/application-default-credentials - // for more details. - // The minimum reporting period for Stackdriver is 1 minute. - StackdriverStatsExporter.createAndRegister(); - ``` - #### Enable RPC Views - - By default, all session metrics are enabled. To enable RPC views, use either of the following method: - - ```java - // Register views for GFE metrics, including gfe_latency and gfe_header_missing_count. - SpannerRpcViews.registerGfeLatencyAndHeaderMissingCountViews(); - - // Register GFE Latency view. - SpannerRpcViews.registerGfeLatencyView(); - - // Register GFE Header Missing Count view. - SpannerRpcViews.registerGfeHeaderMissingCountView(); - ``` + > Note: Client-side metrics needs `monitoring.timeSeries.create` IAM permission to export metrics data. Ask your administrator to grant your service account the [Monitoring Metric Writer](https://cloud.google.com/iam/docs/roles-permissions/monitoring#monitoring.metricWriter) (roles/monitoring.metricWriter) IAM role on the project. ## Traces Cloud Spanner client supports OpenTelemetry Traces, which gives insight into the client internals and aids in debugging/troubleshooting production issues. By default, the functionality is disabled. You need to add OpenTelemetry dependencies, enable OpenTelemetry traces and must configure the OpenTelemetry with appropriate exporters at the startup of your application. + See [Configure client-side tracing](https://cloud.google.com/spanner/docs/set-up-tracing#configure-client-side-tracing) for more details on configuring traces. + #### OpenTelemetry Dependencies If you are using Maven, add this to your pom.xml file @@ -348,10 +161,33 @@ custom_content: | `SPANNER_ENABLE_API_TRACING=true`. > Note: The attribute keys that are used for additional information about retry attempts and the number of requests might change in a future release. + + #### End-to-end Tracing + + In addition to client-side tracing, you can opt in for [end-to-end tracing](https://cloud.google.com/spanner/docs/tracing-overview#end-to-end-side-tracing). End-to-end tracing helps you understand and debug latency issues that are specific to Spanner such as the following: + * Identify whether the latency is due to network latency between your application and Spanner, or if the latency is occurring within Spanner. + * Identify the Google Cloud regions that your application requests are being routed through and if there is a cross-region request. A cross-region request usually means higher latencies between your application and Spanner. + + ``` + SpannerOptions options = SpannerOptions.newBuilder() + .setOpenTelemetry(openTelemetry) + .setEnableEndToEndTracing(true) + .build(); + ``` + + Refer to [Configure end-to-end tracing](https://cloud.google.com/spanner/docs/set-up-tracing#configure-end-to-end-tracing) to configure end-to-end tracing and to understand its attributes. + + > Note: End-to-end traces can only be exported to [Cloud Trace](https://cloud.google.com/trace/docs). + + + ## Instrument with OpenCensus + > Note: OpenCensus project is deprecated. See [Sunsetting OpenCensus](https://opentelemetry.io/blog/2023/sunsetting-opencensus/). + We recommend migrating to OpenTelemetry, the successor project. + ## Migrate from OpenCensus to OpenTelemetry - > Using the [OpenTelemetry OpenCensus Bridge](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-opencensus-shim), you can immediately begin exporting your metrics and traces with OpenTelemetry + > Using the [OpenTelemetry OpenCensus Bridge](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-opencensus-shim), you can immediately begin exporting your metrics and traces with OpenTelemetry. #### Disable OpenCensus metrics Disable OpenCensus metrics for Spanner by including the following code if you still possess OpenCensus dependencies and exporter. diff --git a/.repo-metadata.json b/.repo-metadata.json index 670b37d595a..44368d809da 100644 --- a/.repo-metadata.json +++ b/.repo-metadata.json @@ -13,7 +13,7 @@ "api_id": "spanner.googleapis.com", "library_type": "GAPIC_COMBO", "requires_billing": true, - "codeowner_team": "@googleapis/api-spanner-java", + "codeowner_team": "@googleapis/spanner-team", "excluded_poms": "google-cloud-spanner-bom", "issue_tracker": "https://issuetracker.google.com/issues?q=componentid:190851%2B%20status:open", "recommended_package": "com.google.cloud.spanner", diff --git a/CHANGELOG.md b/CHANGELOG.md index 1436e341430..917ff872041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,720 @@ # Changelog +## [6.113.0](https://github.com/googleapis/java-spanner/compare/v6.112.0...v6.113.0) (2026-03-25) + + +### Features + +* Switch Eef metrics to using built in open telemetry ([#4385](https://github.com/googleapis/java-spanner/issues/4385)) ([0d0ad41](https://github.com/googleapis/java-spanner/commit/0d0ad4194dbfe46c505abcd237c93cbd39197331)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.68.0 ([bb63e92](https://github.com/googleapis/java-spanner/commit/bb63e929e96ee54e849e6295c074d4f4586c99f3)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.58.0 ([#4390](https://github.com/googleapis/java-spanner/issues/4390)) ([7f35761](https://github.com/googleapis/java-spanner/commit/7f357615c24ebb313043eabeae397f689866ad50)) +* Update googleapis/sdk-platform-java action to v2.68.0 ([#4389](https://github.com/googleapis/java-spanner/issues/4389)) ([737dfac](https://github.com/googleapis/java-spanner/commit/737dfac5972c921c8fd50a1e3c7c11652f67874d)) + +## [6.112.0](https://github.com/googleapis/java-spanner/compare/v6.111.1...v6.112.0) (2026-03-17) + + +### Features + +* Ability to update credentials on long running client ([#4371](https://github.com/googleapis/java-spanner/issues/4371)) ([e238990](https://github.com/googleapis/java-spanner/commit/e238990077badb063b1b05b0d71f58859434f7ee)) +* Add SI, adapt, split point related proto ([7aa4d90](https://github.com/googleapis/java-spanner/commit/7aa4d90cd4f001713ee2b0b5113303a748b237e0)) +* **spanner:** Include cache updates and routing hint into BeginTransaction and Commit request/response respectively ([7aa4d90](https://github.com/googleapis/java-spanner/commit/7aa4d90cd4f001713ee2b0b5113303a748b237e0)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.67.0 ([7aa4d90](https://github.com/googleapis/java-spanner/commit/7aa4d90cd4f001713ee2b0b5113303a748b237e0)) +* Fix unclosed literal error for consecutive backslashes ([#4387](https://github.com/googleapis/java-spanner/issues/4387)) ([f4884a8](https://github.com/googleapis/java-spanner/commit/f4884a83d15dcff6e246c7db47c8bafc3369a0a3)) + +## [6.111.1](https://github.com/googleapis/java-spanner/compare/v6.111.0...v6.111.1) (2026-03-03) + + +### Bug Fixes + +* Retry CreateSession also when waitForMinSessions is zero ([#4360](https://github.com/googleapis/java-spanner/issues/4360)) ([9263972](https://github.com/googleapis/java-spanner/commit/92639722793a994032761155013e506c9693b464)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.57.0 ([#4358](https://github.com/googleapis/java-spanner/issues/4358)) ([1ce4b8e](https://github.com/googleapis/java-spanner/commit/1ce4b8e24bac44c89f742f0afb395ae4c711abfd)) +* Update googleapis/sdk-platform-java action to v2.67.0 ([#4359](https://github.com/googleapis/java-spanner/issues/4359)) ([23781d9](https://github.com/googleapis/java-spanner/commit/23781d9f05db66d033d4d9125707a9988e1697db)) + +## [6.111.0](https://github.com/googleapis/java-spanner/compare/v6.110.0...v6.111.0) (2026-02-13) + + +### Features + +* Add E2E fallback to the spanner client. ([#4282](https://github.com/googleapis/java-spanner/issues/4282)) ([d36bd21](https://github.com/googleapis/java-spanner/commit/d36bd21a09cdd2006e53a43b6984d2a68ea24d3e)) + + +### Bug Fixes + +* Rollback transactions that are waiting for tx-id to be returned ([#4342](https://github.com/googleapis/java-spanner/issues/4342)) ([866a8c2](https://github.com/googleapis/java-spanner/commit/866a8c2d23f0d5edee1d98ead7d002b1981d5339)) + +## [6.110.0](https://github.com/googleapis/java-spanner/compare/v6.109.0...v6.110.0) (2026-02-11) + + +### Features + +* Add gRPC A66/A94 metrics ([#4333](https://github.com/googleapis/java-spanner/issues/4333)) ([485c700](https://github.com/googleapis/java-spanner/commit/485c70046e3e67dac899011580f9c350bdb31a6d)) +* ClientContext and secure parameters support ([#4316](https://github.com/googleapis/java-spanner/issues/4316)) ([6356ef2](https://github.com/googleapis/java-spanner/commit/6356ef2ce1ef87898e7bc4a6bc11174f629a9b5b)) +* Next release from main branch is 6.110.0 ([#4338](https://github.com/googleapis/java-spanner/issues/4338)) ([95ac7a7](https://github.com/googleapis/java-spanner/commit/95ac7a71463bfca4bb22f2e4ae61da97b97169ce)) +* **spanner:** Include cache updates into the ResultSet response ([aa53a43](https://github.com/googleapis/java-spanner/commit/aa53a43bdce6f4215fea8695837ad2c538598896)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.66.1 ([aa53a43](https://github.com/googleapis/java-spanner/commit/aa53a43bdce6f4215fea8695837ad2c538598896)) +* Preserve channel configurator for grpc-gcp and add opt-out for gcp OTel metrics ([#4329](https://github.com/googleapis/java-spanner/issues/4329)) ([2565137](https://github.com/googleapis/java-spanner/commit/25651378831fcd98ef48802872fe82a42cfa4942)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.56.1 ([#4331](https://github.com/googleapis/java-spanner/issues/4331)) ([2fd403f](https://github.com/googleapis/java-spanner/commit/2fd403f3c994b1b038e876be6e58ecadf731d848)) + +## [6.109.0](https://github.com/googleapis/java-spanner/compare/v6.108.0...v6.109.0) (2026-02-02) + + +### Features + +* Adding Send and Ack Mutation Support for Cloud Spanner Queue ([#4298](https://github.com/googleapis/java-spanner/issues/4298)) ([4b637ac](https://github.com/googleapis/java-spanner/commit/4b637ac0e4d6d696f3da8ae7fbac31c877aceba9)) + + +### Documentation + +* Add snippet for ReadLockMode configuration at client and transaction ([#4305](https://github.com/googleapis/java-spanner/issues/4305)) ([0fd4098](https://github.com/googleapis/java-spanner/commit/0fd40983b3bbb2f753e07036cedea9e7b9e26132)) + +## [6.108.0](https://github.com/googleapis/java-spanner/compare/v6.107.0...v6.108.0) (2026-01-28) + + +### Features + +* Add a ClientContext field to Spanner requests ([da6880e](https://github.com/googleapis/java-spanner/commit/da6880e425b7be55b11ba400046692e7af09bccb)) +* Add ChannelFinder server interfaces ([#4293](https://github.com/googleapis/java-spanner/issues/4293)) ([0b7a32e](https://github.com/googleapis/java-spanner/commit/0b7a32e7a24c027387a768a75632022a29562ef6)) +* Exposing total CPU related fields in AutoscalingConfig ([da6880e](https://github.com/googleapis/java-spanner/commit/da6880e425b7be55b11ba400046692e7af09bccb)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.66.0 ([da6880e](https://github.com/googleapis/java-spanner/commit/da6880e425b7be55b11ba400046692e7af09bccb)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.56.0 ([#4313](https://github.com/googleapis/java-spanner/issues/4313)) ([f7d0abc](https://github.com/googleapis/java-spanner/commit/f7d0abc241acb4c58d0ac3c60a7b18f5512275df)) +* Update googleapis/sdk-platform-java action to v2.66.0 ([#4314](https://github.com/googleapis/java-spanner/issues/4314)) ([d09a900](https://github.com/googleapis/java-spanner/commit/d09a900e26223eb9d646e33d29fc5692b8aba36a)) + +## [6.107.0](https://github.com/googleapis/java-spanner/compare/v6.106.0...v6.107.0) (2026-01-16) + + +### Features + +* Add Dynamic Channel Pooling (DCP) support to Connection API ([#4299](https://github.com/googleapis/java-spanner/issues/4299)) ([bba03a4](https://github.com/googleapis/java-spanner/commit/bba03a44dbfbd59288ecd33e3e53276809ad69b1)) +* Add SsFormat encoding library ([#4292](https://github.com/googleapis/java-spanner/issues/4292)) ([338a9b1](https://github.com/googleapis/java-spanner/commit/338a9b1409cafedcdef674bdff09a72c3f2cd772)) + + +### Dependencies + +* Update dependency com.google.api.grpc:proto-google-cloud-trace-v1 to v2.82.0 ([#4227](https://github.com/googleapis/java-spanner/issues/4227)) ([22bc6cf](https://github.com/googleapis/java-spanner/commit/22bc6cf3431f6e507d384f6e86a36503f1175ee7)) +* Update dependency com.google.cloud:google-cloud-monitoring to v3.83.0 ([#4169](https://github.com/googleapis/java-spanner/issues/4169)) ([61ae915](https://github.com/googleapis/java-spanner/commit/61ae915242a3c8a0aa1385bc1367f67df2c209d6)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.55.1 ([#4302](https://github.com/googleapis/java-spanner/issues/4302)) ([52acc0c](https://github.com/googleapis/java-spanner/commit/52acc0c620fec0aa67ecd81d634eec271fe4e429)) +* Update dependency net.bytebuddy:byte-buddy to v1.18.4 ([#4244](https://github.com/googleapis/java-spanner/issues/4244)) ([c8e4d91](https://github.com/googleapis/java-spanner/commit/c8e4d912155ab6829498822dcf0783fac5fe2747)) +* Update google.cloud.monitoring.version to v3.83.0 ([#4270](https://github.com/googleapis/java-spanner/issues/4270)) ([7ae68c8](https://github.com/googleapis/java-spanner/commit/7ae68c8e889f44f1057310bc45b70c086af9c385)) +* Update googleapis/sdk-platform-java action to v2.65.1 ([#4301](https://github.com/googleapis/java-spanner/issues/4301)) ([7d98f4e](https://github.com/googleapis/java-spanner/commit/7d98f4e12843826c18cbb8e0998c8687c94fc3d2)) + +## [6.106.0](https://github.com/googleapis/java-spanner/compare/v6.105.0...v6.106.0) (2026-01-07) + + +### Features + +* Support SHOW DEFAULT_TRANSACTION_ISOLATION for PG databases ([#4285](https://github.com/googleapis/java-spanner/issues/4285)) ([aec0515](https://github.com/googleapis/java-spanner/commit/aec051514dd3d122a7231eb6d25d1aaec8d90bda)) + + +### Bug Fixes + +* Adjust the initial polling delay for ddl operations ([#4275](https://github.com/googleapis/java-spanner/issues/4275)) ([8d36967](https://github.com/googleapis/java-spanner/commit/8d36967d010bed8f5a4a0c32f9ec1b5fe7d33e1d)) +* Retry creation of multiplexed session ([#4288](https://github.com/googleapis/java-spanner/issues/4288)) ([735e29e](https://github.com/googleapis/java-spanner/commit/735e29ed394faea9f5e697b5934a1f4895055d56)) + +## [6.105.0](https://github.com/googleapis/java-spanner/compare/v6.104.0...v6.105.0) (2025-12-16) + + +### Features + +* Add support of dynamic channel pooling ([#4265](https://github.com/googleapis/java-spanner/issues/4265)) ([923a14a](https://github.com/googleapis/java-spanner/commit/923a14aad99ff6fc91868f02d657145dd0f31c18)) +* Include RequestID in requests and errors ([#4263](https://github.com/googleapis/java-spanner/issues/4263)) ([afd7d6b](https://github.com/googleapis/java-spanner/commit/afd7d6b008f13d7a4d1a3b7f924122bd41d14b59)) +* Make grpc-gcp default enabled ([#4239](https://github.com/googleapis/java-spanner/issues/4239)) ([bb82f9e](https://github.com/googleapis/java-spanner/commit/bb82f9e55c40cac29b090e54be780c2e42545ee1)) + + +### Bug Fixes + +* Refine connecitivity metrics to capture RPCs with no response he… ([#4252](https://github.com/googleapis/java-spanner/issues/4252)) ([7b49412](https://github.com/googleapis/java-spanner/commit/7b4941221969f48d077ff459214c7d1e65ef843c)) +* Retry as PDML dit not retry Resource limit exceeded ([#4258](https://github.com/googleapis/java-spanner/issues/4258)) ([c735d42](https://github.com/googleapis/java-spanner/commit/c735d42875092b0d1482fe641b99645f288cdf4f)), closes [#4253](https://github.com/googleapis/java-spanner/issues/4253) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.2 ([#4261](https://github.com/googleapis/java-spanner/issues/4261)) ([61dfd62](https://github.com/googleapis/java-spanner/commit/61dfd620637da6ef76b699edbad1095c26b81950)) +* Update googleapis/sdk-platform-java action to v2.64.2 ([#4262](https://github.com/googleapis/java-spanner/issues/4262)) ([f9505a9](https://github.com/googleapis/java-spanner/commit/f9505a97bdd9f6da7dd5ab1b60b47f7ed0a70402)) + +## [6.104.0](https://github.com/googleapis/java-spanner/compare/v6.103.0...v6.104.0) (2025-12-03) + + +### Features + +* Include PostgreSQL error code in exceptions ([#4236](https://github.com/googleapis/java-spanner/issues/4236)) ([5874f8b](https://github.com/googleapis/java-spanner/commit/5874f8b3e65adc3e78832866ebe667cd746e2d7f)) + + +### Bug Fixes + +* Backslash at end of string literal was misinterpreted ([#4246](https://github.com/googleapis/java-spanner/issues/4246)) ([477ca51](https://github.com/googleapis/java-spanner/commit/477ca51baf6cd1a0a5773bd53677f64195100ae2)) +* Fix transaction tag issue with the blind-write ([#4243](https://github.com/googleapis/java-spanner/issues/4243)) ([cf2ba69](https://github.com/googleapis/java-spanner/commit/cf2ba695cdb4038dc8e3ca3e9859231a2203da60)) + +## [6.103.0](https://github.com/googleapis/java-spanner/compare/v6.102.1...v6.103.0) (2025-11-17) + + +### Features + +* Add grpc.xds.resource_type label to xDS client metrics ([#4222](https://github.com/googleapis/java-spanner/issues/4222)) ([97bed3c](https://github.com/googleapis/java-spanner/commit/97bed3cf1a9df542acc4685c2ce4dbfa629b2cd3)) +* Exposing AutoscalingConfig in InstancePartition ([22edecf](https://github.com/googleapis/java-spanner/commit/22edecf8518844860c3cb47883544efd36cbc311)) + + +### Bug Fixes + +* Add env var to allow disabling directpath bound token ([#4189](https://github.com/googleapis/java-spanner/issues/4189)) ([0ca9541](https://github.com/googleapis/java-spanner/commit/0ca95412c778e3478cb66e4bea124396326c6056)) +* Allow DML THEN RETURN with retryAbortsInternally=false ([#4225](https://github.com/googleapis/java-spanner/issues/4225)) ([f49cc47](https://github.com/googleapis/java-spanner/commit/f49cc47e663836696ef151738510e68324e139dc)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.64.1 ([22edecf](https://github.com/googleapis/java-spanner/commit/22edecf8518844860c3cb47883544efd36cbc311)) +* Remove URL encoding in project name ([#4188](https://github.com/googleapis/java-spanner/issues/4188)) ([abba0c1](https://github.com/googleapis/java-spanner/commit/abba0c1730ea792407bea073ea65da55128cd764)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#4166](https://github.com/googleapis/java-spanner/issues/4166)) ([50a56f7](https://github.com/googleapis/java-spanner/commit/50a56f7d47541dd581f7b425df36a080ecc11a74)) +* Update all tracing and telemetry dependencies ([#4230](https://github.com/googleapis/java-spanner/issues/4230)) ([d60124c](https://github.com/googleapis/java-spanner/commit/d60124cbe317d4c2489ea35de81943cfd2b8f697)) +* Update dependency com.google.api.grpc:proto-google-cloud-trace-v1 to v2.79.0 ([#4172](https://github.com/googleapis/java-spanner/issues/4172)) ([3a329fd](https://github.com/googleapis/java-spanner/commit/3a329fdb2fc68ff9d19717b534dd667f931d51fd)) +* Update dependency com.google.auto.value:auto-value-annotations to v1.11.1 ([#4216](https://github.com/googleapis/java-spanner/issues/4216)) ([84150c7](https://github.com/googleapis/java-spanner/commit/84150c73bbed2a6d58408ae0b8bd59709fc751db)) +* Update dependency com.google.cloud:google-cloud-trace to v2.79.0 ([#4174](https://github.com/googleapis/java-spanner/issues/4174)) ([3e93ca0](https://github.com/googleapis/java-spanner/commit/3e93ca077b94ad06867e3c9fdfe19527855423a2)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.1 ([#4193](https://github.com/googleapis/java-spanner/issues/4193)) ([ad235cf](https://github.com/googleapis/java-spanner/commit/ad235cfc9041f52c2f7b76f67eeaa6c03c5840aa)) +* Update dependency commons-cli:commons-cli to v1.11.0 ([#4218](https://github.com/googleapis/java-spanner/issues/4218)) ([33449ba](https://github.com/googleapis/java-spanner/commit/33449baf64a3d5b78fff323737ffeb28c8a9461b)) +* Update dependency commons-io:commons-io to v2.21.0 ([#4198](https://github.com/googleapis/java-spanner/issues/4198)) ([1f31169](https://github.com/googleapis/java-spanner/commit/1f3116947069ac11c948b510e6a9a7a8a6aa6061)) +* Update dependency net.bytebuddy:byte-buddy to v1.18.1 ([#4214](https://github.com/googleapis/java-spanner/issues/4214)) ([0c1d843](https://github.com/googleapis/java-spanner/commit/0c1d843ad42f213d4d9ec2d98a12e21e991ac010)) +* Update dependency net.bytebuddy:byte-buddy-agent to v1.18.1 ([#4215](https://github.com/googleapis/java-spanner/issues/4215)) ([76ce01b](https://github.com/googleapis/java-spanner/commit/76ce01b99e5c1274e9103c27ebc6bbdf482bebcd)) +* Update opentelemetry.version to v1.56.0 ([#4167](https://github.com/googleapis/java-spanner/issues/4167)) ([a24f219](https://github.com/googleapis/java-spanner/commit/a24f21930978583a0b8d7d39130fa0fc3fec7b2d)) + +## [6.102.1](https://github.com/googleapis/java-spanner/compare/v6.102.0...v6.102.1) (2025-10-23) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.63.0 ([c1a8238](https://github.com/googleapis/java-spanner/commit/c1a8238af33a083411f63cf6276eb683ee67ac6a)) +* Do a quick check if the application runs on GCP ([#4163](https://github.com/googleapis/java-spanner/issues/4163)) ([b9d7daf](https://github.com/googleapis/java-spanner/commit/b9d7daf000c0fb8b67142c6161bb578cadf49b18)) +* Migrate away from GoogleCredentials.fromStream() usages ([#4151](https://github.com/googleapis/java-spanner/issues/4151)) ([94d0474](https://github.com/googleapis/java-spanner/commit/94d0474ace62ea1059e5b69243f0b6eef31ddd06)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#4158](https://github.com/googleapis/java-spanner/issues/4158)) ([b32ebcf](https://github.com/googleapis/java-spanner/commit/b32ebcf96bbf696b1eb84204622463fac59be017)) +* Update actions/checkout action to v5 ([#4161](https://github.com/googleapis/java-spanner/issues/4161)) ([02a17c6](https://github.com/googleapis/java-spanner/commit/02a17c6e6253e026cb3c6360eb925a322143b518)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.53.0 ([#4178](https://github.com/googleapis/java-spanner/issues/4178)) ([24fe194](https://github.com/googleapis/java-spanner/commit/24fe194fa3595b2ab817b9fc4cd57840250fef1f)) +* Update dependency net.bytebuddy:byte-buddy to v1.17.8 ([#4154](https://github.com/googleapis/java-spanner/issues/4154)) ([c911381](https://github.com/googleapis/java-spanner/commit/c911381c2ca9cd46fbeb831c659aaf55f21437f2)) +* Update dependency net.bytebuddy:byte-buddy-agent to v1.17.8 ([#4155](https://github.com/googleapis/java-spanner/issues/4155)) ([3075df7](https://github.com/googleapis/java-spanner/commit/3075df714b1787512174b3f18cbc802359d442dc)) +* Update googleapis/sdk-platform-java action to v2.63.0 ([#4179](https://github.com/googleapis/java-spanner/issues/4179)) ([5f48191](https://github.com/googleapis/java-spanner/commit/5f481913d60372fccf399c5c0e168b7d0c553ba0)) + + +### Documentation + +* Add warning for encoded credential ([#4182](https://github.com/googleapis/java-spanner/issues/4182)) ([92620f9](https://github.com/googleapis/java-spanner/commit/92620f969908a8ba7fcf92d0b350a8c4d05398f8)) + +## [6.102.0](https://github.com/googleapis/java-spanner/compare/v6.101.1...v6.102.0) (2025-10-08) + + +### Features + +* Add connection property for gRPC interceptor provider ([#4149](https://github.com/googleapis/java-spanner/issues/4149)) ([deb8dff](https://github.com/googleapis/java-spanner/commit/deb8dff6c01c37a3158e8f4a28ef5e821d10092a)) +* Support statement_timeout in connection url ([#4103](https://github.com/googleapis/java-spanner/issues/4103)) ([542c6aa](https://github.com/googleapis/java-spanner/commit/542c6aa63bfdd526070f14cb76921dd34527c1f9)) + + +### Bug Fixes + +* Automatically set default_sequence_kind for CREATE SEQUENCE ([#4105](https://github.com/googleapis/java-spanner/issues/4105)) ([3beea6a](https://github.com/googleapis/java-spanner/commit/3beea6ac4eb53b70db34e0a2d2e33e56f450c88b)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.3 ([7047a3a](https://github.com/googleapis/java-spanner/commit/7047a3ae31aae51e9e23758fe004b93855a0ee4b)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#4069](https://github.com/googleapis/java-spanner/issues/4069)) ([4c88eb9](https://github.com/googleapis/java-spanner/commit/4c88eb91a321aa718f957296012f9e7501c7caec)) +* Update actions/checkout action to v5 ([#4106](https://github.com/googleapis/java-spanner/issues/4106)) ([14ebdb3](https://github.com/googleapis/java-spanner/commit/14ebdb35c33442c4e0f70d63dce3425edb730525)) +* Update actions/setup-java action to v5 ([#4071](https://github.com/googleapis/java-spanner/issues/4071)) ([e23134a](https://github.com/googleapis/java-spanner/commit/e23134a2f864e8abd2890ac3a81ff6b668afbe63)) +* Update all dependencies ([#4099](https://github.com/googleapis/java-spanner/issues/4099)) ([b262edc](https://github.com/googleapis/java-spanner/commit/b262edcfc4713bb64986bc4acd3f02b69d3367f8)) +* Update dependency com.google.api.grpc:grpc-google-cloud-monitoring-v3 to v3.77.0 ([#4117](https://github.com/googleapis/java-spanner/issues/4117)) ([2451ca2](https://github.com/googleapis/java-spanner/commit/2451ca2abe1dd2de3907b88e8d18beab1a15a634)) +* Update dependency com.google.api.grpc:proto-google-cloud-monitoring-v3 to v3.77.0 ([#4143](https://github.com/googleapis/java-spanner/issues/4143)) ([6c9dc26](https://github.com/googleapis/java-spanner/commit/6c9dc26330cf66f196adc2203323a482e08f0325)) +* Update dependency com.google.api.grpc:proto-google-cloud-trace-v1 to v2.76.0 ([#4144](https://github.com/googleapis/java-spanner/issues/4144)) ([d566a42](https://github.com/googleapis/java-spanner/commit/d566a4295be018070169ba082a018394a2e60b45)) +* Update dependency com.google.cloud:google-cloud-monitoring to v3.77.0 ([#4145](https://github.com/googleapis/java-spanner/issues/4145)) ([8917c05](https://github.com/googleapis/java-spanner/commit/8917c054410e4035d6d4e201e43599d5ddc1fadd)) +* Update dependency com.google.cloud:google-cloud-monitoring to v3.77.0 ([#4146](https://github.com/googleapis/java-spanner/issues/4146)) ([4ebea1a](https://github.com/googleapis/java-spanner/commit/4ebea1adf726069084087ce46900f3174658055c)) +* Update dependency com.google.cloud:google-cloud-trace to v2.76.0 ([#4147](https://github.com/googleapis/java-spanner/issues/4147)) ([4b1d4af](https://github.com/googleapis/java-spanner/commit/4b1d4af19336e493af38a1e58c95786da3892d34)) +* Update dependency com.google.cloud:google-cloud-trace to v2.76.0 ([#4148](https://github.com/googleapis/java-spanner/issues/4148)) ([8f91a89](https://github.com/googleapis/java-spanner/commit/8f91a894771653213b6fcded5795349ad7ea6724)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.3 ([#4107](https://github.com/googleapis/java-spanner/issues/4107)) ([8a8a042](https://github.com/googleapis/java-spanner/commit/8a8a042494b092b3dddd0c9606a63197d8a23555)) +* Update dependency org.json:json to v20250517 ([#3881](https://github.com/googleapis/java-spanner/issues/3881)) ([5658c83](https://github.com/googleapis/java-spanner/commit/5658c8378aa2e8028d4ef7dfaf94b647f33cd812)) +* Update googleapis/sdk-platform-java action to v2.62.3 ([#4108](https://github.com/googleapis/java-spanner/issues/4108)) ([65913ec](https://github.com/googleapis/java-spanner/commit/65913ec0638fec4ea536cf42f8fe25460133f68e)) + +## [6.101.1](https://github.com/googleapis/java-spanner/compare/v6.101.0...v6.101.1) (2025-09-26) + + +### Bug Fixes + +* Potential NullPointerException in LocalConnectionChecker ([#4092](https://github.com/googleapis/java-spanner/issues/4092)) ([3b9f597](https://github.com/googleapis/java-spanner/commit/3b9f597ba60199a16556824568b24908ce938a69)) + +## [6.101.0](https://github.com/googleapis/java-spanner/compare/v6.100.0...v6.101.0) (2025-09-26) + + +### Features + +* Add transaction_timeout connection property ([#4056](https://github.com/googleapis/java-spanner/issues/4056)) ([cdc52d4](https://github.com/googleapis/java-spanner/commit/cdc52d49b39c57e7255f4e09fb33a41f4810397d)) +* TPC support ([#4055](https://github.com/googleapis/java-spanner/issues/4055)) ([7625cce](https://github.com/googleapis/java-spanner/commit/7625cce9ad48b14a1cff9c2ede86a066ea292bef)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.2 ([8d6cbf6](https://github.com/googleapis/java-spanner/commit/8d6cbf6bea9cbd823b8f0070516e34b4d8428e87)) +* Potential NullPointerException in Value#hashCode ([#4046](https://github.com/googleapis/java-spanner/issues/4046)) ([74abb34](https://github.com/googleapis/java-spanner/commit/74abb341e2ea42bbf0a2de4ec3e3555335b5fd9f)) +* Recalculate remaining statement timeout after retry ([#4053](https://github.com/googleapis/java-spanner/issues/4053)) ([5e26596](https://github.com/googleapis/java-spanner/commit/5e26596f4f9c924260da0908920854d8ddfc626b)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.2 ([#4057](https://github.com/googleapis/java-spanner/issues/4057)) ([d782aff](https://github.com/googleapis/java-spanner/commit/d782aff63ff81e1b760690d4dee3e566028d522e)) + +## [6.100.0](https://github.com/googleapis/java-spanner/compare/v6.99.0...v6.100.0) (2025-09-11) + + +### Features + +* Read_lock_mode support for connections ([#4031](https://github.com/googleapis/java-spanner/issues/4031)) ([261abb4](https://github.com/googleapis/java-spanner/commit/261abb4b9c5ff00fac2d816a31926b23264657c4)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.1 ([e9773a7](https://github.com/googleapis/java-spanner/commit/e9773a7aa27a414d56093b4e09e0f197a07b5980)) +* Disable afe_connectivity_error_count metric ([#4041](https://github.com/googleapis/java-spanner/issues/4041)) ([f89c1c0](https://github.com/googleapis/java-spanner/commit/f89c1c0517ba6b895f405b0085b8df41aac952be)) +* Skip session delete in case of multiplexed sessions ([#4029](https://github.com/googleapis/java-spanner/issues/4029)) ([8bcb09d](https://github.com/googleapis/java-spanner/commit/8bcb09d141fe986c92ccacbaa9a45302c5c8e79d)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.1 ([#4034](https://github.com/googleapis/java-spanner/issues/4034)) ([13bfa7c](https://github.com/googleapis/java-spanner/commit/13bfa7c68c7ea887e679fb5504dceb85cbb43cb9)) + + +### Documentation + +* A comment for field `ranges` in message `.google.spanner.v1.KeySet` is changed ([e9773a7](https://github.com/googleapis/java-spanner/commit/e9773a7aa27a414d56093b4e09e0f197a07b5980)) + +## [6.99.0](https://github.com/googleapis/java-spanner/compare/v6.98.1...v6.99.0) (2025-08-26) + + +### Features + +* Support read lock mode for R/W transactions ([#4010](https://github.com/googleapis/java-spanner/issues/4010)) ([7d752d6](https://github.com/googleapis/java-spanner/commit/7d752d686e638b6266aab3a5188c01641d2f9adc)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.0 ([52c68db](https://github.com/googleapis/java-spanner/commit/52c68db5c75f24a066c2e828ed79917c824f699b)) +* GetCommitResponse() should return error if tx has not committed ([#4021](https://github.com/googleapis/java-spanner/issues/4021)) ([a2c179f](https://github.com/googleapis/java-spanner/commit/a2c179f2e7c19d295bdbf9cf1bbd1c5562dd9e21)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.0 ([#4024](https://github.com/googleapis/java-spanner/issues/4024)) ([7e3294f](https://github.com/googleapis/java-spanner/commit/7e3294f6d42bddb4cfff67334118f615c90c3bb7)) + +## [6.98.1](https://github.com/googleapis/java-spanner/compare/v6.98.0...v6.98.1) (2025-08-11) + + +### Bug Fixes + +* Add missing span.end calls for AsyncTransactionManager ([#4012](https://github.com/googleapis/java-spanner/issues/4012)) ([1a4adb4](https://github.com/googleapis/java-spanner/commit/1a4adb4d70c3a3822fa6bda93d689f2dae1835fa)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.61.0 ([8156ef3](https://github.com/googleapis/java-spanner/commit/8156ef31d93932c14f9fdd13c8c5e5b7ce370ba5)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.51.0 ([#4013](https://github.com/googleapis/java-spanner/issues/4013)) ([4e90c29](https://github.com/googleapis/java-spanner/commit/4e90c29ce3447d14411368e45a39c7b0965cb40a)) + +## [6.98.0](https://github.com/googleapis/java-spanner/compare/v6.97.1...v6.98.0) (2025-07-31) + + +### Features + +* Proto changes for an internal api ([675e90b](https://github.com/googleapis/java-spanner/commit/675e90b4582b4fc968118121e6c23ec98ee178e9)) +* **spanner:** A new field `snapshot_timestamp` is added to message `.google.spanner.v1.CommitResponse` ([675e90b](https://github.com/googleapis/java-spanner/commit/675e90b4582b4fc968118121e6c23ec98ee178e9)) +* Support Exemplar ([#3997](https://github.com/googleapis/java-spanner/issues/3997)) ([fcf0a01](https://github.com/googleapis/java-spanner/commit/fcf0a0182a33f229e865e4593635efaed34d6dac)) +* Use multiplex sessions for RW and Partition Ops ([#3996](https://github.com/googleapis/java-spanner/issues/3996)) ([a882204](https://github.com/googleapis/java-spanner/commit/a882204e07a2084b228c14fb37ac53e4e33d0f59)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.60.2 ([675e90b](https://github.com/googleapis/java-spanner/commit/675e90b4582b4fc968118121e6c23ec98ee178e9)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.2 ([#4004](https://github.com/googleapis/java-spanner/issues/4004)) ([986c0e0](https://github.com/googleapis/java-spanner/commit/986c0e07fddecd51cd310a9759ce1d41c1f5c657)) + +## [6.97.1](https://github.com/googleapis/java-spanner/compare/v6.97.0...v6.97.1) (2025-07-15) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.1 ([#3992](https://github.com/googleapis/java-spanner/issues/3992)) ([69ffd72](https://github.com/googleapis/java-spanner/commit/69ffd7282220b8b12c6b9b64d8856ff88068ffa2)) +* Update googleapis/sdk-platform-java action to v2.60.1 ([#3926](https://github.com/googleapis/java-spanner/issues/3926)) ([7001b7f](https://github.com/googleapis/java-spanner/commit/7001b7faaff581e26ec81c4db2c99a1e8726d5eb)) + +## [6.97.0](https://github.com/googleapis/java-spanner/compare/v6.96.1...v6.97.0) (2025-07-10) + + +### Features + +* Next release from main branch is 6.97.0 ([#3984](https://github.com/googleapis/java-spanner/issues/3984)) ([5651f61](https://github.com/googleapis/java-spanner/commit/5651f6160e1e655f118aa2e7f0203a47cd6914c0)) + + +### Bug Fixes + +* Drop max message size ([#3987](https://github.com/googleapis/java-spanner/issues/3987)) ([3eee899](https://github.com/googleapis/java-spanner/commit/3eee89965547dfa49b4282b470f625d43c92f4fd)) +* Return non-empty metadata for DataBoost queries ([#3936](https://github.com/googleapis/java-spanner/issues/3936)) ([79c0684](https://github.com/googleapis/java-spanner/commit/79c06848c0ac4eff8410dd3bd63db8675c202d94)) + +## [6.96.1](https://github.com/googleapis/java-spanner/compare/v6.96.0...v6.96.1) (2025-06-30) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.59.0 ([2836042](https://github.com/googleapis/java-spanner/commit/2836042217fe29bb967fe892bd6b492391ded95c)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.0 ([#3925](https://github.com/googleapis/java-spanner/issues/3925)) ([1372bbd](https://github.com/googleapis/java-spanner/commit/1372bbd82b7828629cbc407b78878469bc477977)) + +## [6.96.0](https://github.com/googleapis/java-spanner/compare/v6.95.1...v6.96.0) (2025-06-27) + + +### Features + +* Allow JDBC to configure directpath for connection ([#3929](https://github.com/googleapis/java-spanner/issues/3929)) ([d754f1f](https://github.com/googleapis/java-spanner/commit/d754f1f99294d86ec881583f217fa09f291a3d7a)) +* Support getOrNull and getOrDefault in Struct ([#3914](https://github.com/googleapis/java-spanner/issues/3914)) ([1dc5a3e](https://github.com/googleapis/java-spanner/commit/1dc5a3ec0ca9ea530e8691df5c2734c0a1ece559)) +* Use multiplexed sessions for read-only transactions ([#3917](https://github.com/googleapis/java-spanner/issues/3917)) ([37fdc27](https://github.com/googleapis/java-spanner/commit/37fdc27aab4e71ac141c2a2c979f864e97395a97)) + + +### Bug Fixes + +* Allow zero durations to be set for connections ([#3916](https://github.com/googleapis/java-spanner/issues/3916)) ([43ea4fa](https://github.com/googleapis/java-spanner/commit/43ea4fa68eac00801beb8e58c1eb09e9f32e5ce5)) + + +### Documentation + +* Add snippet for Repeatable Read configuration at client and transaction ([#3908](https://github.com/googleapis/java-spanner/issues/3908)) ([ff3d212](https://github.com/googleapis/java-spanner/commit/ff3d212c98276c4084f44619916d0444c9652803)) +* Update SpannerSample.java to align with best practices ([#3625](https://github.com/googleapis/java-spanner/issues/3625)) ([7bfc62d](https://github.com/googleapis/java-spanner/commit/7bfc62d3d9e57242e0dfddea090208f8c65f0f8e)) + +## [6.95.1](https://github.com/googleapis/java-spanner/compare/v6.95.0...v6.95.1) (2025-06-06) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.49.0 ([#3909](https://github.com/googleapis/java-spanner/issues/3909)) ([3de8502](https://github.com/googleapis/java-spanner/commit/3de8502b98ebb90526fc2339e279f9b710816b3b)) +* Update googleapis/sdk-platform-java action to v2.59.0 ([#3910](https://github.com/googleapis/java-spanner/issues/3910)) ([aed8bd6](https://github.com/googleapis/java-spanner/commit/aed8bd6d5a0b1e0dfab345e0de68f285e8b8aedb)) + +## [6.95.0](https://github.com/googleapis/java-spanner/compare/v6.94.0...v6.95.0) (2025-06-05) + + +### Features + +* Enable ALTS hard bound token in DirectPath ([#3904](https://github.com/googleapis/java-spanner/issues/3904)) ([2b0f2ff](https://github.com/googleapis/java-spanner/commit/2b0f2ff214f4b68dd5957bc4280edb713b77a763)) +* Enable grpc and afe metrics ([#3896](https://github.com/googleapis/java-spanner/issues/3896)) ([706f794](https://github.com/googleapis/java-spanner/commit/706f794f044c2cb1112cfdae6f379e5f2bc3f26f)) +* Last statement sample ([#3830](https://github.com/googleapis/java-spanner/issues/3830)) ([2f62816](https://github.com/googleapis/java-spanner/commit/2f62816b0af9aced1b73e25525f60f8e3e923454)) +* **spanner:** Add new change_stream.proto ([f385698](https://github.com/googleapis/java-spanner/commit/f38569865de7465ae9a37b844a9dd983571d3688)) + + +### Bug Fixes + +* Directpath_enabled attribute ([#3897](https://github.com/googleapis/java-spanner/issues/3897)) ([53bc510](https://github.com/googleapis/java-spanner/commit/53bc510145921d00bc3df04aa4cf407179ed8d8e)) + + +### Dependencies + +* Update dependency io.opentelemetry:opentelemetry-bom to v1.50.0 ([#3887](https://github.com/googleapis/java-spanner/issues/3887)) ([94b879c](https://github.com/googleapis/java-spanner/commit/94b879c8c1848fa0b14dbe8cda8390cfe9e8fce6)) + +## [6.94.0](https://github.com/googleapis/java-spanner/compare/v6.93.0...v6.94.0) (2025-05-21) + + +### Features + +* Add throughput_mode to UpdateDatabaseDdlRequest to be used by Spanner Migration Tool. See https://github.com/GoogleCloudPlatform/spanner-migration-tool ([3070f1d](https://github.com/googleapis/java-spanner/commit/3070f1db97788c2a55c553ab8a4de3419d1ccf5c)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.58.0 ([3070f1d](https://github.com/googleapis/java-spanner/commit/3070f1db97788c2a55c553ab8a4de3419d1ccf5c)) +* Remove trailing semicolons in DDL ([#3879](https://github.com/googleapis/java-spanner/issues/3879)) ([ca3a67d](https://github.com/googleapis/java-spanner/commit/ca3a67db715f398943382df1f8a9979905811ff8)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.48.0 ([#3869](https://github.com/googleapis/java-spanner/issues/3869)) ([afa17f7](https://github.com/googleapis/java-spanner/commit/afa17f73beab80639467916bc73b5c96305093aa)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.48.0 ([#3880](https://github.com/googleapis/java-spanner/issues/3880)) ([f3b00b6](https://github.com/googleapis/java-spanner/commit/f3b00b663aa897fda1bc21222d29726e6be630cb)) +* Update dependency com.google.cloud.opentelemetry:exporter-metrics to v0.34.0 ([#3861](https://github.com/googleapis/java-spanner/issues/3861)) ([676b14f](https://github.com/googleapis/java-spanner/commit/676b14f916dea783b40ddec4061bd7af157b5d98)) +* Update dependency commons-io:commons-io to v2.19.0 ([#3863](https://github.com/googleapis/java-spanner/issues/3863)) ([80a6af8](https://github.com/googleapis/java-spanner/commit/80a6af836ca29ec196a2f509831e1d36c557168f)) +* Update dependency io.opentelemetry:opentelemetry-bom to v1.50.0 ([#3865](https://github.com/googleapis/java-spanner/issues/3865)) ([ae63050](https://github.com/googleapis/java-spanner/commit/ae6305089b394be0c1eaf8ff7e188711288d87ad)) +* Update googleapis/sdk-platform-java action to v2.58.0 ([#3870](https://github.com/googleapis/java-spanner/issues/3870)) ([d1e45fa](https://github.com/googleapis/java-spanner/commit/d1e45fa88bb005529bcfb2a6ff2df44065be0fd2)) +* Update opentelemetry.version to v1.50.0 ([#3866](https://github.com/googleapis/java-spanner/issues/3866)) ([f7e09b8](https://github.com/googleapis/java-spanner/commit/f7e09b8148c0e51503255694bd3347c637724b34)) + + +### Documentation + +* Add samples for unnamed (positional) parameters ([#3849](https://github.com/googleapis/java-spanner/issues/3849)) ([035cadd](https://github.com/googleapis/java-spanner/commit/035cadd5bb77a8f9f6fb25ac8c8e5a3e186d9a22)) + +## [6.93.0](https://github.com/googleapis/java-spanner/compare/v6.92.0...v6.93.0) (2025-05-09) + + +### Features + +* Enable AFE and gRPC metrics for DP ([#3852](https://github.com/googleapis/java-spanner/issues/3852)) ([203baae](https://github.com/googleapis/java-spanner/commit/203baae3996378435095cb90e3b2c7ee71a643cd)) + + +### Bug Fixes + +* Change server timing duration attribute to float as per w3c ([#3851](https://github.com/googleapis/java-spanner/issues/3851)) ([da8dd8d](https://github.com/googleapis/java-spanner/commit/da8dd8da3171a073d7b450d4413936351a4c1060)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.57.0 ([23b985c](https://github.com/googleapis/java-spanner/commit/23b985c9a04837b0b38f2cfc5d96469e1d664d67)) +* Non-ASCII Unicode characters in code ([#3844](https://github.com/googleapis/java-spanner/issues/3844)) ([85a0820](https://github.com/googleapis/java-spanner/commit/85a0820505889ae6482a9e4f845cd53430dd6b44)) +* Only close and return sessions once ([#3846](https://github.com/googleapis/java-spanner/issues/3846)) ([32b2373](https://github.com/googleapis/java-spanner/commit/32b2373d62cac3047d9686c56af278c706d7c488)) + +## [6.92.0](https://github.com/googleapis/java-spanner/compare/v6.91.1...v6.92.0) (2025-04-29) + + +### Features + +* [Internal] client-side metrics for afe latency and connectivity error ([#3819](https://github.com/googleapis/java-spanner/issues/3819)) ([a8dba0a](https://github.com/googleapis/java-spanner/commit/a8dba0a83939fdbbc324f0a7aa6c44180462fa3a)) +* Support begin with AbortedException for manager interface ([#3835](https://github.com/googleapis/java-spanner/issues/3835)) ([5783116](https://github.com/googleapis/java-spanner/commit/578311693bed836c8916f4b4ffa0782a468c1af3)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.56.2 ([11bfd90](https://github.com/googleapis/java-spanner/commit/11bfd90daa244dbd31a76bc5a1d2e694e43fa292)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.2 ([#3836](https://github.com/googleapis/java-spanner/issues/3836)) ([2ee7f97](https://github.com/googleapis/java-spanner/commit/2ee7f971f3374b01d22e5a7f8f2483cf60c3363d)) + +## [6.91.1](https://github.com/googleapis/java-spanner/compare/v6.91.0...v6.91.1) (2025-04-21) + + +### Bug Fixes + +* SkipHint in the internal parser skipped too much ([#3827](https://github.com/googleapis/java-spanner/issues/3827)) ([fbf7b4c](https://github.com/googleapis/java-spanner/commit/fbf7b4c4324c4d565bfe3950ecf80de02c88f16e)) + +## [6.91.0](https://github.com/googleapis/java-spanner/compare/v6.90.0...v6.91.0) (2025-04-17) + + +### Features + +* [Internal] open telemetry built in metrics for GRPC ([#3709](https://github.com/googleapis/java-spanner/issues/3709)) ([cd76c73](https://github.com/googleapis/java-spanner/commit/cd76c73d838a9ccde2c8c11fc63144a62d76886c)) +* Add java sample for the pre-splitting feature ([#3713](https://github.com/googleapis/java-spanner/issues/3713)) ([e97b92e](https://github.com/googleapis/java-spanner/commit/e97b92ea4728bc8f013ff73478de4af9eaa1793b)) +* Add TransactionMutationLimitExceededException as cause to SpannerBatchUpdateException ([#3723](https://github.com/googleapis/java-spanner/issues/3723)) ([4cf5261](https://github.com/googleapis/java-spanner/commit/4cf52613c6c8280fdb864f5b8d04f8fb6ea55e16)) +* Built in metrics for afe latency and connectivity error ([#3724](https://github.com/googleapis/java-spanner/issues/3724)) ([e13a2f9](https://github.com/googleapis/java-spanner/commit/e13a2f9c5cadd15ab5a565c7dd1c1eec64c09488)) +* Support unnamed parameters ([#3820](https://github.com/googleapis/java-spanner/issues/3820)) ([1afd815](https://github.com/googleapis/java-spanner/commit/1afd815869785588dfd03ffc12e381e32c4aa0fe)) + + +### Bug Fixes + +* Add default implementations for Interval methods in AbstractStructReader ([#3722](https://github.com/googleapis/java-spanner/issues/3722)) ([97f4544](https://github.com/googleapis/java-spanner/commit/97f45448ecb51bd20699d1f163f78b2a7736b21f)) +* Set transaction isolation level had no effect ([#3718](https://github.com/googleapis/java-spanner/issues/3718)) ([b382999](https://github.com/googleapis/java-spanner/commit/b382999f42d1b643472cf3f605f8c6dc839dec19)) + + +### Performance Improvements + +* Cache the key used for OTEL traces and metrics ([#3814](https://github.com/googleapis/java-spanner/issues/3814)) ([c5a2045](https://github.com/googleapis/java-spanner/commit/c5a20452ad2ed5a8f1ac12cca4072a86f4457b93)) +* Optimize parsing in Connection API ([#3800](https://github.com/googleapis/java-spanner/issues/3800)) ([a2780ed](https://github.com/googleapis/java-spanner/commit/a2780edb3d9d4972c78befd097692f626a6a4bea)) +* Qualify statements without removing comments ([#3810](https://github.com/googleapis/java-spanner/issues/3810)) ([d358cb9](https://github.com/googleapis/java-spanner/commit/d358cb96e33bdf6de6528d03c884aa702b40b802)) +* Remove all calls to getSqlWithoutComments ([#3822](https://github.com/googleapis/java-spanner/issues/3822)) ([0e1e14c](https://github.com/googleapis/java-spanner/commit/0e1e14c0e8c1f3726c4d3cfd836c580b3b4122d0)) + +## [6.90.0](https://github.com/googleapis/java-spanner/compare/v6.89.0...v6.90.0) (2025-03-31) + + +### Features + +* Add default_isolation_level connection property ([#3702](https://github.com/googleapis/java-spanner/issues/3702)) ([9472d23](https://github.com/googleapis/java-spanner/commit/9472d23c2b233275e779815f89040323e073a7d1)) +* Adds support for Interval datatype in Java client ([#3416](https://github.com/googleapis/java-spanner/issues/3416)) ([8be8f5e](https://github.com/googleapis/java-spanner/commit/8be8f5e6b08c8cf3e5f062e4b985b3ec9c725064)) +* Integration test for End to End tracing ([#3691](https://github.com/googleapis/java-spanner/issues/3691)) ([bf1a07a](https://github.com/googleapis/java-spanner/commit/bf1a07a153b1eb899757260b8ac2bc12384e45af)) +* Specify isolation level per transaction ([#3704](https://github.com/googleapis/java-spanner/issues/3704)) ([868f30f](https://github.com/googleapis/java-spanner/commit/868f30fde95d07c3fc18feaca64b4d1c3ba6a27d)) +* Support PostgreSQL isolation level statements ([#3706](https://github.com/googleapis/java-spanner/issues/3706)) ([dda2e1d](https://github.com/googleapis/java-spanner/commit/dda2e1dec38febdad54b61f588590c7572017ba9)) + +## [6.89.0](https://github.com/googleapis/java-spanner/compare/v6.88.0...v6.89.0) (2025-03-20) + + +### Features + +* Enable ALTS hard bound token in DirectPath ([#3645](https://github.com/googleapis/java-spanner/issues/3645)) ([42cc961](https://github.com/googleapis/java-spanner/commit/42cc9616fa74c765d5716fd948dc0823df0a07a6)) +* Next release from main branch is 6.89.0 ([#3669](https://github.com/googleapis/java-spanner/issues/3669)) ([7a8a29b](https://github.com/googleapis/java-spanner/commit/7a8a29be40258294cafd13b1df7df5ea349a675d)) +* Support isolation level REPEATABLE_READ for R/W transactions ([#3670](https://github.com/googleapis/java-spanner/issues/3670)) ([e62f5ab](https://github.com/googleapis/java-spanner/commit/e62f5ab46da8696a8ff0d213f924588612bb4025)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.55.1 ([b959f4c](https://github.com/googleapis/java-spanner/commit/b959f4c8ebb3551796a894b659aa42ba16fb1c39)) +* Revert the ALTS bound token enablement ([#3679](https://github.com/googleapis/java-spanner/issues/3679)) ([183c1f0](https://github.com/googleapis/java-spanner/commit/183c1f0e228a927a575596a38a01d63bb8eb6943)) + + +### Performance Improvements + +* Get database dialect using multiplexed session ([#3684](https://github.com/googleapis/java-spanner/issues/3684)) ([f641a40](https://github.com/googleapis/java-spanner/commit/f641a40ed515a6559718c2fe2757c322f037d83b)) +* Skip gRPC trailers for StreamingRead & ExecuteStreamingSql ([#3661](https://github.com/googleapis/java-spanner/issues/3661)) ([bd4b1f5](https://github.com/googleapis/java-spanner/commit/bd4b1f5b9612f6a4dfd748d735c887f8e46ae106)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.45.1 ([#3689](https://github.com/googleapis/java-spanner/issues/3689)) ([67188df](https://github.com/googleapis/java-spanner/commit/67188df2be23eef88de8f4febc3ac7208ebdd937)) + +## [6.88.0](https://github.com/googleapis/java-spanner/compare/v6.87.0...v6.88.0) (2025-02-27) + + +### Features + +* Add a last field in the PartialResultSet ([7c714be](https://github.com/googleapis/java-spanner/commit/7c714be10eb345f2d8f566d752f6de615061c4da)) +* Automatically set default sequence kind in JDBC and PGAdapter ([#3658](https://github.com/googleapis/java-spanner/issues/3658)) ([e8abf33](https://github.com/googleapis/java-spanner/commit/e8abf338b85e95f185ab2875a804134523f84de3)) +* Default authentication support for external hosts ([#3656](https://github.com/googleapis/java-spanner/issues/3656)) ([ace11d5](https://github.com/googleapis/java-spanner/commit/ace11d5d928fb567b16560263ae95aa9cd916e22)) +* **spanner:** A new enum `IsolationLevel` is added ([3fd33ba](https://github.com/googleapis/java-spanner/commit/3fd33ba9c5fab43ed475ed3cff9d60c008843981)) +* **spanner:** Add instance partitions field in backup proto ([3fd33ba](https://github.com/googleapis/java-spanner/commit/3fd33ba9c5fab43ed475ed3cff9d60c008843981)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.54.0 ([57497ad](https://github.com/googleapis/java-spanner/commit/57497ad00c62f152f493645f382530cf0eedf19e)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.44.0 ([#3665](https://github.com/googleapis/java-spanner/issues/3665)) ([3543548](https://github.com/googleapis/java-spanner/commit/35435488f87ebd59179698e8f74578b41eb219da)) + +## [6.87.0](https://github.com/googleapis/java-spanner/compare/v6.86.0...v6.87.0) (2025-02-20) + + +### Features + +* Add AddSplitPoints API ([a5ebcd3](https://github.com/googleapis/java-spanner/commit/a5ebcd343a67c57d61362cfb0ccb4888f5503681)) +* Add option for multiplexed sessions with partitioned operations ([#3635](https://github.com/googleapis/java-spanner/issues/3635)) ([dc89b4d](https://github.com/googleapis/java-spanner/commit/dc89b4d7663f0e40a9169b21243f2d94f2fc5749)) +* Add option to indicate that a statement is the last in a transaction ([#3647](https://github.com/googleapis/java-spanner/issues/3647)) ([b04ea80](https://github.com/googleapis/java-spanner/commit/b04ea804cfa9551b4d7c49cd83f0ef1120942423)) +* Adding gfe_latencies metric to built-in metrics ([#3490](https://github.com/googleapis/java-spanner/issues/3490)) ([314dadc](https://github.com/googleapis/java-spanner/commit/314dadc31f4a5aa798d45886db7231c1bd8b7a91)) +* **spanner:** Support multiplexed session for read-write transactions ([#3608](https://github.com/googleapis/java-spanner/issues/3608)) ([bda78ed](https://github.com/googleapis/java-spanner/commit/bda78edaba827acf974c87c335868a6f8caa38f2)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.53.0 ([20a3d0d](https://github.com/googleapis/java-spanner/commit/20a3d0da41509ffca66c77de6771fc8080930613)) +* **spanner:** End spans for read-write methods ([#3629](https://github.com/googleapis/java-spanner/issues/3629)) ([4a1f99c](https://github.com/googleapis/java-spanner/commit/4a1f99c6bb872ffc08e60d3843e4cdfc4efa2690)) +* **spanner:** Release resources in TransactionManager ([#3638](https://github.com/googleapis/java-spanner/issues/3638)) ([e0a3e5b](https://github.com/googleapis/java-spanner/commit/e0a3e5bd169e28e349a2dc92f86a2a9b5510f8f6)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.43.0 ([#3642](https://github.com/googleapis/java-spanner/issues/3642)) ([c12968a](https://github.com/googleapis/java-spanner/commit/c12968a5f6dad95017d9867d96d4f19a26643a07)) + +## [6.86.0](https://github.com/googleapis/java-spanner/compare/v6.85.0...v6.86.0) (2025-01-31) + + +### Features + +* Add sample for asymmetric autoscaling instances ([#3562](https://github.com/googleapis/java-spanner/issues/3562)) ([3584b81](https://github.com/googleapis/java-spanner/commit/3584b81a27bfcdd071fbf7e0d40dfa840ea88151)) +* Support graph and pipe queries in Connection API ([#3586](https://github.com/googleapis/java-spanner/issues/3586)) ([71c3063](https://github.com/googleapis/java-spanner/commit/71c306346d5b3805f55d5698cf8867d5f4ae519e)) + + +### Bug Fixes + +* Always add instance-id for built-in metrics ([#3612](https://github.com/googleapis/java-spanner/issues/3612)) ([705b627](https://github.com/googleapis/java-spanner/commit/705b627646f1679b7d1c4c1f86a853872cf8bfd5)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.51.1 ([3e27251](https://github.com/googleapis/java-spanner/commit/3e272510970d1951b74c4ec9425f1a890790ddb3)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.52.0 ([bf69673](https://github.com/googleapis/java-spanner/commit/bf69673886dbe040292214ed6e64997a230441f6)) +* **spanner:** Moved mTLSContext configurator from builder to construtor ([#3605](https://github.com/googleapis/java-spanner/issues/3605)) ([ac7c30b](https://github.com/googleapis/java-spanner/commit/ac7c30bfb14bdafc11675c2a120effde4a71c922)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.42.0 ([#3616](https://github.com/googleapis/java-spanner/issues/3616)) ([2ea59f0](https://github.com/googleapis/java-spanner/commit/2ea59f05225f2dba2effb503e6abddcfdb6fe6ee)) +* Update dependency io.opentelemetry:opentelemetry-bom to v1.46.0 ([#3530](https://github.com/googleapis/java-spanner/issues/3530)) ([d505850](https://github.com/googleapis/java-spanner/commit/d5058504b94501cabd75ad5e7030404b63c3f8b4)) + + +### Documentation + +* Clarify how async updates can overtake each other ([#3581](https://github.com/googleapis/java-spanner/issues/3581)) ([1be250f](https://github.com/googleapis/java-spanner/commit/1be250fea686f3a41739c9c8aa474ed956b130e4)) +* Fix typo timzeone -> timezone ([bf69673](https://github.com/googleapis/java-spanner/commit/bf69673886dbe040292214ed6e64997a230441f6)) +* Fixed parameter arguments for AbstractResultSet's Listener's on TransactionMetadata doc ([#3602](https://github.com/googleapis/java-spanner/issues/3602)) ([1f143a4](https://github.com/googleapis/java-spanner/commit/1f143a4b7b899aec8cf58546f7540a41d1c73731)) +* **samples:** Add samples and tests for change streams transaction exclusion ([#3098](https://github.com/googleapis/java-spanner/issues/3098)) ([1f81600](https://github.com/googleapis/java-spanner/commit/1f816009abdbfb32bb26686d8fdb2a771216004e)) + +## [6.85.0](https://github.com/googleapis/java-spanner/compare/v6.84.0...v6.85.0) (2025-01-10) + + +### Features + +* Add gcp client attributes in OpenTelemetry traces ([#3595](https://github.com/googleapis/java-spanner/issues/3595)) ([7893f24](https://github.com/googleapis/java-spanner/commit/7893f2499f6a43e4e80ec78a9f0da5beedb6967a)) +* Add LockHint feature ([#3588](https://github.com/googleapis/java-spanner/issues/3588)) ([326442b](https://github.com/googleapis/java-spanner/commit/326442bca41700debcbeb67b6bd11fc36bd4f26d)) +* **spanner:** MTLS setup for spanner external host clients ([#3574](https://github.com/googleapis/java-spanner/issues/3574)) ([f8dd152](https://github.com/googleapis/java-spanner/commit/f8dd15272f2a250c5b57c9f2527d03dbd557d717)) + + +### Dependencies + +* Update dependency com.google.api.grpc:proto-google-cloud-monitoring-v3 to v3.56.0 ([#3563](https://github.com/googleapis/java-spanner/issues/3563)) ([e4d0b0f](https://github.com/googleapis/java-spanner/commit/e4d0b0ffa2308c8d949630b52c67e3b79c4491fb)) +* Update dependency com.google.api.grpc:proto-google-cloud-monitoring-v3 to v3.57.0 ([#3592](https://github.com/googleapis/java-spanner/issues/3592)) ([a7542da](https://github.com/googleapis/java-spanner/commit/a7542daff466226221eeb9a885a2e67a99adb678)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.41.1 ([#3589](https://github.com/googleapis/java-spanner/issues/3589)) ([2cd4238](https://github.com/googleapis/java-spanner/commit/2cd42388370dac004bfd807f6aede3ba45456706)) +* Update dependency com.google.cloud.opentelemetry:exporter-trace to v0.33.0 ([#3455](https://github.com/googleapis/java-spanner/issues/3455)) ([70649dc](https://github.com/googleapis/java-spanner/commit/70649dc2f64aa06404893cc6a36716fc366c83e7)) +* Update dependency com.google.re2j:re2j to v1.8 ([#3594](https://github.com/googleapis/java-spanner/issues/3594)) ([0f2013d](https://github.com/googleapis/java-spanner/commit/0f2013d66d3fd14e6be019cda6745ddc32032091)) +* Update googleapis/sdk-platform-java action to v2.51.1 ([#3591](https://github.com/googleapis/java-spanner/issues/3591)) ([3daa1a0](https://github.com/googleapis/java-spanner/commit/3daa1a0c735000845558a1d3612257a7d0524350)) + +## [6.84.0](https://github.com/googleapis/java-spanner/compare/v6.83.0...v6.84.0) (2025-01-06) + + +### Features + +* Add support for ARRAY<STRUCT> to CloudCilentExecutor ([#3544](https://github.com/googleapis/java-spanner/issues/3544)) ([6cbaf7e](https://github.com/googleapis/java-spanner/commit/6cbaf7ec6502d04fc0a0c09720e2054bd10bead9)) +* Add transaction runner for connections ([#3559](https://github.com/googleapis/java-spanner/issues/3559)) ([5a1be3d](https://github.com/googleapis/java-spanner/commit/5a1be3dedeafa6858502eadc7918820b9cd90f68)) +* Exposing InstanceType in Instance configuration (to define PROVISIONED or FREE spanner instance) ([8d295c4](https://github.com/googleapis/java-spanner/commit/8d295c4a4030b4e97b1d653cc3baf412864f3042)) +* Improve tracing by adding attributes ([#3576](https://github.com/googleapis/java-spanner/issues/3576)) ([eee333b](https://github.com/googleapis/java-spanner/commit/eee333b51fa69123e011dfbd2a0896fd31ac10dc)) +* **spanner:** Add jdbc support for external hosts ([#3536](https://github.com/googleapis/java-spanner/issues/3536)) ([801346a](https://github.com/googleapis/java-spanner/commit/801346a1b2efe7d0144f7442e1568eb5b02ddcbc)) + + +### Bug Fixes + +* AsyncTransactionManager did not always close the session ([#3580](https://github.com/googleapis/java-spanner/issues/3580)) ([d9813a0](https://github.com/googleapis/java-spanner/commit/d9813a05240b966f444168d3b8c30da9d27a8cc4)) +* Retry specific internal errors ([#3565](https://github.com/googleapis/java-spanner/issues/3565)) ([b9ce1a6](https://github.com/googleapis/java-spanner/commit/b9ce1a6fcbd11373a5cc82807af15c1cca0dd48e)) +* Update max_in_use_session at 10 mins interval ([#3570](https://github.com/googleapis/java-spanner/issues/3570)) ([cc1753d](https://github.com/googleapis/java-spanner/commit/cc1753da72b3e508f8fea8a6d19e1ed3f34e3602)) + + +### Dependencies + +* Update opentelemetry.version to v1.45.0 ([#3531](https://github.com/googleapis/java-spanner/issues/3531)) ([78c82ed](https://github.com/googleapis/java-spanner/commit/78c82edb4fcc4a5a9a372225ca429038c3b34955)) + +## [6.83.0](https://github.com/googleapis/java-spanner/compare/v6.82.0...v6.83.0) (2024-12-13) + + +### Features + +* Add Metrics host for built in metrics ([#3519](https://github.com/googleapis/java-spanner/issues/3519)) ([4ed455a](https://github.com/googleapis/java-spanner/commit/4ed455a43edf7ff8d138ce4d40a52d3224383b14)) +* Add opt-in for using multiplexed sessions for blind writes ([#3540](https://github.com/googleapis/java-spanner/issues/3540)) ([216f53e](https://github.com/googleapis/java-spanner/commit/216f53e4cbc0150078ece7785da33b342a6ab082)) +* Add UUID in Spanner TypeCode enum ([41f83dc](https://github.com/googleapis/java-spanner/commit/41f83dcf046f955ec289d4e976f40a03922054cb)) +* Introduce java.time variables and methods ([#3495](https://github.com/googleapis/java-spanner/issues/3495)) ([8a7d533](https://github.com/googleapis/java-spanner/commit/8a7d533ded21b9b94992b68c702c08bb84474e1b)) +* **spanner:** Support multiplexed session for Partitioned operations ([#3231](https://github.com/googleapis/java-spanner/issues/3231)) ([4501a3e](https://github.com/googleapis/java-spanner/commit/4501a3ea69a9346e8b95edf6f94ff839b509ec73)) +* Support 'set local' for retry_aborts_internally ([#3532](https://github.com/googleapis/java-spanner/issues/3532)) ([331942f](https://github.com/googleapis/java-spanner/commit/331942f51b11660b9de9c8fe8aacd6f60ac254b5)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.51.0 ([41f83dc](https://github.com/googleapis/java-spanner/commit/41f83dcf046f955ec289d4e976f40a03922054cb)) + + +### Dependencies + +* Update sdk platform java dependencies ([#3549](https://github.com/googleapis/java-spanner/issues/3549)) ([6235f0f](https://github.com/googleapis/java-spanner/commit/6235f0f2c223718c537addc450fa5910d1500271)) + ## [6.82.0](https://github.com/googleapis/java-spanner/compare/v6.81.2...v6.82.0) (2024-12-04) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b65dd279c94..ff092b68e3f 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 29f1bb0322d..d34cbd74130 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +**_THIS REPOSITORY IS DEPRECATED. ALL OF ITS CONTENT AND HISTORY HAS BEEN MOVED TO [GOOGLE-CLOUD-JAVA](https://github.com/googleapis/google-cloud-java/tree/main/java-spanner)_** + # Google Cloud Spanner Client for Java Java idiomatic client for [Cloud Spanner][product-docs]. @@ -19,7 +21,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: com.google.cloud libraries-bom - 26.50.0 + 26.78.0 pom import @@ -41,7 +43,7 @@ If you are using Maven without the BOM, add this to your dependencies: com.google.cloud google-cloud-spanner - 6.81.1 + 6.112.0 ``` @@ -49,20 +51,20 @@ 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.50.0') +implementation platform('com.google.cloud:libraries-bom:26.78.0') implementation 'com.google.cloud:google-cloud-spanner' ``` If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-spanner:6.82.0' +implementation 'com.google.cloud:google-cloud-spanner:6.113.0' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.82.0" +libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.113.0" ``` ## Authentication @@ -150,217 +152,30 @@ the Cloud Spanner Java client. ## Metrics -### Available client-side metrics: - -* `spanner/max_in_use_sessions`: This returns the maximum - number of sessions that have been in use during the last maintenance window - interval, so as to provide an indication of the amount of activity currently - in the database. - -* `spanner/max_allowed_sessions`: This shows the maximum - number of sessions allowed. - -* `spanner/num_sessions_in_pool`: This metric allows users to - see instance-level and database-level data for the total number of sessions in - the pool at this very moment. - -* `spanner/num_acquired_sessions`: This metric allows - users to see the total number of acquired sessions. - -* `spanner/num_released_sessions`: This metric allows - users to see the total number of released (destroyed) sessions. - -* `spanner/get_session_timeouts`: This gives you an - indication of the total number of get session timed-out instead of being - granted (the thread that requested the session is placed in a wait queue where - it waits until a session is released into the pool by another thread) due to - pool exhaustion since the server process started. - -* `spanner/gfe_latency`: This metric shows latency between - Google's network receiving an RPC and reading back the first byte of the response. +Cloud Spanner client supports [client-side metrics](https://cloud.google.com/spanner/docs/view-manage-client-side-metrics) that you can use along with server-side metrics to optimize performance and troubleshoot performance issues if they occur. -* `spanner/gfe_header_missing_count`: This metric shows the - number of RPC responses received without the server-timing header, most likely - indicating that the RPC never reached Google's network. +Client-side metrics are measured from the time a request leaves your application to the time your application receives the response. +In contrast, server-side metrics are measured from the time Spanner receives a request until the last byte of data is sent to the client. -### Instrument with OpenTelemetry +These metrics are enabled by default. You can opt out of using client-side metrics with the following code: -Cloud Spanner client supports [OpenTelemetry Metrics](https://opentelemetry.io/), -which gives insight into the client internals and aids in debugging/troubleshooting -production issues. OpenTelemetry metrics will provide you with enough data to enable you to -spot, and investigate the cause of any unusual deviations from normal behavior. - -All Cloud Spanner Metrics are prefixed with `spanner/` and uses `cloud.google.com/java` as [Instrumentation Scope](https://opentelemetry.io/docs/concepts/instrumentation-scope/). The -metrics will be tagged with: -* `database`: the target database name. -* `instance_id`: the instance id of the target Spanner instance. -* `client_id`: the user defined database client id. - -By default, the functionality is disabled. You need to add OpenTelemetry dependencies, enable OpenTelemetry metrics and must configure the OpenTelemetry with appropriate exporters at the startup of your application: - -#### OpenTelemetry Dependencies -If you are using Maven, add this to your pom.xml file -```xml - - io.opentelemetry - opentelemetry-sdk - {opentelemetry.version} - - - io.opentelemetry - opentelemetry-sdk-metrics - {opentelemetry.version} - - - io.opentelemetry - opentelemetry-exporter-otlp - {opentelemetry.version} - -``` -If you are using Gradle, add this to your dependencies -```Groovy -compile 'io.opentelemetry:opentelemetry-sdk:{opentelemetry.version}' -compile 'io.opentelemetry:opentelemetry-sdk-metrics:{opentelemetry.version}' -compile 'io.opentelemetry:opentelemetry-exporter-oltp:{opentelemetry.version}' ``` - -#### OpenTelemetry Configuration -By default, all metrics are disabled. To enable metrics and configure the OpenTelemetry follow below: - -```java -// Enable OpenTelemetry metrics before injecting OpenTelemetry object. -SpannerOptions.enableOpenTelemetryMetrics(); - -SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder() -// Use Otlp exporter or any other exporter of your choice. - .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()) - .build()) - .build(); - -OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() - .setMeterProvider(sdkMeterProvider) - .build() - SpannerOptions options = SpannerOptions.newBuilder() -// Inject OpenTelemetry object via Spanner Options or register OpenTelemetry object as Global - .setOpenTelemetry(openTelemetry) + .setBuiltInMetricsEnabled(false) .build(); - -Spanner spanner = options.getService(); ``` -#### OpenTelemetry SQL Statement Tracing -The OpenTelemetry traces that are generated by the Java client include any request and transaction -tags that have been set. The traces can also include the SQL statements that are executed and the -name of the thread that executes the statement. Enable this with the `enableExtendedTracing` -option: - -``` -SpannerOptions options = SpannerOptions.newBuilder() - .setOpenTelemetry(openTelemetry) - .setEnableExtendedTracing(true) - .build(); -``` +You can also disable these metrics by setting `SPANNER_DISABLE_BUILTIN_METRICS` to `true`. -This option can also be enabled by setting the environment variable -`SPANNER_ENABLE_EXTENDED_TRACING=true`. - -#### OpenTelemetry API Tracing -You can enable tracing of each API call that the Spanner client executes with the `enableApiTracing` -option. These traces also include any retry attempts for an API call: - -``` -SpannerOptions options = SpannerOptions.newBuilder() -.setOpenTelemetry(openTelemetry) -.setEnableApiTracing(true) -.build(); -``` - -This option can also be enabled by setting the environment variable -`SPANNER_ENABLE_API_TRACING=true`. - -> Note: The attribute keys that are used for additional information about retry attempts and the number of requests might change in a future release. - - -### Instrument with OpenCensus - -> Note: OpenCensus project is deprecated. See [Sunsetting OpenCensus](https://opentelemetry.io/blog/2023/sunsetting-opencensus/). -We recommend migrating to OpenTelemetry, the successor project. - -Cloud Spanner client supports [Opencensus Metrics](https://opencensus.io/stats/), -which gives insight into the client internals and aids in debugging/troubleshooting -production issues. OpenCensus metrics will provide you with enough data to enable you to -spot, and investigate the cause of any unusual deviations from normal behavior. - -All Cloud Spanner Metrics are prefixed with `cloud.google.com/java/spanner` - -The metrics are tagged with: -* `database`: the target database name. -* `instance_id`: the instance id of the target Spanner instance. -* `client_id`: the user defined database client id. -* `library_version`: the version of the library that you're using. - - -By default, the functionality is disabled. You need to include opencensus-impl -dependency to collect the data and exporter dependency to export to backend. - -[Click here](https://medium.com/google-cloud/troubleshooting-cloud-spanner-applications-with-opencensus-2cf424c4c590) for more information. - -#### OpenCensus Dependencies - -If you are using Maven, add this to your pom.xml file -```xml - - io.opencensus - opencensus-impl - 0.30.0 - runtime - - - io.opencensus - opencensus-exporter-stats-stackdriver - 0.30.0 - -``` -If you are using Gradle, add this to your dependencies -```Groovy -compile 'io.opencensus:opencensus-impl:0.30.0' -compile 'io.opencensus:opencensus-exporter-stats-stackdriver:0.30.0' -``` - -#### Configure the OpenCensus Exporter - -At the start of your application configure the exporter: - -```java -import io.opencensus.exporter.stats.stackdriver.StackdriverStatsExporter; -// Enable OpenCensus exporters to export metrics to Stackdriver Monitoring. -// Exporters use Application Default Credentials to authenticate. -// See https://developers.google.com/identity/protocols/application-default-credentials -// for more details. -// The minimum reporting period for Stackdriver is 1 minute. -StackdriverStatsExporter.createAndRegister(); -``` -#### Enable RPC Views - -By default, all session metrics are enabled. To enable RPC views, use either of the following method: - -```java -// Register views for GFE metrics, including gfe_latency and gfe_header_missing_count. -SpannerRpcViews.registerGfeLatencyAndHeaderMissingCountViews(); - -// Register GFE Latency view. -SpannerRpcViews.registerGfeLatencyView(); - -// Register GFE Header Missing Count view. -SpannerRpcViews.registerGfeHeaderMissingCountView(); -``` +> Note: Client-side metrics needs `monitoring.timeSeries.create` IAM permission to export metrics data. Ask your administrator to grant your service account the [Monitoring Metric Writer](https://cloud.google.com/iam/docs/roles-permissions/monitoring#monitoring.metricWriter) (roles/monitoring.metricWriter) IAM role on the project. ## Traces Cloud Spanner client supports OpenTelemetry Traces, which gives insight into the client internals and aids in debugging/troubleshooting production issues. By default, the functionality is disabled. You need to add OpenTelemetry dependencies, enable OpenTelemetry traces and must configure the OpenTelemetry with appropriate exporters at the startup of your application. +See [Configure client-side tracing](https://cloud.google.com/spanner/docs/set-up-tracing#configure-client-side-tracing) for more details on configuring traces. + #### OpenTelemetry Dependencies If you are using Maven, add this to your pom.xml file @@ -447,9 +262,32 @@ This option can also be enabled by setting the environment variable > Note: The attribute keys that are used for additional information about retry attempts and the number of requests might change in a future release. +#### End-to-end Tracing + +In addition to client-side tracing, you can opt in for [end-to-end tracing](https://cloud.google.com/spanner/docs/tracing-overview#end-to-end-side-tracing). End-to-end tracing helps you understand and debug latency issues that are specific to Spanner such as the following: +* Identify whether the latency is due to network latency between your application and Spanner, or if the latency is occurring within Spanner. +* Identify the Google Cloud regions that your application requests are being routed through and if there is a cross-region request. A cross-region request usually means higher latencies between your application and Spanner. + +``` +SpannerOptions options = SpannerOptions.newBuilder() +.setOpenTelemetry(openTelemetry) +.setEnableEndToEndTracing(true) +.build(); +``` + +Refer to [Configure end-to-end tracing](https://cloud.google.com/spanner/docs/set-up-tracing#configure-end-to-end-tracing) to configure end-to-end tracing and to understand its attributes. + +> Note: End-to-end traces can only be exported to [Cloud Trace](https://cloud.google.com/trace/docs). + + +## Instrument with OpenCensus + +> Note: OpenCensus project is deprecated. See [Sunsetting OpenCensus](https://opentelemetry.io/blog/2023/sunsetting-opencensus/). +We recommend migrating to OpenTelemetry, the successor project. + ## Migrate from OpenCensus to OpenTelemetry -> Using the [OpenTelemetry OpenCensus Bridge](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-opencensus-shim), you can immediately begin exporting your metrics and traces with OpenTelemetry +> Using the [OpenTelemetry OpenCensus Bridge](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-opencensus-shim), you can immediately begin exporting your metrics and traces with OpenTelemetry. #### Disable OpenCensus metrics Disable OpenCensus metrics for Spanner by including the following code if you still possess OpenCensus dependencies and exporter. @@ -504,6 +342,7 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/ | Async Transaction Manager Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/AsyncTransactionManagerExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/AsyncTransactionManagerExample.java) | | Batch Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/BatchSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/BatchSample.java) | | Batch Write At Least Once Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/BatchWriteAtLeastOnceSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/BatchWriteAtLeastOnceSample.java) | +| Change Streams Txn Exclusion Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/ChangeStreamsTxnExclusionSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/ChangeStreamsTxnExclusionSample.java) | | Copy Backup Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CopyBackupSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CopyBackupSample.java) | | Copy Backup With Multi Region Encryption Key | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CopyBackupWithMultiRegionEncryptionKey.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CopyBackupWithMultiRegionEncryptionKey.java) | | Create Backup With Encryption Key | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateBackupWithEncryptionKey.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateBackupWithEncryptionKey.java) | @@ -517,12 +356,14 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/ | Create Instance Config Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java) | | Create Instance Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateInstanceExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateInstanceExample.java) | | Create Instance Partition Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateInstancePartitionSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateInstancePartitionSample.java) | +| Create Instance With Asymmetric Autoscaling Config Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigExample.java) | | Create Instance With Autoscaling Config Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAutoscalingConfigExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAutoscalingConfigExample.java) | | Create Instance With Processing Units Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithProcessingUnitsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithProcessingUnitsExample.java) | | Create Instance Without Default Backup Schedules Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithoutDefaultBackupSchedulesExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithoutDefaultBackupSchedulesExample.java) | | Create Sequence Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateSequenceSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateSequenceSample.java) | | Create Table With Foreign Key Delete Cascade Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CreateTableWithForeignKeyDeleteCascadeSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CreateTableWithForeignKeyDeleteCascadeSample.java) | | Custom Timeout And Retry Settings Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/CustomTimeoutAndRetrySettingsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/CustomTimeoutAndRetrySettingsExample.java) | +| Database Add Split Points Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java) | | Delete Backup Schedule Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/DeleteBackupScheduleSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/DeleteBackupScheduleSample.java) | | Delete Instance Config Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/DeleteInstanceConfigSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/DeleteInstanceConfigSample.java) | | Delete Using Dml Returning Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/DeleteUsingDmlReturningSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/DeleteUsingDmlReturningSample.java) | @@ -535,6 +376,8 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/ | Get Database Ddl Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/GetDatabaseDdlSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/GetDatabaseDdlSample.java) | | Get Instance Config Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/GetInstanceConfigSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/GetInstanceConfigSample.java) | | Insert Using Dml Returning Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/InsertUsingDmlReturningSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/InsertUsingDmlReturningSample.java) | +| Isolation Level And Read Lock Mode Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/IsolationLevelAndReadLockModeSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/IsolationLevelAndReadLockModeSample.java) | +| Last Statement Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java) | | List Backup Schedules Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/ListBackupSchedulesSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/ListBackupSchedulesSample.java) | | List Database Roles | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/ListDatabaseRoles.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/ListDatabaseRoles.java) | | List Databases Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/ListDatabasesSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/ListDatabasesSample.java) | @@ -551,6 +394,7 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/ | Pg Drop Sequence Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/PgDropSequenceSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/PgDropSequenceSample.java) | | Pg Insert Using Dml Returning Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/PgInsertUsingDmlReturningSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/PgInsertUsingDmlReturningSample.java) | | Pg Interleaved Table Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/PgInterleavedTableSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/PgInterleavedTableSample.java) | +| Pg Last Statement Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java) | | Pg Partitioned Dml Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/PgPartitionedDmlSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/PgPartitionedDmlSample.java) | | Pg Query With Numeric Parameter Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/PgQueryWithNumericParameterSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/PgQueryWithNumericParameterSample.java) | | Pg Spanner Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/PgSpannerSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/PgSpannerSample.java) | @@ -572,6 +416,7 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/ | Tag Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/TagSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/TagSample.java) | | Tracing Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/TracingSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/TracingSample.java) | | Transaction Timeout Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/TransactionTimeoutExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/TransactionTimeoutExample.java) | +| Unnamed Parameters Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.java) | | Update Backup Schedule Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/UpdateBackupScheduleSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/UpdateBackupScheduleSample.java) | | Update Database Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/UpdateDatabaseSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/UpdateDatabaseSample.java) | | Update Database With Default Leader Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/UpdateDatabaseWithDefaultLeaderSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/UpdateDatabaseWithDefaultLeaderSample.java) | @@ -700,32 +545,13 @@ information. Apache 2.0 - See [LICENSE][license] for more information. -## CI Status - -Java Version | Status ------------- | ------ -Java 8 | [![Kokoro CI][kokoro-badge-image-2]][kokoro-badge-link-2] -Java 8 OSX | [![Kokoro CI][kokoro-badge-image-3]][kokoro-badge-link-3] -Java 8 Windows | [![Kokoro CI][kokoro-badge-image-4]][kokoro-badge-link-4] -Java 11 | [![Kokoro CI][kokoro-badge-image-5]][kokoro-badge-link-5] - Java is a registered trademark of Oracle and/or its affiliates. [product-docs]: https://cloud.google.com/spanner/docs/ [javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-spanner/latest/history -[kokoro-badge-image-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java7.svg -[kokoro-badge-link-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java7.html -[kokoro-badge-image-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java8.svg -[kokoro-badge-link-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java8.html -[kokoro-badge-image-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java8-osx.svg -[kokoro-badge-link-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java8-osx.html -[kokoro-badge-image-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java8-win.svg -[kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java8-win.html -[kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.svg -[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/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-spanner.svg -[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.82.0 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.113.0 [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 diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 22c13635ce8..c72767328de 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -24,7 +24,7 @@ com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT @@ -34,7 +34,8 @@ UTF-8 UTF-8 2.10.1 - 1.44.1 + 1.59.0 + 3.85.0 @@ -49,12 +50,17 @@ com.google.cloud.opentelemetry exporter-trace - 0.33.0 + 0.36.0 com.google.cloud.opentelemetry exporter-metrics - 0.33.0 + 0.36.0 + + + com.google.cloud + google-cloud-monitoring + ${google.cloud.monitoring.version} @@ -80,29 +86,17 @@ com.google.re2j re2j - 1.7 - - - io.opentelemetry - opentelemetry-bom - 1.44.1 - pom - import + 1.8 com.google.cloud google-cloud-spanner - 6.81.1 - - - commons-cli - commons-cli - 1.9.0 + 6.112.0 com.google.auto.value auto-value-annotations - 1.11.0 + 1.11.1 com.kohlschutter.junixsocket @@ -118,7 +112,7 @@ commons-cli commons-cli - 1.9.0 + 1.11.0 @@ -133,15 +127,16 @@ org.codehaus.mojo exec-maven-plugin - 3.5.0 + 3.6.3 com.google.cloud.spanner.benchmark.LatencyBenchmark false - com.coveo + com.spotify.fmt fmt-maven-plugin + 2.29 diff --git a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/AbstractRunner.java b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/AbstractRunner.java index 76460891299..b233cedaf22 100644 --- a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/AbstractRunner.java +++ b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/AbstractRunner.java @@ -18,46 +18,80 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicInteger; abstract class AbstractRunner implements BenchmarkRunner { - static final int TOTAL_RECORDS = 1000000; - static final String SELECT_QUERY = "SELECT ID FROM FOO WHERE ID = @id"; - static final String UPDATE_QUERY = "UPDATE FOO SET BAR=1 WHERE ID = @id"; + static final int TOTAL_RECORDS = 100000; + static final String TABLE_NAME = "Employees"; + static final String SELECT_QUERY = String.format("SELECT ID FROM %s WHERE ID = @id", TABLE_NAME); + static final String UPDATE_QUERY = + String.format("UPDATE %s SET Name=Google WHERE ID = @id", TABLE_NAME); static final String ID_COLUMN_NAME = "id"; - static final String SERVER_URL = "https://staging-wrenchworks.sandbox.googleapis.com"; + static final Map SERVER_URL_MAPPING = new HashMap<>(); - private final AtomicInteger operationCounter = new AtomicInteger(); + static { + SERVER_URL_MAPPING.put( + Environment.CLOUD_DEVEL, "https://staging-wrenchworks.sandbox.googleapis.com"); + SERVER_URL_MAPPING.put(Environment.PROD, "https://spanner.googleapis.com"); + } + + Map timerConfigurations = new HashMap<>(); + private final Set completedClients = new HashSet<>(); + private final Set finishedClients = new HashSet<>(); + + protected void initiateTimer(int clientId, String message, Instant endTime) { + TimerConfiguration timerConfiguration = + timerConfigurations.getOrDefault(clientId, new TimerConfiguration()); + timerConfiguration.setMessage(message); + timerConfiguration.setEndTime(endTime); + timerConfigurations.put(clientId, timerConfiguration); + } - protected void incOperations() { - operationCounter.incrementAndGet(); + protected void setBenchmarkingCompleted(int clientId) { + this.completedClients.add(clientId); } protected List collectResults( ExecutorService service, List>> results, - int numClients, - int numOperations) + BenchmarkingConfiguration configuration) throws Exception { - int totalOperations = numClients * numOperations; + while (!(finishedClients.size() == configuration.getNumOfClients())) + for (int i = 0; i < configuration.getNumOfClients(); i++) { + TimerConfiguration timerConfiguration = + timerConfigurations.getOrDefault(i, new TimerConfiguration()); + long totalSeconds = + ChronoUnit.SECONDS.between(Instant.now(), timerConfiguration.getEndTime()); + if (completedClients.contains(i)) { + if (!finishedClients.contains(i)) { + System.out.printf("Client %s: Completed", i); + finishedClients.add(i); + } + } else { + System.out.printf( + "Client %s: %s %s Minutes %s Seconds\r", + i + 1, timerConfiguration.getMessage(), totalSeconds / 60, totalSeconds % 60); + } + //noinspection BusyWait + Thread.sleep(1000L); + } service.shutdown(); - while (!service.isTerminated()) { - //noinspection BusyWait - Thread.sleep(1000L); - System.out.printf("\r%d/%d", operationCounter.get(), totalOperations); - } - System.out.println(); if (!service.awaitTermination(60L, TimeUnit.MINUTES)) { throw new TimeoutException(); } - List allResults = new ArrayList<>(numClients * numOperations); + List allResults = new ArrayList<>(); for (Future> result : results) { allResults.addAll(result.get()); } @@ -77,4 +111,25 @@ protected String generateRandomString() { ThreadLocalRandom.current().nextBytes(bytes); return new String(bytes, StandardCharsets.UTF_8); } + + static class TimerConfiguration { + private Instant endTime = Instant.now(); + private String message = "Waiting for benchmarks to start..."; + + Instant getEndTime() { + return endTime; + } + + void setEndTime(Instant endTime) { + this.endTime = endTime; + } + + String getMessage() { + return message; + } + + void setMessage(String message) { + this.message = message; + } + } } diff --git a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/BenchmarkRunner.java b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/BenchmarkRunner.java index 7a731887a86..4f8a77c3a1d 100644 --- a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/BenchmarkRunner.java +++ b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/BenchmarkRunner.java @@ -19,17 +19,18 @@ import java.time.Duration; import java.util.List; -public interface BenchmarkRunner { +interface BenchmarkRunner { enum TransactionType { - READ_ONLY_SINGLE_USE, + READ_ONLY_SINGLE_USE_READ, + READ_ONLY_SINGLE_USE_QUERY, READ_ONLY_MULTI_USE, READ_WRITE } - List execute( - TransactionType transactionType, - int numClients, - int numOperations, - int waitMillis, - boolean useMultiplexedSession); + enum Environment { + PROD, + CLOUD_DEVEL + } + + List execute(BenchmarkingConfiguration configuration); } diff --git a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/BenchmarkingConfiguration.java b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/BenchmarkingConfiguration.java new file mode 100644 index 00000000000..e3003cf58a1 --- /dev/null +++ b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/BenchmarkingConfiguration.java @@ -0,0 +1,115 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.benchmark; + +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.benchmark.BenchmarkRunner.Environment; +import com.google.cloud.spanner.benchmark.BenchmarkRunner.TransactionType; + +class BenchmarkingConfiguration { + + private DatabaseId databaseId; + private int numOfClients; + private int staleness; + private int warmupTime; + private int executionTime; + private int waitBetweenRequests; + private boolean useMultiplexSession; + private TransactionType transactionType; + private Environment environment; + + int getExecutionTime() { + return executionTime; + } + + BenchmarkingConfiguration setExecutionTime(int executionTime) { + this.executionTime = executionTime; + return this; + } + + DatabaseId getDatabaseId() { + return databaseId; + } + + BenchmarkingConfiguration setDatabaseId(DatabaseId databaseId) { + this.databaseId = databaseId; + return this; + } + + int getNumOfClients() { + return numOfClients; + } + + BenchmarkingConfiguration setNumOfClients(int numOfClients) { + this.numOfClients = numOfClients; + return this; + } + + int getStaleness() { + return staleness; + } + + BenchmarkingConfiguration setStaleness(int staleness) { + this.staleness = staleness; + return this; + } + + int getWarmupTime() { + return warmupTime; + } + + BenchmarkingConfiguration setWarmupTime(int warmupTime) { + this.warmupTime = warmupTime; + return this; + } + + int getWaitBetweenRequests() { + return waitBetweenRequests; + } + + BenchmarkingConfiguration setWaitBetweenRequests(int waitBetweenRequests) { + this.waitBetweenRequests = waitBetweenRequests; + return this; + } + + boolean isUseMultiplexSession() { + return useMultiplexSession; + } + + BenchmarkingConfiguration setUseMultiplexSession(boolean useMultiplexSession) { + this.useMultiplexSession = useMultiplexSession; + return this; + } + + TransactionType getTransactionType() { + return transactionType; + } + + BenchmarkingConfiguration setTransactionType(TransactionType transactionType) { + this.transactionType = transactionType; + return this; + } + + Environment getEnvironment() { + return environment; + } + + BenchmarkingConfiguration setEnvironment(Environment environment) { + this.environment = environment; + return this; + } +} diff --git a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/JavaClientRunner.java b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/JavaClientRunner.java index 6fc0842f376..ebe8f3bbaab 100644 --- a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/JavaClientRunner.java +++ b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/JavaClientRunner.java @@ -20,6 +20,8 @@ import com.google.cloud.opentelemetry.trace.TraceExporter; import com.google.cloud.spanner.DatabaseClient; import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Key; +import com.google.cloud.spanner.KeySet; import com.google.cloud.spanner.ReadOnlyTransaction; import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.SessionPoolOptions; @@ -28,12 +30,11 @@ import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.SpannerOptions; import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.TimestampBound; import com.google.common.base.Stopwatch; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.metrics.DoubleHistogram; -import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.export.MetricExporter; @@ -44,12 +45,14 @@ import io.opentelemetry.sdk.trace.export.SpanExporter; import io.opentelemetry.sdk.trace.samplers.Sampler; import java.time.Duration; +import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; class JavaClientRunner extends AbstractRunner { private final DatabaseId databaseId; @@ -61,12 +64,7 @@ class JavaClientRunner extends AbstractRunner { } @Override - public List execute( - TransactionType transactionType, - int numClients, - int numOperations, - int waitMillis, - boolean useMultiplexedSession) { + public List execute(BenchmarkingConfiguration configuration) { // setup open telemetry metrics and traces // setup open telemetry metrics and traces SpanExporter traceExporter = TraceExporter.createWithDefaultConfiguration(); @@ -93,7 +91,7 @@ public List execute( .build(); SessionPoolOptions sessionPoolOptions = SessionPoolOptionsHelper.setUseMultiplexedSession( - SessionPoolOptions.newBuilder(), useMultiplexedSession) + SessionPoolOptions.newBuilder(), configuration.isUseMultiplexSession()) .build(); SpannerOptions.enableOpenTelemetryMetrics(); SpannerOptions.enableOpenTelemetryTraces(); @@ -102,67 +100,71 @@ public List execute( .setOpenTelemetry(openTelemetry) .setProjectId(databaseId.getInstanceId().getProject()) .setSessionPoolOption(sessionPoolOptions) - .setHost(SERVER_URL) - .build(); - // Register query stats metric. - // This should be done once before start recording the data. - Meter meter = openTelemetry.getMeter("cloud.google.com/java"); - DoubleHistogram endToEndLatencies = - meter - .histogramBuilder("spanner/end_end_elapsed") - .setDescription("The execution of end to end latency") - .setUnit("ms") + .setHost(SERVER_URL_MAPPING.get(configuration.getEnvironment())) .build(); try (Spanner spanner = options.getService()) { DatabaseClient databaseClient = spanner.getDatabaseClient(databaseId); - List>> results = new ArrayList<>(numClients); - ExecutorService service = Executors.newFixedThreadPool(numClients); - for (int client = 0; client < numClients; client++) { - results.add( - service.submit( - () -> - runBenchmark( - databaseClient, - transactionType, - numOperations, - waitMillis, - endToEndLatencies))); + List>> results = new ArrayList<>(configuration.getNumOfClients()); + ExecutorService service = Executors.newFixedThreadPool(configuration.getNumOfClients()); + for (int client = 0; client < configuration.getNumOfClients(); client++) { + int clientId = client; + results.add(service.submit(() -> runBenchmark(databaseClient, clientId, configuration))); } - return collectResults(service, results, numClients, numOperations); + return collectResults(service, results, configuration); } catch (Throwable t) { throw SpannerExceptionFactory.asSpannerException(t); } } private List runBenchmark( - DatabaseClient databaseClient, - TransactionType transactionType, - int numOperations, - int waitMillis, - DoubleHistogram endToEndLatencies) { - List results = new ArrayList<>(numOperations); + DatabaseClient databaseClient, int clientId, BenchmarkingConfiguration configuration) { + List results = new ArrayList<>(); // Execute one query to make sure everything has been warmed up. - executeTransaction(databaseClient, transactionType, endToEndLatencies); + warmUp(databaseClient, clientId, configuration); + runBenchmark(databaseClient, clientId, configuration, results); + setBenchmarkingCompleted(clientId); + return results; + } - for (int i = 0; i < numOperations; i++) { + private void runBenchmark( + DatabaseClient databaseClient, + int clientId, + BenchmarkingConfiguration configuration, + List results) { + Instant endTime = Instant.now().plus(Duration.ofMinutes(configuration.getExecutionTime())); + initiateTimer(clientId, "Remaining execution time", endTime); + while (endTime.isAfter(Instant.now())) { try { - randomWait(waitMillis); - results.add(executeTransaction(databaseClient, transactionType, endToEndLatencies)); - incOperations(); + randomWait(configuration.getWaitBetweenRequests()); + results.add( + executeTransaction( + databaseClient, configuration.getTransactionType(), configuration.getStaleness())); } catch (InterruptedException interruptedException) { throw SpannerExceptionFactory.propagateInterrupt(interruptedException); } } - return results; + } + + private void warmUp( + DatabaseClient databaseClient, int clientId, BenchmarkingConfiguration configuration) { + Instant endTime = Instant.now().plus(Duration.ofMinutes(configuration.getWarmupTime())); + initiateTimer(clientId, "Remaining warmup time", endTime); + while (endTime.isAfter(Instant.now())) { + executeTransaction( + databaseClient, configuration.getTransactionType(), configuration.getStaleness()); + } } private Duration executeTransaction( - DatabaseClient client, TransactionType transactionType, DoubleHistogram endToEndLatencies) { + DatabaseClient client, TransactionType transactionType, int staleness) { Stopwatch watch = Stopwatch.createStarted(); switch (transactionType) { - case READ_ONLY_SINGLE_USE: - executeSingleUseReadOnlyTransaction(client); + case READ_ONLY_SINGLE_USE_READ: + executeSingleUseReadOnlyTransactionWithRead(client, staleness); + break; + case READ_ONLY_SINGLE_USE_QUERY: + executeSingleUseReadOnlyTransactionWithQuery(client, staleness); break; case READ_ONLY_MULTI_USE: executeMultiUseReadOnlyTransaction(client); @@ -171,13 +173,34 @@ private Duration executeTransaction( executeReadWriteTransaction(client); break; } - Duration elapsedTime = watch.elapsed(); - endToEndLatencies.record(elapsedTime.toMillis()); - return elapsedTime; + return watch.elapsed(); + } + + private void executeSingleUseReadOnlyTransactionWithRead(DatabaseClient client, int staleness) { + List columns = new ArrayList<>(); + int key = getRandomKey(); + columns.add("ID"); + try (ResultSet resultSet = + client + .singleUse(TimestampBound.ofExactStaleness(staleness, TimeUnit.SECONDS)) + .read(TABLE_NAME, KeySet.singleKey(Key.of(key)), columns)) { + while (resultSet.next()) { + for (int i = 0; i < resultSet.getColumnCount(); i++) { + if (resultSet.isNull(i)) { + numNullValues++; + } else { + numNonNullValues++; + } + } + } + } } - private void executeSingleUseReadOnlyTransaction(DatabaseClient client) { - try (ResultSet resultSet = client.singleUse().executeQuery(getRandomisedReadStatement())) { + private void executeSingleUseReadOnlyTransactionWithQuery(DatabaseClient client, int staleness) { + try (ResultSet resultSet = + client + .singleUse(TimestampBound.ofExactStaleness(staleness, TimeUnit.SECONDS)) + .executeQuery(getRandomisedReadStatement())) { while (resultSet.next()) { for (int i = 0; i < resultSet.getColumnCount(); i++) { if (resultSet.isNull(i)) { @@ -225,12 +248,14 @@ private void executeReadWriteTransaction(DatabaseClient client) { } static Statement getRandomisedReadStatement() { - int randomKey = ThreadLocalRandom.current().nextInt(TOTAL_RECORDS); - return Statement.newBuilder(SELECT_QUERY).bind(ID_COLUMN_NAME).to(randomKey).build(); + return Statement.newBuilder(SELECT_QUERY).bind(ID_COLUMN_NAME).to(getRandomKey()).build(); } static Statement getRandomisedUpdateStatement() { - int randomKey = ThreadLocalRandom.current().nextInt(TOTAL_RECORDS); - return Statement.newBuilder(UPDATE_QUERY).bind(ID_COLUMN_NAME).to(randomKey).build(); + return Statement.newBuilder(UPDATE_QUERY).bind(ID_COLUMN_NAME).to(getRandomKey()).build(); + } + + static int getRandomKey() { + return ThreadLocalRandom.current().nextInt(TOTAL_RECORDS); } } diff --git a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/LatencyBenchmark.java b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/LatencyBenchmark.java index 73683932def..d3c2d71e955 100644 --- a/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/LatencyBenchmark.java +++ b/benchmarks/src/main/java/com/google/cloud/spanner/benchmark/LatencyBenchmark.java @@ -18,6 +18,7 @@ import com.google.api.core.InternalApi; import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.benchmark.BenchmarkRunner.Environment; import com.google.cloud.spanner.benchmark.BenchmarkRunner.TransactionType; import com.google.common.annotations.VisibleForTesting; import java.time.Duration; @@ -48,7 +49,11 @@ public static void main(String[] args) throws ParseException { String.format("projects/%s/instances/%s/databases/%s", project, instance, database); } else { throw new IllegalArgumentException( - "You must either set all the environment variables SPANNER_CLIENT_BENCHMARK_GOOGLE_CLOUD_PROJECT, SPANNER_CLIENT_BENCHMARK_SPANNER_INSTANCE and SPANNER_CLIENT_BENCHMARK_SPANNER_DATABASE, or specify a value for the command line argument --database"); + "You must either set all the environment variables" + + " SPANNER_CLIENT_BENCHMARK_GOOGLE_CLOUD_PROJECT," + + " SPANNER_CLIENT_BENCHMARK_SPANNER_INSTANCE and" + + " SPANNER_CLIENT_BENCHMARK_SPANNER_DATABASE, or specify a value for the command" + + " line argument --database"); } LatencyBenchmark benchmark = new LatencyBenchmark(DatabaseId.of(fullyQualifiedDatabase)); @@ -61,23 +66,36 @@ private static CommandLine parseCommandLine(String[] args) throws ParseException options.addOption( "c", "clients", true, "The number of clients that will be executing queries in parallel."); options.addOption( - "o", - "operations", + "wu", + "warmupTime", true, - "The number of operations that each client will execute. Defaults to 1000."); + "Total warm up time before running actual benchmarking. Defaults to 7 minutes."); + options.addOption( + "et", + "executionTime", + true, + "Total execution time of the benchmarking. Defaults to 30 minutes."); + options.addOption( + "st", "staleness", true, "Total Staleness for Reads and Queries. Defaults to 15 seconds."); options.addOption( "w", "wait", true, - "The wait time in milliseconds between each query that is executed by each client. Defaults to 0. " - + "Set this to for example 1000 to have each client execute 1 query per second."); + "The wait time in milliseconds between each query that is executed by each client. Defaults" + + " to 0. Set this to for example 1000 to have each client execute 1 query per" + + " second."); options.addOption( "t", - "transaction", + "transactionType", true, - "The type of transaction to execute. Must be either READ_ONLY or READ_WRITE. Defaults to READ_ONLY."); - options.addOption("m", "multiplexed", true, "Use multiplexed sessions. Defaults to false."); - options.addOption("w", "wait", true, "Wait time in millis. Defaults to zero."); + "The type of transaction to execute. Must be either READ_ONLY or READ_WRITE. Defaults to" + + " READ_ONLY."); + options.addOption( + "e", + "environment", + true, + "Spanner Environment. Must be either PROD or CLOUD_DEVEL. Default to CLOUD_DEVEL"); + options.addOption("m", "multiplexed", true, "Use multiplexed sessions. Defaults to true."); options.addOption("name", true, "Name of this test run"); CommandLineParser parser = new DefaultParser(); return parser.parse(options, args); @@ -91,34 +109,54 @@ private static CommandLine parseCommandLine(String[] args) throws ParseException public void run(CommandLine commandLine) { int clients = - commandLine.hasOption('c') ? Integer.parseInt(commandLine.getOptionValue('c')) : 16; - int operations = - commandLine.hasOption('o') ? Integer.parseInt(commandLine.getOptionValue('o')) : 1000; + commandLine.hasOption('c') ? Integer.parseInt(commandLine.getOptionValue('c')) : 1; + int executionTime = + commandLine.hasOption("et") ? Integer.parseInt(commandLine.getOptionValue("et")) : 30; + int warmUpTime = + commandLine.hasOption("wu") ? Integer.parseInt(commandLine.getOptionValue("wu")) : 7; int waitMillis = commandLine.hasOption('w') ? Integer.parseInt(commandLine.getOptionValue('w')) : 0; + int staleness = + commandLine.hasOption("st") ? Integer.parseInt(commandLine.getOptionValue("st")) : 15; TransactionType transactionType = commandLine.hasOption('t') ? TransactionType.valueOf(commandLine.getOptionValue('t').toUpperCase(Locale.ENGLISH)) - : TransactionType.READ_ONLY_SINGLE_USE; + : TransactionType.READ_ONLY_SINGLE_USE_QUERY; boolean useMultiplexedSession = - commandLine.hasOption('m') ? Boolean.parseBoolean(commandLine.getOptionValue('m')) : false; + !commandLine.hasOption('m') || Boolean.parseBoolean(commandLine.getOptionValue('m')); + Environment environment = + commandLine.hasOption('e') + ? Environment.valueOf(commandLine.getOptionValue('e').toUpperCase(Locale.ENGLISH)) + : Environment.CLOUD_DEVEL; + + BenchmarkingConfiguration configuration = + new BenchmarkingConfiguration() + .setDatabaseId(databaseId) + .setNumOfClients(clients) + .setExecutionTime(executionTime) + .setWarmupTime(warmUpTime) + .setStaleness(staleness) + .setTransactionType(transactionType) + .setUseMultiplexSession(useMultiplexedSession) + .setWaitBetweenRequests(waitMillis) + .setEnvironment(environment); System.out.println(); System.out.println("Running benchmark with the following options"); - System.out.printf("Database: %s\n", databaseId); - System.out.printf("Clients: %d\n", clients); - System.out.printf("Operations: %d\n", operations); - System.out.printf("Transaction type: %s\n", transactionType); - System.out.printf("Use Multiplexed Sessions: %s\n", useMultiplexedSession); - System.out.printf("Wait between queries: %dms\n", waitMillis); + System.out.printf("Database: %s\n", configuration.getDatabaseId()); + System.out.printf("Clients: %d\n", configuration.getNumOfClients()); + System.out.printf("Total Warm up Time: %d mins\n", configuration.getWarmupTime()); + System.out.printf("Total Execution Time: %d mins\n", configuration.getExecutionTime()); + System.out.printf("Staleness: %d secs\n", configuration.getStaleness()); + System.out.printf("Transaction type: %s\n", configuration.getTransactionType()); + System.out.printf("Use Multiplexed Sessions: %s\n", configuration.isUseMultiplexSession()); + System.out.printf("Wait between requests: %dms\n", configuration.getWaitBetweenRequests()); List javaClientResults = null; System.out.println(); System.out.println("Running benchmark for Java Client Library"); - JavaClientRunner javaClientRunner = new JavaClientRunner(databaseId); - javaClientResults = - javaClientRunner.execute( - transactionType, clients, operations, waitMillis, useMultiplexedSession); + JavaClientRunner javaClientRunner = new JavaClientRunner(configuration.getDatabaseId()); + javaClientResults = javaClientRunner.execute(configuration); printResults("Java Client Library", javaClientResults); } diff --git a/generation_config.yaml b/generation_config.yaml index ef44b5b9dea..5975d727df5 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -1,6 +1,6 @@ -gapic_generator_version: 2.50.0 -googleapis_commitish: 349841abac6c3e580ccce6e3d6fcc182ed2512c2 -libraries_bom_version: 26.50.0 +gapic_generator_version: 2.68.0 +googleapis_commitish: 59d5f2b46924714af627ac29ea6de78641a00835 +libraries_bom_version: 26.78.0 libraries: - api_shortname: spanner name_pretty: Cloud Spanner @@ -17,7 +17,7 @@ libraries: api_id: spanner.googleapis.com transport: grpc requires_billing: true - codeowner_team: '@googleapis/api-spanner-java' + codeowner_team: '@googleapis/spanner-team' library_type: GAPIC_COMBO excluded_poms: google-cloud-spanner-bom recommended_package: com.google.cloud.spanner diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml index 1db01f10946..1341af5fc1f 100644 --- a/google-cloud-spanner-bom/pom.xml +++ b/google-cloud-spanner-bom/pom.xml @@ -3,12 +3,12 @@ 4.0.0 com.google.cloud google-cloud-spanner-bom - 6.82.0 + 6.113.1-SNAPSHOT pom com.google.cloud sdk-platform-java-config - 3.40.0 + 3.58.0 Google Cloud Spanner BOM @@ -53,43 +53,43 @@ com.google.cloud google-cloud-spanner - 6.82.0 + 6.113.1-SNAPSHOT com.google.cloud google-cloud-spanner test-jar - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.82.0 + 6.113.1-SNAPSHOT @@ -100,7 +100,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.15.0 1.8 1.8 diff --git a/google-cloud-spanner-executor/clirr-ignored-differences.xml b/google-cloud-spanner-executor/clirr-ignored-differences.xml index 9d3c127bcc9..11e9890f1d9 100644 --- a/google-cloud-spanner-executor/clirr-ignored-differences.xml +++ b/google-cloud-spanner-executor/clirr-ignored-differences.xml @@ -7,4 +7,9 @@ CloudExecutorImpl(boolean) CloudExecutorImpl(boolean, double) + + 7002 + com/google/cloud/spanner/SessionPoolOptionsHelper + com.google.cloud.spanner.SessionPoolOptions$Builder setUseMultiplexedSessionBlindWrite(com.google.cloud.spanner.SessionPoolOptions$Builder, boolean) + diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index ccb631bb1a2..e3817e02302 100644 --- a/google-cloud-spanner-executor/pom.xml +++ b/google-cloud-spanner-executor/pom.xml @@ -5,20 +5,21 @@ 4.0.0 com.google.cloud google-cloud-spanner-executor - 6.82.0 + 6.113.1-SNAPSHOT jar Google Cloud Spanner Executor com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT 1.8 1.8 UTF-8 + 0.36.0 @@ -41,11 +42,30 @@ io.opentelemetry opentelemetry-sdk-trace - + + + com.google.cloud.opentelemetry + shared-resourcemapping + ${google.cloud.opentelemetry.version} + com.google.cloud.opentelemetry exporter-trace - 0.32.0 + ${google.cloud.opentelemetry.version} + + + io.opentelemetry.semconv + opentelemetry-semconv + + + + + com.google.cloud + grpc-gcp + + + io.opentelemetry.semconv + opentelemetry-semconv com.google.cloud @@ -54,7 +74,14 @@ com.google.cloud google-cloud-trace - 2.53.0 + 2.84.0 + + + + com.google.guava + failureaccess + + io.grpc @@ -127,7 +154,14 @@ com.google.api.grpc proto-google-cloud-trace-v1 - 2.53.0 + 2.84.0 + + + + com.google.guava + failureaccess + + com.google.api.grpc @@ -160,12 +194,12 @@ commons-cli commons-cli - 1.9.0 + 1.11.0 commons-io commons-io - 2.18.0 + 2.21.0 @@ -192,7 +226,7 @@ org.apache.maven.surefire surefire-junit4 - 3.5.2 + 3.5.5 test @@ -257,7 +291,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.2 + 3.5.5 @@ -266,7 +300,7 @@ org.apache.maven.plugins maven-dependency-plugin - com.google.api:gax,org.apache.maven.surefire:surefire-junit4 + com.google.api:gax,org.apache.maven.surefire:surefire-junit4,io.opentelemetry.semconv:opentelemetry-semconv,com.google.cloud.opentelemetry:shared-resourcemapping,com.google.cloud:grpc-gcp diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java index c82b6306eb8..a9323fbdc25 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java @@ -26,7 +26,7 @@ import com.google.api.gax.rpc.TransportChannelProvider; import com.google.api.gax.rpc.UnavailableException; import com.google.auth.Credentials; -import com.google.auth.oauth2.GoogleCredentials; +import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.ByteArray; import com.google.cloud.Date; import com.google.cloud.NoCredentials; @@ -47,6 +47,7 @@ import com.google.cloud.spanner.InstanceConfigInfo; import com.google.cloud.spanner.InstanceId; import com.google.cloud.spanner.InstanceInfo; +import com.google.cloud.spanner.Interval; import com.google.cloud.spanner.Key; import com.google.cloud.spanner.KeyRange; import com.google.cloud.spanner.KeySet; @@ -176,6 +177,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; @@ -424,6 +426,7 @@ public synchronized boolean finish(Mode finishMode) throws Exception { } } } + /** * All the context in which SpannerActions are executed. It stores the current running transaction * and table metadata, shared by all the action executor and protected by a lock. There will only @@ -790,7 +793,7 @@ private synchronized Spanner getClient(boolean useMultiplexedSession) throws IOE if (client != null) { return client; } - client = getClient(/*timeoutSeconds=*/ 0, useMultiplexedSession); + client = getClient(/* timeoutSeconds= */ 0, useMultiplexedSession); return client; } @@ -803,7 +806,7 @@ private synchronized Spanner getClient(long timeoutSeconds, boolean useMultiplex credentials = NoCredentials.getInstance(); } else { credentials = - GoogleCredentials.fromStream( + ServiceAccountCredentials.fromStream( new ByteArrayInputStream( FileUtils.readFileToByteArray(new File(WorkerProxy.serviceKeyFile))), HTTP_TRANSPORT_FACTORY); @@ -830,10 +833,10 @@ private synchronized Spanner getClient(long timeoutSeconds, boolean useMultiplex com.google.cloud.spanner.SessionPoolOptions.Builder poolOptionsBuilder = com.google.cloud.spanner.SessionPoolOptions.newBuilder(); SessionPoolOptionsHelper.setUseMultiplexedSession(poolOptionsBuilder, useMultiplexedSession); - SessionPoolOptionsHelper.setUseMultiplexedSessionBlindWrite( - poolOptionsBuilder, useMultiplexedSession); SessionPoolOptionsHelper.setUseMultiplexedSessionForRW( poolOptionsBuilder, useMultiplexedSession); + SessionPoolOptionsHelper.setUseMultiplexedSessionForPartitionedOperations( + poolOptionsBuilder, useMultiplexedSession); LOGGER.log( Level.INFO, String.format( @@ -885,7 +888,7 @@ private synchronized TraceServiceClient getTraceServiceClient() throws IOExcepti credentials = NoCredentials.getInstance(); } else { credentials = - GoogleCredentials.fromStream( + ServiceAccountCredentials.fromStream( new ByteArrayInputStream( FileUtils.readFileToByteArray(new File(WorkerProxy.serviceKeyFile))), HTTP_TRANSPORT_FACTORY); @@ -1021,7 +1024,7 @@ private Status executeAction( return executeFinishTxn(action.getFinish(), outcomeSender, executionContext); } else if (action.hasMutation()) { return executeMutation( - action.getMutation(), outcomeSender, executionContext, /*isWrite=*/ false); + action.getMutation(), outcomeSender, executionContext, /* isWrite= */ false); } else if (action.hasRead()) { return executeRead( useMultiplexedSession, action.getRead(), outcomeSender, executionContext); @@ -1035,7 +1038,7 @@ private Status executeAction( return executeCloudBatchDmlUpdates(action.getBatchDml(), outcomeSender, executionContext); } else if (action.hasWrite()) { return executeMutation( - action.getWrite().getMutation(), outcomeSender, executionContext, /*isWrite=*/ true); + action.getWrite().getMutation(), outcomeSender, executionContext, /* isWrite= */ true); } else if (action.hasStartBatchTxn()) { if (dbPath == null) { throw SpannerExceptionFactory.newSpannerException( @@ -2842,61 +2845,81 @@ private Status processResults( /** Convert a result row to a row proto(value list) for sending back to the client. */ private com.google.spanner.executor.v1.ValueList buildRow( StructReader result, OutcomeSender sender) throws SpannerException { - com.google.spanner.executor.v1.ValueList.Builder rowBuilder = - com.google.spanner.executor.v1.ValueList.newBuilder(); + sender.setRowType(buildStructType(result)); + return buildStruct(result); + } + + /** Construct a StructType for a given struct. This is used to set the row type. */ + private com.google.spanner.v1.StructType buildStructType(StructReader struct) { com.google.spanner.v1.StructType.Builder rowTypeBuilder = com.google.spanner.v1.StructType.newBuilder(); - for (int i = 0; i < result.getColumnCount(); ++i) { - com.google.cloud.spanner.Type columnType = result.getColumnType(i); + for (int i = 0; i < struct.getColumnCount(); ++i) { + com.google.cloud.spanner.Type columnType = struct.getColumnType(i); rowTypeBuilder.addFields( com.google.spanner.v1.StructType.Field.newBuilder() - .setName(result.getType().getStructFields().get(i).getName()) + .setName(struct.getType().getStructFields().get(i).getName()) .setType(cloudTypeToTypeProto(columnType)) .build()); + } + return rowTypeBuilder.build(); + } + + /** Convert a struct to a proto(value list) for constructing result rows and struct values. */ + private com.google.spanner.executor.v1.ValueList buildStruct(StructReader struct) { + com.google.spanner.executor.v1.ValueList.Builder structBuilder = + com.google.spanner.executor.v1.ValueList.newBuilder(); + for (int i = 0; i < struct.getColumnCount(); ++i) { + com.google.cloud.spanner.Type columnType = struct.getColumnType(i); com.google.spanner.executor.v1.Value.Builder value = com.google.spanner.executor.v1.Value.newBuilder(); - if (result.isNull(i)) { + if (struct.isNull(i)) { value.setIsNull(true); } else { switch (columnType.getCode()) { case BOOL: - value.setBoolValue(result.getBoolean(i)); + value.setBoolValue(struct.getBoolean(i)); break; case FLOAT32: - value.setDoubleValue((double) result.getFloat(i)); + value.setDoubleValue((double) struct.getFloat(i)); break; case FLOAT64: - value.setDoubleValue(result.getDouble(i)); + value.setDoubleValue(struct.getDouble(i)); break; case INT64: - value.setIntValue(result.getLong(i)); + value.setIntValue(struct.getLong(i)); break; case STRING: - value.setStringValue(result.getString(i)); + value.setStringValue(struct.getString(i)); break; case BYTES: - value.setBytesValue(toByteString(result.getBytes(i))); + value.setBytesValue(toByteString(struct.getBytes(i))); break; case TIMESTAMP: - value.setTimestampValue(timestampToProto(result.getTimestamp(i))); + value.setTimestampValue(timestampToProto(struct.getTimestamp(i))); break; case DATE: - value.setDateDaysValue(daysFromDate(result.getDate(i))); + value.setDateDaysValue(daysFromDate(struct.getDate(i))); + break; + case INTERVAL: + value.setStringValue(struct.getInterval(i).toISO8601()); + break; + case UUID: + value.setStringValue(struct.getUuid(i).toString()); break; case NUMERIC: - String ascii = result.getBigDecimal(i).toPlainString(); + String ascii = struct.getBigDecimal(i).toPlainString(); value.setStringValue(ascii); break; case JSON: - value.setStringValue(result.getJson(i)); + value.setStringValue(struct.getJson(i)); break; case ARRAY: - switch (result.getColumnType(i).getArrayElementType().getCode()) { + switch (struct.getColumnType(i).getArrayElementType().getCode()) { case BOOL: { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getBooleanList(i); + List values = struct.getBooleanList(i); for (Boolean booleanValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -2915,7 +2938,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getFloatList(i); + List values = struct.getFloatList(i); for (Float floatValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -2934,7 +2957,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getDoubleList(i); + List values = struct.getDoubleList(i); for (Double doubleValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -2953,7 +2976,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getLongList(i); + List values = struct.getLongList(i); for (Long longValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -2972,7 +2995,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getStringList(i); + List values = struct.getStringList(i); for (String stringValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -2991,7 +3014,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getBytesList(i); + List values = struct.getBytesList(i); for (ByteArray byteArrayValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -3013,7 +3036,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getDateList(i); + List values = struct.getDateList(i); for (Date dateValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -3033,7 +3056,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getTimestampList(i); + List values = struct.getTimestampList(i); for (Timestamp timestampValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -3049,11 +3072,49 @@ private com.google.spanner.executor.v1.ValueList buildRow( com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.TIMESTAMP).build()); } break; + case INTERVAL: + { + com.google.spanner.executor.v1.ValueList.Builder builder = + com.google.spanner.executor.v1.ValueList.newBuilder(); + List values = struct.getIntervalList(i); + for (Interval interval : values) { + com.google.spanner.executor.v1.Value.Builder valueProto = + com.google.spanner.executor.v1.Value.newBuilder(); + if (interval == null) { + builder.addValue(valueProto.setIsNull(true).build()); + } else { + builder.addValue(valueProto.setStringValue(interval.toISO8601()).build()); + } + } + value.setArrayValue(builder.build()); + value.setArrayType( + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.INTERVAL).build()); + } + break; + case UUID: + { + com.google.spanner.executor.v1.ValueList.Builder builder = + com.google.spanner.executor.v1.ValueList.newBuilder(); + List values = struct.getUuidList(i); + for (UUID uuidValue : values) { + com.google.spanner.executor.v1.Value.Builder valueProto = + com.google.spanner.executor.v1.Value.newBuilder(); + if (uuidValue == null) { + builder.addValue(valueProto.setIsNull(true).build()); + } else { + builder.addValue(valueProto.setStringValue(uuidValue.toString()).build()); + } + } + value.setArrayValue(builder.build()); + value.setArrayType( + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build()); + } + break; case NUMERIC: { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getBigDecimalList(i); + List values = struct.getBigDecimalList(i); for (BigDecimal bigDec : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -3072,7 +3133,7 @@ private com.google.spanner.executor.v1.ValueList buildRow( { com.google.spanner.executor.v1.ValueList.Builder builder = com.google.spanner.executor.v1.ValueList.newBuilder(); - List values = result.getJsonList(i); + List values = struct.getJsonList(i); for (String stringValue : values) { com.google.spanner.executor.v1.Value.Builder valueProto = com.google.spanner.executor.v1.Value.newBuilder(); @@ -3087,28 +3148,47 @@ private com.google.spanner.executor.v1.ValueList buildRow( com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.JSON).build()); } break; + case STRUCT: + { + com.google.spanner.executor.v1.ValueList.Builder builder = + com.google.spanner.executor.v1.ValueList.newBuilder(); + List values = struct.getStructList(i); + for (StructReader structValue : values) { + com.google.spanner.executor.v1.Value.Builder valueProto = + com.google.spanner.executor.v1.Value.newBuilder(); + if (structValue == null) { + builder.addValue(valueProto.setIsNull(true).build()); + } else { + builder.addValue(valueProto.setStructValue(buildStruct(structValue))).build(); + } + } + value.setArrayValue(builder.build()); + value.setArrayType( + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.STRUCT).build()); + } + break; default: throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, "Unsupported row array type: " - + result.getColumnType(i) + + struct.getColumnType(i) + " for result type " - + result.getType().toString()); + + struct.getType().toString()); } break; default: throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, "Unsupported row type: " - + result.getColumnType(i) + + struct.getColumnType(i) + " for result type " - + result.getType().toString()); + + struct.getType().toString()); } } - rowBuilder.addValue(value.build()); + structBuilder.addValue(value.build()); } - sender.setRowType(rowTypeBuilder.build()); - return rowBuilder.build(); + ; + return structBuilder.build(); } /** Convert a ListValue proto to a list of cloud Value. */ @@ -3164,7 +3244,7 @@ private static com.google.cloud.spanner.KeyRange keyRangeProtoToCloudKeyRange( return KeyRange.openClosed(start, end); case OPEN_OPEN: return KeyRange.openOpen(start, end); - // Unreachable. + // Unreachable. default: throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, "Unrecognized key range type"); @@ -3193,6 +3273,7 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey( case BYTES: case FLOAT64: case DATE: + case UUID: case TIMESTAMP: case NUMERIC: case JSON: @@ -3217,7 +3298,7 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey( case BYTES: cloudKey.append(toByteArray(part.getBytesValue())); break; - // Unreachable + // Unreachable default: throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, "Unsupported key part type: " + type.getCode().name()); @@ -3226,6 +3307,8 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey( if (type.getCode() == TypeCode.NUMERIC) { String ascii = part.getStringValue(); cloudKey.append(new BigDecimal(ascii)); + } else if (type.getCode() == TypeCode.UUID) { + cloudKey.append(UUID.fromString(part.getStringValue())); } else { cloudKey.append(part.getStringValue()); } @@ -3280,6 +3363,12 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue( case DATE: return com.google.cloud.spanner.Value.date( value.hasIsNull() ? null : dateFromDays(value.getDateDaysValue())); + case INTERVAL: + return com.google.cloud.spanner.Value.interval( + value.hasIsNull() ? null : Interval.parseFromString(value.getStringValue())); + case UUID: + return com.google.cloud.spanner.Value.uuid( + value.hasIsNull() ? null : UUID.fromString(value.getStringValue())); case NUMERIC: { if (value.hasIsNull()) { @@ -3404,6 +3493,34 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue( .collect(Collectors.toList()), CloudClientExecutor::dateFromDays)); } + case INTERVAL: + if (value.hasIsNull()) { + return com.google.cloud.spanner.Value.intervalArray(null); + } else { + return com.google.cloud.spanner.Value.intervalArray( + unmarshallValueList( + value.getArrayValue().getValueList().stream() + .map(com.google.spanner.executor.v1.Value::getIsNull) + .collect(Collectors.toList()), + value.getArrayValue().getValueList().stream() + .map(com.google.spanner.executor.v1.Value::getStringValue) + .collect(Collectors.toList()), + Interval::parseFromString)); + } + case UUID: + if (value.hasIsNull()) { + return com.google.cloud.spanner.Value.uuidArray(null); + } else { + return com.google.cloud.spanner.Value.uuidArray( + unmarshallValueList( + value.getArrayValue().getValueList().stream() + .map(com.google.spanner.executor.v1.Value::getIsNull) + .collect(Collectors.toList()), + value.getArrayValue().getValueList().stream() + .map(com.google.spanner.executor.v1.Value::getStringValue) + .collect(Collectors.toList()), + UUID::fromString)); + } case NUMERIC: { if (value.hasIsNull()) { @@ -3571,6 +3688,10 @@ private static com.google.cloud.spanner.Type typeProtoToCloudType( return com.google.cloud.spanner.Type.date(); case TIMESTAMP: return com.google.cloud.spanner.Type.timestamp(); + case INTERVAL: + return com.google.cloud.spanner.Type.interval(); + case UUID: + return com.google.cloud.spanner.Type.uuid(); case NUMERIC: if (typeProto.getTypeAnnotation().equals(TypeAnnotationCode.PG_NUMERIC)) { return com.google.cloud.spanner.Type.pgNumeric(); @@ -3625,6 +3746,10 @@ private static com.google.spanner.v1.Type cloudTypeToTypeProto(@Nonnull Type clo return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.TIMESTAMP).build(); case DATE: return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.DATE).build(); + case INTERVAL: + return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.INTERVAL).build(); + case UUID: + return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build(); case NUMERIC: return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.NUMERIC).build(); case PG_NUMERIC: diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java index 537a6ed4c33..eb6502c461c 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java @@ -368,9 +368,9 @@ private Status flush() { LOGGER.log( Level.INFO, String.format( - "OutcomeSender with action ID %s for change stream %s and partition token %s is " - + "sending data change records with the following transaction id/record sequence " - + "combinations: %s and partition tokens: %s", + "OutcomeSender with action ID %s for change stream %s and partition token %s is" + + " sending data change records with the following transaction id/record" + + " sequence combinations: %s and partition tokens: %s", this.changeStreamForQuery, this.partitionTokenForQuery, actionId, diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutorImpl.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutorImpl.java index 6fee10c95b6..f3de36ac7b4 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutorImpl.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutorImpl.java @@ -91,21 +91,14 @@ public void onNext(SpannerAsyncActionRequest request) { SessionPoolOptions.Builder sessionPoolOptionsBuilder; if (request.getAction().getSpannerOptions().hasSessionPoolOptions()) { sessionPoolOptionsBuilder = - request - .getAction() - .getSpannerOptions() - .getSessionPoolOptions() - .toBuilder() + request.getAction().getSpannerOptions().getSessionPoolOptions().toBuilder() .setUseMultiplexed(true); } else { sessionPoolOptionsBuilder = SessionPoolOptions.newBuilder().setUseMultiplexed(true); } SpannerOptions.Builder optionsBuilder = - request - .getAction() - .getSpannerOptions() - .toBuilder() + request.getAction().getSpannerOptions().toBuilder() .setSessionPoolOptions(sessionPoolOptionsBuilder); SpannerAction.Builder actionBuilder = request.getAction().toBuilder().setSpannerOptions(optionsBuilder); diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/WorkerProxy.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/WorkerProxy.java index 2146adb1d47..0da30f82d23 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/WorkerProxy.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/WorkerProxy.java @@ -19,7 +19,7 @@ import com.google.api.client.http.javanet.NetHttpTransport; import com.google.auth.Credentials; import com.google.auth.http.HttpTransportFactory; -import com.google.auth.oauth2.GoogleCredentials; +import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.opentelemetry.trace.TraceConfiguration; import com.google.cloud.opentelemetry.trace.TraceExporter; import com.google.cloud.spanner.ErrorCode; @@ -87,7 +87,7 @@ public static OpenTelemetrySdk setupOpenTelemetrySdk() throws Exception { // Read credentials from the serviceKeyFile. HttpTransportFactory HTTP_TRANSPORT_FACTORY = NetHttpTransport::new; Credentials credentials = - GoogleCredentials.fromStream( + ServiceAccountCredentials.fromStream( new ByteArrayInputStream(FileUtils.readFileToByteArray(new File(serviceKeyFile))), HTTP_TRANSPORT_FACTORY); diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/SessionPoolOptionsHelper.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/SessionPoolOptionsHelper.java index f19cb8f4a2f..9dd8ac29563 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/SessionPoolOptionsHelper.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/SessionPoolOptionsHelper.java @@ -31,14 +31,6 @@ public static SessionPoolOptions.Builder setUseMultiplexedSession( return sessionPoolOptionsBuilder.setUseMultiplexedSession(useMultiplexedSession); } - // TODO: Remove when multiplexed session for blind write is released. - public static SessionPoolOptions.Builder setUseMultiplexedSessionBlindWrite( - SessionPoolOptions.Builder sessionPoolOptionsBuilder, - boolean useMultiplexedSessionBlindWrite) { - return sessionPoolOptionsBuilder.setUseMultiplexedSessionBlindWrite( - useMultiplexedSessionBlindWrite); - } - // TODO: Remove when multiplexed session for read write is released. public static SessionPoolOptions.Builder setUseMultiplexedSessionForRW( SessionPoolOptions.Builder sessionPoolOptionsBuilder, boolean useMultiplexedSessionForRW) { diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClient.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClient.java index 368b42e07df..fd83e680e9c 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClient.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxySettings.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxySettings.java index f24a2f2bdc3..ed4b3c70d65 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxySettings.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxySettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -82,8 +82,8 @@ * } * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. */ @Generated("by gapic-generator-java") public class SpannerExecutorProxySettings extends ClientSettings { diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/package-info.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/package-info.java index f76bafaa308..f3f9883a079 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/package-info.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyCallableFactory.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyCallableFactory.java index 4e69db41a1e..2bdb9765036 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyCallableFactory.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyStub.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyStub.java index 0950cbc56e5..56a1d3ff55a 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyStub.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/GrpcSpannerExecutorProxyStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,6 +49,7 @@ public class GrpcSpannerExecutorProxyStub extends SpannerExecutorProxyStub { ProtoUtils.marshaller(SpannerAsyncActionRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(SpannerAsyncActionResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private final BidiStreamingCallable diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStub.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStub.java index c23b1574b5a..8c932e57f95 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStub.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java index fbcf8bada1f..a71beccbf93 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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,6 +27,7 @@ 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.LibraryMetadata; import com.google.api.gax.rpc.StatusCode; import com.google.api.gax.rpc.StreamingCallSettings; import com.google.api.gax.rpc.StubSettings; @@ -91,10 +92,11 @@ * } * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. */ @Generated("by gapic-generator-java") +@SuppressWarnings("CanonicalDuration") public class SpannerExecutorProxyStubSettings extends StubSettings { /** The default scopes of the service. */ @@ -194,6 +196,14 @@ protected SpannerExecutorProxyStubSettings(Builder settingsBuilder) throws IOExc executeActionAsyncSettings = settingsBuilder.executeActionAsyncSettings().build(); } + @Override + protected LibraryMetadata getLibraryMetadata() { + return LibraryMetadata.newBuilder() + .setArtifactName("com.google.cloud:google-cloud-spanner") + .setRepository("googleapis/java-spanner") + .build(); + } + /** Builder for SpannerExecutorProxyStubSettings. */ public static class Builder extends StubSettings.Builder { diff --git a/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json b/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json index b3291f2748a..02102d0112e 100644 --- a/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json +++ b/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json @@ -1034,6 +1034,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnforceNamingStyle", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnumType", "queryAllDeclaredConstructors": true, @@ -1088,6 +1097,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$DefaultSymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults", "queryAllDeclaredConstructors": true, @@ -1205,6 +1241,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FieldOptions$JSType", "queryAllDeclaredConstructors": true, @@ -1511,6 +1565,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$SymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption", "queryAllDeclaredConstructors": true, @@ -1700,6 +1763,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.Backup", "queryAllDeclaredConstructors": true, @@ -1745,6 +1844,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.BackupSchedule", "queryAllDeclaredConstructors": true, @@ -2276,6 +2393,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.ListBackupOperationsRequest", "queryAllDeclaredConstructors": true, @@ -2618,6 +2771,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints$Key", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints$Key$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.UpdateBackupRequest", "queryAllDeclaredConstructors": true, @@ -2978,6 +3167,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.FreeInstanceMetadata", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.instance.v1.FreeInstanceMetadata$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.instance.v1.FreeInstanceMetadata$ExpireBehavior", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.FulfillmentPeriod", "queryAllDeclaredConstructors": true, @@ -3077,6 +3293,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.Instance$InstanceType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.Instance$State", "queryAllDeclaredConstructors": true, @@ -3104,6 +3329,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.InstanceConfig$FreeInstanceAvailability", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.instance.v1.InstanceConfig$QuorumType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.InstanceConfig$State", "queryAllDeclaredConstructors": true, @@ -3572,6 +3815,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.executor.v1.AdaptMessageAction", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.executor.v1.AdaptMessageAction$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.executor.v1.AddSplitPointsAction", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.executor.v1.AddSplitPointsAction$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.executor.v1.AdminAction", "queryAllDeclaredConstructors": true, @@ -5138,6 +5417,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.CacheUpdate", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.CacheUpdate$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.CommitRequest", "queryAllDeclaredConstructors": true, @@ -5426,6 +5723,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Group", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Group$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.KeyRange", "queryAllDeclaredConstructors": true, @@ -5444,6 +5759,60 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.KeyRecipe", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part$NullOrder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part$Order", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.KeySet", "queryAllDeclaredConstructors": true, @@ -5525,6 +5894,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Mutation$Ack", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Mutation$Ack$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Mutation$Builder", "queryAllDeclaredConstructors": true, @@ -5552,6 +5939,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Mutation$Send", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Mutation$Send$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Mutation$Write", "queryAllDeclaredConstructors": true, @@ -5741,6 +6146,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult$IndexAdvice", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult$IndexAdvice$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.QueryPlan", "queryAllDeclaredConstructors": true, @@ -5759,6 +6200,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Range", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Range$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.ReadRequest", "queryAllDeclaredConstructors": true, @@ -5795,6 +6254,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.RecipeList", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RecipeList$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.RequestOptions", "queryAllDeclaredConstructors": true, @@ -5813,6 +6290,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.RequestOptions$ClientContext", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RequestOptions$ClientContext$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.RequestOptions$Priority", "queryAllDeclaredConstructors": true, @@ -5894,6 +6389,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.RoutingHint", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RoutingHint$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RoutingHint$SkippedTablet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RoutingHint$SkippedTablet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Session", "queryAllDeclaredConstructors": true, @@ -5948,6 +6479,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Tablet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Tablet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Tablet$Role", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Transaction", "queryAllDeclaredConstructors": true, @@ -5984,6 +6542,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.TransactionOptions$IsolationLevel", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.TransactionOptions$PartitionedDml", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxy.java b/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxy.java index a0c082532ff..95aaa8fea22 100644 --- a/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxy.java +++ b/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxyImpl.java b/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxyImpl.java index ac283457321..9e5c02c6ba5 100644 --- a/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxyImpl.java +++ b/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/MockSpannerExecutorProxyImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -77,7 +77,8 @@ public void onNext(SpannerAsyncActionRequest value) { responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method ExecuteActionAsync, expected %s or %s", + "Unrecognized response type %s for method ExecuteActionAsync, expected %s" + + " or %s", response == null ? "null" : response.getClass().getName(), SpannerAsyncActionResponse.class.getName(), Exception.class.getName()))); diff --git a/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClientTest.java b/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClientTest.java index 97d605fa770..8b74f5ad936 100644 --- a/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClientTest.java +++ b/google-cloud-spanner-executor/src/test/java/com/google/cloud/spanner/executor/v1/SpannerExecutorProxyClientTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml index 5b84cb4ebc3..a57bf40d1ba 100644 --- a/google-cloud-spanner/clirr-ignored-differences.xml +++ b/google-cloud-spanner/clirr-ignored-differences.xml @@ -566,6 +566,80 @@ java.util.List getFloat32Array() + + + 7012 + com/google/cloud/spanner/StructReader + java.util.UUID getUuid(int) + + + 7012 + com/google/cloud/spanner/StructReader + java.util.UUID getUuid(java.lang.String) + + + 7012 + com/google/cloud/spanner/StructReader + java.util.List getUuidList(int) + + + 7012 + com/google/cloud/spanner/StructReader + java.util.List getUuidList(java.lang.String) + + + 7013 + com/google/cloud/spanner/Value + java.util.UUID getUuid() + + + 7013 + com/google/cloud/spanner/Value + java.util.List getUuidArray() + + + + + 7012 + com/google/cloud/spanner/StructReader + com.google.cloud.spanner.Interval getInterval(int) + + + 7012 + com/google/cloud/spanner/StructReader + com.google.cloud.spanner.Interval getInterval(java.lang.String) + + + 7012 + com/google/cloud/spanner/StructReader + com.google.cloud.spanner.Interval[] getIntervalArray(int) + + + 7012 + com/google/cloud/spanner/StructReader + com.google.cloud.spanner.Interval[] getIntervalArray(java.lang.String) + + + 7012 + com/google/cloud/spanner/StructReader + java.util.List getIntervalList(int) + + + 7012 + com/google/cloud/spanner/StructReader + java.util.List getIntervalList(java.lang.String) + + + 7013 + com/google/cloud/spanner/Value + com.google.cloud.spanner.Interval getInterval() + + + 7013 + com/google/cloud/spanner/Value + java.util.List getIntervalArray() + + 7012 @@ -709,6 +783,20 @@ boolean isEnableBuiltInMetrics() + + + 7012 + com/google/cloud/spanner/SpannerOptions$SpannerEnvironment + boolean isEnableGRPCBuiltInMetrics() + + + + + 7012 + com/google/cloud/spanner/SpannerOptions$SpannerEnvironment + boolean isEnableAFEServerTiming() + + 7012 @@ -765,7 +853,7 @@ com/google/cloud/spanner/connection/Connection boolean isKeepTransactionAlive() - + 7012 @@ -797,7 +885,7 @@ com/google/cloud/spanner/connection/Connection boolean isAutoBatchDmlUpdateCountVerification() - + 7012 @@ -814,6 +902,241 @@ com/google/cloud/spanner/connection/TransactionRetryListener void retryDmlAsPartitionedDmlFailed(java.util.UUID, com.google.cloud.spanner.Statement, java.lang.Throwable) - - + + + + 7012 + com/google/cloud/spanner/connection/Connection + java.lang.Object runTransaction(com.google.cloud.spanner.connection.Connection$TransactionCallable) + + + + + 7012 + com/google/cloud/spanner/SpannerOptions$SpannerEnvironment + com.google.auth.oauth2.GoogleCredentials getDefaultExperimentalHostCredentials() + + + 7002 + com/google/cloud/spanner/SpannerOptions$SpannerEnvironment + com.google.auth.oauth2.GoogleCredentials getDefaultExternalHostCredentials() + + + 7002 + com/google/cloud/spanner/SpannerOptions + com.google.auth.oauth2.GoogleCredentials getDefaultExternalHostCredentialsFromSysEnv() + + + + + 7012 + com/google/cloud/spanner/connection/Connection + void setDefaultSequenceKind(java.lang.String) + + + 7012 + com/google/cloud/spanner/connection/Connection + java.lang.String getDefaultSequenceKind() + + + + + 7012 + com/google/cloud/spanner/connection/Connection + void setDefaultIsolationLevel(com.google.spanner.v1.TransactionOptions$IsolationLevel) + + + 7012 + com/google/cloud/spanner/connection/Connection + com.google.spanner.v1.TransactionOptions$IsolationLevel getDefaultIsolationLevel() + + + + + 7012 + com/google/cloud/spanner/connection/Connection + void beginTransaction(com.google.spanner.v1.TransactionOptions$IsolationLevel) + + + 7012 + com/google/cloud/spanner/connection/Connection + com.google.api.core.ApiFuture beginTransactionAsync(com.google.spanner.v1.TransactionOptions$IsolationLevel) + + + + + 8001 + com/google/cloud/spanner/connection/ConnectionOptions$ConnectionProperty + + + 6001 + com/google/cloud/spanner/connection/ConnectionOptions + VALID_PROPERTIES + + + + + 7002 + com/google/cloud/spanner/connection/AbstractStatementParser + boolean supportsExplain() + + + 7002 + com/google/cloud/spanner/connection/PostgreSQLStatementParser + boolean supportsExplain() + + + 7002 + com/google/cloud/spanner/connection/SpannerStatementParser + boolean supportsExplain() + + + + 7012 + com/google/cloud/spanner/DatabaseClient + com.google.cloud.spanner.Statement$StatementFactory getStatementFactory() + + + + + 7012 + com/google/cloud/spanner/AsyncTransactionManager + com.google.cloud.spanner.AsyncTransactionManager$TransactionContextFuture beginAsync(com.google.cloud.spanner.AbortedException) + + + 7012 + com/google/cloud/spanner/TransactionManager + com.google.cloud.spanner.TransactionContext begin(com.google.cloud.spanner.AbortedException) + + + 7012 + com/google/cloud/spanner/StructReader + java.lang.Object getOrNull(int, java.util.function.BiFunction) + + + 7012 + com/google/cloud/spanner/StructReader + java.lang.Object getOrNull(java.lang.String, java.util.function.BiFunction) + + + 7012 + com/google/cloud/spanner/StructReader + java.lang.Object getOrDefault(int, java.util.function.BiFunction, java.lang.Object) + + + 7012 + com/google/cloud/spanner/StructReader + java.lang.Object getOrDefault(java.lang.String, java.util.function.BiFunction, java.lang.Object) + + + 7012 + com/google/cloud/spanner/SpannerOptions$SpannerEnvironment + boolean isEnableDirectAccess() + + + 7012 + com/google/cloud/spanner/connection/Connection + void setReadLockMode(com.google.spanner.v1.TransactionOptions$ReadWrite$ReadLockMode) + + + 7012 + com/google/cloud/spanner/connection/Connection + com.google.spanner.v1.TransactionOptions$ReadWrite$ReadLockMode getReadLockMode() + + + 7012 + com/google/cloud/spanner/connection/Connection + void setTransactionTimeout(java.time.Duration) + + + 7012 + com/google/cloud/spanner/connection/Connection + java.time.Duration getTransactionTimeout() + + + 8001 + com/google/cloud/spanner/LatencyTest + + + 7012 + com/google/cloud/spanner/connection/Connection + java.lang.Object getConnectionPropertyValue(com.google.cloud.spanner.connection.ConnectionProperty) + + + + 7002 + com/google/cloud/spanner/CompositeTracer + void recordAFELatency(java.lang.Long) + + + 7002 + com/google/cloud/spanner/CompositeTracer + void recordAFELatency(java.lang.Float) + + + 7002 + com/google/cloud/spanner/CompositeTracer + void recordAfeHeaderMissingCount(java.lang.Long) + + + 7002 + com/google/cloud/spanner/CompositeTracer + void recordGFELatency(java.lang.Long) + + + 7002 + com/google/cloud/spanner/CompositeTracer + void recordGFELatency(java.lang.Float) + + + 7002 + com/google/cloud/spanner/CompositeTracer + void recordGfeHeaderMissingCount(java.lang.Long) + + + + 7002 + com/google/cloud/spanner/SpannerException + void setRequestId(com.google.cloud.spanner.XGoogSpannerRequestId) + + + 7002 + com/google/cloud/spanner/SpannerExceptionFactory + com.google.cloud.spanner.SpannerBatchUpdateException newSpannerBatchUpdateException(com.google.cloud.spanner.ErrorCode, java.lang.String, long[], com.google.cloud.spanner.XGoogSpannerRequestId) + + + 7002 + com/google/cloud/spanner/SpannerExceptionFactory + com.google.cloud.spanner.SpannerException newSpannerException(com.google.cloud.spanner.ErrorCode, java.lang.String, java.lang.Throwable, com.google.cloud.spanner.XGoogSpannerRequestId) + + + 7002 + com/google/cloud/spanner/SpannerExceptionFactory + com.google.cloud.spanner.SpannerException newSpannerException(com.google.cloud.spanner.ErrorCode, java.lang.String, com.google.cloud.spanner.XGoogSpannerRequestId) + + + 7002 + com/google/cloud/spanner/SpannerExceptionFactory + com.google.cloud.spanner.SpannerException newSpannerException(java.lang.Throwable, com.google.cloud.spanner.XGoogSpannerRequestId) + + + 7002 + com/google/cloud/spanner/SpannerExceptionFactory + com.google.cloud.spanner.SpannerException newSpannerException(io.grpc.Context, java.lang.Throwable, com.google.cloud.spanner.XGoogSpannerRequestId) + + + 7002 + com/google/cloud/spanner/SpannerExceptionFactory + com.google.cloud.spanner.SpannerException propagateInterrupt(java.lang.InterruptedException, com.google.cloud.spanner.XGoogSpannerRequestId) + + + 6001 + com/google/cloud/spanner/XGoogSpannerRequestId + REQUEST_HEADER_KEY + + + 6001 + com/google/cloud/spanner/XGoogSpannerRequestId + REQUEST_ID + diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index b7589c10203..0d70d6718b2 100644 --- a/google-cloud-spanner/pom.xml +++ b/google-cloud-spanner/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-spanner - 6.82.0 + 6.113.1-SNAPSHOT jar Google Cloud Spanner https://github.com/googleapis/java-spanner @@ -11,11 +11,12 @@ com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT google-cloud-spanner 0.31.1 + 3.85.0 com.google.cloud.spanner.GceTestEnvConfig projects/gcloud-devel/instances/spanner-testing-east1 gcloud-devel @@ -24,11 +25,18 @@ + + + kr.motd.maven + os-maven-plugin + 1.7.1 + + org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.14 @@ -64,6 +72,7 @@ ${spanner.testenv.instance} ${spanner.gce.config.project_id} ${spanner.testenv.kms_key.name} + logging.properties @@ -88,6 +97,7 @@ ${spanner.testenv.instance} ${spanner.gce.config.project_id} ${spanner.testenv.kms_key.name} + logging.properties 3000 @@ -124,6 +134,7 @@ -Dspanner.testenv.instance=${spanner.testenv.instance} -Dspanner.gce.config.project_id=${spanner.gce.config.project_id} -Dspanner.testenv.kms_key.name=${spanner.testenv.kms_key.name} + -Djava.util.logging.config.file=logging.properties @@ -143,6 +154,25 @@ com/google/cloud/spanner/spi/v1/** + + org.xolstice.maven.plugins + protobuf-maven-plugin + 0.6.1 + + com.google.protobuf:protoc:4.33.2:exe:${os.detected.classifier} + + ${project.basedir}/../proto-google-cloud-spanner-v1/src/main/proto + + + + + test-compile + + test-compile + + + + @@ -162,6 +192,12 @@ com.google.cloud grpc-gcp + + + io.opentelemetry + opentelemetry-api + + io.grpc @@ -191,6 +227,16 @@ io.grpc grpc-stub + + io.grpc + grpc-opentelemetry + + + io.opentelemetry + opentelemetry-api + + + com.google.api api-common @@ -265,12 +311,39 @@ com.google.cloud google-cloud-monitoring - 3.54.0 + ${google.cloud.monitoring.version} + + + + com.google.guava + failureaccess + + com.google.api.grpc proto-google-cloud-monitoring-v3 - 3.55.0 + ${google.cloud.monitoring.version} + + + + com.google.guava + failureaccess + + + + + com.google.api.grpc + grpc-google-cloud-monitoring-v3 + ${google.cloud.monitoring.version} + test + + + + com.google.guava + failureaccess + + com.google.auth @@ -351,17 +424,10 @@ grpc-rls runtime - - - org.graalvm.sdk - graal-sdk - ${graal-sdk.version} - provided - org.graalvm.sdk nativeimage - ${graal-sdk.version} + ${graal-sdk-nativeimage.version} provided @@ -371,7 +437,7 @@ junit test - + com.google.api.grpc @@ -417,7 +483,7 @@ org.json json - 20240303 + 20250517 test @@ -455,6 +521,24 @@ opentelemetry-sdk-testing test + + com.google.cloud.opentelemetry + exporter-trace + 0.36.0 + test + + + com.google.cloud + google-cloud-trace + 2.84.0 + test + + + com.google.api.grpc + proto-google-cloud-trace-v1 + 2.84.0 + test + @@ -493,12 +577,44 @@ -classpath org.openjdk.jmh.Main - ${benchmark.name} + ${benchmark.name} + -rf + JSON + -rff + jmh-results.json + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.openjdk.jmh + jmh-generator-annprocess + 1.37 + + + + + + + + + validate-benchmark + + + + org.codehaus.mojo + exec-maven-plugin + + com.google.cloud.spanner.benchmarking.BenchmarkValidator + test + + @@ -557,7 +673,7 @@ com.google.cloud.spanner.GceTestEnvConfig projects/directpath-prod-manual-testing/instances/spanner-testing directpath-prod-manual-testing - true + true ipv4 3000 diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java index 03dff9f7609..28b5f1fa257 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner; import com.google.api.gax.rpc.ApiException; +import com.google.protobuf.ByteString; import javax.annotation.Nullable; /** @@ -32,6 +33,8 @@ public class AbortedException extends SpannerException { */ private static final boolean IS_RETRYABLE = false; + private ByteString transactionID; + /** Private constructor. Use {@link SpannerExceptionFactory} to create instances. */ AbortedException( DoNotConstructDirectly token, @Nullable String message, @Nullable Throwable cause) { @@ -45,6 +48,9 @@ public class AbortedException extends SpannerException { @Nullable Throwable cause, @Nullable ApiException apiException) { super(token, ErrorCode.ABORTED, IS_RETRYABLE, message, cause, apiException); + if (cause instanceof AbortedException) { + this.transactionID = ((AbortedException) cause).getTransactionID(); + } } /** @@ -54,4 +60,12 @@ public class AbortedException extends SpannerException { public boolean isEmulatorOnlySupportsOneTransactionException() { return getMessage().endsWith("The emulator only supports one transaction at a time."); } + + void setTransactionID(ByteString transactionID) { + this.transactionID = transactionID; + } + + ByteString getTransactionID() { + return this.transactionID; + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractMultiplexedSessionDatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractMultiplexedSessionDatabaseClient.java index 10ab997d88a..7d083db211a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractMultiplexedSessionDatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractMultiplexedSessionDatabaseClient.java @@ -16,10 +16,7 @@ package com.google.cloud.spanner; -import com.google.api.gax.rpc.ServerStream; import com.google.cloud.Timestamp; -import com.google.cloud.spanner.Options.TransactionOption; -import com.google.spanner.v1.BatchWriteResponse; /** * Base class for the Multiplexed Session {@link DatabaseClient} implementation. Throws {@link @@ -29,25 +26,8 @@ */ abstract class AbstractMultiplexedSessionDatabaseClient implements DatabaseClient { - @Override - public Dialect getDialect() { - throw new UnsupportedOperationException(); - } - - @Override - public String getDatabaseRole() { - throw new UnsupportedOperationException(); - } - @Override public Timestamp writeAtLeastOnce(Iterable mutations) throws SpannerException { return writeAtLeastOnceWithOptions(mutations).getCommitTimestamp(); } - - @Override - public ServerStream batchWriteAtLeastOnce( - Iterable mutationGroups, TransactionOption... options) - throws SpannerException { - throw new UnsupportedOperationException(); - } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java index cecf462bd25..619ea42441a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java @@ -58,6 +58,7 @@ import java.util.Map; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicLong; +import java.util.logging.Logger; import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; @@ -67,6 +68,7 @@ */ abstract class AbstractReadContext implements ReadContext, AbstractResultSet.Listener, SessionTransaction { + private static final Logger logger = Logger.getLogger(AbstractReadContext.class.getName()); abstract static class Builder, T extends AbstractReadContext> { private SessionImpl session; @@ -402,6 +404,41 @@ ByteString getTransactionId() { } } + @Override + public void close() { + ByteString id = getTransactionId(); + if (id != null && !id.isEmpty()) { + rpc.clearTransactionAffinity(id); + } + super.close(); + } + + /** + * Initializes the transaction with the timestamp specified within MultiUseReadOnlyTransaction. + * This is used only for fallback of PartitionQueryRequest and PartitionReadRequest with + * Multiplexed Session. + */ + void initFallbackTransaction() { + synchronized (txnLock) { + span.addAnnotation("Creating Transaction"); + TransactionOptions.Builder options = TransactionOptions.newBuilder(); + if (timestamp != null) { + options + .getReadOnlyBuilder() + .setReadTimestamp(timestamp.toProto()) + .setReturnReadTimestamp(true); + } else { + bound.applyToBuilder(options.getReadOnlyBuilder()).setReturnReadTimestamp(true); + } + final BeginTransactionRequest request = + BeginTransactionRequest.newBuilder() + .setSession(session.getName()) + .setOptions(options) + .build(); + initTransactionInternal(request); + } + } + void initTransaction() { SessionImpl.throwIfTransactionsPending(); @@ -417,40 +454,43 @@ void initTransaction() { return; } span.addAnnotation("Creating Transaction"); + TransactionOptions.Builder options = TransactionOptions.newBuilder(); + bound.applyToBuilder(options.getReadOnlyBuilder()).setReturnReadTimestamp(true); + final BeginTransactionRequest request = + BeginTransactionRequest.newBuilder() + .setSession(session.getName()) + .setOptions(options) + .build(); + initTransactionInternal(request); + } + } + + private void initTransactionInternal(BeginTransactionRequest request) { + try { + Transaction transaction = + rpc.beginTransaction(request, getTransactionChannelHint(), isRouteToLeader()); + if (!transaction.hasReadTimestamp()) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INTERNAL, "Missing expected transaction.read_timestamp metadata field"); + } + if (transaction.getId().isEmpty()) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INTERNAL, "Missing expected transaction.id metadata field"); + } try { - TransactionOptions.Builder options = TransactionOptions.newBuilder(); - bound.applyToBuilder(options.getReadOnlyBuilder()).setReturnReadTimestamp(true); - final BeginTransactionRequest request = - BeginTransactionRequest.newBuilder() - .setSession(session.getName()) - .setOptions(options) - .build(); - Transaction transaction = - rpc.beginTransaction(request, getTransactionChannelHint(), isRouteToLeader()); - if (!transaction.hasReadTimestamp()) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INTERNAL, "Missing expected transaction.read_timestamp metadata field"); - } - if (transaction.getId().isEmpty()) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INTERNAL, "Missing expected transaction.id metadata field"); - } - try { - timestamp = Timestamp.fromProto(transaction.getReadTimestamp()); - } catch (IllegalArgumentException e) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INTERNAL, "Bad value in transaction.read_timestamp metadata field", e); - } - transactionId = transaction.getId(); - span.addAnnotation( - "Transaction Creation Done", - ImmutableMap.of( - "Id", transaction.getId().toStringUtf8(), "Timestamp", timestamp.toString())); - - } catch (SpannerException e) { - span.addAnnotation("Transaction Creation Failed", e); - throw e; + timestamp = Timestamp.fromProto(transaction.getReadTimestamp()); + } catch (IllegalArgumentException e) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INTERNAL, "Bad value in transaction.read_timestamp metadata field", e); } + transactionId = transaction.getId(); + span.addAnnotation( + "Transaction Creation Done", + ImmutableMap.of( + "Id", transaction.getId().toStringUtf8(), "Timestamp", timestamp.toString())); + } catch (SpannerException e) { + span.addAnnotation("Transaction Creation Failed", e); + throw e; } } } @@ -639,8 +679,8 @@ private ResultSet executeQueryInternal( *
  • Specific {@link QueryOptions} passed in for this query. *
  • Any value specified in a valid environment variable when the {@link SpannerOptions} * instance was created. - *
  • The default {@link SpannerOptions#getDefaultQueryOptions()} specified for the database - * where the query is executed. + *
  • The default {@link SpannerOptions#getDefaultQueryOptions(DatabaseId)} ()} specified for + * the database where the query is executed. * */ @VisibleForTesting @@ -653,17 +693,15 @@ QueryOptions buildQueryOptions(QueryOptions requestOptions) { } RequestOptions buildRequestOptions(Options options) { - // Shortcut for the most common return value. - if (!(options.hasPriority() || options.hasTag() || getTransactionTag() != null)) { - return RequestOptions.getDefaultInstance(); - } - - RequestOptions.Builder builder = RequestOptions.newBuilder(); - if (options.hasPriority()) { - builder.setPriority(options.priority()); - } - if (options.hasTag()) { - builder.setRequestTag(options.tag()); + RequestOptions.Builder builder = options.toRequestOptionsProto(false).toBuilder(); + RequestOptions.ClientContext defaultClientContext = + session.getSpanner().getOptions().getClientContext(); + if (defaultClientContext != null) { + RequestOptions.ClientContext.Builder clientContextBuilder = defaultClientContext.toBuilder(); + if (builder.hasClientContext()) { + clientContextBuilder.mergeFrom(builder.getClientContext()); + } + builder.setClientContext(clientContextBuilder.build()); } if (getTransactionTag() != null) { builder.setTransactionTag(getTransactionTag()); @@ -696,6 +734,9 @@ ExecuteSqlRequest.Builder getExecuteSqlRequestBuilder( if (!isReadOnly()) { builder.setSeqno(getSeqNo()); } + if (options.hasLastStatement()) { + builder.setLastStatement(options.isLastStatement()); + } builder.setQueryOptions(buildQueryOptions(statement.getQueryOptions())); builder.setRequestOptions(buildRequestOptions(options)); return builder; @@ -741,6 +782,9 @@ ExecuteBatchDmlRequest.Builder getExecuteBatchDmlRequestBuilder( if (selector != null) { builder.setTransaction(selector); } + if (options.hasLastStatement()) { + builder.setLastStatements(options.isLastStatement()); + } builder.setSeqno(getSeqNo()); builder.setRequestOptions(buildRequestOptions(options)); return builder; @@ -756,7 +800,7 @@ ResultSet executeQueryInternalWithOptions( options.hasPrefetchChunks() ? options.prefetchChunks() : defaultPrefetchChunks; final ExecuteSqlRequest.Builder request = getExecuteSqlRequestBuilder( - statement, queryMode, options, /* withTransactionSelector = */ false); + statement, queryMode, options, /* withTransactionSelector= */ false); ResumableStreamIterator stream = new ResumableStreamIterator( MAX_BUFFERED_CHUNKS, @@ -766,13 +810,19 @@ ResultSet executeQueryInternalWithOptions( tracer.createStatementAttributes(statement, options), session.getErrorHandler(), rpc.getExecuteQueryRetrySettings(), - rpc.getExecuteQueryRetryableCodes()) { + rpc.getExecuteQueryRetryableCodes(), + session.getRequestIdCreator()) { @Override CloseableIterator startStream( @Nullable ByteString resumeToken, - AsyncResultSet.StreamMessageListener streamListener) { + AsyncResultSet.StreamMessageListener streamListener, + XGoogSpannerRequestId requestId) { GrpcStreamIterator stream = - new GrpcStreamIterator(statement, prefetchChunks, cancelQueryWhenClientIsClosed); + new GrpcStreamIterator( + statement, + request.getLastStatement(), + prefetchChunks, + cancelQueryWhenClientIsClosed); if (streamListener != null) { stream.registerListener(streamListener); } @@ -794,10 +844,10 @@ CloseableIterator startStream( request.build(), stream.consumer(), getTransactionChannelHint(), + requestId, isRouteToLeader()); session.markUsed(clock.instant()); stream.setCall(call, request.getTransaction().hasBegin()); - call.request(prefetchChunks); return stream; } @@ -810,7 +860,7 @@ boolean prepareIteratorForRetryOnDifferentGrpcChannel() { stream, this, options.hasDecodeMode() ? options.decodeMode() : defaultDecodeMode); } - Map getChannelHintOptions( + static Map getChannelHintOptions( Map channelHintForSession, Long channelHintForTransaction) { if (channelHintForSession != null) { return channelHintForSession; @@ -889,7 +939,8 @@ String getTransactionTag() { public void onTransactionMetadata(Transaction transaction, boolean shouldIncludeId) {} @Override - public SpannerException onError(SpannerException e, boolean withBeginTransaction) { + public SpannerException onError( + SpannerException e, boolean withBeginTransaction, boolean lastStatement) { this.session.onError(e); return e; } @@ -952,23 +1003,38 @@ ResultSet readInternalWithOptions( } else if (defaultDirectedReadOptions != null) { builder.setDirectedReadOptions(defaultDirectedReadOptions); } + if (readOptions.hasLockHint()) { + if (isReadOnly()) { + logger.warning( + "Lock hint is only supported for ReadWrite transactions. " + + "Overriding lock hint to default unspecified."); + } else { + builder.setLockHint(readOptions.lockHint()); + } + } final int prefetchChunks = readOptions.hasPrefetchChunks() ? readOptions.prefetchChunks() : defaultPrefetchChunks; + final boolean lastStatement = + readOptions.hasLastStatement() ? readOptions.isLastStatement() : false; ResumableStreamIterator stream = new ResumableStreamIterator( MAX_BUFFERED_CHUNKS, SpannerImpl.READ, span, tracer, + tracer.createTableAttributes(table, readOptions), session.getErrorHandler(), rpc.getReadRetrySettings(), - rpc.getReadRetryableCodes()) { + rpc.getReadRetryableCodes(), + session.getRequestIdCreator()) { @Override CloseableIterator startStream( @Nullable ByteString resumeToken, - AsyncResultSet.StreamMessageListener streamListener) { + AsyncResultSet.StreamMessageListener streamListener, + XGoogSpannerRequestId requestId) { GrpcStreamIterator stream = - new GrpcStreamIterator(prefetchChunks, cancelQueryWhenClientIsClosed); + new GrpcStreamIterator( + lastStatement, prefetchChunks, cancelQueryWhenClientIsClosed); if (streamListener != null) { stream.registerListener(streamListener); } @@ -988,10 +1054,10 @@ CloseableIterator startStream( builder.build(), stream.consumer(), getTransactionChannelHint(), + requestId, isRouteToLeader()); session.markUsed(clock.instant()); - stream.setCall(call, /* withBeginTransaction = */ builder.getTransaction().hasBegin()); - call.request(prefetchChunks); + stream.setCall(call, /* withBeginTransaction= */ builder.getTransaction().hasBegin()); return stream; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java index 3dca970f96e..0717cae74f2 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java @@ -38,6 +38,7 @@ import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.UUID; import java.util.function.Function; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -48,13 +49,15 @@ abstract class AbstractResultSet extends AbstractStructReader implements Resu interface Listener { /** * Called when transaction metadata is seen. This method may be invoked at most once. If the - * method is invoked, it will precede {@link #onError(SpannerException)} or {@link #onDone()}. + * method is invoked, it will precede {@link #onError(SpannerException,boolean)} or {@link + * #onDone(boolean)}. */ void onTransactionMetadata(Transaction transaction, boolean shouldIncludeId) throws SpannerException; /** Called when the read finishes with an error. Returns the error that should be thrown. */ - SpannerException onError(SpannerException e, boolean withBeginTransaction); + SpannerException onError( + SpannerException e, boolean withBeginTransaction, boolean lastStatement); /** Called when the read finishes normally. */ void onDone(boolean withBeginTransaction); @@ -151,6 +154,8 @@ interface CloseableIterator extends Iterator { boolean isWithBeginTransaction(); + boolean isLastStatement(); + /** * @param streamMessageListener A class object which implements StreamMessageListener * @return true if streaming is supported by the iterator, otherwise false @@ -158,6 +163,9 @@ interface CloseableIterator extends Iterator { default boolean initiateStreaming(AsyncResultSet.StreamMessageListener streamMessageListener) { return false; } + + /** it requests the initial prefetch chunks from gRPC stream */ + default void requestPrefetchChunks() {} } static double valueProtoToFloat64(com.google.protobuf.Value proto) { @@ -430,6 +438,16 @@ protected Date getDateInternal(int columnIndex) { return currRow().getDateInternal(columnIndex); } + @Override + protected UUID getUuidInternal(int columnIndex) { + return currRow().getUuidInternal(columnIndex); + } + + @Override + protected Interval getIntervalInternal(int columnIndex) { + return currRow().getIntervalInternal(columnIndex); + } + @Override protected Value getValueInternal(int columnIndex) { return currRow().getValueInternal(columnIndex); @@ -522,6 +540,16 @@ protected List getDateListInternal(int columnIndex) { return currRow().getDateListInternal(columnIndex); } + @Override + protected List getUuidListInternal(int columnIndex) { + return currRow().getUuidListInternal(columnIndex); + } + + @Override + protected List getIntervalListInternal(int columnIndex) { + return currRow().getIntervalListInternal(columnIndex); + } + @Override protected List getStructListInternal(int columnIndex) { return currRow().getStructListInternal(columnIndex); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java index d13c61aaf01..60ff4fd330e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.UUID; import java.util.function.Function; /** @@ -67,6 +68,14 @@ protected String getPgJsonbInternal(int columnIndex) { protected abstract Date getDateInternal(int columnIndex); + protected UUID getUuidInternal(int columnIndex) { + throw new UnsupportedOperationException("Not implemented"); + } + + protected Interval getIntervalInternal(int columnIndex) { + throw new UnsupportedOperationException("Not implemented"); + } + protected T getProtoMessageInternal(int columnIndex, T message) { throw new UnsupportedOperationException("Not implemented"); } @@ -128,6 +137,14 @@ protected List getPgJsonbListInternal(int columnIndex) { protected abstract List getDateListInternal(int columnIndex); + protected List getUuidListInternal(int columnIndex) { + throw new UnsupportedOperationException("Not implemented"); + } + + protected List getIntervalListInternal(int columnIndex) { + throw new UnsupportedOperationException("Not implemented"); + } + protected abstract List getStructListInternal(int columnIndex); @Override @@ -299,6 +316,32 @@ public Date getDate(String columnName) { return getDateInternal(columnIndex); } + @Override + public UUID getUuid(int columnIndex) { + checkNonNullOfType(columnIndex, Type.uuid(), columnIndex); + return getUuidInternal(columnIndex); + } + + @Override + public UUID getUuid(String columnName) { + final int columnIndex = getColumnIndex(columnName); + checkNonNullOfType(columnIndex, Type.uuid(), columnName); + return getUuidInternal(columnIndex); + } + + @Override + public Interval getInterval(int columnIndex) { + checkNonNullOfType(columnIndex, Type.interval(), columnIndex); + return getIntervalInternal(columnIndex); + } + + @Override + public Interval getInterval(String columnName) { + int columnIndex = getColumnIndex(columnName); + checkNonNullOfType(columnIndex, Type.interval(), columnName); + return getIntervalInternal(columnIndex); + } + @Override public T getProtoEnum( int columnIndex, Function method) { @@ -583,6 +626,32 @@ public List getDateList(String columnName) { return getDateListInternal(columnIndex); } + @Override + public List getUuidList(int columnIndex) { + checkNonNullOfType(columnIndex, Type.array(Type.uuid()), columnIndex); + return getUuidListInternal(columnIndex); + } + + @Override + public List getUuidList(String columnName) { + final int columnIndex = getColumnIndex(columnName); + checkNonNullOfType(columnIndex, Type.array(Type.uuid()), columnName); + return getUuidListInternal(columnIndex); + } + + @Override + public List getIntervalList(int columnIndex) { + checkNonNullOfType(columnIndex, Type.array(Type.interval()), columnIndex); + return getIntervalListInternal(columnIndex); + } + + @Override + public List getIntervalList(String columnName) { + int columnIndex = getColumnIndex(columnName); + checkNonNullOfType(columnIndex, Type.array(Type.interval()), columnName); + return getIntervalListInternal(columnIndex); + } + @Override public List getStructList(int columnIndex) { checkNonNullArrayOfStruct(columnIndex, columnIndex); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java index 1161822cd10..e53e4db94b6 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java @@ -91,6 +91,7 @@ private enum State { private final BlockingDeque buffer; private Struct currentRow; + /** Supplies the underlying synchronous {@link ResultSet} that will be producing the rows. */ private final Supplier delegateResultSet; @@ -112,9 +113,9 @@ private enum State { * Listeners that will be called when the {@link AsyncResultSetImpl} has finished fetching all * rows and any underlying transaction or session can be closed. */ - private Collection listeners = new LinkedList<>(); + private final Collection listeners = new LinkedList<>(); - private State state = State.INITIALIZED; + private volatile State state = State.INITIALIZED; /** This variable indicates that produce rows thread is initiated */ private volatile boolean produceRowsInitiated; @@ -137,11 +138,13 @@ private enum State { * production of rows that are put into the buffer is only paused once the buffer is full. */ private volatile CountDownLatch pausedLatch = new CountDownLatch(1); + /** * This variable is used to pause the producer when the buffer is full and the consumer needs some * time to catch up. */ private volatile CountDownLatch bufferConsumptionLatch = new CountDownLatch(0); + /** * This variable is used to pause the producer when all rows have been put into the buffer, but * the consumer (the callback) has not yet received and processed all rows. @@ -498,10 +501,12 @@ public ApiFuture setCallback(Executor exec, ReadyCallback cb) { } private void initiateProduceRows() { - if (this.state == State.STREAMING_INITIALIZED) { - this.state = State.RUNNING; + synchronized (monitor) { + if (this.state == State.STREAMING_INITIALIZED) { + this.state = State.RUNNING; + } + produceRowsInitiated = true; } - produceRowsInitiated = true; this.service.execute(new ProduceRowsRunnable()); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java index 1ea58b2bc66..afe2fdb2461 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java @@ -59,7 +59,7 @@ private R runTransaction(final AsyncWork work) { try { return work.doWorkAsync(transaction).get(); } catch (ExecutionException e) { - throw SpannerExceptionFactory.newSpannerException(e.getCause()); + throw SpannerExceptionFactory.asSpannerException(e.getCause()); } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManager.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManager.java index c6ead432046..502ec9d54f8 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManager.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManager.java @@ -170,6 +170,21 @@ interface AsyncTransactionFunction { */ TransactionContextFuture beginAsync(); + /** + * Initializes a new read-write transaction that is a retry of a previously aborted transaction. + * This method must be called before performing any operations, and it can only be invoked once + * per transaction lifecycle. + * + *

    This method should only be used when multiplexed sessions are enabled to create a retry for + * a previously aborted transaction. This method can be used instead of {@link + * #resetForRetryAsync()} to create a retry. Using this method or {@link #resetForRetryAsync()} + * will have the same effect. You must pass in the {@link AbortedException} from the previous + * attempt to preserve the transaction's priority. + * + *

    For regular sessions, this behaves the same as {@link #beginAsync()}. + */ + TransactionContextFuture beginAsync(AbortedException exception); + /** * Rolls back the currently active transaction. In most cases there should be no need to call this * explicitly since {@link #close()} would automatically roll back any active transaction. @@ -188,7 +203,10 @@ interface AsyncTransactionFunction { /** Returns the state of the transaction. */ TransactionState getState(); - /** Returns the {@link CommitResponse} of this transaction. */ + /** + * Returns the {@link CommitResponse} of this transaction. This method may only be called after + * committing the transaction. + */ ApiFuture getCommitResponse(); /** diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java index 0057bb15bea..c394ad09fe2 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java @@ -55,7 +55,7 @@ public void setSpan(ISpan span) { @Override public void close() { - closeAsync(); + SpannerApiFutures.get(closeAsync()); } @Override @@ -76,14 +76,27 @@ public ApiFuture closeAsync() { @Override public TransactionContextFutureImpl beginAsync() { Preconditions.checkState(txn == null, "begin can only be called once"); - return new TransactionContextFutureImpl(this, internalBeginAsync(true)); + return new TransactionContextFutureImpl(this, internalBeginAsync(true, ByteString.EMPTY)); } - private ApiFuture internalBeginAsync(boolean firstAttempt) { + @Override + public TransactionContextFutureImpl beginAsync(AbortedException exception) { + Preconditions.checkState(txn == null, "begin can only be called once"); + Preconditions.checkNotNull(exception, "AbortedException from the previous attempt is required"); + ByteString abortedTransactionId = + exception.getTransactionID() != null ? exception.getTransactionID() : ByteString.EMPTY; + return new TransactionContextFutureImpl(this, internalBeginAsync(true, abortedTransactionId)); + } + + private ApiFuture internalBeginAsync( + boolean firstAttempt, ByteString abortedTransactionID) { txnState = TransactionState.STARTED; // Determine the latest transactionId when using a multiplexed session. ByteString multiplexedSessionPreviousTransactionId = ByteString.EMPTY; + if (firstAttempt && session.getIsMultiplexed()) { + multiplexedSessionPreviousTransactionId = abortedTransactionID; + } if (txn != null && session.getIsMultiplexed() && !firstAttempt) { // Use the current transactionId if available, otherwise fallback to the previous aborted // transactionId. @@ -93,7 +106,7 @@ private ApiFuture internalBeginAsync(boolean firstAttempt) { txn = session.newTransaction( - options, /* previousTransactionId = */ multiplexedSessionPreviousTransactionId); + options, /* previousTransactionId= */ multiplexedSessionPreviousTransactionId); if (firstAttempt) { session.setActive(this); } @@ -110,7 +123,7 @@ private ApiFuture internalBeginAsync(boolean firstAttempt) { @Override public void onFailure(Throwable t) { onError(t); - res.setException(SpannerExceptionFactory.newSpannerException(t)); + res.setException(SpannerExceptionFactory.asSpannerException(t)); } @Override @@ -152,12 +165,19 @@ public void onFailure(Throwable t) { txnState = TransactionState.ABORTED; } else { txnState = TransactionState.COMMIT_FAILED; + if (span != null) { + span.setStatus(t); + span.end(); + } commitResponse.setException(t); } } @Override public void onSuccess(CommitResponse result) { + if (span != null) { + span.end(); + } commitResponse.set(result); } }, @@ -177,13 +197,21 @@ public ApiFuture rollbackAsync() { ignored -> ApiFutures.immediateFuture(null), MoreExecutors.directExecutor()); } finally { + if (span != null) { + span.addAnnotation("Transaction rolled back"); + span.end(); + } txnState = TransactionState.ROLLED_BACK; } } @Override public TransactionContextFuture resetForRetryAsync() { - return new TransactionContextFutureImpl(this, internalBeginAsync(false)); + if (txn == null || !txn.isAborted() && txnState != TransactionState.ABORTED) { + throw new IllegalStateException( + "resetForRetry can only be called if the previous attempt aborted"); + } + return new TransactionContextFutureImpl(this, internalBeginAsync(false, ByteString.EMPTY)); } @Override @@ -193,6 +221,9 @@ public TransactionState getState() { @Override public ApiFuture getCommitResponse() { + Preconditions.checkState( + txnState == TransactionState.COMMITTED, + "getCommitResponse can only be invoked if the transaction was successfully committed"); return commitResponse; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClient.java index 45e38989be6..2d12179bc91 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClient.java @@ -67,5 +67,6 @@ public interface BatchClient { */ default String getDatabaseRole() { throw new UnsupportedOperationException("method should be overwritten"); - }; + } + ; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClientImpl.java index a250fd5ba39..5cbe01aa711 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchClientImpl.java @@ -44,8 +44,6 @@ public class BatchClientImpl implements BatchClient { private final SessionClient sessionClient; - private final boolean isMultiplexedSessionEnabled; - /** Lock to protect the multiplexed session. */ private final ReentrantLock multiplexedSessionLock = new ReentrantLock(); @@ -59,9 +57,8 @@ public class BatchClientImpl implements BatchClient { @GuardedBy("multiplexedSessionLock") private final AtomicReference multiplexedSessionReference; - BatchClientImpl(SessionClient sessionClient, boolean isMultiplexedSessionEnabled) { + BatchClientImpl(SessionClient sessionClient) { this.sessionClient = checkNotNull(sessionClient); - this.isMultiplexedSessionEnabled = isMultiplexedSessionEnabled; this.sessionExpirationDuration = Duration.ofMillis( sessionClient @@ -84,12 +81,7 @@ public String getDatabaseRole() { @Override public BatchReadOnlyTransaction batchReadOnlyTransaction(TimestampBound bound) { - SessionImpl session; - if (isMultiplexedSessionEnabled) { - session = getMultiplexedSession(); - } else { - session = sessionClient.createSession(); - } + SessionImpl session = getMultiplexedSession(); return new BatchReadOnlyTransactionImpl( MultiUseReadOnlyTransaction.newBuilder() .setSession(session) @@ -231,6 +223,15 @@ public List partitionReadUsingIndex( public List partitionQuery( PartitionOptions partitionOptions, Statement statement, QueryOption... option) throws SpannerException { + return partitionQuery(partitionOptions, statement, false, option); + } + + private List partitionQuery( + PartitionOptions partitionOptions, + Statement statement, + boolean isFallback, + QueryOption... option) + throws SpannerException { Options queryOptions = Options.fromQueryOptions(option); final PartitionQueryRequest.Builder builder = PartitionQueryRequest.newBuilder().setSession(sessionName).setSql(statement.getSql()); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchTransactionId.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchTransactionId.java index a5a02ac1360..0de705c12ea 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchTransactionId.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BatchTransactionId.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner; import com.google.cloud.Timestamp; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.protobuf.ByteString; import java.io.Serializable; @@ -34,6 +35,7 @@ public class BatchTransactionId implements Serializable { private final Timestamp timestamp; private static final long serialVersionUID = 8067099123096783939L; + @VisibleForTesting BatchTransactionId(String sessionId, ByteString transactionId, Timestamp timestamp) { this.transactionId = Preconditions.checkNotNull(transactionId); this.sessionId = Preconditions.checkNotNull(sessionId); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java index 4f8b091d550..dff490832c8 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java @@ -16,6 +16,8 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.XGoogSpannerRequestId.REQUEST_ID_HEADER_NAME; + import com.google.api.core.InternalApi; import com.google.api.gax.tracing.OpenTelemetryMetricsRecorder; import com.google.common.collect.ImmutableList; @@ -26,6 +28,10 @@ import io.opentelemetry.sdk.metrics.InstrumentSelector; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.View; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -34,26 +40,109 @@ public class BuiltInMetricsConstant { public static final String METER_NAME = "spanner.googleapis.com/internal/client"; - public static final String GAX_METER_NAME = OpenTelemetryMetricsRecorder.GAX_METER_NAME; - + public static final String GRPC_GCP_METER_NAME = "grpc-gcp"; + static final String SPANNER_METER_NAME = "spanner-java"; + static final String GRPC_METER_NAME = "grpc-java"; + static final String GFE_LATENCIES_NAME = "gfe_latencies"; + static final String AFE_LATENCIES_NAME = "afe_latencies"; + static final String GFE_CONNECTIVITY_ERROR_NAME = "gfe_connectivity_error_count"; + static final String AFE_CONNECTIVITY_ERROR_NAME = "afe_connectivity_error_count"; static final String OPERATION_LATENCIES_NAME = "operation_latencies"; static final String ATTEMPT_LATENCIES_NAME = "attempt_latencies"; static final String OPERATION_LATENCY_NAME = "operation_latency"; static final String ATTEMPT_LATENCY_NAME = "attempt_latency"; static final String OPERATION_COUNT_NAME = "operation_count"; static final String ATTEMPT_COUNT_NAME = "attempt_count"; + static final String EEF_FALLBACK_COUNT_NAME = "eef.fallback_count"; + static final String EEF_CALL_STATUS_NAME = "eef.call_status"; public static final Set SPANNER_METRICS = ImmutableSet.of( OPERATION_LATENCIES_NAME, ATTEMPT_LATENCIES_NAME, OPERATION_COUNT_NAME, - ATTEMPT_COUNT_NAME) + ATTEMPT_COUNT_NAME, + GFE_LATENCIES_NAME, + AFE_LATENCIES_NAME, + GFE_CONNECTIVITY_ERROR_NAME, + AFE_CONNECTIVITY_ERROR_NAME) .stream() .map(m -> METER_NAME + '/' + m) .collect(Collectors.toSet()); + // The following attributes are optional and need to be enabled explicitly. + public static final String GRPC_LB_BACKEND_SERVICE_ATTRIBUTE = "grpc.lb.backend_service"; + public static final String GRPC_LB_LOCALITY_ATTRIBUTE = "grpc.lb.locality"; + public static final String GRPC_DISCONNECT_ERROR_ATTRIBUTE = "grpc.disconnect_error"; + + static final Set GRPC_LB_RLS_ATTRIBUTES = + ImmutableSet.of("grpc.lb.rls.data_plane_target", "grpc.lb.pick_result"); + static final Set GRPC_CLIENT_ATTEMPT_STARTED_ATTRIBUTES = + ImmutableSet.of("grpc.method", "grpc.target"); + static final Set GRPC_SUBCHANNEL_DEFAULT_ATTRIBUTES = + ImmutableSet.of("grpc.target", GRPC_LB_BACKEND_SERVICE_ATTRIBUTE, GRPC_LB_LOCALITY_ATTRIBUTE); + static final Set GRPC_SUBCHANNEL_DISCONNECTION_ATTRIBUTES = + ImmutableSet.of( + "grpc.target", + GRPC_LB_BACKEND_SERVICE_ATTRIBUTE, + GRPC_LB_LOCALITY_ATTRIBUTE, + GRPC_DISCONNECT_ERROR_ATTRIBUTE); + static final Set GRPC_XDS_CLIENT_RESOURCE_UPDATE_ATTRIBUTES = + ImmutableSet.of("grpc.xds.resource_type"); + + // Additional gRPC attributes to enable. + static final Map> GRPC_METRIC_ADDITIONAL_ATTRIBUTES = + ImmutableMap.>builder() + .put("grpc.client.attempt.started", GRPC_CLIENT_ATTEMPT_STARTED_ATTRIBUTES) + .put("grpc.subchannel.open_connections", GRPC_SUBCHANNEL_DEFAULT_ATTRIBUTES) + .put("grpc.subchannel.disconnections", GRPC_SUBCHANNEL_DISCONNECTION_ATTRIBUTES) + .put("grpc.subchannel.connection_attempts_succeeded", GRPC_SUBCHANNEL_DEFAULT_ATTRIBUTES) + .put("grpc.subchannel.connection_attempts_failed", GRPC_SUBCHANNEL_DEFAULT_ATTRIBUTES) + .put("grpc.lb.rls.default_target_picks", GRPC_LB_RLS_ATTRIBUTES) + .put("grpc.lb.rls.target_picks", GRPC_LB_RLS_ATTRIBUTES) + .put( + "grpc.xds_client.resource_updates_invalid", + GRPC_XDS_CLIENT_RESOURCE_UPDATE_ATTRIBUTES) + .put("grpc.xds_client.resource_updates_valid", GRPC_XDS_CLIENT_RESOURCE_UPDATE_ATTRIBUTES) + .build(); + + static final Collection GRPC_METRICS_TO_ENABLE = + ImmutableList.of( + "grpc.client.attempt.started", + "grpc.subchannel.open_connections", + "grpc.subchannel.disconnections", + "grpc.subchannel.connection_attempts_succeeded", + "grpc.subchannel.connection_attempts_failed", + "grpc.lb.rls.default_target_picks", + "grpc.lb.rls.target_picks", + "grpc.xds_client.server_failure", + "grpc.xds_client.resource_updates_invalid", + "grpc.xds_client.resource_updates_valid"); + + public static final AttributeKey CHANNEL_NAME_KEY = + AttributeKey.stringKey("channel_name"); + public static final AttributeKey FROM_CHANNEL_NAME_KEY = + AttributeKey.stringKey("from_channel_name"); + public static final AttributeKey TO_CHANNEL_NAME_KEY = + AttributeKey.stringKey("to_channel_name"); + public static final AttributeKey STATUS_CODE_KEY = AttributeKey.stringKey("status_code"); + + static final Set GRPC_GCP_EEF_FALLBACK_COUNT_ATTRIBUTES = + ImmutableSet.of(FROM_CHANNEL_NAME_KEY.getKey(), TO_CHANNEL_NAME_KEY.getKey()); + + static final Set GRPC_GCP_EEF_CALL_STATUS_ATTRIBUTES = + ImmutableSet.of(CHANNEL_NAME_KEY.getKey(), STATUS_CODE_KEY.getKey()); + + static final Map> GRPC_GCP_METRIC_ADDITIONAL_ATTRIBUTES = + ImmutableMap.>builder() + .put(EEF_FALLBACK_COUNT_NAME, GRPC_GCP_EEF_FALLBACK_COUNT_ATTRIBUTES) + .put(EEF_CALL_STATUS_NAME, GRPC_GCP_EEF_CALL_STATUS_ATTRIBUTES) + .build(); + + static final Collection GRPC_GCP_METRICS_TO_ENABLE = + ImmutableList.of(EEF_FALLBACK_COUNT_NAME, EEF_CALL_STATUS_NAME); + public static final String SPANNER_RESOURCE_TYPE = "spanner_instance_client"; public static final AttributeKey PROJECT_ID_KEY = AttributeKey.stringKey("project_id"); @@ -65,12 +154,7 @@ public class BuiltInMetricsConstant { // These metric labels will be promoted to the spanner monitored resource fields public static final Set> SPANNER_PROMOTED_RESOURCE_LABELS = - ImmutableSet.of( - PROJECT_ID_KEY, - INSTANCE_ID_KEY, - INSTANCE_CONFIG_ID_KEY, - LOCATION_ID_KEY, - CLIENT_HASH_KEY); + ImmutableSet.of(INSTANCE_ID_KEY); public static final AttributeKey DATABASE_KEY = AttributeKey.stringKey("database"); public static final AttributeKey CLIENT_UID_KEY = AttributeKey.stringKey("client_uid"); @@ -81,6 +165,10 @@ public class BuiltInMetricsConstant { AttributeKey.stringKey("directpath_enabled"); public static final AttributeKey DIRECT_PATH_USED_KEY = AttributeKey.stringKey("directpath_used"); + public static final AttributeKey REQUEST_ID_KEY = + AttributeKey.stringKey(REQUEST_ID_HEADER_NAME); + public static Set ALLOWED_EXEMPLARS_ATTRIBUTES = + new HashSet<>(Arrays.asList(REQUEST_ID_HEADER_NAME)); // IP address prefixes allocated for DirectPath backends. public static final String DP_IPV6_PREFIX = "2001:4860:8040"; @@ -101,19 +189,27 @@ public class BuiltInMetricsConstant { DIRECT_PATH_ENABLED_KEY, DIRECT_PATH_USED_KEY); + static List BUCKET_BOUNDARIES = + ImmutableList.of( + 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, + 16.0, 17.0, 18.0, 19.0, 20.0, 25.0, 30.0, 40.0, 50.0, 65.0, 80.0, 100.0, 130.0, 160.0, + 200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0, 1000.0, 2000.0, 5000.0, 10000.0, 20000.0, + 50000.0, 100000.0, 200000.0, 400000.0, 800000.0, 1600000.0, 3200000.0); static Aggregation AGGREGATION_WITH_MILLIS_HISTOGRAM = - Aggregation.explicitBucketHistogram( - ImmutableList.of( - 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, - 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 25.0, 30.0, 40.0, 50.0, 65.0, 80.0, 100.0, 130.0, - 160.0, 200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0, 1000.0, 2000.0, 5000.0, - 10000.0, 20000.0, 50000.0, 100000.0, 200000.0, 400000.0, 800000.0, 1600000.0, - 3200000.0)); + Aggregation.explicitBucketHistogram(BUCKET_BOUNDARIES); + + static final Collection GRPC_METRICS_ENABLED_BY_DEFAULT = + ImmutableList.of( + "grpc.client.attempt.sent_total_compressed_message_size", + "grpc.client.attempt.rcvd_total_compressed_message_size", + "grpc.client.attempt.duration", + "grpc.client.call.duration"); static Map getAllViews() { ImmutableMap.Builder views = ImmutableMap.builder(); defineView( views, + BuiltInMetricsConstant.GAX_METER_NAME, BuiltInMetricsConstant.OPERATION_LATENCY_NAME, BuiltInMetricsConstant.OPERATION_LATENCIES_NAME, BuiltInMetricsConstant.AGGREGATION_WITH_MILLIS_HISTOGRAM, @@ -121,6 +217,7 @@ static Map getAllViews() { "ms"); defineView( views, + BuiltInMetricsConstant.GAX_METER_NAME, BuiltInMetricsConstant.ATTEMPT_LATENCY_NAME, BuiltInMetricsConstant.ATTEMPT_LATENCIES_NAME, BuiltInMetricsConstant.AGGREGATION_WITH_MILLIS_HISTOGRAM, @@ -128,6 +225,7 @@ static Map getAllViews() { "ms"); defineView( views, + BuiltInMetricsConstant.GAX_METER_NAME, BuiltInMetricsConstant.OPERATION_COUNT_NAME, BuiltInMetricsConstant.OPERATION_COUNT_NAME, Aggregation.sum(), @@ -135,16 +233,21 @@ static Map getAllViews() { "1"); defineView( views, + BuiltInMetricsConstant.GAX_METER_NAME, BuiltInMetricsConstant.ATTEMPT_COUNT_NAME, BuiltInMetricsConstant.ATTEMPT_COUNT_NAME, Aggregation.sum(), InstrumentType.COUNTER, "1"); + defineSpannerView(views); + defineGRPCView(views); + defineGrpcGcpView(views); return views.build(); } private static void defineView( ImmutableMap.Builder viewMap, + String meterName, String metricName, String metricViewName, Aggregation aggregation, @@ -153,7 +256,7 @@ private static void defineView( InstrumentSelector selector = InstrumentSelector.builder() .setName(BuiltInMetricsConstant.METER_NAME + '/' + metricName) - .setMeterName(BuiltInMetricsConstant.GAX_METER_NAME) + .setMeterName(meterName) .setType(type) .setUnit(unit) .build(); @@ -169,4 +272,67 @@ private static void defineView( .build(); viewMap.put(selector, view); } + + private static void defineSpannerView(ImmutableMap.Builder viewMap) { + InstrumentSelector selector = + InstrumentSelector.builder() + .setMeterName(BuiltInMetricsConstant.SPANNER_METER_NAME) + .build(); + Set attributesFilter = + BuiltInMetricsConstant.COMMON_ATTRIBUTES.stream() + .map(AttributeKey::getKey) + .collect(Collectors.toSet()); + View view = View.builder().setAttributeFilter(attributesFilter).build(); + viewMap.put(selector, view); + } + + private static void defineGRPCView(ImmutableMap.Builder viewMap) { + for (String metric : BuiltInMetricsConstant.GRPC_METRICS_TO_ENABLE) { + InstrumentSelector selector = + InstrumentSelector.builder() + .setName(metric) + .setMeterName(BuiltInMetricsConstant.GRPC_METER_NAME) + .build(); + Set attributesFilter = + BuiltInMetricsConstant.COMMON_ATTRIBUTES.stream() + .map(AttributeKey::getKey) + .collect(Collectors.toSet()); + attributesFilter.addAll( + GRPC_METRIC_ADDITIONAL_ATTRIBUTES.getOrDefault(metric, ImmutableSet.of())); + + View view = + View.builder() + .setName(BuiltInMetricsConstant.METER_NAME + '/' + metric.replace(".", "/")) + .setAttributeFilter(attributesFilter) + .build(); + viewMap.put(selector, view); + } + } + + private static void defineGrpcGcpView(ImmutableMap.Builder viewMap) { + for (String metric : GRPC_GCP_METRICS_TO_ENABLE) { + InstrumentSelector selector = + InstrumentSelector.builder() + .setName(metric) + .setMeterName(BuiltInMetricsConstant.GRPC_GCP_METER_NAME) + .build(); + + Set attributesFilter = + BuiltInMetricsConstant.COMMON_ATTRIBUTES.stream() + .map(AttributeKey::getKey) + .collect(Collectors.toSet()); + + attributesFilter.addAll( + GRPC_GCP_METRIC_ADDITIONAL_ATTRIBUTES.getOrDefault(metric, ImmutableSet.of())); + + View view = + View.builder() + .setName(BuiltInMetricsConstant.METER_NAME + '/' + metric.replace(".", "/")) + .setAggregation(Aggregation.sum()) + .setAttributeFilter(attributesFilter) + .build(); + + viewMap.put(selector, view); + } + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java similarity index 52% rename from google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProvider.java rename to google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java index 4aeb98987d1..0a51ebfae26 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProvider.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java @@ -21,24 +21,40 @@ import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_NAME_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_UID_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.INSTANCE_CONFIG_ID_KEY; +import static com.google.cloud.spanner.BuiltInMetricsConstant.INSTANCE_ID_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.LOCATION_ID_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.PROJECT_ID_KEY; +import com.google.api.core.ApiFunction; +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.auth.Credentials; import com.google.cloud.opentelemetry.detection.AttributeKeys; import com.google.cloud.opentelemetry.detection.DetectedPlatform; import com.google.cloud.opentelemetry.detection.GCPPlatformDetector; +import com.google.common.base.Strings; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; +import io.grpc.ManagedChannelBuilder; +import io.grpc.opentelemetry.GrpcOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; +import io.opentelemetry.sdk.resources.Resource; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.lang.management.ManagementFactory; import java.lang.reflect.Method; +import java.net.HttpURLConnection; import java.net.InetAddress; +import java.net.URL; import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -46,27 +62,35 @@ import java.util.logging.Logger; import javax.annotation.Nullable; -final class BuiltInOpenTelemetryMetricsProvider { +final class BuiltInMetricsProvider { - static BuiltInOpenTelemetryMetricsProvider INSTANCE = new BuiltInOpenTelemetryMetricsProvider(); + static BuiltInMetricsProvider INSTANCE = new BuiltInMetricsProvider(); - private static final Logger logger = - Logger.getLogger(BuiltInOpenTelemetryMetricsProvider.class.getName()); + private static final Logger logger = Logger.getLogger(BuiltInMetricsProvider.class.getName()); private static String taskId; + private static String location; + + private static final String default_location = "global"; + private OpenTelemetry openTelemetry; - private BuiltInOpenTelemetryMetricsProvider() {} + private BuiltInMetricsProvider() {} OpenTelemetry getOrCreateOpenTelemetry( - String projectId, @Nullable Credentials credentials, @Nullable String monitoringHost) { + String projectId, + @Nullable Credentials credentials, + @Nullable String monitoringHost, + String universeDomain) { try { if (this.openTelemetry == null) { SdkMeterProviderBuilder sdkMeterProviderBuilder = SdkMeterProvider.builder(); - BuiltInOpenTelemetryMetricsView.registerBuiltinMetrics( - SpannerCloudMonitoringExporter.create(projectId, credentials, monitoringHost), + BuiltInMetricsView.registerBuiltinMetrics( + SpannerCloudMonitoringExporter.create( + projectId, credentials, monitoringHost, universeDomain), sdkMeterProviderBuilder); + sdkMeterProviderBuilder.setResource(Resource.create(createResourceAttributes(projectId))); SdkMeterProvider sdkMeterProvider = sdkMeterProviderBuilder.build(); this.openTelemetry = OpenTelemetrySdk.builder().setMeterProvider(sdkMeterProvider).build(); Runtime.getRuntime().addShutdownHook(new Thread(sdkMeterProvider::close)); @@ -75,21 +99,90 @@ OpenTelemetry getOrCreateOpenTelemetry( } catch (IOException ex) { logger.log( Level.WARNING, - "Unable to get OpenTelemetry object for client side metrics, will skip exporting client side metrics", + "Unable to get OpenTelemetry object for client side metrics, will skip exporting client" + + " side metrics", ex); return null; } } - Map createClientAttributes(String projectId, String client_name) { + // TODO: Remove when + // https://github.com/GoogleCloudPlatform/opentelemetry-operations-java/issues/421 + // has been fixed. + static boolean quickCheckIsRunningOnGcp() { + int timeout = 5000; + try { + timeout = + Integer.parseInt(System.getProperty("spanner.check_is_running_on_gcp_timeout", "5000")); + } catch (NumberFormatException ignore) { + // ignore + } + try { + URL url = new URL("http://metadata.google.internal/computeMetadata/v1/project/project-id"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setConnectTimeout(timeout); + connection.setRequestProperty("Metadata-Flavor", "Google"); + if (connection.getResponseCode() == 200 + && ("Google").equals(connection.getHeaderField("Metadata-Flavor"))) { + InputStream input = connection.getInputStream(); + try (BufferedReader reader = + new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) { + return !Strings.isNullOrEmpty(reader.readLine()); + } + } + } catch (IOException ignore) { + // ignore + } + return false; + } + + void enableGrpcMetrics( + InstantiatingGrpcChannelProvider.Builder channelProviderBuilder, + String projectId, + @Nullable Credentials credentials, + @Nullable String monitoringHost, + String universeDomain) { + GrpcOpenTelemetry grpcOpenTelemetry = + GrpcOpenTelemetry.newBuilder() + .sdk( + this.getOrCreateOpenTelemetry( + projectId, credentials, monitoringHost, universeDomain)) + .enableMetrics(BuiltInMetricsConstant.GRPC_METRICS_TO_ENABLE) + // Disable gRPCs default metrics as they are not needed for Spanner. + .disableMetrics(BuiltInMetricsConstant.GRPC_METRICS_ENABLED_BY_DEFAULT) + .addOptionalLabel(BuiltInMetricsConstant.GRPC_LB_BACKEND_SERVICE_ATTRIBUTE) + .addOptionalLabel(BuiltInMetricsConstant.GRPC_LB_LOCALITY_ATTRIBUTE) + .addOptionalLabel(BuiltInMetricsConstant.GRPC_DISCONNECT_ERROR_ATTRIBUTE) + .build(); + ApiFunction channelConfigurator = + channelProviderBuilder.getChannelConfigurator(); + channelProviderBuilder.setChannelConfigurator( + b -> { + grpcOpenTelemetry.configureChannelBuilder(b); + if (channelConfigurator != null) { + return channelConfigurator.apply(b); + } + return b; + }); + } + + Attributes createResourceAttributes(String projectId) { + AttributesBuilder attributesBuilder = + Attributes.builder() + .put(PROJECT_ID_KEY.getKey(), projectId) + .put(INSTANCE_CONFIG_ID_KEY.getKey(), "unknown") + .put(CLIENT_HASH_KEY.getKey(), generateClientHash(getDefaultTaskValue())) + .put(INSTANCE_ID_KEY.getKey(), "unknown") + .put(LOCATION_ID_KEY.getKey(), detectClientLocation()); + + return attributesBuilder.build(); + } + + Map createClientAttributes() { Map clientAttributes = new HashMap<>(); - clientAttributes.put(LOCATION_ID_KEY.getKey(), detectClientLocation()); - clientAttributes.put(PROJECT_ID_KEY.getKey(), projectId); - clientAttributes.put(INSTANCE_CONFIG_ID_KEY.getKey(), "unknown"); - clientAttributes.put(CLIENT_NAME_KEY.getKey(), client_name); - String clientUid = getDefaultTaskValue(); - clientAttributes.put(CLIENT_UID_KEY.getKey(), clientUid); - clientAttributes.put(CLIENT_HASH_KEY.getKey(), generateClientHash(clientUid)); + clientAttributes.put( + CLIENT_NAME_KEY.getKey(), "spanner-java/" + GaxProperties.getLibraryVersion(getClass())); + clientAttributes.put(CLIENT_UID_KEY.getKey(), getDefaultTaskValue()); return clientAttributes; } @@ -122,14 +215,20 @@ static String generateClientHash(String clientUid) { } static String detectClientLocation() { - GCPPlatformDetector detector = GCPPlatformDetector.DEFAULT_INSTANCE; - DetectedPlatform detectedPlatform = detector.detectPlatform(); - // All platform except GKE uses "cloud_region" for region attribute. - String region = detectedPlatform.getAttributes().get("cloud_region"); - if (detectedPlatform.getSupportedPlatform() == GOOGLE_KUBERNETES_ENGINE) { - region = detectedPlatform.getAttributes().get(AttributeKeys.GKE_CLUSTER_LOCATION); + if (location == null) { + location = default_location; + if (quickCheckIsRunningOnGcp()) { + GCPPlatformDetector detector = GCPPlatformDetector.DEFAULT_INSTANCE; + DetectedPlatform detectedPlatform = detector.detectPlatform(); + // All platform except GKE uses "cloud_region" for region attribute. + String region = detectedPlatform.getAttributes().get("cloud_region"); + if (detectedPlatform.getSupportedPlatform() == GOOGLE_KUBERNETES_ENGINE) { + region = detectedPlatform.getAttributes().get(AttributeKeys.GKE_CLUSTER_LOCATION); + } + location = region == null ? location : region; + } } - return region == null ? "global" : region; + return location; } /** diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java new file mode 100644 index 00000000000..67e75a1d383 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java @@ -0,0 +1,128 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.tracing.OpenTelemetryMetricsRecorder; +import com.google.common.base.Preconditions; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.metrics.DoubleHistogram; +import io.opentelemetry.api.metrics.LongCounter; +import io.opentelemetry.api.metrics.Meter; +import java.util.Map; + +/** + * Implementation for recording built in metrics. + * + *

    This class extends the {@link OpenTelemetryMetricsRecorder} which implements the * + * measurements related to the lifecyle of an RPC. + */ +class BuiltInMetricsRecorder extends OpenTelemetryMetricsRecorder { + + private final DoubleHistogram gfeLatencyRecorder; + private final DoubleHistogram afeLatencyRecorder; + private final LongCounter gfeHeaderMissingCountRecorder; + private final LongCounter afeHeaderMissingCountRecorder; + + /** + * Creates the following instruments for the following metrics: + * + *

      + *
    • GFE Latency: Histogram + *
    + * + * @param openTelemetry OpenTelemetry instance + * @param serviceName Service Name + */ + BuiltInMetricsRecorder(OpenTelemetry openTelemetry, String serviceName) { + super(openTelemetry, serviceName); + Meter meter = + openTelemetry + .meterBuilder(BuiltInMetricsConstant.SPANNER_METER_NAME) + .setInstrumentationVersion(GaxProperties.getLibraryVersion(getClass())) + .build(); + this.gfeLatencyRecorder = + meter + .histogramBuilder(serviceName + '/' + BuiltInMetricsConstant.GFE_LATENCIES_NAME) + .setDescription( + "Latency between Google's network receiving an RPC and reading back the first byte" + + " of the response") + .setUnit("ms") + .setExplicitBucketBoundariesAdvice(BuiltInMetricsConstant.BUCKET_BOUNDARIES) + .build(); + this.afeLatencyRecorder = + meter + .histogramBuilder(serviceName + '/' + BuiltInMetricsConstant.AFE_LATENCIES_NAME) + .setDescription( + "Latency between Spanner API Frontend receiving an RPC and starting to write back" + + " the response.") + .setExplicitBucketBoundariesAdvice(BuiltInMetricsConstant.BUCKET_BOUNDARIES) + .setUnit("ms") + .build(); + this.gfeHeaderMissingCountRecorder = + meter + .counterBuilder(serviceName + '/' + BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME) + .setDescription("Number of requests that failed to reach the Google network.") + .setUnit("1") + .build(); + this.afeHeaderMissingCountRecorder = + meter + .counterBuilder(serviceName + '/' + BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME) + .setDescription("Number of requests that failed to reach the Spanner API Frontend.") + .setUnit("1") + .build(); + } + + /** + * Record the latency between Google's network receiving an RPC and reading back the first byte of + * the response. Data is stored in a Histogram. + * + * @param gfeLatency Attempt Latency in ms + * @param attributes Map of the attributes to store + */ + void recordServerTimingHeaderMetrics( + Float gfeLatency, + Float afeLatency, + Map attributes, + boolean isDirectPathUsed, + boolean isAfeEnabled) { + io.opentelemetry.api.common.Attributes otelAttributes = toOtelAttributes(attributes); + if (!isDirectPathUsed) { + if (gfeLatency != null) { + gfeLatencyRecorder.record(gfeLatency, otelAttributes); + } else { + gfeHeaderMissingCountRecorder.add(1, otelAttributes); + } + } + if (isAfeEnabled) { + if (afeLatency != null) { + afeLatencyRecorder.record(afeLatency, otelAttributes); + } else { + afeHeaderMissingCountRecorder.add(1, otelAttributes); + } + } + } + + Attributes toOtelAttributes(Map attributes) { + Preconditions.checkNotNull(attributes, "Attributes map cannot be null"); + AttributesBuilder attributesBuilder = Attributes.builder(); + attributes.forEach(attributesBuilder::put); + return attributesBuilder.build(); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java new file mode 100644 index 00000000000..a982a3f11ab --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java @@ -0,0 +1,174 @@ +/* + * 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.spanner; + +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.tracing.ApiTracer; +import com.google.api.gax.tracing.MethodName; +import com.google.api.gax.tracing.MetricsTracer; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CancellationException; +import javax.annotation.Nullable; + +/** + * Implements built-in metrics tracer. + * + *

    This class extends the {@link MetricsTracer} which computes generic metrics that can be + * observed in the lifecycle of an RPC operation. + */ +class BuiltInMetricsTracer extends MetricsTracer implements ApiTracer { + + private final BuiltInMetricsRecorder builtInOpenTelemetryMetricsRecorder; + // These are RPC specific attributes and pertain to a specific API Trace + private final Map attributes = new HashMap<>(); + private Float gfeLatency = null; + private Float afeLatency = null; + private final TraceWrapper traceWrapper; + private final ISpan currentSpan; + private boolean isDirectPathUsed; + private boolean isAfeEnabled; + + BuiltInMetricsTracer( + MethodName methodName, + BuiltInMetricsRecorder builtInOpenTelemetryMetricsRecorder, + TraceWrapper traceWrapper, + ISpan currentSpan) { + super(methodName, builtInOpenTelemetryMetricsRecorder); + this.builtInOpenTelemetryMetricsRecorder = builtInOpenTelemetryMetricsRecorder; + this.attributes.put(METHOD_ATTRIBUTE, methodName.toString()); + this.traceWrapper = traceWrapper; + this.currentSpan = currentSpan; + } + + /** + * Adds an annotation that the attempt succeeded. Successful attempt add "OK" value to the status + * attribute key. + */ + @Override + public void attemptSucceeded() { + try (IScope s = this.traceWrapper.withSpan(this.currentSpan)) { + super.attemptSucceeded(); + attributes.put(STATUS_ATTRIBUTE, StatusCode.Code.OK.toString()); + builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( + gfeLatency, afeLatency, attributes, isDirectPathUsed, isAfeEnabled); + } + } + + /** + * Add an annotation that the attempt was cancelled by the user. Cancelled attempt add "CANCELLED" + * to the status attribute key. + */ + @Override + public void attemptCancelled() { + try (IScope s = this.traceWrapper.withSpan(this.currentSpan)) { + super.attemptCancelled(); + attributes.put(STATUS_ATTRIBUTE, StatusCode.Code.CANCELLED.toString()); + builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( + gfeLatency, afeLatency, attributes, isDirectPathUsed, isAfeEnabled); + } + } + + /** + * Adds an annotation that the attempt failed, but another attempt will be made after the delay. + * + * @param error the error that caused the attempt to fail. + * @param delay the amount of time to wait before the next attempt will start. + *

    Failed attempt extracts the error from the throwable and adds it to the status attribute + * key. + */ + @Override + public void attemptFailedDuration(Throwable error, java.time.Duration delay) { + try (IScope s = this.traceWrapper.withSpan(this.currentSpan)) { + super.attemptFailedDuration(error, delay); + attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); + builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( + gfeLatency, afeLatency, attributes, isDirectPathUsed, isAfeEnabled); + } + } + + /** + * Adds an annotation that the attempt failed and that no further attempts will be made because + * retry limits have been reached. This extracts the error from the throwable and adds it to the + * status attribute key. + * + * @param error the last error received before retries were exhausted. + */ + @Override + public void attemptFailedRetriesExhausted(Throwable error) { + try (IScope s = this.traceWrapper.withSpan(this.currentSpan)) { + super.attemptFailedRetriesExhausted(error); + attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); + builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( + gfeLatency, afeLatency, attributes, isDirectPathUsed, isAfeEnabled); + } + } + + /** + * Adds an annotation that the attempt failed and that no further attempts will be made because + * the last error was not retryable. This extracts the error from the throwable and adds it to the + * status attribute key. + * + * @param error the error that caused the final attempt to fail. + */ + @Override + public void attemptPermanentFailure(Throwable error) { + try (IScope s = this.traceWrapper.withSpan(this.currentSpan)) { + super.attemptPermanentFailure(error); + attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); + builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( + gfeLatency, afeLatency, attributes, isDirectPathUsed, isAfeEnabled); + } + } + + public void recordServerTimingHeaderMetrics( + Float gfeLatency, Float afeLatency, boolean isDirectPathUsed, boolean isAfeEnabled) { + this.gfeLatency = gfeLatency; + this.isDirectPathUsed = isDirectPathUsed; + this.afeLatency = afeLatency; + this.isAfeEnabled = isAfeEnabled; + } + + @Override + public void addAttributes(Map attributes) { + super.addAttributes(attributes); + this.attributes.putAll(attributes); + } + + @Override + public void addAttributes(String key, String value) { + super.addAttributes(key, value); + this.attributes.put(key, value); + } + + private static String extractStatus(@Nullable Throwable error) { + final String statusString; + + if (error == null) { + return StatusCode.Code.OK.toString(); + } else if (error instanceof CancellationException) { + statusString = StatusCode.Code.CANCELLED.toString(); + } else if (error instanceof ApiException) { + statusString = ((ApiException) error).getStatusCode().getCode().toString(); + } else { + statusString = StatusCode.Code.UNKNOWN.toString(); + } + + return statusString; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracerFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracerFactory.java new file mode 100644 index 00000000000..52e1acc68bd --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracerFactory.java @@ -0,0 +1,69 @@ +/* + * 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.spanner; + +import com.google.api.gax.tracing.ApiTracer; +import com.google.api.gax.tracing.ApiTracerFactory; +import com.google.api.gax.tracing.MethodName; +import com.google.api.gax.tracing.MetricsTracer; +import com.google.api.gax.tracing.MetricsTracerFactory; +import com.google.api.gax.tracing.SpanName; +import com.google.common.collect.ImmutableMap; +import java.util.Map; + +/** + * A {@link ApiTracerFactory} to build instances of {@link MetricsTracer}. + * + *

    This class extends the {@link MetricsTracerFactory} which wraps the {@link + * BuiltInMetricsRecorder} and pass it to {@link BuiltInMetricsTracer}. It will be * used to record + * metrics in {@link BuiltInMetricsTracer}. + * + *

    This class is expected to be initialized once during client initialization. + */ +class BuiltInMetricsTracerFactory extends MetricsTracerFactory { + + protected BuiltInMetricsRecorder builtInMetricsRecorder; + private final Map attributes; + private final TraceWrapper traceWrapper; + + /** + * Pass in a Map of client level attributes which will be added to every single MetricsTracer + * created from the ApiTracerFactory. + */ + public BuiltInMetricsTracerFactory( + BuiltInMetricsRecorder builtInMetricsRecorder, + Map attributes, + TraceWrapper traceWrapper) { + super(builtInMetricsRecorder, attributes); + this.builtInMetricsRecorder = builtInMetricsRecorder; + this.attributes = ImmutableMap.copyOf(attributes); + this.traceWrapper = traceWrapper; + } + + @Override + public ApiTracer newTracer(ApiTracer parent, SpanName spanName, OperationType operationType) { + ISpan currentSpan = this.traceWrapper.getCurrentSpan(); + BuiltInMetricsTracer metricsTracer = + new BuiltInMetricsTracer( + MethodName.of(spanName.getClientName(), spanName.getMethodName()), + builtInMetricsRecorder, + this.traceWrapper, + currentSpan); + metricsTracer.addAttributes(attributes); + return metricsTracer; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsView.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsView.java similarity index 93% rename from google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsView.java rename to google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsView.java index 4a09c0d856a..e72eeb9425a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsView.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsView.java @@ -20,9 +20,9 @@ import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader; -class BuiltInOpenTelemetryMetricsView { +class BuiltInMetricsView { - private BuiltInOpenTelemetryMetricsView() {} + private BuiltInMetricsView() {} /** Register built-in metrics on the {@link SdkMeterProviderBuilder} with credentials. */ static void registerBuiltinMetrics( diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java index 3ebd8f55315..85975e10f6c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java @@ -19,6 +19,7 @@ import com.google.cloud.Timestamp; import com.google.common.base.Preconditions; import java.util.Objects; +import javax.annotation.Nullable; /** Represents a response from a commit operation. */ public class CommitResponse { @@ -41,7 +42,21 @@ public Timestamp getCommitTimestamp() { return Timestamp.fromProto(proto.getCommitTimestamp()); } - /** @return true if the {@link CommitResponse} includes {@link CommitStats} */ + /** + * Returns a {@link Timestamp} representing the timestamp at which all reads in the transaction + * ran at, if the transaction ran at repeatable read isolation in internal test environments, and + * otherwise returns null. + */ + public @Nullable Timestamp getSnapshotTimestamp() { + if (proto.getSnapshotTimestamp() == com.google.protobuf.Timestamp.getDefaultInstance()) { + return null; + } + return Timestamp.fromProto(proto.getSnapshotTimestamp()); + } + + /** + * @return true if the {@link CommitResponse} includes {@link CommitStats} + */ public boolean hasCommitStats() { return proto.hasCommitStats(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java index 60d7081cc1e..105dbd0a512 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java @@ -190,4 +190,15 @@ public void addAttributes(Map attributes) { } } } + + public void recordServerTimingHeaderMetrics( + Float gfeLatency, Float afeLatency, boolean isDirectPathUsed, boolean isAfeEnabled) { + for (ApiTracer child : children) { + if (child instanceof BuiltInMetricsTracer) { + ((BuiltInMetricsTracer) child) + .recordServerTimingHeaderMetrics( + gfeLatency, afeLatency, isDirectPathUsed, isAfeEnabled); + } + } + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java index 06237131458..8b2dcc31786 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java @@ -21,7 +21,10 @@ import com.google.cloud.spanner.Options.RpcPriority; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; +import com.google.cloud.spanner.Statement.StatementFactory; import com.google.spanner.v1.BatchWriteResponse; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; /** * Interface for all the APIs that are used to read/write data into a Cloud Spanner database. An @@ -414,6 +417,8 @@ ServerStream batchWriteAtLeastOnce( * applied to any other requests on the transaction. *

  • {@link Options#commitStats()}: Request that the server includes commit statistics in the * {@link CommitResponse}. + *
  • {@link Options#isolationLevel(IsolationLevel)}: The isolation level for the transaction + *
  • {@link Options#readLockMode(ReadLockMode)}: The read lock mode for the transaction * */ TransactionRunner readWriteTransaction(TransactionOption... options); @@ -454,6 +459,8 @@ ServerStream batchWriteAtLeastOnce( * applied to any other requests on the transaction. *
  • {@link Options#commitStats()}: Request that the server includes commit statistics in the * {@link CommitResponse}. + *
  • {@link Options#isolationLevel(IsolationLevel)}: The isolation level for the transaction + *
  • {@link Options#readLockMode(ReadLockMode)}: The read lock mode for the transaction * */ TransactionManager transactionManager(TransactionOption... options); @@ -494,6 +501,8 @@ ServerStream batchWriteAtLeastOnce( * applied to any other requests on the transaction. *
  • {@link Options#commitStats()}: Request that the server includes commit statistics in the * {@link CommitResponse}. + *
  • {@link Options#isolationLevel(IsolationLevel)}: The isolation level for the transaction + *
  • {@link Options#readLockMode(ReadLockMode)}: The read lock mode for the transaction * */ AsyncRunner runAsync(TransactionOption... options); @@ -548,6 +557,8 @@ ServerStream batchWriteAtLeastOnce( * applied to any other requests on the transaction. *
  • {@link Options#commitStats()}: Request that the server includes commit statistics in the * {@link CommitResponse}. + *
  • {@link Options#isolationLevel(IsolationLevel)}: The isolation level for the transaction + *
  • {@link Options#readLockMode(ReadLockMode)}: The read lock mode for the transaction * */ AsyncTransactionManager transactionManagerAsync(TransactionOption... options); @@ -601,4 +612,24 @@ ServerStream batchWriteAtLeastOnce( * idempotent, such as deleting old rows from a very large table. */ long executePartitionedUpdate(Statement stmt, UpdateOption... options); + + /** + * Returns a {@link StatementFactory} for the given dialect. + * + *

    A {@link StatementFactory} can be used to create statements with unnamed parameters. This is + * primarily intended for framework developers who want to integrate the Spanner client with + * frameworks that use unnamed parameters. Developers who just want to use the Spanner client in + * their application, should use named parameters. + * + *

    Examples using {@link StatementFactory} + * + *

    {@code
    +   * Statement statement = databaseClient
    +   *     .getStatementFactory()
    +   *     .withUnnamedParameters("SELECT NAME FROM TABLE WHERE ID = ?", 10);
    +   * }
    + */ + default StatementFactory getStatementFactory() { + throw new UnsupportedOperationException("method should be overwritten"); + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java index f571354dacb..bae8067e33d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java @@ -20,12 +20,20 @@ import com.google.cloud.Timestamp; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; import com.google.cloud.spanner.SpannerImpl.ClosedException; +import com.google.cloud.spanner.Statement.StatementFactory; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; +import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.spanner.v1.BatchWriteResponse; +import io.opentelemetry.api.common.Attributes; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.Nullable; class DatabaseClientImpl implements DatabaseClient { @@ -33,100 +41,76 @@ class DatabaseClientImpl implements DatabaseClient { private static final String READ_ONLY_TRANSACTION = "CloudSpanner.ReadOnlyTransaction"; private static final String PARTITION_DML_TRANSACTION = "CloudSpanner.PartitionDMLTransaction"; private final TraceWrapper tracer; + private final Attributes databaseAttributes; @VisibleForTesting final String clientId; - @VisibleForTesting final SessionPool pool; @VisibleForTesting final MultiplexedSessionDatabaseClient multiplexedSessionDatabaseClient; - @VisibleForTesting final boolean useMultiplexedSessionPartitionedOps; - @VisibleForTesting final boolean useMultiplexedSessionForRW; - - final boolean useMultiplexedSessionBlindWrite; - - @VisibleForTesting - DatabaseClientImpl(SessionPool pool, TraceWrapper tracer) { - this( - "", - pool, - /* useMultiplexedSessionBlindWrite = */ false, - /* multiplexedSessionDatabaseClient = */ null, - /* useMultiplexedSessionPartitionedOps= */ false, - tracer, - /* useMultiplexedSessionForRW = */ false); - } - - @VisibleForTesting - DatabaseClientImpl(String clientId, SessionPool pool, TraceWrapper tracer) { - this( - clientId, - pool, - /* useMultiplexedSessionBlindWrite = */ false, - /* multiplexedSessionDatabaseClient = */ null, - /* useMultiplexedSessionPartitionedOps= */ false, - tracer, - /* useMultiplexedSessionForRW = */ false); - } + @VisibleForTesting final int dbId; + private final AtomicInteger nthRequest; + private final Map clientIdToOrdinalMap; DatabaseClientImpl( String clientId, - SessionPool pool, - boolean useMultiplexedSessionBlindWrite, - @Nullable MultiplexedSessionDatabaseClient multiplexedSessionDatabaseClient, - boolean useMultiplexedSessionPartitionedOps, + MultiplexedSessionDatabaseClient multiplexedSessionDatabaseClient, TraceWrapper tracer, - boolean useMultiplexedSessionForRW) { + Attributes databaseAttributes) { this.clientId = clientId; - this.pool = pool; - this.useMultiplexedSessionBlindWrite = useMultiplexedSessionBlindWrite; this.multiplexedSessionDatabaseClient = multiplexedSessionDatabaseClient; - this.useMultiplexedSessionPartitionedOps = useMultiplexedSessionPartitionedOps; this.tracer = tracer; - this.useMultiplexedSessionForRW = useMultiplexedSessionForRW; - } + this.databaseAttributes = databaseAttributes; - @VisibleForTesting - PooledSessionFuture getSession() { - return pool.getSession(); + this.clientIdToOrdinalMap = new HashMap(); + this.dbId = this.dbIdFromClientId(this.clientId); + this.nthRequest = new AtomicInteger(0); } @VisibleForTesting - DatabaseClient getMultiplexedSession() { - if (canUseMultiplexedSessions()) { - return this.multiplexedSessionDatabaseClient; + synchronized int dbIdFromClientId(String clientId) { + Integer id = this.clientIdToOrdinalMap.get(clientId); + if (id == null) { + id = this.clientIdToOrdinalMap.size() + 1; + this.clientIdToOrdinalMap.put(clientId, id); } - return pool.getMultiplexedSessionWithFallback(); + return id; } @VisibleForTesting - DatabaseClient getMultiplexedSessionForRW() { - if (canUseMultiplexedSessionsForRW()) { - return getMultiplexedSession(); - } - return getSession(); - } - - private MultiplexedSessionDatabaseClient getMultiplexedSessionDatabaseClient() { - return canUseMultiplexedSessions() ? this.multiplexedSessionDatabaseClient : null; + DatabaseClient getMultiplexedSession() { + return this.multiplexedSessionDatabaseClient; } - private boolean canUseMultiplexedSessions() { - return this.multiplexedSessionDatabaseClient != null - && this.multiplexedSessionDatabaseClient.isMultiplexedSessionsSupported(); + @Override + public Dialect getDialect() { + return this.multiplexedSessionDatabaseClient.getDialect(); } - private boolean canUseMultiplexedSessionsForRW() { - return this.useMultiplexedSessionForRW - && this.multiplexedSessionDatabaseClient != null - && this.multiplexedSessionDatabaseClient.isMultiplexedSessionsForRWSupported(); - } + private final AbstractLazyInitializer statementFactorySupplier = + new AbstractLazyInitializer() { + @Override + protected StatementFactory initialize() { + try { + Dialect dialect = getDialectAsync().get(30, TimeUnit.SECONDS); + return new StatementFactory(dialect); + } catch (ExecutionException | TimeoutException e) { + throw SpannerExceptionFactory.asSpannerException(e); + } catch (InterruptedException e) { + throw SpannerExceptionFactory.propagateInterrupt(e); + } + } + }; @Override - public Dialect getDialect() { - return pool.getDialect(); + public StatementFactory getStatementFactory() { + try { + return statementFactorySupplier.get(); + } catch (Exception exception) { + throw SpannerExceptionFactory.asSpannerException(exception); + } } @Override @Nullable public String getDatabaseRole() { - return pool.getDatabaseRole(); + return multiplexedSessionDatabaseClient.getDatabaseRole(); } @Override @@ -138,12 +122,9 @@ public Timestamp write(final Iterable mutations) throws SpannerExcepti public CommitResponse writeWithOptions( final Iterable mutations, final TransactionOption... options) throws SpannerException { - ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, options); + ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, databaseAttributes, options); try (IScope s = tracer.withSpan(span)) { - if (canUseMultiplexedSessionsForRW() && getMultiplexedSessionDatabaseClient() != null) { - return getMultiplexedSessionDatabaseClient().writeWithOptions(mutations, options); - } - return runWithSessionRetry(session -> session.writeWithOptions(mutations, options)); + return multiplexedSessionDatabaseClient.writeWithOptions(mutations, options); } catch (RuntimeException e) { span.setStatus(e); throw e; @@ -161,14 +142,9 @@ public Timestamp writeAtLeastOnce(final Iterable mutations) throws Spa public CommitResponse writeAtLeastOnceWithOptions( final Iterable mutations, final TransactionOption... options) throws SpannerException { - ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, options); + ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, databaseAttributes, options); try (IScope s = tracer.withSpan(span)) { - if (useMultiplexedSessionBlindWrite && getMultiplexedSessionDatabaseClient() != null) { - return getMultiplexedSessionDatabaseClient() - .writeAtLeastOnceWithOptions(mutations, options); - } - return runWithSessionRetry( - session -> session.writeAtLeastOnceWithOptions(mutations, options)); + return multiplexedSessionDatabaseClient.writeAtLeastOnceWithOptions(mutations, options); } catch (RuntimeException e) { span.setStatus(e); throw e; @@ -181,9 +157,9 @@ public CommitResponse writeAtLeastOnceWithOptions( public ServerStream batchWriteAtLeastOnce( final Iterable mutationGroups, final TransactionOption... options) throws SpannerException { - ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, options); + ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, databaseAttributes, options); try (IScope s = tracer.withSpan(span)) { - return runWithSessionRetry(session -> session.batchWriteAtLeastOnce(mutationGroups, options)); + return multiplexedSessionDatabaseClient.batchWriteAtLeastOnce(mutationGroups, options); } catch (RuntimeException e) { span.setStatus(e); throw e; @@ -194,7 +170,7 @@ public ServerStream batchWriteAtLeastOnce( @Override public ReadContext singleUse() { - ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); + ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION, databaseAttributes); try (IScope s = tracer.withSpan(span)) { return getMultiplexedSession().singleUse(); } catch (RuntimeException e) { @@ -206,7 +182,7 @@ public ReadContext singleUse() { @Override public ReadContext singleUse(TimestampBound bound) { - ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); + ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION, databaseAttributes); try (IScope s = tracer.withSpan(span)) { return getMultiplexedSession().singleUse(bound); } catch (RuntimeException e) { @@ -218,7 +194,7 @@ public ReadContext singleUse(TimestampBound bound) { @Override public ReadOnlyTransaction singleUseReadOnlyTransaction() { - ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); + ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION, databaseAttributes); try (IScope s = tracer.withSpan(span)) { return getMultiplexedSession().singleUseReadOnlyTransaction(); } catch (RuntimeException e) { @@ -230,7 +206,7 @@ public ReadOnlyTransaction singleUseReadOnlyTransaction() { @Override public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { - ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); + ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION, databaseAttributes); try (IScope s = tracer.withSpan(span)) { return getMultiplexedSession().singleUseReadOnlyTransaction(bound); } catch (RuntimeException e) { @@ -242,7 +218,7 @@ public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { @Override public ReadOnlyTransaction readOnlyTransaction() { - ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); + ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION, databaseAttributes); try (IScope s = tracer.withSpan(span)) { return getMultiplexedSession().readOnlyTransaction(); } catch (RuntimeException e) { @@ -254,7 +230,7 @@ public ReadOnlyTransaction readOnlyTransaction() { @Override public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { - ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); + ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION, databaseAttributes); try (IScope s = tracer.withSpan(span)) { return getMultiplexedSession().readOnlyTransaction(bound); } catch (RuntimeException e) { @@ -266,9 +242,9 @@ public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { @Override public TransactionRunner readWriteTransaction(TransactionOption... options) { - ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, options); + ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, databaseAttributes, options); try (IScope s = tracer.withSpan(span)) { - return getMultiplexedSessionForRW().readWriteTransaction(options); + return multiplexedSessionDatabaseClient.readWriteTransaction(options); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -278,9 +254,9 @@ public TransactionRunner readWriteTransaction(TransactionOption... options) { @Override public TransactionManager transactionManager(TransactionOption... options) { - ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, options); + ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, databaseAttributes, options); try (IScope s = tracer.withSpan(span)) { - return getMultiplexedSessionForRW().transactionManager(options); + return multiplexedSessionDatabaseClient.transactionManager(options); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -290,9 +266,9 @@ public TransactionManager transactionManager(TransactionOption... options) { @Override public AsyncRunner runAsync(TransactionOption... options) { - ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, options); + ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, databaseAttributes, options); try (IScope s = tracer.withSpan(span)) { - return getMultiplexedSessionForRW().runAsync(options); + return multiplexedSessionDatabaseClient.runAsync(options); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -302,9 +278,9 @@ public AsyncRunner runAsync(TransactionOption... options) { @Override public AsyncTransactionManager transactionManagerAsync(TransactionOption... options) { - ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, options); + ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, databaseAttributes, options); try (IScope s = tracer.withSpan(span)) { - return getMultiplexedSessionForRW().transactionManagerAsync(options); + return multiplexedSessionDatabaseClient.transactionManagerAsync(options); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -314,49 +290,20 @@ public AsyncTransactionManager transactionManagerAsync(TransactionOption... opti @Override public long executePartitionedUpdate(final Statement stmt, final UpdateOption... options) { - if (useMultiplexedSessionPartitionedOps) { - return getMultiplexedSession().executePartitionedUpdate(stmt, options); - } - return executePartitionedUpdateWithPooledSession(stmt, options); + return multiplexedSessionDatabaseClient.executePartitionedUpdate(stmt, options); } - private long executePartitionedUpdateWithPooledSession( - final Statement stmt, final UpdateOption... options) { - ISpan span = tracer.spanBuilder(PARTITION_DML_TRANSACTION); - try (IScope s = tracer.withSpan(span)) { - return runWithSessionRetry(session -> session.executePartitionedUpdate(stmt, options)); - } catch (RuntimeException e) { - span.setStatus(e); - span.end(); - throw e; - } - } - - private T runWithSessionRetry(Function callable) { - PooledSessionFuture session = getSession(); - while (true) { - try { - return callable.apply(session); - } catch (SessionNotFoundException e) { - session = - (PooledSessionFuture) - pool.getPooledSessionReplacementHandler().replaceSession(e, session); - } - } + private Future getDialectAsync() { + return multiplexedSessionDatabaseClient.getDialectAsync(); } boolean isValid() { - return pool.isValid() - && (multiplexedSessionDatabaseClient == null - || multiplexedSessionDatabaseClient.isValid() - || !multiplexedSessionDatabaseClient.isMultiplexedSessionsSupported()); + return multiplexedSessionDatabaseClient.isValid(); } ListenableFuture closeAsync(ClosedException closedException) { - if (this.multiplexedSessionDatabaseClient != null) { - // This method is non-blocking. - this.multiplexedSessionDatabaseClient.close(); - } - return pool.closeAsync(closedException); + // This method is non-blocking. + this.multiplexedSessionDatabaseClient.close(); + return Futures.immediateVoidFuture(); } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedAsyncTransactionManager.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedAsyncTransactionManager.java index 56b874e4a87..530670960ca 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedAsyncTransactionManager.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedAsyncTransactionManager.java @@ -50,6 +50,11 @@ public TransactionContextFuture beginAsync() { return getAsyncTransactionManager().beginAsync(); } + @Override + public TransactionContextFuture beginAsync(AbortedException exception) { + return getAsyncTransactionManager().beginAsync(exception); + } + @Override public ApiFuture rollbackAsync() { return getAsyncTransactionManager().rollbackAsync(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedMultiplexedSessionTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedMultiplexedSessionTransaction.java index 0193805cbeb..81e29cfda48 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedMultiplexedSessionTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedMultiplexedSessionTransaction.java @@ -20,12 +20,14 @@ import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; +import com.google.api.gax.rpc.ServerStream; import com.google.cloud.Timestamp; import com.google.cloud.spanner.DelayedReadContext.DelayedReadOnlyTransaction; import com.google.cloud.spanner.MultiplexedSessionDatabaseClient.MultiplexedSessionTransaction; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; import com.google.common.util.concurrent.MoreExecutors; +import com.google.spanner.v1.BatchWriteResponse; import java.util.concurrent.ExecutionException; /** @@ -52,6 +54,11 @@ class DelayedMultiplexedSessionTransaction extends AbstractMultiplexedSessionDat this.sessionFuture = sessionFuture; } + @Override + public String getDatabaseRole() { + return this.client.getDatabaseRole(); + } + @Override public ReadContext singleUse() { return new DelayedReadContext<>( @@ -59,7 +66,7 @@ public ReadContext singleUse() { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ true) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ true) .singleUse(), MoreExecutors.directExecutor())); } @@ -71,7 +78,7 @@ public ReadContext singleUse(TimestampBound bound) { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ true) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ true) .singleUse(bound), MoreExecutors.directExecutor())); } @@ -83,7 +90,7 @@ public ReadOnlyTransaction singleUseReadOnlyTransaction() { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ true) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ true) .singleUseReadOnlyTransaction(), MoreExecutors.directExecutor())); } @@ -95,7 +102,7 @@ public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ true) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ true) .singleUseReadOnlyTransaction(bound), MoreExecutors.directExecutor())); } @@ -107,7 +114,7 @@ public ReadOnlyTransaction readOnlyTransaction() { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false) .readOnlyTransaction(), MoreExecutors.directExecutor())); } @@ -119,7 +126,7 @@ public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false) .readOnlyTransaction(bound), MoreExecutors.directExecutor())); } @@ -134,7 +141,7 @@ public CommitResponse writeAtLeastOnceWithOptions( SessionReference sessionReference = getSessionReference(); try (MultiplexedSessionTransaction transaction = new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ true)) { + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ true)) { return transaction.writeAtLeastOnceWithOptions(mutations, options); } } @@ -146,7 +153,7 @@ public Timestamp write(Iterable mutations) throws SpannerException { SessionReference sessionReference = getSessionReference(); try (MultiplexedSessionTransaction transaction = new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false)) { + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false)) { return transaction.write(mutations); } } @@ -159,11 +166,27 @@ public CommitResponse writeWithOptions(Iterable mutations, Transaction SessionReference sessionReference = getSessionReference(); try (MultiplexedSessionTransaction transaction = new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false)) { + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false)) { return transaction.writeWithOptions(mutations, options); } } + /** + * This is a blocking method, as the interface that it implements is also defined as a blocking + * method. + */ + @Override + public ServerStream batchWriteAtLeastOnce( + Iterable mutationGroups, TransactionOption... options) + throws SpannerException { + SessionReference sessionReference = getSessionReference(); + try (MultiplexedSessionTransaction transaction = + new MultiplexedSessionTransaction( + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ true)) { + return transaction.batchWriteAtLeastOnce(mutationGroups, options); + } + } + @Override public TransactionRunner readWriteTransaction(TransactionOption... options) { return new DelayedTransactionRunner( @@ -171,7 +194,7 @@ public TransactionRunner readWriteTransaction(TransactionOption... options) { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false) .readWriteTransaction(options), MoreExecutors.directExecutor())); } @@ -183,7 +206,7 @@ public TransactionManager transactionManager(TransactionOption... options) { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false) .transactionManager(options), MoreExecutors.directExecutor())); } @@ -195,7 +218,7 @@ public AsyncRunner runAsync(TransactionOption... options) { this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false) .runAsync(options), MoreExecutors.directExecutor())); } @@ -207,7 +230,7 @@ public AsyncTransactionManager transactionManagerAsync(TransactionOption... opti this.sessionFuture, sessionReference -> new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ false) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ false) .transactionManagerAsync(options), MoreExecutors.directExecutor())); } @@ -234,7 +257,7 @@ private SessionReference getSessionReference() { public long executePartitionedUpdate(Statement stmt, UpdateOption... options) { SessionReference sessionReference = getSessionReference(); return new MultiplexedSessionTransaction( - client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ true) + client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse= */ true) .executePartitionedUpdate(stmt, options); } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedTransactionManager.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedTransactionManager.java index 29eae6477fc..96400e9e9bb 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedTransactionManager.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedTransactionManager.java @@ -49,6 +49,11 @@ public TransactionContext begin() { return getTransactionManager().begin(); } + @Override + public TransactionContext begin(AbortedException exception) { + return getTransactionManager().begin(exception); + } + @Override public void commit() { getTransactionManager().commit(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DmlBatchUpdateCountVerificationFailedException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DmlBatchUpdateCountVerificationFailedException.java index f8c334ddbd5..c2c94598168 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DmlBatchUpdateCountVerificationFailedException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DmlBatchUpdateCountVerificationFailedException.java @@ -38,13 +38,15 @@ public class DmlBatchUpdateCountVerificationFailedException extends AbortedExcep super( token, String.format( - "Actual update counts that were returned during execution do not match the previously returned update counts.\n" + "Actual update counts that were returned during execution do not match the previously" + + " returned update counts.\n" + "Expected: %s\n" + "Actual: %s\n" - + "Set auto_batch_dml_update_count_verification to false to skip this verification.", + + "Set auto_batch_dml_update_count_verification to false to skip this" + + " verification.", Arrays.stream(expected).mapToObj(Long::toString).collect(Collectors.joining()), Arrays.stream(actual).mapToObj(Long::toString).collect(Collectors.joining())), - /* cause = */ null); + /* cause= */ null); this.expected = expected; this.actual = actual; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ErrorCode.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ErrorCode.java index 9896cc8aec9..07771a3faca 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ErrorCode.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ErrorCode.java @@ -69,7 +69,9 @@ Status getGrpcStatus() { return this.code.toStatus(); } - /** @return the corresponding gRPC status code of this {@link ErrorCode}. */ + /** + * @return the corresponding gRPC status code of this {@link ErrorCode}. + */ public Status.Code getGrpcStatusCode() { return this.code; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ForwardingStructReader.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ForwardingStructReader.java index b3e37ffcddb..839202bb9fe 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ForwardingStructReader.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ForwardingStructReader.java @@ -26,6 +26,7 @@ import com.google.protobuf.ProtocolMessageEnum; import java.math.BigDecimal; import java.util.List; +import java.util.UUID; import java.util.function.Function; /** Forwarding implements of StructReader */ @@ -231,6 +232,30 @@ public Date getDate(String columnName) { return delegate.get().getDate(columnName); } + @Override + public UUID getUuid(int columnIndex) { + checkValidState(); + return delegate.get().getUuid(columnIndex); + } + + @Override + public UUID getUuid(String columnName) { + checkValidState(); + return delegate.get().getUuid(columnName); + } + + @Override + public Interval getInterval(int columnIndex) { + checkValidState(); + return delegate.get().getInterval(columnIndex); + } + + @Override + public Interval getInterval(String columnName) { + checkValidState(); + return delegate.get().getInterval(columnName); + } + @Override public boolean[] getBooleanArray(int columnIndex) { checkValidState(); @@ -409,6 +434,30 @@ public List getDateList(String columnName) { return delegate.get().getDateList(columnName); } + @Override + public List getUuidList(int columnIndex) { + checkValidState(); + return delegate.get().getUuidList(columnIndex); + } + + @Override + public List getUuidList(String columnName) { + checkValidState(); + return delegate.get().getUuidList(columnName); + } + + @Override + public List getIntervalList(int columnIndex) { + checkValidState(); + return delegate.get().getIntervalList(columnIndex); + } + + @Override + public List getIntervalList(String columnName) { + checkValidState(); + return delegate.get().getIntervalList(columnName); + } + @Override public List getProtoMessageList(int columnIndex, T message) { checkValidState(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcResultSet.java index c2a4ee5a585..80a9dfcf533 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcResultSet.java @@ -16,7 +16,7 @@ package com.google.cloud.spanner; -import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException; +import static com.google.cloud.spanner.SpannerExceptionFactory.asSpannerException; import static com.google.common.base.Preconditions.checkState; import com.google.api.core.InternalApi; @@ -76,7 +76,7 @@ protected GrpcStruct currRow() { @Override public boolean next() throws SpannerException { if (error != null) { - throw newSpannerException(error); + throw asSpannerException(error); } try { if (currRow == null) { @@ -108,8 +108,9 @@ public boolean next() throws SpannerException { return hasNext; } catch (Throwable t) { throw yieldError( - SpannerExceptionFactory.asSpannerException(t), - iterator.isWithBeginTransaction() && currRow == null); + asSpannerException(t), + iterator.isWithBeginTransaction() && currRow == null, + iterator.isLastStatement()); } } @@ -149,8 +150,9 @@ public Type getType() { return currRow.getType(); } - private SpannerException yieldError(SpannerException e, boolean beginTransaction) { - SpannerException toThrow = listener.onError(e, beginTransaction); + private SpannerException yieldError( + SpannerException e, boolean beginTransaction, boolean lastStatement) { + SpannerException toThrow = listener.onError(e, beginTransaction, lastStatement); close(); throw toThrow; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStreamIterator.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStreamIterator.java index 60a52b78f25..e0df4c422e3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStreamIterator.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStreamIterator.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import com.google.api.core.InternalApi; import com.google.api.gax.rpc.ApiCallContext; import com.google.cloud.spanner.AbstractResultSet.CloseableIterator; import com.google.cloud.spanner.spi.v1.SpannerRpc; @@ -39,6 +40,7 @@ class GrpcStreamIterator extends AbstractIterator implements CloseableIterator { private static final Logger logger = Logger.getLogger(GrpcStreamIterator.class.getName()); static final PartialResultSet END_OF_STREAM = PartialResultSet.newBuilder().build(); + private final int prefetchChunks; private AsyncResultSet.StreamMessageListener streamMessageListener; private final ConsumerImpl consumer; @@ -47,19 +49,27 @@ class GrpcStreamIterator extends AbstractIterator private SpannerRpc.StreamingCall call; private volatile boolean withBeginTransaction; + private final boolean lastStatement; private TimeUnit streamWaitTimeoutUnit; private long streamWaitTimeoutValue; private SpannerException error; + private boolean done; @VisibleForTesting - GrpcStreamIterator(int prefetchChunks, boolean cancelQueryWhenClientIsClosed) { - this(null, prefetchChunks, cancelQueryWhenClientIsClosed); + GrpcStreamIterator( + boolean lastStatement, int prefetchChunks, boolean cancelQueryWhenClientIsClosed) { + this(null, lastStatement, prefetchChunks, cancelQueryWhenClientIsClosed); } @VisibleForTesting GrpcStreamIterator( - Statement statement, int prefetchChunks, boolean cancelQueryWhenClientIsClosed) { + Statement statement, + boolean lastStatement, + int prefetchChunks, + boolean cancelQueryWhenClientIsClosed) { this.statement = statement; + this.lastStatement = lastStatement; + this.prefetchChunks = prefetchChunks; this.consumer = new ConsumerImpl(cancelQueryWhenClientIsClosed); // One extra to allow for END_OF_STREAM message. this.stream = new LinkedBlockingQueue<>(prefetchChunks + 1); @@ -102,11 +112,23 @@ public void close(@Nullable String message) { } } + @Override + @InternalApi + public void requestPrefetchChunks() { + Preconditions.checkState(call != null, "The StreamingCall object is not initialized"); + call.request(prefetchChunks); + } + @Override public boolean isWithBeginTransaction() { return withBeginTransaction; } + @Override + public boolean isLastStatement() { + return lastStatement; + } + @Override protected final PartialResultSet computeNext() { PartialResultSet next; @@ -133,7 +155,7 @@ protected final PartialResultSet computeNext() { call = null; if (error != null) { - throw SpannerExceptionFactory.newSpannerException(error); + throw SpannerExceptionFactory.asSpannerException(error); } endOfData(); @@ -156,33 +178,31 @@ private class ConsumerImpl implements SpannerRpc.ResultStreamConsumer { @Override public void onPartialResultSet(PartialResultSet results) { addToStream(results); + if (results.getLast()) { + done = true; + addToStream(END_OF_STREAM); + } } @Override public void onCompleted() { - addToStream(END_OF_STREAM); + if (!done) { + addToStream(END_OF_STREAM); + } } @Override - public void onError(SpannerException e) { + public void onError(SpannerException exception) { if (statement != null) { if (logger.isLoggable(Level.FINEST)) { // Include parameter values if logging level is set to FINEST or higher. - e = - SpannerExceptionFactory.newSpannerExceptionPreformatted( - e.getErrorCode(), - String.format("%s - Statement: '%s'", e.getMessage(), statement.toString()), - e); - logger.log(Level.FINEST, "Error executing statement", e); + exception.setStatement(statement.toString()); + logger.log(Level.FINEST, "Error executing statement", exception); } else { - e = - SpannerExceptionFactory.newSpannerExceptionPreformatted( - e.getErrorCode(), - String.format("%s - Statement: '%s'", e.getMessage(), statement.getSql()), - e); + exception.setStatement(statement.getSql()); } } - error = e; + error = exception; addToStream(END_OF_STREAM); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStruct.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStruct.java index 4d07a12880c..6f0a54039b7 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStruct.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStruct.java @@ -49,6 +49,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.stream.Collectors; @@ -131,6 +132,12 @@ private Object writeReplace() { case DATE: builder.set(fieldName).to((Date) value); break; + case UUID: + builder.set(fieldName).to((UUID) value); + break; + case INTERVAL: + builder.set(fieldName).to((Interval) value); + break; case ARRAY: final Type elementType = fieldType.getArrayElementType(); switch (elementType.getCode()) { @@ -184,6 +191,12 @@ private Object writeReplace() { case DATE: builder.set(fieldName).toDateArray((Iterable) value); break; + case UUID: + builder.set(fieldName).toUuidArray((Iterable) value); + break; + case INTERVAL: + builder.set(fieldName).toIntervalArray((Iterable) value); + break; case STRUCT: builder.set(fieldName).toStructArray(elementType, (Iterable) value); break; @@ -210,8 +223,8 @@ private Object writeReplace() { type, rowData, decodeMode, - /* rowDecoded = */ false, - /* colDecoded = */ decodeMode == DecodeMode.LAZY_PER_COL + /* rowDecoded= */ false, + /* colDecoded= */ decodeMode == DecodeMode.LAZY_PER_COL ? new BitSet(type.getStructFields().size()) : null); } @@ -298,6 +311,12 @@ private static Object decodeValue(Type fieldType, com.google.protobuf.Value prot case DATE: checkType(fieldType, proto, KindCase.STRING_VALUE); return Date.parseDate(proto.getStringValue()); + case UUID: + checkType(fieldType, proto, KindCase.STRING_VALUE); + return UUID.fromString(proto.getStringValue()); + case INTERVAL: + checkType(fieldType, proto, KindCase.STRING_VALUE); + return Interval.parseFromString(proto.getStringValue()); case ARRAY: checkType(fieldType, proto, KindCase.LIST_VALUE); ListValue listValue = proto.getListValue(); @@ -347,6 +366,8 @@ static Object decodeArrayValue(Type elementType, ListValue listValue) { case BYTES: case TIMESTAMP: case DATE: + case UUID: + case INTERVAL: case STRUCT: case PROTO: return Lists.transform(listValue.getValuesList(), input -> decodeValue(elementType, input)); @@ -405,12 +426,12 @@ public boolean isNull(int columnIndex) { protected T getProtoMessageInternal(int columnIndex, T message) { Preconditions.checkNotNull( message, - "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter value."); + "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter" + + " value."); ensureDecoded(columnIndex); try { return (T) - message - .toBuilder() + message.toBuilder() .mergeFrom( Base64.getDecoder() .wrap( @@ -503,6 +524,18 @@ protected Date getDateInternal(int columnIndex) { return (Date) rowData.get(columnIndex); } + @Override + protected UUID getUuidInternal(int columnIndex) { + ensureDecoded(columnIndex); + return (UUID) rowData.get(columnIndex); + } + + @Override + protected Interval getIntervalInternal(int columnIndex) { + ensureDecoded(columnIndex); + return (Interval) rowData.get(columnIndex); + } + private boolean isUnrecognizedType(int columnIndex) { return type.getStructFields().get(columnIndex).getType().getCode() == Code.UNRECOGNIZED; } @@ -624,6 +657,10 @@ protected Value getValueInternal(int columnIndex) { return Value.timestamp(isNull ? null : getTimestampInternal(columnIndex)); case DATE: return Value.date(isNull ? null : getDateInternal(columnIndex)); + case UUID: + return Value.uuid(isNull ? null : getUuidInternal(columnIndex)); + case INTERVAL: + return Value.interval(isNull ? null : getIntervalInternal(columnIndex)); case STRUCT: return Value.struct(isNull ? null : getStructInternal(columnIndex)); case UNRECOGNIZED: @@ -664,6 +701,10 @@ protected Value getValueInternal(int columnIndex) { return Value.timestampArray(isNull ? null : getTimestampListInternal(columnIndex)); case DATE: return Value.dateArray(isNull ? null : getDateListInternal(columnIndex)); + case UUID: + return Value.uuidArray(isNull ? null : getUuidListInternal(columnIndex)); + case INTERVAL: + return Value.intervalArray(isNull ? null : getIntervalListInternal(columnIndex)); case STRUCT: return Value.structArray( elementType, isNull ? null : getStructListInternal(columnIndex)); @@ -767,7 +808,8 @@ protected List getProtoMessageListInternal( int columnIndex, T message) { Preconditions.checkNotNull( message, - "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter value."); + "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter" + + " value."); ensureDecoded(columnIndex); List bytesArray = (List) rowData.get(columnIndex); @@ -780,8 +822,7 @@ protected List getProtoMessageListInternal( } else { protoMessagesList.add( (T) - message - .toBuilder() + message.toBuilder() .mergeFrom( Base64.getDecoder() .wrap( @@ -847,6 +888,20 @@ protected List getDateListInternal(int columnIndex) { return Collections.unmodifiableList((List) rowData.get(columnIndex)); } + @Override + @SuppressWarnings("unchecked") // We know ARRAY produces a List. + protected List getUuidListInternal(int columnIndex) { + ensureDecoded(columnIndex); + return Collections.unmodifiableList((List) rowData.get(columnIndex)); + } + + @Override + @SuppressWarnings("unchecked") // We know ARRAY produces a List. + protected List getIntervalListInternal(int columnIndex) { + ensureDecoded(columnIndex); + return Collections.unmodifiableList((List) rowData.get(columnIndex)); + } + @Override @SuppressWarnings("unchecked") // We know ARRAY> produces a List. protected List getStructListInternal(int columnIndex) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcValueIterator.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcValueIterator.java index 24c431eec31..09b850c93f3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcValueIterator.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcValueIterator.java @@ -183,7 +183,13 @@ boolean isWithBeginTransaction() { return stream.isWithBeginTransaction(); } - /** @param a is a mutable list and b will be concatenated into a. */ + boolean isLastStatement() { + return stream.isLastStatement(); + } + + /** + * @param a is a mutable list and b will be concatenated into a. + */ private void concatLists(List a, List b) { if (a.size() == 0 || b.size() == 0) { a.addAll(b); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java index 46780e55ba2..4cceaffa309 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java @@ -53,7 +53,7 @@ protected com.google.iam.v1.Policy toPb(Policy policy) { } private static final PathTemplate PROJECT_NAME_TEMPLATE = - PathTemplate.create("projects/{project}"); + PathTemplate.createWithoutUrlEncoding("projects/{project}"); private final DatabaseAdminClient dbClient; private final String projectId; private final SpannerRpc rpc; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceNotFoundException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceNotFoundException.java index 82c451f9475..dc4192e109f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceNotFoundException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceNotFoundException.java @@ -37,6 +37,7 @@ public class InstanceNotFoundException extends ResourceNotFoundException { @Nullable Throwable cause) { this(token, message, resourceInfo, cause, null); } + /** Private constructor. Use {@link SpannerExceptionFactory} to create instances. */ InstanceNotFoundException( DoNotConstructDirectly token, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Interval.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Interval.java new file mode 100644 index 00000000000..53f2cd04e0d --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Interval.java @@ -0,0 +1,275 @@ +/* + * 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.spanner; + +import com.google.api.client.util.Preconditions; +import com.google.errorprone.annotations.Immutable; +import java.io.Serializable; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Represents the time duration as a combination of months, days and nanoseconds. Nanoseconds are + * broken into two components microseconds and nanoFractions, where nanoFractions can range from + * [-999, 999]. Internally, Spanner supports Interval value with the following range of individual + * fields: months: [-120000, 120000] days: [-3660000, 3660000] nanoseconds: [-316224000000000000000, + * 316224000000000000000]. Interval value created outside the specified domain will return error + * when sent to Spanner backend. + */ +@Immutable +public class Interval implements Serializable { + private final int months; + private final int days; + private final BigInteger nanos; + + private static final long MONTHS_PER_YEAR = 12; + private static final long MINUTES_PER_HOUR = 60; + private static final long SECONDS_PER_MINUTE = 60; + private static final long SECONDS_PER_HOUR = MINUTES_PER_HOUR * SECONDS_PER_MINUTE; + private static final long MILLIS_PER_SECOND = 1000; + private static final long MICROS_PER_MILLI = 1000; + private static final long NANOS_PER_MICRO = 1000; + private static final long MICROS_PER_SECOND = MICROS_PER_MILLI * MILLIS_PER_SECOND; + private static final long MICROS_PER_MINUTE = SECONDS_PER_MINUTE * MICROS_PER_SECOND; + private static final long MICROS_PER_HOUR = SECONDS_PER_HOUR * MICROS_PER_SECOND; + private static final BigInteger NANOS_PER_MILLI = + BigInteger.valueOf(MICROS_PER_MILLI * NANOS_PER_MICRO); + private static final BigInteger NANOS_PER_SECOND = + BigInteger.valueOf(MICROS_PER_SECOND * NANOS_PER_MICRO); + private static final BigInteger NANOS_PER_MINUTE = + BigInteger.valueOf(MICROS_PER_MINUTE * NANOS_PER_MICRO); + private static final BigInteger NANOS_PER_HOUR = + BigInteger.valueOf(MICROS_PER_HOUR * NANOS_PER_MICRO); + private static final Interval ZERO = Interval.builder().build(); + + /** Regex to parse ISO8601 interval format- `P[n]Y[n]M[n]DT[n]H[n]M[n([.,][fraction])]S` */ + private static final Pattern INTERVAL_PATTERN = + Pattern.compile( + "^P(?!$)(-?\\d+Y)?(-?\\d+M)?(-?\\d+D)?(T(?=-?[.,]?\\d)(-?\\d+H)?(-?\\d+M)?(-?((\\d+([.,]\\d{1,9})?)|([.,]\\d{1,9}))S)?)?$"); + + private Interval(int months, int days, BigInteger nanos) { + this.months = months; + this.days = days; + this.nanos = nanos; + } + + /** Returns the months component of the interval. */ + public int getMonths() { + return months; + } + + /** Returns the days component of the interval. */ + public int getDays() { + return days; + } + + /** Returns the nanoseconds component of the interval. */ + public BigInteger getNanos() { + return nanos; + } + + public static Builder builder() { + return new Builder(); + } + + /** Creates an interval with specified number of months. */ + public static Interval ofMonths(int months) { + return builder().setMonths(months).build(); + } + + /** Creates an interval with specified number of days. */ + public static Interval ofDays(int days) { + return builder().setDays(days).build(); + } + + /** Creates an interval with specified number of seconds. */ + public static Interval ofSeconds(long seconds) { + return builder().setNanos(BigInteger.valueOf(seconds).multiply(NANOS_PER_SECOND)).build(); + } + + /** Creates an interval with specified number of milliseconds. */ + public static Interval ofMillis(long millis) { + return builder().setNanos(BigInteger.valueOf(millis).multiply(NANOS_PER_MILLI)).build(); + } + + /** Creates an interval with specified number of microseconds. */ + public static Interval ofMicros(long micros) { + return builder() + .setNanos(BigInteger.valueOf(micros).multiply(BigInteger.valueOf(NANOS_PER_MICRO))) + .build(); + } + + /** Creates an interval with specified number of nanoseconds. */ + public static Interval ofNanos(BigInteger nanos) { + return builder().setNanos(nanos).build(); + } + + /** Creates an interval with specified number of months, days and nanoseconds. */ + public static Interval fromMonthsDaysNanos(int months, int days, BigInteger nanos) { + return builder().setMonths(months).setDays(days).setNanos(nanos).build(); + } + + private static String getNullOrDefault(Matcher matcher, int groupIdx) { + String value = matcher.group(groupIdx); + return value == null ? "0" : value; + } + + /* Parses ISO8601 duration format string to Interval. */ + public static Interval parseFromString(String interval) { + Matcher matcher = INTERVAL_PATTERN.matcher(interval); + if (!matcher.matches()) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, "Invalid Interval String: " + interval); + } + + long years = Long.parseLong(getNullOrDefault(matcher, 1).replace("Y", "")); + long months = Long.parseLong(getNullOrDefault(matcher, 2).replace("M", "")); + long days = Long.parseLong(getNullOrDefault(matcher, 3).replace("D", "")); + long hours = Long.parseLong(getNullOrDefault(matcher, 5).replace("H", "")); + long minutes = Long.parseLong(getNullOrDefault(matcher, 6).replace("M", "")); + BigDecimal seconds = + new BigDecimal(getNullOrDefault(matcher, 7).replace("S", "").replace(",", ".")); + + long totalMonths = Math.addExact(Math.multiplyExact(years, MONTHS_PER_YEAR), months); + BigInteger totalNanos = seconds.movePointRight(9).toBigInteger(); + totalNanos = + totalNanos.add(BigInteger.valueOf(minutes * SECONDS_PER_MINUTE).multiply(NANOS_PER_SECOND)); + totalNanos = + totalNanos.add(BigInteger.valueOf(hours * SECONDS_PER_HOUR).multiply(NANOS_PER_SECOND)); + + return Interval.builder() + .setMonths(Math.toIntExact(totalMonths)) + .setDays(Math.toIntExact(days)) + .setNanos(totalNanos) + .build(); + } + + /** Converts Interval to ISO8601 duration format string. */ + public String toISO8601() { + if (this.equals(ZERO)) { + return "P0Y"; + } + + StringBuilder result = new StringBuilder(); + result.append("P"); + + long monthsPart = this.getMonths(); + long yearsPart = monthsPart / MONTHS_PER_YEAR; + monthsPart = monthsPart - yearsPart * MONTHS_PER_YEAR; + + if (yearsPart != 0) { + result.append(String.format("%dY", yearsPart)); + } + + if (monthsPart != 0) { + result.append(String.format("%dM", monthsPart)); + } + + if (this.getDays() != 0) { + result.append(String.format("%dD", this.getDays())); + } + + BigInteger nanos = this.getNanos(); + BigInteger zero = BigInteger.valueOf(0); + if (nanos.compareTo(zero) != 0) { + result.append("T"); + BigInteger hoursPart = nanos.divide(NANOS_PER_HOUR); + nanos = nanos.subtract(hoursPart.multiply(NANOS_PER_HOUR)); + if (hoursPart.compareTo(zero) != 0) { + result.append(String.format("%sH", hoursPart)); + } + + BigInteger minutesPart = nanos.divide(NANOS_PER_MINUTE); + nanos = nanos.subtract(minutesPart.multiply(NANOS_PER_MINUTE)); + if (minutesPart.compareTo(zero) != 0) { + result.append(String.format("%sM", minutesPart)); + } + + if (!nanos.equals(zero)) { + String secondsSign = ""; + if (nanos.signum() == -1) { + secondsSign = "-"; + nanos = nanos.negate(); + } + + BigInteger seconds_part = nanos.divide(NANOS_PER_SECOND); + nanos = nanos.subtract(seconds_part.multiply(NANOS_PER_SECOND)); + result.append(String.format("%s%s", secondsSign, seconds_part)); + + if (!nanos.equals(zero)) { + result.append(String.format(".%09d", nanos).replaceAll("(0{3})+$", "")); + } + result.append("S"); + } + } + + return result.toString(); + } + + @Override + public String toString() { + return toISO8601(); + } + + @Override + public boolean equals(Object rhs) { + if (!(rhs instanceof Interval)) { + return false; + } + + Interval anotherInterval = (Interval) rhs; + return getMonths() == anotherInterval.getMonths() + && getDays() == anotherInterval.getDays() + && getNanos().equals(anotherInterval.getNanos()); + } + + @Override + public int hashCode() { + int result = 17; + result = 31 * result + Integer.valueOf(getMonths()).hashCode(); + result = 31 * result + Integer.valueOf(getDays()).hashCode(); + result = 31 * result + getNanos().hashCode(); + return result; + } + + public static class Builder { + private int months = 0; + private int days = 0; + private BigInteger nanos = BigInteger.ZERO; + + Builder setMonths(int months) { + this.months = months; + return this; + } + + Builder setDays(int days) { + this.days = days; + return this; + } + + Builder setNanos(BigInteger nanos) { + this.nanos = Preconditions.checkNotNull(nanos); + return this; + } + + public Interval build() { + return new Interval(months, days, nanos); + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/IsRetryableInternalError.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/IsRetryableInternalError.java index d250c0ad6c4..e69e1ec9d78 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/IsRetryableInternalError.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/IsRetryableInternalError.java @@ -18,33 +18,35 @@ import com.google.api.gax.rpc.InternalException; import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableList; import io.grpc.Status; +import io.grpc.Status.Code; import io.grpc.StatusRuntimeException; public class IsRetryableInternalError implements Predicate { + public static final IsRetryableInternalError INSTANCE = new IsRetryableInternalError(); - private static final String HTTP2_ERROR_MESSAGE = "HTTP/2 error code: INTERNAL_ERROR"; - private static final String CONNECTION_CLOSED_ERROR_MESSAGE = - "Connection closed with unknown cause"; - private static final String EOS_ERROR_MESSAGE = - "Received unexpected EOS on DATA frame from server"; + private static final ImmutableList RETRYABLE_ERROR_MESSAGES = + ImmutableList.of( + "HTTP/2 error code: INTERNAL_ERROR", + "Connection closed with unknown cause", + "Received unexpected EOS on DATA frame from server", + "stream terminated by RST_STREAM", + "Authentication backend internal server error. Please retry."); - private static final String RST_STREAM_ERROR_MESSAGE = "stream terminated by RST_STREAM"; + public boolean isRetryableInternalError(Status status) { + return status.getCode() == Code.INTERNAL + && status.getDescription() != null + && isRetryableErrorMessage(status.getDescription()); + } @Override public boolean apply(Throwable cause) { - if (isInternalError(cause)) { - if (cause.getMessage().contains(HTTP2_ERROR_MESSAGE)) { - return true; - } else if (cause.getMessage().contains(CONNECTION_CLOSED_ERROR_MESSAGE)) { - return true; - } else if (cause.getMessage().contains(EOS_ERROR_MESSAGE)) { - return true; - } else if (cause.getMessage().contains(RST_STREAM_ERROR_MESSAGE)) { - return true; - } - } - return false; + return isInternalError(cause) && isRetryableErrorMessage(cause.getMessage()); + } + + private boolean isRetryableErrorMessage(String errorMessage) { + return RETRYABLE_ERROR_MESSAGES.stream().anyMatch(errorMessage::contains); } private boolean isInternalError(Throwable cause) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Key.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Key.java index 3467052605a..83c0db0a3e1 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Key.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Key.java @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.UUID; import javax.annotation.Nullable; /** @@ -70,6 +71,7 @@ private Key(List parts) { *
  • {@link ByteArray} for the {@code BYTES} Cloud Spanner type *
  • {@link Timestamp} for the {@code TIMESTAMP} Cloud Spanner type *
  • {@link Date} for the {@code DATE} Cloud Spanner type + *
  • {@link java.util.UUID} for the {@code UUID} Cloud Spanner type * * * @throws IllegalArgumentException if any member of {@code values} is not a supported type @@ -117,41 +119,49 @@ public Builder append(@Nullable Boolean value) { buffer.add(value); return this; } + /** Appends an {@code INT64} value to the key. */ public Builder append(long value) { buffer.add(value); return this; } + /** Appends an {@code INT64} value to the key. */ public Builder append(@Nullable Long value) { buffer.add(value); return this; } + /** Appends a {@code FLOAT64} value to the key. */ public Builder append(double value) { buffer.add(value); return this; } + /** Appends a {@code FLOAT64} value to the key. */ public Builder append(@Nullable Double value) { buffer.add(value); return this; } + /** Appends a {@code NUMERIC} value to the key. */ public Builder append(@Nullable BigDecimal value) { buffer.add(value); return this; } + /** Appends a {@code ENUM} value to the key. */ public Builder append(@Nullable ProtocolMessageEnum value) { buffer.add(value); return this; } + /** Appends a {@code STRING} value to the key. */ public Builder append(@Nullable String value) { buffer.add(value); return this; } + /** Appends a {@code BYTES} value to the key. */ public Builder append(@Nullable ByteArray value) { buffer.add(value); @@ -170,6 +180,12 @@ public Builder append(@Nullable Date value) { return this; } + /** Appends a {@code UUID} value to the key */ + public Builder append(@Nullable UUID value) { + buffer.add(value); + return this; + } + /** * Appends an object following the same conversion rules as {@link Key#of(Object...)}. When * using the {@code Builder}, most code should prefer using the strongly typed {@code @@ -198,6 +214,8 @@ public Builder appendObject(@Nullable Object value) { append((Timestamp) value); } else if (value instanceof Date) { append((Date) value); + } else if (value instanceof UUID) { + append((UUID) value); } else if (value instanceof ProtocolMessageEnum) { append((ProtocolMessageEnum) value); } else { @@ -308,6 +326,8 @@ ListValue toProto() { builder.addValuesBuilder().setStringValue(part.toString()); } else if (part instanceof Date) { builder.addValuesBuilder().setStringValue(part.toString()); + } else if (part instanceof UUID) { + builder.addValuesBuilder().setStringValue(part.toString()); } else if (part instanceof ProtocolMessageEnum) { builder .addValuesBuilder() diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/LatencyTest.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/LatencyTest.java deleted file mode 100644 index 2ba2f8c5a62..00000000000 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/LatencyTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 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.google.cloud.spanner; - -import com.google.auth.oauth2.GoogleCredentials; -import com.google.cloud.spanner.SpannerOptions.FixedCloseableExecutorProvider; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.time.Duration; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadLocalRandom; - -public class LatencyTest { - - public static void main(String[] args) throws Exception { - ThreadFactory threadFactory = - ThreadFactoryUtil.tryCreateVirtualThreadFactory("spanner-async-worker"); - if (threadFactory == null) { - return; - } - ScheduledExecutorService service = Executors.newScheduledThreadPool(0, threadFactory); - Spanner spanner = - SpannerOptions.newBuilder() - .setCredentials( - GoogleCredentials.fromStream( - Files.newInputStream( - Paths.get("/Users/loite/Downloads/appdev-soda-spanner-staging.json")))) - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setWaitForMinSessionsDuration(Duration.ofSeconds(5L)) - // .setUseMultiplexedSession(true) - .build()) - .setUseVirtualThreads(true) - .setAsyncExecutorProvider(FixedCloseableExecutorProvider.create(service)) - .build() - .getService(); - DatabaseClient client = - spanner.getDatabaseClient( - DatabaseId.of("appdev-soda-spanner-staging", "knut-test-ycsb", "latencytest")); - for (int i = 0; i < 1000000; i++) { - try (AsyncResultSet resultSet = - client - .singleUse() - .executeQueryAsync( - Statement.newBuilder("select col_varchar from latency_test where col_bigint=$1") - .bind("p1") - .to(ThreadLocalRandom.current().nextLong(100000L)) - .build())) { - while (resultSet.next()) { - for (int col = 0; col < resultSet.getColumnCount(); col++) { - if (resultSet.getValue(col) == null) { - throw new IllegalStateException(); - } - } - } - } - } - } -} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java index 84cba59d54f..e634065b91f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java @@ -100,8 +100,10 @@ class MetricRegistryConstants { static final String SPANNER_GFE_LATENCY = "spanner/gfe_latency"; static final String SPANNER_GFE_LATENCY_DESCRIPTION = - "Latency between Google's network receiving an RPC and reading back the first byte of the response"; + "Latency between Google's network receiving an RPC and reading back the first byte of the" + + " response"; static final String SPANNER_GFE_HEADER_MISSING_COUNT = "spanner/gfe_header_missing_count"; static final String SPANNER_GFE_HEADER_MISSING_COUNT_DESCRIPTION = - "Number of RPC responses received without the server-timing header, most likely means that the RPC never reached Google's network"; + "Number of RPC responses received without the server-timing header, most likely means that" + + " the RPC never reached Google's network"; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MissingDefaultSequenceKindException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MissingDefaultSequenceKindException.java new file mode 100644 index 00000000000..d29a9489c3e --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MissingDefaultSequenceKindException.java @@ -0,0 +1,53 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import com.google.api.gax.rpc.ApiException; +import java.util.regex.Pattern; +import javax.annotation.Nullable; + +/** + * Exception thrown by Spanner when a DDL statement failed because no default sequence kind has been + * configured for a database. + */ +public class MissingDefaultSequenceKindException extends SpannerException { + private static final long serialVersionUID = 1L; + + private static final Pattern PATTERN = + Pattern.compile( + ".*Please specify the sequence kind explicitly or set the database option" + + " `default_sequence_kind`\\."); + + /** Private constructor. Use {@link SpannerExceptionFactory} to create instances. */ + MissingDefaultSequenceKindException( + DoNotConstructDirectly token, + ErrorCode errorCode, + String message, + Throwable cause, + @Nullable ApiException apiException) { + super(token, errorCode, /* retryable= */ false, message, cause, apiException); + } + + static boolean isMissingDefaultSequenceKindException(Throwable cause) { + if (cause == null + || cause.getMessage() == null + || !PATTERN.matcher(cause.getMessage()).find()) { + return false; + } + return true; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java index 01f41a2dfdc..1021e1c469d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java @@ -17,11 +17,11 @@ package com.google.cloud.spanner; import static com.google.cloud.spanner.SessionImpl.NO_CHANNEL_HINT; -import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; import com.google.api.core.SettableApiFuture; +import com.google.api.gax.rpc.ServerStream; import com.google.cloud.Timestamp; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; @@ -29,23 +29,21 @@ import com.google.cloud.spanner.SpannerException.ResourceNotFoundException; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.spanner.v1.BeginTransactionRequest; -import com.google.spanner.v1.RequestOptions; -import com.google.spanner.v1.Transaction; +import com.google.spanner.v1.BatchWriteResponse; import java.time.Clock; import java.time.Duration; import java.time.Instant; import java.util.BitSet; +import java.util.EnumSet; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; @@ -55,6 +53,22 @@ * transactions. */ final class MultiplexedSessionDatabaseClient extends AbstractMultiplexedSessionDatabaseClient { + /** + * The maximum number of attempts that the client will try to execute CreateSession for the + * initial multiplexed session. This value is only used for the very first multiplexed session + * that is created, and it is only used if the application has not set a waitForMinSessions value. + * If waitForMinSessions has been set, then the client will retry until the duration in + * waitForMinSessions has been reached. + */ + private static final int MAX_INITIAL_CREATE_SESSION_ATTEMPTS = 10; + + @VisibleForTesting + static final Statement DETERMINE_DIALECT_STATEMENT = + Statement.newBuilder( + "select option_value " + + "from information_schema.database_options " + + "where option_name='database_dialect'") + .build(); /** * Represents a single transaction on a multiplexed session. This can be both a single-use or @@ -98,10 +112,6 @@ void onError(SpannerException spannerException) { // synchronizing, as it does not really matter exactly which error is set. this.client.resourceNotFoundException.set((ResourceNotFoundException) spannerException); } - // Mark multiplexed sessions for RW as unimplemented and fall back to regular sessions if - // UNIMPLEMENTED with error message "Transaction type read_write not supported with - // multiplexed sessions" is returned. - this.client.maybeMarkUnimplementedForRW(spannerException); } @Override @@ -153,6 +163,9 @@ public void close() { */ private static final Map CHANNEL_USAGE = new HashMap<>(); + private static final EnumSet RETRYABLE_ERROR_CODES = + EnumSet.of(ErrorCode.DEADLINE_EXCEEDED, ErrorCode.RESOURCE_EXHAUSTED, ErrorCode.UNAVAILABLE); + private final BitSet channelUsage; private final int numChannels; @@ -174,12 +187,6 @@ public void close() { /** The current multiplexed session that is used by this client. */ private final AtomicReference> multiplexedSessionReference; - /** - * The Transaction response returned by the BeginTransaction request with read-write when a - * multiplexed session is created during client initialization. - */ - private final SettableApiFuture readWriteBeginTransactionReferenceFuture; - /** The expiration date/time of the current multiplexed session. */ private final AtomicReference expirationDate; @@ -200,18 +207,6 @@ public void close() { private final AtomicLong numSessionsReleased = new AtomicLong(); - /** - * This flag is set to true if the server return UNIMPLEMENTED when we try to create a multiplexed - * session. TODO: Remove once this is guaranteed to be available. - */ - private final AtomicBoolean unimplemented = new AtomicBoolean(false); - - /** - * This flag is set to true if the server return UNIMPLEMENTED when a read-write transaction is - * executed on a multiplexed session. TODO: Remove once this is guaranteed to be available. - */ - @VisibleForTesting final AtomicBoolean unimplementedForRW = new AtomicBoolean(false); - MultiplexedSessionDatabaseClient(SessionClient sessionClient) { this(sessionClient, Clock.systemUTC()); } @@ -239,129 +234,111 @@ public void close() { this.tracer = sessionClient.getSpanner().getTracer(); final SettableApiFuture initialSessionReferenceFuture = SettableApiFuture.create(); - this.readWriteBeginTransactionReferenceFuture = SettableApiFuture.create(); this.multiplexedSessionReference = new AtomicReference<>(initialSessionReferenceFuture); + + Duration waitDuration = + sessionClient.getSpanner().getOptions().getSessionPoolOptions().getWaitForMinSessions(); + int initialAttempts = + waitDuration == null || waitDuration.isZero() ? MAX_INITIAL_CREATE_SESSION_ATTEMPTS : 1; + asyncCreateMultiplexedSession(initialSessionReferenceFuture, initialAttempts); + maybeWaitForSessionCreation( + sessionClient.getSpanner().getOptions().getSessionPoolOptions(), + initialSessionReferenceFuture); + } + + private void asyncCreateMultiplexedSession( + SettableApiFuture sessionReferenceFuture, int remainingAttempts) { this.sessionClient.asyncCreateMultiplexedSession( new SessionConsumer() { @Override public void onSessionReady(SessionImpl session) { - initialSessionReferenceFuture.set(session.getSessionReference()); + sessionReferenceFuture.set(session.getSessionReference()); // only start the maintainer if we actually managed to create a session in the first // place. maintainer.start(); - - // initiate a begin transaction request to verify if read-write transactions are - // supported using multiplexed sessions. if (sessionClient .getSpanner() .getOptions() .getSessionPoolOptions() - .getUseMultiplexedSessionForRW()) { - verifyBeginTransactionWithRWOnMultiplexedSessionAsync(session.getName()); + .isAutoDetectDialect()) { + MAINTAINER_SERVICE.submit(() -> getDialect()); } } @Override public void onSessionCreateFailure(Throwable t, int createFailureForSessionCount) { - // Mark multiplexes sessions as unimplemented and fall back to regular sessions if - // UNIMPLEMENTED is returned. - maybeMarkUnimplemented(t); - initialSessionReferenceFuture.setException(t); + SpannerException spannerException = SpannerExceptionFactory.asSpannerException(t); + if (MultiplexedSessionDatabaseClient.this.resourceNotFoundException.get() == null + && (spannerException instanceof DatabaseNotFoundException + || spannerException instanceof InstanceNotFoundException + || spannerException instanceof SessionNotFoundException)) { + // This could in theory set this field more than once, but we don't want to bother + // with synchronizing, as it does not really matter exactly which error is set. + MultiplexedSessionDatabaseClient.this.resourceNotFoundException.set( + (ResourceNotFoundException) spannerException); + } + // Set the exception to trigger an error for all waiters. + // Then retry the session creation if the error is (potentially) transient. + sessionReferenceFuture.setException(t); + if (remainingAttempts > 1 + && RETRYABLE_ERROR_CODES.contains(spannerException.getErrorCode())) { + final SettableApiFuture future = SettableApiFuture.create(); + MultiplexedSessionDatabaseClient.this.multiplexedSessionReference.set(future); + asyncCreateMultiplexedSession(future, remainingAttempts - 1); + } } }); - maybeWaitForSessionCreation( - sessionClient.getSpanner().getOptions().getSessionPoolOptions(), - initialSessionReferenceFuture); } - private static void maybeWaitForSessionCreation( - SessionPoolOptions sessionPoolOptions, ApiFuture future) { + private void maybeWaitForSessionCreation( + SessionPoolOptions sessionPoolOptions, + SettableApiFuture initialSessionReferenceFuture) { Duration waitDuration = sessionPoolOptions.getWaitForMinSessions(); if (waitDuration != null && !waitDuration.isZero()) { - long timeoutMillis = waitDuration.toMillis(); - try { - future.get(timeoutMillis, TimeUnit.MILLISECONDS); - } catch (ExecutionException executionException) { - throw SpannerExceptionFactory.asSpannerException(executionException.getCause()); - } catch (InterruptedException interruptedException) { - throw SpannerExceptionFactory.propagateInterrupt(interruptedException); - } catch (TimeoutException timeoutException) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.DEADLINE_EXCEEDED, - "Timed out after waiting " + timeoutMillis + "ms for multiplexed session creation"); - } - } - } - private void maybeMarkUnimplemented(Throwable t) { - SpannerException spannerException = SpannerExceptionFactory.asSpannerException(t); - if (spannerException.getErrorCode() == ErrorCode.UNIMPLEMENTED) { - unimplemented.set(true); - } - } - - private void maybeMarkUnimplementedForRW(SpannerException spannerException) { - if (spannerException.getErrorCode() == ErrorCode.UNIMPLEMENTED - && verifyErrorMessage( - spannerException, - "Transaction type read_write not supported with multiplexed sessions")) { - unimplementedForRW.set(true); - } - } - - private boolean verifyErrorMessage(SpannerException spannerException, String message) { - if (spannerException.getCause() == null) { - return false; - } - if (spannerException.getCause().getMessage() == null) { - return false; + SpannerException lastException = null; + SettableApiFuture sessionReferenceFuture = initialSessionReferenceFuture; + Duration remainingTime; + + Instant endTime = Instant.now().plus(waitDuration); + while ((remainingTime = Duration.between(Instant.now(), endTime)).toMillis() > 0) { + // If any exception is thrown, then retry the multiplexed session creation + if (sessionReferenceFuture == null) { + sessionReferenceFuture = SettableApiFuture.create(); + asyncCreateMultiplexedSession(sessionReferenceFuture, 1); + this.multiplexedSessionReference.set(sessionReferenceFuture); + } + try { + sessionReferenceFuture.get(remainingTime.toMillis(), TimeUnit.MILLISECONDS); + lastException = null; + break; + } catch (ExecutionException executionException) { + lastException = SpannerExceptionFactory.asSpannerException(executionException.getCause()); + } catch (InterruptedException interruptedException) { + lastException = SpannerExceptionFactory.propagateInterrupt(interruptedException); + } catch (TimeoutException timeoutException) { + lastException = + SpannerExceptionFactory.newSpannerException( + ErrorCode.DEADLINE_EXCEEDED, + "Timed out after waiting " + + waitDuration.toMillis() + + "ms for multiplexed session creation"); + } + // if any exception is thrown, then set the session reference to null to retry the + // multiplexed session creation only if the error code is DEADLINE EXCEEDED, UNAVAILABLE or + // RESOURCE_EXHAUSTED + if (RETRYABLE_ERROR_CODES.contains(lastException.getErrorCode())) { + sessionReferenceFuture = null; + } else { + break; + } + } + // if the wait time elapsed and multiplexed session fetch failed then throw the last exception + // that we have received + if (lastException != null) { + throw lastException; + } } - return spannerException.getCause().getMessage().contains(message); - } - - private void verifyBeginTransactionWithRWOnMultiplexedSessionAsync(String sessionName) { - // TODO: Remove once this is guaranteed to be available. - // annotate the explict BeginTransactionRequest with a transaction tag - // "multiplexed-rw-background-begin-txn" to avoid storing this request on mock spanner. - // this is to safeguard other mock spanner tests whose BeginTransaction request count will - // otherwise increase by 1. Modifying the unit tests do not seem valid since this code is - // temporary and will be removed once the read-write on multiplexed session looks stable at - // backend. - BeginTransactionRequest.Builder requestBuilder = - BeginTransactionRequest.newBuilder() - .setSession(sessionName) - .setOptions( - SessionImpl.createReadWriteTransactionOptions( - Options.fromTransactionOptions(), /* previousTransactionId = */ null)) - .setRequestOptions( - RequestOptions.newBuilder() - .setTransactionTag("multiplexed-rw-background-begin-txn") - .build()); - final BeginTransactionRequest request = requestBuilder.build(); - final ApiFuture requestFuture; - requestFuture = - sessionClient - .getSpanner() - .getRpc() - .beginTransactionAsync(request, /* options = */ null, /* routeToLeader = */ true); - requestFuture.addListener( - () -> { - try { - Transaction txn = requestFuture.get(); - if (txn.getId().isEmpty()) { - throw newSpannerException( - ErrorCode.INTERNAL, "Missing id in transaction\n" + sessionName); - } - readWriteBeginTransactionReferenceFuture.set(txn); - } catch (Exception e) { - SpannerException spannerException = SpannerExceptionFactory.newSpannerException(e); - // Mark multiplexed sessions for RW as unimplemented and fall back to regular sessions - // if UNIMPLEMENTED is returned. - maybeMarkUnimplementedForRW(spannerException); - readWriteBeginTransactionReferenceFuture.setException(e); - } - }, - MoreExecutors.directExecutor()); } boolean isValid() { @@ -376,14 +353,6 @@ AtomicLong getNumSessionsReleased() { return this.numSessionsReleased; } - boolean isMultiplexedSessionsSupported() { - return !this.unimplemented.get(); - } - - boolean isMultiplexedSessionsForRWSupported() { - return !this.unimplementedForRW.get(); - } - void close() { synchronized (this) { if (!this.isClosed) { @@ -409,17 +378,6 @@ SessionReference getCurrentSessionReference() { } } - @VisibleForTesting - Transaction getReadWriteBeginTransactionReference() { - try { - return this.readWriteBeginTransactionReferenceFuture.get(); - } catch (ExecutionException executionException) { - throw SpannerExceptionFactory.asSpannerException(executionException.getCause()); - } catch (InterruptedException interruptedException) { - throw SpannerExceptionFactory.propagateInterrupt(interruptedException); - } - } - /** * Returns true if the multiplexed session has been created. This client can be used before the * session has been created, and will in that case use a delayed transaction that contains a @@ -468,7 +426,7 @@ private int getSingleUseChannelHint() { } synchronized (this.channelUsage) { // Get the first unused channel. - int channel = this.channelUsage.nextClearBit(/* fromIndex = */ 0); + int channel = this.channelUsage.nextClearBit(/* fromIndex= */ 0); // BitSet returns an index larger than its original size if all the bits are set. // This then means that all channels have already been assigned to single-use transactions, // and that we should not use a specific channel, but rather pick a random one. @@ -480,83 +438,127 @@ private int getSingleUseChannelHint() { } } + private final AbstractLazyInitializer dialectSupplier = + new AbstractLazyInitializer() { + @Override + protected Dialect initialize() { + try (ResultSet dialectResultSet = singleUse().executeQuery(DETERMINE_DIALECT_STATEMENT)) { + if (dialectResultSet.next()) { + return Dialect.fromName(dialectResultSet.getString(0)); + } + } + // This should not really happen, but it is the safest fallback value. + return Dialect.GOOGLE_STANDARD_SQL; + } + }; + + @Override + public Dialect getDialect() { + try { + return dialectSupplier.get(); + } catch (Exception exception) { + throw SpannerExceptionFactory.asSpannerException(exception); + } + } + + Future getDialectAsync() { + try { + return MAINTAINER_SERVICE.submit(dialectSupplier::get); + } catch (Exception exception) { + throw SpannerExceptionFactory.asSpannerException(exception); + } + } + + @Override + public String getDatabaseRole() { + return this.sessionClient.getSpanner().getOptions().getDatabaseRole(); + } + @Override public Timestamp write(Iterable mutations) throws SpannerException { - return createMultiplexedSessionTransaction(/* singleUse = */ false).write(mutations); + return createMultiplexedSessionTransaction(/* singleUse= */ false).write(mutations); } @Override public CommitResponse writeWithOptions( final Iterable mutations, final TransactionOption... options) throws SpannerException { - return createMultiplexedSessionTransaction(/* singleUse = */ false) + return createMultiplexedSessionTransaction(/* singleUse= */ false) .writeWithOptions(mutations, options); } @Override public CommitResponse writeAtLeastOnceWithOptions( Iterable mutations, TransactionOption... options) throws SpannerException { - return createMultiplexedSessionTransaction(/* singleUse = */ true) + return createMultiplexedSessionTransaction(/* singleUse= */ true) .writeAtLeastOnceWithOptions(mutations, options); } + @Override + public ServerStream batchWriteAtLeastOnce( + Iterable mutationGroups, TransactionOption... options) + throws SpannerException { + return createMultiplexedSessionTransaction(/* singleUse= */ true) + .batchWriteAtLeastOnce(mutationGroups, options); + } + @Override public ReadContext singleUse() { - return createMultiplexedSessionTransaction(/* singleUse = */ true).singleUse(); + return createMultiplexedSessionTransaction(/* singleUse= */ true).singleUse(); } @Override public ReadContext singleUse(TimestampBound bound) { - return createMultiplexedSessionTransaction(/* singleUse = */ true).singleUse(bound); + return createMultiplexedSessionTransaction(/* singleUse= */ true).singleUse(bound); } @Override public ReadOnlyTransaction singleUseReadOnlyTransaction() { - return createMultiplexedSessionTransaction(/* singleUse = */ true) + return createMultiplexedSessionTransaction(/* singleUse= */ true) .singleUseReadOnlyTransaction(); } @Override public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { - return createMultiplexedSessionTransaction(/* singleUse = */ true) + return createMultiplexedSessionTransaction(/* singleUse= */ true) .singleUseReadOnlyTransaction(bound); } @Override public ReadOnlyTransaction readOnlyTransaction() { - return createMultiplexedSessionTransaction(/* singleUse = */ false).readOnlyTransaction(); + return createMultiplexedSessionTransaction(/* singleUse= */ false).readOnlyTransaction(); } @Override public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { - return createMultiplexedSessionTransaction(/* singleUse = */ false).readOnlyTransaction(bound); + return createMultiplexedSessionTransaction(/* singleUse= */ false).readOnlyTransaction(bound); } @Override public TransactionRunner readWriteTransaction(TransactionOption... options) { - return createMultiplexedSessionTransaction(/* singleUse = */ false) + return createMultiplexedSessionTransaction(/* singleUse= */ false) .readWriteTransaction(options); } @Override public TransactionManager transactionManager(TransactionOption... options) { - return createMultiplexedSessionTransaction(/* singleUse = */ false).transactionManager(options); + return createMultiplexedSessionTransaction(/* singleUse= */ false).transactionManager(options); } @Override public AsyncRunner runAsync(TransactionOption... options) { - return createMultiplexedSessionTransaction(/* singleUse = */ false).runAsync(options); + return createMultiplexedSessionTransaction(/* singleUse= */ false).runAsync(options); } @Override public AsyncTransactionManager transactionManagerAsync(TransactionOption... options) { - return createMultiplexedSessionTransaction(/* singleUse = */ false) + return createMultiplexedSessionTransaction(/* singleUse= */ false) .transactionManagerAsync(options); } @Override public long executePartitionedUpdate(Statement stmt, UpdateOption... options) { - return createMultiplexedSessionTransaction(/* singleUse = */ true) + return createMultiplexedSessionTransaction(/* singleUse= */ false) .executePartitionedUpdate(stmt, options); } @@ -569,9 +571,9 @@ public long executePartitionedUpdate(Statement stmt, UpdateOption... options) { */ private static final ScheduledExecutorService MAINTAINER_SERVICE = Executors.newScheduledThreadPool( - /* corePoolSize = */ 1, + /* corePoolSize= */ 1, ThreadFactoryUtil.createVirtualOrPlatformDaemonThreadFactory( - "multiplexed-session-maintainer", /* tryVirtual = */ false)); + "multiplexed-session-maintainer", /* tryVirtual= */ false)); final class MultiplexedSessionMaintainer { private final Clock clock; @@ -582,7 +584,7 @@ final class MultiplexedSessionMaintainer { this.clock = clock; } - void start() { + private synchronized void start() { // Schedule the maintainer to run once every ten minutes (by default). long loopFrequencyMillis = MultiplexedSessionDatabaseClient.this @@ -597,7 +599,7 @@ void start() { this::maintain, loopFrequencyMillis, loopFrequencyMillis, TimeUnit.MILLISECONDS); } - void stop() { + private synchronized void stop() { if (this.scheduledFuture != null) { this.scheduledFuture.cancel(false); } @@ -622,9 +624,6 @@ public void onSessionCreateFailure(Throwable t, int createFailureForSessionCount // ignore any errors during re-creation of the multiplexed session. This means that // we continue to use the session that has passed its expiration date for now, and // that a new attempt at creating a new session will be done in 10 minutes from now. - // The only exception to this rule is if the server returns UNIMPLEMENTED. In that - // case we invalidate the client and fall back to regular sessions. - maybeMarkUnimplemented(t); } }); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutableCredentials.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutableCredentials.java new file mode 100644 index 00000000000..9d09b9fe268 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutableCredentials.java @@ -0,0 +1,119 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.cloud.spanner; + +import com.google.auth.CredentialTypeForMetrics; +import com.google.auth.Credentials; +import com.google.auth.RequestMetadataCallback; +import com.google.auth.oauth2.ServiceAccountCredentials; +import java.io.IOException; +import java.net.URI; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.Executor; +import javax.annotation.Nonnull; + +/** + * A mutable {@link Credentials} implementation that delegates authentication behavior to a scoped + * {@link ServiceAccountCredentials} instance. + * + *

    This class is intended for scenarios where an application needs to replace the underlying + * service account credentials for a long-running Spanner Client. + * + *

    All operations inherited from {@link Credentials} are forwarded to the current delegate, + * including request metadata retrieval and token refresh. Calling {@link + * #updateCredentials(ServiceAccountCredentials)} replaces the delegate with a newly scoped + * credentials instance created from the same scopes that were provided when this object was + * constructed. + */ +public class MutableCredentials extends Credentials { + private volatile ServiceAccountCredentials delegate; + private final Set scopes; + + /** Creates a MutableCredentials instance with default spanner scopes. */ + public MutableCredentials(ServiceAccountCredentials credentials) { + this(credentials, SpannerOptions.SCOPES); + } + + public MutableCredentials( + @Nonnull ServiceAccountCredentials credentials, @Nonnull Set scopes) { + Objects.requireNonNull(credentials, "credentials must not be null"); + Objects.requireNonNull(scopes, "scopes must not be null"); + if (scopes.isEmpty()) { + throw new IllegalArgumentException("Scopes must not be empty"); + } + this.scopes = new java.util.HashSet<>(scopes); + delegate = (ServiceAccountCredentials) credentials.createScoped(this.scopes); + } + + /** + * Replaces the current delegate with a newly scoped credentials instance. + * + *

    Note any in-flight RPC may continue to use the old credentials. + * + *

    The provided {@link ServiceAccountCredentials} is scoped using the same scopes that were + * supplied when this {@link MutableCredentials} instance was created. + * + * @param credentials the new base service account credentials to scope and use for client + * authorization. + */ + public void updateCredentials(@Nonnull ServiceAccountCredentials credentials) { + Objects.requireNonNull(credentials, "credentials must not be null"); + delegate = (ServiceAccountCredentials) credentials.createScoped(scopes); + } + + @Override + public String getAuthenticationType() { + return delegate.getAuthenticationType(); + } + + @Override + public Map> getRequestMetadata(URI uri) throws IOException { + return delegate.getRequestMetadata(uri); + } + + @Override + public boolean hasRequestMetadata() { + return delegate.hasRequestMetadata(); + } + + @Override + public boolean hasRequestMetadataOnly() { + return delegate.hasRequestMetadataOnly(); + } + + @Override + public void refresh() throws IOException { + delegate.refresh(); + } + + @Override + public void getRequestMetadata(URI uri, Executor executor, RequestMetadataCallback callback) { + delegate.getRequestMetadata(uri, executor, callback); + } + + @Override + public String getUniverseDomain() throws IOException { + return delegate.getUniverseDomain(); + } + + @Override + public CredentialTypeForMetrics getMetricsCredentialType() { + return delegate.getMetricsCredentialType(); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Mutation.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Mutation.java index c5a09bc3eea..0545221804c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Mutation.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Mutation.java @@ -21,7 +21,9 @@ import com.google.common.collect.ImmutableList; import com.google.protobuf.ListValue; +import com.google.protobuf.Timestamp; import java.io.Serializable; +import java.time.Instant; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -87,6 +89,12 @@ public enum Op { /** Deletes rows from a table. Succeeds whether or not the named rows were present. */ DELETE, + + /** Send a message to a queue, optionally with specified delivery time. */ + SEND, + + /** Acknowledge a message in a queue. Ack only succeeds if the message still exists. */ + ACK, } private final String table; @@ -94,6 +102,12 @@ public enum Op { private final ImmutableList columns; private final ImmutableList values; private final KeySet keySet; + // Queue related fields + private final String queue; + private final Key key; + private final Value payload; + private final Instant deliveryTime; + private final boolean ignoreNotFound; private Mutation( String table, @@ -101,11 +115,30 @@ private Mutation( @Nullable ImmutableList columns, @Nullable ImmutableList values, @Nullable KeySet keySet) { + this(table, operation, columns, values, keySet, null, null, null, null, false); + } + + private Mutation( + @Nullable String table, + Op operation, + @Nullable ImmutableList columns, + @Nullable ImmutableList values, + @Nullable KeySet keySet, + @Nullable String queue, + @Nullable Key key, + @Nullable Value payload, + @Nullable Instant deliveryTime, + boolean ignoreNotFound) { this.table = table; this.operation = operation; this.columns = columns; this.values = values; this.keySet = keySet; + this.queue = queue; + this.key = key; + this.payload = payload; + this.deliveryTime = deliveryTime; + this.ignoreNotFound = ignoreNotFound; } /** @@ -153,6 +186,22 @@ public static Mutation delete(String table, KeySet keySet) { return new Mutation(table, Op.DELETE, null, null, checkNotNull(keySet)); } + /** + * Returns a builder that can be used to construct an {@link Op#SEND} mutation against {@code + * queue}; see the {@code SEND} documentation for mutation semantics. + */ + public static SendBuilder newSendBuilder(String queue) { + return new SendBuilder(queue); + } + + /** + * Returns a builder that can be used to construct an {@link Op#ACK} mutation against {@code + * queue}; see the {@code ACK} documentation for mutation semantics. + */ + public static AckBuilder newAckBuilder(String queue) { + return new AckBuilder(queue); + } + /** * Builder for {@link Op#INSERT}, {@link Op#INSERT_OR_UPDATE}, {@link Op#UPDATE}, and {@link * Op#REPLACE} mutations. @@ -227,6 +276,66 @@ private void checkDuplicateColumns(ImmutableList columnNames) { } } + /** Builder for {@link Op#SEND} mutation. */ + public static class SendBuilder { + private final String queue; + private Key key; + private Value payload; + private Instant deliveryTime; + + private SendBuilder(String queue) { + this.queue = checkNotNull(queue); + } + + public SendBuilder setKey(Key key) { + this.key = checkNotNull(key); + return this; + } + + public SendBuilder setPayload(Value payload) { + this.payload = checkNotNull(payload); + return this; + } + + public SendBuilder setDeliveryTime(Instant deliveryTime) { + this.deliveryTime = deliveryTime; + return this; + } + + public Mutation build() { + checkState(key != null, "Key must be set for Send mutation"); + checkState(payload != null, "Payload must be set for Send mutation"); + return new Mutation( + null, Op.SEND, null, null, null, queue, key, payload, deliveryTime, false); + } + } + + /** Builder for {@link Op#ACK} mutation. */ + public static class AckBuilder { + private final String queue; + private Key key; + private boolean ignoreNotFound = false; + + private AckBuilder(String queue) { + this.queue = checkNotNull(queue); + } + + public AckBuilder setKey(Key key) { + this.key = checkNotNull(key); + return this; + } + + public AckBuilder setIgnoreNotFound(boolean ignoreNotFound) { + this.ignoreNotFound = ignoreNotFound; + return this; + } + + public Mutation build() { + checkState(key != null, "Key must be set for Ack mutation"); + return new Mutation(null, Op.ACK, null, null, null, queue, key, null, null, ignoreNotFound); + } + } + /** Returns the name of the table that this mutation will affect. */ public String getTable() { return table; @@ -248,27 +357,72 @@ public Iterable getColumns() { } /** - * For all types except {@link Op#DELETE}, returns the values that this mutation will write. The - * number of elements returned is always the same as the number returned by {@link #getColumns()}, - * and the {@code i}th value corresponds to the {@code i}th column. + * For all types except {@link Op#DELETE}, {@link Op#SEND}, and {@link Op#ACK}, returns the values + * that this mutation will write. The number of elements returned is always the same as the number + * returned by {@link #getColumns()}, and the {@code i}th value corresponds to the {@code i}th + * column. * - * @throws IllegalStateException if {@code operation() == Op.DELETE} + * @throws IllegalStateException if {@code operation() == Op.DELETE or operation() == Op.SEND or + * operation() == Op.ACK} */ public Iterable getValues() { - checkState(operation != Op.DELETE, "values() cannot be called for a DELETE mutation"); + checkState( + operation != Op.DELETE && operation != Op.SEND && operation != Op.ACK, + "values() cannot be called for a DELETE/SEND/ACK mutation"); return values; } + /** Returns the name of the queue that this mutation will affect. */ + public String getQueue() { + checkState( + operation == Op.SEND || operation == Op.ACK, + "getQueue() can only be called " + "for SEND or ACK mutations"); + return queue; + } + + /** Returns the key of the message to the queue that this mutation will affect. */ + public Key getKey() { + checkState( + operation == Op.SEND || operation == Op.ACK, + "getKey() can only be called for " + "SEND or ACK mutations"); + return key; + } + + /** Returns the payload of the message to the queue that this mutation will affect. */ + public Value getPayload() { + checkState(operation == Op.SEND, "getPayload() can only be called for a SEND mutation"); + return payload; + } + + /** Returns the delivery timestamp of the message to the queue that this mutation will affect. */ + @Nullable + public Instant getDeliveryTime() { + checkState(operation == Op.SEND, "getDeliverTime() can only be called for a SEND mutation"); + return deliveryTime; + } + + /** + * Returns whether an error will be ignored for an ACK mutation that affects a message that does + * not exist + */ + public boolean getIgnoreNotFound() { + checkState(operation == Op.ACK, "getIgnoreNotFound() can only be called for an ACK mutation"); + return ignoreNotFound; + } + /** - * For all types except {@link Op#DELETE}, constructs a map from column name to value. This is - * mainly intended as a convenience for testing; direct access via {@link #getColumns()} and - * {@link #getValues()} is more efficient. + * For all types except {@link Op#DELETE}, {@link Op#SEND}, and {@link Op#ACK}, constructs a map + * from column name to value. This is mainly intended as a convenience for testing; direct access + * via {@link #getColumns()} and {@link #getValues()} is more efficient. * - * @throws IllegalStateException if {@code operation() == Op.DELETE}, or if any duplicate columns - * are present. Detection of duplicates does not consider case. + * @throws IllegalStateException if {@code operation() == Op.DELETE or operation() == Op.SEND or + * operation() == Op.ACK}, or if any duplicate columns are present. Detection of duplicates + * does not consider case. */ public Map asMap() { - checkState(operation != Op.DELETE, "asMap() cannot be called for a DELETE mutation"); + checkState( + operation != Op.DELETE && operation != Op.SEND && operation != Op.ACK, + "asMap() cannot be called for a DELETE/SEND/ACK mutation"); LinkedHashMap map = new LinkedHashMap<>(); for (int i = 0; i < columns.size(); ++i) { Value existing = map.put(columns.get(i), values.get(i)); @@ -310,6 +464,25 @@ void toString(StringBuilder b) { opName = "delete"; isWrite = false; break; + case SEND: + // return directly for SEND + b.append("send(").append(queue).append('{'); + b.append("key=").append(key); + b.append(", payload=").append(payload); + if (deliveryTime != null) { + b.append(", deliveryTime=").append(deliveryTime); + } + b.append("})"); + return; + case ACK: + // return directly for ACK + b.append("ack(").append(queue).append('{'); + b.append("key=").append(key); + if (ignoreNotFound) { + b.append(", ignoreNotFound=true"); + } + b.append("})"); + return; default: throw new AssertionError("Unhandled Op: " + operation); } @@ -348,8 +521,24 @@ public boolean equals(Object o) { } Mutation that = (Mutation) o; - return operation == that.operation - && Objects.equals(table, that.table) + if (operation != that.operation) { + return false; + } + + if (operation == Op.SEND) { + return Objects.equals(queue, that.queue) + && Objects.equals(key, that.key) + && Objects.equals(payload, that.payload) + && Objects.equals(deliveryTime, that.deliveryTime); + } + + if (operation == Op.ACK) { + return Objects.equals(queue, that.queue) + && Objects.equals(key, that.key) + && Objects.equals(ignoreNotFound, that.ignoreNotFound); + } + + return Objects.equals(table, that.table) && Objects.equals(columns, that.columns) && areValuesEqual(values, that.values) && Objects.equals(keySet, that.keySet); @@ -357,7 +546,8 @@ && areValuesEqual(values, that.values) @Override public int hashCode() { - return Objects.hash(operation, table, columns, values, keySet); + return Objects.hash( + operation, table, columns, values, keySet, key, payload, deliveryTime, ignoreNotFound); } /** @@ -435,16 +625,8 @@ static com.google.spanner.v1.Mutation toProtoAndReturnRandomMutation( if (last != null && last.operation == Op.DELETE && mutation.table.equals(last.table)) { mutation.keySet.appendToProto(keySet); } else { - if (proto != null) { - com.google.spanner.v1.Mutation builtMutation = proto.build(); - out.add(builtMutation); - // Skip tracking the largest insert mutation if there are mutations other than INSERT. - if (allMutationsExcludingInsert.isEmpty() - && checkIfInsertMutationWithLargeValue(builtMutation, largestInsertMutation)) { - largestInsertMutation = builtMutation; - } - maybeAddMutationToListExcludingInserts(builtMutation, allMutationsExcludingInsert); - } + largestInsertMutation = + flushMutation(out, proto, allMutationsExcludingInsert, largestInsertMutation); proto = com.google.spanner.v1.Mutation.newBuilder(); com.google.spanner.v1.Mutation.Delete.Builder delete = proto.getDeleteBuilder().setTable(mutation.table); @@ -452,6 +634,33 @@ && checkIfInsertMutationWithLargeValue(builtMutation, largestInsertMutation)) { mutation.keySet.appendToProto(keySet); } write = null; + } else if (mutation.operation == Op.SEND) { + largestInsertMutation = + flushMutation(out, proto, allMutationsExcludingInsert, largestInsertMutation); + proto = com.google.spanner.v1.Mutation.newBuilder(); + com.google.spanner.v1.Mutation.Send.Builder send = + proto + .getSendBuilder() + .setQueue(mutation.queue) + .setKey(mutation.key.toProto()) + .setPayload(mutation.payload.toProto()); + if (mutation.getDeliveryTime() != null) { + Instant deliveryTime = mutation.getDeliveryTime(); + Timestamp.Builder timeBuilder = + send.getDeliverTimeBuilder() + .setSeconds(deliveryTime.getEpochSecond()) + .setNanos(deliveryTime.getNano()); + send.setDeliverTime(timeBuilder); + } + } else if (mutation.operation == Op.ACK) { + largestInsertMutation = + flushMutation(out, proto, allMutationsExcludingInsert, largestInsertMutation); + proto = com.google.spanner.v1.Mutation.newBuilder(); + proto + .getAckBuilder() + .setQueue(mutation.queue) + .setKey(mutation.getKey().toProto()) + .setIgnoreNotFound(mutation.ignoreNotFound); } else { ListValue.Builder values = ListValue.newBuilder(); for (Value value : mutation.getValues()) { @@ -464,16 +673,8 @@ && checkIfInsertMutationWithLargeValue(builtMutation, largestInsertMutation)) { // Same as previous mutation: coalesce values to reduce request size. write.addValues(values); } else { - if (proto != null) { - com.google.spanner.v1.Mutation builtMutation = proto.build(); - out.add(builtMutation); - // Skip tracking the largest insert mutation if there are mutations other than INSERT. - if (allMutationsExcludingInsert.isEmpty() - && checkIfInsertMutationWithLargeValue(builtMutation, largestInsertMutation)) { - largestInsertMutation = builtMutation; - } - maybeAddMutationToListExcludingInserts(builtMutation, allMutationsExcludingInsert); - } + largestInsertMutation = + flushMutation(out, proto, allMutationsExcludingInsert, largestInsertMutation); proto = com.google.spanner.v1.Mutation.newBuilder(); switch (mutation.operation) { case INSERT: @@ -498,9 +699,26 @@ && checkIfInsertMutationWithLargeValue(builtMutation, largestInsertMutation)) { last = mutation; } // Flush last item. + largestInsertMutation = + flushMutation(out, proto, allMutationsExcludingInsert, largestInsertMutation); + + // Select a random mutation based on the heuristic. + if (!allMutationsExcludingInsert.isEmpty()) { + return allMutationsExcludingInsert.get( + ThreadLocalRandom.current().nextInt(allMutationsExcludingInsert.size())); + } else { + return largestInsertMutation; + } + } + + private static com.google.spanner.v1.Mutation flushMutation( + List out, + com.google.spanner.v1.Mutation.Builder proto, + List allMutationsExcludingInsert, + com.google.spanner.v1.Mutation largestInsertMutation) { if (proto != null) { com.google.spanner.v1.Mutation builtMutation = proto.build(); - out.add(proto.build()); + out.add(builtMutation); // Skip tracking the largest insert mutation if there are mutations other than INSERT. if (allMutationsExcludingInsert.isEmpty() && checkIfInsertMutationWithLargeValue(builtMutation, largestInsertMutation)) { @@ -508,14 +726,7 @@ && checkIfInsertMutationWithLargeValue(builtMutation, largestInsertMutation)) { } maybeAddMutationToListExcludingInserts(builtMutation, allMutationsExcludingInsert); } - - // Select a random mutation based on the heuristic. - if (!allMutationsExcludingInsert.isEmpty()) { - return allMutationsExcludingInsert.get( - ThreadLocalRandom.current().nextInt(allMutationsExcludingInsert.size())); - } else { - return largestInsertMutation; - } + return largestInsertMutation; } // Returns true if the input mutation is of type INSERT and has more values than the current diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java index 66b1165f4a9..8cfbcedc175 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java @@ -89,7 +89,7 @@ private static Operation failed( SpannerRpc rpc, String name, Status status, M metadata, Parser parser, ApiClock clock) { SpannerException e = SpannerExceptionFactory.newSpannerException( - ErrorCode.fromRpcStatus(status), status.getMessage(), null); + ErrorCode.fromRpcStatus(status), status.getMessage(), (Throwable) (null)); return new Operation<>(rpc, name, metadata, null, e, true, parser, clock); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java index 9c3257586fb..116e1aa4fc5 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java @@ -18,8 +18,12 @@ import com.google.common.base.Preconditions; import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.ReadRequest.LockHint; import com.google.spanner.v1.ReadRequest.OrderBy; +import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.RequestOptions.Priority; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.io.Serializable; import java.time.Duration; import java.util.Objects; @@ -75,6 +79,25 @@ public static RpcOrderBy fromProto(OrderBy proto) { } } + public enum RpcLockHint { + UNSPECIFIED(LockHint.LOCK_HINT_UNSPECIFIED), + SHARED(LockHint.LOCK_HINT_SHARED), + EXCLUSIVE(LockHint.LOCK_HINT_EXCLUSIVE); + + private final LockHint proto; + + RpcLockHint(LockHint proto) { + this.proto = Preconditions.checkNotNull(proto); + } + + public static RpcLockHint fromProto(LockHint proto) { + for (RpcLockHint e : RpcLockHint.values()) { + if (e.proto.equals(proto)) return e; + } + return RpcLockHint.UNSPECIFIED; + } + } + /** Marker interface to mark options applicable to both Read and Query operations */ public interface ReadAndQueryOption extends ReadOption, QueryOption {} @@ -88,6 +111,9 @@ public interface ReadQueryUpdateTransactionOption /** Marker interface to mark options applicable to Update and Write operations */ public interface UpdateTransactionOption extends UpdateOption, TransactionOption {} + /** Marker interface for options that can be used with both executeQuery and executeUpdate. */ + public interface QueryUpdateOption extends QueryOption, UpdateOption {} + /** * Marker interface to mark options applicable to Create, Update and Delete operations in admin * API. @@ -131,9 +157,57 @@ public static TransactionOption commitStats() { * process in the commit phase (when any needed locks are acquired). The validation process * succeeds only if there are no conflicting committed transactions (that committed mutations to * the read data at a commit timestamp after the read timestamp). + * + * @deprecated Use {@link Options#readLockMode(ReadLockMode)} instead. */ + @Deprecated public static TransactionOption optimisticLock() { - return OPTIMISTIC_LOCK_OPTION; + return Options.readLockMode(ReadLockMode.OPTIMISTIC); + } + + /** + * Returns a {@link TransactionOption} to set the desired {@link ReadLockMode} for a read-write + * transaction. + * + *

    This option controls the locking behavior for read operations and queries within a + * read-write transaction. It works in conjunction with the transaction's {@link IsolationLevel}. + * + *

      + *
    • {@link ReadLockMode#PESSIMISTIC}: Read locks are acquired immediately on read. This mode + * only applies to {@code SERIALIZABLE} isolation. This mode prevents concurrent + * modifications by locking data throughout the transaction. This reduces commit-time aborts + * due to conflicts but can increase how long transactions wait for locks and the overall + * contention. + *
    • {@link ReadLockMode#OPTIMISTIC}: Locks for reads within the transaction are not acquired + * on read. Instead the locks are acquired on commit to validate that read/queried data has + * not changed since the transaction started. If a conflict is detected, the transaction + * will fail. This mode only applies to {@code SERIALIZABLE} isolation. This mode defers + * locking until commit, which can reduce contention and improve throughput. However, be + * aware that this increases the risk of transaction aborts if there's significant write + * competition on the same data. + *
    • {@link ReadLockMode#READ_LOCK_MODE_UNSPECIFIED}: This is the default if no mode is set. + * The locking behavior depends on the isolation level: + *
        + *
      • For {@code REPEATABLE_READ} isolation: Locking semantics default to {@code + * OPTIMISTIC}. However, validation checks at commit are only performed for queries + * using {@code SELECT FOR UPDATE}, statements with {@code LOCK_SCANNED_RANGES} hints, + * and DML statements.
        + * Note: It is an error to explicitly set {@code ReadLockMode} when the isolation + * level is {@code REPEATABLE_READ}. + *
      • For all other isolation levels: If the read lock mode is not set, it defaults to + * {@code PESSIMISTIC} locking. + *
      + *
    + */ + public static TransactionOption readLockMode(ReadLockMode readLockMode) { + return new ReadLockModeOption(readLockMode); + } + + /** + * Specifying this instructs the transaction to request {@link IsolationLevel} from the backend. + */ + public static TransactionOption isolationLevel(IsolationLevel isolationLevel) { + return new IsolationLevelOption(isolationLevel); } /** @@ -146,6 +220,10 @@ public static UpdateTransactionOption excludeTxnFromChangeStreams() { return EXCLUDE_TXN_FROM_CHANGE_STREAMS_OPTION; } + public static RequestIdOption requestId(XGoogSpannerRequestId reqId) { + return new RequestIdOption(reqId); + } + /** * Specifying this will cause the read to yield at most this many rows. This should be greater * than 0. @@ -160,6 +238,10 @@ public static ReadOption orderBy(RpcOrderBy orderBy) { return new OrderByOption(orderBy); } + public static ReadOption lockHint(RpcLockHint orderBy) { + return new LockHintOption(orderBy); + } + /** * Specifying this will allow the client to prefetch up to {@code prefetchChunks} {@code * PartialResultSet} chunks for read and query. The data size of each chunk depends on the server @@ -184,6 +266,37 @@ public static ReadQueryUpdateTransactionOption priority(RpcPriority priority) { return new PriorityOption(priority); } + /** + * Specifying this will add the given client context to the request. The client context is used to + * pass side-channel or configuration information to the backend, such as a user ID for a + * parameterized secure view. + */ + public static ReadQueryUpdateTransactionOption clientContext( + RequestOptions.ClientContext clientContext) { + return new ClientContextOption(clientContext); + } + + RequestOptions toRequestOptionsProto(boolean isTransactionOption) { + if (!hasPriority() && !hasTag() && !hasClientContext()) { + return RequestOptions.getDefaultInstance(); + } + RequestOptions.Builder builder = RequestOptions.newBuilder(); + if (hasPriority()) { + builder.setPriority(priority()); + } + if (hasTag()) { + if (isTransactionOption) { + builder.setTransactionTag(tag()); + } else { + builder.setRequestTag(tag()); + } + } + if (hasClientContext()) { + builder.setClientContext(clientContext()); + } + return builder.build(); + } + public static TransactionOption maxCommitDelay(Duration maxCommitDelay) { Preconditions.checkArgument(!maxCommitDelay.isNegative(), "maxCommitDelay should be positive"); return new MaxCommitDelayOption(maxCommitDelay); @@ -212,6 +325,20 @@ public static DataBoostQueryOption dataBoostEnabled(Boolean dataBoostEnabled) { return new DataBoostQueryOption(dataBoostEnabled); } + /** + * If set to true, this option marks the end of the transaction. The transaction should be + * committed or aborted after this statement executes, and attempts to execute any other requests + * against this transaction (including reads and queries) will be rejected. Mixing mutations with + * statements that are marked as the last statement is not allowed. + * + *

    For DML statements, setting this option may cause some error reporting to be deferred until + * commit time (e.g. validation of unique constraints). Given this, successful execution of a DML + * statement should not be assumed until the transaction commits. + */ + public static QueryUpdateOption lastStatement() { + return new LastStatementUpdateOption(); + } + /** * Specifying this will cause the list operation to start fetching the record from this onwards. */ @@ -314,16 +441,6 @@ void appendToOptions(Options options) { } } - /** Option to request Optimistic Concurrency Control for read/write transactions. */ - static final class OptimisticLockOption extends InternalOption implements TransactionOption { - @Override - void appendToOptions(Options options) { - options.withOptimisticLock = true; - } - } - - static final OptimisticLockOption OPTIMISTIC_LOCK_OPTION = new OptimisticLockOption(); - /** Option to request the transaction to be excluded from change streams. */ static final class ExcludeTxnFromChangeStreamsOption extends InternalOption implements UpdateTransactionOption { @@ -377,6 +494,20 @@ void appendToOptions(Options options) { } } + static final class ClientContextOption extends InternalOption + implements ReadQueryUpdateTransactionOption { + private final RequestOptions.ClientContext clientContext; + + ClientContextOption(RequestOptions.ClientContext clientContext) { + this.clientContext = clientContext; + } + + @Override + void appendToOptions(Options options) { + options.clientContext = clientContext; + } + } + static final class TagOption extends InternalOption implements ReadQueryUpdateTransactionOption { private final String tag; @@ -449,6 +580,34 @@ void appendToOptions(Options options) { } } + /** Option to set isolation level for read/write transactions. */ + static final class IsolationLevelOption extends InternalOption implements TransactionOption { + private final IsolationLevel isolationLevel; + + public IsolationLevelOption(IsolationLevel isolationLevel) { + this.isolationLevel = isolationLevel; + } + + @Override + void appendToOptions(Options options) { + options.isolationLevel = isolationLevel; + } + } + + /** Option to set read lock mode for read/write transactions. */ + static final class ReadLockModeOption extends InternalOption implements TransactionOption { + private final ReadLockMode readLockMode; + + public ReadLockModeOption(ReadLockMode readLockMode) { + this.readLockMode = readLockMode; + } + + @Override + void appendToOptions(Options options) { + options.readLockMode = readLockMode; + } + } + private boolean withCommitStats; private Duration maxCommitDelay; @@ -461,14 +620,19 @@ void appendToOptions(Options options) { private String filter; private RpcPriority priority; private String tag; + private RequestOptions.ClientContext clientContext; private String etag; private Boolean validateOnly; - private Boolean withOptimisticLock; private Boolean withExcludeTxnFromChangeStreams; private Boolean dataBoostEnabled; private DirectedReadOptions directedReadOptions; private DecodeMode decodeMode; private RpcOrderBy orderBy; + private RpcLockHint lockHint; + private Boolean lastStatement; + private IsolationLevel isolationLevel; + private XGoogSpannerRequestId reqId; + private ReadLockMode readLockMode; // Construction is via factory methods below. private Options() {} @@ -533,6 +697,14 @@ String filter() { return filter; } + boolean hasReqId() { + return reqId != null; + } + + XGoogSpannerRequestId reqId() { + return reqId; + } + boolean hasPriority() { return priority != null; } @@ -541,6 +713,14 @@ Priority priority() { return priority == null ? null : priority.proto; } + boolean hasClientContext() { + return clientContext != null; + } + + RequestOptions.ClientContext clientContext() { + return clientContext; + } + boolean hasTag() { return tag != null; } @@ -565,10 +745,6 @@ Boolean validateOnly() { return validateOnly; } - Boolean withOptimisticLock() { - return withOptimisticLock; - } - Boolean withExcludeTxnFromChangeStreams() { return withExcludeTxnFromChangeStreams; } @@ -605,6 +781,30 @@ OrderBy orderBy() { return orderBy == null ? null : orderBy.proto; } + boolean hasLastStatement() { + return lastStatement != null; + } + + Boolean isLastStatement() { + return lastStatement; + } + + boolean hasLockHint() { + return lockHint != null; + } + + LockHint lockHint() { + return lockHint == null ? null : lockHint.proto; + } + + IsolationLevel isolationLevel() { + return isolationLevel; + } + + ReadLockMode readLockMode() { + return readLockMode; + } + @Override public String toString() { StringBuilder b = new StringBuilder(); @@ -632,6 +832,9 @@ public String toString() { if (priority != null) { b.append("priority: ").append(priority).append(' '); } + if (clientContext != null) { + b.append("clientContext: ").append(clientContext).append(' '); + } if (tag != null) { b.append("tag: ").append(tag).append(' '); } @@ -641,9 +844,6 @@ public String toString() { if (validateOnly != null) { b.append("validateOnly: ").append(validateOnly).append(' '); } - if (withOptimisticLock != null) { - b.append("withOptimisticLock: ").append(withOptimisticLock).append(' '); - } if (withExcludeTxnFromChangeStreams != null) { b.append("withExcludeTxnFromChangeStreams: ") .append(withExcludeTxnFromChangeStreams) @@ -661,6 +861,21 @@ public String toString() { if (orderBy != null) { b.append("orderBy: ").append(orderBy).append(' '); } + if (lastStatement != null) { + b.append("lastStatement: ").append(lastStatement).append(' '); + } + if (lockHint != null) { + b.append("lockHint: ").append(lockHint).append(' '); + } + if (isolationLevel != null) { + b.append("isolationLevel: ").append(isolationLevel).append(' '); + } + if (reqId != null) { + b.append("requestId: ").append(reqId.toString()); + } + if (readLockMode != null) { + b.append("readLockMode: ").append(readLockMode).append(' '); + } return b.toString(); } @@ -693,14 +908,19 @@ public boolean equals(Object o) { && Objects.equals(pageToken(), that.pageToken()) && Objects.equals(filter(), that.filter()) && Objects.equals(priority(), that.priority()) + && Objects.equals(clientContext(), that.clientContext()) && Objects.equals(tag(), that.tag()) && Objects.equals(etag(), that.etag()) && Objects.equals(validateOnly(), that.validateOnly()) - && Objects.equals(withOptimisticLock(), that.withOptimisticLock()) && Objects.equals(withExcludeTxnFromChangeStreams(), that.withExcludeTxnFromChangeStreams()) && Objects.equals(dataBoostEnabled(), that.dataBoostEnabled()) && Objects.equals(directedReadOptions(), that.directedReadOptions()) - && Objects.equals(orderBy(), that.orderBy()); + && Objects.equals(orderBy(), that.orderBy()) + && Objects.equals(isLastStatement(), that.isLastStatement()) + && Objects.equals(lockHint(), that.lockHint()) + && Objects.equals(isolationLevel(), that.isolationLevel()) + && Objects.equals(reqId(), that.reqId()) + && Objects.equals(readLockMode(), that.readLockMode()); } @Override @@ -733,6 +953,9 @@ public int hashCode() { if (priority != null) { result = 31 * result + priority.hashCode(); } + if (clientContext != null) { + result = 31 * result + clientContext.hashCode(); + } if (tag != null) { result = 31 * result + tag.hashCode(); } @@ -742,9 +965,6 @@ public int hashCode() { if (validateOnly != null) { result = 31 * result + validateOnly.hashCode(); } - if (withOptimisticLock != null) { - result = 31 * result + withOptimisticLock.hashCode(); - } if (withExcludeTxnFromChangeStreams != null) { result = 31 * result + withExcludeTxnFromChangeStreams.hashCode(); } @@ -760,6 +980,21 @@ public int hashCode() { if (orderBy != null) { result = 31 * result + orderBy.hashCode(); } + if (lastStatement != null) { + result = 31 * result + lastStatement.hashCode(); + } + if (lockHint != null) { + result = 31 * result + lockHint.hashCode(); + } + if (isolationLevel != null) { + result = 31 * result + isolationLevel.hashCode(); + } + if (reqId != null) { + result = 31 * result + reqId.hashCode(); + } + if (readLockMode != null) { + result = 31 * result + readLockMode.hashCode(); + } return result; } @@ -853,6 +1088,19 @@ void appendToOptions(Options options) { } } + static class LockHintOption extends InternalOption implements ReadOption { + private final RpcLockHint lockHint; + + LockHintOption(RpcLockHint lockHint) { + this.lockHint = lockHint; + } + + @Override + void appendToOptions(Options options) { + options.lockHint = lockHint; + } + } + static final class DataBoostQueryOption extends InternalOption implements ReadAndQueryOption { private final Boolean dataBoostEnabled; @@ -912,4 +1160,53 @@ public boolean equals(Object o) { return Objects.equals(filter, ((FilterOption) o).filter); } } + + static final class LastStatementUpdateOption extends InternalOption implements QueryUpdateOption { + + LastStatementUpdateOption() {} + + @Override + void appendToOptions(Options options) { + options.lastStatement = true; + } + + @Override + public int hashCode() { + return LastStatementUpdateOption.class.hashCode(); + } + + @Override + public boolean equals(Object o) { + return o instanceof LastStatementUpdateOption; + } + } + + static final class RequestIdOption extends InternalOption + implements ReadOption, TransactionOption, UpdateOption { + private final XGoogSpannerRequestId reqId; + + RequestIdOption(XGoogSpannerRequestId reqId) { + this.reqId = reqId; + } + + @Override + void appendToOptions(Options options) { + options.reqId = this.reqId; + } + + @Override + public int hashCode() { + return this.reqId.hashCode(); + } + + @Override + public boolean equals(Object o) { + // instanceof for a null object returns false. + if (!(o instanceof RequestIdOption)) { + return false; + } + RequestIdOption other = (RequestIdOption) o; + return Objects.equals(this.reqId, other.reqId); + } + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/PartitionedDmlTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/PartitionedDmlTransaction.java index 93cebb6333c..394b8bfbd9e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/PartitionedDmlTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/PartitionedDmlTransaction.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.AbstractReadContext.getChannelHintOptions; import static com.google.common.base.Preconditions.checkState; import com.google.api.core.InternalApi; @@ -42,6 +43,7 @@ import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,12 +58,16 @@ public class PartitionedDmlTransaction implements SessionImpl.SessionTransaction private final Ticker ticker; private final IsRetryableInternalError isRetryableInternalErrorPredicate; private volatile boolean isValid = true; + private final Map channelHintOptions; PartitionedDmlTransaction(SessionImpl session, SpannerRpc rpc, Ticker ticker) { this.session = session; this.rpc = rpc; this.ticker = ticker; this.isRetryableInternalErrorPredicate = new IsRetryableInternalError(); + this.channelHintOptions = + getChannelHintOptions( + session.getOptions(), ThreadLocalRandom.current().nextLong(Long.MAX_VALUE)); } /** @@ -83,13 +89,17 @@ long executeStreamingPartitionedUpdate( try { ExecuteSqlRequest request = newTransactionRequestFrom(statement, options); + // The channel ID is set to zero here. It will be filled in later by SpannerRpc when it reads + // the channel hint from the options that are passed in. + XGoogSpannerRequestId requestId = this.session.getRequestIdCreator().nextRequestId(0); while (true) { final Duration remainingTimeout = tryUpdateTimeout(timeout, stopwatch); try { ServerStream stream = - rpc.executeStreamingPartitionedDml(request, session.getOptions(), remainingTimeout); + rpc.executeStreamingPartitionedDml( + request, channelHintOptions, requestId, remainingTimeout); for (PartialResultSet rs : stream) { if (rs.getResumeToken() != null && !rs.getResumeToken().isEmpty()) { @@ -105,6 +115,11 @@ long executeStreamingPartitionedUpdate( LOGGER.log( Level.FINER, "Retrying PartitionedDml transaction after UnavailableException", e); request = resumeOrRestartRequest(resumeToken, statement, request, options); + if (resumeToken.isEmpty()) { + // Create a new xGoogSpannerRequestId if there is no resume token, as that means that + // the entire transaction will be retried. + requestId = session.getRequestIdCreator().nextRequestId(session.getChannel()); + } } catch (InternalException e) { if (!isRetryableInternalErrorPredicate.apply(e)) { throw e; @@ -113,12 +128,19 @@ long executeStreamingPartitionedUpdate( LOGGER.log( Level.FINER, "Retrying PartitionedDml transaction after InternalException - EOS", e); request = resumeOrRestartRequest(resumeToken, statement, request, options); + if (resumeToken.isEmpty()) { + // Create a new xGoogSpannerRequestId if there is no resume token, as that means that + // the entire transaction will be retried. + requestId = session.getRequestIdCreator().nextRequestId(session.getChannel()); + } } catch (AbortedException e) { LOGGER.log(Level.FINER, "Retrying PartitionedDml transaction after AbortedException", e); resumeToken = ByteString.EMPTY; foundStats = false; updateCount = 0L; request = newTransactionRequestFrom(statement, options); + // Create a new xGoogSpannerRequestId. + requestId = session.getRequestIdCreator().nextRequestId(session.getChannel()); } } if (!foundStats) { @@ -129,7 +151,7 @@ long executeStreamingPartitionedUpdate( LOGGER.log(Level.FINER, "Finished PartitionedUpdate statement"); return updateCount; } catch (Exception e) { - throw SpannerExceptionFactory.newSpannerException(e); + throw SpannerExceptionFactory.asSpannerException(e); } } @@ -209,7 +231,7 @@ private ByteString initTransaction(final Options options) { .setExcludeTxnFromChangeStreams( options.withExcludeTxnFromChangeStreams() == Boolean.TRUE)) .build(); - Transaction tx = rpc.beginTransaction(request, session.getOptions(), true); + Transaction tx = rpc.beginTransaction(request, channelHintOptions, true); if (tx.getId().isEmpty()) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.INTERNAL, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ReadContext.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ReadContext.java index c5dddfe1159..4b5ba8620ee 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ReadContext.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ReadContext.java @@ -36,6 +36,7 @@ enum QueryAnalyzeMode { /** Retrieves both query plan and query execution statistics along with the result data. */ PROFILE } + /** * Reads zero or more rows from a database. * diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java index 3d12cf5ad2c..92a12286ae2 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java @@ -35,6 +35,7 @@ import com.google.spanner.v1.ResultSetStats; import java.math.BigDecimal; import java.util.List; +import java.util.UUID; import java.util.function.Function; /** Utility methods for working with {@link com.google.cloud.spanner.ResultSet}. */ @@ -326,6 +327,26 @@ public Date getDate(String columnName) { return getCurrentRowAsStruct().getDate(columnName); } + @Override + public UUID getUuid(int columnIndex) { + return getCurrentRowAsStruct().getUuid(columnIndex); + } + + @Override + public UUID getUuid(String columnName) { + return getCurrentRowAsStruct().getUuid(columnName); + } + + @Override + public Interval getInterval(int columnIndex) { + return getCurrentRowAsStruct().getInterval(columnIndex); + } + + @Override + public Interval getInterval(String columnName) { + return getCurrentRowAsStruct().getInterval(columnName); + } + @Override public T getProtoMessage(int columnIndex, T message) { return getCurrentRowAsStruct().getProtoMessage(columnIndex, message); @@ -508,6 +529,26 @@ public List getDateList(String columnName) { return getCurrentRowAsStruct().getDateList(columnName); } + @Override + public List getUuidList(int columnIndex) { + return getCurrentRowAsStruct().getUuidList(columnIndex); + } + + @Override + public List getUuidList(String columnName) { + return getCurrentRowAsStruct().getUuidList(columnName); + } + + @Override + public List getIntervalList(int columnIndex) { + return getCurrentRowAsStruct().getIntervalList(columnIndex); + } + + @Override + public List getIntervalList(String columnName) { + return getCurrentRowAsStruct().getIntervalList(columnName); + } + @Override public List getProtoMessageList(int columnIndex, T message) { return getCurrentRowAsStruct().getProtoMessageList(columnIndex, message); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResumableStreamIterator.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResumableStreamIterator.java index 39165da2d38..aac7f63c861 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResumableStreamIterator.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResumableStreamIterator.java @@ -69,8 +69,11 @@ abstract class ResumableStreamIterator extends AbstractIterator stream; + private int attempts; private ByteString resumeToken; private boolean finished; + private final XGoogSpannerRequestId requestId; + /** * Indicates whether it is currently safe to retry RPCs. This will be {@code false} if we have * reached the maximum buffer size without seeing a restart token; in this case, we will drain the @@ -85,7 +88,8 @@ protected ResumableStreamIterator( TraceWrapper tracer, ErrorHandler errorHandler, RetrySettings streamingRetrySettings, - Set retryableCodes) { + Set retryableCodes, + XGoogSpannerRequestId.RequestIdCreator xGoogRequestIdCreator) { this( maxBufferSize, streamName, @@ -94,7 +98,8 @@ protected ResumableStreamIterator( Attributes.empty(), errorHandler, streamingRetrySettings, - retryableCodes); + retryableCodes, + xGoogRequestIdCreator); } protected ResumableStreamIterator( @@ -105,7 +110,8 @@ protected ResumableStreamIterator( Attributes attributes, ErrorHandler errorHandler, RetrySettings streamingRetrySettings, - Set retryableCodes) { + Set retryableCodes, + XGoogSpannerRequestId.RequestIdCreator xGoogRequestIdCreator) { checkArgument(maxBufferSize >= 0); this.maxBufferSize = maxBufferSize; this.tracer = tracer; @@ -113,6 +119,8 @@ protected ResumableStreamIterator( this.errorHandler = errorHandler; this.streamingRetrySettings = Preconditions.checkNotNull(streamingRetrySettings); this.retryableCodes = Preconditions.checkNotNull(retryableCodes); + // The channel is automatically updated by the gRPC client when the request is actually sent. + this.requestId = xGoogRequestIdCreator.nextRequestId(0); } private ExponentialBackOff newBackOff() { @@ -199,7 +207,9 @@ public void execute(Runnable command) { } abstract CloseableIterator startStream( - @Nullable ByteString resumeToken, AsyncResultSet.StreamMessageListener streamMessageListener); + @Nullable ByteString resumeToken, + AsyncResultSet.StreamMessageListener streamMessageListener, + XGoogSpannerRequestId requestId); /** * Prepares the iterator for a retry on a different gRPC channel. Returns true if that is @@ -223,6 +233,11 @@ public boolean isWithBeginTransaction() { return stream != null && stream.isWithBeginTransaction(); } + @Override + public boolean isLastStatement() { + return stream != null && stream.isLastStatement(); + } + @Override @InternalApi public boolean initiateStreaming(AsyncResultSet.StreamMessageListener streamMessageListener) { @@ -325,7 +340,8 @@ private void startGrpcStreaming() { try (IScope scope = tracer.withSpan(span)) { // When start a new stream set the Span as current to make the gRPC Span a child of // this Span. - stream = checkNotNull(startStream(resumeToken, streamMessageListener)); + stream = checkNotNull(startStream(resumeToken, streamMessageListener, requestId)); + stream.requestPrefetchChunks(); } } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelException.java index 59e50ef6a1e..e56265b6c52 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelException.java @@ -24,7 +24,8 @@ class RetryOnDifferentGrpcChannelException extends SpannerException { RetryOnDifferentGrpcChannelException( @Nullable String message, int channel, @Nullable Throwable cause) { // Note: We set retryable=false, as the exception is not retryable in the standard way. - super(DoNotConstructDirectly.ALLOWED, ErrorCode.INTERNAL, /*retryable=*/ false, message, cause); + super( + DoNotConstructDirectly.ALLOWED, ErrorCode.INTERNAL, /* retryable= */ false, message, cause); this.channel = channel; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java index a3cbbf33826..1fb49f2ced3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java @@ -22,14 +22,17 @@ import com.google.api.pathtemplate.PathTemplate; import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory; import com.google.cloud.spanner.spi.v1.SpannerRpc; +import com.google.cloud.spanner.spi.v1.SpannerRpc.Option; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import io.opentelemetry.api.common.Attributes; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.concurrent.GuardedBy; /** Client for creating single sessions and batches of sessions. */ @@ -107,6 +110,10 @@ Object value() { return ImmutableMap.copyOf(tmp); } + static Map createRequestOptions(long channelId) { + return ImmutableMap.of(Option.CHANNEL_HINT, channelId); + } + private final class BatchCreateSessionsRunnable implements Runnable { private final long channelHint; private final int sessionCount; @@ -125,7 +132,8 @@ private BatchCreateSessionsRunnable( public void run() { List sessions; int remainingSessionsToCreate = sessionCount; - ISpan span = spanner.getTracer().spanBuilder(SpannerImpl.BATCH_CREATE_SESSIONS); + ISpan span = + spanner.getTracer().spanBuilder(SpannerImpl.BATCH_CREATE_SESSIONS, databaseAttributes); try (IScope s = spanner.getTracer().withSpan(span)) { spanner .getTracer() @@ -170,6 +178,13 @@ interface SessionConsumer { private final ExecutorFactory executorFactory; private final ScheduledExecutorService executor; private final DatabaseId db; + private final Attributes databaseAttributes; + + // SessionClient is created long before a DatabaseClientImpl is created, + // as batch sessions are firstly created then later attached to each Client. + private static final AtomicInteger NTH_ID = new AtomicInteger(0); + private final int nthId = NTH_ID.incrementAndGet(); + private final AtomicInteger nthRequest = new AtomicInteger(0); @GuardedBy("this") private volatile long sessionChannelCounter; @@ -182,6 +197,7 @@ interface SessionConsumer { this.db = db; this.executorFactory = executorFactory; this.executor = executorFactory.get(); + this.databaseAttributes = spanner.getTracer().createDatabaseAttributes(db); } @Override @@ -201,11 +217,13 @@ DatabaseId getDatabaseId() { SessionImpl createSession() { // The sessionChannelCounter could overflow, but that will just flip it to Integer.MIN_VALUE, // which is also a valid channel hint. - final Map options; + final long channelId; synchronized (this) { - options = optionMap(SessionOption.channelHint(sessionChannelCounter++)); + channelId = sessionChannelCounter; + sessionChannelCounter++; } - ISpan span = spanner.getTracer().spanBuilder(SpannerImpl.CREATE_SESSION); + ISpan span = + spanner.getTracer().spanBuilder(SpannerImpl.CREATE_SESSION, this.databaseAttributes); try (IScope s = spanner.getTracer().withSpan(span)) { com.google.spanner.v1.Session session = spanner @@ -214,10 +232,14 @@ SessionImpl createSession() { db.getName(), spanner.getOptions().getDatabaseRole(), spanner.getOptions().getSessionLabels(), - options); + createRequestOptions(channelId)); SessionReference sessionReference = new SessionReference( - session.getName(), session.getCreateTime(), session.getMultiplexed(), options); + session.getName(), + spanner.getOptions().getDatabaseRole(), + session.getCreateTime(), + session.getMultiplexed(), + optionMap(SessionOption.channelHint(channelId))); return new SessionImpl(spanner, sessionReference); } catch (RuntimeException e) { span.setStatus(e); @@ -250,7 +272,10 @@ void createMultiplexedSession(SessionConsumer consumer) { * GRPC channel. In case of an error during the gRPC calls, an exception will be thrown. */ SessionImpl createMultiplexedSession() { - ISpan span = spanner.getTracer().spanBuilder(SpannerImpl.CREATE_MULTIPLEXED_SESSION); + ISpan span = + spanner + .getTracer() + .spanBuilder(SpannerImpl.CREATE_MULTIPLEXED_SESSION, this.databaseAttributes); try (IScope s = spanner.getTracer().withSpan(span)) { com.google.spanner.v1.Session session = spanner @@ -265,7 +290,11 @@ SessionImpl createMultiplexedSession() { new SessionImpl( spanner, new SessionReference( - session.getName(), session.getCreateTime(), session.getMultiplexed(), null)); + session.getName(), + spanner.getOptions().getDatabaseRole(), + session.getCreateTime(), + session.getMultiplexed(), + null)); span.addAnnotation( String.format("Request for %d multiplexed session returned %d session", 1, 1)); return sessionImpl; @@ -372,7 +401,6 @@ void asyncBatchCreateSessions( */ private List internalBatchCreateSessions( final int sessionCount, final long channelHint) throws SpannerException { - final Map options = optionMap(SessionOption.channelHint(channelHint)); ISpan parent = spanner.getTracer().getCurrentSpan(); ISpan span = spanner @@ -388,21 +416,23 @@ private List internalBatchCreateSessions( sessionCount, spanner.getOptions().getDatabaseRole(), spanner.getOptions().getSessionLabels(), - options); + createRequestOptions(channelHint)); span.addAnnotation( String.format( "Request for %d sessions returned %d sessions", sessionCount, sessions.size())); span.end(); List res = new ArrayList<>(sessionCount); for (com.google.spanner.v1.Session session : sessions) { - res.add( + SessionImpl sessionImpl = new SessionImpl( spanner, new SessionReference( session.getName(), + spanner.getOptions().getDatabaseRole(), session.getCreateTime(), session.getMultiplexed(), - options))); + optionMap(SessionOption.channelHint(channelHint)))); + res.add(sessionImpl); } return res; } catch (RuntimeException e) { @@ -418,6 +448,6 @@ SessionImpl sessionWithId(String name) { synchronized (this) { options = optionMap(SessionOption.channelHint(sessionChannelCounter++)); } - return new SessionImpl(spanner, new SessionReference(name, options)); + return new SessionImpl(spanner, new SessionReference(name, /* databaseRole= */ null, options)); } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java index 2f0d86b6314..e70ee390df1 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java @@ -76,13 +76,16 @@ static TransactionOptions createReadWriteTransactionOptions( transactionOptions.setExcludeTxnFromChangeStreams(true); } TransactionOptions.ReadWrite.Builder readWrite = TransactionOptions.ReadWrite.newBuilder(); - if (options.withOptimisticLock() == Boolean.TRUE) { - readWrite.setReadLockMode(TransactionOptions.ReadWrite.ReadLockMode.OPTIMISTIC); - } if (previousTransactionId != null && previousTransactionId != com.google.protobuf.ByteString.EMPTY) { readWrite.setMultiplexedSessionPreviousTransactionId(previousTransactionId); } + if (options.isolationLevel() != null) { + transactionOptions.setIsolationLevel(options.isolationLevel()); + } + if (options.readLockMode() != null) { + readWrite.setReadLockMode(options.readLockMode()); + } transactionOptions.setReadWrite(readWrite); return transactionOptions.build(); } @@ -117,7 +120,7 @@ interface SessionTransaction { static final int NO_CHANNEL_HINT = -1; private final SpannerImpl spanner; - private final SessionReference sessionReference; + private SessionReference sessionReference; private SessionTransaction activeTransaction; private ISpan currentSpan; private final Clock clock; @@ -157,6 +160,19 @@ public String getName() { return sessionReference.getName(); } + @Override + public String getDatabaseRole() { + return sessionReference.getDatabaseRole(); + } + + /** + * Updates the session reference with the fallback session. This should only be used for updating + * session reference with regular session in case of unimplemented error in multiplexed session. + */ + void setFallbackSessionReference(SessionReference sessionReference) { + this.sessionReference = sessionReference; + } + Map getOptions() { return options; } @@ -165,6 +181,10 @@ ErrorHandler getErrorHandler() { return this.errorHandler; } + SpannerImpl getSpanner() { + return spanner; + } + void setCurrentSpan(ISpan span) { currentSpan = span; } @@ -193,6 +213,10 @@ void markUsed(Instant instant) { sessionReference.markUsed(instant); } + TransactionOptions defaultTransactionOptions() { + return this.spanner.getOptions().getDefaultTransactionOptions(); + } + public DatabaseId getDatabaseId() { return sessionReference.getDatabaseId(); } @@ -252,7 +276,14 @@ public CommitResponse writeAtLeastOnceWithOptions( if (options.withExcludeTxnFromChangeStreams() == Boolean.TRUE) { transactionOptionsBuilder.setExcludeTxnFromChangeStreams(true); } - requestBuilder.setSingleUseTransaction(transactionOptionsBuilder); + if (options.isolationLevel() != null) { + transactionOptionsBuilder.setIsolationLevel(options.isolationLevel()); + } + if (options.readLockMode() != null) { + transactionOptionsBuilder.getReadWriteBuilder().setReadLockMode(options.readLockMode()); + } + requestBuilder.setSingleUseTransaction( + defaultTransactionOptions().toBuilder().mergeFrom(transactionOptionsBuilder.build())); if (options.hasMaxCommitDelay()) { requestBuilder.setMaxCommitDelay( @@ -268,6 +299,7 @@ public CommitResponse writeAtLeastOnceWithOptions( } CommitRequest request = requestBuilder.build(); ISpan span = tracer.spanBuilder(SpannerImpl.COMMIT); + try (IScope s = tracer.withSpan(span)) { return SpannerRetryHelper.runTxWithRetriesOnAborted( () -> new CommitResponse(spanner.getRpc().commit(request, getOptions()))); @@ -306,11 +338,11 @@ public ServerStream batchWriteAtLeastOnce( .setSession(getName()) .addAllMutationGroups(mutationGroupsProto); RequestOptions batchWriteRequestOptions = getRequestOptions(transactionOptions); + Options allOptions = Options.fromTransactionOptions(transactionOptions); if (batchWriteRequestOptions != null) { requestBuilder.setRequestOptions(batchWriteRequestOptions); } - if (Options.fromTransactionOptions(transactionOptions).withExcludeTxnFromChangeStreams() - == Boolean.TRUE) { + if (allOptions.withExcludeTxnFromChangeStreams() == Boolean.TRUE) { requestBuilder.setExcludeTxnFromChangeStreams(true); } ISpan span = tracer.spanBuilder(SpannerImpl.BATCH_WRITE); @@ -321,6 +353,7 @@ public ServerStream batchWriteAtLeastOnce( throw SpannerExceptionFactory.newSpannerException(e); } finally { span.end(); + onTransactionDone(); } } @@ -415,11 +448,17 @@ public AsyncTransactionManagerImpl transactionManagerAsync(TransactionOption... @Override public ApiFuture asyncClose() { + if (getIsMultiplexed()) { + return com.google.api.core.ApiFutures.immediateFuture(Empty.getDefaultInstance()); + } return spanner.getRpc().asyncDeleteSession(getName(), getOptions()); } @Override public void close() { + if (getIsMultiplexed()) { + return; + } ISpan span = tracer.spanBuilder(SpannerImpl.DELETE_SESSION); try (IScope s = tracer.withSpan(span)) { spanner.getRpc().deleteSession(getName(), getOptions()); @@ -443,10 +482,30 @@ ApiFuture beginTransactionAsync( BeginTransactionRequest.newBuilder() .setSession(getName()) .setOptions( - createReadWriteTransactionOptions(transactionOptions, previousTransactionId)); + defaultTransactionOptions().toBuilder() + .mergeFrom( + createReadWriteTransactionOptions( + transactionOptions, previousTransactionId))); if (sessionReference.getIsMultiplexed() && mutation != null) { requestBuilder.setMutationKey(mutation); } + RequestOptions.Builder optionsBuilder = + transactionOptions.toRequestOptionsProto(true).toBuilder(); + RequestOptions.ClientContext defaultClientContext = spanner.getOptions().getClientContext(); + if (defaultClientContext != null) { + RequestOptions.ClientContext.Builder builder = defaultClientContext.toBuilder(); + if (optionsBuilder.hasClientContext()) { + builder.mergeFrom(optionsBuilder.getClientContext()); + } + optionsBuilder.setClientContext(builder.build()); + } + if (!sessionReference.getIsMultiplexed()) { + optionsBuilder.clearTransactionTag(); + } + RequestOptions requestOptions = optionsBuilder.build(); + if (!requestOptions.equals(RequestOptions.getDefaultInstance())) { + requestBuilder.setRequestOptions(requestOptions); + } final BeginTransactionRequest request = requestBuilder.build(); final ApiFuture requestFuture; try (IScope ignore = tracer.withSpan(span)) { @@ -488,7 +547,6 @@ TransactionContextImpl newTransaction(Options options, ByteString previousTransa .setOptions(options) .setTransactionId(null) .setPreviousTransactionId(previousTransactionId) - .setOptions(options) .setTrackTransactionStarter(spanner.getOptions().isTrackTransactionStarter()) .setRpc(spanner.getRpc()) .setDefaultQueryOptions(spanner.getDefaultQueryOptions(getDatabaseId())) @@ -529,4 +587,23 @@ void onTransactionDone() {} TraceWrapper getTracer() { return tracer; } + + public XGoogSpannerRequestId.RequestIdCreator getRequestIdCreator() { + return this.spanner.getRpc().getRequestIdCreator(); + } + + int getChannel() { + if (getIsMultiplexed()) { + return 0; + } + Map options = this.getOptions(); + if (options == null) { + return 0; + } + Long channelHint = (Long) options.get(SpannerRpc.Option.CHANNEL_HINT); + if (channelHint == null) { + return 0; + } + return (int) (channelHint % this.spanner.getOptions().getNumChannels()); + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java deleted file mode 100644 index aba6aee1db8..00000000000 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java +++ /dev/null @@ -1,3466 +0,0 @@ -/* - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static com.google.cloud.spanner.MetricRegistryConstants.COUNT; -import static com.google.cloud.spanner.MetricRegistryConstants.GET_SESSION_TIMEOUTS; -import static com.google.cloud.spanner.MetricRegistryConstants.IS_MULTIPLEXED; -import static com.google.cloud.spanner.MetricRegistryConstants.MAX_ALLOWED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.MAX_ALLOWED_SESSIONS_DESCRIPTION; -import static com.google.cloud.spanner.MetricRegistryConstants.MAX_IN_USE_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.MAX_IN_USE_SESSIONS_DESCRIPTION; -import static com.google.cloud.spanner.MetricRegistryConstants.METRIC_PREFIX; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_ACQUIRED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_ACQUIRED_SESSIONS_DESCRIPTION; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_IN_USE_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_READ_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_RELEASED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_RELEASED_SESSIONS_DESCRIPTION; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_AVAILABLE; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_BEING_PREPARED; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_IN_POOL; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_IN_POOL_DESCRIPTION; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_IN_USE; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_WRITE_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.SESSIONS_TIMEOUTS_DESCRIPTION; -import static com.google.cloud.spanner.MetricRegistryConstants.SESSIONS_TYPE; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_DEFAULT_LABEL_VALUES; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_TYPE; -import static com.google.cloud.spanner.SpannerExceptionFactory.asSpannerException; -import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException; -import static com.google.common.base.Preconditions.checkState; - -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutures; -import com.google.api.core.SettableApiFuture; -import com.google.api.gax.core.ExecutorProvider; -import com.google.api.gax.rpc.ServerStream; -import com.google.cloud.Timestamp; -import com.google.cloud.Tuple; -import com.google.cloud.grpc.GrpcTransportOptions; -import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory; -import com.google.cloud.spanner.Options.QueryOption; -import com.google.cloud.spanner.Options.ReadOption; -import com.google.cloud.spanner.Options.TransactionOption; -import com.google.cloud.spanner.Options.UpdateOption; -import com.google.cloud.spanner.SessionClient.SessionConsumer; -import com.google.cloud.spanner.SessionPoolOptions.InactiveTransactionRemovalOptions; -import com.google.cloud.spanner.SpannerException.ResourceNotFoundException; -import com.google.cloud.spanner.SpannerImpl.ClosedException; -import com.google.cloud.spanner.spi.v1.SpannerRpc; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.MoreObjects; -import com.google.common.base.Preconditions; -import com.google.common.base.Ticker; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.ForwardingListenableFuture; -import com.google.common.util.concurrent.ForwardingListenableFuture.SimpleForwardingListenableFuture; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.common.util.concurrent.SettableFuture; -import com.google.protobuf.Empty; -import com.google.spanner.v1.BatchWriteResponse; -import com.google.spanner.v1.ResultSetStats; -import io.opencensus.metrics.DerivedLongCumulative; -import io.opencensus.metrics.DerivedLongGauge; -import io.opencensus.metrics.LabelValue; -import io.opencensus.metrics.MetricOptions; -import io.opencensus.metrics.MetricRegistry; -import io.opencensus.metrics.Metrics; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.api.metrics.Meter; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.time.Duration; -import java.time.Instant; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Function; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.annotation.concurrent.GuardedBy; - -/** - * Maintains a pool of sessions. This class itself is thread safe and is meant to be used - * concurrently across multiple threads. - */ -class SessionPool { - - private static final Logger logger = Logger.getLogger(SessionPool.class.getName()); - private final TraceWrapper tracer; - static final String WAIT_FOR_SESSION = "SessionPool.WaitForSession"; - - /** - * If the {@link SessionPoolOptions#getWaitForMinSessions()} duration is greater than zero, waits - * for the creation of at least {@link SessionPoolOptions#getMinSessions()} in the pool using the - * given duration. If the waiting times out, a {@link SpannerException} with the {@link - * ErrorCode#DEADLINE_EXCEEDED} is thrown. - */ - void maybeWaitOnMinSessions() { - final long timeoutNanos = options.getWaitForMinSessions().toNanos(); - if (timeoutNanos <= 0) { - return; - } - - try { - if (!waitOnMinSessionsLatch.await(timeoutNanos, TimeUnit.NANOSECONDS)) { - final long timeoutMillis = options.getWaitForMinSessions().toMillis(); - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.DEADLINE_EXCEEDED, - "Timed out after waiting " + timeoutMillis + "ms for session pool creation"); - } - } catch (InterruptedException e) { - throw SpannerExceptionFactory.propagateInterrupt(e); - } - } - - private abstract static class CachedResultSetSupplier - implements com.google.common.base.Supplier { - - private ResultSet cached; - - abstract ResultSet load(); - - ResultSet reload() { - return cached = load(); - } - - @Override - public ResultSet get() { - if (cached == null) { - cached = load(); - } - return cached; - } - } - - /** - * Wrapper around {@code ReadContext} that releases the session to the pool once the call is - * finished, if it is a single use context. - */ - private static class AutoClosingReadContext - implements ReadContext { - /** - * {@link AsyncResultSet} implementation that keeps track of the async operations that are still - * running for this {@link ReadContext} and that should finish before the {@link ReadContext} - * releases its session back into the pool. - */ - private class AutoClosingReadContextAsyncResultSetImpl extends AsyncResultSetImpl { - private AutoClosingReadContextAsyncResultSetImpl( - ExecutorProvider executorProvider, ResultSet delegate, int bufferRows) { - super(executorProvider, delegate, bufferRows); - } - - @Override - public ApiFuture setCallback(Executor exec, ReadyCallback cb) { - Runnable listener = - () -> { - synchronized (lock) { - if (asyncOperationsCount.decrementAndGet() == 0 && closed) { - // All async operations for this read context have finished. - AutoClosingReadContext.this.close(); - } - } - }; - try { - asyncOperationsCount.incrementAndGet(); - addListener(listener); - return super.setCallback(exec, cb); - } catch (Throwable t) { - removeListener(listener); - asyncOperationsCount.decrementAndGet(); - throw t; - } - } - } - - private final Function readContextDelegateSupplier; - private T readContextDelegate; - private final SessionPool sessionPool; - private final SessionReplacementHandler sessionReplacementHandler; - private final boolean isSingleUse; - private final AtomicInteger asyncOperationsCount = new AtomicInteger(); - - private final Object lock = new Object(); - - @GuardedBy("lock") - private boolean sessionUsedForQuery = false; - - @GuardedBy("lock") - private I session; - - @GuardedBy("lock") - private boolean closed; - - @GuardedBy("lock") - private boolean delegateClosed; - - private AutoClosingReadContext( - Function delegateSupplier, - SessionPool sessionPool, - SessionReplacementHandler sessionReplacementHandler, - I session, - boolean isSingleUse) { - this.readContextDelegateSupplier = delegateSupplier; - this.sessionPool = sessionPool; - this.sessionReplacementHandler = sessionReplacementHandler; - this.session = session; - this.isSingleUse = isSingleUse; - } - - T getReadContextDelegate() { - synchronized (lock) { - if (readContextDelegate == null) { - while (true) { - try { - this.readContextDelegate = readContextDelegateSupplier.apply(this.session); - break; - } catch (SessionNotFoundException e) { - replaceSessionIfPossible(e); - } - } - } - } - return readContextDelegate; - } - - private ResultSet wrap(final CachedResultSetSupplier resultSetSupplier) { - return new ForwardingResultSet(resultSetSupplier) { - private boolean beforeFirst = true; - - @Override - public boolean next() throws SpannerException { - while (true) { - try { - return internalNext(); - } catch (SessionNotFoundException e) { - while (true) { - // Keep the replace-if-possible outside the try-block to let the exception bubble up - // if it's too late to replace the session. - replaceSessionIfPossible(e); - try { - replaceDelegate(resultSetSupplier.reload()); - break; - } catch (SessionNotFoundException snfe) { - e = snfe; - // retry on yet another session. - } - } - } - } - } - - private boolean internalNext() { - try { - boolean ret = super.next(); - if (beforeFirst) { - synchronized (lock) { - session.get().markUsed(); - beforeFirst = false; - sessionUsedForQuery = true; - } - } - if (!ret && isSingleUse) { - close(); - } - return ret; - } catch (SessionNotFoundException e) { - throw e; - } catch (SpannerException e) { - synchronized (lock) { - if (!closed && isSingleUse) { - session.get().setLastException(e); - AutoClosingReadContext.this.close(); - } - } - throw e; - } - } - - @Override - public void close() { - try { - super.close(); - } finally { - if (isSingleUse) { - AutoClosingReadContext.this.close(); - } - } - } - }; - } - - private void replaceSessionIfPossible(SessionNotFoundException notFound) { - synchronized (lock) { - if (isSingleUse || !sessionUsedForQuery) { - // This class is only used by read-only transactions, so we know that we only need a - // read-only session. - session = sessionReplacementHandler.replaceSession(notFound, session); - readContextDelegate = readContextDelegateSupplier.apply(session); - } else { - throw notFound; - } - } - } - - @Override - public ResultSet read( - final String table, - final KeySet keys, - final Iterable columns, - final ReadOption... options) { - return wrap( - new CachedResultSetSupplier() { - @Override - ResultSet load() { - return getReadContextDelegate().read(table, keys, columns, options); - } - }); - } - - @Override - public AsyncResultSet readAsync( - final String table, - final KeySet keys, - final Iterable columns, - final ReadOption... options) { - Options readOptions = Options.fromReadOptions(options); - final int bufferRows = - readOptions.hasBufferRows() - ? readOptions.bufferRows() - : AsyncResultSetImpl.DEFAULT_BUFFER_SIZE; - return new AutoClosingReadContextAsyncResultSetImpl( - sessionPool.sessionClient.getSpanner().getAsyncExecutorProvider(), - wrap( - new CachedResultSetSupplier() { - @Override - ResultSet load() { - return getReadContextDelegate().read(table, keys, columns, options); - } - }), - bufferRows); - } - - @Override - public ResultSet readUsingIndex( - final String table, - final String index, - final KeySet keys, - final Iterable columns, - final ReadOption... options) { - return wrap( - new CachedResultSetSupplier() { - @Override - ResultSet load() { - return getReadContextDelegate().readUsingIndex(table, index, keys, columns, options); - } - }); - } - - @Override - public AsyncResultSet readUsingIndexAsync( - final String table, - final String index, - final KeySet keys, - final Iterable columns, - final ReadOption... options) { - Options readOptions = Options.fromReadOptions(options); - final int bufferRows = - readOptions.hasBufferRows() - ? readOptions.bufferRows() - : AsyncResultSetImpl.DEFAULT_BUFFER_SIZE; - return new AutoClosingReadContextAsyncResultSetImpl( - sessionPool.sessionClient.getSpanner().getAsyncExecutorProvider(), - wrap( - new CachedResultSetSupplier() { - @Override - ResultSet load() { - return getReadContextDelegate() - .readUsingIndex(table, index, keys, columns, options); - } - }), - bufferRows); - } - - @Override - @Nullable - public Struct readRow(String table, Key key, Iterable columns) { - try { - while (true) { - try { - synchronized (lock) { - session.get().markUsed(); - } - return getReadContextDelegate().readRow(table, key, columns); - } catch (SessionNotFoundException e) { - replaceSessionIfPossible(e); - } - } - } finally { - synchronized (lock) { - sessionUsedForQuery = true; - } - if (isSingleUse) { - close(); - } - } - } - - @Override - public ApiFuture readRowAsync(String table, Key key, Iterable columns) { - try (AsyncResultSet rs = readAsync(table, KeySet.singleKey(key), columns)) { - return AbstractReadContext.consumeSingleRowAsync(rs); - } - } - - @Override - @Nullable - public Struct readRowUsingIndex(String table, String index, Key key, Iterable columns) { - try { - while (true) { - try { - synchronized (lock) { - session.get().markUsed(); - } - return getReadContextDelegate().readRowUsingIndex(table, index, key, columns); - } catch (SessionNotFoundException e) { - replaceSessionIfPossible(e); - } - } - } finally { - synchronized (lock) { - sessionUsedForQuery = true; - } - if (isSingleUse) { - close(); - } - } - } - - @Override - public ApiFuture readRowUsingIndexAsync( - String table, String index, Key key, Iterable columns) { - try (AsyncResultSet rs = readUsingIndexAsync(table, index, KeySet.singleKey(key), columns)) { - return AbstractReadContext.consumeSingleRowAsync(rs); - } - } - - @Override - public ResultSet executeQuery(final Statement statement, final QueryOption... options) { - return wrap( - new CachedResultSetSupplier() { - @Override - ResultSet load() { - return getReadContextDelegate().executeQuery(statement, options); - } - }); - } - - @Override - public AsyncResultSet executeQueryAsync( - final Statement statement, final QueryOption... options) { - Options queryOptions = Options.fromQueryOptions(options); - final int bufferRows = - queryOptions.hasBufferRows() - ? queryOptions.bufferRows() - : AsyncResultSetImpl.DEFAULT_BUFFER_SIZE; - return new AutoClosingReadContextAsyncResultSetImpl( - sessionPool.sessionClient.getSpanner().getAsyncExecutorProvider(), - wrap( - new CachedResultSetSupplier() { - @Override - ResultSet load() { - return getReadContextDelegate().executeQuery(statement, options); - } - }), - bufferRows); - } - - @Override - public ResultSet analyzeQuery(final Statement statement, final QueryAnalyzeMode queryMode) { - return wrap( - new CachedResultSetSupplier() { - @Override - ResultSet load() { - return getReadContextDelegate().analyzeQuery(statement, queryMode); - } - }); - } - - @Override - public void close() { - synchronized (lock) { - if (closed && delegateClosed) { - return; - } - closed = true; - if (asyncOperationsCount.get() == 0) { - if (readContextDelegate != null) { - readContextDelegate.close(); - } - session.close(); - delegateClosed = true; - } - } - } - } - - private static class AutoClosingReadTransaction - extends AutoClosingReadContext implements ReadOnlyTransaction { - - AutoClosingReadTransaction( - Function txnSupplier, - SessionPool sessionPool, - SessionReplacementHandler sessionReplacementHandler, - I session, - boolean isSingleUse) { - super(txnSupplier, sessionPool, sessionReplacementHandler, session, isSingleUse); - } - - @Override - public Timestamp getReadTimestamp() { - return getReadContextDelegate().getReadTimestamp(); - } - } - - interface SessionReplacementHandler { - T replaceSession(SessionNotFoundException notFound, T sessionFuture); - - T denyListSession(RetryOnDifferentGrpcChannelException retryException, T sessionFuture); - } - - class PooledSessionReplacementHandler implements SessionReplacementHandler { - @Override - public PooledSessionFuture replaceSession( - SessionNotFoundException e, PooledSessionFuture session) { - if (!options.isFailIfSessionNotFound() && session.get().isAllowReplacing()) { - synchronized (lock) { - numSessionsInUse--; - numSessionsReleased++; - checkedOutSessions.remove(session); - markedCheckedOutSessions.remove(session); - } - session.leakedException = null; - invalidateSession(session.get()); - return getSession(); - } else { - throw e; - } - } - - @Override - public PooledSessionFuture denyListSession( - RetryOnDifferentGrpcChannelException retryException, PooledSessionFuture session) { - // The feature was not enabled when the session pool was created. - if (denyListedChannels == null) { - throw SpannerExceptionFactory.asSpannerException(retryException.getCause()); - } - - int channel = session.get().getChannel(); - synchronized (lock) { - // Calculate the size manually by iterating over the possible keys. We do this because the - // size of a cache can be stale, and manually checking for each possible key will make sure - // we get the correct value, and it will update the cache. - int currentSize = 0; - for (int i = 0; i < numChannels; i++) { - if (denyListedChannels.getIfPresent(i) != null) { - currentSize++; - } - } - if (currentSize < numChannels - 1) { - denyListedChannels.put(channel, DENY_LISTED); - } else { - // We have now deny-listed all channels. Give up and just throw the original error. - throw SpannerExceptionFactory.asSpannerException(retryException.getCause()); - } - } - session.get().releaseToPosition = Position.LAST; - session.close(); - return getSession(); - } - } - - interface SessionNotFoundHandler { - /** - * Handles the given {@link SessionNotFoundException} by possibly converting it to a different - * exception that should be thrown. - */ - SpannerException handleSessionNotFound(SessionNotFoundException notFound); - } - - static class SessionPoolResultSet extends ForwardingResultSet { - private final SessionNotFoundHandler handler; - - private SessionPoolResultSet(SessionNotFoundHandler handler, ResultSet delegate) { - super(delegate); - this.handler = Preconditions.checkNotNull(handler); - } - - @Override - public boolean next() { - try { - return super.next(); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - } - - static class AsyncSessionPoolResultSet extends ForwardingAsyncResultSet { - private final SessionNotFoundHandler handler; - - private AsyncSessionPoolResultSet(SessionNotFoundHandler handler, AsyncResultSet delegate) { - super(delegate); - this.handler = Preconditions.checkNotNull(handler); - } - - @Override - public ApiFuture setCallback(Executor executor, final ReadyCallback callback) { - return super.setCallback( - executor, - resultSet -> { - try { - return callback.cursorReady(resultSet); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - }); - } - - @Override - public boolean next() { - try { - return super.next(); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - - @Override - public CursorState tryNext() { - try { - return super.tryNext(); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - } - - /** - * {@link TransactionContext} that is used in combination with an {@link - * AutoClosingTransactionManager}. This {@link TransactionContext} handles {@link - * SessionNotFoundException}s by replacing the underlying session with a fresh one, and then - * throws an {@link AbortedException} to trigger the retry-loop that has been created by the - * caller. - */ - static class SessionPoolTransactionContext implements TransactionContext { - private final SessionNotFoundHandler handler; - final TransactionContext delegate; - - SessionPoolTransactionContext(SessionNotFoundHandler handler, TransactionContext delegate) { - this.handler = Preconditions.checkNotNull(handler); - this.delegate = delegate; - } - - @Override - public ResultSet read( - String table, KeySet keys, Iterable columns, ReadOption... options) { - return new SessionPoolResultSet(handler, delegate.read(table, keys, columns, options)); - } - - @Override - public AsyncResultSet readAsync( - String table, KeySet keys, Iterable columns, ReadOption... options) { - return new AsyncSessionPoolResultSet( - handler, delegate.readAsync(table, keys, columns, options)); - } - - @Override - public ResultSet readUsingIndex( - String table, String index, KeySet keys, Iterable columns, ReadOption... options) { - return new SessionPoolResultSet( - handler, delegate.readUsingIndex(table, index, keys, columns, options)); - } - - @Override - public AsyncResultSet readUsingIndexAsync( - String table, String index, KeySet keys, Iterable columns, ReadOption... options) { - return new AsyncSessionPoolResultSet( - handler, delegate.readUsingIndexAsync(table, index, keys, columns, options)); - } - - @Override - public Struct readRow(String table, Key key, Iterable columns) { - try { - return delegate.readRow(table, key, columns); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - - @Override - public ApiFuture readRowAsync(String table, Key key, Iterable columns) { - try (AsyncResultSet rs = readAsync(table, KeySet.singleKey(key), columns)) { - return ApiFutures.catching( - AbstractReadContext.consumeSingleRowAsync(rs), - SessionNotFoundException.class, - input -> { - throw handler.handleSessionNotFound(input); - }, - MoreExecutors.directExecutor()); - } - } - - @Override - public void buffer(Mutation mutation) { - delegate.buffer(mutation); - } - - @Override - public ApiFuture bufferAsync(Mutation mutation) { - return delegate.bufferAsync(mutation); - } - - @Override - public Struct readRowUsingIndex(String table, String index, Key key, Iterable columns) { - try { - return delegate.readRowUsingIndex(table, index, key, columns); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - - @Override - public ApiFuture readRowUsingIndexAsync( - String table, String index, Key key, Iterable columns) { - try (AsyncResultSet rs = readUsingIndexAsync(table, index, KeySet.singleKey(key), columns)) { - return ApiFutures.catching( - AbstractReadContext.consumeSingleRowAsync(rs), - SessionNotFoundException.class, - input -> { - throw handler.handleSessionNotFound(input); - }, - MoreExecutors.directExecutor()); - } - } - - @Override - public void buffer(Iterable mutations) { - delegate.buffer(mutations); - } - - @Override - public ApiFuture bufferAsync(Iterable mutations) { - return delegate.bufferAsync(mutations); - } - - @SuppressWarnings("deprecation") - @Override - public ResultSetStats analyzeUpdate( - Statement statement, QueryAnalyzeMode analyzeMode, UpdateOption... options) { - try (ResultSet resultSet = analyzeUpdateStatement(statement, analyzeMode, options)) { - return resultSet.getStats(); - } - } - - @Override - public ResultSet analyzeUpdateStatement( - Statement statement, QueryAnalyzeMode analyzeMode, UpdateOption... options) { - try { - return delegate.analyzeUpdateStatement(statement, analyzeMode, options); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - - @Override - public long executeUpdate(Statement statement, UpdateOption... options) { - try { - return delegate.executeUpdate(statement, options); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - - @Override - public ApiFuture executeUpdateAsync(Statement statement, UpdateOption... options) { - return ApiFutures.catching( - delegate.executeUpdateAsync(statement, options), - SessionNotFoundException.class, - input -> { - throw handler.handleSessionNotFound(input); - }, - MoreExecutors.directExecutor()); - } - - @Override - public long[] batchUpdate(Iterable statements, UpdateOption... options) { - try { - return delegate.batchUpdate(statements, options); - } catch (SessionNotFoundException e) { - throw handler.handleSessionNotFound(e); - } - } - - @Override - public ApiFuture batchUpdateAsync( - Iterable statements, UpdateOption... options) { - return ApiFutures.catching( - delegate.batchUpdateAsync(statements, options), - SessionNotFoundException.class, - input -> { - throw handler.handleSessionNotFound(input); - }, - MoreExecutors.directExecutor()); - } - - @Override - public ResultSet executeQuery(Statement statement, QueryOption... options) { - return new SessionPoolResultSet(handler, delegate.executeQuery(statement, options)); - } - - @Override - public AsyncResultSet executeQueryAsync(Statement statement, QueryOption... options) { - return new AsyncSessionPoolResultSet(handler, delegate.executeQueryAsync(statement, options)); - } - - @Override - public ResultSet analyzeQuery(Statement statement, QueryAnalyzeMode queryMode) { - return new SessionPoolResultSet(handler, delegate.analyzeQuery(statement, queryMode)); - } - - @Override - public void close() { - delegate.close(); - } - } - - private static class AutoClosingTransactionManager - implements TransactionManager, SessionNotFoundHandler { - private TransactionManager delegate; - private T session; - private final SessionReplacementHandler sessionReplacementHandler; - private final TransactionOption[] options; - private boolean closed; - private boolean restartedAfterSessionNotFound; - - AutoClosingTransactionManager( - T session, - SessionReplacementHandler sessionReplacementHandler, - TransactionOption... options) { - this.session = session; - this.options = options; - this.sessionReplacementHandler = sessionReplacementHandler; - } - - @Override - public TransactionContext begin() { - this.delegate = session.get().transactionManager(options); - // This cannot throw a SessionNotFoundException, as it does not call the BeginTransaction RPC. - // Instead, the BeginTransaction will be included with the first statement of the transaction. - return internalBegin(); - } - - private TransactionContext internalBegin() { - TransactionContext res = new SessionPoolTransactionContext(this, delegate.begin()); - session.get().markUsed(); - return res; - } - - @Override - public SpannerException handleSessionNotFound(SessionNotFoundException notFoundException) { - session = sessionReplacementHandler.replaceSession(notFoundException, session); - CachedSession cachedSession = session.get(); - delegate = cachedSession.getDelegate().transactionManager(options); - restartedAfterSessionNotFound = true; - return createAbortedExceptionWithMinimalRetryDelay(notFoundException); - } - - private static SpannerException createAbortedExceptionWithMinimalRetryDelay( - SessionNotFoundException notFoundException) { - return SpannerExceptionFactory.newSpannerException( - ErrorCode.ABORTED, - notFoundException.getMessage(), - SpannerExceptionFactory.createAbortedExceptionWithRetryDelay( - notFoundException.getMessage(), notFoundException, 0, 1)); - } - - @Override - public void commit() { - try { - delegate.commit(); - } catch (SessionNotFoundException e) { - throw handleSessionNotFound(e); - } finally { - if (getState() != TransactionState.ABORTED) { - close(); - } - } - } - - @Override - public void rollback() { - try { - delegate.rollback(); - } finally { - close(); - } - } - - @Override - public TransactionContext resetForRetry() { - while (true) { - try { - if (restartedAfterSessionNotFound) { - TransactionContext res = new SessionPoolTransactionContext(this, delegate.begin()); - restartedAfterSessionNotFound = false; - return res; - } else { - return new SessionPoolTransactionContext(this, delegate.resetForRetry()); - } - } catch (SessionNotFoundException e) { - session = sessionReplacementHandler.replaceSession(e, session); - CachedSession cachedSession = session.get(); - delegate = cachedSession.getDelegate().transactionManager(options); - restartedAfterSessionNotFound = true; - } - } - } - - @Override - public Timestamp getCommitTimestamp() { - return delegate.getCommitTimestamp(); - } - - @Override - public CommitResponse getCommitResponse() { - return delegate.getCommitResponse(); - } - - @Override - public void close() { - if (closed) { - return; - } - closed = true; - try { - if (delegate != null) { - delegate.close(); - } - } finally { - session.close(); - } - } - - @Override - public TransactionState getState() { - if (restartedAfterSessionNotFound) { - return TransactionState.ABORTED; - } else { - return delegate == null ? null : delegate.getState(); - } - } - } - - /** - * {@link TransactionRunner} that automatically handles {@link SessionNotFoundException}s by - * replacing the underlying session and then restarts the transaction. - */ - private static final class SessionPoolTransactionRunner - implements TransactionRunner { - - private I session; - private final SessionReplacementHandler sessionReplacementHandler; - private final TransactionOption[] options; - private TransactionRunner runner; - - private SessionPoolTransactionRunner( - I session, - SessionReplacementHandler sessionReplacementHandler, - TransactionOption... options) { - this.session = session; - this.options = options; - this.sessionReplacementHandler = sessionReplacementHandler; - } - - private TransactionRunner getRunner() { - if (this.runner == null) { - this.runner = session.get().readWriteTransaction(options); - } - return runner; - } - - @Override - @Nullable - public T run(TransactionCallable callable) { - try { - T result; - while (true) { - try { - result = getRunner().run(callable); - break; - } catch (SessionNotFoundException e) { - session = sessionReplacementHandler.replaceSession(e, session); - CachedSession cachedSession = session.get(); - runner = cachedSession.getDelegate().readWriteTransaction(); - } catch (RetryOnDifferentGrpcChannelException retryException) { - // This error is thrown by the RetryOnDifferentGrpcChannelErrorHandler in the specific - // case that a transaction failed with a DEADLINE_EXCEEDED error. This is an - // experimental feature that is disabled by default, and that can be removed in a - // future version. - session = sessionReplacementHandler.denyListSession(retryException, session); - CachedSession cachedSession = session.get(); - runner = cachedSession.getDelegate().readWriteTransaction(); - } - } - session.get().markUsed(); - return result; - } catch (SpannerException e) { - //noinspection ThrowableNotThrown - session.get().setLastException(e); - throw e; - } finally { - session.close(); - } - } - - @Override - public Timestamp getCommitTimestamp() { - return getRunner().getCommitTimestamp(); - } - - @Override - public CommitResponse getCommitResponse() { - return getRunner().getCommitResponse(); - } - - @Override - public TransactionRunner allowNestedTransaction() { - getRunner().allowNestedTransaction(); - return this; - } - } - - private static class SessionPoolAsyncRunner implements AsyncRunner { - private volatile I session; - private final SessionReplacementHandler sessionReplacementHandler; - private final TransactionOption[] options; - private SettableApiFuture commitResponse; - - private SessionPoolAsyncRunner( - I session, - SessionReplacementHandler sessionReplacementHandler, - TransactionOption... options) { - this.session = session; - this.options = options; - this.sessionReplacementHandler = sessionReplacementHandler; - } - - @Override - public ApiFuture runAsync(final AsyncWork work, Executor executor) { - commitResponse = SettableApiFuture.create(); - final SettableApiFuture res = SettableApiFuture.create(); - executor.execute( - () -> { - SpannerException exception = null; - R r = null; - AsyncRunner runner = null; - while (true) { - SpannerException se = null; - try { - runner = session.get().runAsync(options); - r = runner.runAsync(work, MoreExecutors.directExecutor()).get(); - break; - } catch (ExecutionException e) { - se = asSpannerException(e.getCause()); - } catch (InterruptedException e) { - se = SpannerExceptionFactory.propagateInterrupt(e); - } catch (Throwable t) { - se = SpannerExceptionFactory.newSpannerException(t); - } finally { - if (se instanceof SessionNotFoundException) { - try { - // The replaceSession method will re-throw the SessionNotFoundException if the - // session cannot be replaced with a new one. - session = - sessionReplacementHandler.replaceSession( - (SessionNotFoundException) se, session); - } catch (SessionNotFoundException e) { - exception = e; - break; - } - } else { - exception = se; - break; - } - } - } - session.get().markUsed(); - session.close(); - setCommitResponse(runner); - if (exception != null) { - res.setException(exception); - } else { - res.set(r); - } - }); - return res; - } - - private void setCommitResponse(AsyncRunner delegate) { - try { - commitResponse.set(delegate.getCommitResponse().get()); - } catch (Throwable t) { - commitResponse.setException(t); - } - } - - @Override - public ApiFuture getCommitTimestamp() { - checkState(commitResponse != null, "runAsync() has not yet been called"); - return ApiFutures.transform( - commitResponse, CommitResponse::getCommitTimestamp, MoreExecutors.directExecutor()); - } - - @Override - public ApiFuture getCommitResponse() { - checkState(commitResponse != null, "runAsync() has not yet been called"); - return commitResponse; - } - } - - // Exception class used just to track the stack trace at the point when a session was handed out - // from the pool. - final class LeakedSessionException extends RuntimeException { - private static final long serialVersionUID = 1451131180314064914L; - - private LeakedSessionException() { - super("Session was checked out from the pool at " + clock.instant()); - } - - private LeakedSessionException(String message) { - super(message); - } - } - - private enum SessionState { - AVAILABLE, - BUSY, - CLOSING, - } - - private PooledSessionFuture createPooledSessionFuture( - ListenableFuture future, ISpan span) { - return new PooledSessionFuture(future, span); - } - - /** Wrapper class for the {@link SessionFuture} implementations. */ - interface SessionFutureWrapper extends DatabaseClient { - - /** Method to resolve {@link SessionFuture} implementation for different use-cases. */ - T get(); - - default Dialect getDialect() { - return get().getDialect(); - } - - default String getDatabaseRole() { - return get().getDatabaseRole(); - } - - default Timestamp write(Iterable mutations) throws SpannerException { - return get().write(mutations); - } - - default CommitResponse writeWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - return get().writeWithOptions(mutations, options); - } - - default Timestamp writeAtLeastOnce(Iterable mutations) throws SpannerException { - return get().writeAtLeastOnce(mutations); - } - - default CommitResponse writeAtLeastOnceWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - return get().writeAtLeastOnceWithOptions(mutations, options); - } - - default ServerStream batchWriteAtLeastOnce( - Iterable mutationGroups, TransactionOption... options) - throws SpannerException { - return get().batchWriteAtLeastOnce(mutationGroups, options); - } - - default ReadContext singleUse() { - return get().singleUse(); - } - - default ReadContext singleUse(TimestampBound bound) { - return get().singleUse(bound); - } - - default ReadOnlyTransaction singleUseReadOnlyTransaction() { - return get().singleUseReadOnlyTransaction(); - } - - default ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { - return get().singleUseReadOnlyTransaction(bound); - } - - default ReadOnlyTransaction readOnlyTransaction() { - return get().readOnlyTransaction(); - } - - default ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { - return get().readOnlyTransaction(bound); - } - - default TransactionRunner readWriteTransaction(TransactionOption... options) { - return get().readWriteTransaction(options); - } - - default TransactionManager transactionManager(TransactionOption... options) { - return get().transactionManager(options); - } - - default AsyncRunner runAsync(TransactionOption... options) { - return get().runAsync(options); - } - - default AsyncTransactionManager transactionManagerAsync(TransactionOption... options) { - return get().transactionManagerAsync(options); - } - - default long executePartitionedUpdate(Statement stmt, UpdateOption... options) { - return get().executePartitionedUpdate(stmt, options); - } - } - - class PooledSessionFutureWrapper implements SessionFutureWrapper { - PooledSessionFuture pooledSessionFuture; - - public PooledSessionFutureWrapper(PooledSessionFuture pooledSessionFuture) { - this.pooledSessionFuture = pooledSessionFuture; - } - - @Override - public PooledSessionFuture get() { - return this.pooledSessionFuture; - } - } - - interface SessionFuture extends Session { - - /** - * We need to do this because every implementation of {@link SessionFuture} today extends {@link - * SimpleForwardingListenableFuture}. The get() method in parent {@link - * java.util.concurrent.Future} classes specifies checked exceptions in method signature. - * - *

    This method is a workaround we don't have to handle checked exceptions specified by other - * interfaces. - */ - CachedSession get(); - - default void addListener(Runnable listener, Executor exec) {} - } - - class PooledSessionFuture extends SimpleForwardingListenableFuture - implements SessionFuture { - - private volatile LeakedSessionException leakedException; - private final AtomicBoolean inUse = new AtomicBoolean(); - private final CountDownLatch initialized = new CountDownLatch(1); - private final ISpan span; - - @VisibleForTesting - PooledSessionFuture(ListenableFuture delegate, ISpan span) { - super(delegate); - this.span = span; - } - - @VisibleForTesting - void clearLeakedException() { - this.leakedException = null; - } - - private void markCheckedOut() { - if (options.isTrackStackTraceOfSessionCheckout()) { - this.leakedException = new LeakedSessionException(); - synchronized (SessionPool.this.lock) { - SessionPool.this.markedCheckedOutSessions.add(this); - } - } - } - - @Override - public Timestamp write(Iterable mutations) throws SpannerException { - return writeWithOptions(mutations).getCommitTimestamp(); - } - - @Override - public CommitResponse writeWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - try { - return get().writeWithOptions(mutations, options); - } finally { - close(); - } - } - - @Override - public Timestamp writeAtLeastOnce(Iterable mutations) throws SpannerException { - return writeAtLeastOnceWithOptions(mutations).getCommitTimestamp(); - } - - @Override - public CommitResponse writeAtLeastOnceWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - try { - return get().writeAtLeastOnceWithOptions(mutations, options); - } finally { - close(); - } - } - - @Override - public ServerStream batchWriteAtLeastOnce( - Iterable mutationGroups, TransactionOption... options) - throws SpannerException { - try { - return get().batchWriteAtLeastOnce(mutationGroups, options); - } finally { - close(); - } - } - - @Override - public ReadContext singleUse() { - try { - return new AutoClosingReadContext<>( - session -> { - PooledSession ps = session.get(); - return ps.delegate.singleUse(); - }, - SessionPool.this, - pooledSessionReplacementHandler, - this, - true); - } catch (Exception e) { - close(); - throw e; - } - } - - @Override - public ReadContext singleUse(final TimestampBound bound) { - try { - return new AutoClosingReadContext<>( - session -> { - PooledSession ps = session.get(); - return ps.delegate.singleUse(bound); - }, - SessionPool.this, - pooledSessionReplacementHandler, - this, - true); - } catch (Exception e) { - close(); - throw e; - } - } - - @Override - public ReadOnlyTransaction singleUseReadOnlyTransaction() { - return internalReadOnlyTransaction( - session -> { - PooledSession ps = session.get(); - return ps.delegate.singleUseReadOnlyTransaction(); - }, - true); - } - - @Override - public ReadOnlyTransaction singleUseReadOnlyTransaction(final TimestampBound bound) { - return internalReadOnlyTransaction( - session -> { - PooledSession ps = session.get(); - return ps.delegate.singleUseReadOnlyTransaction(bound); - }, - true); - } - - @Override - public ReadOnlyTransaction readOnlyTransaction() { - return internalReadOnlyTransaction( - session -> { - PooledSession ps = session.get(); - return ps.delegate.readOnlyTransaction(); - }, - false); - } - - @Override - public ReadOnlyTransaction readOnlyTransaction(final TimestampBound bound) { - return internalReadOnlyTransaction( - session -> { - PooledSession ps = session.get(); - return ps.delegate.readOnlyTransaction(bound); - }, - false); - } - - private ReadOnlyTransaction internalReadOnlyTransaction( - Function transactionSupplier, - boolean isSingleUse) { - try { - return new AutoClosingReadTransaction<>( - transactionSupplier, - SessionPool.this, - pooledSessionReplacementHandler, - this, - isSingleUse); - } catch (Exception e) { - close(); - throw e; - } - } - - @Override - public TransactionRunner readWriteTransaction(TransactionOption... options) { - return new SessionPoolTransactionRunner<>(this, pooledSessionReplacementHandler, options); - } - - @Override - public TransactionManager transactionManager(TransactionOption... options) { - return new AutoClosingTransactionManager<>(this, pooledSessionReplacementHandler, options); - } - - @Override - public AsyncRunner runAsync(TransactionOption... options) { - return new SessionPoolAsyncRunner<>(this, pooledSessionReplacementHandler, options); - } - - @Override - public AsyncTransactionManager transactionManagerAsync(TransactionOption... options) { - return new SessionPoolAsyncTransactionManager<>( - pooledSessionReplacementHandler, this, options); - } - - @Override - public long executePartitionedUpdate(Statement stmt, UpdateOption... options) { - try { - return get(true).executePartitionedUpdate(stmt, options); - } finally { - close(); - } - } - - @Override - public String getName() { - return get().getName(); - } - - @Override - public void close() { - try { - asyncClose().get(); - } catch (InterruptedException e) { - throw SpannerExceptionFactory.propagateInterrupt(e); - } catch (ExecutionException e) { - throw asSpannerException(e.getCause()); - } - } - - @Override - public ApiFuture asyncClose() { - try { - PooledSession delegate = getOrNull(); - if (delegate != null) { - return delegate.asyncClose(); - } - } finally { - synchronized (lock) { - leakedException = null; - checkedOutSessions.remove(this); - markedCheckedOutSessions.remove(this); - } - } - return ApiFutures.immediateFuture(Empty.getDefaultInstance()); - } - - private PooledSession getOrNull() { - try { - return get(); - } catch (Throwable t) { - return null; - } - } - - @Override - public PooledSession get() { - return get(false); - } - - PooledSession get(final boolean eligibleForLongRunning) { - if (inUse.compareAndSet(false, true)) { - PooledSession res = null; - try { - res = super.get(); - } catch (Throwable e) { - // ignore the exception as it will be handled by the call to super.get() below. - } - if (res != null) { - res.markBusy(span); - span.addAnnotation("Using Session", "sessionId", res.getName()); - synchronized (lock) { - incrementNumSessionsInUse(); - checkedOutSessions.add(this); - } - res.eligibleForLongRunning = eligibleForLongRunning; - } - initialized.countDown(); - } - try { - initialized.await(); - return super.get(); - } catch (ExecutionException e) { - throw SpannerExceptionFactory.newSpannerException(e.getCause()); - } catch (InterruptedException e) { - throw SpannerExceptionFactory.propagateInterrupt(e); - } - } - } - - interface CachedSession extends Session { - - SessionImpl getDelegate(); - - void markBusy(ISpan span); - - void markUsed(); - - SpannerException setLastException(SpannerException exception); - - AsyncTransactionManagerImpl transactionManagerAsync(TransactionOption... options); - - void setAllowReplacing(boolean b); - } - - class PooledSession implements CachedSession { - - @VisibleForTesting final SessionImpl delegate; - private volatile SpannerException lastException; - private volatile boolean allowReplacing = true; - - /** - * This ensures that the session is added at a random position in the pool the first time it is - * actually added to the pool. - */ - @GuardedBy("lock") - private Position releaseToPosition = initialReleasePosition; - - /** - * Property to mark if the session is eligible to be long-running. This can only be true if the - * session is executing certain types of transactions (for ex - Partitioned DML) which can be - * long-running. By default, most transaction types are not expected to be long-running and - * hence this value is false. - */ - private volatile boolean eligibleForLongRunning = false; - - /** - * Property to mark if the session is no longer part of the session pool. For ex - A session - * which is long-running gets cleaned up and removed from the pool. - */ - private volatile boolean isRemovedFromPool = false; - - /** - * Property to mark if a leaked session exception is already logged. Given a session maintainer - * thread runs repeatedly at a defined interval, this property allows us to ensure that an - * exception is logged only once per leaked session. This is to avoid noisy repeated logs around - * session leaks for long-running sessions. - */ - private volatile boolean isLeakedExceptionLogged = false; - - @GuardedBy("lock") - private SessionState state; - - private PooledSession(SessionImpl delegate) { - this.delegate = Preconditions.checkNotNull(delegate); - this.state = SessionState.AVAILABLE; - - // initialise the lastUseTime field for each session. - this.markUsed(); - } - - int getChannel() { - Long channelHint = (Long) delegate.getOptions().get(SpannerRpc.Option.CHANNEL_HINT); - return channelHint == null - ? 0 - : (int) (channelHint % sessionClient.getSpanner().getOptions().getNumChannels()); - } - - @Override - public String toString() { - return getName(); - } - - @VisibleForTesting - @Override - public void setAllowReplacing(boolean allowReplacing) { - this.allowReplacing = allowReplacing; - } - - @VisibleForTesting - void setEligibleForLongRunning(boolean eligibleForLongRunning) { - this.eligibleForLongRunning = eligibleForLongRunning; - } - - @Override - public Timestamp write(Iterable mutations) throws SpannerException { - return writeWithOptions(mutations).getCommitTimestamp(); - } - - @Override - public CommitResponse writeWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - try { - markUsed(); - return delegate.writeWithOptions(mutations, options); - } catch (SpannerException e) { - throw lastException = e; - } - } - - @Override - public Timestamp writeAtLeastOnce(Iterable mutations) throws SpannerException { - return writeAtLeastOnceWithOptions(mutations).getCommitTimestamp(); - } - - @Override - public CommitResponse writeAtLeastOnceWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - try { - markUsed(); - return delegate.writeAtLeastOnceWithOptions(mutations, options); - } catch (SpannerException e) { - throw lastException = e; - } - } - - @Override - public ServerStream batchWriteAtLeastOnce( - Iterable mutationGroups, TransactionOption... options) - throws SpannerException { - try { - markUsed(); - return delegate.batchWriteAtLeastOnce(mutationGroups, options); - } catch (SpannerException e) { - throw lastException = e; - } - } - - @Override - public long executePartitionedUpdate(Statement stmt, UpdateOption... options) - throws SpannerException { - try { - markUsed(); - return delegate.executePartitionedUpdate(stmt, options); - } catch (SpannerException e) { - throw lastException = e; - } - } - - @Override - public ReadContext singleUse() { - return delegate.singleUse(); - } - - @Override - public ReadContext singleUse(TimestampBound bound) { - return delegate.singleUse(bound); - } - - @Override - public ReadOnlyTransaction singleUseReadOnlyTransaction() { - return delegate.singleUseReadOnlyTransaction(); - } - - @Override - public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { - return delegate.singleUseReadOnlyTransaction(bound); - } - - @Override - public ReadOnlyTransaction readOnlyTransaction() { - return delegate.readOnlyTransaction(); - } - - @Override - public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { - return delegate.readOnlyTransaction(bound); - } - - @Override - public TransactionRunner readWriteTransaction(TransactionOption... options) { - return delegate.readWriteTransaction(options); - } - - @Override - public AsyncRunner runAsync(TransactionOption... options) { - return delegate.runAsync(options); - } - - @Override - public AsyncTransactionManagerImpl transactionManagerAsync(TransactionOption... options) { - return delegate.transactionManagerAsync(options); - } - - @Override - public ApiFuture asyncClose() { - close(); - return ApiFutures.immediateFuture(Empty.getDefaultInstance()); - } - - @Override - public void close() { - synchronized (lock) { - numSessionsInUse--; - numSessionsReleased++; - } - if ((lastException != null && isSessionNotFound(lastException)) || isRemovedFromPool) { - invalidateSession(this); - } else { - if (isDatabaseOrInstanceNotFound(lastException)) { - // Mark this session pool as no longer valid and then release the session into the pool as - // there is nothing we can do with it anyways. - synchronized (lock) { - SessionPool.this.resourceNotFoundException = - MoreObjects.firstNonNull( - SessionPool.this.resourceNotFoundException, - (ResourceNotFoundException) lastException); - } - } - lastException = null; - isRemovedFromPool = false; - if (state != SessionState.CLOSING) { - state = SessionState.AVAILABLE; - } - releaseSession(this, false); - } - } - - @Override - public String getName() { - return delegate.getName(); - } - - private void keepAlive() { - markUsed(); - final ISpan previousSpan = delegate.getCurrentSpan(); - delegate.setCurrentSpan(tracer.getBlankSpan()); - try (ResultSet resultSet = - delegate - .singleUse(TimestampBound.ofMaxStaleness(60, TimeUnit.SECONDS)) - .executeQuery(Statement.newBuilder("SELECT 1").build())) { - resultSet.next(); - } finally { - delegate.setCurrentSpan(previousSpan); - } - } - - private void determineDialectAsync(final SettableFuture dialect) { - Preconditions.checkNotNull(dialect); - executor.submit( - () -> { - try { - dialect.set(determineDialect()); - } catch (Throwable t) { - // Catch-all as we want to propagate all exceptions to anyone who might be interested - // in the database dialect, and there's nothing sensible that we can do with it here. - dialect.setException(t); - } finally { - releaseSession(this, false); - } - }); - } - - private Dialect determineDialect() { - try (ResultSet dialectResultSet = - delegate.singleUse().executeQuery(DETERMINE_DIALECT_STATEMENT)) { - if (dialectResultSet.next()) { - return Dialect.fromName(dialectResultSet.getString(0)); - } else { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.NOT_FOUND, "No dialect found for database"); - } - } - } - - @Override - public SessionImpl getDelegate() { - return this.delegate; - } - - @Override - public void markBusy(ISpan span) { - this.delegate.setCurrentSpan(span); - this.state = SessionState.BUSY; - } - - private void markClosing() { - this.state = SessionState.CLOSING; - } - - @Override - public void markUsed() { - delegate.markUsed(clock.instant()); - } - - @Override - public SpannerException setLastException(SpannerException exception) { - this.lastException = exception; - return exception; - } - - boolean isAllowReplacing() { - return this.allowReplacing; - } - - @Override - public TransactionManager transactionManager(TransactionOption... options) { - return delegate.transactionManager(options); - } - } - - private final class WaiterFuture extends ForwardingListenableFuture { - private static final long MAX_SESSION_WAIT_TIMEOUT = 240_000L; - private final SettableFuture waiter = SettableFuture.create(); - - @Override - @Nonnull - protected ListenableFuture delegate() { - return waiter; - } - - private void put(PooledSession session) { - waiter.set(session); - } - - private void put(SpannerException e) { - waiter.setException(e); - } - - @Override - public PooledSession get() { - long currentTimeout = options.getInitialWaitForSessionTimeoutMillis(); - while (true) { - ISpan span = tracer.spanBuilder(WAIT_FOR_SESSION); - try (IScope ignore = tracer.withSpan(span)) { - PooledSession s = - pollUninterruptiblyWithTimeout(currentTimeout, options.getAcquireSessionTimeout()); - if (s == null) { - // Set the status to DEADLINE_EXCEEDED and retry. - numWaiterTimeouts.incrementAndGet(); - tracer.getCurrentSpan().setStatus(ErrorCode.DEADLINE_EXCEEDED); - currentTimeout = Math.min(currentTimeout * 2, MAX_SESSION_WAIT_TIMEOUT); - } else { - return s; - } - } catch (Exception e) { - if (e instanceof SpannerException - && ErrorCode.RESOURCE_EXHAUSTED.equals(((SpannerException) e).getErrorCode())) { - numWaiterTimeouts.incrementAndGet(); - tracer.getCurrentSpan().setStatus(ErrorCode.RESOURCE_EXHAUSTED); - } - span.setStatus(e); - throw e; - } finally { - span.end(); - } - } - } - - private PooledSession pollUninterruptiblyWithTimeout( - long timeoutMillis, Duration acquireSessionTimeout) { - boolean interrupted = false; - try { - while (true) { - try { - return acquireSessionTimeout == null - ? waiter.get(timeoutMillis, TimeUnit.MILLISECONDS) - : waiter.get(acquireSessionTimeout.toMillis(), TimeUnit.MILLISECONDS); - } catch (InterruptedException e) { - interrupted = true; - } catch (TimeoutException e) { - if (acquireSessionTimeout != null) { - SpannerException exception = - SpannerExceptionFactory.newSpannerException( - ErrorCode.RESOURCE_EXHAUSTED, - "Timed out after waiting " - + acquireSessionTimeout.toMillis() - + "ms for acquiring session. To mitigate error SessionPoolOptions#setAcquireSessionTimeout(Duration) to set a higher timeout" - + " or increase the number of sessions in the session pool.\n" - + createCheckedOutSessionsStackTraces()); - if (waiter.setException(exception)) { - // Only throw the exception if setting it on the waiter was successful. The - // waiter.setException(..) method returns false if some other thread in the meantime - // called waiter.set(..), which means that a session became available between the - // time that the TimeoutException was thrown and now. - throw exception; - } - } - return null; - } catch (ExecutionException e) { - throw SpannerExceptionFactory.newSpannerException(e.getCause()); - } - } - } finally { - if (interrupted) { - Thread.currentThread().interrupt(); - } - } - } - } - - /** - * Background task to maintain the pool. Tasks: - * - *

      - *
    • Removes idle sessions from the pool. Sessions that go above MinSessions that have not - * been used for the last 55 minutes will be removed from the pool. These will automatically - * be garbage collected by the backend. - *
    • Keeps alive sessions that have not been used for a user configured time in order to keep - * MinSessions sessions alive in the pool at any time. The keep-alive traffic is smeared out - * over a window of 10 minutes to avoid bursty traffic. - *
    • Removes unexpected long running transactions from the pool. Only certain transaction - * types (for ex - Partitioned DML / Batch Reads) can be long running. This tasks checks the - * sessions which have been inactive for a longer than usual duration (for ex - 60 minutes) - * and removes such sessions from the pool. - *
    - */ - final class PoolMaintainer { - - // Length of the window in millis over which we keep track of maximum number of concurrent - // sessions in use. - private final Duration windowLength = Duration.ofMillis(TimeUnit.MINUTES.toMillis(10)); - // Frequency of the timer loop. - @VisibleForTesting final long loopFrequency = options.getLoopFrequency(); - // Number of loop iterations in which we need to close all the sessions waiting for closure. - @VisibleForTesting final long numClosureCycles = windowLength.toMillis() / loopFrequency; - private final Duration keepAliveMillis = - Duration.ofMillis(TimeUnit.MINUTES.toMillis(options.getKeepAliveIntervalMinutes())); - // Number of loop iterations in which we need to keep alive all the sessions - @VisibleForTesting final long numKeepAliveCycles = keepAliveMillis.toMillis() / loopFrequency; - - /** - * Variable maintaining the last execution time of the long-running transaction cleanup task. - * - *

    The long-running transaction cleanup needs to be performed every X minutes. The X minutes - * recurs multiple times within the invocation of the pool maintainer thread. For ex - If the - * main thread runs every 10s and the long-running transaction clean-up needs to be performed - * every 2 minutes, then we need to keep a track of when was the last time that this task - * executed and makes sure we only execute it every 2 minutes and not every 10 seconds. - */ - @VisibleForTesting Instant lastExecutionTime; - - /** - * The previous numSessionsAcquired seen by the maintainer. This is used to calculate the - * transactions per second, which again is used to determine whether to randomize the order of - * the session pool. - */ - private long prevNumSessionsAcquired; - - boolean closed = false; - - @GuardedBy("lock") - ScheduledFuture scheduledFuture; - - @GuardedBy("lock") - boolean running; - - void init() { - lastExecutionTime = clock.instant(); - - // Scheduled pool maintenance worker. - synchronized (lock) { - scheduledFuture = - executor.scheduleAtFixedRate( - this::maintainPool, loopFrequency, loopFrequency, TimeUnit.MILLISECONDS); - } - } - - void close() { - synchronized (lock) { - if (!closed) { - closed = true; - scheduledFuture.cancel(false); - if (!running) { - decrementPendingClosures(1); - } - } - } - } - - boolean isClosed() { - synchronized (lock) { - return closed; - } - } - - // Does various pool maintenance activities. - void maintainPool() { - synchronized (lock) { - if (SessionPool.this.isClosed()) { - return; - } - running = true; - if (loopFrequency >= 1000L) { - SessionPool.this.transactionsPerSecond = - (SessionPool.this.numSessionsAcquired - prevNumSessionsAcquired) - / (loopFrequency / 1000L); - } - this.prevNumSessionsAcquired = SessionPool.this.numSessionsAcquired; - } - Instant currTime = clock.instant(); - removeIdleSessions(currTime); - // Now go over all the remaining sessions and see if they need to be kept alive explicitly. - keepAliveSessions(currTime); - replenishPool(); - synchronized (lock) { - running = false; - if (SessionPool.this.isClosed()) { - decrementPendingClosures(1); - } - } - removeLongRunningSessions(currTime); - } - - private void removeIdleSessions(Instant currTime) { - synchronized (lock) { - // Determine the minimum last use time for a session to be deemed to still be alive. Remove - // all sessions that have a lastUseTime before that time, unless it would cause us to go - // below MinSessions. - Instant minLastUseTime = currTime.minus(options.getRemoveInactiveSessionAfterDuration()); - Iterator iterator = sessions.descendingIterator(); - while (iterator.hasNext()) { - PooledSession session = iterator.next(); - if (session.delegate.getLastUseTime() != null - && session.delegate.getLastUseTime().isBefore(minLastUseTime)) { - if (session.state != SessionState.CLOSING) { - boolean isRemoved = removeFromPool(session); - if (isRemoved) { - numIdleSessionsRemoved++; - if (idleSessionRemovedListener != null) { - idleSessionRemovedListener.apply(session); - } - } - iterator.remove(); - } - } - } - } - } - - private void keepAliveSessions(Instant currTime) { - long numSessionsToKeepAlive = 0; - synchronized (lock) { - if (numSessionsInUse >= (options.getMinSessions() + options.getMaxIdleSessions())) { - // At least MinSessions are in use, so we don't have to ping any sessions. - return; - } - // In each cycle only keep alive a subset of sessions to prevent burst of traffic. - numSessionsToKeepAlive = - (long) - Math.ceil( - (double) - ((options.getMinSessions() + options.getMaxIdleSessions()) - - numSessionsInUse) - / numKeepAliveCycles); - } - // Now go over all the remaining sessions and see if they need to be kept alive explicitly. - Instant keepAliveThreshold = currTime.minus(keepAliveMillis); - - // Keep chugging till there is no session that needs to be kept alive. - while (numSessionsToKeepAlive > 0) { - Tuple sessionToKeepAlive; - synchronized (lock) { - sessionToKeepAlive = findSessionToKeepAlive(sessions, keepAliveThreshold, 0); - } - if (sessionToKeepAlive == null) { - break; - } - try { - logger.log(Level.FINE, "Keeping alive session " + sessionToKeepAlive.x().getName()); - numSessionsToKeepAlive--; - sessionToKeepAlive.x().keepAlive(); - releaseSession(sessionToKeepAlive); - } catch (SpannerException e) { - handleException(e, sessionToKeepAlive); - } - } - } - - private void replenishPool() { - synchronized (lock) { - // If we have gone below min pool size, create that many sessions. - int sessionCount = options.getMinSessions() - (totalSessions() + numSessionsBeingCreated); - if (sessionCount > 0) { - createSessions(getAllowedCreateSessions(sessionCount), false); - } - } - } - - // cleans up sessions which are unexpectedly long-running. - void removeLongRunningSessions(Instant currentTime) { - try { - if (SessionPool.this.isClosed()) { - return; - } - final InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - options.getInactiveTransactionRemovalOptions(); - final Instant minExecutionTime = - lastExecutionTime.plus(inactiveTransactionRemovalOptions.getExecutionFrequency()); - if (currentTime.isBefore(minExecutionTime)) { - return; - } - lastExecutionTime = currentTime; // update this only after we have decided to execute task - if (options.closeInactiveTransactions() - || options.warnInactiveTransactions() - || options.warnAndCloseInactiveTransactions()) { - removeLongRunningSessions(currentTime, inactiveTransactionRemovalOptions); - } - } catch (final Throwable t) { - logger.log(Level.WARNING, "Failed removing long running transactions", t); - } - } - - private void removeLongRunningSessions( - final Instant currentTime, - final InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions) { - synchronized (lock) { - final double usedSessionsRatio = getRatioOfSessionsInUse(); - if (usedSessionsRatio > inactiveTransactionRemovalOptions.getUsedSessionsRatioThreshold()) { - Iterator iterator = checkedOutSessions.iterator(); - while (iterator.hasNext()) { - final PooledSessionFuture sessionFuture = iterator.next(); - // the below get() call on future object is non-blocking since checkedOutSessions - // collection is populated only when the get() method in {@code PooledSessionFuture} is - // called. - final PooledSession session = (PooledSession) sessionFuture.get(); - final Duration durationFromLastUse = - Duration.between(session.getDelegate().getLastUseTime(), currentTime); - if (!session.eligibleForLongRunning - && durationFromLastUse.compareTo( - inactiveTransactionRemovalOptions.getIdleTimeThreshold()) - > 0) { - if ((options.warnInactiveTransactions() || options.warnAndCloseInactiveTransactions()) - && !session.isLeakedExceptionLogged) { - if (options.warnAndCloseInactiveTransactions()) { - logger.log( - Level.WARNING, - String.format("Removing long-running session => %s", session.getName()), - sessionFuture.leakedException); - session.isLeakedExceptionLogged = true; - } else if (options.warnInactiveTransactions()) { - logger.log( - Level.WARNING, - String.format( - "Detected long-running session => %s. To automatically remove " - + "long-running sessions, set SessionOption ActionOnInactiveTransaction " - + "to WARN_AND_CLOSE by invoking setWarnAndCloseIfInactiveTransactions() method.", - session.getName()), - sessionFuture.leakedException); - session.isLeakedExceptionLogged = true; - } - } - if ((options.closeInactiveTransactions() - || options.warnAndCloseInactiveTransactions()) - && session.state != SessionState.CLOSING) { - final boolean isRemoved = removeFromPool(session); - if (isRemoved) { - session.isRemovedFromPool = true; - numLeakedSessionsRemoved++; - if (longRunningSessionRemovedListener != null) { - longRunningSessionRemovedListener.apply(session); - } - } - iterator.remove(); - } - } - } - } - } - } - } - - enum Position { - FIRST, - LAST, - RANDOM - } - - /** - * This statement is (currently) used to determine the dialect of the database that is used by the - * session pool. This statement is subject to change when the INFORMATION_SCHEMA contains a table - * where the dialect of the database can be read directly, and any tests that want to detect the - * specific 'determine dialect statement' should rely on this constant instead of the actual - * value. - */ - @VisibleForTesting - static final Statement DETERMINE_DIALECT_STATEMENT = - Statement.newBuilder( - "SELECT 'POSTGRESQL' AS DIALECT\n" - + "FROM INFORMATION_SCHEMA.SCHEMATA\n" - + "WHERE SCHEMA_NAME='information_schema'\n" - + "UNION ALL\n" - + "SELECT 'GOOGLE_STANDARD_SQL' AS DIALECT\n" - + "FROM INFORMATION_SCHEMA.SCHEMATA\n" - + "WHERE SCHEMA_NAME='INFORMATION_SCHEMA' AND CATALOG_NAME=''") - .build(); - - private final SessionPoolOptions options; - private final SettableFuture dialect = SettableFuture.create(); - private final String databaseRole; - private final SessionClient sessionClient; - private final int numChannels; - private final ScheduledExecutorService executor; - private final ExecutorFactory executorFactory; - - final PoolMaintainer poolMaintainer; - private final Clock clock; - /** - * initialReleasePosition determines where in the pool sessions are added when they are released - * into the pool the first time. This is always RANDOM in production, but some tests use FIRST to - * be able to verify the order of sessions in the pool. Using RANDOM ensures that we do not get an - * unbalanced session pool where all sessions belonging to one gRPC channel are added to the same - * region in the pool. - */ - private final Position initialReleasePosition; - - private final Object lock = new Object(); - private final Random random = new Random(); - - @GuardedBy("lock") - private boolean detectDialectStarted; - - @GuardedBy("lock") - private int pendingClosure; - - @GuardedBy("lock") - private SettableFuture closureFuture; - - @GuardedBy("lock") - private ClosedException closedException; - - @GuardedBy("lock") - private ResourceNotFoundException resourceNotFoundException; - - @GuardedBy("lock") - private final LinkedList sessions = new LinkedList<>(); - - @GuardedBy("lock") - private final Queue waiters = new LinkedList<>(); - - @GuardedBy("lock") - private int numSessionsBeingCreated = 0; - - @GuardedBy("lock") - private int numSessionsInUse = 0; - - @GuardedBy("lock") - private int maxSessionsInUse = 0; - - @GuardedBy("lock") - private long numSessionsAcquired = 0; - - @GuardedBy("lock") - private long numSessionsReleased = 0; - - @GuardedBy("lock") - private long numIdleSessionsRemoved = 0; - - @GuardedBy("lock") - private long transactionsPerSecond = 0L; - - @GuardedBy("lock") - private long numLeakedSessionsRemoved = 0; - - private final AtomicLong numWaiterTimeouts = new AtomicLong(); - - @GuardedBy("lock") - private final Set allSessions = new HashSet<>(); - - @GuardedBy("lock") - @VisibleForTesting - final Set checkedOutSessions = new HashSet<>(); - - @GuardedBy("lock") - private final Set markedCheckedOutSessions = new HashSet<>(); - - private final SessionConsumer sessionConsumer = new SessionConsumerImpl(); - - @VisibleForTesting Function idleSessionRemovedListener; - - @VisibleForTesting Function longRunningSessionRemovedListener; - private final CountDownLatch waitOnMinSessionsLatch; - private final PooledSessionReplacementHandler pooledSessionReplacementHandler = - new PooledSessionReplacementHandler(); - - private static final Object DENY_LISTED = new Object(); - private final Cache denyListedChannels; - - /** - * Create a session pool with the given options and for the given database. It will also start - * eagerly creating sessions if {@link SessionPoolOptions#getMinSessions()} is greater than 0. - * Return pool is immediately ready for use, though getting a session might block for sessions to - * be created. - */ - static SessionPool createPool( - SpannerOptions spannerOptions, - SessionClient sessionClient, - TraceWrapper tracer, - List labelValues, - Attributes attributes, - AtomicLong numMultiplexedSessionsAcquired, - AtomicLong numMultiplexedSessionsReleased) { - final SessionPoolOptions sessionPoolOptions = spannerOptions.getSessionPoolOptions(); - - // A clock instance is passed in {@code SessionPoolOptions} in order to allow mocking via tests. - final Clock poolMaintainerClock = sessionPoolOptions.getPoolMaintainerClock(); - return createPool( - sessionPoolOptions, - spannerOptions.getDatabaseRole(), - ((GrpcTransportOptions) spannerOptions.getTransportOptions()).getExecutorFactory(), - sessionClient, - poolMaintainerClock == null ? new Clock() : poolMaintainerClock, - Position.RANDOM, - Metrics.getMetricRegistry(), - tracer, - labelValues, - spannerOptions.getOpenTelemetry(), - attributes, - numMultiplexedSessionsAcquired, - numMultiplexedSessionsReleased); - } - - static SessionPool createPool( - SessionPoolOptions poolOptions, - ExecutorFactory executorFactory, - SessionClient sessionClient, - TraceWrapper tracer, - OpenTelemetry openTelemetry) { - return createPool( - poolOptions, - executorFactory, - sessionClient, - new Clock(), - Position.RANDOM, - tracer, - openTelemetry); - } - - static SessionPool createPool( - SessionPoolOptions poolOptions, - ExecutorFactory executorFactory, - SessionClient sessionClient, - Clock clock, - Position initialReleasePosition, - TraceWrapper tracer, - OpenTelemetry openTelemetry) { - return createPool( - poolOptions, - null, - executorFactory, - sessionClient, - clock, - initialReleasePosition, - Metrics.getMetricRegistry(), - tracer, - SPANNER_DEFAULT_LABEL_VALUES, - openTelemetry, - null, - new AtomicLong(), - new AtomicLong()); - } - - static SessionPool createPool( - SessionPoolOptions poolOptions, - String databaseRole, - ExecutorFactory executorFactory, - SessionClient sessionClient, - Clock clock, - Position initialReleasePosition, - MetricRegistry metricRegistry, - TraceWrapper tracer, - List labelValues, - OpenTelemetry openTelemetry, - Attributes attributes, - AtomicLong numMultiplexedSessionsAcquired, - AtomicLong numMultiplexedSessionsReleased) { - SessionPool pool = - new SessionPool( - poolOptions, - databaseRole, - executorFactory, - executorFactory.get(), - sessionClient, - clock, - initialReleasePosition, - metricRegistry, - tracer, - labelValues, - openTelemetry, - attributes, - numMultiplexedSessionsAcquired, - numMultiplexedSessionsReleased); - pool.initPool(); - return pool; - } - - private SessionPool( - SessionPoolOptions options, - String databaseRole, - ExecutorFactory executorFactory, - ScheduledExecutorService executor, - SessionClient sessionClient, - Clock clock, - Position initialReleasePosition, - MetricRegistry metricRegistry, - TraceWrapper tracer, - List labelValues, - OpenTelemetry openTelemetry, - Attributes attributes, - AtomicLong numMultiplexedSessionsAcquired, - AtomicLong numMultiplexedSessionsReleased) { - this.options = options; - this.databaseRole = databaseRole; - this.executorFactory = executorFactory; - this.executor = executor; - this.sessionClient = sessionClient; - this.numChannels = sessionClient.getSpanner().getOptions().getNumChannels(); - this.clock = clock; - this.initialReleasePosition = initialReleasePosition; - this.poolMaintainer = new PoolMaintainer(); - this.tracer = tracer; - this.initOpenCensusMetricsCollection( - metricRegistry, - labelValues, - numMultiplexedSessionsAcquired, - numMultiplexedSessionsReleased); - this.initOpenTelemetryMetricsCollection( - openTelemetry, attributes, numMultiplexedSessionsAcquired, numMultiplexedSessionsReleased); - this.waitOnMinSessionsLatch = - options.getMinSessions() > 0 ? new CountDownLatch(1) : new CountDownLatch(0); - this.denyListedChannels = - RetryOnDifferentGrpcChannelErrorHandler.isEnabled() - ? CacheBuilder.newBuilder() - .expireAfterWrite(java.time.Duration.ofMinutes(1)) - .maximumSize(this.numChannels) - .concurrencyLevel(1) - .ticker( - new Ticker() { - @Override - public long read() { - return TimeUnit.NANOSECONDS.convert( - clock.instant().toEpochMilli(), TimeUnit.MILLISECONDS); - } - }) - .build() - : null; - } - - /** - * @return the {@link Dialect} of the underlying database. This method will block until the - * dialect is available. It will potentially execute one or two RPCs to get the dialect if - * necessary: One to create a session if there are no sessions in the pool (yet), and one to - * query the database for the dialect that is used. It is recommended that clients that always - * need to know the dialect set {@link - * SessionPoolOptions.Builder#setAutoDetectDialect(boolean)} to true. This will ensure that - * the dialect is fetched automatically in a background task when a session pool is created. - */ - Dialect getDialect() { - boolean mustDetectDialect = false; - synchronized (lock) { - if (!detectDialectStarted) { - mustDetectDialect = true; - detectDialectStarted = true; - } - } - if (mustDetectDialect) { - try (PooledSessionFuture session = getSession()) { - dialect.set(((PooledSession) session.get()).determineDialect()); - } - } - try { - return dialect.get(60L, TimeUnit.SECONDS); - } catch (ExecutionException executionException) { - throw asSpannerException(executionException); - } catch (InterruptedException interruptedException) { - throw SpannerExceptionFactory.propagateInterrupt(interruptedException); - } catch (TimeoutException timeoutException) { - throw SpannerExceptionFactory.propagateTimeout(timeoutException); - } - } - - PooledSessionReplacementHandler getPooledSessionReplacementHandler() { - return pooledSessionReplacementHandler; - } - - @Nullable - public String getDatabaseRole() { - return databaseRole; - } - - @VisibleForTesting - int getNumberOfSessionsInUse() { - synchronized (lock) { - return numSessionsInUse; - } - } - - @VisibleForTesting - int getMaxSessionsInUse() { - synchronized (lock) { - return maxSessionsInUse; - } - } - - @VisibleForTesting - double getRatioOfSessionsInUse() { - synchronized (lock) { - final int maxSessions = options.getMaxSessions(); - if (maxSessions == 0) { - return 0; - } - return (double) numSessionsInUse / maxSessions; - } - } - - boolean removeFromPool(PooledSession session) { - synchronized (lock) { - if (isClosed()) { - decrementPendingClosures(1); - return false; - } - session.markClosing(); - allSessions.remove(session); - return true; - } - } - - long numIdleSessionsRemoved() { - synchronized (lock) { - return numIdleSessionsRemoved; - } - } - - @VisibleForTesting - long numLeakedSessionsRemoved() { - synchronized (lock) { - return numLeakedSessionsRemoved; - } - } - - @VisibleForTesting - int getNumberOfSessionsInPool() { - synchronized (lock) { - return sessions.size(); - } - } - - @VisibleForTesting - int getNumberOfSessionsBeingCreated() { - synchronized (lock) { - return numSessionsBeingCreated; - } - } - - @VisibleForTesting - int getTotalSessionsPlusNumSessionsBeingCreated() { - synchronized (lock) { - return numSessionsBeingCreated + allSessions.size(); - } - } - - @VisibleForTesting - long getNumWaiterTimeouts() { - return numWaiterTimeouts.get(); - } - - private void initPool() { - synchronized (lock) { - poolMaintainer.init(); - if (options.getMinSessions() > 0) { - createSessions(options.getMinSessions(), true); - } - } - } - - private boolean isClosed() { - synchronized (lock) { - return closureFuture != null; - } - } - - private void handleException(SpannerException e, Tuple session) { - if (isSessionNotFound(e)) { - invalidateSession(session.x()); - } else { - releaseSession(session); - } - } - - private boolean isSessionNotFound(SpannerException e) { - return e.getErrorCode() == ErrorCode.NOT_FOUND && e.getMessage().contains("Session not found"); - } - - private boolean isDatabaseOrInstanceNotFound(SpannerException e) { - return e instanceof DatabaseNotFoundException || e instanceof InstanceNotFoundException; - } - - private void invalidateSession(PooledSession session) { - synchronized (lock) { - if (isClosed()) { - decrementPendingClosures(1); - return; - } - allSessions.remove(session); - // replenish the pool. - createSessions(getAllowedCreateSessions(1), false); - } - } - - private Tuple findSessionToKeepAlive( - Queue queue, Instant keepAliveThreshold, int numAlreadyChecked) { - int numChecked = 0; - Iterator iterator = queue.iterator(); - while (iterator.hasNext() - && (numChecked + numAlreadyChecked) - < (options.getMinSessions() + options.getMaxIdleSessions() - numSessionsInUse)) { - PooledSession session = iterator.next(); - if (session.delegate.getLastUseTime() != null - && session.delegate.getLastUseTime().isBefore(keepAliveThreshold)) { - iterator.remove(); - return Tuple.of(session, numChecked); - } - numChecked++; - } - return null; - } - - /** @return true if this {@link SessionPool} is still valid. */ - boolean isValid() { - synchronized (lock) { - return closureFuture == null && resourceNotFoundException == null; - } - } - - /** - * Returns a multiplexed session. The method fallbacks to a regular session if {@link - * SessionPoolOptions#getUseMultiplexedSession} is not set. - */ - PooledSessionFutureWrapper getMultiplexedSessionWithFallback() throws SpannerException { - return new PooledSessionFutureWrapper(getSession()); - } - - /** - * Returns a session to be used for requests to spanner. This method is always non-blocking and - * returns a {@link PooledSessionFuture}. In case the pool is exhausted and {@link - * SessionPoolOptions#isFailIfPoolExhausted()} has been set, it will throw an exception. Returned - * session must be closed by calling {@link Session#close()}. - * - *

    Implementation strategy: - * - *

      - *
    1. If a read session is available, return that. - *
    2. Otherwise if a session can be created, fire a creation request. - *
    3. Wait for a session to become available. Note that this can be unblocked either by a - * session being returned to the pool or a new session being created. - *
    - */ - PooledSessionFuture getSession() throws SpannerException { - ISpan span = tracer.getCurrentSpan(); - span.addAnnotation("Acquiring session"); - WaiterFuture waiter = null; - PooledSession sess = null; - synchronized (lock) { - if (closureFuture != null) { - span.addAnnotation("Pool has been closed"); - throw new IllegalStateException("Pool has been closed", closedException); - } - if (resourceNotFoundException != null) { - span.addAnnotation("Database has been deleted"); - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.NOT_FOUND, - String.format( - "The session pool has been invalidated because a previous RPC returned 'Database not found': %s", - resourceNotFoundException.getMessage()), - resourceNotFoundException); - } - if (denyListedChannels != null - && denyListedChannels.size() > 0 - && denyListedChannels.size() < numChannels) { - // There are deny-listed channels. Get a session that is not affiliated with a deny-listed - // channel. - for (PooledSession session : sessions) { - if (denyListedChannels.getIfPresent(session.getChannel()) == null) { - sessions.remove(session); - sess = session; - break; - } - // Size is cached and can change after calling getIfPresent. - if (denyListedChannels.size() == 0) { - break; - } - } - } - if (sess == null) { - sess = sessions.poll(); - } - if (sess == null) { - span.addAnnotation("No session available"); - maybeCreateSession(); - waiter = new WaiterFuture(); - waiters.add(waiter); - } else { - span.addAnnotation("Acquired session"); - } - return checkoutSession(span, sess, waiter); - } - } - - private PooledSessionFuture checkoutSession( - final ISpan span, final PooledSession readySession, WaiterFuture waiter) { - ListenableFuture sessionFuture; - if (waiter != null) { - logger.log( - Level.FINE, - "No session available in the pool. Blocking for one to become available/created"); - span.addAnnotation("Waiting for a session to come available"); - sessionFuture = waiter; - } else { - SettableFuture fut = SettableFuture.create(); - fut.set(readySession); - sessionFuture = fut; - } - PooledSessionFuture res = createPooledSessionFuture(sessionFuture, span); - res.markCheckedOut(); - return res; - } - - private void incrementNumSessionsInUse() { - synchronized (lock) { - if (maxSessionsInUse < ++numSessionsInUse) { - maxSessionsInUse = numSessionsInUse; - } - numSessionsAcquired++; - } - } - - private void maybeCreateSession() { - ISpan span = tracer.getCurrentSpan(); - boolean throwResourceExhaustedException = false; - synchronized (lock) { - if (numWaiters() >= numSessionsBeingCreated) { - if (canCreateSession()) { - span.addAnnotation("Creating sessions"); - createSessions(getAllowedCreateSessions(options.getIncStep()), false); - } else if (options.isFailIfPoolExhausted()) { - throwResourceExhaustedException = true; - } - } - } - if (!throwResourceExhaustedException) { - return; - } - span.addAnnotation("Pool exhausted. Failing"); - - String message = - "No session available in the pool. Maximum number of sessions in the pool can be" - + " overridden by invoking SessionPoolOptions#Builder#setMaxSessions. Client can be made to block" - + " rather than fail by setting SessionPoolOptions#Builder#setBlockIfPoolExhausted.\n" - + createCheckedOutSessionsStackTraces(); - throw newSpannerException(ErrorCode.RESOURCE_EXHAUSTED, message); - } - - private StringBuilder createCheckedOutSessionsStackTraces() { - List currentlyCheckedOutSessions; - synchronized (lock) { - currentlyCheckedOutSessions = new ArrayList<>(this.markedCheckedOutSessions); - } - - // Create the error message without holding the lock, as we are potentially looping through a - // large set, and analyzing a large number of stack traces. - StringBuilder stackTraces = - new StringBuilder( - "There are currently " - + currentlyCheckedOutSessions.size() - + " sessions checked out:\n\n"); - if (options.isTrackStackTraceOfSessionCheckout()) { - for (PooledSessionFuture session : currentlyCheckedOutSessions) { - if (session.leakedException != null) { - StringWriter writer = new StringWriter(); - PrintWriter printWriter = new PrintWriter(writer); - session.leakedException.printStackTrace(printWriter); - stackTraces.append(writer).append("\n\n"); - } - } - } - return stackTraces; - } - - private void releaseSession(Tuple sessionWithPosition) { - releaseSession(sessionWithPosition.x(), false, sessionWithPosition.y()); - } - - private void releaseSession(PooledSession session, boolean isNewSession) { - releaseSession(session, isNewSession, null); - } - - /** Releases a session back to the pool. This might cause one of the waiters to be unblocked. */ - private void releaseSession( - PooledSession session, boolean isNewSession, @Nullable Integer position) { - Preconditions.checkNotNull(session); - synchronized (lock) { - if (closureFuture != null) { - return; - } - if (waiters.isEmpty()) { - // There are no pending waiters. - // Add to a random position if the transactions per second is high or the head of the - // session pool already contains many sessions with the same channel as this one. - if (session.releaseToPosition != Position.RANDOM && shouldRandomize()) { - session.releaseToPosition = Position.RANDOM; - } else if (session.releaseToPosition == Position.FIRST && isUnbalanced(session)) { - session.releaseToPosition = Position.RANDOM; - } else if (session.releaseToPosition == Position.RANDOM - && !isNewSession - && checkedOutSessions.size() <= 2) { - // Do not randomize if there are few other sessions checked out and this session has been - // used. This ensures that this session will be re-used for the next transaction, which is - // more efficient. - session.releaseToPosition = options.getReleaseToPosition(); - } - if (position != null) { - // Make sure we use a valid position, as the number of sessions could have changed in the - // meantime. - int actualPosition = Math.min(position, sessions.size()); - sessions.add(actualPosition, session); - } else if (session.releaseToPosition == Position.RANDOM && !sessions.isEmpty()) { - // A session should only be added at a random position the first time it is added to - // the pool or if the pool was deemed unbalanced. All following releases into the pool - // should normally happen at the default release position (unless the pool is again deemed - // to be unbalanced and the insertion would happen at the front of the pool). - session.releaseToPosition = options.getReleaseToPosition(); - int pos = random.nextInt(sessions.size() + 1); - sessions.add(pos, session); - } else if (session.releaseToPosition == Position.LAST) { - sessions.addLast(session); - } else { - sessions.addFirst(session); - } - session.releaseToPosition = options.getReleaseToPosition(); - } else { - waiters.poll().put(session); - } - } - } - - /** - * Returns true if the position where we return the session should be random if: - * - *
      - *
    1. The current TPS is higher than the configured threshold. - *
    2. AND the number of sessions checked out is larger than the number of channels. - *
    - * - * The second check prevents the session pool from being randomized when the application is - * running many small, quick queries using a small number of parallel threads. This can cause a - * high TPS, without actually having a high degree of parallelism. - */ - @VisibleForTesting - boolean shouldRandomize() { - return this.options.getRandomizePositionQPSThreshold() > 0 - && this.transactionsPerSecond >= this.options.getRandomizePositionQPSThreshold() - && this.numSessionsInUse >= this.numChannels; - } - - private boolean isUnbalanced(PooledSession session) { - int channel = session.getChannel(); - int numChannels = sessionClient.getSpanner().getOptions().getNumChannels(); - return isUnbalanced(channel, this.sessions, this.checkedOutSessions, numChannels); - } - - /** - * Returns true if the given list of sessions is considered unbalanced when compared to the - * sessionChannel that is about to be added to the pool. - * - *

    The method returns true if all the following is true: - * - *

      - *
    1. The list of sessions is not empty. - *
    2. The number of checked out sessions is > 2. - *
    3. The number of channels being used by the pool is > 1. - *
    4. And at least one of the following is true: - *
        - *
      1. The first numChannels sessions in the list of sessions contains more than 2 - * sessions that use the same channel as the one being added. - *
      2. The list of currently checked out sessions contains more than 2 times the the - * number of sessions with the same channel as the one being added than it should in - * order for it to be perfectly balanced. Perfectly balanced in this case means that - * the list should preferably contain size/numChannels sessions of each channel. - *
      - *
    - * - * @param channelOfSessionBeingAdded the channel number being used by the session that is about to - * be released into the pool - * @param sessions the list of all sessions in the pool - * @param checkedOutSessions the currently checked out sessions of the pool - * @param numChannels the number of channels in use - * @return true if the pool is considered unbalanced, and false otherwise - */ - @VisibleForTesting - static boolean isUnbalanced( - int channelOfSessionBeingAdded, - List sessions, - Set checkedOutSessions, - int numChannels) { - // Do not re-balance the pool if the number of checked out sessions is low, as it is - // better to re-use sessions as much as possible in a low-QPS scenario. - if (sessions.isEmpty() || checkedOutSessions.size() <= 2) { - return false; - } - if (numChannels == 1) { - return false; - } - - // Ideally, the first numChannels sessions in the pool should contain exactly one session for - // each channel. - // Check if the first numChannels sessions at the head of the pool already contain more than 2 - // sessions that use the same channel as this one. If so, we re-balance. - // We also re-balance the pool in the specific case that the pool uses 2 channels and the first - // two sessions use those two channels. - int maxSessionsAtHeadOfPool = Math.min(numChannels, 3); - int count = 0; - for (int i = 0; i < Math.min(numChannels, sessions.size()); i++) { - PooledSession otherSession = sessions.get(i); - if (channelOfSessionBeingAdded == otherSession.getChannel()) { - count++; - if (count >= maxSessionsAtHeadOfPool) { - return true; - } - } - } - // Ideally, the use of a channel in the checked out sessions is exactly - // numCheckedOut / numChannels - // We check whether we are more than a factor two away from that perfect distribution. - // If we are, then we re-balance. - count = 0; - int checkedOutThreshold = Math.max(2, 2 * checkedOutSessions.size() / numChannels); - for (PooledSessionFuture otherSession : checkedOutSessions) { - if (otherSession.isDone() && channelOfSessionBeingAdded == otherSession.get().getChannel()) { - count++; - if (count > checkedOutThreshold) { - return true; - } - } - } - return false; - } - - private void handleCreateSessionsFailure(SpannerException e, int count) { - synchronized (lock) { - for (int i = 0; i < count; i++) { - if (!waiters.isEmpty()) { - waiters.poll().put(e); - } else { - break; - } - } - if (!dialect.isDone()) { - dialect.setException(e); - } - if (isDatabaseOrInstanceNotFound(e)) { - setResourceNotFoundException((ResourceNotFoundException) e); - poolMaintainer.close(); - } - } - } - - void setResourceNotFoundException(ResourceNotFoundException e) { - this.resourceNotFoundException = MoreObjects.firstNonNull(this.resourceNotFoundException, e); - } - - private void decrementPendingClosures(int count) { - pendingClosure -= count; - if (pendingClosure == 0) { - closureFuture.set(null); - } - } - - /** - * Close all the sessions. Once this method is invoked {@link #getSession()} will start throwing - * {@code IllegalStateException}. The returned future blocks till all the sessions created in this - * pool have been closed. - */ - ListenableFuture closeAsync(ClosedException closedException) { - ListenableFuture retFuture = null; - synchronized (lock) { - if (closureFuture != null) { - throw new IllegalStateException("Close has already been invoked", this.closedException); - } - this.closedException = closedException; - // Fail all pending waiters. - WaiterFuture waiter = waiters.poll(); - while (waiter != null) { - waiter.put(newSpannerException(ErrorCode.INTERNAL, "Client has been closed")); - waiter = waiters.poll(); - } - closureFuture = SettableFuture.create(); - retFuture = closureFuture; - - pendingClosure = totalSessions() + numSessionsBeingCreated; - - if (!poolMaintainer.isClosed()) { - pendingClosure += 1; // For pool maintenance thread - poolMaintainer.close(); - } - - sessions.clear(); - for (PooledSessionFuture session : checkedOutSessions) { - if (session.leakedException != null) { - if (options.isFailOnSessionLeak()) { - throw session.leakedException; - } else { - logger.log(Level.WARNING, "Leaked session", session.leakedException); - } - } else { - String message = - "Leaked session. " - + "Call SessionOptions.Builder#setTrackStackTraceOfSessionCheckout(true) to start " - + "tracking the call stack trace of the thread that checked out the session."; - if (options.isFailOnSessionLeak()) { - throw new LeakedSessionException(message); - } else { - logger.log(Level.WARNING, message); - } - } - } - for (final PooledSession session : ImmutableList.copyOf(allSessions)) { - if (session.state != SessionState.CLOSING) { - closeSessionAsync(session); - } - } - - // Nothing to be closed, mark as complete - if (pendingClosure == 0) { - closureFuture.set(null); - } - } - - retFuture.addListener(() -> executorFactory.release(executor), MoreExecutors.directExecutor()); - return retFuture; - } - - private int numWaiters() { - synchronized (lock) { - return waiters.size(); - } - } - - @VisibleForTesting - int totalSessions() { - synchronized (lock) { - return allSessions.size(); - } - } - - private ApiFuture closeSessionAsync(final PooledSession sess) { - ApiFuture res = sess.delegate.asyncClose(); - res.addListener( - () -> { - synchronized (lock) { - allSessions.remove(sess); - if (isClosed()) { - decrementPendingClosures(1); - return; - } - // Create a new session if needed to unblock some waiter. - if (numWaiters() > numSessionsBeingCreated) { - createSessions( - getAllowedCreateSessions(numWaiters() - numSessionsBeingCreated), false); - } - } - }, - MoreExecutors.directExecutor()); - return res; - } - - /** - * Returns the minimum of the wanted number of sessions that the caller wants to create and the - * actual max number that may be created at this moment. - */ - private int getAllowedCreateSessions(int wantedSessions) { - synchronized (lock) { - return Math.min( - wantedSessions, options.getMaxSessions() - (totalSessions() + numSessionsBeingCreated)); - } - } - - private boolean canCreateSession() { - synchronized (lock) { - return totalSessions() + numSessionsBeingCreated < options.getMaxSessions(); - } - } - - private void createSessions(final int sessionCount, boolean distributeOverChannels) { - logger.log(Level.FINE, String.format("Creating %d sessions", sessionCount)); - synchronized (lock) { - numSessionsBeingCreated += sessionCount; - try { - // Create a batch of sessions. The actual session creation can be split into multiple gRPC - // calls and the session consumer consumes the returned sessions as they become available. - // The batchCreateSessions method automatically spreads the sessions evenly over all - // available channels. - sessionClient.asyncBatchCreateSessions( - sessionCount, distributeOverChannels, sessionConsumer); - } catch (Throwable t) { - // Expose this to customer via a metric. - numSessionsBeingCreated -= sessionCount; - if (isClosed()) { - decrementPendingClosures(sessionCount); - } - handleCreateSessionsFailure(newSpannerException(t), sessionCount); - } - } - } - - /** - * {@link SessionConsumer} that receives the created sessions from a {@link SessionClient} and - * releases these into the pool. The session pool only needs one instance of this, as all sessions - * should be returned to the same pool regardless of what triggered the creation of the sessions. - */ - class SessionConsumerImpl implements SessionConsumer { - /** Release a new session to the pool. */ - @Override - public void onSessionReady(SessionImpl session) { - PooledSession pooledSession = null; - boolean closeSession = false; - synchronized (lock) { - int minSessions = options.getMinSessions(); - pooledSession = new PooledSession(session); - numSessionsBeingCreated--; - if (closureFuture != null) { - closeSession = true; - } else { - Preconditions.checkState(totalSessions() <= options.getMaxSessions() - 1); - allSessions.add(pooledSession); - if (allSessions.size() >= minSessions) { - waitOnMinSessionsLatch.countDown(); - } - if (options.isAutoDetectDialect() && !detectDialectStarted) { - // Get the dialect of the underlying database if that has not yet been done. Note that - // this method will release the session into the pool once it is done. - detectDialectStarted = true; - pooledSession.determineDialectAsync(SessionPool.this.dialect); - } else { - // Release the session to a random position in the pool to prevent the case that a batch - // of sessions that are affiliated with the same channel are all placed sequentially in - // the pool. - releaseSession(pooledSession, true); - } - } - } - if (closeSession) { - closeSessionAsync(pooledSession); - } - } - - /** - * Informs waiters for a session that session creation failed. The exception will propagate to - * the waiters as a {@link SpannerException}. - */ - @Override - public void onSessionCreateFailure(Throwable t, int createFailureForSessionCount) { - synchronized (lock) { - numSessionsBeingCreated -= createFailureForSessionCount; - if (numSessionsBeingCreated == 0) { - // Don't continue to block if no more sessions are being created. - waitOnMinSessionsLatch.countDown(); - } - if (isClosed()) { - decrementPendingClosures(createFailureForSessionCount); - } - handleCreateSessionsFailure(newSpannerException(t), createFailureForSessionCount); - } - } - } - - /** - * Initializes and creates Spanner session relevant metrics using OpenCensus. When coupled with an - * exporter, it allows users to monitor client behavior. - */ - private void initOpenCensusMetricsCollection( - MetricRegistry metricRegistry, - List labelValues, - AtomicLong numMultiplexedSessionsAcquired, - AtomicLong numMultiplexedSessionsReleased) { - if (!SpannerOptions.isEnabledOpenCensusMetrics()) { - return; - } - DerivedLongGauge maxInUseSessionsMetric = - metricRegistry.addDerivedLongGauge( - METRIC_PREFIX + MAX_IN_USE_SESSIONS, - MetricOptions.builder() - .setDescription(MAX_IN_USE_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS) - .build()); - - DerivedLongGauge maxAllowedSessionsMetric = - metricRegistry.addDerivedLongGauge( - METRIC_PREFIX + MAX_ALLOWED_SESSIONS, - MetricOptions.builder() - .setDescription(MAX_ALLOWED_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS) - .build()); - - DerivedLongCumulative sessionsTimeouts = - metricRegistry.addDerivedLongCumulative( - METRIC_PREFIX + GET_SESSION_TIMEOUTS, - MetricOptions.builder() - .setDescription(SESSIONS_TIMEOUTS_DESCRIPTION) - .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS) - .build()); - - DerivedLongCumulative numAcquiredSessionsMetric = - metricRegistry.addDerivedLongCumulative( - METRIC_PREFIX + NUM_ACQUIRED_SESSIONS, - MetricOptions.builder() - .setDescription(NUM_ACQUIRED_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS) - .build()); - - DerivedLongCumulative numReleasedSessionsMetric = - metricRegistry.addDerivedLongCumulative( - METRIC_PREFIX + NUM_RELEASED_SESSIONS, - MetricOptions.builder() - .setDescription(NUM_RELEASED_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS) - .build()); - - DerivedLongGauge numSessionsInPoolMetric = - metricRegistry.addDerivedLongGauge( - METRIC_PREFIX + NUM_SESSIONS_IN_POOL, - MetricOptions.builder() - .setDescription(NUM_SESSIONS_IN_POOL_DESCRIPTION) - .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS_WITH_TYPE) - .build()); - - // The value of a maxSessionsInUse is observed from a callback function. This function is - // invoked whenever metrics are collected. - maxInUseSessionsMetric.removeTimeSeries(labelValues); - maxInUseSessionsMetric.createTimeSeries( - labelValues, this, sessionPool -> sessionPool.maxSessionsInUse); - - // The value of a maxSessions is observed from a callback function. This function is invoked - // whenever metrics are collected. - maxAllowedSessionsMetric.removeTimeSeries(labelValues); - maxAllowedSessionsMetric.createTimeSeries( - labelValues, options, SessionPoolOptions::getMaxSessions); - - // The value of a numWaiterTimeouts is observed from a callback function. This function is - // invoked whenever metrics are collected. - sessionsTimeouts.removeTimeSeries(labelValues); - sessionsTimeouts.createTimeSeries(labelValues, this, SessionPool::getNumWaiterTimeouts); - - List labelValuesWithRegularSessions = new ArrayList<>(labelValues); - List labelValuesWithMultiplexedSessions = new ArrayList<>(labelValues); - labelValuesWithMultiplexedSessions.add(LabelValue.create("true")); - labelValuesWithRegularSessions.add(LabelValue.create("false")); - - numAcquiredSessionsMetric.removeTimeSeries(labelValuesWithRegularSessions); - numAcquiredSessionsMetric.createTimeSeries( - labelValuesWithRegularSessions, this, sessionPool -> sessionPool.numSessionsAcquired); - numAcquiredSessionsMetric.removeTimeSeries(labelValuesWithMultiplexedSessions); - numAcquiredSessionsMetric.createTimeSeries( - labelValuesWithMultiplexedSessions, this, unused -> numMultiplexedSessionsAcquired.get()); - - numReleasedSessionsMetric.removeTimeSeries(labelValuesWithRegularSessions); - numReleasedSessionsMetric.createTimeSeries( - labelValuesWithRegularSessions, this, sessionPool -> sessionPool.numSessionsReleased); - numReleasedSessionsMetric.removeTimeSeries(labelValuesWithMultiplexedSessions); - numReleasedSessionsMetric.createTimeSeries( - labelValuesWithMultiplexedSessions, this, unused -> numMultiplexedSessionsReleased.get()); - - List labelValuesWithBeingPreparedType = new ArrayList<>(labelValues); - labelValuesWithBeingPreparedType.add(NUM_SESSIONS_BEING_PREPARED); - numSessionsInPoolMetric.removeTimeSeries(labelValuesWithBeingPreparedType); - numSessionsInPoolMetric.createTimeSeries( - labelValuesWithBeingPreparedType, - this, - // TODO: Remove metric. - ignored -> 0L); - - List labelValuesWithInUseType = new ArrayList<>(labelValues); - labelValuesWithInUseType.add(NUM_IN_USE_SESSIONS); - numSessionsInPoolMetric.removeTimeSeries(labelValuesWithInUseType); - numSessionsInPoolMetric.createTimeSeries( - labelValuesWithInUseType, this, sessionPool -> sessionPool.numSessionsInUse); - - List labelValuesWithReadType = new ArrayList<>(labelValues); - labelValuesWithReadType.add(NUM_READ_SESSIONS); - numSessionsInPoolMetric.removeTimeSeries(labelValuesWithReadType); - numSessionsInPoolMetric.createTimeSeries( - labelValuesWithReadType, this, sessionPool -> sessionPool.sessions.size()); - - List labelValuesWithWriteType = new ArrayList<>(labelValues); - labelValuesWithWriteType.add(NUM_WRITE_SESSIONS); - numSessionsInPoolMetric.removeTimeSeries(labelValuesWithWriteType); - numSessionsInPoolMetric.createTimeSeries( - labelValuesWithWriteType, - this, - // TODO: Remove metric. - ignored -> 0L); - } - - /** - * Initializes and creates Spanner session relevant metrics using OpenTelemetry. When coupled with - * an exporter, it allows users to monitor client behavior. - */ - private void initOpenTelemetryMetricsCollection( - OpenTelemetry openTelemetry, - Attributes attributes, - AtomicLong numMultiplexedSessionsAcquired, - AtomicLong numMultiplexedSessionsReleased) { - if (openTelemetry == null || !SpannerOptions.isEnabledOpenTelemetryMetrics()) { - return; - } - - Meter meter = openTelemetry.getMeter(MetricRegistryConstants.INSTRUMENTATION_SCOPE); - meter - .gaugeBuilder(MAX_ALLOWED_SESSIONS) - .setDescription(MAX_ALLOWED_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .buildWithCallback( - measurement -> { - // Although Max sessions is a constant value, OpenTelemetry requires to define this as - // a callback. - measurement.record(options.getMaxSessions(), attributes); - }); - - meter - .gaugeBuilder(MAX_IN_USE_SESSIONS) - .setDescription(MAX_IN_USE_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .buildWithCallback( - measurement -> { - measurement.record(this.maxSessionsInUse, attributes); - }); - - AttributesBuilder attributesBuilder; - if (attributes != null) { - attributesBuilder = attributes.toBuilder(); - } else { - attributesBuilder = Attributes.builder(); - } - Attributes attributesInUseSessions = - attributesBuilder.put(SESSIONS_TYPE, NUM_SESSIONS_IN_USE).build(); - Attributes attributesAvailableSessions = - attributesBuilder.put(SESSIONS_TYPE, NUM_SESSIONS_AVAILABLE).build(); - meter - .upDownCounterBuilder(NUM_SESSIONS_IN_POOL) - .setDescription(NUM_SESSIONS_IN_POOL_DESCRIPTION) - .setUnit(COUNT) - .buildWithCallback( - measurement -> { - measurement.record(this.numSessionsInUse, attributesInUseSessions); - measurement.record(this.sessions.size(), attributesAvailableSessions); - }); - - AttributesBuilder attributesBuilderIsMultiplexed; - if (attributes != null) { - attributesBuilderIsMultiplexed = attributes.toBuilder(); - } else { - attributesBuilderIsMultiplexed = Attributes.builder(); - } - Attributes attributesRegularSession = - attributesBuilderIsMultiplexed.put(IS_MULTIPLEXED, false).build(); - Attributes attributesMultiplexedSession = - attributesBuilderIsMultiplexed.put(IS_MULTIPLEXED, true).build(); - meter - .counterBuilder(GET_SESSION_TIMEOUTS) - .setDescription(SESSIONS_TIMEOUTS_DESCRIPTION) - .setUnit(COUNT) - .buildWithCallback( - measurement -> { - measurement.record(this.getNumWaiterTimeouts(), attributes); - }); - - meter - .counterBuilder(NUM_ACQUIRED_SESSIONS) - .setDescription(NUM_ACQUIRED_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .buildWithCallback( - measurement -> { - measurement.record(this.numSessionsAcquired, attributesRegularSession); - measurement.record( - numMultiplexedSessionsAcquired.get(), attributesMultiplexedSession); - }); - - meter - .counterBuilder(NUM_RELEASED_SESSIONS) - .setDescription(NUM_RELEASED_SESSIONS_DESCRIPTION) - .setUnit(COUNT) - .buildWithCallback( - measurement -> { - measurement.record(this.numSessionsReleased, attributesRegularSession); - measurement.record( - numMultiplexedSessionsReleased.get(), attributesMultiplexedSession); - }); - } -} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolAsyncTransactionManager.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolAsyncTransactionManager.java deleted file mode 100644 index 90f5317e88d..00000000000 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolAsyncTransactionManager.java +++ /dev/null @@ -1,279 +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.spanner; - -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutureCallback; -import com.google.api.core.ApiFutures; -import com.google.api.core.SettableApiFuture; -import com.google.cloud.Timestamp; -import com.google.cloud.spanner.Options.TransactionOption; -import com.google.cloud.spanner.SessionPool.SessionFuture; -import com.google.cloud.spanner.SessionPool.SessionNotFoundHandler; -import com.google.cloud.spanner.SessionPool.SessionReplacementHandler; -import com.google.cloud.spanner.TransactionContextFutureImpl.CommittableAsyncTransactionManager; -import com.google.cloud.spanner.TransactionManager.TransactionState; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.MoreExecutors; -import javax.annotation.concurrent.GuardedBy; - -class SessionPoolAsyncTransactionManager - implements CommittableAsyncTransactionManager, SessionNotFoundHandler { - private final Object lock = new Object(); - - @GuardedBy("lock") - private TransactionState txnState; - - @GuardedBy("lock") - private AbortedException abortedException; - - private final SessionReplacementHandler sessionReplacementHandler; - private final TransactionOption[] options; - private volatile I session; - private volatile SettableApiFuture delegate; - private boolean restartedAfterSessionNotFound; - - SessionPoolAsyncTransactionManager( - SessionReplacementHandler sessionReplacementHandler, - I session, - TransactionOption... options) { - this.options = options; - this.sessionReplacementHandler = sessionReplacementHandler; - createTransaction(session); - } - - private void createTransaction(I session) { - this.session = session; - this.delegate = SettableApiFuture.create(); - this.session.addListener( - () -> { - try { - delegate.set( - SessionPoolAsyncTransactionManager.this - .session - .get() - .transactionManagerAsync(options)); - } catch (Throwable t) { - delegate.setException(t); - } - }, - MoreExecutors.directExecutor()); - } - - @Override - public SpannerException handleSessionNotFound(SessionNotFoundException notFound) { - // Restart the entire transaction with a new session and throw an AbortedException to force the - // client application to retry. - createTransaction(sessionReplacementHandler.replaceSession(notFound, session)); - restartedAfterSessionNotFound = true; - return SpannerExceptionFactory.newSpannerException( - ErrorCode.ABORTED, notFound.getMessage(), notFound); - } - - @Override - public void close() { - SpannerApiFutures.get(closeAsync()); - } - - @Override - public ApiFuture closeAsync() { - final SettableApiFuture res = SettableApiFuture.create(); - ApiFutures.addCallback( - delegate, - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - session.close(); - } - - @Override - public void onSuccess(AsyncTransactionManagerImpl result) { - ApiFutures.addCallback( - result.closeAsync(), - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - res.setException(t); - } - - @Override - public void onSuccess(Void result) { - session.close(); - res.set(result); - } - }, - MoreExecutors.directExecutor()); - } - }, - MoreExecutors.directExecutor()); - return res; - } - - @Override - public TransactionContextFuture beginAsync() { - synchronized (lock) { - Preconditions.checkState(txnState == null, "begin can only be called once"); - txnState = TransactionState.STARTED; - } - final SettableApiFuture delegateTxnFuture = SettableApiFuture.create(); - ApiFutures.addCallback( - delegate, - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - delegateTxnFuture.setException(t); - } - - @Override - public void onSuccess(AsyncTransactionManagerImpl result) { - ApiFutures.addCallback( - result.beginAsync(), - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - delegateTxnFuture.setException(t); - } - - @Override - public void onSuccess(TransactionContext result) { - delegateTxnFuture.set( - new SessionPool.SessionPoolTransactionContext( - SessionPoolAsyncTransactionManager.this, result)); - } - }, - MoreExecutors.directExecutor()); - } - }, - MoreExecutors.directExecutor()); - return new TransactionContextFutureImpl(this, delegateTxnFuture); - } - - @Override - public void onError(Throwable t) { - if (t instanceof AbortedException) { - synchronized (lock) { - txnState = TransactionState.ABORTED; - abortedException = (AbortedException) t; - } - } - } - - @Override - public ApiFuture commitAsync() { - synchronized (lock) { - Preconditions.checkState( - txnState == TransactionState.STARTED || txnState == TransactionState.ABORTED, - "commit can only be invoked if the transaction is in progress. Current state: " - + txnState); - if (txnState == TransactionState.ABORTED) { - return ApiFutures.immediateFailedFuture(abortedException); - } - txnState = TransactionState.COMMITTED; - } - return ApiFutures.transformAsync( - delegate, - input -> { - final SettableApiFuture res = SettableApiFuture.create(); - ApiFutures.addCallback( - input.commitAsync(), - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - synchronized (lock) { - if (t instanceof AbortedException) { - txnState = TransactionState.ABORTED; - abortedException = (AbortedException) t; - } else { - txnState = TransactionState.COMMIT_FAILED; - } - } - res.setException(t); - } - - @Override - public void onSuccess(Timestamp result) { - res.set(result); - } - }, - MoreExecutors.directExecutor()); - return res; - }, - MoreExecutors.directExecutor()); - } - - @Override - public ApiFuture rollbackAsync() { - synchronized (lock) { - Preconditions.checkState( - txnState == TransactionState.STARTED, - "rollback can only be called if the transaction is in progress"); - txnState = TransactionState.ROLLED_BACK; - } - return ApiFutures.transformAsync( - delegate, - input -> { - ApiFuture res = input.rollbackAsync(); - res.addListener(() -> session.close(), MoreExecutors.directExecutor()); - return res; - }, - MoreExecutors.directExecutor()); - } - - @Override - public TransactionContextFuture resetForRetryAsync() { - synchronized (lock) { - Preconditions.checkState( - txnState == TransactionState.ABORTED || restartedAfterSessionNotFound, - "resetForRetry can only be called after the transaction aborted."); - txnState = TransactionState.STARTED; - } - return new TransactionContextFutureImpl( - this, - ApiFutures.transform( - ApiFutures.transformAsync( - delegate, - input -> { - if (restartedAfterSessionNotFound) { - restartedAfterSessionNotFound = false; - return input.beginAsync(); - } - return input.resetForRetryAsync(); - }, - MoreExecutors.directExecutor()), - input -> - new SessionPool.SessionPoolTransactionContext( - SessionPoolAsyncTransactionManager.this, input), - MoreExecutors.directExecutor())); - } - - @Override - public TransactionState getState() { - synchronized (lock) { - return txnState; - } - } - - public ApiFuture getCommitResponse() { - synchronized (lock) { - Preconditions.checkState( - txnState == TransactionState.COMMITTED, - "commit can only be invoked if the transaction was successfully committed"); - } - return ApiFutures.transformAsync( - delegate, AsyncTransactionManagerImpl::getCommitResponse, MoreExecutors.directExecutor()); - } -} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java index a691f14817f..c0fb65980cb 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java @@ -21,29 +21,44 @@ import com.google.api.core.InternalApi; import com.google.api.core.ObsoleteApi; -import com.google.cloud.spanner.SessionPool.Position; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import java.time.Duration; import java.util.Locale; import java.util.Objects; -/** Options for the session pool used by {@code DatabaseClient}. */ +/** + * Options for the session pool used by {@code DatabaseClient}. + * + * @deprecated The Spanner Java client uses a single multiplexed session. All options related to the + * session pool are no longer functional and will be removed in a future version. + */ +@Deprecated public class SessionPoolOptions { + @Deprecated + enum Position { + FIRST, + LAST, + RANDOM + } + // Default number of channels * 100. private static final int DEFAULT_MAX_SESSIONS = 400; private static final int DEFAULT_MIN_SESSIONS = 100; private static final int DEFAULT_INC_STEP = 25; + private static final int EXPERIMENTAL_HOST_REGULAR_SESSIONS = 0; private static final ActionOnExhaustion DEFAULT_ACTION = ActionOnExhaustion.BLOCK; private final int minSessions; private final int maxSessions; private final int incStep; + /** * Use {@link #minSessions} instead to set the minimum number of sessions in the pool to maintain. * Creating a larger number of sessions during startup is relatively cheap as it is executed with * the BatchCreateSessions RPC. */ @Deprecated private final int maxIdleSessions; + /** * The session pool no longer prepares a fraction of the sessions with a read/write transaction. * This setting therefore does not have any meaning anymore, and may be removed in the future. @@ -77,25 +92,24 @@ public class SessionPoolOptions { private final boolean useMultiplexedSession; - /** - * Controls whether multiplexed session is enabled for blind write or not. This is only used for - * systest soak. TODO: Remove when multiplexed session for blind write is released. - */ - private final boolean useMultiplexedSessionBlindWrite; - private final boolean useMultiplexedSessionForRW; private final boolean useMultiplexedSessionForPartitionedOps; // TODO: Change to use java.time.Duration. private final Duration multiplexedSessionMaintenanceDuration; + private final boolean skipVerifyingBeginTransactionForMuxRW; private SessionPoolOptions(Builder builder) { // minSessions > maxSessions is only possible if the user has only set a value for maxSessions. // We allow that to prevent code that only sets a value for maxSessions to break if the // maxSessions value is less than the default for minSessions. - this.minSessions = Math.min(builder.minSessions, builder.maxSessions); - this.maxSessions = builder.maxSessions; + this.minSessions = + builder.isExperimentalHost + ? EXPERIMENTAL_HOST_REGULAR_SESSIONS + : Math.min(builder.minSessions, builder.maxSessions); + this.maxSessions = + builder.isExperimentalHost ? EXPERIMENTAL_HOST_REGULAR_SESSIONS : builder.maxSessions; this.incStep = builder.incStep; this.maxIdleSessions = builder.maxIdleSessions; this.writeSessionsFraction = builder.writeSessionsFraction; @@ -119,26 +133,30 @@ private SessionPoolOptions(Builder builder) { // useMultiplexedSession priority => Environment var > private setter > client default Boolean useMultiplexedSessionFromEnvVariable = getUseMultiplexedSessionFromEnvVariable(); this.useMultiplexedSession = - (useMultiplexedSessionFromEnvVariable != null) - ? useMultiplexedSessionFromEnvVariable - : builder.useMultiplexedSession; - this.useMultiplexedSessionBlindWrite = builder.useMultiplexedSessionBlindWrite; + builder.isExperimentalHost + || ((useMultiplexedSessionFromEnvVariable != null) + ? useMultiplexedSessionFromEnvVariable + : builder.useMultiplexedSession); // useMultiplexedSessionForRW priority => Environment var > private setter > client default Boolean useMultiplexedSessionForRWFromEnvVariable = getUseMultiplexedSessionForRWFromEnvVariable(); this.useMultiplexedSessionForRW = - (useMultiplexedSessionForRWFromEnvVariable != null) - ? useMultiplexedSessionForRWFromEnvVariable - : builder.useMultiplexedSessionForRW; + builder.isExperimentalHost + || ((useMultiplexedSessionForRWFromEnvVariable != null) + ? useMultiplexedSessionForRWFromEnvVariable + : builder.useMultiplexedSessionForRW); // useMultiplexedSessionPartitionedOps priority => Environment var > private setter > client // default Boolean useMultiplexedSessionFromEnvVariablePartitionedOps = getUseMultiplexedSessionFromEnvVariablePartitionedOps(); this.useMultiplexedSessionForPartitionedOps = - (useMultiplexedSessionFromEnvVariablePartitionedOps != null) - ? useMultiplexedSessionFromEnvVariablePartitionedOps - : builder.useMultiplexedSessionPartitionedOps; + builder.isExperimentalHost + || ((useMultiplexedSessionFromEnvVariablePartitionedOps != null) + ? useMultiplexedSessionFromEnvVariablePartitionedOps + : builder.useMultiplexedSessionPartitionedOps); this.multiplexedSessionMaintenanceDuration = builder.multiplexedSessionMaintenanceDuration; + this.skipVerifyingBeginTransactionForMuxRW = + builder.isExperimentalHost || builder.skipVerifyingBeginTransactionForMuxRW; } @Override @@ -176,8 +194,10 @@ public boolean equals(Object o) { && Objects.equals(this.useMultiplexedSession, other.useMultiplexedSession) && Objects.equals(this.useMultiplexedSessionForRW, other.useMultiplexedSessionForRW) && Objects.equals( - this.multiplexedSessionMaintenanceDuration, - other.multiplexedSessionMaintenanceDuration); + this.multiplexedSessionMaintenanceDuration, other.multiplexedSessionMaintenanceDuration) + && Objects.equals( + this.skipVerifyingBeginTransactionForMuxRW, + other.skipVerifyingBeginTransactionForMuxRW); } @Override @@ -205,19 +225,21 @@ public int hashCode() { this.inactiveTransactionRemovalOptions, this.poolMaintainerClock, this.useMultiplexedSession, - this.useMultiplexedSessionBlindWrite, this.useMultiplexedSessionForRW, - this.multiplexedSessionMaintenanceDuration); + this.multiplexedSessionMaintenanceDuration, + this.skipVerifyingBeginTransactionForMuxRW); } public Builder toBuilder() { return new Builder(this); } + @Deprecated public int getMinSessions() { return minSessions; } + @Deprecated public int getMaxSessions() { return maxSessions; } @@ -254,6 +276,7 @@ Duration getMultiplexedSessionMaintenanceLoopFrequency() { return this.multiplexedSessionMaintenanceLoopFrequency; } + @Deprecated public int getKeepAliveIntervalMinutes() { return keepAliveIntervalMinutes; } @@ -264,14 +287,17 @@ public org.threeten.bp.Duration getRemoveInactiveSessionAfter() { return toThreetenDuration(getRemoveInactiveSessionAfterDuration()); } + @Deprecated public Duration getRemoveInactiveSessionAfterDuration() { return removeInactiveSessionAfter; } + @Deprecated public boolean isFailIfPoolExhausted() { return actionOnExhaustion == ActionOnExhaustion.FAIL; } + @Deprecated public boolean isBlockIfPoolExhausted() { return actionOnExhaustion == ActionOnExhaustion.BLOCK; } @@ -319,6 +345,7 @@ Clock getPoolMaintainerClock() { return poolMaintainerClock; } + @Deprecated public boolean isTrackStackTraceOfSessionCheckout() { return trackStackTraceOfSessionCheckout; } @@ -349,7 +376,7 @@ public boolean getUseMultiplexedSession() { @VisibleForTesting @InternalApi protected boolean getUseMultiplexedSessionBlindWrite() { - return getUseMultiplexedSession() && useMultiplexedSessionBlindWrite; + return getUseMultiplexedSession(); } @VisibleForTesting @@ -363,7 +390,7 @@ public boolean getUseMultiplexedSessionForRW() { @VisibleForTesting @InternalApi public boolean getUseMultiplexedSessionPartitionedOps() { - return useMultiplexedSessionForPartitionedOps; + return getUseMultiplexedSession() && useMultiplexedSessionForPartitionedOps; } private static Boolean getUseMultiplexedSessionFromEnvVariable() { @@ -373,9 +400,7 @@ private static Boolean getUseMultiplexedSessionFromEnvVariable() { @VisibleForTesting @InternalApi protected static Boolean getUseMultiplexedSessionFromEnvVariablePartitionedOps() { - // Checks the value of env, GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS - // This returns null until Partitioned Operations is supported. - return null; + return parseBooleanEnvVariable("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS"); } private static Boolean parseBooleanEnvVariable(String variableName) { @@ -393,13 +418,19 @@ private static Boolean parseBooleanEnvVariable(String variableName) { private static Boolean getUseMultiplexedSessionForRWFromEnvVariable() { // Checks the value of env, GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW // This returns null until RW is supported. - return null; + return parseBooleanEnvVariable("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW"); } Duration getMultiplexedSessionMaintenanceDuration() { return multiplexedSessionMaintenanceDuration; } + @VisibleForTesting + @InternalApi + boolean getSkipVerifyBeginTransactionForMuxRW() { + return skipVerifyingBeginTransactionForMuxRW; + } + public static Builder newBuilder() { return new Builder(); } @@ -568,12 +599,13 @@ public static class Builder { private long initialWaitForSessionTimeoutMillis = 30_000L; private ActionOnSessionNotFound actionOnSessionNotFound = ActionOnSessionNotFound.RETRY; private ActionOnSessionLeak actionOnSessionLeak = ActionOnSessionLeak.WARN; + /** * Capture the call stack of the thread that checked out a session of the pool. This will - * pre-create a {@link com.google.cloud.spanner.SessionPool.LeakedSessionException} already when - * a session is checked out. This can be disabled by users, for example if their monitoring - * systems log the pre-created exception. If disabled, the {@link - * com.google.cloud.spanner.SessionPool.LeakedSessionException} will only be created when an + * pre-create a com.google.cloud.spanner.SessionPool.LeakedSessionException already when a + * session is checked out. This can be disabled by users, for example if their monitoring + * systems log the pre-created exception. If disabled, the + * com.google.cloud.spanner.SessionPool.LeakedSessionException will only be created when an * actual session leak is detected. The stack trace of the exception will in that case not * contain the call stack of when the session was checked out. */ @@ -589,6 +621,7 @@ public static class Builder { private Duration waitForMinSessions = Duration.ZERO; private Duration acquireSessionTimeout = Duration.ofSeconds(60); private final Position releaseToPosition = getReleaseToPositionFromSystemProperty(); + /** * The session pool will randomize the position of a session that is being returned when this * threshold is exceeded. That is: If the transactions per second exceeds this threshold, then @@ -599,25 +632,24 @@ public static class Builder { // This field controls the default behavior of session management in Java client. // Set useMultiplexedSession to true to make multiplexed session the default. - private boolean useMultiplexedSession = false; - - // TODO: Remove when multiplexed session for blind write is released. - private boolean useMultiplexedSessionBlindWrite = false; + private boolean useMultiplexedSession = true; // This field controls the default behavior of session management for RW operations in Java // client. // Set useMultiplexedSessionForRW to true to make multiplexed session for RW operations the // default. - private boolean useMultiplexedSessionForRW = false; + private boolean useMultiplexedSessionForRW = true; // This field controls the default behavior of session management for Partitioned operations in // Java client. // Set useMultiplexedSessionPartitionedOps to true to make multiplexed session for Partitioned // operations the default. - private boolean useMultiplexedSessionPartitionedOps = false; + private boolean useMultiplexedSessionPartitionedOps = true; private Duration multiplexedSessionMaintenanceDuration = Duration.ofDays(7); private Clock poolMaintainerClock = Clock.INSTANCE; + private boolean skipVerifyingBeginTransactionForMuxRW = false; + private boolean isExperimentalHost = false; private static Position getReleaseToPositionFromSystemProperty() { // NOTE: This System property is a beta feature. Support for it can be removed in the future. @@ -657,17 +689,18 @@ private Builder(SessionPoolOptions options) { this.randomizePositionQPSThreshold = options.randomizePositionQPSThreshold; this.inactiveTransactionRemovalOptions = options.inactiveTransactionRemovalOptions; this.useMultiplexedSession = options.useMultiplexedSession; - this.useMultiplexedSessionBlindWrite = options.useMultiplexedSessionBlindWrite; this.useMultiplexedSessionForRW = options.useMultiplexedSessionForRW; this.useMultiplexedSessionPartitionedOps = options.useMultiplexedSessionForPartitionedOps; this.multiplexedSessionMaintenanceDuration = options.multiplexedSessionMaintenanceDuration; this.poolMaintainerClock = options.poolMaintainerClock; + this.skipVerifyingBeginTransactionForMuxRW = options.skipVerifyingBeginTransactionForMuxRW; } /** * Minimum number of sessions that this pool will always maintain. These will be created eagerly * in parallel. Defaults to 100. */ + @Deprecated public Builder setMinSessions(int minSessions) { Preconditions.checkArgument(minSessions >= 0, "minSessions must be >= 0"); this.minSessionsSet = true; @@ -681,6 +714,7 @@ public Builder setMinSessions(int minSessions) { * operation. If current number of in use sessions is same as this and a new request comes, pool * can either block or fail. Defaults to 400. */ + @Deprecated public Builder setMaxSessions(int maxSessions) { Preconditions.checkArgument(maxSessions > 0, "maxSessions must be > 0"); this.maxSessions = maxSessions; @@ -734,10 +768,12 @@ Builder setInactiveTransactionRemovalOptions( * instead. */ @ObsoleteApi("Use setRemoveInactiveSessionAfterDuration(Duration) instead") + @Deprecated public Builder setRemoveInactiveSessionAfter(org.threeten.bp.Duration duration) { return setRemoveInactiveSessionAfterDuration(toJavaTimeDuration(duration)); } + @Deprecated public Builder setRemoveInactiveSessionAfterDuration(Duration duration) { this.removeInactiveSessionAfter = duration; return this; @@ -748,16 +784,18 @@ public Builder setRemoveInactiveSessionAfterDuration(Duration duration) { * is automatically closed after 60 minutes. Sessions will be kept alive by sending a dummy * query "Select 1". Default value is 30 minutes. */ + @Deprecated public Builder setKeepAliveIntervalMinutes(int intervalMinutes) { this.keepAliveIntervalMinutes = intervalMinutes; return this; } /** - * If all sessions are in use and and {@code maxSessions} has been reached, fail the request by + * If all sessions are in use and {@code maxSessions} has been reached, fail the request by * throwing a {@link SpannerException} with the error code {@code RESOURCE_EXHAUSTED}. Default * behavior is to block the request. */ + @Deprecated public Builder setFailIfPoolExhausted() { this.actionOnExhaustion = ActionOnExhaustion.FAIL; return this; @@ -772,6 +810,7 @@ public Builder setFailIfPoolExhausted() { * different period use the option {@link Builder#setAcquireSessionTimeoutDuration(Duration)} * ()} */ + @Deprecated public Builder setBlockIfPoolExhausted() { this.actionOnExhaustion = ActionOnExhaustion.BLOCK; return this; @@ -787,6 +826,7 @@ public Builder setBlockIfPoolExhausted() { * * @return this builder for chaining */ + @Deprecated public Builder setWarnIfInactiveTransactions() { this.inactiveTransactionRemovalOptions = InactiveTransactionRemovalOptions.newBuilder() @@ -806,6 +846,7 @@ public Builder setWarnIfInactiveTransactions() { * * @return this builder for chaining */ + @Deprecated public Builder setWarnAndCloseIfInactiveTransactions() { this.inactiveTransactionRemovalOptions = InactiveTransactionRemovalOptions.newBuilder() @@ -814,6 +855,12 @@ public Builder setWarnAndCloseIfInactiveTransactions() { return this; } + @InternalApi + public Builder setExperimentalHost() { + this.isExperimentalHost = true; + return this; + } + /** * If there are inactive transactions, release the resources consumed by such transactions. A * transaction is classified as inactive if it executes for more than a system defined duration. @@ -857,17 +904,6 @@ Builder setUseMultiplexedSession(boolean useMultiplexedSession) { return this; } - /** - * This method enables multiplexed sessions for blind writes. This method will be removed in the - * future when multiplexed sessions has been made the default for all operations. - */ - @InternalApi - @VisibleForTesting - Builder setUseMultiplexedSessionBlindWrite(boolean useMultiplexedSessionBlindWrite) { - this.useMultiplexedSessionBlindWrite = useMultiplexedSessionBlindWrite; - return this; - } - /** * Sets whether the client should use multiplexed session for R/W operations or not. This method * is intentionally package-private and intended for internal use. @@ -895,6 +931,18 @@ Builder setMultiplexedSessionMaintenanceDuration( return this; } + // The additional BeginTransaction RPC for multiplexed session read-write is causing + // unexpected behavior in mock Spanner tests that rely on mocking the BeginTransaction RPC. + // Invoking this method with `true` skips sending the BeginTransaction RPC when the multiplexed + // session is created for the first time during client initialization. + // This is only used for tests. + @VisibleForTesting + Builder setSkipVerifyingBeginTransactionForMuxRW( + boolean skipVerifyingBeginTransactionForMuxRW) { + this.skipVerifyingBeginTransactionForMuxRW = skipVerifyingBeginTransactionForMuxRW; + return this; + } + /** * Sets whether the client should automatically execute a background query to detect the dialect * that is used by the database or not. Set this option to true if you do not know what the @@ -925,8 +973,8 @@ Builder setInitialWaitForSessionTimeoutMillis(long timeout) { } /** - * If a session has been invalidated by the server, the {@link SessionPool} will by default - * retry the session. Set this option to throw an exception instead of retrying. + * If a session has been invalidated by the server, the SessionPool will by default retry the + * session. Set this option to throw an exception instead of retrying. */ @VisibleForTesting Builder setFailIfSessionNotFound() { @@ -942,14 +990,15 @@ Builder setFailOnSessionLeak() { /** * Sets whether the session pool should capture the call stack trace when a session is checked - * out of the pool. This will internally prepare a {@link - * com.google.cloud.spanner.SessionPool.LeakedSessionException} that will only be thrown if the + * out of the pool. This will internally prepare a + * com.google.cloud.spanner.SessionPool.LeakedSessionException that will only be thrown if the * session is actually leaked. This makes it easier to debug session leaks, as the stack trace * of the thread that checked out the session will be available in the exception. * *

    Some monitoring tools might log these exceptions even though they are not thrown. This * option can be used to suppress the creation and logging of these exceptions. */ + @Deprecated public Builder setTrackStackTraceOfSessionCheckout(boolean trackStackTraceOfSessionCheckout) { this.trackStackTraceOfSessionCheckout = trackStackTraceOfSessionCheckout; return this; @@ -962,6 +1011,7 @@ public Builder setTrackStackTraceOfSessionCheckout(boolean trackStackTraceOfSess * BeginTransaction option with that statement. *

    This method may be removed in a future release. */ + @Deprecated public Builder setWriteSessionsFraction(float writeSessionsFraction) { this.writeSessionsFraction = writeSessionsFraction; return this; @@ -990,14 +1040,16 @@ public Builder setWaitForMinSessionsDuration(Duration waitForMinSessions) { /** This method is obsolete. Use {@link #setAcquireSessionTimeoutDuration(Duration)} instead. */ @ObsoleteApi("Use setAcquireSessionTimeoutDuration(Duration) instead") + @Deprecated public Builder setAcquireSessionTimeout(org.threeten.bp.Duration acquireSessionTimeout) { return setAcquireSessionTimeoutDuration(toJavaTimeDuration(acquireSessionTimeout)); } /** - * If greater than zero, we wait for said duration when no sessions are available in the {@link - * SessionPool}. The default is a 60s timeout. Set the value to null to disable the timeout. + * If greater than zero, we wait for said duration when no sessions are available in the + * SessionPool. The default is a 60s timeout. Set the value to null to disable the timeout. */ + @Deprecated public Builder setAcquireSessionTimeoutDuration(Duration acquireSessionTimeout) { try { if (acquireSessionTimeout != null) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionReference.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionReference.java index e96be9effaa..1fd6c303ede 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionReference.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionReference.java @@ -33,15 +33,17 @@ class SessionReference { private final String name; private final DatabaseId databaseId; + @Nullable private final String databaseRole; private final Map options; private volatile Instant lastUseTime; @Nullable private final Instant createTime; private final boolean isMultiplexed; - SessionReference(String name, Map options) { + SessionReference(String name, @Nullable String databaseRole, Map options) { this.options = options; this.name = checkNotNull(name); this.databaseId = SessionId.of(name).getDatabaseId(); + this.databaseRole = databaseRole; this.lastUseTime = Instant.now(); this.createTime = null; this.isMultiplexed = false; @@ -49,12 +51,14 @@ class SessionReference { SessionReference( String name, + @Nullable String databaseRole, com.google.protobuf.Timestamp createTime, boolean isMultiplexed, Map options) { this.options = options; this.name = checkNotNull(name); this.databaseId = SessionId.of(name).getDatabaseId(); + this.databaseRole = databaseRole; this.lastUseTime = Instant.now(); this.createTime = convert(createTime); this.isMultiplexed = isMultiplexed; @@ -64,6 +68,10 @@ public String getName() { return name; } + public String getDatabaseRole() { + return databaseRole; + } + public DatabaseId getDatabaseId() { return databaseId; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Spanner.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Spanner.java index 7ccbc88d978..908ca4c8fc0 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Spanner.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Spanner.java @@ -162,9 +162,13 @@ public interface Spanner extends Service, AutoCloseable { @Override void close(); - /** @return true if this {@link Spanner} object is closed. */ + /** + * @return true if this {@link Spanner} object is closed. + */ boolean isClosed(); - /** @return the {@link ExecutorProvider} that is used for asynchronous queries and operations. */ + /** + * @return the {@link ExecutorProvider} that is used for asynchronous queries and operations. + */ ExecutorProvider getAsyncExecutorProvider(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerApiFutures.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerApiFutures.java index 39afc1b81a4..88e0b84f0fc 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerApiFutures.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerApiFutures.java @@ -33,7 +33,7 @@ public static T getOrNull(ApiFuture future) throws SpannerException { if (e.getCause() instanceof SpannerException) { throw (SpannerException) e.getCause(); } - throw SpannerExceptionFactory.newSpannerException(e.getCause()); + throw SpannerExceptionFactory.asSpannerException(e.getCause()); } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); } catch (CancellationException e) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerBatchUpdateException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerBatchUpdateException.java index 0e51c5f91f3..837a008a833 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerBatchUpdateException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerBatchUpdateException.java @@ -17,11 +17,16 @@ package com.google.cloud.spanner; public class SpannerBatchUpdateException extends SpannerException { - private long[] updateCounts; + private final long[] updateCounts; + /** Private constructor. Use {@link SpannerExceptionFactory} to create instances. */ SpannerBatchUpdateException( - DoNotConstructDirectly token, ErrorCode code, String message, long[] counts) { - super(token, code, false, message, null); + DoNotConstructDirectly token, + ErrorCode code, + String message, + long[] counts, + Throwable cause) { + super(token, code, false, message, cause, null); updateCounts = counts; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporter.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporter.java index 9337d04e531..bedf6600075 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporter.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporter.java @@ -16,30 +16,33 @@ package com.google.cloud.spanner; -import static com.google.cloud.spanner.BuiltInMetricsConstant.SPANNER_METRICS; - import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutureCallback; import com.google.api.core.ApiFutures; import com.google.api.gax.core.CredentialsProvider; import com.google.api.gax.core.FixedCredentialsProvider; import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.rpc.PermissionDeniedException; import com.google.auth.Credentials; +import com.google.cloud.NoCredentials; import com.google.cloud.monitoring.v3.MetricServiceClient; import com.google.cloud.monitoring.v3.MetricServiceSettings; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Strings; import com.google.common.collect.Iterables; import com.google.common.util.concurrent.MoreExecutors; import com.google.monitoring.v3.CreateTimeSeriesRequest; import com.google.monitoring.v3.ProjectName; import com.google.monitoring.v3.TimeSeries; import com.google.protobuf.Empty; +import io.grpc.ManagedChannelBuilder; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.export.MetricExporter; +import io.opentelemetry.sdk.resources.Resource; import java.io.IOException; import java.time.Duration; import java.util.ArrayList; @@ -49,6 +52,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; +import javax.annotation.Nonnull; import javax.annotation.Nullable; /** @@ -66,16 +70,19 @@ class SpannerCloudMonitoringExporter implements MetricExporter { // https://cloud.google.com/monitoring/quotas#custom_metrics_quotas. private static final int EXPORT_BATCH_SIZE_LIMIT = 200; private final AtomicBoolean spannerExportFailureLogged = new AtomicBoolean(false); - private CompletableResultCode lastExportCode; + private final AtomicBoolean lastExportSkippedData = new AtomicBoolean(false); private final MetricServiceClient client; private final String spannerProjectId; static SpannerCloudMonitoringExporter create( - String projectId, @Nullable Credentials credentials, @Nullable String monitoringHost) + String projectId, + @Nullable Credentials credentials, + @Nullable String monitoringHost, + String universeDomain) throws IOException { MetricServiceSettings.Builder settingsBuilder = MetricServiceSettings.newBuilder(); CredentialsProvider credentialsProvider; - if (credentials == null) { + if (credentials == null || credentials instanceof NoCredentials) { credentialsProvider = NoCredentialsProvider.create(); } else { credentialsProvider = FixedCredentialsProvider.create(credentials); @@ -84,6 +91,22 @@ static SpannerCloudMonitoringExporter create( if (monitoringHost != null) { settingsBuilder.setEndpoint(monitoringHost); } + if (!Strings.isNullOrEmpty(universeDomain)) { + settingsBuilder.setUniverseDomain(universeDomain); + } + + if (System.getProperty("jmh.monitoring-server-port") != null) { + settingsBuilder.setTransportChannelProvider( + InstantiatingGrpcChannelProvider.newBuilder() + .setCredentials(NoCredentials.getInstance()) + .setChannelConfigurator( + managedChannelBuilder -> + ManagedChannelBuilder.forAddress( + "0.0.0.0", + Integer.parseInt(System.getProperty("jmh.monitoring-server-port"))) + .usePlaintext()) + .build()); + } Duration timeout = Duration.ofMinutes(1); // TODO: createServiceTimeSeries needs special handling if the request failed. Leaving @@ -101,50 +124,53 @@ static SpannerCloudMonitoringExporter create( } @Override - public CompletableResultCode export(Collection collection) { + public CompletableResultCode export(@Nonnull Collection collection) { if (client.isShutdown()) { logger.log(Level.WARNING, "Exporter is shut down"); return CompletableResultCode.ofFailure(); } - this.lastExportCode = exportSpannerClientMetrics(collection); - return lastExportCode; + return exportSpannerClientMetrics(collection); + } + + @VisibleForTesting + MetricServiceClient getMetricServiceClient() { + return client; } /** Export client built in metrics */ private CompletableResultCode exportSpannerClientMetrics(Collection collection) { - // Filter spanner metrics - List spannerMetricData = - collection.stream() - .filter(md -> SPANNER_METRICS.contains(md.getName())) - .collect(Collectors.toList()); + // Filter spanner metrics. Only include metrics that contain a valid project. + List spannerMetricData = collection.stream().collect(Collectors.toList()); - // Skips exporting if there's none - if (spannerMetricData.isEmpty()) { - return CompletableResultCode.ofSuccess(); + // Log warnings for metrics that will be skipped. + boolean mustFilter = false; + if (spannerMetricData.stream() + .map(metricData -> metricData.getResource()) + .anyMatch(this::shouldSkipPointDataDueToProjectId)) { + logger.log( + Level.WARNING, "Some metric data contain a different projectId. These will be skipped."); + mustFilter = true; } - // Verifies metrics project id is the same as the spanner project id set on this client - if (!spannerMetricData.stream() - .flatMap(metricData -> metricData.getData().getPoints().stream()) - .allMatch( - pd -> spannerProjectId.equals(SpannerCloudMonitoringExporterUtils.getProjectId(pd)))) { - logger.log(Level.WARNING, "Metric data has a different projectId. Skipping export."); - return CompletableResultCode.ofFailure(); + if (mustFilter) { + spannerMetricData = + spannerMetricData.stream() + .filter(this::shouldSkipMetricData) + .collect(Collectors.toList()); } + lastExportSkippedData.set(mustFilter); - // Verifies if metrics data has missing instance id. - if (spannerMetricData.stream() - .flatMap(metricData -> metricData.getData().getPoints().stream()) - .anyMatch(pd -> SpannerCloudMonitoringExporterUtils.getInstanceId(pd) == null)) { - logger.log(Level.WARNING, "Metric data has missing instanceId. Skipping export."); - return CompletableResultCode.ofFailure(); + // Skips exporting if there's none + if (spannerMetricData.isEmpty()) { + return CompletableResultCode.ofSuccess(); } List spannerTimeSeries; try { spannerTimeSeries = - SpannerCloudMonitoringExporterUtils.convertToSpannerTimeSeries(spannerMetricData); + SpannerCloudMonitoringExporterUtils.convertToSpannerTimeSeries( + spannerMetricData, this.spannerProjectId); } catch (Throwable e) { logger.log( Level.WARNING, @@ -169,7 +195,9 @@ public void onFailure(Throwable throwable) { // TODO: Add the link of public documentation when available in the log message. msg += String.format( - " Need monitoring metric writer permission on project=%s. Follow https://cloud.google.com/spanner/docs/view-manage-client-side-metrics#access-client-side-metrics to set up permissions", + " Need monitoring metric writer permission on project=%s. Follow" + + " https://cloud.google.com/spanner/docs/view-manage-client-side-metrics#access-client-side-metrics" + + " to set up permissions", projectName.getProject()); } logger.log(Level.WARNING, msg, throwable); @@ -190,6 +218,18 @@ public void onSuccess(List empty) { return spannerExportCode; } + private boolean shouldSkipMetricData(MetricData metricData) { + return shouldSkipPointDataDueToProjectId(metricData.getResource()); + } + + private boolean shouldSkipPointDataDueToProjectId(Resource resource) { + return !spannerProjectId.equals(SpannerCloudMonitoringExporterUtils.getProjectId(resource)); + } + + boolean lastExportSkippedData() { + return this.lastExportSkippedData.get(); + } + private ApiFuture> exportTimeSeriesInBatch( ProjectName projectName, List timeSeries) { List> batchResults = new ArrayList<>(); @@ -233,7 +273,7 @@ public CompletableResultCode shutdown() { * metric over time. */ @Override - public AggregationTemporality getAggregationTemporality(InstrumentType instrumentType) { + public AggregationTemporality getAggregationTemporality(@Nonnull InstrumentType instrumentType) { return AggregationTemporality.CUMULATIVE; } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterUtils.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterUtils.java index 21fcba8194d..0f6d8006866 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterUtils.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterUtils.java @@ -22,9 +22,12 @@ import static com.google.api.MetricDescriptor.ValueType.DISTRIBUTION; import static com.google.api.MetricDescriptor.ValueType.DOUBLE; import static com.google.api.MetricDescriptor.ValueType.INT64; +import static com.google.cloud.spanner.BuiltInMetricsConstant.ALLOWED_EXEMPLARS_ATTRIBUTES; import static com.google.cloud.spanner.BuiltInMetricsConstant.GAX_METER_NAME; -import static com.google.cloud.spanner.BuiltInMetricsConstant.INSTANCE_ID_KEY; +import static com.google.cloud.spanner.BuiltInMetricsConstant.GRPC_GCP_METER_NAME; +import static com.google.cloud.spanner.BuiltInMetricsConstant.GRPC_METER_NAME; import static com.google.cloud.spanner.BuiltInMetricsConstant.PROJECT_ID_KEY; +import static com.google.cloud.spanner.BuiltInMetricsConstant.SPANNER_METER_NAME; import static com.google.cloud.spanner.BuiltInMetricsConstant.SPANNER_PROMOTED_RESOURCE_LABELS; import static com.google.cloud.spanner.BuiltInMetricsConstant.SPANNER_RESOURCE_TYPE; @@ -35,26 +38,35 @@ import com.google.api.MetricDescriptor.MetricKind; import com.google.api.MetricDescriptor.ValueType; import com.google.api.MonitoredResource; +import com.google.monitoring.v3.DroppedLabels; import com.google.monitoring.v3.Point; +import com.google.monitoring.v3.SpanContext; import com.google.monitoring.v3.TimeInterval; import com.google.monitoring.v3.TimeSeries; import com.google.monitoring.v3.TypedValue; +import com.google.protobuf.Any; +import com.google.protobuf.Timestamp; import com.google.protobuf.util.Timestamps; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.ExemplarData; import io.opentelemetry.sdk.metrics.data.HistogramData; import io.opentelemetry.sdk.metrics.data.HistogramPointData; +import io.opentelemetry.sdk.metrics.data.LongExemplarData; import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.opentelemetry.sdk.metrics.data.PointData; import io.opentelemetry.sdk.metrics.data.SumData; +import io.opentelemetry.sdk.resources.Resource; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; class SpannerCloudMonitoringExporterUtils { @@ -63,61 +75,86 @@ class SpannerCloudMonitoringExporterUtils { private SpannerCloudMonitoringExporterUtils() {} - static String getProjectId(PointData pointData) { - return pointData.getAttributes().get(PROJECT_ID_KEY); + static String getProjectId(Resource resource) { + return resource.getAttributes().get(PROJECT_ID_KEY); } - static String getInstanceId(PointData pointData) { - return pointData.getAttributes().get(INSTANCE_ID_KEY); - } - - static List convertToSpannerTimeSeries(List collection) { + static List convertToSpannerTimeSeries( + List collection, String projectId) { List allTimeSeries = new ArrayList<>(); for (MetricData metricData : collection) { - // Get common metrics data from GAX library - if (!metricData.getInstrumentationScopeInfo().getName().equals(GAX_METER_NAME)) { + // Get metrics data from GAX library, GRPC library and Spanner library + if (!(metricData.getInstrumentationScopeInfo().getName().equals(GAX_METER_NAME) + || metricData.getInstrumentationScopeInfo().getName().equals(SPANNER_METER_NAME) + || metricData.getInstrumentationScopeInfo().getName().equals(GRPC_METER_NAME) + || metricData.getInstrumentationScopeInfo().getName().equals(GRPC_GCP_METER_NAME))) { // Filter out metric data for instruments that are not part of the spanner metrics list continue; } + + // Create MonitoredResource Builder + MonitoredResource.Builder monitoredResourceBuilder = + MonitoredResource.newBuilder().setType(SPANNER_RESOURCE_TYPE); + + Attributes resourceAttributes = metricData.getResource().getAttributes(); + for (AttributeKey key : resourceAttributes.asMap().keySet()) { + monitoredResourceBuilder.putLabels( + key.getKey(), String.valueOf(resourceAttributes.get(key))); + } + metricData.getData().getPoints().stream() - .map(pointData -> convertPointToSpannerTimeSeries(metricData, pointData)) + .map( + pointData -> + convertPointToSpannerTimeSeries( + metricData, pointData, monitoredResourceBuilder, projectId)) .forEach(allTimeSeries::add); } - return allTimeSeries; } private static TimeSeries convertPointToSpannerTimeSeries( - MetricData metricData, PointData pointData) { + MetricData metricData, + PointData pointData, + MonitoredResource.Builder monitoredResourceBuilder, + String projectId) { + MetricKind metricKind = convertMetricKind(metricData); TimeSeries.Builder builder = TimeSeries.newBuilder() - .setMetricKind(convertMetricKind(metricData)) + .setMetricKind(metricKind) .setValueType(convertValueType(metricData.getType())); Metric.Builder metricBuilder = Metric.newBuilder().setType(metricData.getName()); Attributes attributes = pointData.getAttributes(); - MonitoredResource.Builder monitoredResourceBuilder = - MonitoredResource.newBuilder().setType(SPANNER_RESOURCE_TYPE); for (AttributeKey key : attributes.asMap().keySet()) { if (SPANNER_PROMOTED_RESOURCE_LABELS.contains(key)) { monitoredResourceBuilder.putLabels(key.getKey(), String.valueOf(attributes.get(key))); } else { - metricBuilder.putLabels(key.getKey(), String.valueOf(attributes.get(key))); + // Replace metric label names by converting "." to "_" since Cloud Monitoring does not + // support labels containing "." + metricBuilder.putLabels( + key.getKey().replace(".", "_"), String.valueOf(attributes.get(key))); } } + // Add common labels like "client_name" and "client_uid" for all the exported metrics. + metricBuilder.putAllLabels(BuiltInMetricsProvider.INSTANCE.createClientAttributes()); + builder.setResource(monitoredResourceBuilder.build()); builder.setMetric(metricBuilder.build()); TimeInterval timeInterval = TimeInterval.newBuilder() - .setStartTime(Timestamps.fromNanos(pointData.getStartEpochNanos())) + .setStartTime( + // For gauge metrics, the start and end time should be the same. + metricKind == MetricKind.GAUGE + ? Timestamps.fromNanos(pointData.getEpochNanos()) + : Timestamps.fromNanos(pointData.getStartEpochNanos())) .setEndTime(Timestamps.fromNanos(pointData.getEpochNanos())) .build(); - builder.addPoints(createPoint(metricData.getType(), pointData, timeInterval)); + builder.addPoints(createPoint(metricData.getType(), pointData, timeInterval, projectId)); return builder.build(); } @@ -173,7 +210,7 @@ private static ValueType convertValueType(MetricDataType metricDataType) { } private static Point createPoint( - MetricDataType type, PointData pointData, TimeInterval timeInterval) { + MetricDataType type, PointData pointData, TimeInterval timeInterval, String projectId) { Point.Builder builder = Point.newBuilder().setInterval(timeInterval); switch (type) { case HISTOGRAM: @@ -181,7 +218,8 @@ private static Point createPoint( return builder .setValue( TypedValue.newBuilder() - .setDistributionValue(convertHistogramData((HistogramPointData) pointData)) + .setDistributionValue( + convertHistogramData((HistogramPointData) pointData, projectId)) .build()) .build(); case DOUBLE_GAUGE: @@ -203,7 +241,7 @@ private static Point createPoint( } } - private static Distribution convertHistogramData(HistogramPointData pointData) { + private static Distribution convertHistogramData(HistogramPointData pointData, String projectId) { return Distribution.newBuilder() .setCount(pointData.getCount()) .setMean(pointData.getCount() == 0L ? 0.0D : pointData.getSum() / pointData.getCount()) @@ -211,6 +249,71 @@ private static Distribution convertHistogramData(HistogramPointData pointData) { BucketOptions.newBuilder() .setExplicitBuckets(Explicit.newBuilder().addAllBounds(pointData.getBoundaries()))) .addAllBucketCounts(pointData.getCounts()) + .addAllExemplars( + pointData.getExemplars().stream() + .map(e -> mapExemplar(e, projectId)) + .collect(Collectors.toList())) + .build(); + } + + private static Distribution.Exemplar mapExemplar(ExemplarData exemplar, String projectId) { + double value = 0; + if (exemplar instanceof DoubleExemplarData) { + value = ((DoubleExemplarData) exemplar).getValue(); + } else if (exemplar instanceof LongExemplarData) { + value = ((LongExemplarData) exemplar).getValue(); + } + + Distribution.Exemplar.Builder exemplarBuilder = + Distribution.Exemplar.newBuilder() + .setValue(value) + .setTimestamp(mapTimestamp(exemplar.getEpochNanos())); + if (exemplar.getSpanContext().isValid()) { + exemplarBuilder.addAttachments( + Any.pack( + SpanContext.newBuilder() + .setSpanName( + makeSpanName( + projectId, + exemplar.getSpanContext().getTraceId(), + exemplar.getSpanContext().getSpanId())) + .build())); + } + if (!exemplar.getFilteredAttributes().isEmpty()) { + exemplarBuilder.addAttachments( + Any.pack(mapFilteredAttributes(exemplar.getFilteredAttributes()))); + } + return exemplarBuilder.build(); + } + + static final long NANO_PER_SECOND = (long) 1e9; + + private static Timestamp mapTimestamp(long epochNanos) { + return Timestamp.newBuilder() + .setSeconds(epochNanos / NANO_PER_SECOND) + .setNanos((int) (epochNanos % NANO_PER_SECOND)) .build(); } + + private static String makeSpanName(String projectId, String traceId, String spanId) { + return String.format("projects/%s/traces/%s/spans/%s", projectId, traceId, spanId); + } + + private static DroppedLabels mapFilteredAttributes(Attributes attributes) { + DroppedLabels.Builder labels = DroppedLabels.newBuilder(); + attributes.forEach( + (k, v) -> { + String key = cleanAttributeKey(k.getKey()); + if (ALLOWED_EXEMPLARS_ATTRIBUTES.contains(key)) { + labels.putLabel(key, v.toString()); + } + }); + return labels.build(); + } + + private static String cleanAttributeKey(String key) { + // . is commonly used in OTel but disallowed in GCM label names, + // https://cloud.google.com/monitoring/api/ref_v3/rest/v3/LabelDescriptor#:~:text=Matches%20the%20following%20regular%20expression%3A + return key.replace('.', '_'); + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerException.java index 58076570c20..0829cc35d62 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerException.java @@ -20,6 +20,7 @@ import com.google.api.gax.rpc.ErrorDetails; import com.google.cloud.grpc.BaseGrpcServiceException; import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.protobuf.util.Durations; import com.google.rpc.ResourceInfo; import com.google.rpc.RetryInfo; @@ -53,9 +54,12 @@ public String getResourceName() { private static final long serialVersionUID = 20150916L; private static final Metadata.Key KEY_RETRY_INFO = ProtoUtils.keyForProto(RetryInfo.getDefaultInstance()); + private static final String PG_ERR_CODE_KEY = "pg_sqlerrcode"; private final ErrorCode code; private final ApiException apiException; + private final XGoogSpannerRequestId requestId; + private String statement; /** Private constructor. Use {@link SpannerExceptionFactory} to create instances. */ SpannerException( @@ -81,6 +85,23 @@ public String getResourceName() { } this.code = Preconditions.checkNotNull(code); this.apiException = apiException; + this.requestId = extractRequestId(cause); + } + + @Override + public String getMessage() { + if (this.statement == null) { + return super.getMessage(); + } + return String.format("%s - Statement: '%s'", super.getMessage(), this.statement); + } + + @Override + public String toString() { + if (this.requestId == null) { + return super.toString(); + } + return super.toString() + " - RequestId: " + this.requestId; } /** Returns the error code associated with this exception. */ @@ -88,6 +109,25 @@ public ErrorCode getErrorCode() { return code; } + /** + * Returns the PostgreSQL SQLState error code that is encoded in this exception, or null if this + * {@link SpannerException} does not include a PostgreSQL error code. + */ + public String getPostgreSQLErrorCode() { + ErrorDetails details = getErrorDetails(); + if (details == null || details.getErrorInfo() == null) { + return null; + } + return details.getErrorInfo().getMetadataOrDefault(PG_ERR_CODE_KEY, null); + } + + public String getRequestId() { + if (requestId == null) { + return ""; + } + return requestId.toString(); + } + enum DoNotConstructDirectly { ALLOWED } @@ -105,7 +145,7 @@ static long extractRetryDelay(Throwable cause) { Metadata trailers = Status.trailersFromThrowable(cause); if (trailers != null && trailers.containsKey(KEY_RETRY_INFO)) { RetryInfo retryInfo = trailers.get(KEY_RETRY_INFO); - if (retryInfo.hasRetryDelay()) { + if (retryInfo != null && retryInfo.hasRetryDelay()) { return Durations.toMillis(retryInfo.getRetryDelay()); } } @@ -113,6 +153,20 @@ static long extractRetryDelay(Throwable cause) { return -1L; } + @Nullable + static XGoogSpannerRequestId extractRequestId(Throwable cause) { + if (cause != null) { + Metadata trailers = Status.trailersFromThrowable(cause); + if (trailers != null && trailers.containsKey(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY)) { + String requestId = trailers.get(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY); + if (!Strings.isNullOrEmpty(requestId)) { + return XGoogSpannerRequestId.of(requestId); + } + } + } + return null; + } + /** * Checks the underlying reason of the exception and if it's {@link ApiException} then return the * reason otherwise null. @@ -175,4 +229,8 @@ public ErrorDetails getErrorDetails() { } return null; } + + void setStatement(String statement) { + this.statement = statement; + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerExceptionFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerExceptionFactory.java index 2dd70ce108e..185f98b5433 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerExceptionFactory.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerExceptionFactory.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.MissingDefaultSequenceKindException.isMissingDefaultSequenceKindException; import static com.google.cloud.spanner.TransactionMutationLimitExceededException.isTransactionMutationLimitException; import com.google.api.gax.grpc.GrpcStatusCode; @@ -62,7 +63,7 @@ public static SpannerException newSpannerException(ErrorCode code, @Nullable Str public static SpannerException newSpannerException( ErrorCode code, @Nullable String message, @Nullable Throwable cause) { - return newSpannerExceptionPreformatted(code, formatMessage(code, message), cause); + return newSpannerExceptionPreformatted(code, formatMessage(code, message), cause, null); } public static SpannerException propagateInterrupt(InterruptedException e) { @@ -117,7 +118,11 @@ public static SpannerException newSpannerException(Throwable cause) { public static SpannerBatchUpdateException newSpannerBatchUpdateException( ErrorCode code, String message, long[] updateCounts) { DoNotConstructDirectly token = DoNotConstructDirectly.ALLOWED; - return new SpannerBatchUpdateException(token, code, message, updateCounts); + SpannerException cause = null; + if (isTransactionMutationLimitException(code, message)) { + cause = new TransactionMutationLimitExceededException(token, code, message, null, null); + } + return new SpannerBatchUpdateException(token, code, message, updateCounts, cause); } /** Constructs a specific error that */ @@ -149,7 +154,8 @@ public static SpannerBatchUpdateException newSpannerBatchUpdateException( AbortedException cause, SpannerException databaseError) { return new AbortedDueToConcurrentModificationException( DoNotConstructDirectly.ALLOWED, - "The transaction was aborted and could not be retried due to a database error during the retry", + "The transaction was aborted and could not be retried due to a database error during the" + + " retry", cause, databaseError); } @@ -164,7 +170,8 @@ public static SpannerBatchUpdateException newSpannerBatchUpdateException( AbortedDueToConcurrentModificationException cause) { return new AbortedDueToConcurrentModificationException( DoNotConstructDirectly.ALLOWED, - "This transaction has already been aborted and could not be retried due to a concurrent modification. Rollback this transaction to start a new one.", + "This transaction has already been aborted and could not be retried due to a concurrent" + + " modification. Rollback this transaction to start a new one.", cause); } @@ -178,7 +185,7 @@ public static SpannerBatchUpdateException newSpannerBatchUpdateException( public static SpannerException newSpannerException(@Nullable Context context, Throwable cause) { if (cause instanceof SpannerException) { SpannerException e = (SpannerException) cause; - return newSpannerExceptionPreformatted(e.getErrorCode(), e.getMessage(), e); + return newSpannerExceptionPreformatted(e.getErrorCode(), e.getMessage(), e, null); } else if (cause instanceof CancellationException) { return newSpannerExceptionForCancellation(context, cause); } else if (cause instanceof ApiException) { @@ -249,7 +256,10 @@ private static ResourceInfo extractResourceInfo(Throwable cause) { return null; } - private static ErrorInfo extractErrorInfo(Throwable cause) { + private static ErrorInfo extractErrorInfo(Throwable cause, ApiException apiException) { + if (apiException != null && apiException.getErrorDetails() != null) { + return apiException.getErrorDetails().getErrorInfo(); + } if (cause != null) { Metadata trailers = Status.trailersFromThrowable(cause); if (trailers != null) { @@ -259,12 +269,19 @@ private static ErrorInfo extractErrorInfo(Throwable cause) { return null; } - static ErrorDetails extractErrorDetails(Throwable cause) { + static ErrorDetails extractErrorDetails(Throwable cause, ApiException apiException) { + if (apiException != null && apiException.getErrorDetails() != null) { + return apiException.getErrorDetails(); + } + Throwable prevCause = null; while (cause != null && cause != prevCause) { if (cause instanceof ApiException) { return ((ApiException) cause).getErrorDetails(); } + if (cause instanceof SpannerException) { + return ((SpannerException) cause).getErrorDetails(); + } prevCause = cause; cause = cause.getCause(); } @@ -304,7 +321,7 @@ static SpannerException newSpannerExceptionPreformatted( case ABORTED: return new AbortedException(token, message, cause, apiException); case RESOURCE_EXHAUSTED: - ErrorInfo info = extractErrorInfo(cause); + ErrorInfo info = extractErrorInfo(cause, apiException); if (info != null && info.getMetadataMap() .containsKey(AdminRequestsPerMinuteExceededException.ADMIN_REQUESTS_LIMIT_KEY) @@ -329,11 +346,14 @@ static SpannerException newSpannerExceptionPreformatted( } } case INVALID_ARGUMENT: - if (isTransactionMutationLimitException(cause)) { + if (isTransactionMutationLimitException(cause, apiException)) { return new TransactionMutationLimitExceededException( token, code, message, cause, apiException); } - // Fall through to the default. + if (isMissingDefaultSequenceKindException(apiException)) { + return new MissingDefaultSequenceKindException(token, code, message, cause, apiException); + } + // Fall through to the default. default: return new SpannerException( token, code, isRetryable(code, cause), message, cause, apiException); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java index ed815c77088..c201924dfbe 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java @@ -34,14 +34,11 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; -import io.opencensus.metrics.LabelValue; import io.opencensus.trace.Tracing; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.common.AttributesBuilder; import java.io.IOException; import java.time.Instant; import java.util.ArrayList; @@ -51,7 +48,6 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; import java.util.logging.Logger; @@ -149,12 +145,56 @@ static final class ClosedException extends RuntimeException { this.dbAdminClient = new DatabaseAdminClientImpl(options.getProjectId(), gapicRpc); this.instanceClient = new InstanceAdminClientImpl(options.getProjectId(), gapicRpc, dbAdminClient); + logSpannerOptions(options); } SpannerImpl(SpannerOptions options) { this(options.getSpannerRpcV1(), options); } + private void logSpannerOptions(SpannerOptions options) { + logger.log( + Level.INFO, + "Spanner options: " + + "\nProject ID: " + + options.getProjectId() + + "\nHost: " + + options.getHost() + + "\nNum gRPC channels: " + + options.getNumChannels() + + "\nLeader aware routing enabled: " + + options.isLeaderAwareRoutingEnabled() + + "\nDirect access enabled: " + + options.isEnableDirectAccess() + + "\nActive Tracing Framework: " + + SpannerOptions.getActiveTracingFramework() + + "\nAPI tracing enabled: " + + options.isEnableApiTracing() + + "\nExtended tracing enabled: " + + options.isEnableExtendedTracing() + + "\nEnd to end tracing enabled: " + + options.isEndToEndTracingEnabled() + + "\nBuilt-in metrics enabled: " + + options.isEnableBuiltInMetrics()); + if (options.getSessionPoolOptions() != null) { + logger.log( + Level.INFO, + "Session pool options (deprecated, no longer used): " + + "\nSession pool min sessions: " + + options.getSessionPoolOptions().getMinSessions() + + "\nSession pool max sessions: " + + options.getSessionPoolOptions().getMaxSessions() + + "\nMultiplexed sessions enabled: " + + options.getSessionPoolOptions().getUseMultiplexedSession() + + "\nMultiplexed sessions enabled for RW: " + + options.getSessionPoolOptions().getUseMultiplexedSessionForRW() + + "\nMultiplexed sessions enabled for blind write: " + + options.getSessionPoolOptions().getUseMultiplexedSessionBlindWrite() + + "\nMultiplexed sessions enabled for partitioned ops: " + + options.getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps()); + } + } + /** Returns the {@link SpannerRpc} of this {@link SpannerImpl} instance. */ SpannerRpc getRpc() { return gapicRpc; @@ -269,53 +309,13 @@ public DatabaseClient getDatabaseClient(DatabaseId db) { if (clientId == null) { clientId = nextDatabaseClientId(db); } - List labelValues = - ImmutableList.of( - LabelValue.create(clientId), - LabelValue.create(db.getDatabase()), - LabelValue.create(db.getInstanceId().getName()), - LabelValue.create(GaxProperties.getLibraryVersion(getOptions().getClass()))); - - AttributesBuilder attributesBuilder = Attributes.builder(); - attributesBuilder.put("client_id", clientId); - attributesBuilder.put("database", db.getDatabase()); - attributesBuilder.put("instance_id", db.getInstanceId().getName()); - - boolean useMultiplexedSession = - getOptions().getSessionPoolOptions().getUseMultiplexedSession(); - boolean useMultiplexedSessionForRW = - getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); - MultiplexedSessionDatabaseClient multiplexedSessionDatabaseClient = - useMultiplexedSession - ? new MultiplexedSessionDatabaseClient(SpannerImpl.this.getSessionClient(db)) - : null; - AtomicLong numMultiplexedSessionsAcquired = - useMultiplexedSession - ? multiplexedSessionDatabaseClient.getNumSessionsAcquired() - : new AtomicLong(); - AtomicLong numMultiplexedSessionsReleased = - useMultiplexedSession - ? multiplexedSessionDatabaseClient.getNumSessionsReleased() - : new AtomicLong(); - SessionPool pool = - SessionPool.createPool( - getOptions(), - SpannerImpl.this.getSessionClient(db), - this.tracer, - labelValues, - attributesBuilder.build(), - numMultiplexedSessionsAcquired, - numMultiplexedSessionsReleased); - pool.maybeWaitOnMinSessions(); + new MultiplexedSessionDatabaseClient(SpannerImpl.this.getSessionClient(db)); DatabaseClientImpl dbClient = createDatabaseClient( clientId, - pool, - getOptions().getSessionPoolOptions().getUseMultiplexedSessionBlindWrite(), multiplexedSessionDatabaseClient, - getOptions().getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps(), - useMultiplexedSessionForRW); + this.tracer.createDatabaseAttributes(db)); dbClients.put(db, dbClient); return dbClient; } @@ -325,40 +325,24 @@ public DatabaseClient getDatabaseClient(DatabaseId db) { @VisibleForTesting DatabaseClientImpl createDatabaseClient( String clientId, - SessionPool pool, - boolean useMultiplexedSessionBlindWrite, - @Nullable MultiplexedSessionDatabaseClient multiplexedSessionClient, - boolean useMultiplexedSessionPartitionedOps, - boolean useMultiplexedSessionForRW) { - return new DatabaseClientImpl( - clientId, - pool, - useMultiplexedSessionBlindWrite, - multiplexedSessionClient, - useMultiplexedSessionPartitionedOps, - tracer, - useMultiplexedSessionForRW); + MultiplexedSessionDatabaseClient multiplexedSessionClient, + Attributes databaseAttributes) { + return new DatabaseClientImpl(clientId, multiplexedSessionClient, tracer, databaseAttributes); } @Override public BatchClient getBatchClient(DatabaseId db) { - if (getOptions().getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps()) { - this.dbBatchClientLock.lock(); - try { - if (this.dbBatchClients.containsKey(db)) { - return this.dbBatchClients.get(db); - } - BatchClientImpl batchClient = - new BatchClientImpl( - getSessionClient(db), /*useMultiplexedSessionPartitionedOps=*/ true); - this.dbBatchClients.put(db, batchClient); - return batchClient; - } finally { - this.dbBatchClientLock.unlock(); + this.dbBatchClientLock.lock(); + try { + if (this.dbBatchClients.containsKey(db)) { + return this.dbBatchClients.get(db); } + BatchClientImpl batchClient = new BatchClientImpl(getSessionClient(db)); + this.dbBatchClients.put(db, batchClient); + return batchClient; + } finally { + this.dbBatchClientLock.unlock(); } - return new BatchClientImpl( - getSessionClient(db), /*useMultiplexedSessionPartitionedOps=*/ false); } @Override @@ -406,6 +390,14 @@ public boolean isClosed() { } } + void resetRequestIdCounters() { + gapicRpc.getRequestIdCreator().reset(); + } + + long getRequestIdClientId() { + return gapicRpc.getRequestIdCreator().getClientId(); + } + /** Helper class for gRPC calls that can return paginated results. */ abstract static class PageFetcher implements NextPageFetcher { private String nextPageToken; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java index 7c232ddaa18..2fa6d4fd291 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java @@ -18,6 +18,7 @@ import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration; import static com.google.api.gax.util.TimeConversionUtils.toThreetenDuration; +import static com.google.cloud.spanner.spi.v1.GapicSpannerRpc.EXPERIMENTAL_LOCATION_API_ENV_VAR; import com.google.api.core.ApiFunction; import com.google.api.core.BetaApi; @@ -27,21 +28,23 @@ import com.google.api.gax.core.GaxProperties; import com.google.api.gax.grpc.GrpcCallContext; import com.google.api.gax.grpc.GrpcInterceptorProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.longrunning.OperationTimedPollAlgorithm; import com.google.api.gax.retrying.RetrySettings; import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.TransportChannelProvider; import com.google.api.gax.tracing.ApiTracerFactory; import com.google.api.gax.tracing.BaseApiTracerFactory; -import com.google.api.gax.tracing.MetricsTracerFactory; -import com.google.api.gax.tracing.OpenTelemetryMetricsRecorder; import com.google.api.gax.tracing.OpencensusTracerFactory; +import com.google.auth.oauth2.AccessToken; +import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.NoCredentials; import com.google.cloud.ServiceDefaults; import com.google.cloud.ServiceOptions; import com.google.cloud.ServiceRpc; import com.google.cloud.TransportOptions; import com.google.cloud.grpc.GcpManagedChannelOptions; +import com.google.cloud.grpc.GcpManagedChannelOptions.GcpChannelPoolOptions; import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.spanner.Options.DirectedReadOption; import com.google.cloud.spanner.Options.QueryOption; @@ -51,6 +54,7 @@ import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import com.google.cloud.spanner.admin.instance.v1.stub.InstanceAdminStubSettings; import com.google.cloud.spanner.spi.SpannerRpcFactory; +import com.google.cloud.spanner.spi.v1.ChannelEndpointCacheFactory; import com.google.cloud.spanner.spi.v1.GapicSpannerRpc; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.cloud.spanner.v1.SpannerSettings; @@ -58,31 +62,45 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.ExecuteSqlRequest; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; +import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.SpannerGrpc; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import io.grpc.CallCredentials; import io.grpc.CompressorRegistry; import io.grpc.Context; import io.grpc.ExperimentalApi; import io.grpc.ManagedChannelBuilder; import io.grpc.MethodDescriptor; +import io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts; +import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder; +import io.grpc.netty.shaded.io.netty.handler.ssl.SslContext; +import io.opencensus.trace.Tracing; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.Attributes; +import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; import java.time.Duration; import java.util.ArrayList; +import java.util.Base64; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -106,8 +124,11 @@ public class SpannerOptions extends ServiceOptions { private static final String PG_ADAPTER_CLIENT_LIB_TOKEN = "pg-adapter"; private static final String API_SHORT_NAME = "Spanner"; - private static final String DEFAULT_HOST = "https://spanner.googleapis.com"; - private static final ImmutableSet SCOPES = + private static final String SPANNER_SERVICE_NAME = "spanner"; + private static final String GOOGLE_DEFAULT_UNIVERSE = "googleapis.com"; + private static final String EXPERIMENTAL_HOST_PROJECT_ID = "default"; + + static final ImmutableSet SCOPES = ImmutableSet.of( "https://www.googleapis.com/auth/spanner.admin", "https://www.googleapis.com/auth/spanner.data"); @@ -117,7 +138,74 @@ public class SpannerOptions extends ServiceOptions { // is enabled, to make sure there are sufficient channels available to move the sessions to a // different channel if a network connection in a particular channel fails. @VisibleForTesting static final int GRPC_GCP_ENABLED_DEFAULT_CHANNELS = 8; + + // Dynamic Channel Pool (DCP) default values and bounds + /** Default max concurrent RPCs per channel before triggering scale up. */ + public static final int DEFAULT_DYNAMIC_POOL_MAX_RPC = 25; + + /** Default min concurrent RPCs per channel for scale down check. */ + public static final int DEFAULT_DYNAMIC_POOL_MIN_RPC = 15; + + /** Default scale down check interval. */ + public static final Duration DEFAULT_DYNAMIC_POOL_SCALE_DOWN_INTERVAL = Duration.ofMinutes(3); + + /** Default initial number of channels for dynamic pool. */ + public static final int DEFAULT_DYNAMIC_POOL_INITIAL_SIZE = 4; + + /** Default max number of channels for dynamic pool. */ + public static final int DEFAULT_DYNAMIC_POOL_MAX_CHANNELS = 10; + + /** Default min number of channels for dynamic pool. */ + public static final int DEFAULT_DYNAMIC_POOL_MIN_CHANNELS = 2; + + /** + * Default affinity key lifetime for dynamic channel pool. This is how long to keep an affinity + * key after its last use. Zero means keeping keys forever. Default is 10 minutes, which is + * sufficient to ensure that requests within a single transaction use the same channel. + */ + public static final Duration DEFAULT_DYNAMIC_POOL_AFFINITY_KEY_LIFETIME = Duration.ofMinutes(10); + + /** + * Default cleanup interval for dynamic channel pool affinity keys. This is how frequently the + * affinity key cleanup process runs. Default is 1 minute (1/10 of default affinity key lifetime). + */ + public static final Duration DEFAULT_DYNAMIC_POOL_CLEANUP_INTERVAL = Duration.ofMinutes(1); + + /** + * Creates a {@link GcpChannelPoolOptions} instance with Spanner-specific defaults for dynamic + * channel pooling. These defaults are optimized for typical Spanner workloads. + * + *

    Default values: + * + *

      + *
    • Max size: {@value #DEFAULT_DYNAMIC_POOL_MAX_CHANNELS} + *
    • Min size: {@value #DEFAULT_DYNAMIC_POOL_MIN_CHANNELS} + *
    • Initial size: {@value #DEFAULT_DYNAMIC_POOL_INITIAL_SIZE} + *
    • Max RPC per channel: {@value #DEFAULT_DYNAMIC_POOL_MAX_RPC} + *
    • Min RPC per channel: {@value #DEFAULT_DYNAMIC_POOL_MIN_RPC} + *
    • Scale down interval: 3 minutes + *
    • Affinity key lifetime: 10 minutes + *
    • Cleanup interval: 1 minute + *
    + * + * @return a new {@link GcpChannelPoolOptions} instance with Spanner defaults + */ + public static GcpChannelPoolOptions createDefaultDynamicChannelPoolOptions() { + return GcpChannelPoolOptions.newBuilder() + .setMaxSize(DEFAULT_DYNAMIC_POOL_MAX_CHANNELS) + .setMinSize(DEFAULT_DYNAMIC_POOL_MIN_CHANNELS) + .setInitSize(DEFAULT_DYNAMIC_POOL_INITIAL_SIZE) + .setDynamicScaling( + DEFAULT_DYNAMIC_POOL_MIN_RPC, + DEFAULT_DYNAMIC_POOL_MAX_RPC, + DEFAULT_DYNAMIC_POOL_SCALE_DOWN_INTERVAL) + .setAffinityKeyLifetime(DEFAULT_DYNAMIC_POOL_AFFINITY_KEY_LIFETIME) + .setCleanupInterval(DEFAULT_DYNAMIC_POOL_CLEANUP_INTERVAL) + .build(); + } + private final TransportChannelProvider channelProvider; + private final ChannelEndpointCacheFactory channelEndpointCacheFactory; @SuppressWarnings("rawtypes") private final ApiFunction channelConfigurator; @@ -136,17 +224,22 @@ public class SpannerOptions extends ServiceOptions { private final Duration partitionedDmlTimeout; private final boolean grpcGcpExtensionEnabled; private final GcpManagedChannelOptions grpcGcpOptions; + private final boolean dynamicChannelPoolEnabled; + private final GcpChannelPoolOptions gcpChannelPoolOptions; private final boolean autoThrottleAdministrativeRequests; private final RetrySettings retryAdministrativeRequestsSettings; private final boolean trackTransactionStarter; - private final BuiltInOpenTelemetryMetricsProvider builtInOpenTelemetryMetricsProvider = - BuiltInOpenTelemetryMetricsProvider.INSTANCE; + private final boolean enableGrpcGcpOtelMetrics; + private final BuiltInMetricsProvider builtInMetricsProvider = BuiltInMetricsProvider.INSTANCE; + /** * These are the default {@link QueryOptions} defined by the user on this {@link SpannerOptions}. */ private final Map defaultQueryOptions; + /** These are the default {@link QueryOptions} defined in environment variables on this system. */ private final QueryOptions envQueryOptions; + /** * These are the merged query options of the {@link QueryOptions} set on this {@link * SpannerOptions} and the {@link QueryOptions} in the environment variables. Options specified in @@ -159,15 +252,19 @@ public class SpannerOptions extends ServiceOptions { private final CloseableExecutorProvider asyncExecutorProvider; private final String compressorName; private final boolean leaderAwareRoutingEnabled; - private final boolean attemptDirectPath; + private final boolean enableDirectAccess; + private final boolean enableGcpFallback; private final DirectedReadOptions directedReadOptions; private final boolean useVirtualThreads; private final OpenTelemetry openTelemetry; private final boolean enableApiTracing; private final boolean enableBuiltInMetrics; + private final boolean enableLocationApi; private final boolean enableExtendedTracing; private final boolean enableEndToEndTracing; private final String monitoringHost; + private final TransactionOptions defaultTransactionOptions; + private final RequestOptions.ClientContext clientContext; enum TracingFramework { OPEN_CENSUS, @@ -696,7 +793,8 @@ static int getDefaultAsyncExecutorProviderCoreThreadCount() { throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, String.format( - "The %s system property must be a valid integer. The value %s could not be parsed as an integer.", + "The %s system property must be a valid integer. The value %s could not be parsed as" + + " an integer.", propertyName, propertyValue)); } } @@ -736,7 +834,21 @@ protected SpannerOptions(Builder builder) { transportChannelExecutorThreadNameFormat = builder.transportChannelExecutorThreadNameFormat; channelProvider = builder.channelProvider; - channelConfigurator = builder.channelConfigurator; + channelEndpointCacheFactory = builder.channelEndpointCacheFactory; + if (builder.mTLSContext != null) { + channelConfigurator = + channelBuilder -> { + if (builder.channelConfigurator != null) { + channelBuilder = builder.channelConfigurator.apply(channelBuilder); + } + if (channelBuilder instanceof NettyChannelBuilder) { + ((NettyChannelBuilder) channelBuilder).sslContext(builder.mTLSContext); + } + return channelBuilder; + }; + } else { + channelConfigurator = builder.channelConfigurator; + } interceptorProvider = builder.interceptorProvider; sessionPoolOptions = builder.sessionPoolOptions != null @@ -747,18 +859,49 @@ protected SpannerOptions(Builder builder) { databaseRole = builder.databaseRole; sessionLabels = builder.sessionLabels; try { - spannerStubSettings = builder.spannerStubSettingsBuilder.build(); - instanceAdminStubSettings = builder.instanceAdminStubSettingsBuilder.build(); - databaseAdminStubSettings = builder.databaseAdminStubSettingsBuilder.build(); + String resolvedUniversalDomain = getResolvedUniverseDomain(); + spannerStubSettings = + builder.spannerStubSettingsBuilder.setUniverseDomain(resolvedUniversalDomain).build(); + instanceAdminStubSettings = + builder + .instanceAdminStubSettingsBuilder + .setUniverseDomain(resolvedUniversalDomain) + .build(); + databaseAdminStubSettings = + builder + .databaseAdminStubSettingsBuilder + .setUniverseDomain(resolvedUniversalDomain) + .build(); } catch (IOException e) { throw SpannerExceptionFactory.newSpannerException(e); } partitionedDmlTimeout = builder.partitionedDmlTimeout; grpcGcpExtensionEnabled = builder.grpcGcpExtensionEnabled; grpcGcpOptions = builder.grpcGcpOptions; + + // Dynamic channel pooling is disabled by default. + // It is only enabled when: + // 1. enableDynamicChannelPool() was explicitly called, AND + // 2. grpc-gcp extension is enabled, AND + // 3. numChannels was not explicitly set + if (builder.dynamicChannelPoolEnabled != null && builder.dynamicChannelPoolEnabled) { + // DCP was explicitly enabled, but respect numChannels if set + dynamicChannelPoolEnabled = grpcGcpExtensionEnabled && !builder.numChannelsExplicitlySet; + } else { + // DCP is disabled by default, or was explicitly disabled + dynamicChannelPoolEnabled = false; + } + + // Use user-provided GcpChannelPoolOptions or create Spanner-specific defaults + gcpChannelPoolOptions = + builder.gcpChannelPoolOptions != null + ? builder.gcpChannelPoolOptions + : createDefaultDynamicChannelPoolOptions(); + autoThrottleAdministrativeRequests = builder.autoThrottleAdministrativeRequests; retryAdministrativeRequestsSettings = builder.retryAdministrativeRequestsSettings; trackTransactionStarter = builder.trackTransactionStarter; + enableGrpcGcpOtelMetrics = builder.enableGrpcGcpOtelMetrics; defaultQueryOptions = builder.defaultQueryOptions; envQueryOptions = builder.getEnvironmentQueryOptions(); if (envQueryOptions.equals(QueryOptions.getDefaultInstance())) { @@ -775,15 +918,33 @@ protected SpannerOptions(Builder builder) { asyncExecutorProvider = builder.asyncExecutorProvider; compressorName = builder.compressorName; leaderAwareRoutingEnabled = builder.leaderAwareRoutingEnabled; - attemptDirectPath = builder.attemptDirectPath; + enableDirectAccess = builder.enableDirectAccess; + enableGcpFallback = builder.enableGcpFallback; directedReadOptions = builder.directedReadOptions; useVirtualThreads = builder.useVirtualThreads; openTelemetry = builder.openTelemetry; enableApiTracing = builder.enableApiTracing; enableExtendedTracing = builder.enableExtendedTracing; - enableBuiltInMetrics = builder.enableBuiltInMetrics; + if (builder.experimentalHost != null) { + enableBuiltInMetrics = false; + } else { + enableBuiltInMetrics = builder.enableBuiltInMetrics; + } + enableLocationApi = builder.enableLocationApi; enableEndToEndTracing = builder.enableEndToEndTracing; monitoringHost = builder.monitoringHost; + defaultTransactionOptions = builder.defaultTransactionOptions; + clientContext = builder.clientContext; + } + + private String getResolvedUniverseDomain() { + String universeDomain = getUniverseDomain(); + return Strings.isNullOrEmpty(universeDomain) ? GOOGLE_DEFAULT_UNIVERSE : universeDomain; + } + + /** Returns the default {@link RequestOptions.ClientContext} for this {@link SpannerOptions}. */ + public RequestOptions.ClientContext getClientContext() { + return clientContext; } /** @@ -817,19 +978,50 @@ default boolean isEnableApiTracing() { return false; } + default boolean isEnableDirectAccess() { + return false; + } + + default boolean isEnableGcpFallback() { + return false; + } + default boolean isEnableBuiltInMetrics() { return true; } + default boolean isEnableGRPCBuiltInMetrics() { + return false; + } + + default boolean isEnableGrpcGcpOtelMetrics() { + return true; + } + default boolean isEnableEndToEndTracing() { return false; } + default boolean isEnableLocationApi() { + return false; + } + + @Deprecated + @ObsoleteApi( + "This will be removed in an upcoming version without a major version bump. You should use" + + " universalDomain to configure the built-in metrics endpoint for a partner universe.") default String getMonitoringHost() { return null; } + + default GoogleCredentials getDefaultExperimentalHostCredentials() { + return null; + } } + static final String DEFAULT_SPANNER_EXPERIMENTAL_HOST_CREDENTIALS = + "SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN"; + /** * Default implementation of {@link SpannerEnvironment}. Reads all configuration from environment * variables. @@ -841,9 +1033,17 @@ private static class SpannerEnvironmentImpl implements SpannerEnvironment { "SPANNER_OPTIMIZER_STATISTICS_PACKAGE"; private static final String SPANNER_ENABLE_EXTENDED_TRACING = "SPANNER_ENABLE_EXTENDED_TRACING"; private static final String SPANNER_ENABLE_API_TRACING = "SPANNER_ENABLE_API_TRACING"; + private static final String GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS = + "GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS"; + private static final String GOOGLE_SPANNER_ENABLE_GCP_FALLBACK = + "GOOGLE_SPANNER_ENABLE_GCP_FALLBACK"; private static final String SPANNER_ENABLE_END_TO_END_TRACING = "SPANNER_ENABLE_END_TO_END_TRACING"; private static final String SPANNER_DISABLE_BUILTIN_METRICS = "SPANNER_DISABLE_BUILTIN_METRICS"; + private static final String SPANNER_DISABLE_DIRECT_ACCESS_GRPC_BUILTIN_METRICS = + "SPANNER_DISABLE_DIRECT_ACCESS_GRPC_BUILTIN_METRICS"; + private static final String SPANNER_DISABLE_GRPC_GCP_OTEL_METRICS = + "SPANNER_DISABLE_GRPC_GCP_OTEL_METRICS"; private static final String SPANNER_MONITORING_HOST = "SPANNER_MONITORING_HOST"; private SpannerEnvironmentImpl() {} @@ -871,20 +1071,53 @@ public boolean isEnableApiTracing() { return Boolean.parseBoolean(System.getenv(SPANNER_ENABLE_API_TRACING)); } + @Override + public boolean isEnableDirectAccess() { + return Boolean.parseBoolean(System.getenv(GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS)); + } + + @Override + public boolean isEnableGcpFallback() { + return Boolean.parseBoolean(System.getenv(GOOGLE_SPANNER_ENABLE_GCP_FALLBACK)); + } + @Override public boolean isEnableBuiltInMetrics() { return !Boolean.parseBoolean(System.getenv(SPANNER_DISABLE_BUILTIN_METRICS)); } + @Override + public boolean isEnableGRPCBuiltInMetrics() { + // Enable gRPC built-in metrics as default unless explicitly + // disabled via env. + return !Boolean.parseBoolean( + System.getenv(SPANNER_DISABLE_DIRECT_ACCESS_GRPC_BUILTIN_METRICS)); + } + + @Override + public boolean isEnableGrpcGcpOtelMetrics() { + return !Boolean.parseBoolean(System.getenv(SPANNER_DISABLE_GRPC_GCP_OTEL_METRICS)); + } + @Override public boolean isEnableEndToEndTracing() { return Boolean.parseBoolean(System.getenv(SPANNER_ENABLE_END_TO_END_TRACING)); } + @Override + public boolean isEnableLocationApi() { + return Boolean.parseBoolean(System.getenv(EXPERIMENTAL_LOCATION_API_ENV_VAR)); + } + @Override public String getMonitoringHost() { return System.getenv(SPANNER_MONITORING_HOST); } + + @Override + public GoogleCredentials getDefaultExperimentalHostCredentials() { + return getOAuthTokenFromFile(System.getenv(DEFAULT_SPANNER_EXPERIMENTAL_HOST_CREDENTIALS)); + } } /** Builder for {@link SpannerOptions} instances. */ @@ -908,6 +1141,7 @@ public static class Builder createCustomClientLibToken(LIQUIBASE_API_CLIENT_LIB_TOKEN), createCustomClientLibToken(PG_ADAPTER_CLIENT_LIB_TOKEN)); private TransportChannelProvider channelProvider; + private ChannelEndpointCacheFactory channelEndpointCacheFactory; @SuppressWarnings("rawtypes") private ApiFunction channelConfigurator; @@ -915,6 +1149,7 @@ public static class Builder private GrpcInterceptorProvider interceptorProvider; private Integer numChannels; + private boolean numChannelsExplicitlySet = false; private String transportChannelExecutorThreadNameFormat = "Cloud-Spanner-TransportChannel-%d"; @@ -930,19 +1165,24 @@ public static class Builder private DatabaseAdminStubSettings.Builder databaseAdminStubSettingsBuilder = DatabaseAdminStubSettings.newBuilder(); private Duration partitionedDmlTimeout = Duration.ofHours(2L); - private boolean grpcGcpExtensionEnabled = false; + private boolean grpcGcpExtensionEnabled = true; private GcpManagedChannelOptions grpcGcpOptions; + private Boolean dynamicChannelPoolEnabled; + private GcpChannelPoolOptions gcpChannelPoolOptions; private RetrySettings retryAdministrativeRequestsSettings = DEFAULT_ADMIN_REQUESTS_LIMIT_EXCEEDED_RETRY_SETTINGS; private boolean autoThrottleAdministrativeRequests = false; private boolean trackTransactionStarter = false; private Map defaultQueryOptions = new HashMap<>(); + private boolean enableGrpcGcpOtelMetrics = + SpannerOptions.environment.isEnableGrpcGcpOtelMetrics(); private CallCredentialsProvider callCredentialsProvider; private CloseableExecutorProvider asyncExecutorProvider; private String compressorName; private String emulatorHost = System.getenv("SPANNER_EMULATOR_HOST"); private boolean leaderAwareRoutingEnabled = true; - private boolean attemptDirectPath = true; + private boolean enableDirectAccess = SpannerOptions.environment.isEnableDirectAccess(); + private boolean enableGcpFallback = SpannerOptions.environment.isEnableGcpFallback(); private DirectedReadOptions directedReadOptions; private boolean useVirtualThreads = false; private OpenTelemetry openTelemetry; @@ -950,7 +1190,13 @@ public static class Builder private boolean enableExtendedTracing = SpannerOptions.environment.isEnableExtendedTracing(); private boolean enableEndToEndTracing = SpannerOptions.environment.isEnableEndToEndTracing(); private boolean enableBuiltInMetrics = SpannerOptions.environment.isEnableBuiltInMetrics(); + private boolean enableLocationApi = SpannerOptions.environment.isEnableLocationApi(); private String monitoringHost = SpannerOptions.environment.getMonitoringHost(); + private SslContext mTLSContext = null; + private String experimentalHost = null; + private boolean usePlainText = false; + private TransactionOptions defaultTransactionOptions = TransactionOptions.getDefaultInstance(); + private RequestOptions.ClientContext clientContext; private static String createCustomClientLibToken(String token) { return token + " " + ServiceOptions.getGoogApiClientLibName(); @@ -958,26 +1204,56 @@ private static String createCustomClientLibToken(String token) { protected Builder() { // Manually set retry and polling settings that work. - OperationTimedPollAlgorithm longRunningPollingAlgorithm = + RetrySettings baseRetrySettings = + RetrySettings.newBuilder() + .setInitialRpcTimeoutDuration(Duration.ofSeconds(60L)) + .setMaxRpcTimeoutDuration(Duration.ofSeconds(600L)) + .setMaxRetryDelayDuration(Duration.ofSeconds(45L)) + .setRetryDelayMultiplier(1.5) + .setRpcTimeoutMultiplier(1.5) + .setTotalTimeoutDuration(Duration.ofHours(48L)) + .build(); + + // The polling setting with a short initial delay as we expect + // it to return soon. + OperationTimedPollAlgorithm shortInitialPollingDelayAlgorithm = OperationTimedPollAlgorithm.create( - RetrySettings.newBuilder() - .setInitialRpcTimeoutDuration(Duration.ofSeconds(60L)) - .setMaxRpcTimeoutDuration(Duration.ofSeconds(600L)) - .setInitialRetryDelayDuration(Duration.ofSeconds(20L)) - .setMaxRetryDelayDuration(Duration.ofSeconds(45L)) - .setRetryDelayMultiplier(1.5) - .setRpcTimeoutMultiplier(1.5) - .setTotalTimeoutDuration(Duration.ofHours(48L)) + baseRetrySettings.toBuilder() + .setInitialRetryDelayDuration(Duration.ofSeconds(1L)) .build()); databaseAdminStubSettingsBuilder .createDatabaseOperationSettings() - .setPollingAlgorithm(longRunningPollingAlgorithm); + .setPollingAlgorithm(shortInitialPollingDelayAlgorithm); + + // The polling setting with a long initial delay as we expect + // the operation to take a bit long time to return. + OperationTimedPollAlgorithm longInitialPollingDelayAlgorithm = + OperationTimedPollAlgorithm.create( + baseRetrySettings.toBuilder() + .setInitialRetryDelayDuration(Duration.ofSeconds(20L)) + .build()); databaseAdminStubSettingsBuilder .createBackupOperationSettings() - .setPollingAlgorithm(longRunningPollingAlgorithm); + .setPollingAlgorithm(longInitialPollingDelayAlgorithm); databaseAdminStubSettingsBuilder .restoreDatabaseOperationSettings() - .setPollingAlgorithm(longRunningPollingAlgorithm); + .setPollingAlgorithm(longInitialPollingDelayAlgorithm); + + // updateDatabaseDdl requires a separate setting because + // it has no existing overrides on RPC timeouts for LRO polling. + databaseAdminStubSettingsBuilder + .updateDatabaseDdlOperationSettings() + .setPollingAlgorithm( + OperationTimedPollAlgorithm.create( + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(1000L)) + .setRetryDelayMultiplier(1.5) + .setMaxRetryDelayDuration(Duration.ofMillis(45000L)) + .setInitialRpcTimeoutDuration(Duration.ZERO) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ZERO) + .setTotalTimeoutDuration(Duration.ofHours(48L)) + .build())); } Builder(SpannerOptions options) { @@ -1001,24 +1277,32 @@ protected Builder() { this.partitionedDmlTimeout = options.partitionedDmlTimeout; this.grpcGcpExtensionEnabled = options.grpcGcpExtensionEnabled; this.grpcGcpOptions = options.grpcGcpOptions; + this.dynamicChannelPoolEnabled = options.dynamicChannelPoolEnabled; + this.gcpChannelPoolOptions = options.gcpChannelPoolOptions; this.autoThrottleAdministrativeRequests = options.autoThrottleAdministrativeRequests; this.retryAdministrativeRequestsSettings = options.retryAdministrativeRequestsSettings; this.trackTransactionStarter = options.trackTransactionStarter; + this.enableGrpcGcpOtelMetrics = options.enableGrpcGcpOtelMetrics; this.defaultQueryOptions = options.defaultQueryOptions; this.callCredentialsProvider = options.callCredentialsProvider; this.asyncExecutorProvider = options.asyncExecutorProvider; this.compressorName = options.compressorName; this.channelProvider = options.channelProvider; + this.channelEndpointCacheFactory = options.channelEndpointCacheFactory; this.channelConfigurator = options.channelConfigurator; this.interceptorProvider = options.interceptorProvider; - this.attemptDirectPath = options.attemptDirectPath; + this.enableDirectAccess = options.enableDirectAccess; + this.enableGcpFallback = options.enableGcpFallback; this.directedReadOptions = options.directedReadOptions; this.useVirtualThreads = options.useVirtualThreads; this.enableApiTracing = options.enableApiTracing; this.enableExtendedTracing = options.enableExtendedTracing; this.enableBuiltInMetrics = options.enableBuiltInMetrics; + this.enableLocationApi = options.enableLocationApi; this.enableEndToEndTracing = options.enableEndToEndTracing; this.monitoringHost = options.monitoringHost; + this.defaultTransactionOptions = options.defaultTransactionOptions; + this.clientContext = options.clientContext; } @Override @@ -1064,6 +1348,13 @@ public Builder setChannelProvider(TransportChannelProvider channelProvider) { return this; } + @InternalApi + public Builder setChannelEndpointCacheFactory( + ChannelEndpointCacheFactory channelEndpointCacheFactory) { + this.channelEndpointCacheFactory = channelEndpointCacheFactory; + return this; + } + /** * Sets an {@link ApiFunction} that will be used to configure the transport channel. This will * only be used if no custom {@link TransportChannelProvider} has been set. @@ -1090,6 +1381,7 @@ public Builder setInterceptorProvider(GrpcInterceptorProvider interceptorProvide */ public Builder setNumChannels(int numChannels) { this.numChannels = numChannels; + this.numChannelsExplicitlySet = true; return this; } @@ -1148,8 +1440,9 @@ public Builder setSessionLabels(Map sessionLabels) { @Override public Builder setRetrySettings(RetrySettings retrySettings) { throw new UnsupportedOperationException( - "SpannerOptions does not support setting global retry settings. " - + "Call spannerStubSettingsBuilder().Settings().setRetrySettings(RetrySettings) instead."); + "SpannerOptions does not support setting global retry settings. Call" + + " spannerStubSettingsBuilder().Settings().setRetrySettings(RetrySettings)" + + " instead."); } /** @@ -1448,20 +1741,32 @@ public Builder setHost(String host) { return this; } - /** - * Enables gRPC-GCP extension with the default settings. Do not set - * GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS to true in combination with this option, as - * Multiplexed sessions are not supported for gRPC-GCP. - */ + @ExperimentalApi("https://github.com/googleapis/java-spanner/pull/3676") + public Builder setExperimentalHost(String host) { + if (this.usePlainText) { + Preconditions.checkArgument( + !host.startsWith("https:"), + "Please remove the 'https:' protocol prefix from the host string when using plain text" + + " communication"); + if (!host.startsWith("http")) { + host = "http://" + host; + } + } + super.setHost(host); + super.setProjectId(EXPERIMENTAL_HOST_PROJECT_ID); + setSessionPoolOption(SessionPoolOptions.newBuilder().setExperimentalHost().build()); + this.experimentalHost = host; + return this; + } + + /** Enables gRPC-GCP extension with the default settings. This option is enabled by default. */ public Builder enableGrpcGcpExtension() { return this.enableGrpcGcpExtension(null); } /** * Enables gRPC-GCP extension and uses provided options for configuration. The metric registry - * and default Spanner metric labels will be added automatically. Do not set - * GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS to true in combination with this option, as - * Multiplexed sessions are not supported for gRPC-GCP. + * and default Spanner metric labels will be added automatically. */ public Builder enableGrpcGcpExtension(GcpManagedChannelOptions options) { this.grpcGcpExtensionEnabled = true; @@ -1469,12 +1774,79 @@ public Builder enableGrpcGcpExtension(GcpManagedChannelOptions options) { return this; } - /** Disables gRPC-GCP extension. */ + /** Disables gRPC-GCP extension and uses GAX channel pool instead. */ public Builder disableGrpcGcpExtension() { this.grpcGcpExtensionEnabled = false; return this; } + /** + * Enables dynamic channel pooling. When enabled, the client will automatically scale the number + * of channels based on load. This requires the gRPC-GCP extension to be enabled. + * + *

    Dynamic channel pooling is disabled by default. Use this method to explicitly enable it. + * Note that calling {@link #setNumChannels(int)} will disable dynamic channel pooling even if + * this method was called. + */ + public Builder enableDynamicChannelPool() { + this.dynamicChannelPoolEnabled = true; + return this; + } + + /** + * Disables dynamic channel pooling. When disabled, the client will use a static number of + * channels as configured by {@link #setNumChannels(int)}. + * + *

    Dynamic channel pooling is disabled by default, so this method is typically not needed + * unless you want to explicitly disable it after enabling it. + */ + public Builder disableDynamicChannelPool() { + this.dynamicChannelPoolEnabled = false; + return this; + } + + /** + * Sets whether to enable or disable grpc-gcp OpenTelemetry metrics injection. When disabled, + * Spanner will not automatically inject an OpenTelemetry {@link + * io.opentelemetry.api.metrics.Meter} into grpc-gcp. If a Meter or MetricRegistry is explicitly + * provided via {@link GcpManagedChannelOptions}, those settings will still be honored. + */ + public Builder setGrpcGcpOtelMetricsEnabled(boolean enableGrpcGcpOtelMetrics) { + this.enableGrpcGcpOtelMetrics = enableGrpcGcpOtelMetrics; + return this; + } + + /** + * Sets the channel pool options for dynamic channel pooling. Use this to configure the dynamic + * channel pool behavior when {@link #enableDynamicChannelPool()} is enabled. + * + *

    If not set, Spanner-specific defaults will be used (see {@link + * #createDefaultDynamicChannelPoolOptions()}). + * + *

    Example usage: + * + *

    {@code
    +     * SpannerOptions options = SpannerOptions.newBuilder()
    +     *     .setProjectId("my-project")
    +     *     .enableDynamicChannelPool()
    +     *     .setGcpChannelPoolOptions(
    +     *         GcpChannelPoolOptions.newBuilder()
    +     *             .setMaxSize(15)
    +     *             .setMinSize(3)
    +     *             .setInitSize(5)
    +     *             .setDynamicScaling(10, 30, Duration.ofMinutes(5))
    +     *             .build())
    +     *     .build();
    +     * }
    + * + * @param gcpChannelPoolOptions the channel pool options to use + * @return this builder for chaining + */ + public Builder setGcpChannelPoolOptions(GcpChannelPoolOptions gcpChannelPoolOptions) { + this.gcpChannelPoolOptions = Preconditions.checkNotNull(gcpChannelPoolOptions); + return this; + } + /** * Sets the host of an emulator to use. By default the value is read from an environment * variable. If the environment variable is not set, this will be null. @@ -1484,6 +1856,44 @@ public Builder setEmulatorHost(String emulatorHost) { return this; } + /** + * Configures mTLS authentication using the provided client certificate and key files. mTLS is + * only supported for experimental spanner hosts. + * + * @param clientCertificate Path to the client certificate file. + * @param clientCertificateKey Path to the client private key file. + * @throws SpannerException If an error occurs while configuring the mTLS context + */ + @ExperimentalApi("https://github.com/googleapis/java-spanner/pull/3574") + public Builder useClientCert(String clientCertificate, String clientCertificateKey) { + try { + this.mTLSContext = + GrpcSslContexts.forClient() + .keyManager(new File(clientCertificate), new File(clientCertificateKey)) + .build(); + } catch (Exception e) { + throw SpannerExceptionFactory.asSpannerException(e); + } + return this; + } + + /** + * {@code usePlainText} will configure the transport to use plaintext (no TLS) and will set + * credentials to {@link com.google.cloud.NoCredentials} to avoid sending authentication over an + * unsecured channel. + */ + @ExperimentalApi("https://github.com/googleapis/java-spanner/pull/4264") + public Builder usePlainText() { + this.usePlainText = true; + this.setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setCredentials(NoCredentials.getInstance()); + if (this.experimentalHost != null) { + // Re-apply host settings to ensure http:// is prepended. + setExperimentalHost(this.experimentalHost); + } + return this; + } + /** * Sets OpenTelemetry object to be used for Spanner Metrics and Traces. GlobalOpenTelemetry will * be used as fallback if this options is not set. @@ -1512,8 +1922,15 @@ public Builder disableLeaderAwareRouting() { } @BetaApi + public Builder setEnableDirectAccess(boolean enableDirectAccess) { + this.enableDirectAccess = enableDirectAccess; + return this; + } + + @ObsoleteApi("Use setEnableDirectAccess(false) instead") + @Deprecated public Builder disableDirectPath() { - this.attemptDirectPath = false; + this.enableDirectAccess = false; return this; } @@ -1548,6 +1965,10 @@ public Builder setBuiltInMetricsEnabled(boolean enableBuiltInMetrics) { } /** Sets the monitoring host to be used for Built-in client side metrics */ + @Deprecated + @ObsoleteApi( + "This will be removed in an upcoming version without a major version bump. You should use" + + " universalDomain to configure the built-in metrics endpoint for a partner universe.") public Builder setMonitoringHost(String monitoringHost) { this.monitoringHost = monitoringHost; return this; @@ -1578,11 +1999,73 @@ public Builder setEnableEndToEndTracing(boolean enableEndToEndTracing) { return this; } + /** + * Provides the default read-write transaction options for all databases. These defaults are + * overridden by any explicit {@link com.google.cloud.spanner.Options.TransactionOption} + * provided through {@link DatabaseClient}. + * + *

    Example Usage: + * + *

    {@code
    +     * DefaultReadWriteTransactionOptions options = DefaultReadWriteTransactionOptions.newBuilder()
    +     * .setIsolationLevel(IsolationLevel.SERIALIZABLE)
    +     * .setReadLockMode(ReadLockMode.OPTIMISTIC)
    +     * .build();
    +     * }
    + */ + public static class DefaultReadWriteTransactionOptions { + private final TransactionOptions defaultTransactionOptions; + + private DefaultReadWriteTransactionOptions(TransactionOptions defaultTransactionOptions) { + this.defaultTransactionOptions = defaultTransactionOptions; + } + + public static DefaultReadWriteTransactionOptionsBuilder newBuilder() { + return new DefaultReadWriteTransactionOptionsBuilder(); + } + + public static class DefaultReadWriteTransactionOptionsBuilder { + private final TransactionOptions.Builder transactionOptionsBuilder = + TransactionOptions.newBuilder(); + + public DefaultReadWriteTransactionOptionsBuilder setIsolationLevel( + IsolationLevel isolationLevel) { + transactionOptionsBuilder.setIsolationLevel(isolationLevel); + return this; + } + + public DefaultReadWriteTransactionOptionsBuilder setReadLockMode( + ReadLockMode readLockMode) { + transactionOptionsBuilder.getReadWriteBuilder().setReadLockMode(readLockMode); + return this; + } + + public DefaultReadWriteTransactionOptions build() { + return new DefaultReadWriteTransactionOptions(transactionOptionsBuilder.build()); + } + } + } + + /** Sets the {@link DefaultReadWriteTransactionOptions} for read-write transactions. */ + public Builder setDefaultTransactionOptions( + DefaultReadWriteTransactionOptions defaultReadWriteTransactionOptions) { + Preconditions.checkNotNull( + defaultReadWriteTransactionOptions, "DefaultReadWriteTransactionOptions cannot be null"); + this.defaultTransactionOptions = defaultReadWriteTransactionOptions.defaultTransactionOptions; + return this; + } + + /** Sets the default {@link RequestOptions.ClientContext} for all requests. */ + public Builder setDefaultClientContext(RequestOptions.ClientContext clientContext) { + this.clientContext = clientContext; + return this; + } + @SuppressWarnings("rawtypes") @Override public SpannerOptions build() { // Set the host of emulator has been set. - if (emulatorHost != null) { + if (emulatorHost != null && experimentalHost == null) { if (!emulatorHost.startsWith("http")) { emulatorHost = "http://" + emulatorHost; } @@ -1592,6 +2075,8 @@ public SpannerOptions build() { this.setChannelConfigurator(ManagedChannelBuilder::usePlaintext); // As we are using plain text, we should never send any credentials. this.setCredentials(NoCredentials.getInstance()); + } else if (experimentalHost != null && credentials == null) { + credentials = environment.getDefaultExperimentalHostCredentials(); } if (this.numChannels == null) { this.numChannels = @@ -1632,6 +2117,24 @@ public static void useDefaultEnvironment() { SpannerOptions.environment = SpannerEnvironmentImpl.INSTANCE; } + @InternalApi + public static GoogleCredentials getDefaultExperimentalCredentialsFromSysEnv() { + return getOAuthTokenFromFile(System.getenv(DEFAULT_SPANNER_EXPERIMENTAL_HOST_CREDENTIALS)); + } + + private static @Nullable GoogleCredentials getOAuthTokenFromFile(@Nullable String file) { + if (!Strings.isNullOrEmpty(file)) { + String token; + try { + token = Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(file))); + } catch (IOException e) { + throw SpannerExceptionFactory.newSpannerException(e); + } + return GoogleCredentials.create(new AccessToken(token, null)); + } + return null; + } + /** * Enables OpenTelemetry traces. Enabling OpenTelemetry traces will disable OpenCensus traces. By * default, OpenCensus traces are enabled. @@ -1641,7 +2144,8 @@ public static void enableOpenTelemetryTraces() { if (activeTracingFramework != null && activeTracingFramework != TracingFramework.OPEN_TELEMETRY) { throw new IllegalStateException( - "ActiveTracingFramework is set to OpenCensus and cannot be reset after SpannerOptions object is created."); + "ActiveTracingFramework is set to OpenCensus and cannot be reset after SpannerOptions" + + " object is created."); } activeTracingFramework = TracingFramework.OPEN_TELEMETRY; } @@ -1649,13 +2153,15 @@ public static void enableOpenTelemetryTraces() { /** Enables OpenCensus traces. Enabling OpenCensus traces will disable OpenTelemetry traces. */ @ObsoleteApi( - "The OpenCensus project is deprecated. Use enableOpenTelemetryTraces to switch to OpenTelemetry traces") + "The OpenCensus project is deprecated. Use enableOpenTelemetryTraces to switch to" + + " OpenTelemetry traces") public static void enableOpenCensusTraces() { synchronized (lock) { if (activeTracingFramework != null && activeTracingFramework != TracingFramework.OPEN_CENSUS) { throw new IllegalStateException( - "ActiveTracingFramework is set to OpenTelemetry and cannot be reset after SpannerOptions object is created."); + "ActiveTracingFramework is set to OpenTelemetry and cannot be reset after" + + " SpannerOptions object is created."); } activeTracingFramework = TracingFramework.OPEN_CENSUS; } @@ -1666,7 +2172,8 @@ public static void enableOpenCensusTraces() { * not a valid production scenario */ @ObsoleteApi( - "The OpenCensus project is deprecated. Use enableOpenTelemetryTraces to switch to OpenTelemetry traces") + "The OpenCensus project is deprecated. Use enableOpenTelemetryTraces to switch to" + + " OpenTelemetry traces") @VisibleForTesting static void resetActiveTracingFramework() { activeTracingFramework = null; @@ -1718,6 +2225,11 @@ public TransportChannelProvider getChannelProvider() { return channelProvider; } + @InternalApi + public ChannelEndpointCacheFactory getChannelEndpointCacheFactory() { + return channelEndpointCacheFactory; + } + @SuppressWarnings("rawtypes") public ApiFunction getChannelConfigurator() { return channelConfigurator; @@ -1771,10 +2283,34 @@ public boolean isGrpcGcpExtensionEnabled() { return grpcGcpExtensionEnabled; } + public boolean isGrpcGcpOtelMetricsEnabled() { + return enableGrpcGcpOtelMetrics; + } + public GcpManagedChannelOptions getGrpcGcpOptions() { return grpcGcpOptions; } + /** + * Returns whether dynamic channel pooling is enabled. Dynamic channel pooling is disabled by + * default. Use {@link Builder#enableDynamicChannelPool()} to explicitly enable it. Note that + * calling {@link Builder#setNumChannels(int)} will disable dynamic channel pooling even if it was + * explicitly enabled. + */ + public boolean isDynamicChannelPoolEnabled() { + return dynamicChannelPoolEnabled; + } + + /** + * Returns the channel pool options for dynamic channel pooling. If no options were explicitly + * set, returns the Spanner-specific defaults. + * + * @see #createDefaultDynamicChannelPoolOptions() + */ + public GcpChannelPoolOptions getGcpChannelPoolOptions() { + return gcpChannelPoolOptions; + } + public boolean isAutoThrottleAdministrativeRequests() { return autoThrottleAdministrativeRequests; } @@ -1791,6 +2327,15 @@ public CallCredentialsProvider getCallCredentialsProvider() { return callCredentialsProvider; } + private boolean usesNoCredentials() { + // When JMH is enabled, we need to enable built-in metrics + if (System.getProperty("jmh.enabled") != null + && System.getProperty("jmh.enabled").equals("true")) { + return false; + } + return Objects.equals(getCredentials(), NoCredentials.getInstance()); + } + public String getCompressorName() { return compressorName; } @@ -1804,8 +2349,18 @@ public DirectedReadOptions getDirectedReadOptions() { } @BetaApi + public Boolean isEnableDirectAccess() { + return enableDirectAccess; + } + + public Boolean isEnableGcpFallback() { + return enableGcpFallback; + } + + @ObsoleteApi("Use isEnableDirectAccess() instead") + @Deprecated public boolean isAttemptDirectPath() { - return attemptDirectPath; + return enableDirectAccess; } /** @@ -1825,6 +2380,24 @@ public ApiTracerFactory getApiTracerFactory() { return createApiTracerFactory(false, false); } + /** Returns the internal OpenTelemetry instance used for built-in metrics. */ + @InternalApi + public OpenTelemetry getBuiltInOpenTelemetry() { + return this.builtInMetricsProvider.getOrCreateOpenTelemetry( + this.getProjectId(), getCredentials(), this.monitoringHost, getUniverseDomain()); + } + + public void enablegRPCMetrics(InstantiatingGrpcChannelProvider.Builder channelProviderBuilder) { + if (SpannerOptions.environment.isEnableGRPCBuiltInMetrics()) { + this.builtInMetricsProvider.enableGrpcMetrics( + channelProviderBuilder, + this.getProjectId(), + getCredentials(), + this.monitoringHost, + getUniverseDomain()); + } + } + public ApiTracerFactory getApiTracerFactory(boolean isAdminClient, boolean isEmulatorEnabled) { return createApiTracerFactory(isAdminClient, isEmulatorEnabled); } @@ -1838,7 +2411,7 @@ private ApiTracerFactory createApiTracerFactory( // Add Metrics Tracer factory if built in metrics are enabled and if the client is data client // and if emulator is not enabled. - if (isEnableBuiltInMetrics() && !isAdminClient && !isEmulatorEnabled) { + if (isEnableBuiltInMetrics() && !isAdminClient && !isEmulatorEnabled && !usesNoCredentials()) { ApiTracerFactory metricsTracerFactory = createMetricsApiTracerFactory(); if (metricsTracerFactory != null) { apiTracerFactories.add(metricsTracerFactory); @@ -1866,14 +2439,21 @@ private ApiTracerFactory getDefaultApiTracerFactory() { private ApiTracerFactory createMetricsApiTracerFactory() { OpenTelemetry openTelemetry = - this.builtInOpenTelemetryMetricsProvider.getOrCreateOpenTelemetry( - this.getProjectId(), getCredentials(), this.monitoringHost); + this.builtInMetricsProvider.getOrCreateOpenTelemetry( + this.getProjectId(), getCredentials(), this.monitoringHost, getUniverseDomain()); return openTelemetry != null - ? new MetricsTracerFactory( - new OpenTelemetryMetricsRecorder(openTelemetry, BuiltInMetricsConstant.METER_NAME), - builtInOpenTelemetryMetricsProvider.createClientAttributes( - this.getProjectId(), "spanner-java/" + GaxProperties.getLibraryVersion(getClass()))) + ? new BuiltInMetricsTracerFactory( + new BuiltInMetricsRecorder(openTelemetry, BuiltInMetricsConstant.METER_NAME), + new HashMap<>(), + new TraceWrapper( + Tracing.getTracer(), + // Using the OpenTelemetry object set in Spanner Options, will be NoOp if not set + this.getOpenTelemetry() + .getTracer( + MetricRegistryConstants.INSTRUMENTATION_SCOPE, + GaxProperties.getLibraryVersion(getClass())), + true)) : null; } @@ -1894,11 +2474,20 @@ public boolean isEnableBuiltInMetrics() { return enableBuiltInMetrics; } + @InternalApi + public boolean isEnableLocationApi() { + return enableLocationApi; + } + /** Returns the override metrics Host. */ String getMonitoringHost() { return monitoringHost; } + public TransactionOptions getDefaultTransactionOptions() { + return defaultTransactionOptions; + } + @BetaApi public boolean isUseVirtualThreads() { return useVirtualThreads; @@ -1956,7 +2545,11 @@ public static GrpcTransportOptions getDefaultGrpcTransportOptions() { @Override protected String getDefaultHost() { - return DEFAULT_HOST; + String universeDomain = getUniverseDomain(); + if (Strings.isNullOrEmpty(universeDomain)) { + universeDomain = GOOGLE_DEFAULT_UNIVERSE; + } + return String.format("https://%s.%s", SPANNER_SERVICE_NAME, universeDomain); } private static class SpannerDefaults implements ServiceDefaults { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerRetryHelper.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerRetryHelper.java index 5fb35513222..0dabcbd0094 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerRetryHelper.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerRetryHelper.java @@ -56,10 +56,7 @@ class SpannerRetryHelper { */ @VisibleForTesting static final RetrySettings txRetrySettings = - SpannerStubSettings.newBuilder() - .rollbackSettings() - .getRetrySettings() - .toBuilder() + SpannerStubSettings.newBuilder().rollbackSettings().getRetrySettings().toBuilder() .setTotalTimeoutDuration(Duration.ofHours(24L)) .setMaxAttempts(0) .build(); @@ -107,8 +104,7 @@ public TimedAttemptSettings createNextAttempt( if (prevThrowable != null) { long retryDelay = SpannerException.extractRetryDelay(prevThrowable); if (retryDelay > -1L) { - return prevSettings - .toBuilder() + return prevSettings.toBuilder() .setRandomizedRetryDelayDuration(Duration.ofMillis(retryDelay)) .build(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerTypeConverter.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerTypeConverter.java new file mode 100644 index 00000000000..02c0cc213d6 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerTypeConverter.java @@ -0,0 +1,111 @@ +/* + * 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.spanner; + +import com.google.cloud.Date; +import com.google.protobuf.ListValue; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAccessor; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +final class SpannerTypeConverter { + + private static final ZoneId UTC_ZONE = ZoneId.of("UTC"); + private static final DateTimeFormatter ISO_8601_DATE_FORMATTER = + DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"); + + static Value createUntypedArrayValue(Stream stream) { + List values = + stream + .map( + val -> + com.google.protobuf.Value.newBuilder() + .setStringValue(String.valueOf(val)) + .build()) + .collect(Collectors.toList()); + return Value.untyped( + com.google.protobuf.Value.newBuilder() + .setListValue(ListValue.newBuilder().addAllValues(values).build()) + .build()); + } + + static String convertToISO8601(T dateTime) { + return ISO_8601_DATE_FORMATTER.format(dateTime); + } + + static Value createUntypedStringValue(T value) { + return Value.untyped( + com.google.protobuf.Value.newBuilder().setStringValue(String.valueOf(value)).build()); + } + + static Iterable convertToTypedIterable( + Function func, T val, Iterator iterator) { + List values = new ArrayList<>(); + SpannerTypeConverter.processIterable(val, iterator, func, values::add); + return values; + } + + static Iterable convertToTypedIterable(T val, Iterator iterator) { + return convertToTypedIterable(v -> v, val, iterator); + } + + @SuppressWarnings("unchecked") + static void processIterable( + T val, Iterator iterator, Function func, Consumer consumer) { + consumer.accept(func.apply(val)); + iterator.forEachRemaining(values -> consumer.accept(func.apply((T) values))); + } + + static Date convertLocalDateToSpannerDate(LocalDate date) { + return Date.fromYearMonthDay(date.getYear(), date.getMonthValue(), date.getDayOfMonth()); + } + + static Value createUntypedIterableValue( + T value, Iterator iterator, Function func) { + ListValue.Builder listValueBuilder = ListValue.newBuilder(); + SpannerTypeConverter.processIterable( + value, + iterator, + (val) -> com.google.protobuf.Value.newBuilder().setStringValue(func.apply(val)).build(), + listValueBuilder::addValues); + return Value.untyped( + com.google.protobuf.Value.newBuilder().setListValue(listValueBuilder.build()).build()); + } + + static ZonedDateTime atUTC(LocalDateTime localDateTime) { + return atUTC(localDateTime.atZone(ZoneId.systemDefault())); + } + + static ZonedDateTime atUTC(OffsetDateTime localDateTime) { + return localDateTime.atZoneSameInstant(UTC_ZONE); + } + + static ZonedDateTime atUTC(ZonedDateTime localDateTime) { + return localDateTime.withZoneSameInstant(UTC_ZONE); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java index a89c7c048fc..1776139d81d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java @@ -20,7 +20,10 @@ import static com.google.common.base.Preconditions.checkState; import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; +import com.google.cloud.spanner.connection.AbstractStatementParser; +import com.google.cloud.spanner.connection.AbstractStatementParser.ParametersInfo; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; import java.io.Serializable; import java.util.Collections; @@ -140,7 +143,12 @@ Builder handle(Value value) { /** Creates a {@code Statement} with the given SQL text {@code sql}. */ public static Statement of(String sql) { - return newBuilder(sql).build(); + return new Statement(sql, ImmutableMap.of(), /* queryOptions= */ null); + } + + /** Creates a {@link Statement} with the given SQL text and parameters. */ + public static Statement of(String sql, ImmutableMap parameters) { + return new Statement(sql, parameters, /* queryOptions= */ null); } /** Creates a new statement builder with the SQL text {@code sql}. */ @@ -245,4 +253,103 @@ StringBuilder toString(StringBuilder b) { } return b; } + + /** + * Factory for creating {@link Statement}s with unnamed parameters. + * + *

    This class is primarily intended for framework developers who want to integrate the Spanner + * client with a framework that uses unnamed parameters. Developers who want to use the Spanner + * client in their application, should use named parameters. + * + *

    + * + *

    Usage Example

    + * + * Simple SQL query + * + *
    {@code
    +   * Statement statement = databaseClient.getStatementFactory()
    +   *     .withUnnamedParameters("SELECT * FROM TABLE WHERE ID = ?", 10L)
    +   * }
    + * + * SQL query with multiple parameters + * + *
    {@code
    +   * long id = 10L;
    +   * String name = "google";
    +   * List phoneNumbers = Arrays.asList("1234567890", "0987654321");
    +   * Statement statement = databaseClient.getStatementFactory()
    +   *      .withUnnamedParameters("INSERT INTO TABLE (ID, name, phonenumbers) VALUES(?, ?, ?)", id, name, phoneNumbers)
    +   * }
    + * + * How to use arrays with the IN operator + * + *
    {@code
    +   * long[] ids = {10L, 12L, 1483L};
    +   * Statement statement = databaseClient.getStatementFactory()
    +   *     .withUnnamedParameters("SELECT * FROM TABLE WHERE ID = UNNEST(?)", ids)
    +   * }
    + * + * @see DatabaseClient#getStatementFactory() + * @see StatementFactory#withUnnamedParameters(String, Object...) + */ + public static final class StatementFactory { + private final Dialect dialect; + + StatementFactory(Dialect dialect) { + this.dialect = dialect; + } + + public Statement of(String sql) { + return Statement.of(sql); + } + + /** + * This function accepts a SQL statement with unnamed parameters (?) and accepts a list of + * objects that should be used as the values for those parameters. Primitive types are + * supported. + * + *

    For parameters of type DATE, the following types are supported + * + *

      + *
    • {@link java.time.LocalDate} + *
    • {@link com.google.cloud.Date} + *
    + * + *

    For parameters of type TIMESTAMP, the following types are supported. Note that Spanner + * stores all timestamps in UTC. Instances of ZonedDateTime and OffsetDateTime that use other + * timezones than UTC, will be converted to the corresponding UTC values before being sent to + * Spanner. Instances of LocalDateTime will be converted to a ZonedDateTime using the system + * default timezone, and then converted to UTC before being sent to Spanner. + * + *

      + *
    • {@link java.time.LocalDateTime} + *
    • {@link java.time.OffsetDateTime} + *
    • {@link java.time.ZonedDateTime} + *
    + * + *

    + * + * @param sql SQL statement with unnamed parameters denoted as ? + * @param values positional list of values for the unnamed parameters in the SQL string + * @return Statement a statement that can be executed on Spanner + * @see DatabaseClient#getStatementFactory + */ + public Statement withUnnamedParameters(String sql, Object... values) { + Map parameters = getUnnamedParametersMap(values); + AbstractStatementParser statementParser = AbstractStatementParser.getInstance(this.dialect); + ParametersInfo parametersInfo = + statementParser.convertPositionalParametersToNamedParameters('?', sql); + return new Statement(parametersInfo.sqlWithNamedParameters, parameters, null); + } + + private Map getUnnamedParametersMap(Object[] values) { + Map parameters = new HashMap<>(); + int index = 1; + for (Object value : values) { + parameters.put("p" + (index++), Value.toValue(value)); + } + return parameters; + } + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Struct.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Struct.java index 112ecc8120c..38a47e99dff 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Struct.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Struct.java @@ -36,6 +36,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.UUID; import java.util.function.Function; import javax.annotation.concurrent.Immutable; @@ -226,6 +227,16 @@ protected Date getDateInternal(int columnIndex) { return values.get(columnIndex).getDate(); } + @Override + protected UUID getUuidInternal(int columnIndex) { + return values.get(columnIndex).getUuid(); + } + + @Override + protected Interval getIntervalInternal(int columnIndex) { + return values.get(columnIndex).getInterval(); + } + @Override protected T getProtoMessageInternal(int columnIndex, T message) { return values.get(columnIndex).getProtoMessage(message); @@ -334,6 +345,16 @@ protected List getDateListInternal(int columnIndex) { return values.get(columnIndex).getDateArray(); } + @Override + protected List getUuidListInternal(int columnIndex) { + return values.get(columnIndex).getUuidArray(); + } + + @Override + protected List getIntervalListInternal(int columnIndex) { + return values.get(columnIndex).getIntervalArray(); + } + @Override protected List getStructListInternal(int columnIndex) { return values.get(columnIndex).getStructArray(); @@ -420,6 +441,10 @@ private Object getAsObject(int columnIndex) { return getTimestampInternal(columnIndex); case DATE: return getDateInternal(columnIndex); + case UUID: + return getUuidInternal(columnIndex); + case INTERVAL: + return getIntervalInternal(columnIndex); case STRUCT: return getStructInternal(columnIndex); case ARRAY: @@ -451,6 +476,10 @@ private Object getAsObject(int columnIndex) { return getTimestampListInternal(columnIndex); case DATE: return getDateListInternal(columnIndex); + case UUID: + return getUuidListInternal(columnIndex); + case INTERVAL: + return getIntervalListInternal(columnIndex); case STRUCT: return getStructListInternal(columnIndex); default: diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java index f9967db0451..ab645588bf1 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java @@ -23,6 +23,8 @@ import com.google.protobuf.ProtocolMessageEnum; import java.math.BigDecimal; import java.util.List; +import java.util.UUID; +import java.util.function.BiFunction; import java.util.function.Function; /** @@ -175,6 +177,60 @@ default float getFloat(String columnName) { */ String getString(String columnName); + /** + * @param columnIndex index of the column + * @return the value of a column with type T or null if the column contains a null value + *

    Example + *

    {@code
    +   * Struct row = ...
    +   * String name = row.getOrNull(1, StructReader::getString)
    +   * }
    + */ + default T getOrNull(int columnIndex, BiFunction function) { + return isNull(columnIndex) ? null : function.apply(this, columnIndex); + } + + /** + * @param columnName index of the column + * @return the value of a column with type T or null if the column contains a null value + *

    Example + *

    {@code
    +   * Struct row = ...
    +   * String name = row.getOrNull("name", StructReader::getString)
    +   * }
    + */ + default T getOrNull(String columnName, BiFunction function) { + return isNull(columnName) ? null : function.apply(this, columnName); + } + + /** + * @param columnIndex index of the column + * @return the value of a column with type T, or the given default if the column value is null + *

    Example + *

    {@code
    +   * Struct row = ...
    +   * String name = row.getOrDefault(1, StructReader::getString, "")
    +   * }
    + */ + default T getOrDefault( + int columnIndex, BiFunction function, T defaultValue) { + return isNull(columnIndex) ? defaultValue : function.apply(this, columnIndex); + } + + /** + * @param columnName name of the column + * @return the value of a column with type T, or the given default if the column value is null + *

    Example + *

    {@code
    +   * Struct row = ...
    +   * String name = row.getOrDefault("name", StructReader::getString, "")
    +   * }
    + */ + default T getOrDefault( + String columnName, BiFunction function, T defaultValue) { + return isNull(columnName) ? defaultValue : function.apply(this, columnName); + } + /** * @param columnIndex index of the column * @return the value of a non-{@code NULL} column with type {@link Type#json()}. @@ -291,12 +347,28 @@ default T getProtoEnum( */ Date getDate(int columnIndex); + UUID getUuid(int columnIndex); + /** * @param columnName name of the column * @return the value of a non-{@code NULL} column with type {@link Type#date()}. */ Date getDate(String columnName); + UUID getUuid(String columnName); + + /** + * @param columnIndex index of the column + * @return the value of a non-{@code NULL} column with type {@link Type#interval()}. + */ + Interval getInterval(int columnIndex); + + /** + * @param columnName name of the column + * @return the value of a non-{@code NULL} column with type {@link Type#interval()}. + */ + Interval getInterval(String columnName); + /** * @param columnIndex index of the column * @return the value of a nullable column as a {@link Value}. @@ -487,7 +559,8 @@ default List getFloatList(int columnIndex) { */ default List getJsonList(int columnIndex) { throw new UnsupportedOperationException("method should be overwritten"); - }; + } + ; /** * @param columnName name of the column @@ -497,7 +570,8 @@ default List getJsonList(int columnIndex) { */ default List getJsonList(String columnName) { throw new UnsupportedOperationException("method should be overwritten"); - }; + } + ; /** * @param columnIndex index of the column @@ -507,7 +581,8 @@ default List getJsonList(String columnName) { */ default List getPgJsonbList(int columnIndex) { throw new UnsupportedOperationException("method should be overwritten"); - }; + } + ; /** * @param columnName name of the column @@ -517,7 +592,8 @@ default List getPgJsonbList(int columnIndex) { */ default List getPgJsonbList(String columnName) { throw new UnsupportedOperationException("method should be overwritten"); - }; + } + ; /** * To get the proto message of generic type {@code T} from Struct. @@ -625,6 +701,26 @@ default List getProtoEnumList( */ List getDateList(String columnName); + List getUuidList(int columnIndex); + + List getUuidList(String columnName); + + /** + * @param columnIndex index of the column + * @return the value of a non-{@code NULL} column with type {@code Type.array(Type.interval())}. + * The list returned by this method is lazily constructed. Create a copy of it if you intend + * to access each element in the list multiple times. + */ + List getIntervalList(int columnIndex); + + /** + * @param columnName name of the column + * @return the value of a non-{@code NULL} column with type {@code Type.array(Type.interval())}. + * The list returned by this method is lazily constructed. Create a copy of it if you intend + * to access each element in the list multiple times. + */ + List getIntervalList(String columnName); + /** * @param columnIndex index of the column * @return the value of a non-{@code NULL} column with type {@code Type.array(Type.struct(...))} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TraceWrapper.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TraceWrapper.java index 02638445ae2..e94c6492699 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TraceWrapper.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TraceWrapper.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import com.google.api.gax.core.GaxProperties; import com.google.cloud.spanner.Options.TagOption; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.SpannerOptions.TracingFramework; @@ -38,15 +39,31 @@ class TraceWrapper { AttributeKey.stringKey("transaction.tag"); private static final AttributeKey STATEMENT_TAG_KEY = AttributeKey.stringKey("statement.tag"); + private static final AttributeKey INSTANCE_NAME_KEY = + AttributeKey.stringKey("instance.name"); + private static final AttributeKey DB_NAME_KEY = AttributeKey.stringKey("db.name"); private static final AttributeKey DB_STATEMENT_KEY = AttributeKey.stringKey("db.statement"); private static final AttributeKey> DB_STATEMENT_ARRAY_KEY = AttributeKey.stringArrayKey("db.statement"); + private static final AttributeKey DB_TABLE_NAME_KEY = AttributeKey.stringKey("db.table"); + private static final AttributeKey CLOUD_REGION_KEY = + AttributeKey.stringKey("cloud.region"); + private static final AttributeKey GCP_CLIENT_SERVICE_KEY = + AttributeKey.stringKey("gcp.client.service"); + private static final AttributeKey GCP_CLIENT_VERSION_KEY = + AttributeKey.stringKey("gcp.client.version"); + private static final AttributeKey GCP_CLIENT_REPO_KEY = + AttributeKey.stringKey("gcp.client.repo"); + private static final AttributeKey GCP_RESOURCE_NAME_KEY = + AttributeKey.stringKey("gcp.resource.name"); + private static final String GCP_RESOURCE_NAME_PREFIX = "//spanner.googleapis.com/"; private static final AttributeKey THREAD_NAME_KEY = AttributeKey.stringKey("thread.name"); private final Tracer openCensusTracer; private final io.opentelemetry.api.trace.Tracer openTelemetryTracer; private final boolean enableExtendedTracing; + private final Attributes commonAttributes; TraceWrapper( Tracer openCensusTracer, @@ -55,20 +72,25 @@ class TraceWrapper { this.openTelemetryTracer = openTelemetryTracer; this.openCensusTracer = openCensusTracer; this.enableExtendedTracing = enableExtendedTracing; + this.commonAttributes = createCommonAttributes(); } ISpan spanBuilder(String spanName) { return spanBuilder(spanName, Attributes.empty()); } - ISpan spanBuilder(String spanName, TransactionOption... options) { - return spanBuilder(spanName, createTransactionAttributes(options)); + ISpan spanBuilder(String spanName, Attributes attributes, TransactionOption... options) { + return spanBuilder(spanName, createTransactionAttributes(attributes, options)); } ISpan spanBuilder(String spanName, Attributes attributes) { if (SpannerOptions.getActiveTracingFramework().equals(TracingFramework.OPEN_TELEMETRY)) { return new OpenTelemetrySpan( - openTelemetryTracer.spanBuilder(spanName).setAllAttributes(attributes).startSpan()); + openTelemetryTracer + .spanBuilder(spanName) + .setAllAttributes(attributes) + .setAllAttributes(commonAttributes) + .startSpan()); } else { return new OpenCensusSpan(openCensusTracer.spanBuilder(spanName).startSpan()); } @@ -137,7 +159,9 @@ IScope withSpan(ISpan span) { } } - Attributes createTransactionAttributes(TransactionOption... options) { + Attributes createTransactionAttributes( + Attributes commonAttributes, TransactionOption... options) { + AttributesBuilder builder = commonAttributes.toBuilder(); if (options != null && options.length > 0) { Optional tagOption = Arrays.stream(options) @@ -145,10 +169,10 @@ Attributes createTransactionAttributes(TransactionOption... options) { .map(option -> (TagOption) option) .findAny(); if (tagOption.isPresent()) { - return Attributes.of(TRANSACTION_TAG_KEY, tagOption.get().getTag()); + builder.put(TRANSACTION_TAG_KEY, tagOption.get().getTag()); } } - return Attributes.empty(); + return builder.build(); } Attributes createStatementAttributes(Statement statement, Options options) { @@ -185,6 +209,32 @@ Attributes createStatementBatchAttributes(Iterable statements, Option return Attributes.empty(); } + Attributes createTableAttributes(String tableName, Options options) { + AttributesBuilder builder = Attributes.builder(); + builder.put(DB_TABLE_NAME_KEY, tableName); + if (options != null && options.hasTag()) { + builder.put(STATEMENT_TAG_KEY, options.tag()); + } + return builder.build(); + } + + Attributes createDatabaseAttributes(DatabaseId db) { + AttributesBuilder builder = Attributes.builder(); + builder.put(DB_NAME_KEY, db.getDatabase()); + builder.put(INSTANCE_NAME_KEY, db.getInstanceId().getInstance()); + builder.put(GCP_RESOURCE_NAME_KEY, GCP_RESOURCE_NAME_PREFIX + db.getName()); + return builder.build(); + } + + private Attributes createCommonAttributes() { + AttributesBuilder builder = Attributes.builder(); + builder.put(GCP_CLIENT_SERVICE_KEY, "spanner"); + builder.put(GCP_CLIENT_REPO_KEY, "googleapis/java-spanner"); + builder.put(GCP_CLIENT_VERSION_KEY, GaxProperties.getLibraryVersion(TraceWrapper.class)); + builder.put(CLOUD_REGION_KEY, BuiltInMetricsProvider.detectClientLocation()); + return builder.build(); + } + private static String getTraceThreadName() { return MoreObjects.firstNonNull( Context.current().get(OpenTelemetryContextKeys.THREAD_NAME_KEY), diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContext.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContext.java index 1e17817cce0..c80185d197c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContext.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContext.java @@ -121,11 +121,11 @@ default ApiFuture bufferAsync(Iterable mutations) { /** * Same as {@link #executeUpdate(Statement,UpdateOption...)}, but is guaranteed to be * non-blocking. If multiple asynchronous update statements are submitted to the same read/write - * transaction, the statements are guaranteed to be submitted to Cloud Spanner in the order that - * they were submitted in the client. This does however not guarantee that an asynchronous update - * statement will see the results of all previously submitted statements, as the execution of the - * statements can be parallel. If you rely on the results of a previous statement, you should - * block until the result of that statement is known and has been returned to the client. + * transaction, the statements are guaranteed to be sent to Cloud Spanner in the order that they + * were submitted in the client. This does however not guarantee that Spanner will receive the + * requests in the same order as they were sent, as requests that are sent partly in parallel can + * overtake each other. It is therefore recommended to block until an update statement has + * returned a result before sending the next update statement. */ ApiFuture executeUpdateAsync(Statement statement, UpdateOption... options); @@ -181,11 +181,11 @@ default ResultSet analyzeUpdateStatement( /** * Same as {@link #batchUpdate(Iterable, UpdateOption...)}, but is guaranteed to be non-blocking. * If multiple asynchronous update statements are submitted to the same read/write transaction, - * the statements are guaranteed to be submitted to Cloud Spanner in the order that they were - * submitted in the client. This does however not guarantee that an asynchronous update statement - * will see the results of all previously submitted statements, as the execution of the statements - * can be parallel. If you rely on the results of a previous statement, you should block until the - * result of that statement is known and has been returned to the client. + * the statements are guaranteed to be sent to Cloud Spanner in the order that they were submitted + * in the client. This does however not guarantee that Spanner will receive the requests in the + * same order as they were sent, as requests that are sent partly in parallel can overtake each + * other. It is therefore recommended to block until an update statement has returned a result + * before sending the next update statement. */ ApiFuture batchUpdateAsync(Iterable statements, UpdateOption... options); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java index 266b75eb139..1e796ecffb3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java @@ -43,6 +43,7 @@ interface CommittableAsyncTransactionManager extends AsyncTransactionManager { ApiFuture commitAsync(); } + /** * {@link ApiFuture} that returns a commit timestamp. Any {@link AbortedException} that is thrown * by either the commit call or any other rpc during the transaction will be thrown by the {@link @@ -193,7 +194,8 @@ static ApiFuture runAsyncTransactionFunction( if (executor == MoreExecutors.directExecutor()) { return Preconditions.checkNotNull( function.apply(txn, input), - "AsyncTransactionFunction returned . Did you mean to return ApiFutures.immediateFuture(null)?"); + "AsyncTransactionFunction returned . Did you mean to return" + + " ApiFutures.immediateFuture(null)?"); } else { final SettableApiFuture res = SettableApiFuture.create(); executor.execute( @@ -202,7 +204,8 @@ static ApiFuture runAsyncTransactionFunction( ApiFuture functionResult = Preconditions.checkNotNull( function.apply(txn, input), - "AsyncTransactionFunction returned . Did you mean to return ApiFutures.immediateFuture(null)?"); + "AsyncTransactionFunction returned . Did you mean to return" + + " ApiFutures.immediateFuture(null)?"); ApiFutures.addCallback( functionResult, new ApiFutureCallback() { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManager.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManager.java index 76656efea28..350adb2a2c2 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManager.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManager.java @@ -61,6 +61,21 @@ enum TransactionState { */ TransactionContext begin(); + /** + * Initializes a new read-write transaction that is a retry of a previously aborted transaction. + * This method must be called before performing any operations, and it can only be invoked once + * per transaction lifecycle. + * + *

    This method should only be used when multiplexed sessions are enabled to create a retry for + * a previously aborted transaction. This method can be used instead of {@link #resetForRetry()} + * to create a retry. Using this method or {@link #resetForRetry()} will have the same effect. You + * must pass in the {@link AbortedException} from the previous attempt to preserve the + * transaction's priority. + * + *

    For regular sessions, this behaves the same as {@link #begin()}. + */ + TransactionContext begin(AbortedException exception); + /** * Commits the currently active transaction. If the transaction was already aborted, then this * would throw an {@link AbortedException}. diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java index cafb27ba6b7..469376c52ed 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java @@ -53,8 +53,21 @@ public void setSpan(ISpan span) { @Override public TransactionContext begin() { Preconditions.checkState(txn == null, "begin can only be called once"); + return begin(ByteString.EMPTY); + } + + @Override + public TransactionContext begin(AbortedException exception) { + Preconditions.checkState(txn == null, "begin can only be called once"); + Preconditions.checkNotNull(exception, "AbortedException from the previous attempt is required"); + ByteString previousAbortedTransactionID = + exception.getTransactionID() != null ? exception.getTransactionID() : ByteString.EMPTY; + return begin(previousAbortedTransactionID); + } + + TransactionContext begin(ByteString previousTransactionId) { try (IScope s = tracer.withSpan(span)) { - txn = session.newTransaction(options, /* previousTransactionId = */ ByteString.EMPTY); + txn = session.newTransaction(options, previousTransactionId); session.setActive(this); txnState = TransactionState.STARTED; return txn; @@ -80,6 +93,13 @@ public void commit() { } catch (SpannerException e2) { txnState = TransactionState.COMMIT_FAILED; throw e2; + } finally { + // At this point, if the TransactionState is not ABORTED, then the transaction has reached an + // end state. + // We can safely call close() to release resources. + if (getState() != TransactionState.ABORTED) { + close(); + } } } @@ -92,6 +112,9 @@ public void rollback() { txn.rollback(); } finally { txnState = TransactionState.ROLLED_BACK; + // At this point, the TransactionState is ROLLED_BACK which is an end state. + // We can safely call close() to release resources. + close(); } } @@ -99,7 +122,7 @@ public void rollback() { public TransactionContext resetForRetry() { if (txn == null || !txn.isAborted() && txnState != TransactionState.ABORTED) { throw new IllegalStateException( - "resetForRetry can only be called if the previous attempt" + " aborted"); + "resetForRetry can only be called if the previous attempt aborted"); } try (IScope s = tracer.withSpan(span)) { boolean useInlinedBegin = txn.transactionId != null; @@ -114,7 +137,7 @@ public TransactionContext resetForRetry() { } txn = session.newTransaction( - options, /* previousTransactionId = */ multiplexedSessionPreviousTransactionId); + options, /* previousTransactionId= */ multiplexedSessionPreviousTransactionId); if (!useInlinedBegin) { txn.ensureTxn(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionMutationLimitExceededException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionMutationLimitExceededException.java index 1b63861bcd1..de215c5caee 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionMutationLimitExceededException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionMutationLimitExceededException.java @@ -26,6 +26,11 @@ public class TransactionMutationLimitExceededException extends SpannerException { private static final long serialVersionUID = 1L; + private static final String ERROR_MESSAGE = "The transaction contains too many mutations."; + + private static final String TRANSACTION_RESOURCE_LIMIT_EXCEEDED_MESSAGE = + "Transaction resource limits exceeded"; + /** Private constructor. Use {@link SpannerExceptionFactory} to create instances. */ TransactionMutationLimitExceededException( DoNotConstructDirectly token, @@ -33,20 +38,28 @@ public class TransactionMutationLimitExceededException extends SpannerException String message, Throwable cause, @Nullable ApiException apiException) { - super(token, errorCode, /*retryable = */ false, message, cause, apiException); + super(token, errorCode, /* retryable= */ false, message, cause, apiException); + } + + static boolean isTransactionMutationLimitException(ErrorCode code, String message) { + return code == ErrorCode.INVALID_ARGUMENT + && message != null + && (message.contains(ERROR_MESSAGE) + || message.contains(TRANSACTION_RESOURCE_LIMIT_EXCEEDED_MESSAGE)); } - static boolean isTransactionMutationLimitException(Throwable cause) { + static boolean isTransactionMutationLimitException(Throwable cause, ApiException apiException) { if (cause == null || cause.getMessage() == null - || !cause.getMessage().contains("The transaction contains too many mutations.")) { + || !(cause.getMessage().contains(ERROR_MESSAGE) + || cause.getMessage().contains(TRANSACTION_RESOURCE_LIMIT_EXCEEDED_MESSAGE))) { return false; } // Spanner includes a hint that points to the Spanner limits documentation page when the error // was that the transaction mutation limit was exceeded. We use that here to identify the error, // as there is no other specific metadata in the error that identifies it (other than the error // message). - ErrorDetails errorDetails = extractErrorDetails(cause); + ErrorDetails errorDetails = extractErrorDetails(cause, apiException); if (errorDetails != null && errorDetails.getHelp() != null) { return errorDetails.getHelp().getLinksCount() == 1 && errorDetails @@ -59,6 +72,9 @@ static boolean isTransactionMutationLimitException(Throwable cause) { .getLinks(0) .getUrl() .equals("https://cloud.google.com/spanner/docs/limits"); + } else if (cause.getMessage().contains(TRANSACTION_RESOURCE_LIMIT_EXCEEDED_MESSAGE)) { + // This more generic error does not contain any additional details. + return true; } return false; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java index 9e9fe62304a..3458b04e7a9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java @@ -74,6 +74,7 @@ /** Default implementation of {@link TransactionRunner}. */ class TransactionRunnerImpl implements SessionTransaction, TransactionRunner { private static final Logger txnLogger = Logger.getLogger(TransactionRunner.class.getName()); + /** * (Part of) the error message that is returned by Cloud Spanner if a transaction is cancelled * because it was invalidated by a later transaction in the same session. @@ -280,7 +281,7 @@ void ensureTxn() { try { ensureTxnAsync().get(); } catch (ExecutionException e) { - throw SpannerExceptionFactory.newSpannerException(e.getCause() == null ? e : e.getCause()); + throw SpannerExceptionFactory.asSpannerException(e.getCause() == null ? e : e.getCause()); } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); } @@ -326,6 +327,19 @@ private void createTxnAsync( } res.set(null); } catch (ExecutionException e) { + SpannerException spannerException = SpannerExceptionFactory.asSpannerException(e); + if (spannerException.getErrorCode() == ErrorCode.ABORTED + && session.getIsMultiplexed() + && mutation != null) { + // Begin transaction can return ABORTED errors. This can only happen if it included + // a mutation key, which again means that this is a mutation-only transaction on a + // multiplexed session. + span.addAnnotation( + "Transaction Creation Failed with ABORT. Retrying", + e.getCause() == null ? e : e.getCause()); + createTxnAsync(res, mutation); + return; + } span.addAnnotation( "Transaction Creation Failed", e.getCause() == null ? e : e.getCause()); res.setException(e.getCause() == null ? e : e.getCause()); @@ -356,7 +370,7 @@ void commit() { throw SpannerExceptionFactory.propagateTimeout((TimeoutException) e); } } catch (ExecutionException e) { - throw SpannerExceptionFactory.newSpannerException(e.getCause() == null ? e : e.getCause()); + throw SpannerExceptionFactory.asSpannerException(e.getCause() == null ? e : e.getCause()); } } @@ -410,7 +424,7 @@ ApiFuture commitAsync() { builder.addAllMutations(mutationsProto); finishOps.addListener( new CommitRunnable( - res, finishOps, builder, /* retryAttemptDueToCommitProtocolExtension = */ false), + res, finishOps, builder, /* retryAttemptDueToCommitProtocolExtension= */ false), MoreExecutors.directExecutor()); return res; } @@ -450,15 +464,9 @@ public void run() { waitForTransactionTimeoutMillis, TimeUnit.MILLISECONDS) : transactionId); } - if (options.hasPriority() || getTransactionTag() != null) { - RequestOptions.Builder requestOptionsBuilder = RequestOptions.newBuilder(); - if (options.hasPriority()) { - requestOptionsBuilder.setPriority(options.priority()); - } - if (getTransactionTag() != null) { - requestOptionsBuilder.setTransactionTag(getTransactionTag()); - } - requestBuilder.setRequestOptions(requestOptionsBuilder.build()); + RequestOptions requestOptions = options.toRequestOptionsProto(true); + if (!requestOptions.equals(RequestOptions.getDefaultInstance())) { + requestBuilder.setRequestOptions(requestOptions); } if (session.getIsMultiplexed() && getLatestPrecommitToken() != null) { // Set the precommit token in the CommitRequest for multiplexed sessions. @@ -469,7 +477,8 @@ public void run() { // they were already buffered in SpanFE during the previous attempt. requestBuilder.clearMutations(); span.addAnnotation( - "Retrying commit operation with a new precommit token obtained from the previous CommitResponse"); + "Retrying commit operation with a new precommit token obtained from the previous" + + " CommitResponse"); } final CommitRequest commitRequest = requestBuilder.build(); span.addAnnotation("Starting Commit"); @@ -500,7 +509,8 @@ public void run() { // track the latest pre commit token onPrecommitToken(proto.getPrecommitToken()); span.addAnnotation( - "Commit operation will be retried with new precommit token as the CommitResponse includes a MultiplexedSessionRetry field"); + "Commit operation will be retried with new precommit token as the" + + " CommitResponse includes a MultiplexedSessionRetry field"); opSpan.end(); // Retry the commit RPC with the latest precommit token from CommitResponse. @@ -508,7 +518,7 @@ public void run() { res, prev, requestBuilder, - /* retryAttemptDueToCommitProtocolExtension = */ true) + /* retryAttemptDueToCommitProtocolExtension= */ true) .run(); // Exit to prevent further processing in this attempt. @@ -538,7 +548,11 @@ public void run() { span.addAnnotation("Commit Failed", resultException); opSpan.setStatus(resultException); opSpan.end(); - res.setException(onError(resultException, false)); + res.setException( + onError( + resultException, + /* withBeginTransaction= */ false, + /* lastStatement= */ true)); } catch (Throwable unexpectedError) { // This is a safety precaution to make sure that a result is always returned. res.setException(unexpectedError); @@ -600,6 +614,25 @@ ApiFuture rollbackAsync() { getTransactionChannelHint()); session.markUsed(clock.instant()); return apiFuture; + } else if (transactionIdFuture != null) { + ApiFuture transactionIdOrEmptyFuture = + ApiFutures.catching( + transactionIdFuture, + Throwable.class, + input -> ByteString.empty(), + MoreExecutors.directExecutor()); + return ApiFutures.transformAsync( + transactionIdOrEmptyFuture, + transactionId -> + transactionId.isEmpty() + ? ApiFutures.immediateFuture(Empty.getDefaultInstance()) + : rpc.rollbackAsync( + RollbackRequest.newBuilder() + .setSession(session.getName()) + .setTransactionId(transactionId) + .build(), + getTransactionChannelHint()), + MoreExecutors.directExecutor()); } else { return ApiFutures.immediateFuture(Empty.getDefaultInstance()); } @@ -630,8 +663,10 @@ TransactionSelector getTransactionSelector() { if (tx == null) { return TransactionSelector.newBuilder() .setBegin( - SessionImpl.createReadWriteTransactionOptions( - options, getPreviousTransactionId())) + this.session.defaultTransactionOptions().toBuilder() + .mergeFrom( + SessionImpl.createReadWriteTransactionOptions( + options, getPreviousTransactionId()))) .build(); } else { // Wait for the transaction to come available. The tx.get() call will fail with an @@ -651,7 +686,7 @@ options, getPreviousTransactionId())) aborted = true; } } - throw SpannerExceptionFactory.newSpannerException(e.getCause()); + throw SpannerExceptionFactory.asSpannerException(e.getCause()); } catch (TimeoutException e) { // Throw an ABORTED exception to force a retry of the transaction if no transaction // has been returned by the first statement. @@ -660,7 +695,8 @@ options, getPreviousTransactionId())) ErrorCode.ABORTED, "Timeout while waiting for a transaction to be returned by another statement." + (trackTransactionStarter - ? " See the suppressed exception for the stacktrace of the caller that should return a transaction" + ? " See the suppressed exception for the stacktrace of the caller that" + + " should return a transaction" : ""), e); if (transactionStarter != null) { @@ -733,8 +769,9 @@ MultiplexedSessionPrecommitToken getLatestPrecommitToken() { } @Override - public SpannerException onError(SpannerException e, boolean withBeginTransaction) { - e = super.onError(e, withBeginTransaction); + public SpannerException onError( + SpannerException e, boolean withBeginTransaction, boolean lastStatement) { + e = super.onError(e, withBeginTransaction, lastStatement); // If the statement that caused an error was the statement that included a BeginTransaction // option, we simulate an aborted transaction to force a retry of the entire transaction. This @@ -744,13 +781,17 @@ public SpannerException onError(SpannerException e, boolean withBeginTransaction // statement are included in the transaction, even if the statement again causes an error // during the retry. if (withBeginTransaction) { - // Simulate an aborted transaction to force a retry with a new transaction. - this.transactionIdFuture.setException( - SpannerExceptionFactory.newSpannerException( - ErrorCode.ABORTED, - "Aborted due to failed initial statement", - SpannerExceptionFactory.createAbortedExceptionWithRetryDelay( - "Aborted due to failed initial statement", e, 0, 1))); + if (lastStatement) { + this.transactionIdFuture.setException(e); + } else { + // Simulate an aborted transaction to force a retry with a new transaction. + this.transactionIdFuture.setException( + SpannerExceptionFactory.newSpannerException( + ErrorCode.ABORTED, + "Aborted due to failed initial statement", + SpannerExceptionFactory.createAbortedExceptionWithRetryDelay( + "Aborted due to failed initial statement", e, 0, 1))); + } } SpannerException exceptionToThrow; if (withBeginTransaction @@ -775,6 +816,11 @@ public SpannerException onError(SpannerException e, boolean withBeginTransaction long delay = -1L; if (exceptionToThrow instanceof AbortedException) { delay = exceptionToThrow.getRetryDelayInMillis(); + ((AbortedException) exceptionToThrow) + .setTransactionID( + this.transactionId != null + ? this.transactionId + : this.getPreviousTransactionId()); } if (delay == -1L) { txnLogger.log( @@ -897,7 +943,7 @@ private ResultSet internalExecuteUpdate( } final ExecuteSqlRequest.Builder builder = getExecuteSqlRequestBuilder( - statement, queryMode, options, /* withTransactionSelector = */ true); + statement, queryMode, options, /* withTransactionSelector= */ true); try { com.google.spanner.v1.ResultSet resultSet = rpc.executeQuery(builder.build(), getTransactionChannelHint(), isRouteToLeader()); @@ -916,7 +962,9 @@ private ResultSet internalExecuteUpdate( return resultSet; } catch (Throwable t) { throw onError( - SpannerExceptionFactory.asSpannerException(t), builder.getTransaction().hasBegin()); + SpannerExceptionFactory.asSpannerException(t), + builder.getTransaction().hasBegin(), + builder.getLastStatement()); } } @@ -934,7 +982,7 @@ public ApiFuture executeUpdateAsync(Statement statement, UpdateOption... u } final ExecuteSqlRequest.Builder builder = getExecuteSqlRequestBuilder( - statement, QueryMode.NORMAL, options, /* withTransactionSelector = */ true); + statement, QueryMode.NORMAL, options, /* withTransactionSelector= */ true); final ApiFuture resultSet; try { // Register the update as an async operation that must finish before the transaction may @@ -974,7 +1022,7 @@ public ApiFuture executeUpdateAsync(Statement statement, UpdateOption... u input -> { SpannerException e = SpannerExceptionFactory.asSpannerException(input); SpannerException exceptionToThrow = - onError(e, builder.getTransaction().hasBegin()); + onError(e, builder.getTransaction().hasBegin(), builder.getLastStatement()); span.setStatus(exceptionToThrow); throw exceptionToThrow; }, @@ -1010,9 +1058,9 @@ private SpannerException createAbortedExceptionForBatchDml(ExecuteBatchDmlRespon response.getStatus().getMessage(), SpannerExceptionFactory.createAbortedExceptionWithRetryDelay( response.getStatus().getMessage(), - /* cause = */ null, - /* retryDelaySeconds = */ 0, - /* retryDelayNanos = */ (int) TimeUnit.MILLISECONDS.toNanos(10L))); + /* cause= */ null, + /* retryDelaySeconds= */ 0, + /* retryDelayNanos= */ (int) TimeUnit.MILLISECONDS.toNanos(10L))); } @Override @@ -1053,7 +1101,7 @@ public long[] batchUpdate(Iterable statements, UpdateOption... update // In all other cases, we should throw a BatchUpdateException. if (response.getStatus().getCode() == Code.ABORTED_VALUE) { throw createAbortedExceptionForBatchDml(response); - } else if (response.getStatus().getCode() != 0) { + } else if (response.getStatus().getCode() != Code.OK_VALUE) { throw newSpannerBatchUpdateException( ErrorCode.fromRpcStatus(response.getStatus()), response.getStatus().getMessage(), @@ -1062,7 +1110,9 @@ public long[] batchUpdate(Iterable statements, UpdateOption... update return results; } catch (Throwable e) { throw onError( - SpannerExceptionFactory.asSpannerException(e), builder.getTransaction().hasBegin()); + SpannerExceptionFactory.asSpannerException(e), + builder.getTransaction().hasBegin(), + builder.getLastStatements()); } } catch (Throwable throwable) { span.setStatus(throwable); @@ -1120,7 +1170,7 @@ public ApiFuture batchUpdateAsync( // In all other cases, we should throw a BatchUpdateException. if (batchDmlResponse.getStatus().getCode() == Code.ABORTED_VALUE) { throw createAbortedExceptionForBatchDml(batchDmlResponse); - } else if (batchDmlResponse.getStatus().getCode() != 0) { + } else if (batchDmlResponse.getStatus().getCode() != Code.OK_VALUE) { throw newSpannerBatchUpdateException( ErrorCode.fromRpcStatus(batchDmlResponse.getStatus()), batchDmlResponse.getStatus().getMessage(), @@ -1136,7 +1186,7 @@ public ApiFuture batchUpdateAsync( input -> { SpannerException e = SpannerExceptionFactory.asSpannerException(input); SpannerException exceptionToThrow = - onError(e, builder.getTransaction().hasBegin()); + onError(e, builder.getTransaction().hasBegin(), builder.getLastStatements()); span.setStatus(exceptionToThrow); throw exceptionToThrow; }, @@ -1178,7 +1228,7 @@ public ListenableAsyncResultSet executeQueryAsync( private final SessionImpl session; private final Options options; private ISpan span; - private TraceWrapper tracer; + private final TraceWrapper tracer; private TransactionContextImpl txn; private volatile boolean isValid = true; @@ -1191,7 +1241,7 @@ public TransactionRunner allowNestedTransaction() { TransactionRunnerImpl(SessionImpl session, TransactionOption... options) { this.session = session; this.options = Options.fromTransactionOptions(options); - this.txn = session.newTransaction(this.options, /* previousTransactionId = */ ByteString.EMPTY); + this.txn = session.newTransaction(this.options, /* previousTransactionId= */ ByteString.EMPTY); this.tracer = session.getTracer(); } @@ -1242,7 +1292,7 @@ private T runInternal(final TransactionCallable txCallable) { txn = session.newTransaction( - options, /* previousTransactionId = */ multiplexedSessionPreviousTransactionId); + options, /* previousTransactionId= */ multiplexedSessionPreviousTransactionId); } checkState( isValid, "TransactionRunner has been invalidated by a new operation on the session"); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java index 748cb7f87ec..71120a0f420 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java @@ -59,6 +59,8 @@ public final class Type implements Serializable { private static final Type TYPE_BYTES = new Type(Code.BYTES, null, null); private static final Type TYPE_TIMESTAMP = new Type(Code.TIMESTAMP, null, null); private static final Type TYPE_DATE = new Type(Code.DATE, null, null); + private static final Type TYPE_UUID = new Type(Code.UUID, null, null); + private static final Type TYPE_INTERVAL = new Type(Code.INTERVAL, null, null); private static final Type TYPE_ARRAY_BOOL = new Type(Code.ARRAY, TYPE_BOOL, null); private static final Type TYPE_ARRAY_INT64 = new Type(Code.ARRAY, TYPE_INT64, null); private static final Type TYPE_ARRAY_FLOAT32 = new Type(Code.ARRAY, TYPE_FLOAT32, null); @@ -72,6 +74,8 @@ public final class Type implements Serializable { private static final Type TYPE_ARRAY_BYTES = new Type(Code.ARRAY, TYPE_BYTES, null); private static final Type TYPE_ARRAY_TIMESTAMP = new Type(Code.ARRAY, TYPE_TIMESTAMP, null); private static final Type TYPE_ARRAY_DATE = new Type(Code.ARRAY, TYPE_DATE, null); + private static final Type TYPE_ARRAY_UUID = new Type(Code.ARRAY, TYPE_UUID, null); + private static final Type TYPE_ARRAY_INTERVAL = new Type(Code.ARRAY, TYPE_INTERVAL, null); private static final int AMBIGUOUS_FIELD = -1; private static final long serialVersionUID = -3076152125004114582L; @@ -183,6 +187,21 @@ public static Type date() { return TYPE_DATE; } + /** Returns the descriptor for the {@code UUID} type. */ + public static Type uuid() { + return TYPE_UUID; + } + + /** + * Returns the descriptor for the {@code INTERVAL} type: an interval which represents a time + * duration as a tuple of 3 values (months, days, nanoseconds). [Interval(months:-120000, days: + * -3660000, nanoseconds: -316224000000000000000), Interval(months:120000, days: 3660000, + * nanoseconds: 316224000000000000000)]. + */ + public static Type interval() { + return TYPE_INTERVAL; + } + /** Returns a descriptor for an array of {@code elementType}. */ public static Type array(Type elementType) { Preconditions.checkNotNull(elementType); @@ -213,6 +232,10 @@ public static Type array(Type elementType) { return TYPE_ARRAY_TIMESTAMP; case DATE: return TYPE_ARRAY_DATE; + case UUID: + return TYPE_ARRAY_UUID; + case INTERVAL: + return TYPE_ARRAY_INTERVAL; default: return new Type(Code.ARRAY, elementType, null); } @@ -295,6 +318,8 @@ public enum Code { BYTES(TypeCode.BYTES, "bytea"), TIMESTAMP(TypeCode.TIMESTAMP, "timestamp with time zone"), DATE(TypeCode.DATE, "date"), + UUID(TypeCode.UUID, "uuid"), + INTERVAL(TypeCode.INTERVAL, "interval"), ARRAY(TypeCode.ARRAY, "array"), STRUCT(TypeCode.STRUCT, "struct"); @@ -610,6 +635,10 @@ static Type fromProto(com.google.spanner.v1.Type proto) { return timestamp(); case DATE: return date(); + case UUID: + return uuid(); + case INTERVAL: + return interval(); case PROTO: return proto(proto.getProtoTypeFqn()); case ENUM: diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java index c2c851d6dd8..b1ffc5ea3ab 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java @@ -16,6 +16,14 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.SpannerTypeConverter.atUTC; +import static com.google.cloud.spanner.SpannerTypeConverter.convertLocalDateToSpannerDate; +import static com.google.cloud.spanner.SpannerTypeConverter.convertToISO8601; +import static com.google.cloud.spanner.SpannerTypeConverter.convertToTypedIterable; +import static com.google.cloud.spanner.SpannerTypeConverter.createUntypedArrayValue; +import static com.google.cloud.spanner.SpannerTypeConverter.createUntypedIterableValue; +import static com.google.cloud.spanner.SpannerTypeConverter.createUntypedStringValue; + import com.google.cloud.ByteArray; import com.google.cloud.Date; import com.google.cloud.Timestamp; @@ -39,16 +47,23 @@ import java.io.Serializable; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; import java.util.BitSet; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.UUID; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @@ -205,7 +220,8 @@ public static Value numeric(@Nullable BigDecimal v) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.OUT_OF_RANGE, String.format( - "Max precision for the whole component of a numeric is 29. The requested numeric has a whole component with precision %d", + "Max precision for the whole component of a numeric is 29. The requested numeric" + + " has a whole component with precision %d", test.precision() - test.scale())); } } @@ -245,6 +261,15 @@ public static Value json(@Nullable String v) { return new JsonImpl(v == null, v); } + /** + * Returns a {@code INTERVAL} value. + * + * @param interval the value, which may be null + */ + public static Value interval(@Nullable Interval interval) { + return new IntervalImpl(interval == null, interval); + } + /** * Returns a {@code PG JSONB} value. * @@ -386,6 +411,10 @@ public static Value date(@Nullable Date v) { return new DateImpl(v == null, v); } + public static Value uuid(@Nullable UUID v) { + return new UuidImpl(v == null, v); + } + /** Returns a non-{@code NULL} {#code STRUCT} value. */ public static Value struct(Struct v) { Preconditions.checkNotNull(v, "Illegal call to create a NULL struct value."); @@ -776,6 +805,26 @@ public static Value dateArray(@Nullable Iterable v) { return new DateArrayImpl(v == null, v == null ? null : immutableCopyOf(v)); } + /** + * Returns an {@code ARRAY} value. + * + * @param v the source of element values. This may be {@code null} to produce a value for which + * {@code isNull()} is {@code true}. Individual elements may also be {@code null}. + */ + public static Value uuidArray(@Nullable Iterable v) { + return new UuidArrayImpl(v == null, v == null ? null : immutableCopyOf(v)); + } + + /** + * Returns an {@code ARRAY} value. + * + * @param v the source of element values. This may be {@code null} to produce a value for which + * {@code isNull()} is {@code true}. Individual elements may also be {@code null}. + */ + public static Value intervalArray(@Nullable Iterable v) { + return new IntervalArrayImpl(v == null, v == null ? null : immutableCopyOf(v)); + } + /** * Returns an {@code ARRAY>} value. * @@ -805,6 +854,165 @@ public static Value structArray(Type elementType, @Nullable Iterable v) private Value() {} + static Value toValue(Object value) { + if (value == null) { + return Value.untyped(NULL_PROTO); + } + if (value instanceof Value) { + return (Value) value; + } + if (value instanceof Boolean) { + return Value.bool((Boolean) value); + } + if (value instanceof Long || value instanceof Integer) { + return createUntypedStringValue(String.valueOf(value)); + } + if (value instanceof Float) { + return Value.float32((Float) value); + } + if (value instanceof Double) { + return Value.float64((Double) value); + } + if (value instanceof BigDecimal) { + return Value.numeric((BigDecimal) value); + } + if (value instanceof ByteArray) { + return Value.bytes((ByteArray) value); + } + if (value instanceof byte[]) { + return Value.bytes(ByteArray.copyFrom((byte[]) value)); + } + if (value instanceof Date) { + return Value.date((Date) value); + } + if (value instanceof UUID) { + return Value.uuid((UUID) value); + } + if (value instanceof LocalDate) { + return Value.date(convertLocalDateToSpannerDate((LocalDate) value)); + } + if (value instanceof LocalDateTime) { + return createUntypedStringValue(convertToISO8601(atUTC((LocalDateTime) value))); + } + if (value instanceof OffsetDateTime) { + return createUntypedStringValue(convertToISO8601(atUTC((OffsetDateTime) value))); + } + if (value instanceof ZonedDateTime) { + return createUntypedStringValue(convertToISO8601(atUTC((ZonedDateTime) value))); + } + if (value instanceof ProtocolMessageEnum) { + return Value.protoEnum((ProtocolMessageEnum) value); + } + if (value instanceof AbstractMessage) { + return Value.protoMessage((AbstractMessage) value); + } + if (value instanceof Interval) { + return Value.interval((Interval) value); + } + if (value instanceof Struct) { + return Value.struct((Struct) value); + } + if (value instanceof Timestamp) { + return Value.timestamp((Timestamp) value); + } + if (value instanceof Iterable) { + Iterator iterator = ((Iterable) value).iterator(); + if (!iterator.hasNext()) { + return createUntypedArrayValue(Stream.empty()); + } + Object object = iterator.next(); + if (object instanceof Boolean) { + return Value.boolArray(convertToTypedIterable((Boolean) object, iterator)); + } + if (object instanceof Integer) { + return createUntypedIterableValue((Integer) object, iterator, String::valueOf); + } + if (object instanceof Long) { + return createUntypedIterableValue((Long) object, iterator, String::valueOf); + } + if (object instanceof Float) { + return Value.float32Array(convertToTypedIterable((Float) object, iterator)); + } + if (object instanceof Double) { + return Value.float64Array(convertToTypedIterable((Double) object, iterator)); + } + if (object instanceof BigDecimal) { + return Value.numericArray(convertToTypedIterable((BigDecimal) object, iterator)); + } + if (object instanceof ByteArray) { + return Value.bytesArray(convertToTypedIterable((ByteArray) object, iterator)); + } + if (object instanceof byte[]) { + return Value.bytesArray( + SpannerTypeConverter.convertToTypedIterable( + ByteArray::copyFrom, (byte[]) object, iterator)); + } + if (object instanceof Interval) { + return Value.intervalArray(convertToTypedIterable((Interval) object, iterator)); + } + if (object instanceof Timestamp) { + return Value.timestampArray(convertToTypedIterable((Timestamp) object, iterator)); + } + if (object instanceof Date) { + return Value.dateArray(convertToTypedIterable((Date) object, iterator)); + } + if (object instanceof UUID) { + return Value.uuidArray(convertToTypedIterable((UUID) object, iterator)); + } + if (object instanceof LocalDate) { + return Value.dateArray( + SpannerTypeConverter.convertToTypedIterable( + SpannerTypeConverter::convertLocalDateToSpannerDate, (LocalDate) object, iterator)); + } + if (object instanceof LocalDateTime) { + return createUntypedIterableValue( + (LocalDateTime) object, iterator, val -> convertToISO8601(atUTC(val))); + } + if (object instanceof OffsetDateTime) { + return createUntypedIterableValue( + (OffsetDateTime) object, iterator, val -> convertToISO8601(atUTC(val))); + } + if (object instanceof ZonedDateTime) { + return createUntypedIterableValue( + (ZonedDateTime) object, iterator, val -> convertToISO8601(atUTC(val))); + } + } + + // array and primitive array + if (value instanceof Boolean[]) { + return Value.boolArray(Arrays.asList((Boolean[]) value)); + } + if (value instanceof boolean[]) { + return Value.boolArray((boolean[]) value); + } + if (value instanceof Float[]) { + return Value.float32Array(Arrays.asList((Float[]) value)); + } + if (value instanceof float[]) { + return Value.float32Array((float[]) value); + } + if (value instanceof Double[]) { + return Value.float64Array(Arrays.asList((Double[]) value)); + } + if (value instanceof double[]) { + return Value.float64Array((double[]) value); + } + if (value instanceof Long[]) { + return createUntypedArrayValue(Arrays.stream((Long[]) value)); + } + if (value instanceof long[]) { + return createUntypedArrayValue(Arrays.stream((long[]) value).boxed()); + } + if (value instanceof Integer[]) { + return createUntypedArrayValue(Arrays.stream((Integer[]) value)); + } + if (value instanceof int[]) { + return createUntypedArrayValue(Arrays.stream((int[]) value).boxed()); + } + + return createUntypedStringValue(value); + } + /** Returns the type of this value. This will return a type even if {@code isNull()} is true. */ public abstract Type getType(); @@ -915,6 +1123,20 @@ public T getProtoEnum( */ public abstract Date getDate(); + /** + * Returns the value of a {@code UUID}-typed instance. + * + * @throws IllegalStateException if {@code isNull()} or the value is not of the expected type + */ + public abstract UUID getUuid(); + + /** + * Returns the value of a {@code INTERVAL}-typed instance. + * + * @throws IllegalStateException if {@code isNull()} or the value is not of the expected type + */ + public abstract Interval getInterval(); + /** * Returns the value of a {@code STRUCT}-typed instance. * @@ -1035,6 +1257,22 @@ public List getProtoEnumArray( */ public abstract List getDateArray(); + /** + * Returns the value of an {@code ARRAY}-typed instance. While the returned list itself will + * never be {@code null}, elements of that list may be null. + * + * @throws IllegalStateException if {@code isNull()} or the value is not of the expected type + */ + public abstract List getUuidArray(); + + /** + * Returns the value of an {@code ARRAY}-typed instance. While the returned list itself + * will never be {@code null}, elements of that list may be null. + * + * @throws IllegalStateException if {@code isNull()} or the value is not of the expected type + */ + public abstract List getIntervalArray(); + /** * Returns the value of an {@code ARRAY>}-typed instance. While the returned list * itself will never be {@code null}, elements of that list may be null. @@ -1314,6 +1552,16 @@ public Date getDate() { throw defaultGetter(Type.date()); } + @Override + public UUID getUuid() { + throw defaultGetter(Type.uuid()); + } + + @Override + public Interval getInterval() { + throw defaultGetter(Type.interval()); + } + @Override public Struct getStruct() { if (getType().getCode() != Type.Code.STRUCT) { @@ -1378,6 +1626,16 @@ public List getDateArray() { throw defaultGetter(Type.array(Type.date())); } + @Override + public List getUuidArray() { + throw defaultGetter(Type.array(Type.uuid())); + } + + @Override + public List getIntervalArray() { + throw defaultGetter(Type.array(Type.interval())); + } + @Override public List getStructArray() { if (getType().getCode() != Type.Code.ARRAY @@ -1458,7 +1716,10 @@ public final int hashCode() { * while calculating valueHash of Float32 type. Note that this is not applicable for composite * types containing FLOAT32. */ - if (type.getCode() == Type.Code.FLOAT32 && !isNull && Float.isNaN(getFloat32())) { + if (type != null + && type.getCode() == Type.Code.FLOAT32 + && !isNull + && Float.isNaN(getFloat32())) { typeToHash = Type.float64(); } @@ -1795,6 +2056,53 @@ void valueToString(StringBuilder b) { } } + private static class UuidImpl extends AbstractObjectValue { + + private UuidImpl(boolean isNull, UUID value) { + super(isNull, Type.uuid(), value); + } + + @Override + public UUID getUuid() { + checkNotNull(); + return value; + } + + @Override + void valueToString(StringBuilder b) { + b.append(value); + } + } + + private static class IntervalImpl extends AbstractObjectValue { + + private IntervalImpl(boolean isNull, Interval value) { + super(isNull, Type.interval(), value); + } + + @Override + public Interval getInterval() { + checkNotNull(); + return value; + } + + @Override + void valueToString(StringBuilder b) { + b.append(value.toISO8601()); + } + + @Override + com.google.protobuf.Value valueToProto() { + return com.google.protobuf.Value.newBuilder().setStringValue(value.toISO8601()).build(); + } + + @Nonnull + @Override + public String getAsString() { + return isNull() ? NULL_STRING : value.toISO8601(); + } + } + private static class StringImpl extends AbstractObjectValue { private StringImpl(boolean isNull, @Nullable String value) { @@ -1944,7 +2252,8 @@ public ByteArray getBytes() { public T getProtoMessage(T m) { Preconditions.checkNotNull( m, - "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter value."); + "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter" + + " value."); checkNotNull(); try { return (T) @@ -1994,7 +2303,8 @@ public ByteArray getBytes() { public T getProtoMessage(T m) { Preconditions.checkNotNull( m, - "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter value."); + "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter" + + " value."); checkNotNull(); try { return (T) m.toBuilder().mergeFrom(value.toByteArray()).build(); @@ -2639,7 +2949,8 @@ public List getBytesArray() { public List getProtoMessageArray(T m) { Preconditions.checkNotNull( m, - "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter value."); + "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter" + + " value."); checkNotNull(); try { List protoMessagesList = new ArrayList<>(value.size()); @@ -2710,7 +3021,8 @@ public List getBytesArray() { public List getProtoMessageArray(T m) { Preconditions.checkNotNull( m, - "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter value."); + "Proto message may not be null. Use MyProtoClass.getDefaultInstance() as a parameter" + + " value."); checkNotNull(); try { List protoMessagesList = new ArrayList<>(value.size()); @@ -2797,6 +3109,47 @@ void appendElement(StringBuilder b, Date element) { } } + private static class UuidArrayImpl extends AbstractArrayValue { + + private UuidArrayImpl(boolean isNull, @Nullable List values) { + super(isNull, Type.uuid(), values); + } + + @Override + public List getUuidArray() { + checkNotNull(); + return value; + } + + @Override + void appendElement(StringBuilder b, UUID element) { + b.append(element); + } + } + + private static class IntervalArrayImpl extends AbstractArrayValue { + + private IntervalArrayImpl(boolean isNull, @Nullable List values) { + super(isNull, Type.interval(), values); + } + + @Override + public List getIntervalArray() { + checkNotNull(); + return value; + } + + @Override + void appendElement(StringBuilder b, Interval element) { + b.append(element.toISO8601()); + } + + @Override + String elementToString(Interval element) { + return element.toISO8601(); + } + } + private static class NumericArrayImpl extends AbstractArrayValue { private NumericArrayImpl(boolean isNull, @Nullable List values) { @@ -2938,8 +3291,12 @@ private Value getValue(int fieldIndex) { return Value.pgOid(value.getLong(fieldIndex)); case DATE: return Value.date(value.getDate(fieldIndex)); + case UUID: + return Value.uuid(value.getUuid(fieldIndex)); case TIMESTAMP: return Value.timestamp(value.getTimestamp(fieldIndex)); + case INTERVAL: + return Value.interval(value.getInterval(fieldIndex)); case PROTO: return Value.protoMessage(value.getBytes(fieldIndex), fieldType.getProtoTypeFqn()); case ENUM: @@ -2976,8 +3333,12 @@ private Value getValue(int fieldIndex) { return Value.pgNumericArray(value.getStringList(fieldIndex)); case DATE: return Value.dateArray(value.getDateList(fieldIndex)); + case UUID: + return Value.uuidArray(value.getUuidList(fieldIndex)); case TIMESTAMP: return Value.timestampArray(value.getTimestampList(fieldIndex)); + case INTERVAL: + return Value.intervalArray(value.getIntervalList(fieldIndex)); case STRUCT: return Value.structArray(elementType, value.getStructList(fieldIndex)); case ARRAY: diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ValueBinder.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ValueBinder.java index 8386bd5c213..e0b420e07ab 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ValueBinder.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ValueBinder.java @@ -24,6 +24,7 @@ import com.google.protobuf.Descriptors.EnumDescriptor; import com.google.protobuf.ProtocolMessageEnum; import java.math.BigDecimal; +import java.util.UUID; import javax.annotation.Nullable; /** @@ -165,6 +166,16 @@ public R to(@Nullable Date value) { return handle(Value.date(value)); } + /** Binds to {@code Value.uuid(value)} */ + public R to(@Nullable UUID value) { + return handle(Value.uuid(value)); + } + + /** Binds to {@code Value.interval(value)} */ + public R to(@Nullable Interval value) { + return handle(Value.interval(value)); + } + /** Binds a non-{@code NULL} struct value to {@code Value.struct(value)} */ public R to(Struct value) { return handle(Value.struct(value)); @@ -323,6 +334,16 @@ public R toDateArray(@Nullable Iterable values) { return handle(Value.dateArray(values)); } + /** Binds to {@code Value.uuidArray(values)} */ + public R toUuidArray(@Nullable Iterable values) { + return handle(Value.uuidArray(values)); + } + + /** Binds to {@code Value.intervalArray(values)} */ + public R toIntervalArray(@Nullable Iterable values) { + return handle(Value.intervalArray(values)); + } + /** Binds to {@code Value.structArray(fieldTypes, values)} */ public R toStructArray(Type elementType, @Nullable Iterable values) { return handle(Value.structArray(elementType, values)); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/XGoogSpannerRequestId.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/XGoogSpannerRequestId.java new file mode 100644 index 00000000000..d858fdb9273 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/XGoogSpannerRequestId.java @@ -0,0 +1,235 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import com.google.api.core.InternalApi; +import com.google.common.annotations.VisibleForTesting; +import io.grpc.CallOptions; +import io.grpc.Metadata; +import java.math.BigInteger; +import java.security.SecureRandom; +import java.util.Objects; +import java.util.regex.MatchResult; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@InternalApi +public class XGoogSpannerRequestId { + // 1. Generate the random process ID singleton. + @VisibleForTesting + static final String RAND_PROCESS_ID = XGoogSpannerRequestId.generateRandProcessId(); + + public static String REQUEST_ID_HEADER_NAME = "x-goog-spanner-request-id"; + public static final Metadata.Key REQUEST_ID_HEADER_KEY = + Metadata.Key.of(REQUEST_ID_HEADER_NAME, Metadata.ASCII_STRING_MARSHALLER); + public static final CallOptions.Key REQUEST_ID_CALL_OPTIONS_KEY = + CallOptions.Key.create("XGoogSpannerRequestId"); + + @VisibleForTesting + static final long VERSION = 1; // The version of the specification being implemented. + + private final long nthClientId; + private final long nthRequest; + private long nthChannelId; + private long attempt; + + XGoogSpannerRequestId(long nthClientId, long nthChannelId, long nthRequest, long attempt) { + this.nthClientId = nthClientId; + this.nthChannelId = nthChannelId; + this.nthRequest = nthRequest; + this.attempt = attempt; + } + + public static XGoogSpannerRequestId of( + long nthClientId, long nthChannelId, long nthRequest, long attempt) { + return new XGoogSpannerRequestId(nthClientId, nthChannelId, nthRequest, attempt); + } + + @VisibleForTesting + long getNthClientId() { + return nthClientId; + } + + @VisibleForTesting + long getNthChannelId() { + return nthChannelId; + } + + boolean hasChannelId() { + return nthChannelId > 0; + } + + @VisibleForTesting + long getAttempt() { + return this.attempt; + } + + @VisibleForTesting + long getNthRequest() { + return this.nthRequest; + } + + @VisibleForTesting + static final Pattern REGEX = + Pattern.compile("^(\\d)\\.([0-9a-z]{16})\\.(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$"); + + public static XGoogSpannerRequestId of(String s) { + Matcher m = XGoogSpannerRequestId.REGEX.matcher(s); + if (!m.matches()) { + throw new IllegalStateException( + s + " does not match " + XGoogSpannerRequestId.REGEX.pattern()); + } + + MatchResult mr = m.toMatchResult(); + + return new XGoogSpannerRequestId( + Long.parseLong(mr.group(3)), + Long.parseLong(mr.group(4)), + Long.parseLong(mr.group(5)), + Long.parseLong(mr.group(6))); + } + + private static String generateRandProcessId() { + // Expecting to use 64-bits of randomness to avoid clashes. + BigInteger bigInt = new BigInteger(64, new SecureRandom()); + return String.format("%016x", bigInt); + } + + /** Returns the string representation of this RequestId as it should be sent to Spanner. */ + public String getHeaderValue() { + return String.format( + "%d.%s.%d.%d.%d.%d", + XGoogSpannerRequestId.VERSION, + XGoogSpannerRequestId.RAND_PROCESS_ID, + this.nthClientId, + this.nthChannelId, + this.nthRequest, + this.attempt); + } + + @Override + public String toString() { + return String.format( + "%d.%s.%d.%s.%d.%d", + XGoogSpannerRequestId.VERSION, + XGoogSpannerRequestId.RAND_PROCESS_ID, + this.nthClientId, + this.nthChannelId < 0 ? "x" : String.valueOf(this.nthChannelId), + this.nthRequest, + this.attempt); + } + + public String debugToString() { + return String.format( + "%d.%s.nth_client=%d.nth_chan=%d.nth_req=%d.attempt=%d", + XGoogSpannerRequestId.VERSION, + XGoogSpannerRequestId.RAND_PROCESS_ID, + this.nthClientId, + this.nthChannelId, + this.nthRequest, + this.attempt); + } + + @VisibleForTesting + boolean isGreaterThan(XGoogSpannerRequestId other) { + if (this.nthClientId != other.nthClientId) { + return this.nthClientId > other.nthClientId; + } + if (this.nthChannelId != other.nthChannelId) { + return this.nthChannelId > other.nthChannelId; + } + if (this.nthRequest != other.nthRequest) { + return this.nthRequest > other.nthRequest; + } + return this.attempt > other.attempt; + } + + @Override + public boolean equals(Object other) { + // instanceof for a null object returns false. + if (!(other instanceof XGoogSpannerRequestId)) { + return false; + } + + XGoogSpannerRequestId otherReqId = (XGoogSpannerRequestId) (other); + + return Objects.equals(this.nthClientId, otherReqId.nthClientId) + && Objects.equals(this.nthChannelId, otherReqId.nthChannelId) + && Objects.equals(this.nthRequest, otherReqId.nthRequest) + && Objects.equals(this.attempt, otherReqId.attempt); + } + + public void incrementAttempt() { + this.attempt++; + } + + @Override + public int hashCode() { + return Objects.hash(this.nthClientId, this.nthChannelId, this.nthRequest, this.attempt); + } + + @InternalApi + public interface RequestIdCreator { + long getClientId(); + + XGoogSpannerRequestId nextRequestId(long channelId); + + void reset(); + } + + // TODO: Move this class into test code. + static final class NoopRequestIdCreator implements RequestIdCreator { + static final NoopRequestIdCreator INSTANCE = new NoopRequestIdCreator(); + + private NoopRequestIdCreator() {} + + @Override + public long getClientId() { + return 1L; + } + + @Override + public XGoogSpannerRequestId nextRequestId(long channelId) { + return XGoogSpannerRequestId.of(1, channelId, 1, 0); + } + + @Override + public void reset() {} + } + + public void setChannelId(long channelId) { + this.nthChannelId = channelId; + } + + @VisibleForTesting + XGoogSpannerRequestId withNthRequest(long replacementNthRequest) { + return XGoogSpannerRequestId.of( + this.nthClientId, this.nthChannelId, replacementNthRequest, this.attempt); + } + + @VisibleForTesting + XGoogSpannerRequestId withChannelId(long replacementChannelId) { + return XGoogSpannerRequestId.of( + this.nthClientId, replacementChannelId, this.nthRequest, this.attempt); + } + + @VisibleForTesting + XGoogSpannerRequestId withNthClientId(long replacementClientId) { + return XGoogSpannerRequestId.of( + replacementClientId, this.nthChannelId, this.nthRequest, this.attempt); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java index dd00f6750c7..a75e9d546eb 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,6 +41,8 @@ import com.google.protobuf.Empty; import com.google.protobuf.FieldMask; import com.google.protobuf.Timestamp; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; import com.google.spanner.admin.database.v1.BackupName; import com.google.spanner.admin.database.v1.BackupSchedule; @@ -64,6 +66,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; import com.google.spanner.admin.database.v1.InstanceName; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -78,6 +82,7 @@ import com.google.spanner.admin.database.v1.ListDatabasesResponse; import com.google.spanner.admin.database.v1.RestoreDatabaseMetadata; import com.google.spanner.admin.database.v1.RestoreDatabaseRequest; +import com.google.spanner.admin.database.v1.SplitPoints; import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; @@ -524,6 +529,25 @@ * * * + *

    AddSplitPoints + *

    Adds split points to specified tables, indexes of a database. + * + *

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

    + *
      + *
    • addSplitPoints(AddSplitPointsRequest request) + *

    + *

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

    + *
      + *
    • addSplitPoints(DatabaseName database, List<SplitPoints> splitPoints) + *

    • addSplitPoints(String database, List<SplitPoints> splitPoints) + *

    + *

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

    + *
      + *
    • addSplitPointsCallable() + *

    + * + * + * *

    CreateBackupSchedule *

    Creates a new backup schedule. * @@ -618,6 +642,25 @@ * * * + * + *

    InternalUpdateGraphOperation + *

    This is an internal API called by Spanner Graph jobs. You should never need to call this API directly. + * + *

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

    + *
      + *
    • internalUpdateGraphOperation(InternalUpdateGraphOperationRequest request) + *

    + *

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

    + *
      + *
    • internalUpdateGraphOperation(DatabaseName database, String operationId) + *

    • internalUpdateGraphOperation(String database, String operationId) + *

    + *

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

    + *
      + *
    • internalUpdateGraphOperationCallable() + *

    + * + * * * *

    See the individual methods for example code. @@ -1561,6 +1604,7 @@ public final OperationFuture updateDatabaseDdl * .addAllStatements(new ArrayList()) * .setOperationId("operationId129704162") * .setProtoDescriptors(ByteString.EMPTY) + * .setThroughputMode(true) * .build(); * databaseAdminClient.updateDatabaseDdlAsync(request).get(); * } @@ -1599,6 +1643,7 @@ public final OperationFuture updateDatabaseDdl * .addAllStatements(new ArrayList()) * .setOperationId("operationId129704162") * .setProtoDescriptors(ByteString.EMPTY) + * .setThroughputMode(true) * .build(); * OperationFuture future = * databaseAdminClient.updateDatabaseDdlOperationCallable().futureCall(request); @@ -1637,6 +1682,7 @@ public final OperationFuture updateDatabaseDdl * .addAllStatements(new ArrayList()) * .setOperationId("operationId129704162") * .setProtoDescriptors(ByteString.EMPTY) + * .setThroughputMode(true) * .build(); * ApiFuture future = * databaseAdminClient.updateDatabaseDdlCallable().futureCall(request); @@ -4318,6 +4364,137 @@ public final ListDatabaseRolesPagedResponse listDatabaseRoles(ListDatabaseRolesR return stub.listDatabaseRolesCallable(); } + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds split points to specified tables, indexes of a database. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]");
    +   *   List splitPoints = new ArrayList<>();
    +   *   AddSplitPointsResponse response = databaseAdminClient.addSplitPoints(database, splitPoints);
    +   * }
    +   * }
    + * + * @param database Required. The database on whose tables/indexes split points are to be added. + * Values are of the form + * `projects/<project>/instances/<instance>/databases/<database>`. + * @param splitPoints Required. The split points to add. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final AddSplitPointsResponse addSplitPoints( + DatabaseName database, List splitPoints) { + AddSplitPointsRequest request = + AddSplitPointsRequest.newBuilder() + .setDatabase(database == null ? null : database.toString()) + .addAllSplitPoints(splitPoints) + .build(); + return addSplitPoints(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds split points to specified tables, indexes of a database. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   String database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString();
    +   *   List splitPoints = new ArrayList<>();
    +   *   AddSplitPointsResponse response = databaseAdminClient.addSplitPoints(database, splitPoints);
    +   * }
    +   * }
    + * + * @param database Required. The database on whose tables/indexes split points are to be added. + * Values are of the form + * `projects/<project>/instances/<instance>/databases/<database>`. + * @param splitPoints Required. The split points to add. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final AddSplitPointsResponse addSplitPoints( + String database, List splitPoints) { + AddSplitPointsRequest request = + AddSplitPointsRequest.newBuilder() + .setDatabase(database) + .addAllSplitPoints(splitPoints) + .build(); + return addSplitPoints(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds split points to specified tables, indexes of a database. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   AddSplitPointsRequest request =
    +   *       AddSplitPointsRequest.newBuilder()
    +   *           .setDatabase(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString())
    +   *           .addAllSplitPoints(new ArrayList())
    +   *           .setInitiator("initiator-248987089")
    +   *           .build();
    +   *   AddSplitPointsResponse response = databaseAdminClient.addSplitPoints(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 AddSplitPointsResponse addSplitPoints(AddSplitPointsRequest request) { + return addSplitPointsCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds split points to specified tables, indexes of a database. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   AddSplitPointsRequest request =
    +   *       AddSplitPointsRequest.newBuilder()
    +   *           .setDatabase(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString())
    +   *           .addAllSplitPoints(new ArrayList())
    +   *           .setInitiator("initiator-248987089")
    +   *           .build();
    +   *   ApiFuture future =
    +   *       databaseAdminClient.addSplitPointsCallable().futureCall(request);
    +   *   // Do something.
    +   *   AddSplitPointsResponse response = future.get();
    +   * }
    +   * }
    + */ + public final UnaryCallable + addSplitPointsCallable() { + return stub.addSplitPointsCallable(); + } + // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Creates a new backup schedule. @@ -4963,6 +5140,146 @@ public final ListBackupSchedulesPagedResponse listBackupSchedules( return stub.listBackupSchedulesCallable(); } + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * This is an internal API called by Spanner Graph jobs. You should never need to call this API + * directly. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]");
    +   *   String operationId = "operationId129704162";
    +   *   InternalUpdateGraphOperationResponse response =
    +   *       databaseAdminClient.internalUpdateGraphOperation(database, operationId);
    +   * }
    +   * }
    + * + * @param database Internal field, do not use directly. + * @param operationId Internal field, do not use directly. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final InternalUpdateGraphOperationResponse internalUpdateGraphOperation( + DatabaseName database, String operationId) { + InternalUpdateGraphOperationRequest request = + InternalUpdateGraphOperationRequest.newBuilder() + .setDatabase(database == null ? null : database.toString()) + .setOperationId(operationId) + .build(); + return internalUpdateGraphOperation(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * This is an internal API called by Spanner Graph jobs. You should never need to call this API + * directly. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   String database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString();
    +   *   String operationId = "operationId129704162";
    +   *   InternalUpdateGraphOperationResponse response =
    +   *       databaseAdminClient.internalUpdateGraphOperation(database, operationId);
    +   * }
    +   * }
    + * + * @param database Internal field, do not use directly. + * @param operationId Internal field, do not use directly. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final InternalUpdateGraphOperationResponse internalUpdateGraphOperation( + String database, String operationId) { + InternalUpdateGraphOperationRequest request = + InternalUpdateGraphOperationRequest.newBuilder() + .setDatabase(database) + .setOperationId(operationId) + .build(); + return internalUpdateGraphOperation(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * This is an internal API called by Spanner Graph jobs. You should never need to call this API + * directly. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   InternalUpdateGraphOperationRequest request =
    +   *       InternalUpdateGraphOperationRequest.newBuilder()
    +   *           .setDatabase(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString())
    +   *           .setOperationId("operationId129704162")
    +   *           .setVmIdentityToken("vmIdentityToken-417652124")
    +   *           .setProgress(-1001078227)
    +   *           .setStatus(Status.newBuilder().build())
    +   *           .build();
    +   *   InternalUpdateGraphOperationResponse response =
    +   *       databaseAdminClient.internalUpdateGraphOperation(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 InternalUpdateGraphOperationResponse internalUpdateGraphOperation( + InternalUpdateGraphOperationRequest request) { + return internalUpdateGraphOperationCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * This is an internal API called by Spanner Graph jobs. You should never need to call this API + * directly. + * + *

    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 (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
    +   *   InternalUpdateGraphOperationRequest request =
    +   *       InternalUpdateGraphOperationRequest.newBuilder()
    +   *           .setDatabase(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString())
    +   *           .setOperationId("operationId129704162")
    +   *           .setVmIdentityToken("vmIdentityToken-417652124")
    +   *           .setProgress(-1001078227)
    +   *           .setStatus(Status.newBuilder().build())
    +   *           .build();
    +   *   ApiFuture future =
    +   *       databaseAdminClient.internalUpdateGraphOperationCallable().futureCall(request);
    +   *   // Do something.
    +   *   InternalUpdateGraphOperationResponse response = future.get();
    +   * }
    +   * }
    + */ + public final UnaryCallable< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationCallable() { + return stub.internalUpdateGraphOperationCallable(); + } + @Override public final void close() { stub.close(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java index c94b350914f..7457cd253c5 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,6 +44,8 @@ import com.google.iam.v1.TestIamPermissionsResponse; import com.google.longrunning.Operation; import com.google.protobuf.Empty; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.CopyBackupMetadata; @@ -62,6 +64,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlRequest; import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -132,8 +136,8 @@ * } * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) 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 @@ -312,6 +316,11 @@ public UnaryCallSettings restoreDatabaseSetti return ((DatabaseAdminStubSettings) getStubSettings()).listDatabaseRolesSettings(); } + /** Returns the object with the settings used for calls to addSplitPoints. */ + public UnaryCallSettings addSplitPointsSettings() { + return ((DatabaseAdminStubSettings) getStubSettings()).addSplitPointsSettings(); + } + /** Returns the object with the settings used for calls to createBackupSchedule. */ public UnaryCallSettings createBackupScheduleSettings() { @@ -341,6 +350,13 @@ public UnaryCallSettings deleteBackupSchedul return ((DatabaseAdminStubSettings) getStubSettings()).listBackupSchedulesSettings(); } + /** Returns the object with the settings used for calls to internalUpdateGraph. */ + public UnaryCallSettings< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationSettings() { + return ((DatabaseAdminStubSettings) getStubSettings()).internalUpdateGraphOperationSettings(); + } + public static final DatabaseAdminSettings create(DatabaseAdminStubSettings stub) throws IOException { return new DatabaseAdminSettings.Builder(stub.toBuilder()).build(); @@ -606,6 +622,12 @@ public UnaryCallSettings.Builder restoreDatab return getStubSettingsBuilder().listDatabaseRolesSettings(); } + /** Returns the builder for the settings used for calls to addSplitPoints. */ + public UnaryCallSettings.Builder + addSplitPointsSettings() { + return getStubSettingsBuilder().addSplitPointsSettings(); + } + /** Returns the builder for the settings used for calls to createBackupSchedule. */ public UnaryCallSettings.Builder createBackupScheduleSettings() { @@ -639,6 +661,13 @@ public UnaryCallSettings.Builder restoreDatab return getStubSettingsBuilder().listBackupSchedulesSettings(); } + /** Returns the builder for the settings used for calls to internalUpdateGraph. */ + public UnaryCallSettings.Builder< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationSettings() { + return getStubSettingsBuilder().internalUpdateGraphOperationSettings(); + } + @Override public DatabaseAdminSettings build() throws IOException { return new DatabaseAdminSettings(this); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json index 7d6c894d7b6..f6bcf8dda65 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json @@ -10,6 +10,9 @@ "grpc": { "libraryClient": "DatabaseAdminClient", "rpcs": { + "AddSplitPoints": { + "methods": ["addSplitPoints", "addSplitPoints", "addSplitPoints", "addSplitPointsCallable"] + }, "CopyBackup": { "methods": ["copyBackupAsync", "copyBackupAsync", "copyBackupAsync", "copyBackupAsync", "copyBackupAsync", "copyBackupOperationCallable", "copyBackupCallable"] }, @@ -46,6 +49,9 @@ "GetIamPolicy": { "methods": ["getIamPolicy", "getIamPolicy", "getIamPolicy", "getIamPolicyCallable"] }, + "InternalUpdateGraphOperation": { + "methods": ["internalUpdateGraphOperation", "internalUpdateGraphOperation", "internalUpdateGraphOperation", "internalUpdateGraphOperationCallable"] + }, "ListBackupOperations": { "methods": ["listBackupOperations", "listBackupOperations", "listBackupOperations", "listBackupOperationsPagedCallable", "listBackupOperationsCallable"] }, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/package-info.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/package-info.java index 1fd79833e09..ea0fc2fa430 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/package-info.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java index 2f53f6cf5b4..ffb3b37e8bd 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,8 @@ import com.google.longrunning.Operation; import com.google.longrunning.stub.OperationsStub; import com.google.protobuf.Empty; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.CopyBackupMetadata; @@ -52,6 +54,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlRequest; import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -231,6 +235,10 @@ public UnaryCallable restoreDatabaseCallable( throw new UnsupportedOperationException("Not implemented: listDatabaseRolesCallable()"); } + public UnaryCallable addSplitPointsCallable() { + throw new UnsupportedOperationException("Not implemented: addSplitPointsCallable()"); + } + public UnaryCallable createBackupScheduleCallable() { throw new UnsupportedOperationException("Not implemented: createBackupScheduleCallable()"); } @@ -257,6 +265,12 @@ public UnaryCallable deleteBackupScheduleCal throw new UnsupportedOperationException("Not implemented: listBackupSchedulesCallable()"); } + public UnaryCallable + internalUpdateGraphOperationCallable() { + throw new UnsupportedOperationException( + "Not implemented: internalUpdateGraphOperationCallable()"); + } + @Override public abstract void close(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java index ef84fe2b518..a796903c705 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.LibraryMetadata; import com.google.api.gax.rpc.OperationCallSettings; import com.google.api.gax.rpc.PageContext; import com.google.api.gax.rpc.PagedCallSettings; @@ -64,6 +65,8 @@ import com.google.iam.v1.TestIamPermissionsResponse; import com.google.longrunning.Operation; import com.google.protobuf.Empty; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.CopyBackupMetadata; @@ -83,6 +86,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlRequest; import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -155,8 +160,8 @@ * } * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) 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 @@ -185,6 +190,7 @@ * } */ @Generated("by gapic-generator-java") +@SuppressWarnings("CanonicalDuration") public class DatabaseAdminStubSettings extends StubSettings { /** The default scopes of the service. */ private static final ImmutableList DEFAULT_SERVICE_SCOPES = @@ -240,6 +246,8 @@ public class DatabaseAdminStubSettings extends StubSettings listDatabaseRolesSettings; + private final UnaryCallSettings + addSplitPointsSettings; private final UnaryCallSettings createBackupScheduleSettings; private final UnaryCallSettings @@ -250,6 +258,9 @@ public class DatabaseAdminStubSettings extends StubSettings listBackupSchedulesSettings; + private final UnaryCallSettings< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationSettings; private static final PagedListDescriptor LIST_DATABASES_PAGE_STR_DESC = @@ -745,6 +756,11 @@ public UnaryCallSettings restoreDatabaseSetti return listDatabaseRolesSettings; } + /** Returns the object with the settings used for calls to addSplitPoints. */ + public UnaryCallSettings addSplitPointsSettings() { + return addSplitPointsSettings; + } + /** Returns the object with the settings used for calls to createBackupSchedule. */ public UnaryCallSettings createBackupScheduleSettings() { @@ -774,6 +790,13 @@ public UnaryCallSettings deleteBackupSchedul return listBackupSchedulesSettings; } + /** Returns the object with the settings used for calls to internalUpdateGraph. */ + public UnaryCallSettings< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationSettings() { + return internalUpdateGraphOperationSettings; + } + public DatabaseAdminStub createStub() throws IOException { if (getTransportChannelProvider() .getTransportName() @@ -912,11 +935,22 @@ protected DatabaseAdminStubSettings(Builder settingsBuilder) throws IOException listDatabaseOperationsSettings = settingsBuilder.listDatabaseOperationsSettings().build(); listBackupOperationsSettings = settingsBuilder.listBackupOperationsSettings().build(); listDatabaseRolesSettings = settingsBuilder.listDatabaseRolesSettings().build(); + addSplitPointsSettings = settingsBuilder.addSplitPointsSettings().build(); createBackupScheduleSettings = settingsBuilder.createBackupScheduleSettings().build(); getBackupScheduleSettings = settingsBuilder.getBackupScheduleSettings().build(); updateBackupScheduleSettings = settingsBuilder.updateBackupScheduleSettings().build(); deleteBackupScheduleSettings = settingsBuilder.deleteBackupScheduleSettings().build(); listBackupSchedulesSettings = settingsBuilder.listBackupSchedulesSettings().build(); + internalUpdateGraphOperationSettings = + settingsBuilder.internalUpdateGraphOperationSettings().build(); + } + + @Override + protected LibraryMetadata getLibraryMetadata() { + return LibraryMetadata.newBuilder() + .setArtifactName("com.google.cloud:google-cloud-spanner") + .setRepository("googleapis/java-spanner") + .build(); } /** Builder for DatabaseAdminStubSettings. */ @@ -978,6 +1012,8 @@ public static class Builder extends StubSettings.Builder listDatabaseRolesSettings; + private final UnaryCallSettings.Builder + addSplitPointsSettings; private final UnaryCallSettings.Builder createBackupScheduleSettings; private final UnaryCallSettings.Builder @@ -991,6 +1027,9 @@ public static class Builder extends StubSettings.Builder listBackupSchedulesSettings; + private final UnaryCallSettings.Builder< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationSettings; private static final ImmutableMap> RETRYABLE_CODE_DEFINITIONS; @@ -1011,6 +1050,7 @@ public static class Builder extends StubSettings.BuildernewArrayList( StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); + definitions.put("no_retry_codes", ImmutableSet.copyOf(Lists.newArrayList())); RETRYABLE_CODE_DEFINITIONS = definitions.build(); } @@ -1057,6 +1097,8 @@ public static class Builder extends StubSettings.Builder>of( @@ -1124,11 +1168,13 @@ protected Builder(ClientContext clientContext) { listDatabaseOperationsSettings, listBackupOperationsSettings, listDatabaseRolesSettings, + addSplitPointsSettings, createBackupScheduleSettings, getBackupScheduleSettings, updateBackupScheduleSettings, deleteBackupScheduleSettings, - listBackupSchedulesSettings); + listBackupSchedulesSettings, + internalUpdateGraphOperationSettings); initDefaults(this); } @@ -1161,11 +1207,14 @@ protected Builder(DatabaseAdminStubSettings settings) { listDatabaseOperationsSettings = settings.listDatabaseOperationsSettings.toBuilder(); listBackupOperationsSettings = settings.listBackupOperationsSettings.toBuilder(); listDatabaseRolesSettings = settings.listDatabaseRolesSettings.toBuilder(); + addSplitPointsSettings = settings.addSplitPointsSettings.toBuilder(); createBackupScheduleSettings = settings.createBackupScheduleSettings.toBuilder(); getBackupScheduleSettings = settings.getBackupScheduleSettings.toBuilder(); updateBackupScheduleSettings = settings.updateBackupScheduleSettings.toBuilder(); deleteBackupScheduleSettings = settings.deleteBackupScheduleSettings.toBuilder(); listBackupSchedulesSettings = settings.listBackupSchedulesSettings.toBuilder(); + internalUpdateGraphOperationSettings = + settings.internalUpdateGraphOperationSettings.toBuilder(); unaryMethodSettingsBuilders = ImmutableList.>of( @@ -1189,11 +1238,13 @@ protected Builder(DatabaseAdminStubSettings settings) { listDatabaseOperationsSettings, listBackupOperationsSettings, listDatabaseRolesSettings, + addSplitPointsSettings, createBackupScheduleSettings, getBackupScheduleSettings, updateBackupScheduleSettings, deleteBackupScheduleSettings, - listBackupSchedulesSettings); + listBackupSchedulesSettings, + internalUpdateGraphOperationSettings); } private static Builder createDefault() { @@ -1321,6 +1372,11 @@ private static Builder initDefaults(Builder builder) { .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + builder + .addSplitPointsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + builder .createBackupScheduleSettings() .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) @@ -1346,6 +1402,11 @@ private static Builder initDefaults(Builder builder) { .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + builder + .internalUpdateGraphOperationSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_params")); + builder .createDatabaseOperationSettings() .setInitialCallSettings( @@ -1361,7 +1422,7 @@ private static Builder initDefaults(Builder builder) { .setPollingAlgorithm( OperationTimedPollAlgorithm.create( RetrySettings.newBuilder() - .setInitialRetryDelayDuration(Duration.ofMillis(20000L)) + .setInitialRetryDelayDuration(Duration.ofMillis(1000L)) .setRetryDelayMultiplier(1.5) .setMaxRetryDelayDuration(Duration.ofMillis(45000L)) .setInitialRpcTimeoutDuration(Duration.ZERO) @@ -1410,7 +1471,7 @@ private static Builder initDefaults(Builder builder) { .setPollingAlgorithm( OperationTimedPollAlgorithm.create( RetrySettings.newBuilder() - .setInitialRetryDelayDuration(Duration.ofMillis(20000L)) + .setInitialRetryDelayDuration(Duration.ofMillis(1000L)) .setRetryDelayMultiplier(1.5) .setMaxRetryDelayDuration(Duration.ofMillis(45000L)) .setInitialRpcTimeoutDuration(Duration.ZERO) @@ -1661,6 +1722,12 @@ public UnaryCallSettings.Builder restoreDatab return listDatabaseRolesSettings; } + /** Returns the builder for the settings used for calls to addSplitPoints. */ + public UnaryCallSettings.Builder + addSplitPointsSettings() { + return addSplitPointsSettings; + } + /** Returns the builder for the settings used for calls to createBackupSchedule. */ public UnaryCallSettings.Builder createBackupScheduleSettings() { @@ -1694,6 +1761,13 @@ public UnaryCallSettings.Builder restoreDatab return listBackupSchedulesSettings; } + /** Returns the builder for the settings used for calls to internalUpdateGraph. */ + public UnaryCallSettings.Builder< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationSettings() { + return internalUpdateGraphOperationSettings; + } + @Override public DatabaseAdminStubSettings build() throws IOException { return new DatabaseAdminStubSettings(this); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminCallableFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminCallableFactory.java index 4880098a040..15fa1361452 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminCallableFactory.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java index 8207ebcbce5..d403b6823b7 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,6 +39,8 @@ import com.google.longrunning.Operation; import com.google.longrunning.stub.GrpcOperationsStub; import com.google.protobuf.Empty; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.CopyBackupMetadata; @@ -57,6 +59,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlRequest; import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -100,6 +104,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { ProtoUtils.marshaller(ListDatabasesRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListDatabasesResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -110,6 +115,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(CreateDatabaseRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor getDatabaseMethodDescriptor = @@ -118,6 +124,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/GetDatabase") .setRequestMarshaller(ProtoUtils.marshaller(GetDatabaseRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Database.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -128,6 +135,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(UpdateDatabaseRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -138,6 +146,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(UpdateDatabaseDdlRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor dropDatabaseMethodDescriptor = @@ -146,6 +155,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/DropDatabase") .setRequestMarshaller(ProtoUtils.marshaller(DropDatabaseRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -157,6 +167,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { ProtoUtils.marshaller(GetDatabaseDdlRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(GetDatabaseDdlResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor setIamPolicyMethodDescriptor = @@ -165,6 +176,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/SetIamPolicy") .setRequestMarshaller(ProtoUtils.marshaller(SetIamPolicyRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor getIamPolicyMethodDescriptor = @@ -173,6 +185,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/GetIamPolicy") .setRequestMarshaller(ProtoUtils.marshaller(GetIamPolicyRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -185,6 +198,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { ProtoUtils.marshaller(TestIamPermissionsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(TestIamPermissionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -194,6 +208,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/CreateBackup") .setRequestMarshaller(ProtoUtils.marshaller(CreateBackupRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor copyBackupMethodDescriptor = @@ -202,6 +217,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/CopyBackup") .setRequestMarshaller(ProtoUtils.marshaller(CopyBackupRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor getBackupMethodDescriptor = @@ -210,6 +226,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/GetBackup") .setRequestMarshaller(ProtoUtils.marshaller(GetBackupRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Backup.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor updateBackupMethodDescriptor = @@ -218,6 +235,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/UpdateBackup") .setRequestMarshaller(ProtoUtils.marshaller(UpdateBackupRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Backup.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor deleteBackupMethodDescriptor = @@ -226,6 +244,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/DeleteBackup") .setRequestMarshaller(ProtoUtils.marshaller(DeleteBackupRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -236,6 +255,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller(ProtoUtils.marshaller(ListBackupsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListBackupsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -246,6 +266,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(RestoreDatabaseRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor< @@ -260,6 +281,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { ProtoUtils.marshaller(ListDatabaseOperationsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListDatabaseOperationsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -272,6 +294,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { ProtoUtils.marshaller(ListBackupOperationsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListBackupOperationsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -283,6 +306,19 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { ProtoUtils.marshaller(ListDatabaseRolesRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListDatabaseRolesResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + addSplitPointsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/AddSplitPoints") + .setRequestMarshaller( + ProtoUtils.marshaller(AddSplitPointsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(AddSplitPointsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -294,6 +330,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(CreateBackupScheduleRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(BackupSchedule.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -304,6 +341,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(GetBackupScheduleRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(BackupSchedule.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -315,6 +353,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(UpdateBackupScheduleRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(BackupSchedule.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -326,6 +365,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(DeleteBackupScheduleRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -338,6 +378,23 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { ProtoUtils.marshaller(ListBackupSchedulesRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListBackupSchedulesResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationMethodDescriptor = + MethodDescriptor + . + newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName( + "google.spanner.admin.database.v1.DatabaseAdmin/InternalUpdateGraphOperation") + .setRequestMarshaller( + ProtoUtils.marshaller(InternalUpdateGraphOperationRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(InternalUpdateGraphOperationResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private final UnaryCallable listDatabasesCallable; @@ -386,6 +443,7 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { listDatabaseRolesCallable; private final UnaryCallable listDatabaseRolesPagedCallable; + private final UnaryCallable addSplitPointsCallable; private final UnaryCallable createBackupScheduleCallable; private final UnaryCallable getBackupScheduleCallable; @@ -396,6 +454,9 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { listBackupSchedulesCallable; private final UnaryCallable listBackupSchedulesPagedCallable; + private final UnaryCallable< + InternalUpdateGraphOperationRequest, InternalUpdateGraphOperationResponse> + internalUpdateGraphOperationCallable; private final BackgroundResource backgroundResources; private final GrpcOperationsStub operationsStub; @@ -645,6 +706,17 @@ protected GrpcDatabaseAdminStub( return builder.build(); }) .build(); + GrpcCallSettings + addSplitPointsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(addSplitPointsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("database", String.valueOf(request.getDatabase())); + return builder.build(); + }) + .build(); GrpcCallSettings createBackupScheduleTransportSettings = GrpcCallSettings.newBuilder() @@ -700,6 +772,13 @@ protected GrpcDatabaseAdminStub( return builder.build(); }) .build(); + GrpcCallSettings + internalUpdateGraphOperationTransportSettings = + GrpcCallSettings + . + newBuilder() + .setMethodDescriptor(internalUpdateGraphOperationMethodDescriptor) + .build(); this.listDatabasesCallable = callableFactory.createUnaryCallable( @@ -828,6 +907,9 @@ protected GrpcDatabaseAdminStub( listDatabaseRolesTransportSettings, settings.listDatabaseRolesSettings(), clientContext); + this.addSplitPointsCallable = + callableFactory.createUnaryCallable( + addSplitPointsTransportSettings, settings.addSplitPointsSettings(), clientContext); this.createBackupScheduleCallable = callableFactory.createUnaryCallable( createBackupScheduleTransportSettings, @@ -858,6 +940,11 @@ protected GrpcDatabaseAdminStub( listBackupSchedulesTransportSettings, settings.listBackupSchedulesSettings(), clientContext); + this.internalUpdateGraphOperationCallable = + callableFactory.createUnaryCallable( + internalUpdateGraphOperationTransportSettings, + settings.internalUpdateGraphOperationSettings(), + clientContext); this.backgroundResources = new BackgroundResourceAggregation(clientContext.getBackgroundResources()); @@ -1036,6 +1123,11 @@ public UnaryCallable restoreDatabaseCallable( return listDatabaseRolesPagedCallable; } + @Override + public UnaryCallable addSplitPointsCallable() { + return addSplitPointsCallable; + } + @Override public UnaryCallable createBackupScheduleCallable() { return createBackupScheduleCallable; @@ -1068,6 +1160,12 @@ public UnaryCallable deleteBackupScheduleCal return listBackupSchedulesPagedCallable; } + @Override + public UnaryCallable + internalUpdateGraphOperationCallable() { + return internalUpdateGraphOperationCallable; + } + @Override public final void close() { try { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminCallableFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminCallableFactory.java index 9f8c8075f66..0d93f799046 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminCallableFactory.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java index fbe9f02b1f8..57d0623df4a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,6 +48,8 @@ import com.google.longrunning.Operation; import com.google.protobuf.Empty; import com.google.protobuf.TypeRegistry; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.CopyBackupMetadata; @@ -66,6 +68,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlRequest; import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -879,6 +883,43 @@ public class HttpJsonDatabaseAdminStub extends DatabaseAdminStub { .build()) .build(); + private static final ApiMethodDescriptor + addSplitPointsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/AddSplitPoints") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{database=projects/*/instances/*/databases/*}:addSplitPoints", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "database", request.getDatabase()); + 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().clearDatabase().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(AddSplitPointsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + private static final ApiMethodDescriptor createBackupScheduleMethodDescriptor = ApiMethodDescriptor.newBuilder() @@ -1113,6 +1154,7 @@ public class HttpJsonDatabaseAdminStub extends DatabaseAdminStub { listDatabaseRolesCallable; private final UnaryCallable listDatabaseRolesPagedCallable; + private final UnaryCallable addSplitPointsCallable; private final UnaryCallable createBackupScheduleCallable; private final UnaryCallable getBackupScheduleCallable; @@ -1474,6 +1516,18 @@ protected HttpJsonDatabaseAdminStub( return builder.build(); }) .build(); + HttpJsonCallSettings + addSplitPointsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(addSplitPointsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("database", String.valueOf(request.getDatabase())); + return builder.build(); + }) + .build(); HttpJsonCallSettings createBackupScheduleTransportSettings = HttpJsonCallSettings.newBuilder() @@ -1664,6 +1718,9 @@ protected HttpJsonDatabaseAdminStub( listDatabaseRolesTransportSettings, settings.listDatabaseRolesSettings(), clientContext); + this.addSplitPointsCallable = + callableFactory.createUnaryCallable( + addSplitPointsTransportSettings, settings.addSplitPointsSettings(), clientContext); this.createBackupScheduleCallable = callableFactory.createUnaryCallable( createBackupScheduleTransportSettings, @@ -1722,6 +1779,7 @@ public static List getMethodDescriptors() { methodDescriptors.add(listDatabaseOperationsMethodDescriptor); methodDescriptors.add(listBackupOperationsMethodDescriptor); methodDescriptors.add(listDatabaseRolesMethodDescriptor); + methodDescriptors.add(addSplitPointsMethodDescriptor); methodDescriptors.add(createBackupScheduleMethodDescriptor); methodDescriptors.add(getBackupScheduleMethodDescriptor); methodDescriptors.add(updateBackupScheduleMethodDescriptor); @@ -1903,6 +1961,11 @@ public UnaryCallable restoreDatabaseCallable( return listDatabaseRolesPagedCallable; } + @Override + public UnaryCallable addSplitPointsCallable() { + return addSplitPointsCallable; + } + @Override public UnaryCallable createBackupScheduleCallable() { return createBackupScheduleCallable; @@ -1935,6 +1998,14 @@ public UnaryCallable deleteBackupScheduleCal return listBackupSchedulesPagedCallable; } + @Override + public UnaryCallable + internalUpdateGraphOperationCallable() { + throw new UnsupportedOperationException( + "Not implemented: internalUpdateGraphOperationCallable(). REST transport is not implemented" + + " for this method yet."); + } + @Override public final void close() { try { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClient.java index 8a7e12b50e7..05150d865e7 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -130,7 +130,8 @@ * * *

    ListInstanceConfigs - *

    Lists the supported instance configurations for a given project. + *

    Lists the supported instance configurations for a given project. + *

    Returns both Google-managed configurations and user-managed configurations. * *

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

    *
      @@ -169,14 +170,14 @@ * * *

      CreateInstanceConfig - *

      Creates an instance configuration and begins preparing it to be used. The returned [long-running operation][google.longrunning.Operation] can be used to track the progress of preparing the new instance configuration. The instance configuration name is assigned by the caller. If the named instance configuration already exists, `CreateInstanceConfig` returns `ALREADY_EXISTS`. + *

      Creates an instance configuration and begins preparing it to be used. The returned long-running operation can be used to track the progress of preparing the new instance configuration. The instance configuration name is assigned by the caller. If the named instance configuration already exists, `CreateInstanceConfig` returns `ALREADY_EXISTS`. *

      Immediately after the request returns: *

      * The instance configuration is readable via the API, with all requested attributes. The instance configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] field is set to true. Its state is `CREATING`. *

      While the operation is pending: *

      * Cancelling the operation renders the instance configuration immediately unreadable via the API. * Except for deleting the creating resource, all other attempts to modify the instance configuration are rejected. *

      Upon completion of the returned operation: *

      * Instances can be created using the instance configuration. * The instance configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] field becomes false. Its state becomes `READY`. - *

      The returned [long-running operation][google.longrunning.Operation] will have a name of the format `<instance_config_name>/operations/<operation_id>` and can be used to track creation of the instance configuration. The [metadata][google.longrunning.Operation.metadata] field type is [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. The [response][google.longrunning.Operation.response] field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + *

      The returned long-running operation will have a name of the format `<instance_config_name>/operations/<operation_id>` and can be used to track creation of the instance configuration. The metadata field type is [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. *

      Authorization requires `spanner.instanceConfigs.create` permission on the resource [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent]. * *

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

      @@ -197,7 +198,7 @@ * * *

      UpdateInstanceConfig - *

      Updates an instance configuration. The returned [long-running operation][google.longrunning.Operation] can be used to track the progress of updating the instance. If the named instance configuration does not exist, returns `NOT_FOUND`. + *

      Updates an instance configuration. The returned long-running operation can be used to track the progress of updating the instance. If the named instance configuration does not exist, returns `NOT_FOUND`. *

      Only user-managed configurations can be updated. *

      Immediately after the request returns: *

      * The instance configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] field is set to true. @@ -205,7 +206,7 @@ *

      * Cancelling the operation sets its metadata's [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata.cancel_time]. The operation is guaranteed to succeed at undoing all changes, after which point it terminates with a `CANCELLED` status. * All other attempts to modify the instance configuration are rejected. * Reading the instance configuration via the API continues to give the pre-request values. *

      Upon completion of the returned operation: *

      * Creating instances using the instance configuration uses the new values. * The new values of the instance configuration are readable via the API. * The instance configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] field becomes false. - *

      The returned [long-running operation][google.longrunning.Operation] will have a name of the format `<instance_config_name>/operations/<operation_id>` and can be used to track the instance configuration modification. The [metadata][google.longrunning.Operation.metadata] field type is [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata]. The [response][google.longrunning.Operation.response] field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + *

      The returned long-running operation will have a name of the format `<instance_config_name>/operations/<operation_id>` and can be used to track the instance configuration modification. The metadata field type is [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata]. The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. *

      Authorization requires `spanner.instanceConfigs.update` permission on the resource [name][google.spanner.admin.instance.v1.InstanceConfig.name]. * *

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

      @@ -246,7 +247,7 @@ * * *

      ListInstanceConfigOperations - *

      Lists the user-managed instance configuration [long-running operations][google.longrunning.Operation] in the given project. An instance configuration operation has a name of the form `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`. The long-running operation [metadata][google.longrunning.Operation.metadata] field type `metadata.type_url` describes the type of the metadata. Operations returned include those that have completed/failed/canceled within the last 7 days, and pending operations. Operations returned are ordered by `operation.metadata.value.start_time` in descending order starting from the most recently started operation. + *

      Lists the user-managed instance configuration long-running operations in the given project. An instance configuration operation has a name of the form `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`. The long-running operation metadata field type `metadata.type_url` describes the type of the metadata. Operations returned include those that have completed/failed/canceled within the last 7 days, and pending operations. Operations returned are ordered by `operation.metadata.value.start_time` in descending order starting from the most recently started operation. * *

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

      *
        @@ -325,14 +326,14 @@ * * *

        CreateInstance - *

        Creates an instance and begins preparing it to begin serving. The returned [long-running operation][google.longrunning.Operation] can be used to track the progress of preparing the new instance. The instance name is assigned by the caller. If the named instance already exists, `CreateInstance` returns `ALREADY_EXISTS`. + *

        Creates an instance and begins preparing it to begin serving. The returned long-running operation can be used to track the progress of preparing the new instance. The instance name is assigned by the caller. If the named instance already exists, `CreateInstance` returns `ALREADY_EXISTS`. *

        Immediately upon completion of this request: *

        * The instance is readable via the API, with all requested attributes but no allocated resources. Its state is `CREATING`. *

        Until completion of the returned operation: *

        * Cancelling the operation renders the instance immediately unreadable via the API. * The instance can be deleted. * All other attempts to modify the instance are rejected. *

        Upon completion of the returned operation: *

        * Billing for all successfully-allocated resources begins (some types may have lower than the requested levels). * Databases can be created in the instance. * The instance's allocated resource levels are readable via the API. * The instance's state becomes `READY`. - *

        The returned [long-running operation][google.longrunning.Operation] will have a name of the format `<instance_name>/operations/<operation_id>` and can be used to track creation of the instance. The [metadata][google.longrunning.Operation.metadata] field type is [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The [response][google.longrunning.Operation.response] field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

        The returned long-running operation will have a name of the format `<instance_name>/operations/<operation_id>` and can be used to track creation of the instance. The metadata field type is [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The response field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

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

        *
          @@ -352,14 +353,14 @@ * * *

          UpdateInstance - *

          Updates an instance, and begins allocating or releasing resources as requested. The returned [long-running operation][google.longrunning.Operation] can be used to track the progress of updating the instance. If the named instance does not exist, returns `NOT_FOUND`. + *

          Updates an instance, and begins allocating or releasing resources as requested. The returned long-running operation can be used to track the progress of updating the instance. If the named instance does not exist, returns `NOT_FOUND`. *

          Immediately upon completion of this request: *

          * For resource types for which a decrease in the instance's allocation has been requested, billing is based on the newly-requested level. *

          Until completion of the returned operation: *

          * Cancelling the operation sets its metadata's [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceMetadata.cancel_time], and begins restoring resources to their pre-request values. The operation is guaranteed to succeed at undoing all resource changes, after which point it terminates with a `CANCELLED` status. * All other attempts to modify the instance are rejected. * Reading the instance via the API continues to give the pre-request resource levels. *

          Upon completion of the returned operation: *

          * Billing begins for all successfully-allocated resources (some types may have lower than the requested levels). * All newly-reserved resources are available for serving the instance's tables. * The instance's new resource levels are readable via the API. - *

          The returned [long-running operation][google.longrunning.Operation] will have a name of the format `<instance_name>/operations/<operation_id>` and can be used to track the instance modification. The [metadata][google.longrunning.Operation.metadata] field type is [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The [response][google.longrunning.Operation.response] field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

          The returned long-running operation will have a name of the format `<instance_name>/operations/<operation_id>` and can be used to track the instance modification. The metadata field type is [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The response field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. *

          Authorization requires `spanner.instances.update` permission on the resource [name][google.spanner.admin.instance.v1.Instance.name]. * *

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

          @@ -481,14 +482,14 @@ * * *

          CreateInstancePartition - *

          Creates an instance partition and begins preparing it to be used. The returned [long-running operation][google.longrunning.Operation] can be used to track the progress of preparing the new instance partition. The instance partition name is assigned by the caller. If the named instance partition already exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. + *

          Creates an instance partition and begins preparing it to be used. The returned long-running operation can be used to track the progress of preparing the new instance partition. The instance partition name is assigned by the caller. If the named instance partition already exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. *

          Immediately upon completion of this request: *

          * The instance partition is readable via the API, with all requested attributes but no allocated resources. Its state is `CREATING`. *

          Until completion of the returned operation: *

          * Cancelling the operation renders the instance partition immediately unreadable via the API. * The instance partition can be deleted. * All other attempts to modify the instance partition are rejected. *

          Upon completion of the returned operation: *

          * Billing for all successfully-allocated resources begins (some types may have lower than the requested levels). * Databases can start using this instance partition. * The instance partition's allocated resource levels are readable via the API. * The instance partition's state becomes `READY`. - *

          The returned [long-running operation][google.longrunning.Operation] will have a name of the format `<instance_partition_name>/operations/<operation_id>` and can be used to track creation of the instance partition. The [metadata][google.longrunning.Operation.metadata] field type is [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. The [response][google.longrunning.Operation.response] field type is [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. + *

          The returned long-running operation will have a name of the format `<instance_partition_name>/operations/<operation_id>` and can be used to track creation of the instance partition. The metadata field type is [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. The response field type is [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

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

          *
            @@ -528,14 +529,14 @@ * * *

            UpdateInstancePartition - *

            Updates an instance partition, and begins allocating or releasing resources as requested. The returned [long-running operation][google.longrunning.Operation] can be used to track the progress of updating the instance partition. If the named instance partition does not exist, returns `NOT_FOUND`. + *

            Updates an instance partition, and begins allocating or releasing resources as requested. The returned long-running operation can be used to track the progress of updating the instance partition. If the named instance partition does not exist, returns `NOT_FOUND`. *

            Immediately upon completion of this request: *

            * For resource types for which a decrease in the instance partition's allocation has been requested, billing is based on the newly-requested level. *

            Until completion of the returned operation: *

            * Cancelling the operation sets its metadata's [cancel_time][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata.cancel_time], and begins restoring resources to their pre-request values. The operation is guaranteed to succeed at undoing all resource changes, after which point it terminates with a `CANCELLED` status. * All other attempts to modify the instance partition are rejected. * Reading the instance partition via the API continues to give the pre-request resource levels. *

            Upon completion of the returned operation: *

            * Billing begins for all successfully-allocated resources (some types may have lower than the requested levels). * All newly-reserved resources are available for serving the instance partition's tables. * The instance partition's new resource levels are readable via the API. - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the format `<instance_partition_name>/operations/<operation_id>` and can be used to track the instance partition modification. The [metadata][google.longrunning.Operation.metadata] field type is [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata]. The [response][google.longrunning.Operation.response] field type is [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. + *

            The returned long-running operation will have a name of the format `<instance_partition_name>/operations/<operation_id>` and can be used to track the instance partition modification. The metadata field type is [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata]. The response field type is [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. *

            Authorization requires `spanner.instancePartitions.update` permission on the resource [name][google.spanner.admin.instance.v1.InstancePartition.name]. * *

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

            @@ -555,7 +556,7 @@ * * *

            ListInstancePartitionOperations - *

            Lists instance partition [long-running operations][google.longrunning.Operation] in the given instance. An instance partition operation has a name of the form `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`. The long-running operation [metadata][google.longrunning.Operation.metadata] field type `metadata.type_url` describes the type of the metadata. Operations returned include those that have completed/failed/canceled within the last 7 days, and pending operations. Operations returned are ordered by `operation.metadata.value.start_time` in descending order starting from the most recently started operation. + *

            Lists instance partition long-running operations in the given instance. An instance partition operation has a name of the form `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`. The long-running operation metadata field type `metadata.type_url` describes the type of the metadata. Operations returned include those that have completed/failed/canceled within the last 7 days, and pending operations. Operations returned are ordered by `operation.metadata.value.start_time` in descending order starting from the most recently started operation. *

            Authorization requires `spanner.instancePartitionOperations.list` permission on the resource [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent]. * *

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

            @@ -576,14 +577,14 @@ * * *

            MoveInstance - *

            Moves an instance to the target instance configuration. You can use the returned [long-running operation][google.longrunning.Operation] to track the progress of moving the instance. + *

            Moves an instance to the target instance configuration. You can use the returned long-running operation to track the progress of moving the instance. *

            `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of the following criteria: *

            * Is undergoing a move to a different instance configuration * Has backups * Has an ongoing update * Contains any CMEK-enabled databases * Is a free trial instance *

            While the operation is pending: *

            * All other attempts to modify the instance, including changes to its compute capacity, are rejected. * The following database and backup admin operations are rejected: *

            * `DatabaseAdmin.CreateDatabase` * `DatabaseAdmin.UpdateDatabaseDdl` (disabled if default_leader is specified in the request.) * `DatabaseAdmin.RestoreDatabase` * `DatabaseAdmin.CreateBackup` * `DatabaseAdmin.CopyBackup` *

            * Both the source and target instance configurations are subject to hourly compute and storage charges. * The instance might experience higher read-write latencies and a higher transaction abort rate. However, moving an instance doesn't cause any downtime. - *

            The returned [long-running operation][google.longrunning.Operation] has a name of the format `<instance_name>/operations/<operation_id>` and can be used to track the move instance operation. The [metadata][google.longrunning.Operation.metadata] field type is [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The [response][google.longrunning.Operation.response] field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling the operation sets its metadata's [cancel_time][google.spanner.admin.instance.v1.MoveInstanceMetadata.cancel_time]. Cancellation is not immediate because it involves moving any data previously moved to the target instance configuration back to the original instance configuration. You can use this operation to track the progress of the cancellation. Upon successful completion of the cancellation, the operation terminates with `CANCELLED` status. + *

            The returned long-running operation has a name of the format `<instance_name>/operations/<operation_id>` and can be used to track the move instance operation. The metadata field type is [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The response field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling the operation sets its metadata's [cancel_time][google.spanner.admin.instance.v1.MoveInstanceMetadata.cancel_time]. Cancellation is not immediate because it involves moving any data previously moved to the target instance configuration back to the original instance configuration. You can use this operation to track the progress of the cancellation. Upon successful completion of the cancellation, the operation terminates with `CANCELLED` status. *

            If not cancelled, upon completion of the returned operation: *

            * The instance successfully moves to the target instance configuration. * You are billed for compute and storage in target instance configuration. *

            Authorization requires the `spanner.instances.update` permission on the resource [instance][google.spanner.admin.instance.v1.Instance]. @@ -734,6 +735,8 @@ public final OperationsClient getHttpJsonOperationsClient() { /** * Lists the supported instance configurations for a given project. * + *

            Returns both Google-managed configurations and user-managed configurations. + * *

            Sample code: * *

            {@code
            @@ -766,6 +769,8 @@ public final ListInstanceConfigsPagedResponse listInstanceConfigs(ProjectName pa
               /**
                * Lists the supported instance configurations for a given project.
                *
            +   * 

            Returns both Google-managed configurations and user-managed configurations. + * *

            Sample code: * *

            {@code
            @@ -796,6 +801,8 @@ public final ListInstanceConfigsPagedResponse listInstanceConfigs(String parent)
               /**
                * Lists the supported instance configurations for a given project.
                *
            +   * 

            Returns both Google-managed configurations and user-managed configurations. + * *

            Sample code: * *

            {@code
            @@ -829,6 +836,8 @@ public final ListInstanceConfigsPagedResponse listInstanceConfigs(
               /**
                * Lists the supported instance configurations for a given project.
                *
            +   * 

            Returns both Google-managed configurations and user-managed configurations. + * *

            Sample code: * *

            {@code
            @@ -862,6 +871,8 @@ public final ListInstanceConfigsPagedResponse listInstanceConfigs(
               /**
                * Lists the supported instance configurations for a given project.
                *
            +   * 

            Returns both Google-managed configurations and user-managed configurations. + * *

            Sample code: * *

            {@code
            @@ -1013,11 +1024,10 @@ public final UnaryCallable getInstance
             
               // AUTO-GENERATED DOCUMENTATION AND METHOD.
               /**
            -   * Creates an instance configuration and begins preparing it to be used. The returned
            -   * [long-running operation][google.longrunning.Operation] can be used to track the progress of
            -   * preparing the new instance configuration. The instance configuration name is assigned by the
            -   * caller. If the named instance configuration already exists, `CreateInstanceConfig` returns
            -   * `ALREADY_EXISTS`.
            +   * Creates an instance configuration and begins preparing it to be used. The returned long-running
            +   * operation can be used to track the progress of preparing the new instance configuration. The
            +   * instance configuration name is assigned by the caller. If the named instance configuration
            +   * already exists, `CreateInstanceConfig` returns `ALREADY_EXISTS`.
                *
                * 

            Immediately after the request returns: * @@ -1038,13 +1048,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. Its state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * creation of the instance configuration. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track + * creation of the instance configuration. The metadata field type is * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.create` permission on the resource * [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent]. @@ -1070,9 +1079,9 @@ public final UnaryCallable getInstance * * @param parent Required. The name of the project in which to create the instance configuration. * Values are of the form `projects/<project>`. - * @param instanceConfig Required. The InstanceConfig proto of the configuration to create. - * instance_config.name must be `<parent>/instanceConfigs/<instance_config_id>`. - * instance_config.base_config must be a Google managed configuration name, e.g. + * @param instanceConfig Required. The `InstanceConfig` proto of the configuration to create. + * `instance_config.name` must be `<parent>/instanceConfigs/<instance_config_id>`. + * `instance_config.base_config` must be a Google-managed configuration name, e.g. * <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3. * @param instanceConfigId Required. The ID of the instance configuration to create. Valid * identifiers are of the form `custom-[-a-z0-9]*[a-z0-9]` and must be between 2 and 64 @@ -1094,11 +1103,10 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance configuration and begins preparing it to be used. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * preparing the new instance configuration. The instance configuration name is assigned by the - * caller. If the named instance configuration already exists, `CreateInstanceConfig` returns - * `ALREADY_EXISTS`. + * Creates an instance configuration and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance configuration. The + * instance configuration name is assigned by the caller. If the named instance configuration + * already exists, `CreateInstanceConfig` returns `ALREADY_EXISTS`. * *

            Immediately after the request returns: * @@ -1119,13 +1127,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. Its state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * creation of the instance configuration. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track + * creation of the instance configuration. The metadata field type is * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.create` permission on the resource * [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent]. @@ -1151,9 +1158,9 @@ public final UnaryCallable getInstance * * @param parent Required. The name of the project in which to create the instance configuration. * Values are of the form `projects/<project>`. - * @param instanceConfig Required. The InstanceConfig proto of the configuration to create. - * instance_config.name must be `<parent>/instanceConfigs/<instance_config_id>`. - * instance_config.base_config must be a Google managed configuration name, e.g. + * @param instanceConfig Required. The `InstanceConfig` proto of the configuration to create. + * `instance_config.name` must be `<parent>/instanceConfigs/<instance_config_id>`. + * `instance_config.base_config` must be a Google-managed configuration name, e.g. * <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3. * @param instanceConfigId Required. The ID of the instance configuration to create. Valid * identifiers are of the form `custom-[-a-z0-9]*[a-z0-9]` and must be between 2 and 64 @@ -1175,11 +1182,10 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance configuration and begins preparing it to be used. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * preparing the new instance configuration. The instance configuration name is assigned by the - * caller. If the named instance configuration already exists, `CreateInstanceConfig` returns - * `ALREADY_EXISTS`. + * Creates an instance configuration and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance configuration. The + * instance configuration name is assigned by the caller. If the named instance configuration + * already exists, `CreateInstanceConfig` returns `ALREADY_EXISTS`. * *

            Immediately after the request returns: * @@ -1200,13 +1206,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. Its state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * creation of the instance configuration. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track + * creation of the instance configuration. The metadata field type is * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.create` permission on the resource * [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent]. @@ -1241,11 +1246,10 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance configuration and begins preparing it to be used. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * preparing the new instance configuration. The instance configuration name is assigned by the - * caller. If the named instance configuration already exists, `CreateInstanceConfig` returns - * `ALREADY_EXISTS`. + * Creates an instance configuration and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance configuration. The + * instance configuration name is assigned by the caller. If the named instance configuration + * already exists, `CreateInstanceConfig` returns `ALREADY_EXISTS`. * *

            Immediately after the request returns: * @@ -1266,13 +1270,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. Its state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * creation of the instance configuration. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track + * creation of the instance configuration. The metadata field type is * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.create` permission on the resource * [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent]. @@ -1308,11 +1311,10 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance configuration and begins preparing it to be used. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * preparing the new instance configuration. The instance configuration name is assigned by the - * caller. If the named instance configuration already exists, `CreateInstanceConfig` returns - * `ALREADY_EXISTS`. + * Creates an instance configuration and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance configuration. The + * instance configuration name is assigned by the caller. If the named instance configuration + * already exists, `CreateInstanceConfig` returns `ALREADY_EXISTS`. * *

            Immediately after the request returns: * @@ -1333,13 +1335,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. Its state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * creation of the instance configuration. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track + * creation of the instance configuration. The metadata field type is * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.create` permission on the resource * [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent]. @@ -1374,9 +1375,9 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Updates an instance configuration. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of updating the - * instance. If the named instance configuration does not exist, returns `NOT_FOUND`. + * Updates an instance configuration. The returned long-running operation can be used to track the + * progress of updating the instance. If the named instance configuration does not exist, returns + * `NOT_FOUND`. * *

            Only user-managed configurations can be updated. * @@ -1402,13 +1403,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * the instance configuration modification. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track the + * instance configuration modification. The metadata field type is * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.update` permission on the resource * [name][google.spanner.admin.instance.v1.InstanceConfig.name]. @@ -1454,9 +1454,9 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Updates an instance configuration. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of updating the - * instance. If the named instance configuration does not exist, returns `NOT_FOUND`. + * Updates an instance configuration. The returned long-running operation can be used to track the + * progress of updating the instance. If the named instance configuration does not exist, returns + * `NOT_FOUND`. * *

            Only user-managed configurations can be updated. * @@ -1482,13 +1482,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * the instance configuration modification. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track the + * instance configuration modification. The metadata field type is * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.update` permission on the resource * [name][google.spanner.admin.instance.v1.InstanceConfig.name]. @@ -1522,9 +1521,9 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Updates an instance configuration. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of updating the - * instance. If the named instance configuration does not exist, returns `NOT_FOUND`. + * Updates an instance configuration. The returned long-running operation can be used to track the + * progress of updating the instance. If the named instance configuration does not exist, returns + * `NOT_FOUND`. * *

            Only user-managed configurations can be updated. * @@ -1550,13 +1549,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * the instance configuration modification. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track the + * instance configuration modification. The metadata field type is * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.update` permission on the resource * [name][google.spanner.admin.instance.v1.InstanceConfig.name]. @@ -1591,9 +1589,9 @@ public final UnaryCallable getInstance // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Updates an instance configuration. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of updating the - * instance. If the named instance configuration does not exist, returns `NOT_FOUND`. + * Updates an instance configuration. The returned long-running operation can be used to track the + * progress of updating the instance. If the named instance configuration does not exist, returns + * `NOT_FOUND`. * *

            Only user-managed configurations can be updated. * @@ -1619,13 +1617,12 @@ public final UnaryCallable getInstance * configuration's [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] * field becomes false. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_config_name>/operations/<operation_id>` and can be used to track - * the instance configuration modification. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_config_name>/operations/<operation_id>` and can be used to track the + * instance configuration modification. The metadata field type is * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata]. - * The [response][google.longrunning.Operation.response] field type is - * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if successful. + * The response field type is [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], + * if successful. * *

            Authorization requires `spanner.instanceConfigs.update` permission on the resource * [name][google.spanner.admin.instance.v1.InstanceConfig.name]. @@ -1801,15 +1798,14 @@ public final UnaryCallable deleteInstanceCon // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists the user-managed instance configuration [long-running - * operations][google.longrunning.Operation] in the given project. An instance configuration - * operation has a name of the form + * Lists the user-managed instance configuration long-running operations in the given project. An + * instance configuration operation has a name of the form * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Sample code: * @@ -1843,15 +1839,14 @@ public final ListInstanceConfigOperationsPagedResponse listInstanceConfigOperati // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists the user-managed instance configuration [long-running - * operations][google.longrunning.Operation] in the given project. An instance configuration - * operation has a name of the form + * Lists the user-managed instance configuration long-running operations in the given project. An + * instance configuration operation has a name of the form * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Sample code: * @@ -1883,15 +1878,14 @@ public final ListInstanceConfigOperationsPagedResponse listInstanceConfigOperati // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists the user-managed instance configuration [long-running - * operations][google.longrunning.Operation] in the given project. An instance configuration - * operation has a name of the form + * Lists the user-managed instance configuration long-running operations in the given project. An + * instance configuration operation has a name of the form * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Sample code: * @@ -1926,15 +1920,14 @@ public final ListInstanceConfigOperationsPagedResponse listInstanceConfigOperati // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists the user-managed instance configuration [long-running - * operations][google.longrunning.Operation] in the given project. An instance configuration - * operation has a name of the form + * Lists the user-managed instance configuration long-running operations in the given project. An + * instance configuration operation has a name of the form * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Sample code: * @@ -1969,15 +1962,14 @@ public final ListInstanceConfigOperationsPagedResponse listInstanceConfigOperati // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists the user-managed instance configuration [long-running - * operations][google.longrunning.Operation] in the given project. An instance configuration - * operation has a name of the form + * Lists the user-managed instance configuration long-running operations in the given project. An + * instance configuration operation has a name of the form * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Sample code: * @@ -2209,7 +2201,9 @@ public final UnaryCallable listInst * }

            * * @param parent Required. The instance whose instance partitions should be listed. Values are of - * the form `projects/<project>/instances/<instance>`. + * the form `projects/<project>/instances/<instance>`. Use `{instance} = '-'` to + * list instance partitions for all Instances in a project, e.g., + * `projects/myproject/instances/-`. * @throws com.google.api.gax.rpc.ApiException if the remote call fails */ public final ListInstancePartitionsPagedResponse listInstancePartitions(InstanceName parent) { @@ -2242,7 +2236,9 @@ public final ListInstancePartitionsPagedResponse listInstancePartitions(Instance * }
            * * @param parent Required. The instance whose instance partitions should be listed. Values are of - * the form `projects/<project>/instances/<instance>`. + * the form `projects/<project>/instances/<instance>`. Use `{instance} = '-'` to + * list instance partitions for all Instances in a project, e.g., + * `projects/myproject/instances/-`. * @throws com.google.api.gax.rpc.ApiException if the remote call fails */ public final ListInstancePartitionsPagedResponse listInstancePartitions(String parent) { @@ -2475,10 +2471,10 @@ public final UnaryCallable getInstanceCallable() { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance and begins preparing it to begin serving. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance. The instance name is assigned by the caller. If the named instance already exists, - * `CreateInstance` returns `ALREADY_EXISTS`. + * Creates an instance and begins preparing it to begin serving. The returned long-running + * operation can be used to track the progress of preparing the new instance. The instance name is + * assigned by the caller. If the named instance already exists, `CreateInstance` returns + * `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -2498,12 +2494,11 @@ public final UnaryCallable getInstanceCallable() { * instance's allocated resource levels are readable via the API. * The instance's state * becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track - * creation of the instance. The [metadata][google.longrunning.Operation.metadata] field type is - * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track creation of + * the instance. The metadata field type is + * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Sample code: * @@ -2543,10 +2538,10 @@ public final OperationFuture createInstanceAsy // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance and begins preparing it to begin serving. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance. The instance name is assigned by the caller. If the named instance already exists, - * `CreateInstance` returns `ALREADY_EXISTS`. + * Creates an instance and begins preparing it to begin serving. The returned long-running + * operation can be used to track the progress of preparing the new instance. The instance name is + * assigned by the caller. If the named instance already exists, `CreateInstance` returns + * `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -2566,12 +2561,11 @@ public final OperationFuture createInstanceAsy * instance's allocated resource levels are readable via the API. * The instance's state * becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track - * creation of the instance. The [metadata][google.longrunning.Operation.metadata] field type is - * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track creation of + * the instance. The metadata field type is + * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Sample code: * @@ -2611,10 +2605,10 @@ public final OperationFuture createInstanceAsy // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance and begins preparing it to begin serving. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance. The instance name is assigned by the caller. If the named instance already exists, - * `CreateInstance` returns `ALREADY_EXISTS`. + * Creates an instance and begins preparing it to begin serving. The returned long-running + * operation can be used to track the progress of preparing the new instance. The instance name is + * assigned by the caller. If the named instance already exists, `CreateInstance` returns + * `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -2634,12 +2628,11 @@ public final OperationFuture createInstanceAsy * instance's allocated resource levels are readable via the API. * The instance's state * becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track - * creation of the instance. The [metadata][google.longrunning.Operation.metadata] field type is - * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track creation of + * the instance. The metadata field type is + * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Sample code: * @@ -2670,10 +2663,10 @@ public final OperationFuture createInstanceAsy // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance and begins preparing it to begin serving. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance. The instance name is assigned by the caller. If the named instance already exists, - * `CreateInstance` returns `ALREADY_EXISTS`. + * Creates an instance and begins preparing it to begin serving. The returned long-running + * operation can be used to track the progress of preparing the new instance. The instance name is + * assigned by the caller. If the named instance already exists, `CreateInstance` returns + * `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -2693,12 +2686,11 @@ public final OperationFuture createInstanceAsy * instance's allocated resource levels are readable via the API. * The instance's state * becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track - * creation of the instance. The [metadata][google.longrunning.Operation.metadata] field type is - * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track creation of + * the instance. The metadata field type is + * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Sample code: * @@ -2729,10 +2721,10 @@ public final OperationFuture createInstanceAsy // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance and begins preparing it to begin serving. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance. The instance name is assigned by the caller. If the named instance already exists, - * `CreateInstance` returns `ALREADY_EXISTS`. + * Creates an instance and begins preparing it to begin serving. The returned long-running + * operation can be used to track the progress of preparing the new instance. The instance name is + * assigned by the caller. If the named instance already exists, `CreateInstance` returns + * `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -2752,12 +2744,11 @@ public final OperationFuture createInstanceAsy * instance's allocated resource levels are readable via the API. * The instance's state * becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track - * creation of the instance. The [metadata][google.longrunning.Operation.metadata] field type is - * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track creation of + * the instance. The metadata field type is + * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Sample code: * @@ -2788,8 +2779,8 @@ public final UnaryCallable createInstanceCalla // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance, and begins allocating or releasing resources as requested. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * updating the instance. If the named instance does not exist, returns `NOT_FOUND`. + * long-running operation can be used to track the progress of updating the instance. If the named + * instance does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -2811,12 +2802,11 @@ public final UnaryCallable createInstanceCalla * than the requested levels). * All newly-reserved resources are available for serving the * instance's tables. * The instance's new resource levels are readable via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track the - * instance modification. The [metadata][google.longrunning.Operation.metadata] field type is - * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track the instance + * modification. The metadata field type is + * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Authorization requires `spanner.instances.update` permission on the resource * [name][google.spanner.admin.instance.v1.Instance.name]. @@ -2857,8 +2847,8 @@ public final OperationFuture updateInstanceAsy // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance, and begins allocating or releasing resources as requested. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * updating the instance. If the named instance does not exist, returns `NOT_FOUND`. + * long-running operation can be used to track the progress of updating the instance. If the named + * instance does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -2880,12 +2870,11 @@ public final OperationFuture updateInstanceAsy * than the requested levels). * All newly-reserved resources are available for serving the * instance's tables. * The instance's new resource levels are readable via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track the - * instance modification. The [metadata][google.longrunning.Operation.metadata] field type is - * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track the instance + * modification. The metadata field type is + * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Authorization requires `spanner.instances.update` permission on the resource * [name][google.spanner.admin.instance.v1.Instance.name]. @@ -2919,8 +2908,8 @@ public final OperationFuture updateInstanceAsy // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance, and begins allocating or releasing resources as requested. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * updating the instance. If the named instance does not exist, returns `NOT_FOUND`. + * long-running operation can be used to track the progress of updating the instance. If the named + * instance does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -2942,12 +2931,11 @@ public final OperationFuture updateInstanceAsy * than the requested levels). * All newly-reserved resources are available for serving the * instance's tables. * The instance's new resource levels are readable via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track the - * instance modification. The [metadata][google.longrunning.Operation.metadata] field type is - * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track the instance + * modification. The metadata field type is + * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Authorization requires `spanner.instances.update` permission on the resource * [name][google.spanner.admin.instance.v1.Instance.name]. @@ -2981,8 +2969,8 @@ public final OperationFuture updateInstanceAsy // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance, and begins allocating or releasing resources as requested. The returned - * [long-running operation][google.longrunning.Operation] can be used to track the progress of - * updating the instance. If the named instance does not exist, returns `NOT_FOUND`. + * long-running operation can be used to track the progress of updating the instance. If the named + * instance does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -3004,12 +2992,11 @@ public final OperationFuture updateInstanceAsy * than the requested levels). * All newly-reserved resources are available for serving the * instance's tables. * The instance's new resource levels are readable via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_name>/operations/<operation_id>` and can be used to track the - * instance modification. The [metadata][google.longrunning.Operation.metadata] field type is - * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. + *

            The returned long-running operation will have a name of the format + * `<instance_name>/operations/<operation_id>` and can be used to track the instance + * modification. The metadata field type is + * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. * *

            Authorization requires `spanner.instances.update` permission on the resource * [name][google.spanner.admin.instance.v1.Instance.name]. @@ -3725,10 +3712,10 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance partition and begins preparing it to be used. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance partition. The instance partition name is assigned by the caller. If the named - * instance partition already exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. + * Creates an instance partition and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance partition. The + * instance partition name is assigned by the caller. If the named instance partition already + * exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -3748,12 +3735,11 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest * instance partition's allocated resource levels are readable via the API. * The instance * partition's state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track creation of the instance partition. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track + * creation of the instance partition. The metadata field type is * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Sample code: @@ -3799,10 +3785,10 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance partition and begins preparing it to be used. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance partition. The instance partition name is assigned by the caller. If the named - * instance partition already exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. + * Creates an instance partition and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance partition. The + * instance partition name is assigned by the caller. If the named instance partition already + * exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -3822,12 +3808,11 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest * instance partition's allocated resource levels are readable via the API. * The instance * partition's state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track creation of the instance partition. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track + * creation of the instance partition. The metadata field type is * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Sample code: @@ -3873,10 +3858,10 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance partition and begins preparing it to be used. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance partition. The instance partition name is assigned by the caller. If the named - * instance partition already exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. + * Creates an instance partition and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance partition. The + * instance partition name is assigned by the caller. If the named instance partition already + * exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -3896,12 +3881,11 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest * instance partition's allocated resource levels are readable via the API. * The instance * partition's state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track creation of the instance partition. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track + * creation of the instance partition. The metadata field type is * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Sample code: @@ -3933,10 +3917,10 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance partition and begins preparing it to be used. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance partition. The instance partition name is assigned by the caller. If the named - * instance partition already exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. + * Creates an instance partition and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance partition. The + * instance partition name is assigned by the caller. If the named instance partition already + * exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -3956,12 +3940,11 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest * instance partition's allocated resource levels are readable via the API. * The instance * partition's state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track creation of the instance partition. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track + * creation of the instance partition. The metadata field type is * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Sample code: @@ -3994,10 +3977,10 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Creates an instance partition and begins preparing it to be used. The returned [long-running - * operation][google.longrunning.Operation] can be used to track the progress of preparing the new - * instance partition. The instance partition name is assigned by the caller. If the named - * instance partition already exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. + * Creates an instance partition and begins preparing it to be used. The returned long-running + * operation can be used to track the progress of preparing the new instance partition. The + * instance partition name is assigned by the caller. If the named instance partition already + * exists, `CreateInstancePartition` returns `ALREADY_EXISTS`. * *

            Immediately upon completion of this request: * @@ -4017,12 +4000,11 @@ public final InstancePartition getInstancePartition(GetInstancePartitionRequest * instance partition's allocated resource levels are readable via the API. * The instance * partition's state becomes `READY`. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track creation of the instance partition. The [metadata][google.longrunning.Operation.metadata] - * field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track + * creation of the instance partition. The metadata field type is * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Sample code: @@ -4194,9 +4176,8 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance partition, and begins allocating or releasing resources as requested. The - * returned [long-running operation][google.longrunning.Operation] can be used to track the - * progress of updating the instance partition. If the named instance partition does not exist, - * returns `NOT_FOUND`. + * returned long-running operation can be used to track the progress of updating the instance + * partition. If the named instance partition does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -4219,12 +4200,11 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request * instance partition's tables. * The instance partition's new resource levels are readable * via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track the instance partition modification. The - * [metadata][google.longrunning.Operation.metadata] field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track the + * instance partition modification. The metadata field type is * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Authorization requires `spanner.instancePartitions.update` permission on the resource @@ -4270,9 +4250,8 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance partition, and begins allocating or releasing resources as requested. The - * returned [long-running operation][google.longrunning.Operation] can be used to track the - * progress of updating the instance partition. If the named instance partition does not exist, - * returns `NOT_FOUND`. + * returned long-running operation can be used to track the progress of updating the instance + * partition. If the named instance partition does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -4295,12 +4274,11 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request * instance partition's tables. * The instance partition's new resource levels are readable * via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track the instance partition modification. The - * [metadata][google.longrunning.Operation.metadata] field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track the + * instance partition modification. The metadata field type is * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Authorization requires `spanner.instancePartitions.update` permission on the resource @@ -4335,9 +4313,8 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance partition, and begins allocating or releasing resources as requested. The - * returned [long-running operation][google.longrunning.Operation] can be used to track the - * progress of updating the instance partition. If the named instance partition does not exist, - * returns `NOT_FOUND`. + * returned long-running operation can be used to track the progress of updating the instance + * partition. If the named instance partition does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -4360,12 +4337,11 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request * instance partition's tables. * The instance partition's new resource levels are readable * via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track the instance partition modification. The - * [metadata][google.longrunning.Operation.metadata] field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track the + * instance partition modification. The metadata field type is * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Authorization requires `spanner.instancePartitions.update` permission on the resource @@ -4401,9 +4377,8 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates an instance partition, and begins allocating or releasing resources as requested. The - * returned [long-running operation][google.longrunning.Operation] can be used to track the - * progress of updating the instance partition. If the named instance partition does not exist, - * returns `NOT_FOUND`. + * returned long-running operation can be used to track the progress of updating the instance + * partition. If the named instance partition does not exist, returns `NOT_FOUND`. * *

            Immediately upon completion of this request: * @@ -4426,12 +4401,11 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request * instance partition's tables. * The instance partition's new resource levels are readable * via the API. * - *

            The returned [long-running operation][google.longrunning.Operation] will have a name of the - * format `<instance_partition_name>/operations/<operation_id>` and can be used to - * track the instance partition modification. The - * [metadata][google.longrunning.Operation.metadata] field type is + *

            The returned long-running operation will have a name of the format + * `<instance_partition_name>/operations/<operation_id>` and can be used to track the + * instance partition modification. The metadata field type is * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata]. - * The [response][google.longrunning.Operation.response] field type is + * The response field type is * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if successful. * *

            Authorization requires `spanner.instancePartitions.update` permission on the resource @@ -4465,14 +4439,14 @@ public final void deleteInstancePartition(DeleteInstancePartitionRequest request // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists instance partition [long-running operations][google.longrunning.Operation] in the given - * instance. An instance partition operation has a name of the form + * Lists instance partition long-running operations in the given instance. An instance partition + * operation has a name of the form * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Authorization requires `spanner.instancePartitionOperations.list` permission on the resource * [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent]. @@ -4509,14 +4483,14 @@ public final ListInstancePartitionOperationsPagedResponse listInstancePartitionO // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists instance partition [long-running operations][google.longrunning.Operation] in the given - * instance. An instance partition operation has a name of the form + * Lists instance partition long-running operations in the given instance. An instance partition + * operation has a name of the form * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Authorization requires `spanner.instancePartitionOperations.list` permission on the resource * [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent]. @@ -4551,14 +4525,14 @@ public final ListInstancePartitionOperationsPagedResponse listInstancePartitionO // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists instance partition [long-running operations][google.longrunning.Operation] in the given - * instance. An instance partition operation has a name of the form + * Lists instance partition long-running operations in the given instance. An instance partition + * operation has a name of the form * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Authorization requires `spanner.instancePartitionOperations.list` permission on the resource * [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent]. @@ -4597,14 +4571,14 @@ public final ListInstancePartitionOperationsPagedResponse listInstancePartitionO // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists instance partition [long-running operations][google.longrunning.Operation] in the given - * instance. An instance partition operation has a name of the form + * Lists instance partition long-running operations in the given instance. An instance partition + * operation has a name of the form * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Authorization requires `spanner.instancePartitionOperations.list` permission on the resource * [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent]. @@ -4643,14 +4617,14 @@ public final ListInstancePartitionOperationsPagedResponse listInstancePartitionO // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Lists instance partition [long-running operations][google.longrunning.Operation] in the given - * instance. An instance partition operation has a name of the form + * Lists instance partition long-running operations in the given instance. An instance partition + * operation has a name of the form * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`. - * The long-running operation [metadata][google.longrunning.Operation.metadata] field type - * `metadata.type_url` describes the type of the metadata. Operations returned include those that - * have completed/failed/canceled within the last 7 days, and pending operations. Operations - * returned are ordered by `operation.metadata.value.start_time` in descending order starting from - * the most recently started operation. + * The long-running operation metadata field type `metadata.type_url` describes the type of the + * metadata. Operations returned include those that have completed/failed/canceled within the last + * 7 days, and pending operations. Operations returned are ordered by + * `operation.metadata.value.start_time` in descending order starting from the most recently + * started operation. * *

            Authorization requires `spanner.instancePartitionOperations.list` permission on the resource * [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent]. @@ -4696,8 +4670,8 @@ public final ListInstancePartitionOperationsPagedResponse listInstancePartitionO // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Moves an instance to the target instance configuration. You can use the returned [long-running - * operation][google.longrunning.Operation] to track the progress of moving the instance. + * Moves an instance to the target instance configuration. You can use the returned long-running + * operation to track the progress of moving the instance. * *

            `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of the following * criteria: @@ -4718,13 +4692,12 @@ public final ListInstancePartitionOperationsPagedResponse listInstancePartitionO * storage charges. * The instance might experience higher read-write latencies and a higher * transaction abort rate. However, moving an instance doesn't cause any downtime. * - *

            The returned [long-running operation][google.longrunning.Operation] has a name of the format + *

            The returned long-running operation has a name of the format * `<instance_name>/operations/<operation_id>` and can be used to track the move - * instance operation. The [metadata][google.longrunning.Operation.metadata] field type is - * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling the operation - * sets its metadata's + * instance operation. The metadata field type is + * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling + * the operation sets its metadata's * [cancel_time][google.spanner.admin.instance.v1.MoveInstanceMetadata.cancel_time]. Cancellation * is not immediate because it involves moving any data previously moved to the target instance * configuration back to the original instance configuration. You can use this operation to track @@ -4770,8 +4743,8 @@ public final OperationFuture moveIns // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Moves an instance to the target instance configuration. You can use the returned [long-running - * operation][google.longrunning.Operation] to track the progress of moving the instance. + * Moves an instance to the target instance configuration. You can use the returned long-running + * operation to track the progress of moving the instance. * *

            `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of the following * criteria: @@ -4792,13 +4765,12 @@ public final OperationFuture moveIns * storage charges. * The instance might experience higher read-write latencies and a higher * transaction abort rate. However, moving an instance doesn't cause any downtime. * - *

            The returned [long-running operation][google.longrunning.Operation] has a name of the format + *

            The returned long-running operation has a name of the format * `<instance_name>/operations/<operation_id>` and can be used to track the move - * instance operation. The [metadata][google.longrunning.Operation.metadata] field type is - * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling the operation - * sets its metadata's + * instance operation. The metadata field type is + * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling + * the operation sets its metadata's * [cancel_time][google.spanner.admin.instance.v1.MoveInstanceMetadata.cancel_time]. Cancellation * is not immediate because it involves moving any data previously moved to the target instance * configuration back to the original instance configuration. You can use this operation to track @@ -4844,8 +4816,8 @@ public final OperationFuture moveIns // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Moves an instance to the target instance configuration. You can use the returned [long-running - * operation][google.longrunning.Operation] to track the progress of moving the instance. + * Moves an instance to the target instance configuration. You can use the returned long-running + * operation to track the progress of moving the instance. * *

            `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of the following * criteria: @@ -4866,13 +4838,12 @@ public final OperationFuture moveIns * storage charges. * The instance might experience higher read-write latencies and a higher * transaction abort rate. However, moving an instance doesn't cause any downtime. * - *

            The returned [long-running operation][google.longrunning.Operation] has a name of the format + *

            The returned long-running operation has a name of the format * `<instance_name>/operations/<operation_id>` and can be used to track the move - * instance operation. The [metadata][google.longrunning.Operation.metadata] field type is - * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The - * [response][google.longrunning.Operation.response] field type is - * [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling the operation - * sets its metadata's + * instance operation. The metadata field type is + * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. The response + * field type is [Instance][google.spanner.admin.instance.v1.Instance], if successful. Cancelling + * the operation sets its metadata's * [cancel_time][google.spanner.admin.instance.v1.MoveInstanceMetadata.cancel_time]. Cancellation * is not immediate because it involves moving any data previously moved to the target instance * configuration back to the original instance configuration. You can use this operation to track diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminSettings.java index 131faf6448d..3b4af74269f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -127,8 +127,8 @@ * }

            * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) 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 diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java index c06571fbc23..207d8ecb31a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ */ /** - * A client to Cloud Spanner Instance Admin API + * A client to Cloud Spanner API * *

            The interfaces provided are listed below, along with usage samples. * diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminCallableFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminCallableFactory.java index b450de88a51..983c0fda6e0 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminCallableFactory.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminStub.java index 92ca5c4bf39..b5c1515a263 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/GrpcInstanceAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -96,6 +96,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { ProtoUtils.marshaller(ListInstanceConfigsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListInstanceConfigsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -106,6 +107,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(GetInstanceConfigRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(InstanceConfig.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -117,6 +119,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(CreateInstanceConfigRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -128,6 +131,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(UpdateInstanceConfigRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -139,6 +143,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(DeleteInstanceConfigRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor< @@ -154,6 +159,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { ProtoUtils.marshaller(ListInstanceConfigOperationsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListInstanceConfigOperationsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -165,6 +171,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { ProtoUtils.marshaller(ListInstancesRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListInstancesResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor< @@ -179,6 +186,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { ProtoUtils.marshaller(ListInstancePartitionsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListInstancePartitionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor getInstanceMethodDescriptor = @@ -187,6 +195,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setFullMethodName("google.spanner.admin.instance.v1.InstanceAdmin/GetInstance") .setRequestMarshaller(ProtoUtils.marshaller(GetInstanceRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Instance.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -197,6 +206,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(CreateInstanceRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -207,6 +217,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(UpdateInstanceRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -217,6 +228,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(DeleteInstanceRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor setIamPolicyMethodDescriptor = @@ -225,6 +237,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setFullMethodName("google.spanner.admin.instance.v1.InstanceAdmin/SetIamPolicy") .setRequestMarshaller(ProtoUtils.marshaller(SetIamPolicyRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor getIamPolicyMethodDescriptor = @@ -233,6 +246,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setFullMethodName("google.spanner.admin.instance.v1.InstanceAdmin/GetIamPolicy") .setRequestMarshaller(ProtoUtils.marshaller(GetIamPolicyRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -245,6 +259,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { ProtoUtils.marshaller(TestIamPermissionsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(TestIamPermissionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -256,6 +271,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(GetInstancePartitionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(InstancePartition.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -267,6 +283,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(CreateInstancePartitionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -278,6 +295,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(DeleteInstancePartitionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -289,6 +307,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setRequestMarshaller( ProtoUtils.marshaller(UpdateInstancePartitionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor< @@ -306,6 +325,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setResponseMarshaller( ProtoUtils.marshaller( ListInstancePartitionOperationsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -315,6 +335,7 @@ public class GrpcInstanceAdminStub extends InstanceAdminStub { .setFullMethodName("google.spanner.admin.instance.v1.InstanceAdmin/MoveInstance") .setRequestMarshaller(ProtoUtils.marshaller(MoveInstanceRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private final UnaryCallable diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminCallableFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminCallableFactory.java index 7aec0755e63..cad7d83e97e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminCallableFactory.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java index 82aaf253b98..1ccabcd68ae 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1053,6 +1053,26 @@ protected HttpJsonInstanceAdminStub( HttpRule.newBuilder() .setPost("/v1/{name=projects/*/instances/*/operations/*}:cancel") .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instances/*/backups/*/operations/*}:cancel") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instances/*/instancePartitions/*/operations/*}:cancel") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instanceConfigs/*/operations/*}:cancel") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instanceConfigs/*/ssdCaches/*/operations/*}:cancel") + .build()) .build()) .put( "google.longrunning.Operations.DeleteOperation", @@ -1062,6 +1082,25 @@ protected HttpJsonInstanceAdminStub( HttpRule.newBuilder() .setDelete("/v1/{name=projects/*/instances/*/operations/*}") .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete( + "/v1/{name=projects/*/instances/*/backups/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete( + "/v1/{name=projects/*/instances/*/instancePartitions/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete("/v1/{name=projects/*/instanceConfigs/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete( + "/v1/{name=projects/*/instanceConfigs/*/ssdCaches/*/operations/*}") + .build()) .build()) .put( "google.longrunning.Operations.GetOperation", @@ -1071,6 +1110,24 @@ protected HttpJsonInstanceAdminStub( HttpRule.newBuilder() .setGet("/v1/{name=projects/*/instances/*/operations/*}") .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/backups/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet( + "/v1/{name=projects/*/instances/*/instancePartitions/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instanceConfigs/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet( + "/v1/{name=projects/*/instanceConfigs/*/ssdCaches/*/operations/*}") + .build()) .build()) .put( "google.longrunning.Operations.ListOperations", @@ -1080,6 +1137,24 @@ protected HttpJsonInstanceAdminStub( HttpRule.newBuilder() .setGet("/v1/{name=projects/*/instances/*/operations}") .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/backups/*/operations}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet( + "/v1/{name=projects/*/instances/*/instancePartitions/*/operations}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instanceConfigs/*/operations}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet( + "/v1/{name=projects/*/instanceConfigs/*/ssdCaches/*/operations}") + .build()) .build()) .build()); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStub.java index 7bd8269c537..2c8e3f1c4d9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java index 82b7f3666d7..d2fed30c092 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,6 +42,7 @@ import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.LibraryMetadata; import com.google.api.gax.rpc.OperationCallSettings; import com.google.api.gax.rpc.PageContext; import com.google.api.gax.rpc.PagedCallSettings; @@ -149,8 +150,8 @@ * }

            * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) 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 @@ -179,6 +180,7 @@ * }

            */ @Generated("by gapic-generator-java") +@SuppressWarnings("CanonicalDuration") public class InstanceAdminStubSettings extends StubSettings { /** The default scopes of the service. */ private static final ImmutableList DEFAULT_SERVICE_SCOPES = @@ -905,6 +907,14 @@ protected InstanceAdminStubSettings(Builder settingsBuilder) throws IOException moveInstanceOperationSettings = settingsBuilder.moveInstanceOperationSettings().build(); } + @Override + protected LibraryMetadata getLibraryMetadata() { + return LibraryMetadata.newBuilder() + .setArtifactName("com.google.cloud:google-cloud-spanner") + .setRepository("googleapis/java-spanner") + .build(); + } + /** Builder for InstanceAdminStubSettings. */ public static class Builder extends StubSettings.Builder { private final ImmutableList> unaryMethodSettingsBuilders; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java index f04026429f5..1d71e062cbb 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java @@ -39,17 +39,18 @@ import com.google.cloud.spanner.Struct; import com.google.cloud.spanner.Type.StructField; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; -import com.google.cloud.spanner.connection.ReadWriteTransaction.Builder; import com.google.cloud.spanner.connection.StatementExecutor.StatementTimeout; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.MoreExecutors; import io.grpc.Context; +import io.grpc.Deadline; import io.grpc.MethodDescriptor; import io.grpc.Status; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Scope; +import java.time.Duration; import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -79,6 +80,7 @@ abstract class AbstractBaseUnitOfWork implements UnitOfWork { protected final List transactionRetryListeners; protected final boolean excludeTxnFromChangeStreams; protected final RpcPriority rpcPriority; + protected final com.google.spanner.v1.RequestOptions.ClientContext clientContext; protected final Span span; /** Class for keeping track of the stacktrace of the caller of an async statement. */ @@ -116,6 +118,7 @@ abstract static class Builder, T extends AbstractBaseUni private boolean excludeTxnFromChangeStreams; private RpcPriority rpcPriority; + private com.google.spanner.v1.RequestOptions.ClientContext clientContext; private Span span; Builder() {} @@ -162,6 +165,11 @@ B setRpcPriority(@Nullable RpcPriority rpcPriority) { return self(); } + B setClientContext(@Nullable com.google.spanner.v1.RequestOptions.ClientContext clientContext) { + this.clientContext = clientContext; + return self(); + } + B setSpan(@Nullable Span span) { this.span = span; return self(); @@ -178,6 +186,7 @@ B setSpan(@Nullable Span span) { this.transactionRetryListeners = builder.transactionRetryListeners; this.excludeTxnFromChangeStreams = builder.excludeTxnFromChangeStreams; this.rpcPriority = builder.rpcPriority; + this.clientContext = builder.clientContext; this.span = Preconditions.checkNotNull(builder.span); } @@ -317,7 +326,7 @@ ResponseT getWithStatementTimeout( } catch (TimeoutException e) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.DEADLINE_EXCEEDED, - "Statement execution timeout occurred for " + statement.getSqlWithoutComments(), + "Statement execution timeout occurred for " + statement.getSql(), e); } catch (ExecutionException e) { Throwable cause = e.getCause(); @@ -331,7 +340,7 @@ ResponseT getWithStatementTimeout( } throw SpannerExceptionFactory.newSpannerException( ErrorCode.fromGrpcStatus(Status.fromThrowable(e)), - "Statement execution failed for " + statement.getSqlWithoutComments(), + "Statement execution failed for " + statement.getSql(), e); } catch (InterruptedException e) { throw SpannerExceptionFactory.newSpannerException( @@ -357,7 +366,14 @@ ApiFuture executeStatementAsync( statement, StatementExecutionStep.EXECUTE_STATEMENT, this); } Context context = Context.current(); - if (statementTimeout.hasTimeout() && !applyStatementTimeoutToMethods.isEmpty()) { + Deadline transactionDeadline = getTransactionDeadline(); + Deadline statementDeadline = + statementTimeout.hasTimeout() + ? Deadline.after( + statementTimeout.getTimeoutValue(TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS) + : null; + Deadline effectiveDeadline = min(transactionDeadline, statementDeadline); + if (effectiveDeadline != null && !applyStatementTimeoutToMethods.isEmpty()) { context = context.withValue( SpannerOptions.CALL_CONTEXT_CONFIGURATOR_KEY, @@ -365,10 +381,15 @@ ApiFuture executeStatementAsync( @Override public ApiCallContext configure( ApiCallContext context, ReqT request, MethodDescriptor method) { - if (statementTimeout.hasTimeout() - && applyStatementTimeoutToMethods.contains(method)) { + if (applyStatementTimeoutToMethods.contains(method)) { + // Calculate the remaining timeout. This method could be called multiple times + // if the transaction is retried. + long remainingTimeout = effectiveDeadline.timeRemaining(TimeUnit.NANOSECONDS); + if (remainingTimeout <= 0) { + remainingTimeout = 1; + } return GrpcCallContext.createDefault() - .withTimeoutDuration(statementTimeout.asDuration()); + .withTimeoutDuration(Duration.ofNanos(remainingTimeout)); } return null; } @@ -417,4 +438,23 @@ public void run() { return future; } } + + @Nullable + static Deadline min(@Nullable Deadline a, @Nullable Deadline b) { + if (a == null && b == null) { + return null; + } + if (a == null) { + return b; + } + if (b == null) { + return a; + } + return a.minimum(b); + } + + @Nullable + Deadline getTransactionDeadline() { + return null; + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java index b45d444b744..fea032e2f52 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java @@ -27,10 +27,13 @@ import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.connection.AbstractBaseUnitOfWork.InterceptorsUsage; +import com.google.cloud.spanner.connection.SimpleParser.Result; import com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType; import com.google.cloud.spanner.connection.UnitOfWork.CallType; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.base.Splitter; +import com.google.common.base.Suppliers; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheStats; @@ -38,13 +41,16 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; +import java.nio.CharBuffer; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.Callable; +import java.util.function.Supplier; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Nullable; @@ -100,6 +106,14 @@ public static AbstractStatementParser getInstance(Dialect dialect) { } } + static final Set ddlStatements = + ImmutableSet.of("CREATE", "DROP", "ALTER", "ANALYZE", "GRANT", "REVOKE", "RENAME"); + static final Set selectStatements = + ImmutableSet.of("SELECT", "WITH", "SHOW", "FROM", "GRAPH", "CALL"); + static final Set SELECT_STATEMENTS_ALLOWING_PRECEDING_BRACKETS = + ImmutableSet.of("SELECT", "FROM"); + static final Set dmlStatements = ImmutableSet.of("INSERT", "UPDATE", "DELETE"); + /* * The following fixed pre-parsed statements are used internally by the Connection API. These do * not need to be parsed using a specific dialect, as they are equal for all dialects, and @@ -171,24 +185,24 @@ public static class ParsedStatement { private final StatementType type; private final ClientSideStatementImpl clientSideStatement; private final Statement statement; - private final String sqlWithoutComments; - private final boolean returningClause; + private final Supplier sqlWithoutComments; + private final Supplier returningClause; private final ReadQueryUpdateTransactionOption[] optionsFromHints; private static ParsedStatement clientSideStatement( ClientSideStatementImpl clientSideStatement, Statement statement, - String sqlWithoutComments) { + Supplier sqlWithoutComments) { return new ParsedStatement(clientSideStatement, statement, sqlWithoutComments); } - private static ParsedStatement ddl(Statement statement, String sqlWithoutComments) { + private static ParsedStatement ddl(Statement statement, Supplier sqlWithoutComments) { return new ParsedStatement(StatementType.DDL, statement, sqlWithoutComments); } private static ParsedStatement query( Statement statement, - String sqlWithoutComments, + Supplier sqlWithoutComments, QueryOptions defaultQueryOptions, ReadQueryUpdateTransactionOption[] optionsFromHints) { return new ParsedStatement( @@ -197,57 +211,66 @@ private static ParsedStatement query( statement, sqlWithoutComments, defaultQueryOptions, - false, + Suppliers.ofInstance(false), optionsFromHints); } private static ParsedStatement update( Statement statement, - String sqlWithoutComments, - boolean returningClause, + Supplier sqlWithoutComments, + Supplier returningClause, ReadQueryUpdateTransactionOption[] optionsFromHints) { return new ParsedStatement( StatementType.UPDATE, statement, sqlWithoutComments, returningClause, optionsFromHints); } - private static ParsedStatement unknown(Statement statement, String sqlWithoutComments) { + private static ParsedStatement unknown( + Statement statement, Supplier sqlWithoutComments) { return new ParsedStatement(StatementType.UNKNOWN, statement, sqlWithoutComments); } private ParsedStatement( ClientSideStatementImpl clientSideStatement, Statement statement, - String sqlWithoutComments) { + Supplier sqlWithoutComments) { Preconditions.checkNotNull(clientSideStatement); Preconditions.checkNotNull(statement); this.type = StatementType.CLIENT_SIDE; this.clientSideStatement = clientSideStatement; this.statement = statement; - this.sqlWithoutComments = Preconditions.checkNotNull(sqlWithoutComments); - this.returningClause = false; + this.sqlWithoutComments = sqlWithoutComments; + this.returningClause = Suppliers.ofInstance(false); this.optionsFromHints = EMPTY_OPTIONS; } private ParsedStatement( StatementType type, Statement statement, - String sqlWithoutComments, - boolean returningClause, + Supplier sqlWithoutComments, + Supplier returningClause, ReadQueryUpdateTransactionOption[] optionsFromHints) { this(type, null, statement, sqlWithoutComments, null, returningClause, optionsFromHints); } - private ParsedStatement(StatementType type, Statement statement, String sqlWithoutComments) { - this(type, null, statement, sqlWithoutComments, null, false, EMPTY_OPTIONS); + private ParsedStatement( + StatementType type, Statement statement, Supplier sqlWithoutComments) { + this( + type, + null, + statement, + sqlWithoutComments, + null, + Suppliers.ofInstance(false), + EMPTY_OPTIONS); } private ParsedStatement( StatementType type, ClientSideStatementImpl clientSideStatement, Statement statement, - String sqlWithoutComments, + Supplier sqlWithoutComments, QueryOptions defaultQueryOptions, - boolean returningClause, + Supplier returningClause, ReadQueryUpdateTransactionOption[] optionsFromHints) { Preconditions.checkNotNull(type); this.type = type; @@ -298,16 +321,20 @@ public boolean equals(Object other) { && Objects.equals(this.sqlWithoutComments, o.sqlWithoutComments); } - /** @return the type of statement that was recognized by the parser. */ + /** + * @return the type of statement that was recognized by the parser. + */ @InternalApi public StatementType getType() { return type; } - /** @return whether the statement has a returning clause or not. */ + /** + * @return whether the statement has a returning clause or not. + */ @InternalApi public boolean hasReturningClause() { - return this.returningClause; + return this.returningClause.get(); } @InternalApi @@ -353,7 +380,9 @@ public boolean isUpdate() { return false; } - /** @return true if the statement is a DDL statement. */ + /** + * @return true if the statement is a DDL statement. + */ @InternalApi public boolean isDdl() { switch (type) { @@ -395,17 +424,28 @@ Statement mergeQueryOptions(Statement statement, QueryOptions defaultQueryOption if (statement.getQueryOptions() == null) { return statement.toBuilder().withQueryOptions(defaultQueryOptions).build(); } - return statement - .toBuilder() + return statement.toBuilder() .withQueryOptions( defaultQueryOptions.toBuilder().mergeFrom(statement.getQueryOptions()).build()) .build(); } - /** @return the SQL statement with all comments removed from the SQL string. */ + /** + * @return the original SQL statement + */ + @InternalApi + public String getSql() { + return statement.getSql(); + } + + /** + * @return the SQL statement with all comments removed from the SQL string. + * @deprecated use {@link #getSql()} instead + */ + @Deprecated @InternalApi public String getSqlWithoutComments() { - return sqlWithoutComments; + return sqlWithoutComments.get(); } ClientSideStatement getClientSideStatement() { @@ -416,10 +456,6 @@ ClientSideStatement getClientSideStatement() { } } - static final Set ddlStatements = - ImmutableSet.of("CREATE", "DROP", "ALTER", "ANALYZE", "GRANT", "REVOKE", "RENAME"); - static final Set selectStatements = ImmutableSet.of("SELECT", "WITH", "SHOW"); - static final Set dmlStatements = ImmutableSet.of("INSERT", "UPDATE", "DELETE"); private final Set statements; /** The default maximum size of the statement cache in Mb. */ @@ -460,7 +496,7 @@ private static boolean isRecordStatementCacheStats() { // We do length*2 because Java uses 2 bytes for each char. .weigher( (Weigher) - (key, value) -> 2 * key.length() + 2 * value.sqlWithoutComments.length()) + (key, value) -> 2 * key.length() + 2 * value.statement.getSql().length()) .concurrencyLevel(Runtime.getRuntime().availableProcessors()); if (isRecordStatementCacheStats()) { cacheBuilder.recordStats(); @@ -507,9 +543,9 @@ ParsedStatement parse(Statement statement, QueryOptions defaultQueryOptions) { return parsedStatement.copy(statement, defaultQueryOptions); } - private ParsedStatement internalParse(Statement statement, QueryOptions defaultQueryOptions) { - StatementHintParser statementHintParser = - new StatementHintParser(getDialect(), statement.getSql()); + ParsedStatement internalParse(Statement statement, QueryOptions defaultQueryOptions) { + String sql = statement.getSql(); + StatementHintParser statementHintParser = new StatementHintParser(getDialect(), sql); ReadQueryUpdateTransactionOption[] optionsFromHints = EMPTY_OPTIONS; if (statementHintParser.hasStatementHints() && !statementHintParser.getClientSideStatementHints().isEmpty()) { @@ -517,18 +553,52 @@ private ParsedStatement internalParse(Statement statement, QueryOptions defaultQ statement.toBuilder().replace(statementHintParser.getSqlWithoutClientSideHints()).build(); optionsFromHints = convertHintsToOptions(statementHintParser.getClientSideStatementHints()); } - String sql = removeCommentsAndTrim(statement.getSql()); - ClientSideStatementImpl client = parseClientSideStatement(sql); + // Create a supplier that will actually remove all comments and hints from the SQL string to be + // backwards compatible with anything that really needs the SQL string without comments. + Supplier sqlWithoutCommentsSupplier = + Suppliers.memoize(() -> removeCommentsAndTrim(sql)); + + // Get rid of any spaces/comments at the start of the string. + SimpleParser simpleParser = new SimpleParser(getDialect(), sql); + simpleParser.skipWhitespaces(); + // Create a wrapper around the SQL string from the point after the first whitespace. + CharBuffer charBuffer = CharBuffer.wrap(sql, simpleParser.getPos(), sql.length()); + ClientSideStatementImpl client = parseClientSideStatement(charBuffer); + if (client != null) { - return ParsedStatement.clientSideStatement(client, statement, sql); - } else if (isQuery(sql)) { - return ParsedStatement.query(statement, sql, defaultQueryOptions, optionsFromHints); - } else if (isUpdateStatement(sql)) { - return ParsedStatement.update(statement, sql, checkReturningClause(sql), optionsFromHints); - } else if (isDdlStatement(sql)) { - return ParsedStatement.ddl(statement, sql); + return ParsedStatement.clientSideStatement(client, statement, sqlWithoutCommentsSupplier); + } else { + // Find the first keyword in the SQL statement. + Result keywordResult = simpleParser.eatNextKeyword(); + if (keywordResult.isValid()) { + // Determine the statement type based on the first keyword. + String keyword = keywordResult.getValue().toUpperCase(); + if (keywordResult.isInParenthesis()) { + // If the first keyword is inside one or more parentheses, then only a subset of all + // keywords are allowed. + if (SELECT_STATEMENTS_ALLOWING_PRECEDING_BRACKETS.contains(keyword)) { + return ParsedStatement.query( + statement, sqlWithoutCommentsSupplier, defaultQueryOptions, optionsFromHints); + } + } else { + if (selectStatements.contains(keyword)) { + return ParsedStatement.query( + statement, sqlWithoutCommentsSupplier, defaultQueryOptions, optionsFromHints); + } else if (dmlStatements.contains(keyword)) { + return ParsedStatement.update( + statement, + sqlWithoutCommentsSupplier, + // TODO: Make the returning clause check work without removing comments + Suppliers.memoize(() -> checkReturningClause(sqlWithoutCommentsSupplier.get())), + optionsFromHints); + } else if (ddlStatements.contains(keyword)) { + return ParsedStatement.ddl(statement, sqlWithoutCommentsSupplier); + } + } + } } - return ParsedStatement.unknown(statement, sql); + // Fallthrough: Return an unknown statement. + return ParsedStatement.unknown(statement, sqlWithoutCommentsSupplier); } /** @@ -542,7 +612,7 @@ private ParsedStatement internalParse(Statement statement, QueryOptions defaultQ * statement. */ @VisibleForTesting - ClientSideStatementImpl parseClientSideStatement(String sql) { + ClientSideStatementImpl parseClientSideStatement(CharSequence sql) { for (ClientSideStatementImpl css : statements) { if (css.matches(sql)) { return css; @@ -559,8 +629,10 @@ ClientSideStatementImpl parseClientSideStatement(String sql) { * @param sql The statement to check (without any comments). * @return true if the statement is a DDL statement (i.e. starts with 'CREATE', * 'ALTER' or 'DROP'). + * @deprecated Use {@link #parse(Statement)} instead */ @InternalApi + @Deprecated public boolean isDdlStatement(String sql) { return statementStartsWith(sql, ddlStatements); } @@ -572,8 +644,10 @@ public boolean isDdlStatement(String sql) { * * @param sql The statement to check (without any comments). * @return true if the statement is a SELECT statement (i.e. starts with 'SELECT'). + * @deprecated Use {@link #parse(Statement)} instead */ @InternalApi + @Deprecated public boolean isQuery(String sql) { // Skip any query hints at the beginning of the query. // We only do this if we actually know that it starts with a hint to prevent unnecessary @@ -581,6 +655,10 @@ public boolean isQuery(String sql) { if (sql.startsWith("@")) { sql = removeStatementHint(sql); } + if (sql.startsWith("(")) { + sql = removeOpeningBrackets(sql); + return statementStartsWith(sql, SELECT_STATEMENTS_ALLOWING_PRECEDING_BRACKETS); + } return statementStartsWith(sql, selectStatements); } @@ -592,8 +670,10 @@ public boolean isQuery(String sql) { * @param sql The statement to check (without any comments). * @return true if the statement is a DML update statement (i.e. starts with * 'INSERT', 'UPDATE' or 'DELETE'). + * @deprecated Use {@link #parse(Statement)} instead */ @InternalApi + @Deprecated public boolean isUpdateStatement(String sql) { // Skip any query hints at the beginning of the query. if (sql.startsWith("@")) { @@ -602,20 +682,16 @@ public boolean isUpdateStatement(String sql) { return statementStartsWith(sql, dmlStatements); } - protected abstract boolean supportsExplain(); - private boolean statementStartsWith(String sql, Iterable checkStatements) { Preconditions.checkNotNull(sql); - String[] tokens = sql.split("\\s+", 2); - int checkIndex = 0; - if (supportsExplain() && tokens[0].equalsIgnoreCase("EXPLAIN")) { - checkIndex = 1; - } - if (tokens.length > checkIndex) { - for (String check : checkStatements) { - if (tokens[checkIndex].equalsIgnoreCase(check)) { - return true; - } + Iterator tokens = Splitter.onPattern("\\s+").split(sql).iterator(); + if (!tokens.hasNext()) { + return false; + } + String token = tokens.next(); + for (String check : checkStatements) { + if (token.equalsIgnoreCase(check)) { + return true; } } return false; @@ -658,6 +734,18 @@ public String removeCommentsAndTrim(String sql) { /** Removes any statement hints at the beginning of the statement. */ abstract String removeStatementHint(String sql); + private String removeOpeningBrackets(String sql) { + int index = 0; + while (index < sql.length()) { + if (sql.charAt(index) == '(' || Character.isWhitespace(sql.charAt(index))) { + index++; + } else { + return sql.substring(index); + } + } + return sql; + } + @VisibleForTesting static final ReadQueryUpdateTransactionOption[] EMPTY_OPTIONS = new ReadQueryUpdateTransactionOption[0]; @@ -842,9 +930,9 @@ int skip(String sql, int currentIndex, @Nullable StringBuilder result) { } else if (currentChar == HYPHEN && sql.length() > (currentIndex + 1) && sql.charAt(currentIndex + 1) == HYPHEN) { - return skipSingleLineComment(sql, /* prefixLength = */ 2, currentIndex, result); + return skipSingleLineComment(sql, /* prefixLength= */ 2, currentIndex, result); } else if (currentChar == DASH && supportsHashSingleLineComments()) { - return skipSingleLineComment(sql, /* prefixLength = */ 1, currentIndex, result); + return skipSingleLineComment(sql, /* prefixLength= */ 1, currentIndex, result); } else if (currentChar == SLASH && sql.length() > (currentIndex + 1) && sql.charAt(currentIndex + 1) == ASTERISK) { @@ -909,7 +997,8 @@ int skipQuoted( appendIfNotNull(result, startQuote); appendIfNotNull(result, startQuote); } - while (currentIndex < sql.length()) { + int length = sql.length(); + while (currentIndex < length) { char currentChar = sql.charAt(currentIndex); if (currentChar == startQuote) { if (supportsDollarQuotedStrings() && currentChar == DOLLAR) { @@ -920,7 +1009,7 @@ int skipQuoted( return currentIndex + tag.length() + 2; } } else if (supportsEscapeQuoteWithQuote() - && sql.length() > currentIndex + 1 + && length > currentIndex + 1 && sql.charAt(currentIndex + 1) == startQuote) { // This is an escaped quote (e.g. 'foo''bar') appendIfNotNull(result, currentChar); @@ -929,7 +1018,7 @@ int skipQuoted( continue; } else if (isTripleQuoted) { // Check if this is the end of the triple-quoted string. - if (sql.length() > currentIndex + 2 + if (length > currentIndex + 2 && sql.charAt(currentIndex + 1) == startQuote && sql.charAt(currentIndex + 2) == startQuote) { appendIfNotNull(result, currentChar); @@ -943,9 +1032,10 @@ int skipQuoted( } } else if (supportsBackslashEscape() && currentChar == BACKSLASH - && sql.length() > currentIndex + 1 - && sql.charAt(currentIndex + 1) == startQuote) { - // This is an escaped quote (e.g. 'foo\'bar'). + && length > currentIndex + 1 + && (sql.charAt(currentIndex + 1) == startQuote + || sql.charAt(currentIndex + 1) == BACKSLASH)) { + // This is an escaped quote (e.g. 'foo\'bar') or an escaped backslash (e.g. 'test\\'). // Note that in raw strings, the \ officially does not start an escape sequence, but the // result is still the same, as in a raw string 'both characters are preserved'. appendIfNotNull(result, currentChar); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java index c642d7e505a..c2af543cc9b 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java @@ -255,8 +255,8 @@ private void calculateNextChecksum(ProtobufResultSet resultSet) { ErrorCode.FAILED_PRECONDITION, "Failed to get the underlying protobuf value for the column " + resultSet.getMetadata().getRowType().getFields(col).getName() - + ". " - + "Executing queries with DecodeMode#DIRECT is not supported in read/write transactions."); + + ". Executing queries with DecodeMode#DIRECT is not supported in read/write" + + " transactions."); } } firstRow = false; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatement.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatement.java index 521ba546073..f507e645832 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatement.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatement.java @@ -46,10 +46,14 @@ interface ClientSideStatement { */ boolean isQuery(); - /** @return true if this {@link ClientSideStatement} will return an update count. */ + /** + * @return true if this {@link ClientSideStatement} will return an update count. + */ boolean isUpdate(); - /** @return the statement type */ + /** + * @return the statement type + */ ClientSideStatementType getStatementType(); /** diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementBeginExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementBeginExecutor.java new file mode 100644 index 00000000000..7f854c0ccab --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementBeginExecutor.java @@ -0,0 +1,71 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; +import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException; +import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.IsolationLevelConverter; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import java.lang.reflect.Method; +import java.util.regex.Matcher; + +/** Executor for BEGIN TRANSACTION [ISOLATION LEVEL SERIALIZABLE|REPEATABLE READ] statements. */ +class ClientSideStatementBeginExecutor implements ClientSideStatementExecutor { + private final ClientSideStatementImpl statement; + private final Method method; + private final IsolationLevelConverter converter; + + ClientSideStatementBeginExecutor(ClientSideStatementImpl statement) throws CompileException { + try { + this.statement = statement; + this.converter = new IsolationLevelConverter(); + this.method = + ConnectionStatementExecutor.class.getDeclaredMethod( + statement.getMethodName(), converter.getParameterClass()); + } catch (Exception e) { + throw new CompileException(e, statement); + } + } + + @Override + public StatementResult execute(ConnectionStatementExecutor connection, ParsedStatement statement) + throws Exception { + return (StatementResult) method.invoke(connection, getParameterValue(statement.getSql())); + } + + IsolationLevel getParameterValue(String sql) { + Matcher matcher = statement.getPattern().matcher(sql); + // Match the 'isolation level (serializable|repeatable read)' part. + // Group 1 is the isolation level. + if (matcher.find() && matcher.groupCount() >= 1) { + String value = matcher.group(1); + if (value != null) { + // Convert the text to an isolation level enum. + // This returns null if the string is not a valid isolation level value. + IsolationLevel res = converter.convert(value.trim()); + if (res != null) { + return res; + } + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, String.format("Unknown isolation level: %s", value)); + } + } + return null; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementExplainExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementExplainExecutor.java index 767d6917be6..43b84f48123 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementExplainExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementExplainExecutor.java @@ -50,8 +50,7 @@ class ClientSideStatementExplainExecutor implements ClientSideStatementExecutor @Override public StatementResult execute(ConnectionStatementExecutor connection, ParsedStatement statement) throws Exception { - return (StatementResult) - method.invoke(connection, getParameterValue(statement.getSqlWithoutComments())); + return (StatementResult) method.invoke(connection, getParameterValue(statement.getSql())); } String getParameterValue(String sql) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementImpl.java index f9ecba6652a..c136cfcf525 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementImpl.java @@ -40,10 +40,13 @@ class ClientSideStatementImpl implements ClientSideStatement { static class ClientSideSetStatementImpl { /** The property name that is to be set, e.g. AUTOCOMMIT. */ private String propertyName; + /** The separator between the property and the value (i.e. '=' or '\s+'). */ private String separator; + /** Regex specifying the range of allowed values for the property. */ private String allowedValues; + /** The class name of the {@link ClientSideStatementValueConverter} to use. */ private String converterName; @@ -193,7 +196,7 @@ public ClientSideStatementType getStatementType() { return statementType; } - boolean matches(String statement) { + boolean matches(CharSequence statement) { Preconditions.checkState(pattern != null, "This statement has not been compiled"); return pattern.matcher(statement).matches(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPartitionExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPartitionExecutor.java index 0307ff517bb..c96ee155341 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPartitionExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPartitionExecutor.java @@ -49,7 +49,7 @@ public StatementResult execute( } String getParameterValue(ParsedStatement parsedStatement) { - Matcher matcher = statement.getPattern().matcher(parsedStatement.getSqlWithoutComments()); + Matcher matcher = statement.getPattern().matcher(parsedStatement.getSql()); if (matcher.find() && matcher.groupCount() >= 2) { String space = matcher.group(1); String value = matcher.group(2); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPgBeginExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPgBeginExecutor.java index c1d00d81b55..fae41de18c1 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPgBeginExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementPgBeginExecutor.java @@ -45,8 +45,7 @@ class ClientSideStatementPgBeginExecutor implements ClientSideStatementExecutor @Override public StatementResult execute(ConnectionStatementExecutor connection, ParsedStatement statement) throws Exception { - return (StatementResult) - method.invoke(connection, getParameterValue(statement.getSqlWithoutComments())); + return (StatementResult) method.invoke(connection, getParameterValue(statement.getSql())); } PgTransactionMode getParameterValue(String sql) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionExecutor.java index 1534f04b3a4..7e3c30d9f70 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionExecutor.java @@ -65,7 +65,7 @@ String getParameterValue(ParsedStatement parsedStatement) { // 2. If the matcher matches and returns zero groups, we know that the statement is valid, but // that it does not contain a partition-id in the SQL statement. The partition-id must then // be included in the statement as a query parameter. - Matcher matcher = statement.getPattern().matcher(parsedStatement.getSqlWithoutComments()); + Matcher matcher = statement.getPattern().matcher(parsedStatement.getSql()); if (matcher.find() && matcher.groupCount() >= 1) { String value = matcher.group(1); if (!Strings.isNullOrEmpty(value)) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionedQueryExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionedQueryExecutor.java index ba42db1f9d3..c95f2203fc8 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionedQueryExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementRunPartitionedQueryExecutor.java @@ -50,7 +50,7 @@ public StatementResult execute( } String getParameterValue(ParsedStatement parsedStatement) { - Matcher matcher = statement.getPattern().matcher(parsedStatement.getSqlWithoutComments()); + Matcher matcher = statement.getPattern().matcher(parsedStatement.getSql()); if (matcher.find() && matcher.groupCount() >= 2) { // Include the spacing group in case the query is enclosed in parentheses like this: // `run partitioned query(select * from foo)` diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementSetExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementSetExecutor.java index 38c7c364106..5bb0a4c8d3b 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementSetExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementSetExecutor.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.connection; import com.google.cloud.Tuple; +import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; @@ -27,6 +28,7 @@ import com.google.common.util.concurrent.UncheckedExecutionException; import java.lang.reflect.Constructor; import java.lang.reflect.Method; +import java.nio.CharBuffer; import java.util.concurrent.ExecutionException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -104,8 +106,8 @@ public StatementResult execute(ConnectionStatementExecutor connection, ParsedSta try { value = this.cache.get( - statement.getSqlWithoutComments(), - () -> getParameterValue(statement.getSqlWithoutComments())); + statement.getSql(), + () -> getParameterValue(connection.getDialect(), statement.getSql())); } catch (ExecutionException | UncheckedExecutionException executionException) { throw SpannerExceptionFactory.asSpannerException(executionException.getCause()); } @@ -115,8 +117,13 @@ public StatementResult execute(ConnectionStatementExecutor connection, ParsedSta return (StatementResult) method.invoke(connection, value.x()); } - Tuple getParameterValue(String sql) { - Matcher matcher = allowedValuesPattern.matcher(sql); + Tuple getParameterValue(Dialect dialect, String sql) { + // Get rid of any spaces/comments at the start of the string. + SimpleParser simpleParser = new SimpleParser(dialect, sql); + simpleParser.skipWhitespaces(); + // Create a wrapper around the SQL string from the point after the first whitespace. + CharBuffer sqlAfterWhitespaces = CharBuffer.wrap(sql, simpleParser.getPos(), sql.length()); + Matcher matcher = allowedValuesPattern.matcher(sqlAfterWhitespaces); if (matcher.find() && matcher.groupCount() >= 2) { boolean local = matcher.group(1) != null && "local".equalsIgnoreCase(matcher.group(1).trim()); String value = matcher.group(2); @@ -130,7 +137,7 @@ Tuple getParameterValue(String sql) { "Unknown value for %s: %s", this.statement.getSetStatement().getPropertyName(), value)); } else { - Matcher invalidMatcher = this.statement.getPattern().matcher(sql); + Matcher invalidMatcher = this.statement.getPattern().matcher(sqlAfterWhitespaces); int valueGroup = this.supportsLocal ? 2 : 1; if (invalidMatcher.find() && invalidMatcher.groupCount() == valueGroup) { String invalidValue = invalidMatcher.group(valueGroup); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java index 09525d4fa29..3d796af4f00 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java @@ -20,6 +20,7 @@ import static com.google.cloud.spanner.connection.ReadOnlyStalenessUtil.toChronoUnit; import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.grpc.GrpcInterceptorProvider; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.Options.RpcPriority; @@ -33,6 +34,8 @@ import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.time.Duration; @@ -247,7 +250,8 @@ public Duration convert(String value) { } else { duration = Duration.ofMillis(Long.parseLong(value.trim())); } - if (duration.isZero()) { + // Converters should return null for invalid values. + if (duration.isNegative()) { return null; } return duration; @@ -271,9 +275,16 @@ public PgDurationConverter(String allowedValues) { /** Converter from string to possible values for read only staleness ({@link TimestampBound}). */ static class ReadOnlyStalenessConverter implements ClientSideStatementValueConverter { + // Some backslashes need to be specified as hexcode. + // See https://github.com/google/google-java-format/issues/1253 static final ReadOnlyStalenessConverter INSTANCE = new ReadOnlyStalenessConverter( - "'((STRONG)|(MIN_READ_TIMESTAMP)[\\t ]+((\\d{4})-(\\d{2})-(\\d{2})([Tt](\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{1,9})?)([Zz]|([+-])(\\d{2}):(\\d{2})))|(READ_TIMESTAMP)[\\t ]+((\\d{4})-(\\d{2})-(\\d{2})([Tt](\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{1,9})?)([Zz]|([+-])(\\d{2}):(\\d{2})))|(MAX_STALENESS)[\\t ]+((\\d{1,19})(s|ms|us|ns))|(EXACT_STALENESS)[\\t ]+((\\d{1,19})(s|ms|us|ns)))'"); + "'((STRONG)|(MIN_READ_TIMESTAMP)[\\t" + + " ]+((\\d{4})-(\\d{2})-(\\d{2})([Tt](\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{1,9})?)([Zz]|([+-])(\\d{2}):(\\d{2})))|(READ_TIMESTAMP)[\u005Ct" + + " ]+((\\d{4})-(\\d{2})-(\\d{2})([Tt](\\d{2}):(\\d{2}):( " + + " \\d{2})(\\.\\d{1,9})?)([Zz]|([+-])(\\d{2}):(\\d{2})))|(MAX_STALENESS)[\u005Ct" + + " ]+((\\d{1,19})(s|ms|us|ns))|(EXACT_STALENESS)[\\t" + + " ]+((\\d{1,19})(s|ms|us|ns)))'"); private final Pattern allowedValues; private final CaseInsensitiveEnumMap values = new CaseInsensitiveEnumMap<>(Mode.class); @@ -339,6 +350,7 @@ public TimestampBound convert(String value) { return null; } } + /** * Converter from string to possible values for {@link com.google.spanner.v1.DirectedReadOptions}. */ @@ -370,7 +382,8 @@ public DirectedReadOptions convert(String value) { String.format( "Failed to parse '%s' as a valid value for DIRECTED_READ.\n" + "The value should be a JSON string like this: '%s'.\n" - + "You can generate a valid JSON string from a DirectedReadOptions instance by calling %s.%s", + + "You can generate a valid JSON string from a DirectedReadOptions instance" + + " by calling %s.%s", value, "{\"includeReplicas\":{\"replicaSelections\":[{\"location\":\"eu-west1\",\"type\":\"READ_ONLY\"}]}}", DirectedReadOptionsUtil.class.getName(), @@ -382,6 +395,68 @@ public DirectedReadOptions convert(String value) { } } + /** + * Converter for converting strings to {@link + * com.google.spanner.v1.TransactionOptions.IsolationLevel} values. + */ + static class IsolationLevelConverter + implements ClientSideStatementValueConverter { + static final IsolationLevelConverter INSTANCE = new IsolationLevelConverter(); + + private final CaseInsensitiveEnumMap values = + new CaseInsensitiveEnumMap<>(TransactionOptions.IsolationLevel.class); + + IsolationLevelConverter() {} + + /** Constructor needed for reflection. */ + public IsolationLevelConverter(String allowedValues) {} + + @Override + public Class getParameterClass() { + return TransactionOptions.IsolationLevel.class; + } + + @Override + public TransactionOptions.IsolationLevel convert(String value) { + if (value != null) { + // This ensures that 'repeatable read' is translated to 'repeatable_read'. The text between + // 'repeatable' and 'read' can be any number of valid whitespace characters. + value = value.trim().replaceFirst("\\s+", "_"); + } + return values.get(value); + } + } + + /** + * Converter for converting strings to {@link + * com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode} values. + */ + static class ReadLockModeConverter implements ClientSideStatementValueConverter { + static final ReadLockModeConverter INSTANCE = new ReadLockModeConverter(); + + private final CaseInsensitiveEnumMap values = + new CaseInsensitiveEnumMap<>(ReadLockMode.class); + + ReadLockModeConverter() {} + + /** Constructor needed for reflection. */ + public ReadLockModeConverter(String allowedValues) {} + + @Override + public Class getParameterClass() { + return ReadLockMode.class; + } + + @Override + public ReadLockMode convert(String value) { + if (value != null && value.equalsIgnoreCase("unspecified")) { + // Allow 'unspecified' to be used in addition to 'read_lock_mode_unspecified'. + value = ReadLockMode.READ_LOCK_MODE_UNSPECIFIED.name(); + } + return values.get(value); + } + } + /** Converter for converting strings to {@link AutocommitDmlMode} values. */ static class AutocommitDmlModeConverter implements ClientSideStatementValueConverter { @@ -529,6 +604,11 @@ public PgTransactionMode convert(String value) { } else if (valueWithSingleSpaces.substring(currentIndex).startsWith("read write")) { currentIndex += "read write".length(); mode.setAccessMode(AccessMode.READ_WRITE_TRANSACTION); + } else if (valueWithSingleSpaces + .substring(currentIndex) + .startsWith("isolation level repeatable read")) { + currentIndex += "isolation level repeatable read".length(); + mode.setIsolationLevel(IsolationLevel.ISOLATION_LEVEL_REPEATABLE_READ); } else if (valueWithSingleSpaces .substring(currentIndex) .startsWith("isolation level serializable")) { @@ -748,6 +828,54 @@ public CredentialsProvider convert(String credentialsProviderName) { } } + static class GrpcInterceptorProviderConverter + implements ClientSideStatementValueConverter { + static final GrpcInterceptorProviderConverter INSTANCE = new GrpcInterceptorProviderConverter(); + + private GrpcInterceptorProviderConverter() {} + + @Override + public Class getParameterClass() { + return GrpcInterceptorProvider.class; + } + + @Override + public GrpcInterceptorProvider convert(String interceptorProviderName) { + if (!Strings.isNullOrEmpty(interceptorProviderName)) { + try { + Class clazz = + (Class) Class.forName(interceptorProviderName); + Constructor constructor = + clazz.getDeclaredConstructor(); + return constructor.newInstance(); + } catch (ClassNotFoundException classNotFoundException) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, + "Unknown or invalid GrpcInterceptorProvider class name: " + interceptorProviderName, + classNotFoundException); + } catch (NoSuchMethodException noSuchMethodException) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, + "GrpcInterceptorProvider " + + interceptorProviderName + + " does not have a public no-arg constructor.", + noSuchMethodException); + } catch (InvocationTargetException + | InstantiationException + | IllegalAccessException exception) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, + "Failed to create an instance of " + + interceptorProviderName + + ": " + + exception.getMessage(), + exception); + } + } + return null; + } + } + /** Converter for converting strings to {@link Dialect} values. */ static class DialectConverter implements ClientSideStatementValueConverter { static final DialectConverter INSTANCE = new DialectConverter(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java index 547d2466e3e..60d739a3c85 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java @@ -42,6 +42,8 @@ import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; import java.util.Iterator; import java.util.Set; @@ -169,7 +171,9 @@ public interface Connection extends AutoCloseable { */ ApiFuture closeAsync(); - /** @return true if this connection has been closed. */ + /** + * @return true if this connection has been closed. + */ boolean isClosed(); /** @@ -185,6 +189,10 @@ public interface Connection extends AutoCloseable { */ void reset(); + /** Returns the current value of the given connection property. */ + T getConnectionPropertyValue( + com.google.cloud.spanner.connection.ConnectionProperty property); + /** * Sets autocommit on/off for this {@link Connection}. Connections in autocommit mode will apply * any changes to the database directly without waiting for an explicit commit. DDL- and DML @@ -204,7 +212,9 @@ public interface Connection extends AutoCloseable { */ void setAutocommit(boolean autocommit); - /** @return true if this connection is in autocommit mode */ + /** + * @return true if this connection is in autocommit mode + */ boolean isAutocommit(); /** @@ -216,9 +226,29 @@ public interface Connection extends AutoCloseable { */ void setReadOnly(boolean readOnly); - /** @return true if this connection is in read-only mode */ + /** + * @return true if this connection is in read-only mode + */ boolean isReadOnly(); + /** Sets the default isolation level for read/write transactions for this connection. */ + void setDefaultIsolationLevel(IsolationLevel isolationLevel); + + /** Returns the default isolation level for read/write transactions for this connection. */ + IsolationLevel getDefaultIsolationLevel(); + + /** Sets the read lock mode for read/write transactions for this connection. */ + void setReadLockMode(ReadLockMode readLockMode); + + /** Returns the read lock mode for read/write transactions for this connection. */ + ReadLockMode getReadLockMode(); + + /** Sets the timeout for read/write transactions. */ + void setTransactionTimeout(Duration timeout); + + /** Returns the timeout for read/write transactions. */ + Duration getTransactionTimeout(); + /** * Sets the duration the connection should wait before automatically aborting the execution of a * statement. The default is no timeout. Statement timeouts are applied all types of statements, @@ -266,7 +296,9 @@ public interface Connection extends AutoCloseable { */ long getStatementTimeout(TimeUnit unit); - /** @return true if this {@link Connection} has a statement timeout value. */ + /** + * @return true if this {@link Connection} has a statement timeout value. + */ boolean hasStatementTimeout(); /** @@ -289,7 +321,8 @@ public interface Connection extends AutoCloseable { void cancel(); /** - * Begins a new transaction for this connection. + * Begins a new transaction for this connection. The transaction will use the default isolation + * level of this connection. * *
              *
            • Calling this method on a connection that has no transaction and that is @@ -306,9 +339,16 @@ public interface Connection extends AutoCloseable { */ void beginTransaction(); + /** + * Same as {@link #beginTransaction()}, but this transaction will use the given isolation level, + * instead of the default isolation level of this connection. + */ + void beginTransaction(IsolationLevel isolationLevel); + /** * Begins a new transaction for this connection. This method is guaranteed to be non-blocking. The - * returned {@link ApiFuture} will be done when the transaction has been initialized. + * returned {@link ApiFuture} will be done when the transaction has been initialized. The + * transaction will use the default isolation level of this connection. * *
                *
              • Calling this method on a connection that has no transaction and that is @@ -325,6 +365,12 @@ public interface Connection extends AutoCloseable { */ ApiFuture beginTransactionAsync(); + /** + * Same as {@link #beginTransactionAsync()}, but this transaction will use the given isolation + * level, instead of the default isolation level of this connection. + */ + ApiFuture beginTransactionAsync(IsolationLevel isolationLevel); + /** * Sets the transaction mode to use for current transaction. This method may only be called when * in a transaction, and before the transaction is actually started, i.e. before any statements @@ -370,7 +416,9 @@ default void setTransactionTag(String tag) { throw new UnsupportedOperationException(); } - /** @return The transaction tag of the current transaction. */ + /** + * @return The transaction tag of the current transaction. + */ default String getTransactionTag() { throw new UnsupportedOperationException(); } @@ -401,6 +449,25 @@ default String getStatementTag() { throw new UnsupportedOperationException(); } + /** + * Sets the client context to use for the statements that are executed. The client context + * persists until it is changed or cleared. + * + * @param clientContext The client context to use with the statements that will be executed on + * this connection. + */ + default void setClientContext(com.google.spanner.v1.RequestOptions.ClientContext clientContext) { + throw new UnsupportedOperationException(); + } + + /** + * @return The client context that will be used with the statements that are executed on this + * connection. + */ + default com.google.spanner.v1.RequestOptions.ClientContext getClientContext() { + throw new UnsupportedOperationException(); + } + /** * Sets whether the next transaction should be excluded from all change streams with the DDL * option `allow_txn_exclusion=true` @@ -604,7 +671,9 @@ default String getOptimizerStatisticsPackage() { */ void setReturnCommitStats(boolean returnCommitStats); - /** @return true if this connection requests commit statistics from Cloud Spanner */ + /** + * @return true if this connection requests commit statistics from Cloud Spanner + */ boolean isReturnCommitStats(); /** Sets the max_commit_delay that will be applied to commit requests from this connection. */ @@ -835,6 +904,21 @@ default boolean isKeepTransactionAlive() { */ ApiFuture rollbackAsync(); + /** Functional interface for the {@link #runTransaction(TransactionCallable)} method. */ + interface TransactionCallable { + /** This method is invoked with a fresh transaction on the connection. */ + T run(Connection transaction); + } + + /** + * Runs the given callable in a transaction. The transaction type is determined by the current + * state of the connection. That is; if the connection is in read/write mode, the transaction type + * will be a read/write transaction. If the connection is in read-only mode, it will be a + * read-only transaction. The transaction will automatically be retried if it is aborted by + * Spanner. + */ + T runTransaction(TransactionCallable callable); + /** Returns the current savepoint support for this connection. */ SavepointSupport getSavepointSupport(); @@ -847,6 +931,18 @@ default boolean isKeepTransactionAlive() { /** Sets how the connection should behave if a DDL statement is executed during a transaction. */ void setDdlInTransactionMode(DdlInTransactionMode ddlInTransactionMode); + /** + * Returns the default sequence kind that will be set for this database if a DDL statement is + * executed that uses auto_increment or serial. + */ + String getDefaultSequenceKind(); + + /** + * Sets the default sequence kind that will be set for this database if a DDL statement is + * executed that uses auto_increment or serial. + */ + void setDefaultSequenceKind(String defaultSequenceKind); + /** * Creates a savepoint with the given name. * @@ -1029,10 +1125,14 @@ default boolean isKeepTransactionAlive() { */ void abortBatch(); - /** @return true if a DDL batch is active on this connection. */ + /** + * @return true if a DDL batch is active on this connection. + */ boolean isDdlBatchActive(); - /** @return true if a DML batch is active on this connection. */ + /** + * @return true if a DML batch is active on this connection. + */ boolean isDmlBatchActive(); /** diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java index 9f4a43d5a2e..cadd6375739 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java @@ -25,8 +25,11 @@ import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_BATCH_DML_UPDATE_COUNT; import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION; import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_PARTITION_MODE; +import static com.google.cloud.spanner.connection.ConnectionProperties.BATCH_DML_UPDATE_COUNT; import static com.google.cloud.spanner.connection.ConnectionProperties.DATA_BOOST_ENABLED; import static com.google.cloud.spanner.connection.ConnectionProperties.DDL_IN_TRANSACTION_MODE; +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL; +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_SEQUENCE_KIND; import static com.google.cloud.spanner.connection.ConnectionProperties.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; import static com.google.cloud.spanner.connection.ConnectionProperties.DIRECTED_READ; import static com.google.cloud.spanner.connection.ConnectionProperties.KEEP_TRANSACTION_ALIVE; @@ -36,12 +39,15 @@ import static com.google.cloud.spanner.connection.ConnectionProperties.OPTIMIZER_STATISTICS_PACKAGE; import static com.google.cloud.spanner.connection.ConnectionProperties.OPTIMIZER_VERSION; import static com.google.cloud.spanner.connection.ConnectionProperties.READONLY; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; import static com.google.cloud.spanner.connection.ConnectionProperties.READ_ONLY_STALENESS; import static com.google.cloud.spanner.connection.ConnectionProperties.RETRY_ABORTS_INTERNALLY; import static com.google.cloud.spanner.connection.ConnectionProperties.RETURN_COMMIT_STATS; import static com.google.cloud.spanner.connection.ConnectionProperties.RPC_PRIORITY; import static com.google.cloud.spanner.connection.ConnectionProperties.SAVEPOINT_SUPPORT; +import static com.google.cloud.spanner.connection.ConnectionProperties.STATEMENT_TIMEOUT; import static com.google.cloud.spanner.connection.ConnectionProperties.TRACING_PREFIX; +import static com.google.cloud.spanner.connection.ConnectionProperties.TRANSACTION_TIMEOUT; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; @@ -88,7 +94,12 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; +import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; +import io.grpc.Deadline; +import io.grpc.Deadline.Ticker; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; @@ -170,6 +181,7 @@ private LeakedConnectionException() { private volatile LeakedConnectionException leakedException; private final SpannerPool spannerPool; private AbstractStatementParser statementParser; + /** * The {@link ConnectionStatementExecutor} is responsible for translating parsed {@link * ClientSideStatement}s into actual method calls on this {@link ConnectionImpl}. I.e. the {@link @@ -194,6 +206,11 @@ private LeakedConnectionException() { */ private final ConnectionOptions options; + enum Caller { + APPLICATION, + TRANSACTION_RUNNER, + } + /** The supported batch modes. */ enum BatchMode { NONE, @@ -243,6 +260,7 @@ static UnitOfWorkType of(TransactionMode transactionMode) { } } + private final Ticker ticker; private StatementExecutor.StatementTimeout statementTimeout = new StatementExecutor.StatementTimeout(); private boolean closed = false; @@ -256,17 +274,22 @@ static UnitOfWorkType of(TransactionMode transactionMode) { private final ConnectionState connectionState; private UnitOfWork currentUnitOfWork = null; + /** * This field is only used in autocommit mode to indicate that the user has explicitly started a * transaction. */ private boolean inTransaction = false; + /** * This field is used to indicate that a transaction begin has been indicated. This is done by * calling beginTransaction or by setting a transaction property while not in autocommit mode. */ private boolean transactionBeginMarked = false; + /** This field is set to true when a transaction runner is active for this connection. */ + private boolean transactionRunnerActive = false; + private BatchMode batchMode; private UnitOfWorkType unitOfWorkType; private final Stack transactionStack = new Stack<>(); @@ -274,8 +297,10 @@ static UnitOfWorkType of(TransactionMode transactionMode) { // The following properties are not 'normal' connection properties, but transient properties that // are automatically reset after executing a transaction or statement. + private IsolationLevel transactionIsolationLevel; private String transactionTag; private String statementTag; + private RequestOptions.ClientContext clientContext; private boolean excludeTxnFromChangeStreams; private byte[] protoDescriptors; private String protoDescriptorsFilePath; @@ -292,8 +317,9 @@ static UnitOfWorkType of(TransactionMode transactionMode) { statementExecutorType = options.isUseVirtualThreads() ? StatementExecutorType.VIRTUAL_THREAD - : StatementExecutorType.DIRECT_EXECUTOR; + : StatementExecutorType.PLATFORM_THREAD; } + this.ticker = options.getTicker(); this.statementExecutor = new StatementExecutor(statementExecutorType, options.getStatementExecutionInterceptors()); this.spannerPool = SpannerPool.INSTANCE; @@ -323,9 +349,9 @@ static UnitOfWorkType of(TransactionMode transactionMode) { && getDialect() == Dialect.POSTGRESQL ? Type.TRANSACTIONAL : Type.NON_TRANSACTIONAL)); - + setInitialStatementTimeout(options.getInitialConnectionPropertyValue(STATEMENT_TIMEOUT)); // (Re)set the state of the connection to the default. - setDefaultTransactionOptions(); + setDefaultTransactionOptions(getDefaultIsolationLevel()); } /** Constructor only for test purposes. */ @@ -342,8 +368,9 @@ && getDialect() == Dialect.POSTGRESQL new StatementExecutor( options.isUseVirtualThreads() ? StatementExecutorType.VIRTUAL_THREAD - : StatementExecutorType.DIRECT_EXECUTOR, + : StatementExecutorType.PLATFORM_THREAD, Collections.emptyList()); + this.ticker = options.getTicker(); this.spannerPool = Preconditions.checkNotNull(spannerPool); this.options = Preconditions.checkNotNull(options); this.spanner = spannerPool.getSpanner(options, this); @@ -356,10 +383,11 @@ && getDialect() == Dialect.POSTGRESQL new ConnectionState( options.getInitialConnectionPropertyValues(), Suppliers.ofInstance(Type.NON_TRANSACTIONAL)); + setInitialStatementTimeout(options.getInitialConnectionPropertyValue(STATEMENT_TIMEOUT)); setReadOnly(options.isReadOnly()); setAutocommit(options.isAutocommit()); setReturnCommitStats(options.isReturnCommitStats()); - setDefaultTransactionOptions(); + setDefaultTransactionOptions(getDefaultIsolationLevel()); } @Override @@ -367,9 +395,25 @@ public Spanner getSpanner() { return this.spanner; } + private void setInitialStatementTimeout(Duration duration) { + if (duration == null || duration.isZero()) { + return; + } + com.google.protobuf.Duration protoDuration = + com.google.protobuf.Duration.newBuilder() + .setSeconds(duration.getSeconds()) + .setNanos(duration.getNano()) + .build(); + TimeUnit unit = + ReadOnlyStalenessUtil.getAppropriateTimeUnit( + new ReadOnlyStalenessUtil.DurationGetter(protoDuration)); + setStatementTimeout(ReadOnlyStalenessUtil.durationToUnits(protoDuration, unit), unit); + } + private DdlClient createDdlClient() { return DdlClient.newBuilder() .setDatabaseAdminClient(spanner.getDatabaseAdminClient()) + .setDialectSupplier(this::getDialect) .setProjectId(options.getProjectId()) .setInstanceId(options.getInstanceId()) .setDatabaseName(options.getDatabaseName()) @@ -469,6 +513,9 @@ private void reset(Context context, boolean inTransaction) { this.connectionState.resetValue(RETRY_ABORTS_INTERNALLY, context, inTransaction); this.connectionState.resetValue(AUTOCOMMIT, context, inTransaction); this.connectionState.resetValue(READONLY, context, inTransaction); + this.connectionState.resetValue(DEFAULT_ISOLATION_LEVEL, context, inTransaction); + this.connectionState.resetValue(READ_LOCK_MODE, context, inTransaction); + this.connectionState.resetValue(TRANSACTION_TIMEOUT, context, inTransaction); this.connectionState.resetValue(READ_ONLY_STALENESS, context, inTransaction); this.connectionState.resetValue(OPTIMIZER_VERSION, context, inTransaction); this.connectionState.resetValue(OPTIMIZER_STATISTICS_PACKAGE, context, inTransaction); @@ -491,9 +538,10 @@ private void reset(Context context, boolean inTransaction) { this.connectionState.resetValue(SAVEPOINT_SUPPORT, context, inTransaction); this.protoDescriptors = null; this.protoDescriptorsFilePath = null; + this.clientContext = null; if (!isTransactionStarted()) { - setDefaultTransactionOptions(); + setDefaultTransactionOptions(getDefaultIsolationLevel()); } } @@ -502,7 +550,9 @@ UnitOfWorkType getUnitOfWorkType() { return unitOfWorkType; } - /** @return true if this connection is in a batch. */ + /** + * @return true if this connection is in a batch. + */ boolean isInBatch() { return batchMode != BatchMode.NONE; } @@ -527,13 +577,14 @@ public boolean isClosed() { return closed; } - private T getConnectionPropertyValue( + @Override + public T getConnectionPropertyValue( com.google.cloud.spanner.connection.ConnectionProperty property) { return this.connectionState.getValue(property).getValue(); } private void setConnectionPropertyValue(ConnectionProperty property, T value) { - setConnectionPropertyValue(property, value, /* local = */ false); + setConnectionPropertyValue(property, value, /* local= */ false); } private void setConnectionPropertyValue( @@ -583,7 +634,7 @@ public void setAutocommit(boolean autocommit) { // middle of a transaction. this.connectionState.commit(); } - clearLastTransactionAndSetDefaultTransactionOptions(); + clearLastTransactionAndSetDefaultTransactionOptions(getDefaultIsolationLevel()); // Reset the readOnlyStaleness value if it is no longer compatible with the new autocommit // value. if (!autocommit) { @@ -617,7 +668,7 @@ public void setReadOnly(boolean readOnly) { ConnectionPreconditions.checkState( !transactionBeginMarked, "Cannot set read-only when a transaction has begun"); setConnectionPropertyValue(READONLY, readOnly); - clearLastTransactionAndSetDefaultTransactionOptions(); + clearLastTransactionAndSetDefaultTransactionOptions(getDefaultIsolationLevel()); } @Override @@ -626,11 +677,61 @@ public boolean isReadOnly() { return getConnectionPropertyValue(READONLY); } - private void clearLastTransactionAndSetDefaultTransactionOptions() { - setDefaultTransactionOptions(); + @Override + public void setDefaultIsolationLevel(IsolationLevel isolationLevel) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState( + !isBatchActive(), "Cannot default isolation level while in a batch"); + ConnectionPreconditions.checkState( + !isTransactionStarted(), + "Cannot set default isolation level while a transaction is active"); + setConnectionPropertyValue(DEFAULT_ISOLATION_LEVEL, isolationLevel); + clearLastTransactionAndSetDefaultTransactionOptions(isolationLevel); + } + + @Override + public IsolationLevel getDefaultIsolationLevel() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + return getConnectionPropertyValue(DEFAULT_ISOLATION_LEVEL); + } + + private void clearLastTransactionAndSetDefaultTransactionOptions(IsolationLevel isolationLevel) { + setDefaultTransactionOptions(isolationLevel); this.currentUnitOfWork = null; } + @Override + public void setReadLockMode(ReadLockMode readLockMode) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + setConnectionPropertyValue(READ_LOCK_MODE, readLockMode); + } + + @Override + public ReadLockMode getReadLockMode() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + return getConnectionPropertyValue(READ_LOCK_MODE); + } + + @Override + public void setTransactionTimeout(Duration timeout) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + setConnectionPropertyValue(TRANSACTION_TIMEOUT, timeout); + } + + @Override + public Duration getTransactionTimeout() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + return getConnectionPropertyValue(TRANSACTION_TIMEOUT); + } + + @Nullable + Deadline getTransactionDeadline() { + Duration timeout = getTransactionTimeout(); + return timeout == null + ? null + : Deadline.after(timeout.toNanos(), TimeUnit.NANOSECONDS, this.ticker); + } + @Override public void setAutocommitDmlMode(AutocommitDmlMode mode) { Preconditions.checkNotNull(mode); @@ -639,7 +740,8 @@ public void setAutocommitDmlMode(AutocommitDmlMode mode) { !isBatchActive(), "Cannot set autocommit DML mode while in a batch"); ConnectionPreconditions.checkState( !isInTransaction() && isAutocommit(), - "Cannot set autocommit DML mode while not in autocommit mode or while a transaction is active"); + "Cannot set autocommit DML mode while not in autocommit mode or while a transaction is" + + " active"); ConnectionPreconditions.checkState( !isReadOnly(), "Cannot set autocommit DML mode for a read-only connection"); setConnectionPropertyValue(AUTOCOMMIT_DML_MODE, mode); @@ -753,6 +855,16 @@ public void setDdlInTransactionMode(DdlInTransactionMode ddlInTransactionMode) { setConnectionPropertyValue(DDL_IN_TRANSACTION_MODE, ddlInTransactionMode); } + @Override + public String getDefaultSequenceKind() { + return getConnectionPropertyValue(DEFAULT_SEQUENCE_KIND); + } + + @Override + public void setDefaultSequenceKind(String defaultSequenceKind) { + setConnectionPropertyValue(DEFAULT_SEQUENCE_KIND, defaultSequenceKind); + } + @Override public void setStatementTimeout(long timeout, TimeUnit unit) { Preconditions.checkArgument(timeout > 0L, "Zero or negative timeout values are not allowed"); @@ -818,6 +930,27 @@ public void setTransactionMode(TransactionMode transactionMode) { this.unitOfWorkType = UnitOfWorkType.of(transactionMode); } + IsolationLevel getTransactionIsolationLevel() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState(!isDdlBatchActive(), "This connection is in a DDL batch"); + ConnectionPreconditions.checkState(isInTransaction(), "This connection has no transaction"); + return this.transactionIsolationLevel; + } + + void setTransactionIsolationLevel(IsolationLevel isolationLevel) { + Preconditions.checkNotNull(isolationLevel); + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState( + !isBatchActive(), "Cannot set transaction isolation level while in a batch"); + ConnectionPreconditions.checkState(isInTransaction(), "This connection has no transaction"); + ConnectionPreconditions.checkState( + !isTransactionStarted(), + "The transaction isolation level cannot be set after the transaction has started"); + + this.transactionBeginMarked = true; + this.transactionIsolationLevel = isolationLevel; + } + @Override public String getTransactionTag() { ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); @@ -825,6 +958,18 @@ public String getTransactionTag() { return transactionTag; } + @Override + public void setClientContext(RequestOptions.ClientContext clientContext) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + this.clientContext = clientContext; + } + + @Override + public RequestOptions.ClientContext getClientContext() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + return clientContext; + } + @Override public void setTransactionTag(String tag) { ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); @@ -942,7 +1087,7 @@ public boolean isRetryAbortsInternally() { @Override public void setRetryAbortsInternally(boolean retryAbortsInternally) { - setRetryAbortsInternally(retryAbortsInternally, /* local = */ false); + setRetryAbortsInternally(retryAbortsInternally, /* local= */ false); } void setRetryAbortsInternally(boolean retryAbortsInternally, boolean local) { @@ -1040,7 +1185,7 @@ CommitResponse getCommitResponseOrNull() { @Override public void setReturnCommitStats(boolean returnCommitStats) { - setReturnCommitStats(returnCommitStats, /* local = */ false); + setReturnCommitStats(returnCommitStats, /* local= */ false); } @VisibleForTesting @@ -1099,13 +1244,14 @@ public boolean isKeepTransactionAlive() { } /** Resets this connection to its default transaction options. */ - private void setDefaultTransactionOptions() { + private void setDefaultTransactionOptions(IsolationLevel isolationLevel) { if (transactionStack.isEmpty()) { unitOfWorkType = isReadOnly() ? UnitOfWorkType.READ_ONLY_TRANSACTION : UnitOfWorkType.READ_WRITE_TRANSACTION; batchMode = BatchMode.NONE; + transactionIsolationLevel = isolationLevel; transactionTag = null; excludeTxnFromChangeStreams = false; } else { @@ -1115,11 +1261,21 @@ private void setDefaultTransactionOptions() { @Override public void beginTransaction() { - get(beginTransactionAsync()); + get(beginTransactionAsync(getConnectionPropertyValue(DEFAULT_ISOLATION_LEVEL))); + } + + @Override + public void beginTransaction(IsolationLevel isolationLevel) { + get(beginTransactionAsync(isolationLevel)); } @Override public ApiFuture beginTransactionAsync() { + return beginTransactionAsync(getConnectionPropertyValue(DEFAULT_ISOLATION_LEVEL)); + } + + @Override + public ApiFuture beginTransactionAsync(IsolationLevel isolationLevel) { ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); ConnectionPreconditions.checkState( !isBatchActive(), "This connection has an active batch and cannot begin a transaction"); @@ -1129,7 +1285,7 @@ public ApiFuture beginTransactionAsync() { ConnectionPreconditions.checkState(!transactionBeginMarked, "A transaction has already begun"); transactionBeginMarked = true; - clearLastTransactionAndSetDefaultTransactionOptions(); + clearLastTransactionAndSetDefaultTransactionOptions(isolationLevel); if (isAutocommit()) { inTransaction = true; } @@ -1164,16 +1320,19 @@ public void onFailure() { @Override public void commit() { - get(commitAsync(CallType.SYNC)); + get(commitAsync(CallType.SYNC, Caller.APPLICATION)); } @Override public ApiFuture commitAsync() { - return commitAsync(CallType.ASYNC); + return commitAsync(CallType.ASYNC, Caller.APPLICATION); } - private ApiFuture commitAsync(CallType callType) { + ApiFuture commitAsync(CallType callType, Caller caller) { ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState( + !transactionRunnerActive || caller == Caller.TRANSACTION_RUNNER, + "Cannot call commit when a transaction runner is active"); maybeAutoCommitOrFlushCurrentUnitOfWork(COMMIT_STATEMENT.getType(), COMMIT_STATEMENT); return endCurrentTransactionAsync(callType, commit, COMMIT_STATEMENT); } @@ -1201,16 +1360,19 @@ public void onFailure() { @Override public void rollback() { - get(rollbackAsync(CallType.SYNC)); + get(rollbackAsync(CallType.SYNC, Caller.APPLICATION)); } @Override public ApiFuture rollbackAsync() { - return rollbackAsync(CallType.ASYNC); + return rollbackAsync(CallType.ASYNC, Caller.APPLICATION); } - private ApiFuture rollbackAsync(CallType callType) { + ApiFuture rollbackAsync(CallType callType, Caller caller) { ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState( + !transactionRunnerActive || caller == Caller.TRANSACTION_RUNNER, + "Cannot call rollback when a transaction runner is active"); maybeAutoCommitOrFlushCurrentUnitOfWork(ROLLBACK_STATEMENT.getType(), ROLLBACK_STATEMENT); return endCurrentTransactionAsync(callType, rollback, ROLLBACK_STATEMENT); } @@ -1238,11 +1400,32 @@ private ApiFuture endCurrentTransactionAsync( if (isAutocommit()) { inTransaction = false; } - setDefaultTransactionOptions(); + setDefaultTransactionOptions(getDefaultIsolationLevel()); } return res; } + @Override + public T runTransaction(TransactionCallable callable) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState(!isBatchActive(), "Cannot run transaction while in a batch"); + ConnectionPreconditions.checkState( + !isTransactionStarted(), "Cannot run transaction when a transaction is already active"); + ConnectionPreconditions.checkState( + !transactionRunnerActive, "A transaction runner is already active for this connection"); + this.transactionRunnerActive = true; + try { + return new TransactionRunnerImpl(this).run(callable); + } finally { + this.transactionRunnerActive = false; + } + } + + void resetForRetry(UnitOfWork retryUnitOfWork) { + retryUnitOfWork.resetForRetry(); + this.currentUnitOfWork = retryUnitOfWork; + } + @Override public SavepointSupport getSavepointSupport() { return getConnectionPropertyValue(SAVEPOINT_SUPPORT); @@ -1264,7 +1447,8 @@ public void savepoint(String name) { SavepointSupport savepointSupport = getSavepointSupport(); ConnectionPreconditions.checkState( savepointSupport.isSavepointCreationAllowed(), - "This connection does not allow the creation of savepoints. Current value of SavepointSupport: " + "This connection does not allow the creation of savepoints. Current value of" + + " SavepointSupport: " + savepointSupport); getCurrentUnitOfWorkOrStartNewUnitOfWork(SAVEPOINT_STATEMENT) .savepoint(checkValidIdentifier(name), getDialect()); @@ -1324,8 +1508,7 @@ private StatementResult internalExecute( default: } throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INVALID_ARGUMENT, - "Unknown statement: " + parsedStatement.getSqlWithoutComments()); + ErrorCode.INVALID_ARGUMENT, "Unknown statement: " + parsedStatement.getSql()); } @VisibleForTesting @@ -1370,8 +1553,7 @@ private static ResultType getResultType(ParsedStatement parsedStatement) { case UNKNOWN: default: throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INVALID_ARGUMENT, - "Unknown statement: " + parsedStatement.getSqlWithoutComments()); + ErrorCode.INVALID_ARGUMENT, "Unknown statement: " + parsedStatement.getSql()); } } @@ -1403,8 +1585,7 @@ public AsyncStatementResult executeAsync(Statement statement) { default: } throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INVALID_ARGUMENT, - "Unknown statement: " + parsedStatement.getSqlWithoutComments()); + ErrorCode.INVALID_ARGUMENT, "Unknown statement: " + parsedStatement.getSql()); } @Override @@ -1443,6 +1624,10 @@ public long getAutoBatchDmlUpdateCount() { return getConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT); } + long getDmlBatchUpdateCount() { + return getConnectionPropertyValue(BATCH_DML_UPDATE_COUNT); + } + @Override public void setAutoBatchDmlUpdateCountVerification(boolean verification) { setConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION, verification); @@ -1453,6 +1638,10 @@ public boolean isAutoBatchDmlUpdateCountVerification() { return getConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION); } + void setBatchDmlUpdateCount(long updateCount, boolean local) { + setConnectionPropertyValue(BATCH_DML_UPDATE_COUNT, updateCount, local); + } + @Override public void setDataBoostEnabled(boolean dataBoostEnabled) { setConnectionPropertyValue(DATA_BOOST_ENABLED, dataBoostEnabled); @@ -1599,7 +1788,7 @@ private ResultSet parseAndExecuteQuery( throw SpannerExceptionFactory.newSpannerException( ErrorCode.FAILED_PRECONDITION, "DML statement with returning clause cannot be executed in read-only mode: " - + parsedStatement.getSqlWithoutComments()); + + parsedStatement.getSql()); } return internalExecuteQuery(callType, parsedStatement, analyzeMode, options); } @@ -1610,8 +1799,7 @@ private ResultSet parseAndExecuteQuery( } throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, - "Statement is not a query or DML with returning clause: " - + parsedStatement.getSqlWithoutComments()); + "Statement is not a query or DML with returning clause: " + parsedStatement.getSql()); } private AsyncResultSet parseAndExecuteQueryAsync(Statement query, QueryOption... options) { @@ -1641,7 +1829,7 @@ private AsyncResultSet parseAndExecuteQueryAsync(Statement query, QueryOption... throw SpannerExceptionFactory.newSpannerException( ErrorCode.FAILED_PRECONDITION, "DML statement with returning clause cannot be executed in read-only mode: " - + parsedStatement.getSqlWithoutComments()); + + parsedStatement.getSql()); } return internalExecuteQueryAsync( CallType.ASYNC, parsedStatement, AnalyzeMode.NONE, options); @@ -1653,8 +1841,7 @@ private AsyncResultSet parseAndExecuteQueryAsync(Statement query, QueryOption... } throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, - "Statement is not a query or DML with returning clause: " - + parsedStatement.getSqlWithoutComments()); + "Statement is not a query or DML with returning clause: " + parsedStatement.getSql()); } private boolean isInternalMetadataQuery(QueryOption... options) { @@ -1681,7 +1868,7 @@ public long executeUpdate(Statement update) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.FAILED_PRECONDITION, "DML statement with returning clause cannot be executed using executeUpdate: " - + parsedStatement.getSqlWithoutComments() + + parsedStatement.getSql() + ". Please use executeQuery instead."); } return get(internalExecuteUpdateAsync(CallType.SYNC, parsedStatement)); @@ -1694,7 +1881,7 @@ public long executeUpdate(Statement update) { } throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, - "Statement is not an update statement: " + parsedStatement.getSqlWithoutComments()); + "Statement is not an update statement: " + parsedStatement.getSql()); } @Override @@ -1709,7 +1896,7 @@ public ApiFuture executeUpdateAsync(Statement update) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.FAILED_PRECONDITION, "DML statement with returning clause cannot be executed using executeUpdateAsync: " - + parsedStatement.getSqlWithoutComments() + + parsedStatement.getSql() + ". Please use executeQueryAsync instead."); } return internalExecuteUpdateAsync(CallType.ASYNC, parsedStatement); @@ -1722,7 +1909,7 @@ public ApiFuture executeUpdateAsync(Statement update) { } throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, - "Statement is not an update statement: " + parsedStatement.getSqlWithoutComments()); + "Statement is not an update statement: " + parsedStatement.getSql()); } @Override @@ -1745,7 +1932,7 @@ public ResultSetStats analyzeUpdate(Statement update, QueryAnalyzeMode analyzeMo } throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, - "Statement is not an update statement: " + parsedStatement.getSqlWithoutComments()); + "Statement is not an update statement: " + parsedStatement.getSql()); } @Override @@ -1767,7 +1954,7 @@ public ResultSet analyzeUpdateStatement( } throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, - "Statement is not an update statement: " + parsedStatement.getSqlWithoutComments()); + "Statement is not an update statement: " + parsedStatement.getSql()); } @Override @@ -1799,7 +1986,7 @@ private List parseUpdateStatements(Iterable updates) throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, "The batch update list contains a statement that is not an update statement: " - + parsedStatement.getSqlWithoutComments()); + + parsedStatement.getSql()); } } return parsedStatements; @@ -1854,6 +2041,9 @@ private QueryOption[] mergeQueryRequestOptions( options = appendQueryOption(options, Options.priority(getConnectionPropertyValue(RPC_PRIORITY))); } + if (clientContext != null) { + options = appendQueryOption(options, Options.clientContext(clientContext)); + } if (currentUnitOfWork != null && currentUnitOfWork.supportsDirectedReads(parsedStatement) && getConnectionPropertyValue(DIRECTED_READ) != null) { @@ -1898,6 +2088,14 @@ private UpdateOption[] mergeUpdateRequestOptions(UpdateOption... options) { options[options.length - 1] = Options.priority(getConnectionPropertyValue(RPC_PRIORITY)); } } + if (clientContext != null) { + if (options == null || options.length == 0) { + options = new UpdateOption[] {Options.clientContext(clientContext)}; + } else { + options = Arrays.copyOf(options, options.length + 1); + options[options.length - 1] = Options.clientContext(clientContext); + } + } return options; } @@ -1910,7 +2108,8 @@ private ResultSet internalExecuteQuery( statement.getType() == StatementType.QUERY || (statement.getType() == StatementType.UPDATE && (analyzeMode != AnalyzeMode.NONE || statement.hasReturningClause())), - "Statement must either be a query or a DML mode with analyzeMode!=NONE or returning clause"); + "Statement must either be a query or a DML mode with analyzeMode!=NONE or returning" + + " clause"); boolean isInternalMetadataQuery = isInternalMetadataQuery(options); QueryOption[] combinedOptions = concat(statement.getOptionsFromHints(), options); UnitOfWork transaction = @@ -1995,20 +2194,20 @@ private ApiFuture internalExecuteBatchUpdateAsync( private UnitOfWork maybeStartAutoDmlBatch(UnitOfWork transaction) { if (isInTransaction() && isAutoBatchDml() && !(transaction instanceof DmlBatch)) { // Automatically start a DML batch. - return startBatchDml(/* autoBatch = */ true); + return startBatchDml(/* autoBatch= */ true); } return transaction; } - private UnitOfWork getCurrentUnitOfWorkOrStartNewUnitOfWork() { + UnitOfWork getCurrentUnitOfWorkOrStartNewUnitOfWork() { return getCurrentUnitOfWorkOrStartNewUnitOfWork( - StatementType.UNKNOWN, /* parsedStatement = */ null, /* internalMetadataQuery = */ false); + StatementType.UNKNOWN, /* parsedStatement= */ null, /* internalMetadataQuery= */ false); } private UnitOfWork getCurrentUnitOfWorkOrStartNewUnitOfWork( @Nonnull ParsedStatement parsedStatement) { return getCurrentUnitOfWorkOrStartNewUnitOfWork( - parsedStatement.getType(), parsedStatement, /* internalMetadataQuery = */ false); + parsedStatement.getType(), parsedStatement, /* internalMetadataQuery= */ false); } @VisibleForTesting @@ -2034,19 +2233,19 @@ UnitOfWork getCurrentUnitOfWorkOrStartNewUnitOfWork( if (isInternalMetadataQuery) { // Just return a temporary single-use transaction. return createNewUnitOfWork( - /* isInternalMetadataQuery = */ true, - /* forceSingleUse = */ true, - /* autoBatchDml = */ false); + /* isInternalMetadataQuery= */ true, + /* forceSingleUse= */ true, + /* autoBatchDml= */ false); } maybeAutoCommitOrFlushCurrentUnitOfWork(statementType, parsedStatement); if (this.currentUnitOfWork == null || !this.currentUnitOfWork.isActive()) { this.currentUnitOfWork = createNewUnitOfWork( - /* isInternalMetadataQuery = */ false, - /* forceSingleUse = */ statementType == StatementType.DDL + /* isInternalMetadataQuery= */ false, + /* forceSingleUse= */ statementType == StatementType.DDL && getDdlInTransactionMode() != DdlInTransactionMode.FAIL && !this.transactionBeginMarked, - /* autoBatchDml = */ false, + /* autoBatchDml= */ false, statementType); } return this.currentUnitOfWork; @@ -2117,23 +2316,20 @@ UnitOfWork createNewUnitOfWork( .setDdlClient(ddlClient) .setDatabaseClient(dbClient) .setBatchClient(batchClient) - .setReadOnly(getConnectionPropertyValue(READONLY)) - .setReadOnlyStaleness(getConnectionPropertyValue(READ_ONLY_STALENESS)) - .setAutocommitDmlMode(getConnectionPropertyValue(AUTOCOMMIT_DML_MODE)) + .setConnectionState(connectionState) .setTransactionRetryListeners(transactionRetryListeners) - .setReturnCommitStats(getConnectionPropertyValue(RETURN_COMMIT_STATS)) .setExcludeTxnFromChangeStreams(excludeTxnFromChangeStreams) - .setMaxCommitDelay(getConnectionPropertyValue(MAX_COMMIT_DELAY)) .setStatementTimeout(statementTimeout) .withStatementExecutor(statementExecutor) .setSpan( createSpanForUnitOfWork( statementType == StatementType.DDL ? DDL_STATEMENT : SINGLE_USE_TRANSACTION)) .setProtoDescriptors(getProtoDescriptors()) + .setClientContext(clientContext) .build(); if (!isInternalMetadataQuery && !forceSingleUse) { // Reset the transaction options after starting a single-use transaction. - setDefaultTransactionOptions(); + setDefaultTransactionOptions(getDefaultIsolationLevel()); } return singleUseTransaction; } else { @@ -2148,12 +2344,16 @@ UnitOfWork createNewUnitOfWork( .setTransactionTag(transactionTag) .setRpcPriority(getConnectionPropertyValue(RPC_PRIORITY)) .setSpan(createSpanForUnitOfWork(READ_ONLY_TRANSACTION)) + .setClientContext(clientContext) .build(); case READ_WRITE_TRANSACTION: return ReadWriteTransaction.newBuilder() .setUsesEmulator(options.usesEmulator()) .setUseAutoSavepointsForEmulator(options.useAutoSavepointsForEmulator()) .setDatabaseClient(dbClient) + .setIsolationLevel(transactionIsolationLevel) + .setReadLockMode(getConnectionPropertyValue(READ_LOCK_MODE)) + .setDeadline(getTransactionDeadline()) .setDelayTransactionStartUntilFirstWrite( getConnectionPropertyValue(DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE)) .setKeepTransactionAlive(getConnectionPropertyValue(KEEP_TRANSACTION_ALIVE)) @@ -2168,6 +2368,7 @@ UnitOfWork createNewUnitOfWork( .setExcludeTxnFromChangeStreams(excludeTxnFromChangeStreams) .setRpcPriority(getConnectionPropertyValue(RPC_PRIORITY)) .setSpan(createSpanForUnitOfWork(READ_WRITE_TRANSACTION)) + .setClientContext(clientContext) .build(); case DML_BATCH: // A DML batch can run inside the current transaction. It should therefore only @@ -2178,6 +2379,7 @@ UnitOfWork createNewUnitOfWork( .setAutoBatchUpdateCountSupplier(this::getAutoBatchDmlUpdateCount) .setAutoBatchUpdateCountVerificationSupplier( this::isAutoBatchDmlUpdateCountVerification) + .setDmlBatchUpdateCountSupplier(this::getDmlBatchUpdateCount) .setTransaction(currentUnitOfWork) .setStatementTimeout(statementTimeout) .withStatementExecutor(statementExecutor) @@ -2186,6 +2388,7 @@ UnitOfWork createNewUnitOfWork( .setRpcPriority(getConnectionPropertyValue(RPC_PRIORITY)) // Use the transaction Span for the DML batch. .setSpan(transactionStack.peek().getSpan()) + .setClientContext(clientContext) .build(); case DDL_BATCH: return DdlBatch.newBuilder() @@ -2195,13 +2398,16 @@ UnitOfWork createNewUnitOfWork( .withStatementExecutor(statementExecutor) .setSpan(createSpanForUnitOfWork(DDL_BATCH)) .setProtoDescriptors(getProtoDescriptors()) + .setConnectionState(connectionState) + .setClientContext(clientContext) .build(); default: } } throw SpannerExceptionFactory.newSpannerException( ErrorCode.FAILED_PRECONDITION, - "This connection does not have an active transaction and the state of this connection does not allow any new transactions to be started"); + "This connection does not have an active transaction and the state of this connection does" + + " not allow any new transactions to be started"); } /** Pushes the current unit of work to the stack of nested transactions. */ @@ -2286,9 +2492,9 @@ public void startBatchDdl() { this.unitOfWorkType = UnitOfWorkType.DDL_BATCH; this.currentUnitOfWork = createNewUnitOfWork( - /* isInternalMetadataQuery = */ false, - /* forceSingleUse = */ false, - /* autoBatchDml = */ false); + /* isInternalMetadataQuery= */ false, + /* forceSingleUse= */ false, + /* autoBatchDml= */ false); } @Override @@ -2301,7 +2507,7 @@ public void startBatchDml() { ConnectionPreconditions.checkState( !(isInTransaction() && getTransactionMode() == TransactionMode.READ_ONLY_TRANSACTION), "Cannot start a DML batch when a read-only transaction is in progress"); - startBatchDml(/* autoBatch = */ false); + startBatchDml(/* autoBatch= */ false); } private UnitOfWork startBatchDml(boolean autoBatch) { @@ -2312,7 +2518,7 @@ private UnitOfWork startBatchDml(boolean autoBatch) { this.unitOfWorkType = UnitOfWorkType.DML_BATCH; return this.currentUnitOfWork = createNewUnitOfWork( - /* isInternalMetadataQuery = */ false, /* forceSingleUse = */ false, autoBatch); + /* isInternalMetadataQuery= */ false, /* forceSingleUse= */ false, autoBatch); } @Override @@ -2336,7 +2542,7 @@ public ApiFuture runBatchAsync() { this.protoDescriptorsFilePath = null; } this.batchMode = BatchMode.NONE; - setDefaultTransactionOptions(); + setDefaultTransactionOptions(getDefaultIsolationLevel()); } } @@ -2350,7 +2556,7 @@ public void abortBatch() { } } finally { this.batchMode = BatchMode.NONE; - setDefaultTransactionOptions(); + setDefaultTransactionOptions(getDefaultIsolationLevel()); } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java index 2be2d7980b2..44faecee704 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java @@ -20,16 +20,25 @@ import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_CONFIG_EMULATOR; import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_PARTITION_MODE; import static com.google.cloud.spanner.connection.ConnectionProperties.CHANNEL_PROVIDER; +import static com.google.cloud.spanner.connection.ConnectionProperties.CLIENT_CERTIFICATE; +import static com.google.cloud.spanner.connection.ConnectionProperties.CLIENT_KEY; import static com.google.cloud.spanner.connection.ConnectionProperties.CREDENTIALS_PROVIDER; import static com.google.cloud.spanner.connection.ConnectionProperties.CREDENTIALS_URL; import static com.google.cloud.spanner.connection.ConnectionProperties.DATABASE_ROLE; import static com.google.cloud.spanner.connection.ConnectionProperties.DATA_BOOST_ENABLED; +import static com.google.cloud.spanner.connection.ConnectionProperties.DCP_INITIAL_CHANNELS; +import static com.google.cloud.spanner.connection.ConnectionProperties.DCP_MAX_CHANNELS; +import static com.google.cloud.spanner.connection.ConnectionProperties.DCP_MIN_CHANNELS; import static com.google.cloud.spanner.connection.ConnectionProperties.DIALECT; import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_API_TRACING; +import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_DIRECT_ACCESS; +import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_DYNAMIC_CHANNEL_POOL; import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_END_TO_END_TRACING; import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_EXTENDED_TRACING; import static com.google.cloud.spanner.connection.ConnectionProperties.ENCODED_CREDENTIALS; import static com.google.cloud.spanner.connection.ConnectionProperties.ENDPOINT; +import static com.google.cloud.spanner.connection.ConnectionProperties.GRPC_INTERCEPTOR_PROVIDER; +import static com.google.cloud.spanner.connection.ConnectionProperties.IS_EXPERIMENTAL_HOST; import static com.google.cloud.spanner.connection.ConnectionProperties.LENIENT; import static com.google.cloud.spanner.connection.ConnectionProperties.MAX_COMMIT_DELAY; import static com.google.cloud.spanner.connection.ConnectionProperties.MAX_PARTITIONED_PARALLELISM; @@ -45,6 +54,7 @@ import static com.google.cloud.spanner.connection.ConnectionProperties.TRACING_PREFIX; import static com.google.cloud.spanner.connection.ConnectionProperties.TRACK_CONNECTION_LEAKS; import static com.google.cloud.spanner.connection.ConnectionProperties.TRACK_SESSION_LEAKS; +import static com.google.cloud.spanner.connection.ConnectionProperties.UNIVERSE_DOMAIN; import static com.google.cloud.spanner.connection.ConnectionProperties.USER_AGENT; import static com.google.cloud.spanner.connection.ConnectionProperties.USE_AUTO_SAVEPOINTS_FOR_EMULATOR; import static com.google.cloud.spanner.connection.ConnectionProperties.USE_PLAIN_TEXT; @@ -54,6 +64,7 @@ import com.google.api.core.InternalApi; import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.grpc.GrpcInterceptorProvider; import com.google.api.gax.rpc.TransportChannelProvider; import com.google.auth.Credentials; import com.google.auth.oauth2.AccessToken; @@ -70,27 +81,27 @@ import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.GrpcInterceptorProviderConverter; import com.google.cloud.spanner.connection.StatementExecutor.StatementExecutorType; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Sets; +import io.grpc.Deadline; +import io.grpc.Deadline.Ticker; import io.opentelemetry.api.OpenTelemetry; import java.io.IOException; import java.net.URL; import java.time.Duration; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; @@ -124,90 +135,6 @@ */ @InternalApi public class ConnectionOptions { - /** - * Supported connection properties that can be included in the connection URI. - * - * @deprecated Replaced by {@link com.google.cloud.spanner.connection.ConnectionProperty}. - */ - @Deprecated - public static class ConnectionProperty { - private static final String[] BOOLEAN_VALUES = new String[] {"true", "false"}; - private final String name; - private final String description; - private final String defaultValue; - private final String[] validValues; - private final int hashCode; - - private static ConnectionProperty createStringProperty(String name, String description) { - return new ConnectionProperty(name, description, "", null); - } - - private static ConnectionProperty createBooleanProperty( - String name, String description, Boolean defaultValue) { - return new ConnectionProperty( - name, - description, - defaultValue == null ? "" : String.valueOf(defaultValue), - BOOLEAN_VALUES); - } - - private static ConnectionProperty createIntProperty( - String name, String description, int defaultValue) { - return new ConnectionProperty(name, description, String.valueOf(defaultValue), null); - } - - private static ConnectionProperty createEmptyProperty(String name) { - return new ConnectionProperty(name, "", "", null); - } - - private ConnectionProperty( - String name, String description, String defaultValue, String[] validValues) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(description); - Preconditions.checkNotNull(defaultValue); - this.name = name; - this.description = description; - this.defaultValue = defaultValue; - this.validValues = validValues; - this.hashCode = name.toLowerCase().hashCode(); - } - - @Override - public int hashCode() { - return hashCode; - } - - @Override - public boolean equals(Object o) { - if (!(o instanceof ConnectionProperty)) { - return false; - } - return ((ConnectionProperty) o).name.equalsIgnoreCase(this.name); - } - - /** @return the name of this connection property. */ - public String getName() { - return name; - } - - /** @return the description of this connection property. */ - public String getDescription() { - return description; - } - - /** @return the default value of this connection property. */ - public String getDefaultValue() { - return defaultValue; - } - - /** - * @return the valid values for this connection property. null indicates no - * restriction. - */ - public String[] getValidValues() { - return validValues; - } - } /** * Set this system property to true to enable transactional connection state by default for @@ -219,16 +146,23 @@ public String[] getValidValues() { private static final LocalConnectionChecker LOCAL_CONNECTION_CHECKER = new LocalConnectionChecker(); static final boolean DEFAULT_USE_PLAIN_TEXT = false; + static final boolean DEFAULT_IS_EXPERIMENTAL_HOST = false; static final boolean DEFAULT_AUTOCOMMIT = true; static final boolean DEFAULT_READONLY = false; static final boolean DEFAULT_RETRY_ABORTS_INTERNALLY = true; static final boolean DEFAULT_USE_VIRTUAL_THREADS = false; static final boolean DEFAULT_USE_VIRTUAL_GRPC_TRANSPORT_THREADS = false; static final String DEFAULT_CREDENTIALS = null; + static final String DEFAULT_CLIENT_CERTIFICATE = null; + static final String DEFAULT_CLIENT_KEY = null; static final String DEFAULT_OAUTH_TOKEN = null; static final Integer DEFAULT_MIN_SESSIONS = null; static final Integer DEFAULT_MAX_SESSIONS = null; static final Integer DEFAULT_NUM_CHANNELS = null; + static final Boolean DEFAULT_ENABLE_DYNAMIC_CHANNEL_POOL = null; + static final Integer DEFAULT_DCP_MIN_CHANNELS = null; + static final Integer DEFAULT_DCP_MAX_CHANNELS = null; + static final Integer DEFAULT_DCP_INITIAL_CHANNELS = null; static final String DEFAULT_ENDPOINT = null; static final String DEFAULT_CHANNEL_PROVIDER = null; static final String DEFAULT_DATABASE_ROLE = null; @@ -238,6 +172,7 @@ public String[] getValidValues() { static final RpcPriority DEFAULT_RPC_PRIORITY = null; static final DdlInTransactionMode DEFAULT_DDL_IN_TRANSACTION_MODE = DdlInTransactionMode.ALLOW_IN_EMPTY_TRANSACTION; + static final String DEFAULT_DEFAULT_SEQUENCE_KIND = null; static final boolean DEFAULT_RETURN_COMMIT_STATS = false; static final boolean DEFAULT_LENIENT = false; static final boolean DEFAULT_ROUTE_TO_LEADER = true; @@ -254,79 +189,134 @@ public String[] getValidValues() { static final boolean DEFAULT_ENABLE_END_TO_END_TRACING = false; static final boolean DEFAULT_AUTO_BATCH_DML = false; static final long DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT = 1L; + static final long DEFAULT_BATCH_DML_UPDATE_COUNT = -1L; static final boolean DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = true; + private static final String EXPERIMENTAL_HOST_PROJECT_ID = "default"; + private static final String DEFAULT_EXPERIMENTAL_HOST_INSTANCE_ID = "default"; private static final String PLAIN_TEXT_PROTOCOL = "http:"; private static final String HOST_PROTOCOL = "https:"; private static final String DEFAULT_HOST = "https://spanner.googleapis.com"; private static final String SPANNER_EMULATOR_HOST_ENV_VAR = "SPANNER_EMULATOR_HOST"; private static final String DEFAULT_EMULATOR_HOST = "http://localhost:9010"; + /** Use plain text is only for local testing purposes. */ static final String USE_PLAIN_TEXT_PROPERTY_NAME = "usePlainText"; + + /** Connect to a Experimental Host * */ + static final String IS_EXPERIMENTAL_HOST_PROPERTY_NAME = "isExperimentalHost"; + + /** Client certificate path to establish mTLS */ + static final String CLIENT_CERTIFICATE_PROPERTY_NAME = "clientCertificate"; + + /** Client key path to establish mTLS */ + static final String CLIENT_KEY_PROPERTY_NAME = "clientKey"; + /** Name of the 'autocommit' connection property. */ public static final String AUTOCOMMIT_PROPERTY_NAME = "autocommit"; + /** Name of the 'readonly' connection property. */ public static final String READONLY_PROPERTY_NAME = "readonly"; + /** Name of the 'routeToLeader' connection property. */ public static final String ROUTE_TO_LEADER_PROPERTY_NAME = "routeToLeader"; + /** Name of the 'retry aborts internally' connection property. */ public static final String RETRY_ABORTS_INTERNALLY_PROPERTY_NAME = "retryAbortsInternally"; + /** Name of the property to enable/disable virtual threads for the statement executor. */ public static final String USE_VIRTUAL_THREADS_PROPERTY_NAME = "useVirtualThreads"; + /** Name of the property to enable/disable virtual threads for gRPC transport. */ public static final String USE_VIRTUAL_GRPC_TRANSPORT_THREADS_PROPERTY_NAME = "useVirtualGrpcTransportThreads"; + /** Name of the 'credentials' connection property. */ public static final String CREDENTIALS_PROPERTY_NAME = "credentials"; + /** Name of the 'encodedCredentials' connection property. */ public static final String ENCODED_CREDENTIALS_PROPERTY_NAME = "encodedCredentials"; public static final String ENABLE_ENCODED_CREDENTIALS_SYSTEM_PROPERTY = "ENABLE_ENCODED_CREDENTIALS"; + /** Name of the 'credentialsProvider' connection property. */ public static final String CREDENTIALS_PROVIDER_PROPERTY_NAME = "credentialsProvider"; public static final String ENABLE_CREDENTIALS_PROVIDER_SYSTEM_PROPERTY = "ENABLE_CREDENTIALS_PROVIDER"; + /** * OAuth token to use for authentication. Cannot be used in combination with a credentials file. */ public static final String OAUTH_TOKEN_PROPERTY_NAME = "oauthToken"; + /** Name of the 'minSessions' connection property. */ public static final String MIN_SESSIONS_PROPERTY_NAME = "minSessions"; + /** Name of the 'maxSessions' connection property. */ public static final String MAX_SESSIONS_PROPERTY_NAME = "maxSessions"; + /** Name of the 'numChannels' connection property. */ public static final String NUM_CHANNELS_PROPERTY_NAME = "numChannels"; + + /** Name of the 'enableDynamicChannelPool' connection property. */ + public static final String ENABLE_DYNAMIC_CHANNEL_POOL_PROPERTY_NAME = "enableDynamicChannelPool"; + + /** Name of the 'dcpMinChannels' connection property. */ + public static final String DCP_MIN_CHANNELS_PROPERTY_NAME = "dcpMinChannels"; + + /** Name of the 'dcpMaxChannels' connection property. */ + public static final String DCP_MAX_CHANNELS_PROPERTY_NAME = "dcpMaxChannels"; + + /** Name of the 'dcpInitialChannels' connection property. */ + public static final String DCP_INITIAL_CHANNELS_PROPERTY_NAME = "dcpInitialChannels"; + /** Name of the 'endpoint' connection property. */ public static final String ENDPOINT_PROPERTY_NAME = "endpoint"; + /** Name of the 'channelProvider' connection property. */ public static final String CHANNEL_PROVIDER_PROPERTY_NAME = "channelProvider"; public static final String ENABLE_CHANNEL_PROVIDER_SYSTEM_PROPERTY = "ENABLE_CHANNEL_PROVIDER"; + + public static final String ENABLE_GRPC_INTERCEPTOR_PROVIDER_SYSTEM_PROPERTY = + "ENABLE_GRPC_INTERCEPTOR_PROVIDER"; + /** Custom user agent string is only for other Google libraries. */ static final String USER_AGENT_PROPERTY_NAME = "userAgent"; + /** Query optimizer version to use for a connection. */ static final String OPTIMIZER_VERSION_PROPERTY_NAME = "optimizerVersion"; + /** Query optimizer statistics package to use for a connection. */ static final String OPTIMIZER_STATISTICS_PACKAGE_PROPERTY_NAME = "optimizerStatisticsPackage"; + /** Name of the 'lenientMode' connection property. */ public static final String LENIENT_PROPERTY_NAME = "lenient"; + /** Name of the 'rpcPriority' connection property. */ public static final String RPC_PRIORITY_NAME = "rpcPriority"; public static final String DDL_IN_TRANSACTION_MODE_PROPERTY_NAME = "ddlInTransactionMode"; + public static final String DEFAULT_SEQUENCE_KIND_PROPERTY_NAME = "defaultSequenceKind"; + /** Dialect to use for a connection. */ static final String DIALECT_PROPERTY_NAME = "dialect"; + /** Name of the 'databaseRole' connection property. */ public static final String DATABASE_ROLE_PROPERTY_NAME = "databaseRole"; + /** Name of the 'delay transaction start until first write' property. */ public static final String DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE_NAME = "delayTransactionStartUntilFirstWrite"; + /** Name of the 'keep transaction alive' property. */ public static final String KEEP_TRANSACTION_ALIVE_PROPERTY_NAME = "keepTransactionAlive"; + /** Name of the 'trackStackTraceOfSessionCheckout' connection property. */ public static final String TRACK_SESSION_LEAKS_PROPERTY_NAME = "trackSessionLeaks"; + /** Name of the 'trackStackTraceOfConnectionCreation' connection property. */ public static final String TRACK_CONNECTION_LEAKS_PROPERTY_NAME = "trackConnectionLeaks"; @@ -345,6 +335,7 @@ public String[] getValidValues() { "auto_batch_dml_update_count"; public static final String AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME = "auto_batch_dml_update_count_verification"; + public static final String BATCH_DML_UPDATE_COUNT_PROPERTY_NAME = "batch_dml_update_count"; private static final String GUARDED_CONNECTION_PROPERTY_ERROR_MESSAGE = "%s can only be used if the system property %s has been set to true. " @@ -364,200 +355,6 @@ static boolean isEnableTransactionalConnectionStateForPostgreSQL() { System.getProperty(ENABLE_TRANSACTIONAL_CONNECTION_STATE_FOR_POSTGRESQL_PROPERTY, "false")); } - /** - * All valid connection properties. - * - * @deprecated Replaced by {@link ConnectionProperties#CONNECTION_PROPERTIES} - */ - @Deprecated - public static final Set VALID_PROPERTIES = - Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - ConnectionProperty.createBooleanProperty( - AUTOCOMMIT_PROPERTY_NAME, - "Should the connection start in autocommit (true/false)", - DEFAULT_AUTOCOMMIT), - ConnectionProperty.createBooleanProperty( - READONLY_PROPERTY_NAME, - "Should the connection start in read-only mode (true/false)", - DEFAULT_READONLY), - ConnectionProperty.createBooleanProperty( - ROUTE_TO_LEADER_PROPERTY_NAME, - "Should read/write transactions and partitioned DML be routed to leader region (true/false)", - DEFAULT_ROUTE_TO_LEADER), - ConnectionProperty.createBooleanProperty( - RETRY_ABORTS_INTERNALLY_PROPERTY_NAME, - "Should the connection automatically retry Aborted errors (true/false)", - DEFAULT_RETRY_ABORTS_INTERNALLY), - ConnectionProperty.createBooleanProperty( - USE_VIRTUAL_THREADS_PROPERTY_NAME, - "Use a virtual thread instead of a platform thread for each connection (true/false). " - + "This option only has any effect if the application is running on Java 21 or higher. In all other cases, the option is ignored.", - DEFAULT_USE_VIRTUAL_THREADS), - ConnectionProperty.createBooleanProperty( - USE_VIRTUAL_GRPC_TRANSPORT_THREADS_PROPERTY_NAME, - "Use a virtual thread instead of a platform thread for the gRPC executor (true/false). " - + "This option only has any effect if the application is running on Java 21 or higher. In all other cases, the option is ignored.", - DEFAULT_USE_VIRTUAL_GRPC_TRANSPORT_THREADS), - ConnectionProperty.createStringProperty( - CREDENTIALS_PROPERTY_NAME, - "The location of the credentials file to use for this connection. If neither this property or encoded credentials are set, the connection will use the default Google Cloud credentials for the runtime environment."), - ConnectionProperty.createStringProperty( - ENCODED_CREDENTIALS_PROPERTY_NAME, - "Base64-encoded credentials to use for this connection. If neither this property or a credentials location are set, the connection will use the default Google Cloud credentials for the runtime environment."), - ConnectionProperty.createStringProperty( - CREDENTIALS_PROVIDER_PROPERTY_NAME, - "The class name of the com.google.api.gax.core.CredentialsProvider implementation that should be used to obtain credentials for connections."), - ConnectionProperty.createStringProperty( - OAUTH_TOKEN_PROPERTY_NAME, - "A valid pre-existing OAuth token to use for authentication for this connection. Setting this property will take precedence over any value set for a credentials file."), - ConnectionProperty.createStringProperty( - MIN_SESSIONS_PROPERTY_NAME, - "The minimum number of sessions in the backing session pool. The default is 100."), - ConnectionProperty.createStringProperty( - MAX_SESSIONS_PROPERTY_NAME, - "The maximum number of sessions in the backing session pool. The default is 400."), - ConnectionProperty.createStringProperty( - NUM_CHANNELS_PROPERTY_NAME, - "The number of gRPC channels to use to communicate with Cloud Spanner. The default is 4."), - ConnectionProperty.createStringProperty( - ENDPOINT_PROPERTY_NAME, - "The endpoint that the JDBC driver should connect to. " - + "The default is the default Spanner production endpoint when autoConfigEmulator=false, " - + "and the default Spanner emulator endpoint (localhost:9010) when autoConfigEmulator=true. " - + "This property takes precedence over any host name at the start of the connection URL."), - ConnectionProperty.createStringProperty( - CHANNEL_PROVIDER_PROPERTY_NAME, - "The name of the channel provider class. The name must reference an implementation of ExternalChannelProvider. If this property is not set, the connection will use the default grpc channel provider."), - ConnectionProperty.createBooleanProperty( - USE_PLAIN_TEXT_PROPERTY_NAME, - "Use a plain text communication channel (i.e. non-TLS) for communicating with the server (true/false). Set this value to true for communication with the Cloud Spanner emulator.", - DEFAULT_USE_PLAIN_TEXT), - ConnectionProperty.createStringProperty( - USER_AGENT_PROPERTY_NAME, - "The custom user-agent property name to use when communicating with Cloud Spanner. This property is intended for internal library usage, and should not be set by applications."), - ConnectionProperty.createStringProperty( - OPTIMIZER_VERSION_PROPERTY_NAME, - "Sets the default query optimizer version to use for this connection."), - ConnectionProperty.createStringProperty( - OPTIMIZER_STATISTICS_PACKAGE_PROPERTY_NAME, ""), - ConnectionProperty.createBooleanProperty( - "returnCommitStats", "", DEFAULT_RETURN_COMMIT_STATS), - ConnectionProperty.createStringProperty( - "maxCommitDelay", - "The maximum commit delay in milliseconds that should be applied to commit requests from this connection."), - ConnectionProperty.createBooleanProperty( - "autoConfigEmulator", - "Automatically configure the connection to try to connect to the Cloud Spanner emulator (true/false). " - + "The instance and database in the connection string will automatically be created if these do not yet exist on the emulator. " - + "Add dialect=postgresql to the connection string to make sure that the database that is created uses the PostgreSQL dialect.", - false), - ConnectionProperty.createBooleanProperty( - "useAutoSavepointsForEmulator", - "Automatically creates savepoints for each statement in a read/write transaction when using the Emulator. This is no longer needed when using Emulator version 1.5.23 or higher.", - false), - ConnectionProperty.createBooleanProperty( - LENIENT_PROPERTY_NAME, - "Silently ignore unknown properties in the connection string/properties (true/false)", - DEFAULT_LENIENT), - ConnectionProperty.createStringProperty( - RPC_PRIORITY_NAME, - "Sets the priority for all RPC invocations from this connection (HIGH/MEDIUM/LOW). The default is HIGH."), - ConnectionProperty.createStringProperty( - DDL_IN_TRANSACTION_MODE_PROPERTY_NAME, - "Sets the behavior of a connection when a DDL statement is executed in a read/write transaction. The default is " - + DEFAULT_DDL_IN_TRANSACTION_MODE - + "."), - ConnectionProperty.createStringProperty( - DIALECT_PROPERTY_NAME, - "Sets the dialect to use for new databases that are created by this connection."), - ConnectionProperty.createStringProperty( - DATABASE_ROLE_PROPERTY_NAME, - "Sets the database role to use for this connection. The default is privileges assigned to IAM role"), - ConnectionProperty.createBooleanProperty( - DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE_NAME, - "Enabling this option will delay the actual start of a read/write transaction until the first write operation is seen in that transaction. " - + "All reads that happen before the first write in a transaction will instead be executed as if the connection was in auto-commit mode. " - + "Enabling this option will make read/write transactions lose their SERIALIZABLE isolation level. Read operations that are executed after " - + "the first write operation in a read/write transaction will be executed using the read/write transaction. Enabling this mode can reduce locking " - + "and improve performance for applications that can handle the lower transaction isolation semantics.", - DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE), - ConnectionProperty.createBooleanProperty( - KEEP_TRANSACTION_ALIVE_PROPERTY_NAME, - "Enabling this option will trigger the connection to keep read/write transactions alive by executing a SELECT 1 query once every 10 seconds " - + "if no other statements are being executed. This option should be used with caution, as it can keep transactions alive and hold on to locks " - + "longer than intended. This option should typically be used for CLI-type application that might wait for user input for a longer period of time.", - DEFAULT_KEEP_TRANSACTION_ALIVE), - ConnectionProperty.createBooleanProperty( - TRACK_SESSION_LEAKS_PROPERTY_NAME, - "Capture the call stack of the thread that checked out a session of the session pool. This will " - + "pre-create a LeakedSessionException already when a session is checked out. This can be disabled, " - + "for example if a monitoring system logs the pre-created exception. " - + "If disabled, the LeakedSessionException will only be created when an " - + "actual session leak is detected. The stack trace of the exception will " - + "in that case not contain the call stack of when the session was checked out.", - DEFAULT_TRACK_SESSION_LEAKS), - ConnectionProperty.createBooleanProperty( - TRACK_CONNECTION_LEAKS_PROPERTY_NAME, - "Capture the call stack of the thread that created a connection. This will " - + "pre-create a LeakedConnectionException already when a connection is created. " - + "This can be disabled, for example if a monitoring system logs the pre-created exception. " - + "If disabled, the LeakedConnectionException will only be created when an " - + "actual connection leak is detected. The stack trace of the exception will " - + "in that case not contain the call stack of when the connection was created.", - DEFAULT_TRACK_CONNECTION_LEAKS), - ConnectionProperty.createBooleanProperty( - DATA_BOOST_ENABLED_PROPERTY_NAME, - "Enable data boost for all partitioned queries that are executed by this connection. " - + "This setting is only used for partitioned queries and is ignored by all other statements.", - DEFAULT_DATA_BOOST_ENABLED), - ConnectionProperty.createBooleanProperty( - AUTO_PARTITION_MODE_PROPERTY_NAME, - "Execute all queries on this connection as partitioned queries. " - + "Executing a query that cannot be partitioned will fail. " - + "Executing a query in a read/write transaction will also fail.", - DEFAULT_AUTO_PARTITION_MODE), - ConnectionProperty.createIntProperty( - MAX_PARTITIONS_PROPERTY_NAME, - "The max partitions hint value to use for partitioned queries. " - + "Use 0 if you do not want to specify a hint.", - DEFAULT_MAX_PARTITIONS), - ConnectionProperty.createIntProperty( - MAX_PARTITIONED_PARALLELISM_PROPERTY_NAME, - "The maximum number of partitions that will be executed in parallel " - + "for partitioned queries on this connection. Set this value to 0 to " - + "dynamically use the number of processors available in the runtime.", - DEFAULT_MAX_PARTITIONED_PARALLELISM), - ConnectionProperty.createBooleanProperty( - ENABLE_EXTENDED_TRACING_PROPERTY_NAME, - "Include the SQL string in the OpenTelemetry traces that are generated " - + "by this connection. The SQL string is added as the standard OpenTelemetry " - + "attribute 'db.statement'.", - DEFAULT_ENABLE_EXTENDED_TRACING), - ConnectionProperty.createBooleanProperty( - ENABLE_API_TRACING_PROPERTY_NAME, - "Add OpenTelemetry traces for each individual RPC call. Enable this " - + "to get a detailed view of each RPC that is being executed by your application, " - + "or if you want to debug potential latency problems caused by RPCs that are " - + "being retried.", - DEFAULT_ENABLE_API_TRACING), - ConnectionProperty.createBooleanProperty( - ENABLE_END_TO_END_TRACING_PROPERTY_NAME, - "Enable end-to-end tracing (true/false) to generate traces for both the time " - + "that is spent in the client, as well as time that is spent in the Spanner server. " - + "Server side traces can only go to Google Cloud Trace, so to see end to end traces, " - + "the application should configure an exporter that exports the traces to Google Cloud Trace.", - DEFAULT_ENABLE_END_TO_END_TRACING)))); - - private static final Set INTERNAL_PROPERTIES = - Collections.unmodifiableSet( - new HashSet<>( - Collections.singletonList( - ConnectionProperty.createStringProperty(USER_AGENT_PROPERTY_NAME, "")))); - private static final Set INTERNAL_VALID_PROPERTIES = - Sets.union(VALID_PROPERTIES, INTERNAL_PROPERTIES); - /** * Gets the default project-id for the current environment as defined by {@link * ServiceOptions#getDefaultProjectId()}, and if none could be found, the project-id of the given @@ -621,18 +418,24 @@ public static class Builder { Collections.emptyList(); private SpannerOptionsConfigurator configurator; private OpenTelemetry openTelemetry; + private Ticker ticker = Deadline.getSystemTicker(); private Builder() {} /** Spanner {@link ConnectionOptions} URI format. */ public static final String SPANNER_URI_FORMAT = - "(?:cloudspanner:)(?//[\\w.-]+(?:\\.[\\w\\.-]+)*[\\w\\-\\._~:/?#\\[\\]@!\\$&'\\(\\)\\*\\+,;=.]+)?/projects/(?(([a-z]|[-.:]|[0-9])+|(DEFAULT_PROJECT_ID)))(/instances/(?([a-z]|[-]|[0-9])+)(/databases/(?([a-z]|[-]|[_]|[0-9])+))?)?(?:[?|;].*)?"; + "(?:(?:spanner|cloudspanner):)(?//[\\w.-]+(?:\\.[\\w\\.-]+)*[\\w\\-\\._~:/?#\\[\\]@!\\$&'\\(\\)\\*\\+,;=.]+)?/projects/(?(([a-z]|[-.:]|[0-9])+|(DEFAULT_PROJECT_ID)))(/instances/(?([a-z]|[-]|[0-9])+)(/databases/(?([a-z]|[-]|[_]|[0-9])+))?)?(?:[?|;].*)?"; + public static final String EXTERNAL_HOST_FORMAT = + "(?:(?:spanner|cloudspanner):)(?//[\\w.-]+(?::\\d+)?)(/instances/(?[a-z0-9-]+))?(/databases/(?[a-z0-9_-]+))(?:[?;].*)?"; private static final String SPANNER_URI_REGEX = "(?is)^" + SPANNER_URI_FORMAT + "$"; @VisibleForTesting static final Pattern SPANNER_URI_PATTERN = Pattern.compile(SPANNER_URI_REGEX); + @VisibleForTesting + static final Pattern EXTERNAL_HOST_PATTERN = Pattern.compile(EXTERNAL_HOST_FORMAT); + private static final String HOST_GROUP = "HOSTGROUP"; private static final String PROJECT_GROUP = "PROJECTGROUP"; private static final String INSTANCE_GROUP = "INSTANCEGROUP"; @@ -643,6 +446,10 @@ private boolean isValidUri(String uri) { return SPANNER_URI_PATTERN.matcher(uri).matches(); } + private boolean isValidExperimentalHostUri(String uri) { + return EXTERNAL_HOST_PATTERN.matcher(uri).matches(); + } + /** * Sets the URI of the Cloud Spanner database to connect to. A connection URI must be specified * in this format: @@ -700,9 +507,13 @@ private boolean isValidUri(String uri) { * @return this builder */ public Builder setUri(String uri) { - Preconditions.checkArgument( - isValidUri(uri), - "The specified URI is not a valid Cloud Spanner connection URI. Please specify a URI in the format \"cloudspanner:[//host[:port]]/projects/project-id[/instances/instance-id[/databases/database-name]][\\?property-name=property-value[;property-name=property-value]*]?\""); + if (!isValidExperimentalHostUri(uri)) { + Preconditions.checkArgument( + isValidUri(uri), + "The specified URI is not a valid Cloud Spanner connection URI. Please specify a URI in" + + " the format" + + " \"cloudspanner:[//host[:port]]/projects/project-id[/instances/instance-id[/databases/database-name]][\\?property-name=property-value[;property-name=property-value]*]?\""); + } ConnectionPropertyValue value = cast(ConnectionProperties.parseValues(uri).get(LENIENT.getKey())); checkValidProperties(value != null && value.getValue(), uri); @@ -779,7 +590,17 @@ Builder setCredentials(Credentials credentials) { return this; } - Builder setStatementExecutorType(StatementExecutorType statementExecutorType) { + @VisibleForTesting + Builder setTicker(Ticker ticker) { + this.ticker = Preconditions.checkNotNull(ticker); + return this; + } + + /** + * Sets the executor type to use for connections. See {@link StatementExecutorType} for more + * information on what the different options mean. + */ + public Builder setStatementExecutorType(StatementExecutorType statementExecutorType) { this.statementExecutorType = statementExecutorType; return this; } @@ -794,7 +615,9 @@ public Builder setTracingPrefix(String tracingPrefix) { return this; } - /** @return the {@link ConnectionOptions} */ + /** + * @return the {@link ConnectionOptions} + */ public ConnectionOptions build() { Preconditions.checkState(this.uri != null, "Connection URI is required"); return new ConnectionOptions(this); @@ -827,9 +650,17 @@ public static Builder newBuilder() { private final OpenTelemetry openTelemetry; private final List statementExecutionInterceptors; private final SpannerOptionsConfigurator configurator; + private final Ticker ticker; private ConnectionOptions(Builder builder) { - Matcher matcher = Builder.SPANNER_URI_PATTERN.matcher(builder.uri); + Matcher matcher; + boolean isExperimentalHostPattern = false; + if (builder.isValidExperimentalHostUri(builder.uri)) { + matcher = Builder.EXTERNAL_HOST_PATTERN.matcher(builder.uri); + isExperimentalHostPattern = true; + } else { + matcher = Builder.SPANNER_URI_PATTERN.matcher(builder.uri); + } Preconditions.checkArgument( matcher.find(), String.format("Invalid connection URI specified: %s", builder.uri)); @@ -848,22 +679,11 @@ private ConnectionOptions(Builder builder) { this.statementExecutionInterceptors = Collections.unmodifiableList(builder.statementExecutionInterceptors); this.configurator = builder.configurator; + this.ticker = builder.ticker; // Create the initial connection state from the parsed properties in the connection URL. this.initialConnectionState = new ConnectionState(connectionPropertyValues); - // Check that at most one of credentials location, encoded credentials, credentials provider and - // OUAuth token has been specified in the connection URI. - Preconditions.checkArgument( - Stream.of( - getInitialConnectionPropertyValue(CREDENTIALS_URL), - getInitialConnectionPropertyValue(ENCODED_CREDENTIALS), - getInitialConnectionPropertyValue(CREDENTIALS_PROVIDER), - getInitialConnectionPropertyValue(OAUTH_TOKEN)) - .filter(Objects::nonNull) - .count() - <= 1, - "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and OAuth token"); checkGuardedProperty( getInitialConnectionPropertyValue(ENCODED_CREDENTIALS), ENABLE_ENCODED_CREDENTIALS_SYSTEM_PROPERTY, @@ -878,6 +698,23 @@ private ConnectionOptions(Builder builder) { getInitialConnectionPropertyValue(CHANNEL_PROVIDER), ENABLE_CHANNEL_PROVIDER_SYSTEM_PROPERTY, CHANNEL_PROVIDER_PROPERTY_NAME); + checkGuardedProperty( + getInitialConnectionPropertyValue(GRPC_INTERCEPTOR_PROVIDER), + ENABLE_GRPC_INTERCEPTOR_PROVIDER_SYSTEM_PROPERTY, + GRPC_INTERCEPTOR_PROVIDER.getName()); + // Check that at most one of credentials location, encoded credentials, credentials provider and + // OUAuth token has been specified in the connection URI. + Preconditions.checkArgument( + Stream.of( + getInitialConnectionPropertyValue(CREDENTIALS_URL), + getInitialConnectionPropertyValue(ENCODED_CREDENTIALS), + getInitialConnectionPropertyValue(CREDENTIALS_PROVIDER), + getInitialConnectionPropertyValue(OAUTH_TOKEN)) + .filter(Objects::nonNull) + .count() + <= 1, + "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and OAuth" + + " token"); boolean usePlainText = getInitialConnectionPropertyValue(AUTO_CONFIG_EMULATOR) @@ -889,6 +726,8 @@ private ConnectionOptions(Builder builder) { getInitialConnectionPropertyValue(AUTO_CONFIG_EMULATOR), usePlainText, System.getenv()); + GoogleCredentials defaultExperimentalHostCredentials = + SpannerOptions.getDefaultExperimentalCredentialsFromSysEnv(); // Using credentials on a plain text connection is not allowed, so if the user has not specified // any credentials and is using a plain text connection, we should not try to get the // credentials from the environment, but default to NoCredentials. @@ -903,6 +742,9 @@ && getInitialConnectionPropertyValue(OAUTH_TOKEN) == null this.credentials = new GoogleCredentials( new AccessToken(getInitialConnectionPropertyValue(OAUTH_TOKEN), null)); + } else if ((isExperimentalHostPattern || isExperimentalHost()) + && defaultExperimentalHostCredentials != null) { + this.credentials = defaultExperimentalHostCredentials; } else if (getInitialConnectionPropertyValue(CREDENTIALS_PROVIDER) != null) { try { this.credentials = getInitialConnectionPropertyValue(CREDENTIALS_PROVIDER).getCredentials(); @@ -943,16 +785,25 @@ && getInitialConnectionPropertyValue(OAUTH_TOKEN) == null this.sessionPoolOptions = sessionPoolOptionsBuilder.build(); } else if (builder.sessionPoolOptions != null) { this.sessionPoolOptions = builder.sessionPoolOptions; + } else if (isExperimentalHostPattern || isExperimentalHost()) { + this.sessionPoolOptions = + SessionPoolOptions.newBuilder().setExperimentalHost().setAutoDetectDialect(true).build(); } else { this.sessionPoolOptions = SessionPoolOptions.newBuilder().setAutoDetectDialect(true).build(); } - String projectId = matcher.group(Builder.PROJECT_GROUP); + String projectId = EXPERIMENTAL_HOST_PROJECT_ID; + String instanceId = matcher.group(Builder.INSTANCE_GROUP); + if (!isExperimentalHost() && !isExperimentalHostPattern) { + projectId = matcher.group(Builder.PROJECT_GROUP); + } else if (instanceId == null && isExperimentalHost()) { + instanceId = DEFAULT_EXPERIMENTAL_HOST_INSTANCE_ID; + } if (Builder.DEFAULT_PROJECT_ID_PLACEHOLDER.equalsIgnoreCase(projectId)) { projectId = getDefaultProjectId(this.credentials); } this.projectId = projectId; - this.instanceId = matcher.group(Builder.INSTANCE_GROUP); + this.instanceId = instanceId; this.databaseName = matcher.group(Builder.DATABASE_GROUP); } @@ -963,7 +814,7 @@ static String determineHost( boolean autoConfigEmulator, boolean usePlainText, Map environment) { - String host; + String host = null; if (Objects.equals(endpoint, DEFAULT_ENDPOINT) && matcher.group(Builder.HOST_GROUP) == null) { if (autoConfigEmulator) { if (Strings.isNullOrEmpty(environment.get(SPANNER_EMULATOR_HOST_ENV_VAR))) { @@ -971,8 +822,6 @@ static String determineHost( } else { return PLAIN_TEXT_PROTOCOL + "//" + environment.get(SPANNER_EMULATOR_HOST_ENV_VAR); } - } else { - return DEFAULT_HOST; } } else if (!Objects.equals(endpoint, DEFAULT_ENDPOINT)) { // Add '//' at the start of the endpoint to conform to the standard URL specification. @@ -981,6 +830,13 @@ static String determineHost( // The leading '//' is already included in the regex for the connection URL, so we don't need // to add the leading '//' to the host name here. host = matcher.group(Builder.HOST_GROUP); + if (Builder.EXTERNAL_HOST_FORMAT.equals(matcher.pattern().pattern()) + && !host.matches(".*:\\d+$")) { + host = String.format("%s:15000", host); + } + } + if (host == null) { + return null; } if (usePlainText) { return PLAIN_TEXT_PROTOCOL + host; @@ -1000,6 +856,10 @@ SpannerOptionsConfigurator getConfigurator() { return configurator; } + Ticker getTicker() { + return ticker; + } + @VisibleForTesting CredentialsService getCredentialsService() { return CredentialsService.INSTANCE; @@ -1045,7 +905,8 @@ static String checkValidProperties(boolean lenient, String uri) { Preconditions.checkArgument( invalidProperties.length() == 0, String.format( - "Invalid properties found in connection URI. Add lenient=true to the connection string to ignore unknown properties. Invalid properties: %s", + "Invalid properties found in connection URI. Add lenient=true to the connection" + + " string to ignore unknown properties. Invalid properties: %s", invalidProperties)); return null; } @@ -1114,7 +975,11 @@ CredentialsProvider getCredentialsProvider() { return getInitialConnectionPropertyValue(CREDENTIALS_PROVIDER); } - StatementExecutorType getStatementExecutorType() { + /** + * Returns the executor type that is used by connections that are created from this {@link + * ConnectionOptions} instance. + */ + public StatementExecutorType getStatementExecutorType() { return this.statementExecutorType; } @@ -1146,6 +1011,26 @@ public Integer getNumChannels() { return getInitialConnectionPropertyValue(NUM_CHANNELS); } + /** Whether dynamic channel pooling is enabled for this connection. */ + public Boolean isEnableDynamicChannelPool() { + return getInitialConnectionPropertyValue(ENABLE_DYNAMIC_CHANNEL_POOL); + } + + /** The minimum number of channels in the dynamic channel pool. */ + public Integer getDcpMinChannels() { + return getInitialConnectionPropertyValue(DCP_MIN_CHANNELS); + } + + /** The maximum number of channels in the dynamic channel pool. */ + public Integer getDcpMaxChannels() { + return getInitialConnectionPropertyValue(DCP_MAX_CHANNELS); + } + + /** The initial number of channels in the dynamic channel pool. */ + public Integer getDcpInitialChannels() { + return getInitialConnectionPropertyValue(DCP_INITIAL_CHANNELS); + } + /** Calls the getChannelProvider() method from the supplied class. */ public TransportChannelProvider getChannelProvider() { String channelProvider = getInitialConnectionPropertyValue(CHANNEL_PROVIDER); @@ -1153,7 +1038,7 @@ public TransportChannelProvider getChannelProvider() { return null; } try { - URL url = new URL(host); + URL url = new URL(MoreObjects.firstNonNull(host, DEFAULT_HOST)); ExternalChannelProvider provider = ExternalChannelProvider.class.cast(Class.forName(channelProvider).newInstance()); return provider.getChannelProvider(url.getHost(), url.getPort()); @@ -1166,6 +1051,19 @@ public TransportChannelProvider getChannelProvider() { } } + String getGrpcInterceptorProviderName() { + return getInitialConnectionPropertyValue(GRPC_INTERCEPTOR_PROVIDER); + } + + /** Returns the gRPC interceptor provider that has been configured. */ + public GrpcInterceptorProvider getGrpcInterceptorProvider() { + String interceptorProvider = getInitialConnectionPropertyValue(GRPC_INTERCEPTOR_PROVIDER); + if (interceptorProvider == null) { + return null; + } + return GrpcInterceptorProviderConverter.INSTANCE.convert(interceptorProvider); + } + /** * The database role that is used for this connection. Assigning a role to a connection can be * used to for example restrict the access of a connection to a specific set of tables. @@ -1263,6 +1161,26 @@ boolean isUsePlainText() { || getInitialConnectionPropertyValue(USE_PLAIN_TEXT); } + boolean isExperimentalHost() { + return getInitialConnectionPropertyValue(IS_EXPERIMENTAL_HOST); + } + + Boolean isEnableDirectAccess() { + return getInitialConnectionPropertyValue(ENABLE_DIRECT_ACCESS); + } + + String getUniverseDomain() { + return getInitialConnectionPropertyValue(UNIVERSE_DOMAIN); + } + + String getClientCertificate() { + return getInitialConnectionPropertyValue(CLIENT_CERTIFICATE); + } + + String getClientCertificateKey() { + return getInitialConnectionPropertyValue(CLIENT_KEY); + } + /** * The (custom) user agent string to use for this connection. If null, then the * default JDBC user agent string will be used. diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java index 0ca9b7256e2..5fa678afef5 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java @@ -21,27 +21,42 @@ import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_PARTITION_MODE_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.BATCH_DML_UPDATE_COUNT_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.CHANNEL_PROVIDER_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.CLIENT_CERTIFICATE_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.CLIENT_KEY_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.CREDENTIALS_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.CREDENTIALS_PROVIDER_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.DATABASE_ROLE_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.DATA_BOOST_ENABLED_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.DCP_INITIAL_CHANNELS_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.DCP_MAX_CHANNELS_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.DCP_MIN_CHANNELS_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.DDL_IN_TRANSACTION_MODE_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTOCOMMIT; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_PARTITION_MODE; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_BATCH_DML_UPDATE_COUNT; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CHANNEL_PROVIDER; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CLIENT_CERTIFICATE; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CLIENT_KEY; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CREDENTIALS; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DATABASE_ROLE; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DATA_BOOST_ENABLED; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DCP_INITIAL_CHANNELS; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DCP_MAX_CHANNELS; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DCP_MIN_CHANNELS; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DDL_IN_TRANSACTION_MODE; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DEFAULT_SEQUENCE_KIND; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENABLE_API_TRACING; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENABLE_DYNAMIC_CHANNEL_POOL; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENABLE_END_TO_END_TRACING; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENABLE_EXTENDED_TRACING; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENDPOINT; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_IS_EXPERIMENTAL_HOST; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_KEEP_TRANSACTION_ALIVE; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_LENIENT; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_MAX_PARTITIONED_PARALLELISM; @@ -57,6 +72,7 @@ import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_RETURN_COMMIT_STATS; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ROUTE_TO_LEADER; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_RPC_PRIORITY; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_SEQUENCE_KIND_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_TRACK_CONNECTION_LEAKS; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_TRACK_SESSION_LEAKS; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_USER_AGENT; @@ -66,10 +82,13 @@ import static com.google.cloud.spanner.connection.ConnectionOptions.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.DIALECT_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_API_TRACING_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_DYNAMIC_CHANNEL_POOL_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_END_TO_END_TRACING_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_EXTENDED_TRACING_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_GRPC_INTERCEPTOR_PROVIDER_SYSTEM_PROPERTY; import static com.google.cloud.spanner.connection.ConnectionOptions.ENCODED_CREDENTIALS_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENDPOINT_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.IS_EXPERIMENTAL_HOST_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.KEEP_TRANSACTION_ALIVE_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.LENIENT_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.MAX_PARTITIONED_PARALLELISM_PROPERTY_NAME; @@ -93,6 +112,7 @@ import static com.google.cloud.spanner.connection.ConnectionProperty.castProperty; import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.grpc.GrpcInterceptorProvider; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.DmlBatchUpdateCountVerificationFailedException; import com.google.cloud.spanner.Options.RpcPriority; @@ -104,28 +124,32 @@ import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.DdlInTransactionModeConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.DialectConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.DurationConverter; +import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.IsolationLevelConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.LongConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.NonNegativeIntegerConverter; +import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.ReadLockModeConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.ReadOnlyStalenessConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.RpcPriorityConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.SavepointSupportConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.StringValueConverter; import com.google.cloud.spanner.connection.ConnectionProperty.Context; import com.google.cloud.spanner.connection.DirectedReadOptionsUtil.DirectedReadOptionsConverter; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; -import java.util.Map; +import java.util.Arrays; +import java.util.stream.Collectors; -/** - * Utility class that defines all known connection properties. This class will eventually replace - * the list of {@link com.google.cloud.spanner.connection.ConnectionOptions.ConnectionProperty} in - * {@link ConnectionOptions}. - */ -class ConnectionProperties { +/** Utility class that defines all known connection properties. */ +public class ConnectionProperties { private static final ImmutableMap.Builder> CONNECTION_PROPERTIES_BUILDER = ImmutableMap.builder(); + private static final Boolean[] BOOLEANS = new Boolean[] {Boolean.TRUE, Boolean.FALSE}; + static final ConnectionProperty CONNECTION_STATE_TYPE = create( "connection_state_type", @@ -133,6 +157,7 @@ class ConnectionProperties { + "If no value is set, then the database dialect default will be used, " + "which is NON_TRANSACTIONAL for GoogleSQL and TRANSACTIONAL for PostgreSQL.", null, + ConnectionState.Type.values(), ConnectionStateTypeConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty TRACING_PREFIX = @@ -148,76 +173,163 @@ class ConnectionProperties { LENIENT_PROPERTY_NAME, "Silently ignore unknown properties in the connection string/properties (true/false)", DEFAULT_LENIENT, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty ENDPOINT = create( ENDPOINT_PROPERTY_NAME, - "The endpoint that the JDBC driver should connect to. " - + "The default is the default Spanner production endpoint when autoConfigEmulator=false, " - + "and the default Spanner emulator endpoint (localhost:9010) when autoConfigEmulator=true. " - + "This property takes precedence over any host name at the start of the connection URL.", + "The endpoint that the JDBC driver should connect to. The default is the default Spanner" + + " production endpoint when autoConfigEmulator=false, and the default Spanner" + + " emulator endpoint (localhost:9010) when autoConfigEmulator=true. This property" + + " takes precedence over any host name at the start of the connection URL.", DEFAULT_ENDPOINT, StringValueConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty AUTO_CONFIG_EMULATOR = create( "autoConfigEmulator", - "Automatically configure the connection to try to connect to the Cloud Spanner emulator (true/false). " - + "The instance and database in the connection string will automatically be created if these do not yet exist on the emulator. " - + "Add dialect=postgresql to the connection string to make sure that the database that is created uses the PostgreSQL dialect.", + "Automatically configure the connection to try to connect to the Cloud Spanner emulator" + + " (true/false). The instance and database in the connection string will" + + " automatically be created if these do not yet exist on the emulator. Add" + + " dialect=postgresql to the connection string to make sure that the database that" + + " is created uses the PostgreSQL dialect.", false, + BOOLEANS, + BooleanConverter.INSTANCE, + Context.STARTUP); + static final ConnectionProperty ENABLE_DIRECT_ACCESS = + create( + "enableDirectAccess", + "Configure the connection to try to connect to Spanner using " + + "DirectPath (true/false). The client will try to connect to Spanner " + + "using a direct Google network connection. DirectPath will work only " + + "if the client is trying to establish a connection from a Google Cloud VM. " + + "Otherwise it will automatically fallback to the standard network path. " + + "NOTE: The default for this property is currently false, " + + "but this could be changed in the future.", + null, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); + static final ConnectionProperty UNIVERSE_DOMAIN = + create( + "universeDomain", + "Configure the connection to try to connect to Spanner using " + + "a different partner Google Universe than GDU (googleapis.com).", + "googleapis.com", + StringValueConverter.INSTANCE, + Context.STARTUP); static final ConnectionProperty USE_AUTO_SAVEPOINTS_FOR_EMULATOR = create( "useAutoSavepointsForEmulator", - "Automatically creates savepoints for each statement in a read/write transaction when using the Emulator. " - + "This is no longer needed when using Emulator version 1.5.23 or higher.", + "Automatically creates savepoints for each statement in a read/write transaction when" + + " using the Emulator. This is no longer needed when using Emulator version 1.5.23" + + " or higher.", false, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty USE_PLAIN_TEXT = create( USE_PLAIN_TEXT_PROPERTY_NAME, - "Use a plain text communication channel (i.e. non-TLS) for communicating with the server (true/false). Set this value to true for communication with the Cloud Spanner emulator.", + "Use a plain text communication channel (i.e. non-TLS) for communicating with the server" + + " (true/false). Set this value to true for communication with the Cloud Spanner" + + " emulator.", DEFAULT_USE_PLAIN_TEXT, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); - + static final ConnectionProperty IS_EXPERIMENTAL_HOST = + create( + IS_EXPERIMENTAL_HOST_PROPERTY_NAME, + "Set this value to true for communication with a Experimental Host.", + DEFAULT_IS_EXPERIMENTAL_HOST, + BOOLEANS, + BooleanConverter.INSTANCE, + Context.STARTUP); + static final ConnectionProperty CLIENT_CERTIFICATE = + create( + CLIENT_CERTIFICATE_PROPERTY_NAME, + "Specifies the file path to the client certificate required for establishing an mTLS" + + " connection.", + DEFAULT_CLIENT_CERTIFICATE, + StringValueConverter.INSTANCE, + Context.STARTUP); + static final ConnectionProperty CLIENT_KEY = + create( + CLIENT_KEY_PROPERTY_NAME, + "Specifies the file path to the client private key required for establishing an mTLS" + + " connection.", + DEFAULT_CLIENT_KEY, + StringValueConverter.INSTANCE, + Context.STARTUP); static final ConnectionProperty CREDENTIALS_URL = create( CREDENTIALS_PROPERTY_NAME, - "The location of the credentials file to use for this connection. If neither this property or encoded credentials are set, the connection will use the default Google Cloud credentials for the runtime environment.", + "The location of the credentials file to use for this connection. If neither this" + + " property or encoded credentials are set, the connection will use the default" + + " Google Cloud credentials for the runtime environment. WARNING: Using this" + + " property without proper validation can expose the application to security risks." + + " It is intended for use with credentials from a trusted source only, as it could" + + " otherwise allow end-users to supply arbitrary credentials. For more information," + + " seehttps://cloud.google.com/docs/authentication/client-libraries#external-credentials", DEFAULT_CREDENTIALS, StringValueConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty ENCODED_CREDENTIALS = create( ENCODED_CREDENTIALS_PROPERTY_NAME, - "Base64-encoded credentials to use for this connection. If neither this property or a credentials location are set, the connection will use the default Google Cloud credentials for the runtime environment.", + "Base64-encoded credentials to use for this connection. If neither this property or a" + + " credentials location are set, the connection will use the default Google Cloud" + + " credentials for the runtime environment. WARNING: Enabling this property without" + + " proper validation can expose the application to security risks. It is intended" + + " for use with credentials from a trusted source only, as it could otherwise allow" + + " end-users to supply arbitrary credentials. For more information, see" + + "https://cloud.google.com/docs/authentication/client-libraries#external-credentials", null, StringValueConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty OAUTH_TOKEN = create( OAUTH_TOKEN_PROPERTY_NAME, - "A valid pre-existing OAuth token to use for authentication for this connection. Setting this property will take precedence over any value set for a credentials file.", + "A valid pre-existing OAuth token to use for authentication for this connection. Setting" + + " this property will take precedence over any value set for a credentials file.", DEFAULT_OAUTH_TOKEN, StringValueConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty CREDENTIALS_PROVIDER = create( CREDENTIALS_PROVIDER_PROPERTY_NAME, - "The class name of the com.google.api.gax.core.CredentialsProvider implementation that should be used to obtain credentials for connections.", + "The class name of the com.google.api.gax.core.CredentialsProvider implementation that" + + " should be used to obtain credentials for connections.", null, CredentialsProviderConverter.INSTANCE, Context.STARTUP); + static final ConnectionProperty GRPC_INTERCEPTOR_PROVIDER = + create( + "grpc_interceptor_provider", + "The class name of a " + + GrpcInterceptorProvider.class.getName() + + " implementation that should be used to provide interceptors for the underlying" + + " Spanner client. This is a guarded property that can only be set if the Java" + + " System Property " + + ENABLE_GRPC_INTERCEPTOR_PROVIDER_SYSTEM_PROPERTY + + " has been set to true. This property should only be set to true on systems where" + + " an untrusted user cannot modify the connection URL, as using this property will" + + " dynamically invoke the constructor of the class specified. This means that any" + + " user that can modify the connection URL, can also dynamically invoke code on the" + + " host where the application is running.", + null, + StringValueConverter.INSTANCE, + Context.STARTUP); static final ConnectionProperty USER_AGENT = create( USER_AGENT_PROPERTY_NAME, - "The custom user-agent property name to use when communicating with Cloud Spanner. This property is intended for internal library usage, and should not be set by applications.", + "The custom user-agent property name to use when communicating with Cloud Spanner. This" + + " property is intended for internal library usage, and should not be set by" + + " applications.", DEFAULT_USER_AGENT, StringValueConverter.INSTANCE, Context.STARTUP); @@ -226,53 +338,63 @@ class ConnectionProperties { DIALECT_PROPERTY_NAME, "Sets the dialect to use for new databases that are created by this connection.", Dialect.GOOGLE_STANDARD_SQL, + Dialect.values(), DialectConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty TRACK_SESSION_LEAKS = create( TRACK_SESSION_LEAKS_PROPERTY_NAME, - "Capture the call stack of the thread that checked out a session of the session pool. This will " - + "pre-create a LeakedSessionException already when a session is checked out. This can be disabled, " - + "for example if a monitoring system logs the pre-created exception. " - + "If disabled, the LeakedSessionException will only be created when an " - + "actual session leak is detected. The stack trace of the exception will " - + "in that case not contain the call stack of when the session was checked out.", + "Capture the call stack of the thread that checked out a session of the session pool." + + " This will pre-create a LeakedSessionException already when a session is checked" + + " out. This can be disabled, for example if a monitoring system logs the" + + " pre-created exception. If disabled, the LeakedSessionException will only be" + + " created when an actual session leak is detected. The stack trace of the exception" + + " will in that case not contain the call stack of when the session was checked" + + " out.", DEFAULT_TRACK_SESSION_LEAKS, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty TRACK_CONNECTION_LEAKS = create( TRACK_CONNECTION_LEAKS_PROPERTY_NAME, - "Capture the call stack of the thread that created a connection. This will " - + "pre-create a LeakedConnectionException already when a connection is created. " - + "This can be disabled, for example if a monitoring system logs the pre-created exception. " - + "If disabled, the LeakedConnectionException will only be created when an " - + "actual connection leak is detected. The stack trace of the exception will " - + "in that case not contain the call stack of when the connection was created.", + "Capture the call stack of the thread that created a connection. This will pre-create a" + + " LeakedConnectionException already when a connection is created. This can be" + + " disabled, for example if a monitoring system logs the pre-created exception. If" + + " disabled, the LeakedConnectionException will only be created when an actual" + + " connection leak is detected. The stack trace of the exception will in that case" + + " not contain the call stack of when the connection was created.", DEFAULT_TRACK_CONNECTION_LEAKS, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty ROUTE_TO_LEADER = create( ROUTE_TO_LEADER_PROPERTY_NAME, - "Should read/write transactions and partitioned DML be routed to leader region (true/false)", + "Should read/write transactions and partitioned DML be routed to leader region" + + " (true/false)", DEFAULT_ROUTE_TO_LEADER, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty USE_VIRTUAL_THREADS = create( USE_VIRTUAL_THREADS_PROPERTY_NAME, - "Use a virtual thread instead of a platform thread for each connection (true/false). " - + "This option only has any effect if the application is running on Java 21 or higher. In all other cases, the option is ignored.", + "Use a virtual thread instead of a platform thread for each connection (true/false). This" + + " option only has any effect if the application is running on Java 21 or higher. In" + + " all other cases, the option is ignored.", DEFAULT_USE_VIRTUAL_THREADS, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty USE_VIRTUAL_GRPC_TRANSPORT_THREADS = create( USE_VIRTUAL_GRPC_TRANSPORT_THREADS_PROPERTY_NAME, - "Use a virtual thread instead of a platform thread for the gRPC executor (true/false). " - + "This option only has any effect if the application is running on Java 21 or higher. In all other cases, the option is ignored.", + "Use a virtual thread instead of a platform thread for the gRPC executor (true/false)." + + " This option only has any effect if the application is running on Java 21 or" + + " higher. In all other cases, the option is ignored.", DEFAULT_USE_VIRTUAL_GRPC_TRANSPORT_THREADS, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty ENABLE_EXTENDED_TRACING = @@ -282,6 +404,7 @@ class ConnectionProperties { + "by this connection. The SQL string is added as the standard OpenTelemetry " + "attribute 'db.statement'.", DEFAULT_ENABLE_EXTENDED_TRACING, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty ENABLE_API_TRACING = @@ -292,16 +415,19 @@ class ConnectionProperties { + "or if you want to debug potential latency problems caused by RPCs that are " + "being retried.", DEFAULT_ENABLE_API_TRACING, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty ENABLE_END_TO_END_TRACING = create( ENABLE_END_TO_END_TRACING_PROPERTY_NAME, - "Enable end-to-end tracing (true/false) to generate traces for both the time " - + "that is spent in the client, as well as time that is spent in the Spanner server. " - + "Server side traces can only go to Google Cloud Trace, so to see end to end traces, " - + "the application should configure an exporter that exports the traces to Google Cloud Trace.", + "Enable end-to-end tracing (true/false) to generate traces for both the time that is" + + " spent in the client, as well as time that is spent in the Spanner server. Server" + + " side traces can only go to Google Cloud Trace, so to see end to end traces, the" + + " application should configure an exporter that exports the traces to Google Cloud" + + " Trace.", DEFAULT_ENABLE_END_TO_END_TRACING, + BOOLEANS, BooleanConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty MIN_SESSIONS = @@ -325,17 +451,59 @@ class ConnectionProperties { DEFAULT_NUM_CHANNELS, NonNegativeIntegerConverter.INSTANCE, Context.STARTUP); + static final ConnectionProperty ENABLE_DYNAMIC_CHANNEL_POOL = + create( + ENABLE_DYNAMIC_CHANNEL_POOL_PROPERTY_NAME, + "Enable dynamic channel pooling for automatic gRPC channel scaling. When enabled, the " + + "client will automatically scale the number of channels based on load. Setting " + + "numChannels will disable dynamic channel pooling even if this is set to true. " + + "The default is currently false (disabled), but this may change to true in a " + + "future version. Set this property explicitly to ensure consistent behavior.", + DEFAULT_ENABLE_DYNAMIC_CHANNEL_POOL, + BOOLEANS, + BooleanConverter.INSTANCE, + Context.STARTUP); + static final ConnectionProperty DCP_MIN_CHANNELS = + create( + DCP_MIN_CHANNELS_PROPERTY_NAME, + "The minimum number of channels in the dynamic channel pool. Only used when " + + "enableDynamicChannelPool is true. The default is " + + "SpannerOptions.DEFAULT_DYNAMIC_POOL_MIN_CHANNELS (2).", + DEFAULT_DCP_MIN_CHANNELS, + NonNegativeIntegerConverter.INSTANCE, + Context.STARTUP); + static final ConnectionProperty DCP_MAX_CHANNELS = + create( + DCP_MAX_CHANNELS_PROPERTY_NAME, + "The maximum number of channels in the dynamic channel pool. Only used when " + + "enableDynamicChannelPool is true. The default is " + + "SpannerOptions.DEFAULT_DYNAMIC_POOL_MAX_CHANNELS (10).", + DEFAULT_DCP_MAX_CHANNELS, + NonNegativeIntegerConverter.INSTANCE, + Context.STARTUP); + static final ConnectionProperty DCP_INITIAL_CHANNELS = + create( + DCP_INITIAL_CHANNELS_PROPERTY_NAME, + "The initial number of channels in the dynamic channel pool. Only used when " + + "enableDynamicChannelPool is true. The default is " + + "SpannerOptions.DEFAULT_DYNAMIC_POOL_INITIAL_SIZE (4).", + DEFAULT_DCP_INITIAL_CHANNELS, + NonNegativeIntegerConverter.INSTANCE, + Context.STARTUP); static final ConnectionProperty CHANNEL_PROVIDER = create( CHANNEL_PROVIDER_PROPERTY_NAME, - "The name of the channel provider class. The name must reference an implementation of ExternalChannelProvider. If this property is not set, the connection will use the default grpc channel provider.", + "The name of the channel provider class. The name must reference an implementation of" + + " ExternalChannelProvider. If this property is not set, the connection will use the" + + " default grpc channel provider.", DEFAULT_CHANNEL_PROVIDER, StringValueConverter.INSTANCE, Context.STARTUP); static final ConnectionProperty DATABASE_ROLE = create( DATABASE_ROLE_PROPERTY_NAME, - "Sets the database role to use for this connection. The default is privileges assigned to IAM role", + "Sets the database role to use for this connection. The default is privileges assigned to" + + " IAM role", DEFAULT_DATABASE_ROLE, StringValueConverter.INSTANCE, Context.STARTUP); @@ -345,6 +513,7 @@ class ConnectionProperties { AUTOCOMMIT_PROPERTY_NAME, "Should the connection start in autocommit (true/false)", DEFAULT_AUTOCOMMIT, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); static final ConnectionProperty READONLY = @@ -352,13 +521,80 @@ class ConnectionProperties { READONLY_PROPERTY_NAME, "Should the connection start in read-only mode (true/false)", DEFAULT_READONLY, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); + static final ConnectionProperty DEFAULT_ISOLATION_LEVEL = + create( + "default_isolation_level", + "The transaction isolation level that is used by default for read/write transactions. The" + + " default is isolation_level_unspecified, which means that the connection will use" + + " the default isolation level of the database that it is connected to.", + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + new IsolationLevel[] { + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + IsolationLevel.SERIALIZABLE, + IsolationLevel.REPEATABLE_READ + }, + IsolationLevelConverter.INSTANCE, + Context.USER); + static final ConnectionProperty READ_LOCK_MODE = + create( + "read_lock_mode", + "This option controls the locking behavior for read operations and queries within a" + + " read/write transaction. It works in conjunction with the transaction's isolation" + + " level.\n\n" + + "PESSIMISTIC: Read locks are acquired immediately on read. This mode only applies" + + " to SERIALIZABLE isolation. This mode prevents concurrent modifications by locking" + + " data throughout the transaction. This reduces commit-time aborts due to" + + " conflicts, but can increase how long transactions wait for locks and the overall" + + " contention.\n\n" + + "OPTIMISTIC: Locks for reads within the transaction are not acquired on read." + + " Instead, the locks are acquired on commit to validate that read/queried data has" + + " not changed since the transaction started. If a conflict is detected, the" + + " transaction will fail. This mode only applies to SERIALIZABLE isolation. This" + + " mode defers locking until commit, which can reduce contention and improve" + + " throughput. However, be aware that this increases the risk of transaction aborts" + + " if there's significant write competition on the same data.\n\n" + + "READ_LOCK_MODE_UNSPECIFIED: This is the default if no mode is set. The locking" + + " behavior depends on the isolation level:\n\n" + + "REPEATABLE_READ: Locking semantics default to OPTIMISTIC. However, validation" + + " checks at commit are only performed for queries using SELECT FOR UPDATE," + + " statements with {@code LOCK_SCANNED_RANGES} hints, and DML statements.\n\n" + + "For all other isolation levels: If the read lock mode is not set, it defaults to" + + " PESSIMISTIC locking.", + ReadLockMode.READ_LOCK_MODE_UNSPECIFIED, + Arrays.stream(ReadLockMode.values()) + .filter(mode -> !mode.equals(ReadLockMode.UNRECOGNIZED)) + .collect(Collectors.toList()) + .toArray(new ReadLockMode[0]), + ReadLockModeConverter.INSTANCE, + Context.USER); + static final ConnectionProperty STATEMENT_TIMEOUT = + create( + "statement_timeout", + "Adds a timeout to all statements executed on this connection. " + + "This property is only used when a statement timeout is specified.", + null, + null, + DurationConverter.INSTANCE, + Context.USER); + static final ConnectionProperty TRANSACTION_TIMEOUT = + create( + "transaction_timeout", + "Timeout for read/write transactions.", + null, + null, + DurationConverter.INSTANCE, + Context.USER); static final ConnectionProperty AUTOCOMMIT_DML_MODE = create( "autocommit_dml_mode", - "Should the connection automatically retry Aborted errors (true/false)", + "Determines the transaction type that is used to execute " + + "DML statements when the connection is in auto-commit mode.", AutocommitDmlMode.TRANSACTIONAL, + // Add 'null' as a valid value. + Arrays.copyOf(AutocommitDmlMode.values(), AutocommitDmlMode.values().length + 1), AutocommitDmlModeConverter.INSTANCE, Context.USER); static final ConnectionProperty RETRY_ABORTS_INTERNALLY = @@ -371,6 +607,7 @@ class ConnectionProperties { RETRY_ABORTS_INTERNALLY_PROPERTY_NAME, "Should the connection automatically retry Aborted errors (true/false)", DEFAULT_RETRY_ABORTS_INTERNALLY, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); static final ConnectionProperty RETURN_COMMIT_STATS = @@ -378,26 +615,36 @@ class ConnectionProperties { "returnCommitStats", "Request that Spanner returns commit statistics for read/write transactions (true/false)", DEFAULT_RETURN_COMMIT_STATS, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); static final ConnectionProperty DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = create( DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE_NAME, - "Enabling this option will delay the actual start of a read/write transaction until the first write operation is seen in that transaction. " - + "All reads that happen before the first write in a transaction will instead be executed as if the connection was in auto-commit mode. " - + "Enabling this option will make read/write transactions lose their SERIALIZABLE isolation level. Read operations that are executed after " - + "the first write operation in a read/write transaction will be executed using the read/write transaction. Enabling this mode can reduce locking " - + "and improve performance for applications that can handle the lower transaction isolation semantics.", + "Enabling this option will delay the actual start of a read/write transaction until the" + + " first write operation is seen in that transaction. All reads that happen before" + + " the first write in a transaction will instead be executed as if the connection" + + " was in auto-commit mode. Enabling this option will make read/write transactions" + + " lose their SERIALIZABLE isolation level. Read operations that are executed after" + + " the first write operation in a read/write transaction will be executed using the" + + " read/write transaction. Enabling this mode can reduce locking and improve" + + " performance for applications that can handle the lower transaction isolation" + + " semantics.", DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); static final ConnectionProperty KEEP_TRANSACTION_ALIVE = create( KEEP_TRANSACTION_ALIVE_PROPERTY_NAME, - "Enabling this option will trigger the connection to keep read/write transactions alive by executing a SELECT 1 query once every 10 seconds " - + "if no other statements are being executed. This option should be used with caution, as it can keep transactions alive and hold on to locks " - + "longer than intended. This option should typically be used for CLI-type application that might wait for user input for a longer period of time.", + "Enabling this option will trigger the connection to keep read/write transactions alive" + + " by executing a SELECT 1 query once every 10 seconds if no other statements are" + + " being executed. This option should be used with caution, as it can keep" + + " transactions alive and hold on to locks longer than intended. This option should" + + " typically be used for CLI-type application that might wait for user input for a" + + " longer period of time.", DEFAULT_KEEP_TRANSACTION_ALIVE, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); @@ -415,14 +662,17 @@ class ConnectionProperties { + "Executing a query that cannot be partitioned will fail. " + "Executing a query in a read/write transaction will also fail.", DEFAULT_AUTO_PARTITION_MODE, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); static final ConnectionProperty DATA_BOOST_ENABLED = create( DATA_BOOST_ENABLED_PROPERTY_NAME, - "Enable data boost for all partitioned queries that are executed by this connection. " - + "This setting is only used for partitioned queries and is ignored by all other statements.", + "Enable data boost for all partitioned queries that are executed by this connection. This" + + " setting is only used for partitioned queries and is ignored by all other" + + " statements.", DEFAULT_DATA_BOOST_ENABLED, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); static final ConnectionProperty MAX_PARTITIONS = @@ -466,8 +716,11 @@ class ConnectionProperties { static final ConnectionProperty RPC_PRIORITY = create( RPC_PRIORITY_NAME, - "Sets the priority for all RPC invocations from this connection (HIGH/MEDIUM/LOW). The default is HIGH.", + "Sets the priority for all RPC invocations from this connection (HIGH/MEDIUM/LOW). The" + + " default is HIGH.", DEFAULT_RPC_PRIORITY, + // Add 'null' as a valid value. + Arrays.copyOf(RpcPriority.values(), RpcPriority.values().length + 1), RpcPriorityConverter.INSTANCE, Context.USER); static final ConnectionProperty SAVEPOINT_SUPPORT = @@ -475,6 +728,7 @@ class ConnectionProperties { "savepoint_support", "Determines the behavior of the connection when savepoints are used.", SavepointSupport.FAIL_AFTER_ROLLBACK, + SavepointSupport.values(), SavepointSupportConverter.INSTANCE, Context.USER); static final ConnectionProperty DDL_IN_TRANSACTION_MODE = @@ -482,8 +736,18 @@ class ConnectionProperties { DDL_IN_TRANSACTION_MODE_PROPERTY_NAME, "Determines how the connection should handle DDL statements in a read/write transaction.", DEFAULT_DDL_IN_TRANSACTION_MODE, + DdlInTransactionMode.values(), DdlInTransactionModeConverter.INSTANCE, Context.USER); + static final ConnectionProperty DEFAULT_SEQUENCE_KIND = + create( + DEFAULT_SEQUENCE_KIND_PROPERTY_NAME, + "The default sequence kind that should be used for the database. " + + "This property is only used when a DDL statement that requires a default " + + "sequence kind is executed on this connection.", + DEFAULT_DEFAULT_SEQUENCE_KIND, + StringValueConverter.INSTANCE, + Context.USER); static final ConnectionProperty MAX_COMMIT_DELAY = create( "maxCommitDelay", @@ -494,16 +758,16 @@ class ConnectionProperties { static final ConnectionProperty AUTO_BATCH_DML = create( AUTO_BATCH_DML_PROPERTY_NAME, - "Automatically buffer DML statements that are executed on this connection and " - + "execute them as one batch when a non-DML statement is executed, or when the current " - + "transaction is committed. The update count that is returned for DML statements that " - + "are buffered is by default 1. This default can be changed by setting the connection " - + "variable " + "Automatically buffer DML statements that are executed on this connection and execute" + + " them as one batch when a non-DML statement is executed, or when the current" + + " transaction is committed. The update count that is returned for DML statements" + + " that are buffered is by default 1. This default can be changed by setting the" + + " connection variable " + AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME - + " to value other than 1. " - + "This setting is only in read/write transactions. DML statements in auto-commit mode " - + "are executed directly.", + + " to value other than 1. This setting is only in read/write transactions. DML" + + " statements in auto-commit mode are executed directly.", DEFAULT_AUTO_BATCH_DML, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); static final ConnectionProperty AUTO_BATCH_DML_UPDATE_COUNT = @@ -511,10 +775,9 @@ class ConnectionProperties { AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME, "DML statements that are executed when " + AUTO_BATCH_DML_PROPERTY_NAME - + " is " - + "set to true, are not directly sent to Spanner, but are buffered in the client until " - + "the batch is flushed. This property determines the update count that is returned for " - + "these DML statements. The default is " + + " is set to true, are not directly sent to Spanner, but are buffered in the client" + + " until the batch is flushed. This property determines the update count that is" + + " returned for these DML statements. The default is " + DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT + ", as " + "that is the update count that is expected by most ORMs (e.g. Hibernate).", @@ -530,29 +793,66 @@ class ConnectionProperties { + ". " + "This value can be changed by setting the connection variable " + AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME - + ". The update counts that are returned by Spanner when the DML statements are actually " - + "executed are verified against the update counts that were returned when they were " - + "buffered. If these do not match, a " + + ". The update counts that are returned by Spanner when the DML statements are" + + " actually executed are verified against the update counts that were returned when" + + " they were buffered. If these do not match, a " + DmlBatchUpdateCountVerificationFailedException.class.getName() + " will be thrown. You can disable this verification by setting " + AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME + " to false.", DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION, + BOOLEANS, BooleanConverter.INSTANCE, Context.USER); + static final ConnectionProperty BATCH_DML_UPDATE_COUNT = + create( + BATCH_DML_UPDATE_COUNT_PROPERTY_NAME, + "The update count that is returned for DML statements that are executed in an " + + "explicit DML batch. The default is " + + DEFAULT_BATCH_DML_UPDATE_COUNT, + DEFAULT_BATCH_DML_UPDATE_COUNT, + LongConverter.INSTANCE, + Context.USER); + public static final ConnectionProperty UNKNOWN_LENGTH = + create( + "unknownLength", + "Spanner does not return the length of the selected columns in query results. When" + + " returning meta-data about these columns through functions like" + + " ResultSetMetaData.getColumnDisplaySize and ResultSetMetaData.getPrecision, we" + + " must provide a value. Various client tools and applications have different ideas" + + " about what they would like to see. This property specifies the length to return" + + " for types of unknown length.", + /* defaultValue= */ 50, + NonNegativeIntegerConverter.INSTANCE, + Context.USER); - static final Map> CONNECTION_PROPERTIES = + static final ImmutableMap> CONNECTION_PROPERTIES = CONNECTION_PROPERTIES_BUILDER.build(); + /** The list of all supported connection properties. */ + public static ImmutableList> VALID_CONNECTION_PROPERTIES = + ImmutableList.copyOf(ConnectionProperties.CONNECTION_PROPERTIES.values()); + + /** Utility method for creating a new core {@link ConnectionProperty}. */ + private static ConnectionProperty create( + String name, + String description, + T defaultValue, + ClientSideStatementValueConverter converter, + Context context) { + return create(name, description, defaultValue, null, converter, context); + } + /** Utility method for creating a new core {@link ConnectionProperty}. */ private static ConnectionProperty create( String name, String description, T defaultValue, + T[] validValues, ClientSideStatementValueConverter converter, Context context) { ConnectionProperty property = - ConnectionProperty.create(name, description, defaultValue, converter, context); + ConnectionProperty.create(name, description, defaultValue, validValues, converter, context); CONNECTION_PROPERTIES_BUILDER.put(property.getKey(), property); return property; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperty.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperty.java index c203d44203b..7c06774cf2f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperty.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperty.java @@ -37,12 +37,13 @@ * connection state is an opt-in. */ public class ConnectionProperty { + /** * Context indicates when a {@link ConnectionProperty} may be set. Each higher-ordinal value * includes the preceding values, meaning that a {@link ConnectionProperty} with {@link * Context#USER} can be set both at connection startup and during the connection's lifetime. */ - enum Context { + public enum Context { /** The property can only be set at startup of the connection. */ STARTUP, /** @@ -79,8 +80,20 @@ static ConnectionProperty create( T defaultValue, ClientSideStatementValueConverter converter, Context context) { + return create(name, description, defaultValue, null, converter, context); + } + + /** Utility method for creating a typed {@link ConnectionProperty}. */ + @Nonnull + static ConnectionProperty create( + @Nonnull String name, + String description, + T defaultValue, + T[] validValues, + ClientSideStatementValueConverter converter, + Context context) { return new ConnectionProperty<>( - null, name, description, defaultValue, null, converter, context); + null, name, description, defaultValue, validValues, converter, context); } /** @@ -163,35 +176,38 @@ ConnectionPropertyValue convert(@Nullable String stringValue) { return new ConnectionPropertyValue<>(this, convertedValue, convertedValue); } - String getKey() { + @Nonnull + public String getKey() { return this.key; } - boolean hasExtension() { + public boolean hasExtension() { return this.extension != null; } - String getExtension() { + public String getExtension() { return this.extension; } - String getName() { + @Nonnull + public String getName() { return this.name; } - String getDescription() { + @Nonnull + public String getDescription() { return this.description; } - T getDefaultValue() { + public T getDefaultValue() { return this.defaultValue; } - T[] getValidValues() { + public T[] getValidValues() { return this.validValues; } - Context getContext() { + public Context getContext() { return this.context; } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionState.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionState.java index b732d617c22..ad90fc574b5 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionState.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionState.java @@ -27,10 +27,12 @@ import com.google.cloud.spanner.connection.ConnectionProperty.Context; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Suppliers; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.function.Supplier; import javax.annotation.Nullable; @@ -63,6 +65,7 @@ enum Type { * used for {@link ConnectionState} that is marked as {@link Type#TRANSACTIONAL}. */ private Map> transactionProperties; + /** localProperties are the modified local properties during a transaction. */ private Map> localProperties; @@ -93,7 +96,7 @@ enum Type { castProperty(entry.getValue().getProperty()), cast(entry.getValue()).getValue(), Context.STARTUP, - /* inTransaction = */ false); + /* inTransaction= */ false); } } Type configuredType = getValue(CONNECTION_STATE_TYPE).getValue(); @@ -233,6 +236,7 @@ private void internalSetValue( T value, Map> currentProperties, Context context) { + checkValidValue(property, value); ConnectionPropertyValue newValue = cast(currentProperties.get(property.getKey())); if (newValue == null) { ConnectionPropertyValue existingValue = cast(properties.get(property.getKey())); @@ -249,6 +253,23 @@ private void internalSetValue( currentProperties.put(property.getKey(), newValue); } + static void checkValidValue(ConnectionProperty property, T value) { + if (property.getValidValues() == null || property.getValidValues().length == 0) { + return; + } + if (Arrays.stream(property.getValidValues()) + .noneMatch(validValue -> Objects.equals(validValue, value))) { + throw invalidParamValueError(property, value); + } + } + + /** Creates an exception for an invalid value for a connection property. */ + static SpannerException invalidParamValueError(ConnectionProperty property, T value) { + return SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, + String.format("invalid value \"%s\" for configuration property \"%s\"", value, property)); + } + /** Creates an exception for an unknown connection property. */ static SpannerException unknownParamError(ConnectionProperty property) { return SpannerExceptionFactory.newSpannerException( diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java index 458f117242e..6e1852298c0 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java @@ -16,11 +16,14 @@ package com.google.cloud.spanner.connection; +import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.Options.RpcPriority; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.TimestampBound; import com.google.cloud.spanner.connection.PgTransactionMode.IsolationLevel; import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; /** @@ -35,6 +38,7 @@ *

                The client side statements are defined in the ClientSideStatements.json file. */ interface ConnectionStatementExecutor { + Dialect getDialect(); StatementResult statementSetAutocommit(Boolean autocommit); @@ -56,6 +60,10 @@ interface ConnectionStatementExecutor { StatementResult statementShowStatementTimeout(); + StatementResult statementSetTransactionTimeout(Duration duration); + + StatementResult statementShowTransactionTimeout(); + StatementResult statementShowReadTimestamp(); StatementResult statementShowCommitTimestamp(); @@ -107,7 +115,7 @@ StatementResult statementSetDelayTransactionStartUntilFirstWrite( StatementResult statementShowExcludeTxnFromChangeStreams(); - StatementResult statementBeginTransaction(); + StatementResult statementBeginTransaction(TransactionOptions.IsolationLevel isolationLevel); StatementResult statementBeginPgTransaction(PgTransactionMode transactionMode); @@ -144,6 +152,8 @@ StatementResult statementSetPgSessionCharacteristicsTransactionMode( StatementResult statementShowTransactionIsolationLevel(); + StatementResult statementShowDefaultTransactionIsolation(); + StatementResult statementSetProtoDescriptors(byte[] protoDescriptors); StatementResult statementSetProtoDescriptorsFilePath(String filePath); @@ -176,6 +186,8 @@ StatementResult statementSetPgSessionCharacteristicsTransactionMode( StatementResult statementRunPartitionedQuery(Statement statement); + StatementResult statementSetBatchDmlUpdateCount(Long updateCount, Boolean local); + StatementResult statementSetAutoBatchDml(Boolean autoBatchDml); StatementResult statementShowAutoBatchDml(); @@ -187,4 +199,8 @@ StatementResult statementSetPgSessionCharacteristicsTransactionMode( StatementResult statementSetAutoBatchDmlUpdateCountVerification(Boolean verification); StatementResult statementShowAutoBatchDmlUpdateCountVerification(); + + StatementResult statementSetReadLockMode(ReadLockMode readLockMode); + + StatementResult statementShowReadLockMode(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java index a321c6a5cbc..2340fc4b1aa 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java @@ -29,6 +29,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTO_BATCH_DML_UPDATE_COUNT; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTO_PARTITION_MODE; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_BATCH_DML_UPDATE_COUNT; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DATA_BOOST_ENABLED; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DEFAULT_TRANSACTION_ISOLATION; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; @@ -43,6 +44,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_PROTO_DESCRIPTORS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_PROTO_DESCRIPTORS_FILE_PATH; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_READONLY; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_READ_LOCK_MODE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_READ_ONLY_STALENESS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_RETRY_ABORTS_INTERNALLY; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_RETURN_COMMIT_STATS; @@ -52,6 +54,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_STATEMENT_TIMEOUT; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_TRANSACTION_MODE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_TRANSACTION_TAG; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_TRANSACTION_TIMEOUT; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTOCOMMIT; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTOCOMMIT_DML_MODE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTO_BATCH_DML; @@ -61,6 +64,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_COMMIT_RESPONSE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_COMMIT_TIMESTAMP; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_DATA_BOOST_ENABLED; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_DEFAULT_TRANSACTION_ISOLATION; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_DIRECTED_READ; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_EXCLUDE_TXN_FROM_CHANGE_STREAMS; @@ -73,6 +77,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_PROTO_DESCRIPTORS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_PROTO_DESCRIPTORS_FILE_PATH; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READONLY; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READ_LOCK_MODE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READ_ONLY_STALENESS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READ_TIMESTAMP; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_RETRY_ABORTS_INTERNALLY; @@ -83,6 +88,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_STATEMENT_TIMEOUT; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_TRANSACTION_ISOLATION_LEVEL; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_TRANSACTION_TAG; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_TRANSACTION_TIMEOUT; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.START_BATCH_DDL; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.START_BATCH_DML; import static com.google.cloud.spanner.connection.StatementResultImpl.noResult; @@ -112,6 +118,8 @@ import com.google.spanner.v1.PlanNode; import com.google.spanner.v1.QueryPlan; import com.google.spanner.v1.RequestOptions; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; import java.util.ArrayList; import java.util.Collections; @@ -153,6 +161,11 @@ ConnectionImpl getConnection() { return connection; } + @Override + public Dialect getDialect() { + return getConnection().getDialect(); + } + @Override public StatementResult statementSetAutocommit(Boolean autocommit) { Preconditions.checkNotNull(autocommit); @@ -239,6 +252,24 @@ public StatementResult statementShowStatementTimeout() { SHOW_STATEMENT_TIMEOUT); } + @Override + public StatementResult statementSetTransactionTimeout(Duration duration) { + if (duration == null || duration.isZero()) { + getConnection().setTransactionTimeout(null); + } else { + getConnection().setTransactionTimeout(duration); + } + return noResult(SET_TRANSACTION_TIMEOUT); + } + + @Override + public StatementResult statementShowTransactionTimeout() { + return resultSet( + String.format("%sTRANSACTION_TIMEOUT", getNamespace(connection.getDialect())), + String.valueOf(getConnection().getTransactionTimeout()), + SHOW_TRANSACTION_TIMEOUT); + } + @Override public StatementResult statementShowReadTimestamp() { return resultSet( @@ -355,7 +386,7 @@ public StatementResult statementShowReturnCommitStats() { @Override public StatementResult statementSetMaxCommitDelay(Duration duration) { - getConnection().setMaxCommitDelay(duration == null || duration.isZero() ? null : duration); + getConnection().setMaxCommitDelay(duration); return noResult(SET_MAX_COMMIT_DELAY); } @@ -443,14 +474,26 @@ public StatementResult statementShowExcludeTxnFromChangeStreams() { } @Override - public StatementResult statementBeginTransaction() { - getConnection().beginTransaction(); + public StatementResult statementBeginTransaction( + TransactionOptions.IsolationLevel isolationLevel) { + if (isolationLevel != null) { + getConnection().beginTransaction(isolationLevel); + } else { + getConnection().beginTransaction(); + } return noResult(BEGIN); } @Override public StatementResult statementBeginPgTransaction(@Nullable PgTransactionMode transactionMode) { - getConnection().beginTransaction(); + if (transactionMode == null + || transactionMode.getIsolationLevel() == null + || transactionMode.getIsolationLevel() == IsolationLevel.ISOLATION_LEVEL_DEFAULT) { + getConnection().beginTransaction(); + } else { + getConnection() + .beginTransaction(transactionMode.getIsolationLevel().getSpannerIsolationLevel()); + } if (transactionMode != null) { statementSetPgTransactionMode(transactionMode); } @@ -477,6 +520,11 @@ public StatementResult statementSetTransactionMode(TransactionMode mode) { @Override public StatementResult statementSetPgTransactionMode(PgTransactionMode transactionMode) { + if (transactionMode.getIsolationLevel() != null) { + getConnection() + .setTransactionIsolationLevel( + transactionMode.getIsolationLevel().getSpannerIsolationLevel()); + } if (transactionMode.getAccessMode() != null) { switch (transactionMode.getAccessMode()) { case READ_ONLY_TRANSACTION: @@ -495,6 +543,10 @@ public StatementResult statementSetPgTransactionMode(PgTransactionMode transacti @Override public StatementResult statementSetPgSessionCharacteristicsTransactionMode( PgTransactionMode transactionMode) { + if (transactionMode.getIsolationLevel() != null) { + getConnection() + .setDefaultIsolationLevel(transactionMode.getIsolationLevel().getSpannerIsolationLevel()); + } if (transactionMode.getAccessMode() != null) { switch (transactionMode.getAccessMode()) { case READ_ONLY_TRANSACTION: @@ -512,7 +564,11 @@ public StatementResult statementSetPgSessionCharacteristicsTransactionMode( @Override public StatementResult statementSetPgDefaultTransactionIsolation(IsolationLevel isolationLevel) { - // no-op + getConnection() + .setDefaultIsolationLevel( + isolationLevel == null + ? TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED + : isolationLevel.getSpannerIsolationLevel()); return noResult(SET_DEFAULT_TRANSACTION_ISOLATION); } @@ -576,9 +632,35 @@ public StatementResult statementShowSavepointSupport() { SHOW_SAVEPOINT_SUPPORT); } + @Override + public StatementResult statementSetReadLockMode(ReadLockMode readLockMode) { + getConnection().setReadLockMode(readLockMode); + return noResult(SET_READ_LOCK_MODE); + } + + @Override + public StatementResult statementShowReadLockMode() { + return resultSet( + String.format("%sREAD_LOCK_MODE", getNamespace(connection.getDialect())), + getConnection().getReadLockMode(), + SHOW_READ_LOCK_MODE); + } + @Override public StatementResult statementShowTransactionIsolationLevel() { - return resultSet("transaction_isolation", "serializable", SHOW_TRANSACTION_ISOLATION_LEVEL); + TransactionOptions.IsolationLevel isolationLevel = + getConnection().isInTransaction() + ? getConnection().getTransactionIsolationLevel() + : getConnection().getDefaultIsolationLevel(); + return resultSet("transaction_isolation", isolationLevel, SHOW_TRANSACTION_ISOLATION_LEVEL); + } + + @Override + public StatementResult statementShowDefaultTransactionIsolation() { + return resultSet( + "default_transaction_isolation", + getConnection().getDefaultIsolationLevel(), + SHOW_DEFAULT_TRANSACTION_ISOLATION); } @Override @@ -658,6 +740,12 @@ public StatementResult statementRunPartitionedQuery(Statement statement) { ClientSideStatementType.RUN_PARTITIONED_QUERY); } + @Override + public StatementResult statementSetBatchDmlUpdateCount(Long updateCount, Boolean local) { + getConnection().setBatchDmlUpdateCount(updateCount, local); + return noResult(SET_BATCH_DML_UPDATE_COUNT); + } + @Override public StatementResult statementSetProtoDescriptors(byte[] protoDescriptors) { Preconditions.checkNotNull(protoDescriptors); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/CredentialsService.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/CredentialsService.java index 4b767593fe4..3110e361270 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/CredentialsService.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/CredentialsService.java @@ -32,7 +32,8 @@ /** Service class for getting credentials from key files. */ class CredentialsService { static final String GCS_NOT_SUPPORTED_MSG = - "Credentials that is stored on Google Cloud Storage is no longer supported. Download the credentials to a local file and reference the local file in the connection URL."; + "Credentials that is stored on Google Cloud Storage is no longer supported. Download the" + + " credentials to a local file and reference the local file in the connection URL."; static final CredentialsService INSTANCE = new CredentialsService(); CredentialsService() {} @@ -61,10 +62,12 @@ GoogleCredentials createCredentials(String credentialsUrl) { if (credentialsUrl == null) { msg = msg - + "There are no credentials set in the connection string, " - + "and the default application credentials are not set or are pointing to an invalid or non-existing file.\n" - + "Please check the GOOGLE_APPLICATION_CREDENTIALS environment variable and/or " - + "the credentials that have been set using the Google Cloud SDK gcloud auth application-default login command"; + + "There are no credentials set in the connection string, and the default" + + " application credentials are not set or are pointing to an invalid or" + + " non-existing file.\n" + + "Please check the GOOGLE_APPLICATION_CREDENTIALS environment variable and/or the" + + " credentials that have been set using the Google Cloud SDK gcloud auth" + + " application-default login command"; } else { msg = msg + credentialsUrl; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlBatch.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlBatch.java index 6ae28822473..4a8d643b79c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlBatch.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlBatch.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.connection; import static com.google.cloud.spanner.connection.AbstractStatementParser.RUN_BATCH_STATEMENT; +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_SEQUENCE_KIND; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; @@ -45,6 +46,7 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nonnull; /** @@ -61,11 +63,13 @@ class DdlBatch extends AbstractBaseUnitOfWork { private final List statements = new ArrayList<>(); private UnitOfWorkState state = UnitOfWorkState.STARTED; private final byte[] protoDescriptors; + private final ConnectionState connectionState; static class Builder extends AbstractBaseUnitOfWork.Builder { private DdlClient ddlClient; private DatabaseClient dbClient; private byte[] protoDescriptors; + private ConnectionState connectionState; private Builder() {} @@ -86,6 +90,11 @@ Builder setProtoDescriptors(byte[] protoDescriptors) { return this; } + Builder setConnectionState(ConnectionState connectionState) { + this.connectionState = connectionState; + return this; + } + @Override DdlBatch build() { Preconditions.checkState(ddlClient != null, "No DdlClient specified"); @@ -103,6 +112,7 @@ private DdlBatch(Builder builder) { this.ddlClient = builder.ddlClient; this.dbClient = builder.dbClient; this.protoDescriptors = builder.protoDescriptors; + this.connectionState = Preconditions.checkNotNull(builder.connectionState); } @Override @@ -181,13 +191,11 @@ public ApiFuture executeDdlAsync(CallType callType, ParsedStatement ddl) { "The batch is no longer active and cannot be used for further statements"); Preconditions.checkArgument( ddl.getType() == StatementType.DDL, - "Only DDL statements are allowed. \"" - + ddl.getSqlWithoutComments() - + "\" is not a DDL-statement."); + "Only DDL statements are allowed. \"" + ddl.getSql() + "\" is not a DDL-statement."); Preconditions.checkArgument( - !DdlClient.isCreateDatabaseStatement(ddl.getSqlWithoutComments()), + !DdlClient.isCreateDatabaseStatement(dbClient.getDialect(), ddl.getSql()), "CREATE DATABASE is not supported in DDL batches."); - statements.add(ddl.getSqlWithoutComments()); + statements.add(ddl.getSql()); return ApiFutures.immediateFuture(null); } @@ -235,17 +243,28 @@ public ApiFuture runBatchAsync(CallType callType) { Callable callable = () -> { try { - OperationFuture operation = - ddlClient.executeDdl(statements, protoDescriptors); + AtomicReference> operationReference = + new AtomicReference<>(); try { - // Wait until the operation has finished. - getWithStatementTimeout(operation, RUN_BATCH_STATEMENT); + ddlClient.runWithRetryForMissingDefaultSequenceKind( + restartIndex -> { + OperationFuture operation = + ddlClient.executeDdl( + statements.subList(restartIndex, statements.size()), + protoDescriptors); + operationReference.set(operation); + // Wait until the operation has finished. + getWithStatementTimeout(operation, RUN_BATCH_STATEMENT); + }, + connectionState.getValue(DEFAULT_SEQUENCE_KIND).getValue(), + dbClient.getDialect(), + operationReference); long[] updateCounts = new long[statements.size()]; Arrays.fill(updateCounts, 1L); state = UnitOfWorkState.RAN; return updateCounts; } catch (SpannerException e) { - long[] updateCounts = extractUpdateCounts(operation); + long[] updateCounts = extractUpdateCounts(operationReference.get()); throw SpannerExceptionFactory.newSpannerBatchUpdateException( e.getErrorCode(), e.getMessage(), updateCounts); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java index 7bce1ab78cd..d8dcb3c6ae3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java @@ -22,6 +22,8 @@ import com.google.cloud.spanner.DatabaseId; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.MissingDefaultSequenceKindException; +import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.common.base.Preconditions; import com.google.common.base.Strings; @@ -29,6 +31,11 @@ import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import java.util.Collections; import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; +import java.util.function.Supplier; +import java.util.stream.Collectors; /** * Convenience class for executing Data Definition Language statements on transactions that support @@ -36,12 +43,14 @@ */ class DdlClient { private final DatabaseAdminClient dbAdminClient; + private final Supplier dialectSupplier; private final String projectId; private final String instanceId; private final String databaseName; static class Builder { private DatabaseAdminClient dbAdminClient; + private Supplier dialectSupplier; private String projectId; private String instanceId; private String databaseName; @@ -54,6 +63,11 @@ Builder setDatabaseAdminClient(DatabaseAdminClient client) { return this; } + Builder setDialectSupplier(Supplier dialectSupplier) { + this.dialectSupplier = Preconditions.checkNotNull(dialectSupplier); + return this; + } + Builder setProjectId(String projectId) { Preconditions.checkArgument( !Strings.isNullOrEmpty(projectId), "Empty projectId is not allowed"); @@ -77,6 +91,7 @@ Builder setDatabaseName(String name) { DdlClient build() { Preconditions.checkState(dbAdminClient != null, "No DatabaseAdminClient specified"); + Preconditions.checkState(dialectSupplier != null, "No dialect supplier specified"); Preconditions.checkState(!Strings.isNullOrEmpty(projectId), "No ProjectId specified"); Preconditions.checkState(!Strings.isNullOrEmpty(instanceId), "No InstanceId specified"); Preconditions.checkArgument( @@ -91,6 +106,7 @@ static Builder newBuilder() { private DdlClient(Builder builder) { this.dbAdminClient = builder.dbAdminClient; + this.dialectSupplier = builder.dialectSupplier; this.projectId = builder.projectId; this.instanceId = builder.instanceId; this.databaseName = builder.databaseName; @@ -98,7 +114,7 @@ private DdlClient(Builder builder) { OperationFuture executeCreateDatabase( String createStatement, Dialect dialect) { - Preconditions.checkArgument(isCreateDatabaseStatement(createStatement)); + Preconditions.checkArgument(isCreateDatabaseStatement(dialect, createStatement)); return dbAdminClient.createDatabase( instanceId, createStatement, dialect, Collections.emptyList()); } @@ -111,7 +127,8 @@ OperationFuture executeDdl(String ddl, byte[] p /** Execute a list of DDL statements as one operation. */ OperationFuture executeDdl( List statements, byte[] protoDescriptors) { - if (statements.stream().anyMatch(DdlClient::isCreateDatabaseStatement)) { + if (statements.stream() + .anyMatch(sql -> isCreateDatabaseStatement(this.dialectSupplier.get(), sql))) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, "CREATE DATABASE is not supported in a DDL batch"); } @@ -121,14 +138,68 @@ OperationFuture executeDdl( dbBuilder.setProtoDescriptors(protoDescriptors); } Database db = dbBuilder.build(); - return dbAdminClient.updateDatabaseDdl(db, statements, null); + return dbAdminClient.updateDatabaseDdl( + db, + statements.stream().map(DdlClient::stripTrailingSemicolon).collect(Collectors.toList()), + null); + } + + static String stripTrailingSemicolon(String input) { + if (!input.contains(";")) { + return input; + } + String trimmed = input.trim(); + if (trimmed.endsWith(";")) { + return trimmed.substring(0, trimmed.length() - 1); + } + return input; } /** Returns true if the statement is a `CREATE DATABASE ...` statement. */ - static boolean isCreateDatabaseStatement(String statement) { - String[] tokens = statement.split("\\s+", 3); - return tokens.length >= 2 - && tokens[0].equalsIgnoreCase("CREATE") - && tokens[1].equalsIgnoreCase("DATABASE"); + static boolean isCreateDatabaseStatement(Dialect dialect, String statement) { + SimpleParser parser = new SimpleParser(dialect, statement); + return parser.eatKeyword("create", "database"); + } + + void runWithRetryForMissingDefaultSequenceKind( + Consumer runnable, + String defaultSequenceKind, + Dialect dialect, + AtomicReference> operationReference) { + try { + runnable.accept(0); + } catch (Throwable t) { + SpannerException spannerException = SpannerExceptionFactory.asSpannerException(t); + if (!Strings.isNullOrEmpty(defaultSequenceKind) + && spannerException instanceof MissingDefaultSequenceKindException) { + setDefaultSequenceKind(defaultSequenceKind, dialect); + int restartIndex = 0; + if (operationReference.get() != null) { + try { + UpdateDatabaseDdlMetadata metadata = operationReference.get().getMetadata().get(); + restartIndex = metadata.getCommitTimestampsCount(); + } catch (Throwable ignore) { + } + } + runnable.accept(restartIndex); + return; + } + throw t; + } + } + + private void setDefaultSequenceKind(String defaultSequenceKind, Dialect dialect) { + String ddl = + dialect == Dialect.POSTGRESQL + ? "alter database \"%s\" set spanner.default_sequence_kind = '%s'" + : "alter database `%s` set options (default_sequence_kind='%s')"; + ddl = String.format(ddl, databaseName, defaultSequenceKind); + try { + executeDdl(ddl, null).get(); + } catch (ExecutionException executionException) { + throw SpannerExceptionFactory.asSpannerException(executionException.getCause()); + } catch (InterruptedException interruptedException) { + throw SpannerExceptionFactory.propagateInterrupt(interruptedException); + } } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DirectExecuteResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DirectExecuteResultSet.java index b5e4060ddd8..f0c289a6d80 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DirectExecuteResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DirectExecuteResultSet.java @@ -19,6 +19,7 @@ import com.google.cloud.ByteArray; import com.google.cloud.Date; import com.google.cloud.Timestamp; +import com.google.cloud.spanner.Interval; import com.google.cloud.spanner.ProtobufResultSet; import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.SpannerException; @@ -32,6 +33,7 @@ import com.google.spanner.v1.ResultSetStats; import java.math.BigDecimal; import java.util.List; +import java.util.UUID; import java.util.function.Function; /** @@ -288,6 +290,30 @@ public Date getDate(String columnName) { return delegate.getDate(columnName); } + @Override + public UUID getUuid(int columnIndex) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getUuid(columnIndex); + } + + @Override + public UUID getUuid(String columnName) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getUuid(columnName); + } + + @Override + public Interval getInterval(int columnIndex) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getInterval(columnIndex); + } + + @Override + public Interval getInterval(String columnName) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getInterval(columnName); + } + @Override public Value getValue(int columnIndex) { Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); @@ -480,6 +506,30 @@ public List getDateList(String columnName) { return delegate.getDateList(columnName); } + @Override + public List getUuidList(int columnIndex) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getUuidList(columnIndex); + } + + @Override + public List getUuidList(String columnName) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getUuidList(columnName); + } + + @Override + public List getIntervalList(int columnIndex) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getIntervalList(columnIndex); + } + + @Override + public List getIntervalList(String columnName) { + Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); + return delegate.getIntervalList(columnName); + } + @Override public List getProtoMessageList(int columnIndex, T message) { Preconditions.checkState(nextCalledByClient, MISSING_NEXT_CALL); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DmlBatch.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DmlBatch.java index 1f5e72acee2..1f70825910d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DmlBatch.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DmlBatch.java @@ -51,6 +51,7 @@ class DmlBatch extends AbstractBaseUnitOfWork { private final boolean autoBatch; private final Supplier autoBatchUpdateCountSupplier; private final Supplier verifyUpdateCountsSupplier; + private final Supplier dmlbatchUpdateCountSupplier; private final UnitOfWork transaction; private final String statementTag; private final List statements = new ArrayList<>(); @@ -61,6 +62,7 @@ static class Builder extends AbstractBaseUnitOfWork.Builder { private boolean autoBatch; private Supplier autoBatchUpdateCountSupplier = Suppliers.ofInstance(1L); private Supplier verifyUpdateCountsSupplier = Suppliers.ofInstance(Boolean.FALSE); + private Supplier dmlbatchUpdateCountSupplier = Suppliers.ofInstance(-1L); private UnitOfWork transaction; private String statementTag; @@ -81,6 +83,12 @@ Builder setAutoBatchUpdateCountVerificationSupplier(Supplier verificati return this; } + Builder setDmlBatchUpdateCountSupplier(Supplier dmlbatchUpdateCountSupplier) { + Preconditions.checkNotNull(dmlbatchUpdateCountSupplier); + this.dmlbatchUpdateCountSupplier = dmlbatchUpdateCountSupplier; + return this; + } + Builder setTransaction(UnitOfWork transaction) { Preconditions.checkNotNull(transaction); this.transaction = transaction; @@ -108,6 +116,7 @@ private DmlBatch(Builder builder) { this.autoBatch = builder.autoBatch; this.autoBatchUpdateCountSupplier = builder.autoBatchUpdateCountSupplier; this.verifyUpdateCountsSupplier = builder.verifyUpdateCountsSupplier; + this.dmlbatchUpdateCountSupplier = builder.dmlbatchUpdateCountSupplier; this.transaction = Preconditions.checkNotNull(builder.transaction); this.statementTag = builder.statementTag; } @@ -193,7 +202,7 @@ public ApiFuture executeDdlAsync(CallType callType, ParsedStatement ddl) { long getUpdateCount() { // Auto-batching returns update count 1 by default, as this is what ORMs normally expect. // Standard batches return -1 by default, to indicate that the update count is unknown. - return isAutoBatch() ? autoBatchUpdateCountSupplier.get() : -1L; + return isAutoBatch() ? autoBatchUpdateCountSupplier.get() : dmlbatchUpdateCountSupplier.get(); } @Override @@ -204,9 +213,7 @@ public ApiFuture executeUpdateAsync( "The batch is no longer active and cannot be used for further statements"); Preconditions.checkArgument( update.getType() == StatementType.UPDATE, - "Only DML statements are allowed. \"" - + update.getSqlWithoutComments() - + "\" is not a DML-statement."); + "Only DML statements are allowed. \"" + update.getSql() + "\" is not a DML-statement."); long updateCount = getUpdateCount(); this.statements.add(update); this.updateCounts = Arrays.copyOf(this.updateCounts, this.updateCounts.length + 1); @@ -233,9 +240,7 @@ public ApiFuture executeBatchUpdateAsync( for (ParsedStatement update : updates) { Preconditions.checkArgument( update.getType() == StatementType.UPDATE, - "Only DML statements are allowed. \"" - + update.getSqlWithoutComments() - + "\" is not a DML-statement."); + "Only DML statements are allowed. \"" + update.getSql() + "\" is not a DML-statement."); } long[] updateCountArray = new long[Iterables.size(updates)]; Arrays.fill(updateCountArray, getUpdateCount()); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/LocalConnectionChecker.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/LocalConnectionChecker.java index f9a12f5552a..62aafab4239 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/LocalConnectionChecker.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/LocalConnectionChecker.java @@ -23,6 +23,7 @@ import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.instance.v1.stub.GrpcInstanceAdminStub; import com.google.cloud.spanner.admin.instance.v1.stub.InstanceAdminStubSettings; +import com.google.common.base.Strings; import com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest; import java.time.Duration; @@ -42,6 +43,10 @@ class LocalConnectionChecker { void checkLocalConnection(ConnectionOptions options) { final String emulatorHost = System.getenv("SPANNER_EMULATOR_HOST"); String host = options.getHost() == null ? emulatorHost : options.getHost(); + if (Strings.isNullOrEmpty(host)) { + return; + } + if (host.startsWith("https://")) { host = host.substring(8); } @@ -49,7 +54,7 @@ void checkLocalConnection(ConnectionOptions options) { host = host.substring(7); } // Only do the check if the host has been set to localhost. - if (host != null && host.startsWith("localhost") && options.isUsePlainText()) { + if (host.startsWith("localhost") && options.isUsePlainText()) { // Do a quick check to see if anything is actually running on the host. try { InstanceAdminStubSettings.Builder testEmulatorSettings = @@ -87,9 +92,10 @@ void checkLocalConnection(ConnectionOptions options) { } else { msg = String.format( - "The environment variable SPANNER_EMULATOR_HOST has been set to '%s', but no running" - + " emulator or other server could be found at that address.\n" - + "Please check the environment variable and/or that the emulator is running.", + "The environment variable SPANNER_EMULATOR_HOST has been set to '%s', but no" + + " running emulator or other server could be found at that address.\n" + + "Please check the environment variable and/or that the emulator is" + + " running.", emulatorHost); } throw SpannerExceptionFactory.newSpannerException(ErrorCode.UNAVAILABLE, msg); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java index fcbc49f346d..1cbbf0818c5 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java @@ -25,6 +25,7 @@ import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.Struct; import com.google.cloud.spanner.Type; +import com.google.cloud.spanner.Type.Code; import com.google.common.base.Preconditions; import com.google.common.base.Supplier; import com.google.spanner.v1.ResultSetMetadata; @@ -82,9 +83,11 @@ public void run() { break; } } - if (first) { - // Special case: The result set did not return any rows. Push the metadata to the merged - // result set. + if (first + && resultSet.getType().getCode() == Code.STRUCT + && !resultSet.getType().getStructFields().isEmpty()) { + // Special case: The result set did not return any rows, but did return metadata. + // Push the metadata to the merged result set. queue.put( PartitionExecutorResult.typeAndMetadata( resultSet.getType(), resultSet.getMetadata())); @@ -319,13 +322,17 @@ public Struct get() { return currentRow; } - private PartitionExecutorResult getFirstResult() { + private PartitionExecutorResult getFirstResultWithMetadata() { try { metadataAvailableLatch.await(); } catch (InterruptedException interruptedException) { throw SpannerExceptionFactory.propagateInterrupt(interruptedException); } - PartitionExecutorResult result = queue.peek(); + PartitionExecutorResult result = + queue.stream() + .filter(rs -> rs.metadata != null || rs.exception != null) + .findFirst() + .orElse(null); if (result == null) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.FAILED_PRECONDITION, "Thread-unsafe access to ResultSet"); @@ -338,7 +345,7 @@ private PartitionExecutorResult getFirstResult() { public ResultSetMetadata getMetadata() { if (metadata == null) { - return getFirstResult().metadata; + return getFirstResultWithMetadata().metadata; } return metadata; } @@ -355,7 +362,7 @@ public int getParallelism() { public Type getType() { if (type == null) { - return getFirstResult().type; + return getFirstResultWithMetadata().type; } return type; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PartitionId.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PartitionId.java index 2690278f3ab..2adc264dc6d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PartitionId.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PartitionId.java @@ -74,7 +74,7 @@ protected Class resolveClass(ObjectStreamClass desc) throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, invalidClassException.getMessage(), invalidClassException); } catch (Exception exception) { - throw SpannerExceptionFactory.newSpannerException(exception); + throw SpannerExceptionFactory.asSpannerException(exception); } } @@ -90,7 +90,7 @@ public static String encodeToString(BatchTransactionId transactionId, Partition new ObjectOutputStream(new GZIPOutputStream(byteArrayOutputStream))) { objectOutputStream.writeObject(id); } catch (Exception exception) { - throw SpannerExceptionFactory.newSpannerException(exception); + throw SpannerExceptionFactory.asSpannerException(exception); } return Base64.getUrlEncoder().encodeToString(byteArrayOutputStream.toByteArray()); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PgTransactionMode.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PgTransactionMode.java index 8881d2191df..db6af7e08da 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PgTransactionMode.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PgTransactionMode.java @@ -16,6 +16,8 @@ package com.google.cloud.spanner.connection; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import java.util.Objects; /** @@ -40,15 +42,30 @@ public String toString() { } enum IsolationLevel { - ISOLATION_LEVEL_DEFAULT("ISOLATION LEVEL DEFAULT", "DEFAULT"), - ISOLATION_LEVEL_SERIALIZABLE("ISOLATION LEVEL SERIALIZABLE", "SERIALIZABLE"); + ISOLATION_LEVEL_DEFAULT( + "ISOLATION LEVEL DEFAULT", + "DEFAULT", + TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED), + ISOLATION_LEVEL_SERIALIZABLE( + "ISOLATION LEVEL SERIALIZABLE", + "SERIALIZABLE", + TransactionOptions.IsolationLevel.SERIALIZABLE), + ISOLATION_LEVEL_REPEATABLE_READ( + "ISOLATION LEVEL REPEATABLE READ", + "REPEATABLE READ", + TransactionOptions.IsolationLevel.REPEATABLE_READ); private final String statementString; private final String shortStatementString; + private final TransactionOptions.IsolationLevel spannerIsolationLevel; - IsolationLevel(String statement, String shortStatementString) { + IsolationLevel( + String statement, + String shortStatementString, + TransactionOptions.IsolationLevel spannerIsolationLevel) { this.statementString = statement; this.shortStatementString = shortStatementString; + this.spannerIsolationLevel = spannerIsolationLevel; } /** @@ -67,6 +84,10 @@ public String getShortStatementString() { return shortStatementString; } + public TransactionOptions.IsolationLevel getSpannerIsolationLevel() { + return spannerIsolationLevel; + } + @Override public String toString() { return statementString; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java index 4f39c549de9..60b64b0cd4f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java @@ -46,15 +46,6 @@ Dialect getDialect() { return Dialect.POSTGRESQL; } - /** - * Indicates whether the parser supports the {@code EXPLAIN} clause. The PostgreSQL parser does - * not support it. - */ - @Override - protected boolean supportsExplain() { - return false; - } - @Override boolean supportsNestedComments() { return true; @@ -125,7 +116,8 @@ String removeCommentsAndTrimInternal(String sql) { int multiLineCommentStartIdx = -1; StringBuilder res = new StringBuilder(sql.length()); int index = 0; - while (index < sql.length()) { + int length = sql.length(); + while (index < length) { char c = sql.charAt(index); if (isInSingleLineComment) { if (c == '\n') { @@ -134,10 +126,10 @@ String removeCommentsAndTrimInternal(String sql) { res.append(c); } } else if (multiLineCommentLevel > 0) { - if (sql.length() > index + 1 && c == ASTERISK && sql.charAt(index + 1) == SLASH) { + if (length > index + 1 && c == ASTERISK && sql.charAt(index + 1) == SLASH) { multiLineCommentLevel--; if (multiLineCommentLevel == 0) { - if (!whitespaceBeforeOrAfterMultiLineComment && (sql.length() > index + 2)) { + if (!whitespaceBeforeOrAfterMultiLineComment && (length > index + 2)) { whitespaceBeforeOrAfterMultiLineComment = Character.isWhitespace(sql.charAt(index + 2)); } @@ -145,23 +137,23 @@ String removeCommentsAndTrimInternal(String sql) { // neither at the start nor at the end of SQL string, append an extra space. if (!whitespaceBeforeOrAfterMultiLineComment && (multiLineCommentStartIdx != 0) - && (index != sql.length() - 2)) { + && (index != length - 2)) { res.append(' '); } } index++; - } else if (sql.length() > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERISK) { + } else if (length > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERISK) { multiLineCommentLevel++; index++; } } else { // Check for -- which indicates the start of a single-line comment. - if (sql.length() > index + 1 && c == HYPHEN && sql.charAt(index + 1) == HYPHEN) { + if (length > index + 1 && c == HYPHEN && sql.charAt(index + 1) == HYPHEN) { // This is a single line comment. isInSingleLineComment = true; index += 2; continue; - } else if (sql.length() > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERISK) { + } else if (length > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERISK) { multiLineCommentLevel++; if (index >= 1) { whitespaceBeforeOrAfterMultiLineComment = Character.isWhitespace(sql.charAt(index - 1)); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java index 4ae0ae00608..ccb592e3f84 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java @@ -60,6 +60,9 @@ import com.google.common.collect.Iterables; import com.google.common.util.concurrent.MoreExecutors; import com.google.spanner.v1.SpannerGrpc; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; +import io.grpc.Deadline; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.context.Scope; import java.time.Duration; @@ -79,6 +82,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * Transaction that is used when a {@link Connection} is normal read/write mode (i.e. not autocommit @@ -116,6 +120,7 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { */ private static final ThreadLocal CURRENT_ACTIVE_TRANSACTION = new ThreadLocal<>(); + /** * The name of the automatic savepoint that is generated by the Connection API if automatically * aborting the current active transaction on the emulator is enabled. @@ -132,6 +137,7 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { * Spanner. */ private final boolean useAutoSavepointsForEmulator; + /** * The savepoint that was automatically generated after executing the last statement. This is used * to abort transactions on the emulator, if one thread tries to execute concurrent transactions @@ -151,6 +157,9 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { private final long keepAliveIntervalMillis; private final ReentrantLock keepAliveLock; private final SavepointSupport savepointSupport; + @Nonnull private final IsolationLevel isolationLevel; + private final ReadLockMode readLockMode; + private final Deadline deadline; private int transactionRetryAttempts; private int successfulRetries; private volatile ApiFuture txContextFuture; @@ -202,6 +211,9 @@ static class Builder extends AbstractMultiUseTransaction.Builder executeQueryAsync( InterceptorsUsage.IGNORE_INTERCEPTORS, ImmutableList.of(SpannerGrpc.getExecuteStreamingSqlMethod())); } else { - res = super.executeQueryAsync(callType, statement, analyzeMode, options); + // Handle both SELECT queries and DML with THEN RETURN without delegating to the base class, + // which rejects non-SELECT statements. + res = + executeStatementAsync( + callType, + statement, + () -> { + checkTimedOut(); + checkAborted(); + return DirectExecuteResultSet.ofResultSet( + internalExecuteQuery(statement, analyzeMode, options)); + }, + SpannerGrpc.getExecuteStreamingSqlMethod()); } ApiFutures.addCallback(res, new StatementResultCallback<>(), MoreExecutors.directExecutor()); return res; @@ -769,8 +832,7 @@ public ApiFuture executeBatchUpdateAsync( final List updateStatements = new LinkedList<>(); for (ParsedStatement update : updates) { Preconditions.checkArgument( - update.isUpdate(), - "Statement is not an update statement: " + update.getSqlWithoutComments()); + update.isUpdate(), "Statement is not an update statement: " + update.getSql()); updateStatements.add(update.getStatement()); } checkOrCreateValidTransaction(Iterables.getFirst(updates, null), callType); @@ -1112,7 +1174,8 @@ private void handleAborted(AbortedException aborted) { invokeTransactionRetryListenersOnFinish(RetryResult.RETRY_SUCCESSFUL); logger.fine( toString() - + ": Internal transaction retry succeeded. Starting retry of original statement."); + + ": Internal transaction retry succeeded. Starting retry of original" + + " statement."); // Retry succeeded, return and continue the original transaction. break; } catch (AbortedDueToConcurrentModificationException e) { @@ -1176,7 +1239,8 @@ private void throwAbortWithRetryAttemptsExceeded() throws SpannerException { invokeTransactionRetryListenersOnFinish(RetryResult.RETRY_ABORTED_AND_MAX_ATTEMPTS_EXCEEDED); logger.fine( toString() - + ": Internal transaction retry aborted and max number of retry attempts has been exceeded"); + + ": Internal transaction retry aborted and max number of retry attempts has been" + + " exceeded"); // Try to rollback the transaction and ignore any exceptions. // Normally it should not be necessary to do this, but in order to be sure we never leak // any sessions it is better to do so. @@ -1261,11 +1325,22 @@ private ApiFuture rollbackAsync(CallType callType, boolean updateStatusAnd } } + @Override + public void resetForRetry() { + txContextFuture = ApiFutures.immediateFuture(txManager.resetForRetry()); + } + @Override String getUnitOfWorkName() { return "read/write transaction"; } + @Nullable + @Override + Deadline getTransactionDeadline() { + return this.deadline; + } + static class ReadWriteSavepoint extends Savepoint { private final int statementPosition; private final int mutationPosition; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReplaceableForwardingResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReplaceableForwardingResultSet.java index bd7c794a0fa..8a73318c880 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReplaceableForwardingResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReplaceableForwardingResultSet.java @@ -20,6 +20,7 @@ import com.google.cloud.Date; import com.google.cloud.Timestamp; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.Interval; import com.google.cloud.spanner.ProtobufResultSet; import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.SpannerException; @@ -34,6 +35,7 @@ import com.google.spanner.v1.ResultSetStats; import java.math.BigDecimal; import java.util.List; +import java.util.UUID; import java.util.function.Function; /** @@ -291,12 +293,36 @@ public Date getDate(int columnIndex) { return delegate.getDate(columnIndex); } + @Override + public UUID getUuid(int columnIndex) { + checkClosed(); + return delegate.getUuid(columnIndex); + } + @Override public Date getDate(String columnName) { checkClosed(); return delegate.getDate(columnName); } + @Override + public UUID getUuid(String columnName) { + checkClosed(); + return delegate.getUuid(columnName); + } + + @Override + public Interval getInterval(int columnIndex) { + checkClosed(); + return delegate.getInterval(columnIndex); + } + + @Override + public Interval getInterval(String columnName) { + checkClosed(); + return delegate.getInterval(columnName); + } + @Override public Value getValue(int columnIndex) { checkClosed(); @@ -489,6 +515,30 @@ public List getDateList(String columnName) { return delegate.getDateList(columnName); } + @Override + public List getUuidList(int columnIndex) { + checkClosed(); + return delegate.getUuidList(columnIndex); + } + + @Override + public List getUuidList(String columnName) { + checkClosed(); + return delegate.getUuidList(columnName); + } + + @Override + public List getIntervalList(int columnIndex) { + checkClosed(); + return delegate.getIntervalList(columnIndex); + } + + @Override + public List getIntervalList(String columnName) { + checkClosed(); + return delegate.getIntervalList(columnName); + } + @Override public List getProtoMessageList(int columnIndex, T message) { checkClosed(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SimpleParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SimpleParser.java index 0af86892dde..bfcb48f99a5 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SimpleParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SimpleParser.java @@ -33,16 +33,23 @@ class SimpleParser { * if so, what the value was. */ static class Result { - static final Result NOT_FOUND = new Result(null); + static final Result NOT_FOUND = new Result(null, false); static Result found(String value) { - return new Result(Preconditions.checkNotNull(value)); + return new Result(Preconditions.checkNotNull(value), false); + } + + static Result found(String value, boolean inParenthesis) { + return new Result(Preconditions.checkNotNull(value), inParenthesis); } private final String value; - private Result(String value) { + private final boolean inParenthesis; + + private Result(String value, boolean inParenthesis) { this.value = value; + this.inParenthesis = inParenthesis; } @Override @@ -55,7 +62,8 @@ public boolean equals(Object o) { if (!(o instanceof Result)) { return false; } - return Objects.equals(this.value, ((Result) o).value); + return Objects.equals(this.value, ((Result) o).value) + && Objects.equals(this.inParenthesis, ((Result) o).inParenthesis); } @Override @@ -73,6 +81,10 @@ boolean isValid() { String getValue() { return this.value; } + + boolean isInParenthesis() { + return this.inParenthesis; + } } // TODO: Replace this with a direct reference to the dialect, and move the isXYZSupported methods @@ -81,13 +93,16 @@ String getValue() { private final String sql; + // TODO: Use this length field instead of repeatedly calling sql.length() + private final int length; + private final boolean treatHintCommentsAsTokens; private int pos; /** Constructs a simple parser for the given SQL string and dialect. */ SimpleParser(Dialect dialect, String sql) { - this(dialect, sql, 0, /* treatHintCommentsAsTokens = */ false); + this(dialect, sql, 0, /* treatHintCommentsAsTokens= */ false); } /** @@ -100,6 +115,7 @@ String getValue() { !(treatHintCommentsAsTokens && dialect != Dialect.POSTGRESQL), "treatHintCommentsAsTokens can only be enabled for PostgreSQL"); this.sql = sql; + this.length = sql.length(); this.pos = pos; this.statementParser = AbstractStatementParser.getInstance(dialect); this.treatHintCommentsAsTokens = treatHintCommentsAsTokens; @@ -117,12 +133,54 @@ int getPos() { return this.pos; } + void skipHint() { + // We don't need to do anything special for PostgreSQL, as hints in PostgreSQL are inside + // comments and comments are automatically skipped by all methods. + if (getDialect() == Dialect.GOOGLE_STANDARD_SQL && eatTokens('@', '{')) { + while (pos < length && !eatToken('}')) { + pos = statementParser.skip(sql, pos, /* result= */ null); + } + } + } + + Result eatNextKeyword() { + skipHint(); + boolean inParenthesis = false; + while (pos < length && eatToken('(')) { + inParenthesis = true; + } + return eatKeyword(inParenthesis); + } + /** Returns true if this parser has more tokens. Advances the position to the first next token. */ boolean hasMoreTokens() { skipWhitespaces(); return pos < sql.length(); } + /** Eats and returns the keyword at the current position. */ + Result eatKeyword() { + return eatKeyword(false); + } + + /** + * Eats and returns the keyword at the current position and returns a result that indicates that + * the keyword is inside one or more parentheses. + */ + Result eatKeyword(boolean inParenthesis) { + if (!hasMoreTokens()) { + return Result.NOT_FOUND; + } + if (!Character.isLetter(sql.charAt(pos))) { + return Result.NOT_FOUND; + } + int startPos = pos; + while (pos < length && Character.isLetter(sql.charAt(pos))) { + pos++; + } + return Result.found(sql.substring(startPos, pos), inParenthesis); + } + /** * Eats and returns the identifier at the current position. This implementation does not support * quoted identifiers. @@ -164,7 +222,7 @@ Result eatSingleQuotedString() { } boolean peekTokens(char... tokens) { - return internalEatTokens(/* updatePos = */ false, tokens); + return internalEatTokens(/* updatePos= */ false, tokens); } /** @@ -173,7 +231,7 @@ boolean peekTokens(char... tokens) { * are not equal to the list of tokens. */ boolean eatTokens(char... tokens) { - return internalEatTokens(/* updatePos = */ true, tokens); + return internalEatTokens(/* updatePos= */ true, tokens); } /** @@ -219,6 +277,55 @@ boolean eatToken(char token) { return false; } + boolean eatKeyword(String... keywords) { + return eat(true, true, keywords); + } + + boolean eat(boolean skipWhitespaceBefore, boolean requireWhitespaceAfter, String... keywords) { + boolean result = true; + for (String keyword : keywords) { + result &= internalEat(keyword, skipWhitespaceBefore, requireWhitespaceAfter, true); + } + return result; + } + + private boolean internalEat( + String keyword, + boolean skipWhitespaceBefore, + boolean requireWhitespaceAfter, + boolean updatePos) { + int originalPos = pos; + if (skipWhitespaceBefore) { + skipWhitespaces(); + } + if (pos + keyword.length() > sql.length()) { + if (!updatePos) { + pos = originalPos; + } + return false; + } + if (sql.substring(pos, pos + keyword.length()).equalsIgnoreCase(keyword) + && (!requireWhitespaceAfter || isValidEndOfKeyword(pos + keyword.length()))) { + if (updatePos) { + pos = pos + keyword.length(); + } else { + pos = originalPos; + } + return true; + } + if (!updatePos) { + pos = originalPos; + } + return false; + } + + private boolean isValidEndOfKeyword(int index) { + if (sql.length() == index) { + return true; + } + return !isValidIdentifierChar(sql.charAt(index)); + } + /** * Returns true if the given character is valid as the first character of an identifier. That * means that it can be used as the first character of an unquoted identifier. @@ -243,9 +350,9 @@ static boolean isValidIdentifierChar(char c) { void skipWhitespaces() { while (pos < sql.length()) { if (sql.charAt(pos) == HYPHEN && sql.length() > (pos + 1) && sql.charAt(pos + 1) == HYPHEN) { - skipSingleLineComment(/* prefixLength = */ 2); + skipSingleLineComment(/* prefixLength= */ 2); } else if (statementParser.supportsHashSingleLineComments() && sql.charAt(pos) == DASH) { - skipSingleLineComment(/* prefixLength = */ 1); + skipSingleLineComment(/* prefixLength= */ 1); } else if (sql.charAt(pos) == SLASH && sql.length() > (pos + 1) && sql.charAt(pos + 1) == ASTERISK) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java index 3c533cb9a7a..cfb13cef966 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java @@ -18,6 +18,15 @@ import static com.google.cloud.spanner.connection.AbstractStatementParser.COMMIT_STATEMENT; import static com.google.cloud.spanner.connection.AbstractStatementParser.RUN_BATCH_STATEMENT; +import static com.google.cloud.spanner.connection.ConnectionProperties.AUTOCOMMIT_DML_MODE; +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL; +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_SEQUENCE_KIND; +import static com.google.cloud.spanner.connection.ConnectionProperties.MAX_COMMIT_DELAY; +import static com.google.cloud.spanner.connection.ConnectionProperties.READONLY; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_ONLY_STALENESS; +import static com.google.cloud.spanner.connection.ConnectionProperties.RETURN_COMMIT_STATS; +import static com.google.cloud.spanner.connection.DdlClient.isCreateDatabaseStatement; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutureCallback; @@ -34,6 +43,7 @@ import com.google.cloud.spanner.Mutation; import com.google.cloud.spanner.Options; import com.google.cloud.spanner.Options.QueryOption; +import com.google.cloud.spanner.Options.QueryUpdateOption; import com.google.cloud.spanner.Options.UpdateOption; import com.google.cloud.spanner.PartitionOptions; import com.google.cloud.spanner.ReadOnlyTransaction; @@ -42,7 +52,6 @@ import com.google.cloud.spanner.SpannerBatchUpdateException; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; -import com.google.cloud.spanner.TimestampBound; import com.google.cloud.spanner.TransactionMutationLimitExceededException; import com.google.cloud.spanner.TransactionRunner; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; @@ -53,11 +62,13 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.spanner.admin.database.v1.DatabaseAdminGrpc; import com.google.spanner.v1.SpannerGrpc; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import io.opentelemetry.context.Scope; -import java.time.Duration; import java.util.Arrays; import java.util.UUID; import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nonnull; /** @@ -77,15 +88,11 @@ *

              */ class SingleUseTransaction extends AbstractBaseUnitOfWork { - private final boolean readOnly; private final DdlClient ddlClient; private final DatabaseClient dbClient; private final BatchClient batchClient; - private final TimestampBound readOnlyStaleness; - private final AutocommitDmlMode autocommitDmlMode; - private final boolean returnCommitStats; - private final Duration maxCommitDelay; - private final boolean internalMetdataQuery; + private final ConnectionState connectionState; + private final boolean internalMetadataQuery; private final byte[] protoDescriptors; private volatile SettableApiFuture readTimestamp = null; private volatile TransactionRunner writeTransaction; @@ -96,11 +103,7 @@ static class Builder extends AbstractBaseUnitOfWork.Builder executeQueryAsync( statement.isQuery() || (statement.isUpdate() && (analyzeMode != AnalyzeMode.NONE || statement.hasReturningClause())), - "The statement must be a query, or the statement must be DML and AnalyzeMode must be PLAN or PROFILE"); + "The statement must be a query, or the statement must be DML and AnalyzeMode must be PLAN" + + " or PROFILE"); try (Scope ignore = span.makeCurrent()) { checkAndMarkUsed(); @@ -255,9 +235,10 @@ public ApiFuture executeQueryAsync( // Do not use a read-only staleness for internal metadata queries. final ReadOnlyTransaction currentTransaction = - internalMetdataQuery + internalMetadataQuery ? dbClient.singleUseReadOnlyTransaction() - : dbClient.singleUseReadOnlyTransaction(readOnlyStaleness); + : dbClient.singleUseReadOnlyTransaction( + connectionState.getValue(READ_ONLY_STALENESS).getValue()); Callable callable = () -> { try { @@ -298,7 +279,8 @@ private ApiFuture executeDmlReturningAsync( writeTransaction.run( transaction -> DirectExecuteResultSet.ofResultSet( - transaction.executeQuery(update.getStatement(), options))); + transaction.executeQuery( + update.getStatement(), appendLastStatement(options)))); state = UnitOfWorkState.COMMITTED; return resultSet; } catch (Throwable t) { @@ -323,7 +305,8 @@ public ApiFuture partitionQueryAsync( Callable callable = () -> { try (BatchReadOnlyTransaction transaction = - batchClient.batchReadOnlyTransaction(readOnlyStaleness)) { + batchClient.batchReadOnlyTransaction( + connectionState.getValue(READ_ONLY_STALENESS).getValue())) { ResultSet resultSet = partitionQuery(transaction, partitionOptions, query, options); readTimestamp.set(transaction.getReadTimestamp()); state = UnitOfWorkState.COMMITTED; @@ -406,15 +389,19 @@ public ApiFuture executeDdlAsync(CallType callType, final ParsedStatement Callable callable = () -> { try { - OperationFuture operation; - if (DdlClient.isCreateDatabaseStatement(ddl.getSqlWithoutComments())) { - operation = - ddlClient.executeCreateDatabase( - ddl.getSqlWithoutComments(), dbClient.getDialect()); + if (isCreateDatabaseStatement(dbClient.getDialect(), ddl.getSql())) { + executeCreateDatabase(ddl); } else { - operation = ddlClient.executeDdl(ddl.getSqlWithoutComments(), protoDescriptors); + ddlClient.runWithRetryForMissingDefaultSequenceKind( + restartIndex -> { + OperationFuture operation = + ddlClient.executeDdl(ddl.getSql(), protoDescriptors); + getWithStatementTimeout(operation, ddl); + }, + connectionState.getValue(DEFAULT_SEQUENCE_KIND).getValue(), + dbClient.getDialect(), + new AtomicReference<>()); } - getWithStatementTimeout(operation, ddl); state = UnitOfWorkState.COMMITTED; return null; } catch (Throwable t) { @@ -427,6 +414,12 @@ public ApiFuture executeDdlAsync(CallType callType, final ParsedStatement } } + private void executeCreateDatabase(ParsedStatement ddl) { + OperationFuture operation = + ddlClient.executeCreateDatabase(ddl.getSql(), dbClient.getDialect()); + getWithStatementTimeout(operation, ddl); + } + @Override public ApiFuture executeUpdateAsync( CallType callType, ParsedStatement update, UpdateOption... options) { @@ -438,7 +431,7 @@ public ApiFuture executeUpdateAsync( checkAndMarkUsed(); ApiFuture res; - switch (autocommitDmlMode) { + switch (getAutocommitDmlMode()) { case TRANSACTIONAL: case TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC: res = @@ -452,7 +445,7 @@ public ApiFuture executeUpdateAsync( break; default: throw SpannerExceptionFactory.newSpannerException( - ErrorCode.FAILED_PRECONDITION, "Unknown dml mode: " + autocommitDmlMode); + ErrorCode.FAILED_PRECONDITION, "Unknown dml mode: " + getAutocommitDmlMode()); } return res; } @@ -466,7 +459,7 @@ public ApiFuture analyzeUpdateAsync( ConnectionPreconditions.checkState( !isReadOnly(), "Update statements are not allowed in read-only mode"); ConnectionPreconditions.checkState( - autocommitDmlMode != AutocommitDmlMode.PARTITIONED_NON_ATOMIC, + getAutocommitDmlMode() != AutocommitDmlMode.PARTITIONED_NON_ATOMIC, "Analyzing update statements is not supported for Partitioned DML"); try (Scope ignore = span.makeCurrent()) { checkAndMarkUsed(); @@ -484,24 +477,23 @@ public ApiFuture executeBatchUpdateAsync( Preconditions.checkNotNull(updates); for (ParsedStatement update : updates) { Preconditions.checkArgument( - update.isUpdate(), - "Statement is not an update statement: " + update.getSqlWithoutComments()); + update.isUpdate(), "Statement is not an update statement: " + update.getSql()); } ConnectionPreconditions.checkState( !isReadOnly(), "Batch update statements are not allowed in read-only mode"); try (Scope ignore = span.makeCurrent()) { checkAndMarkUsed(); - switch (autocommitDmlMode) { + switch (getAutocommitDmlMode()) { case TRANSACTIONAL: return executeTransactionalBatchUpdateAsync(callType, updates, options); case PARTITIONED_NON_ATOMIC: throw SpannerExceptionFactory.newSpannerException( ErrorCode.FAILED_PRECONDITION, - "Batch updates are not allowed in " + autocommitDmlMode); + "Batch updates are not allowed in " + getAutocommitDmlMode()); default: throw SpannerExceptionFactory.newSpannerException( - ErrorCode.FAILED_PRECONDITION, "Unknown dml mode: " + autocommitDmlMode); + ErrorCode.FAILED_PRECONDITION, "Unknown dml mode: " + getAutocommitDmlMode()); } } } @@ -511,13 +503,24 @@ private TransactionRunner createWriteTransaction() { if (this.rpcPriority != null) { numOptions++; } - if (returnCommitStats) { + if (connectionState.getValue(RETURN_COMMIT_STATS).getValue()) { numOptions++; } if (excludeTxnFromChangeStreams) { numOptions++; } - if (maxCommitDelay != null) { + if (connectionState.getValue(MAX_COMMIT_DELAY).getValue() != null) { + numOptions++; + } + if (connectionState.getValue(DEFAULT_ISOLATION_LEVEL).getValue() + != IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED) { + numOptions++; + } + if (connectionState.getValue(READ_LOCK_MODE).getValue() + != ReadLockMode.READ_LOCK_MODE_UNSPECIFIED) { + numOptions++; + } + if (this.clientContext != null) { numOptions++; } if (numOptions == 0) { @@ -528,14 +531,27 @@ private TransactionRunner createWriteTransaction() { if (this.rpcPriority != null) { options[index++] = Options.priority(this.rpcPriority); } - if (returnCommitStats) { + if (connectionState.getValue(RETURN_COMMIT_STATS).getValue()) { options[index++] = Options.commitStats(); } if (excludeTxnFromChangeStreams) { options[index++] = Options.excludeTxnFromChangeStreams(); } - if (maxCommitDelay != null) { - options[index++] = Options.maxCommitDelay(maxCommitDelay); + if (connectionState.getValue(MAX_COMMIT_DELAY).getValue() != null) { + options[index++] = + Options.maxCommitDelay(connectionState.getValue(MAX_COMMIT_DELAY).getValue()); + } + if (connectionState.getValue(DEFAULT_ISOLATION_LEVEL).getValue() + != IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED) { + options[index++] = + Options.isolationLevel(connectionState.getValue(DEFAULT_ISOLATION_LEVEL).getValue()); + } + if (connectionState.getValue(READ_LOCK_MODE).getValue() + != ReadLockMode.READ_LOCK_MODE_UNSPECIFIED) { + options[index++] = Options.readLockMode(connectionState.getValue(READ_LOCK_MODE).getValue()); + } + if (this.clientContext != null) { + options[index++] = Options.clientContext(this.clientContext); } return dbClient.readWriteTransaction(options); } @@ -554,11 +570,15 @@ private ApiFuture> executeTransactionalUpdateAsync( transaction -> { if (analyzeMode == AnalyzeMode.NONE) { return Tuple.of( - transaction.executeUpdate(update.getStatement(), options), null); + transaction.executeUpdate( + update.getStatement(), appendLastStatement(options)), + null); } ResultSet resultSet = transaction.analyzeUpdateStatement( - update.getStatement(), analyzeMode.getQueryAnalyzeMode(), options); + update.getStatement(), + analyzeMode.getQueryAnalyzeMode(), + appendLastStatement(options)); return Tuple.of(null, resultSet); }); state = UnitOfWorkState.COMMITTED; @@ -582,6 +602,29 @@ private ApiFuture> executeTransactionalUpdateAsync( return transactionalResult; } + private static final QueryUpdateOption[] LAST_STATEMENT_OPTIONS = + new QueryUpdateOption[] {Options.lastStatement()}; + + private static UpdateOption[] appendLastStatement(UpdateOption[] options) { + if (options.length == 0) { + return LAST_STATEMENT_OPTIONS; + } + UpdateOption[] result = new UpdateOption[options.length + 1]; + System.arraycopy(options, 0, result, 0, options.length); + result[result.length - 1] = LAST_STATEMENT_OPTIONS[0]; + return result; + } + + private static QueryOption[] appendLastStatement(QueryOption[] options) { + if (options.length == 0) { + return LAST_STATEMENT_OPTIONS; + } + QueryOption[] result = new QueryOption[options.length + 1]; + System.arraycopy(options, 0, result, 0, options.length); + result[result.length - 1] = LAST_STATEMENT_OPTIONS[0]; + return result; + } + /** * Adds a callback to the given future that retries the update statement using Partitioned DML if * the original statement fails with a {@link TransactionMutationLimitExceededException}. @@ -719,7 +762,8 @@ private ApiFuture executeTransactionalBatchUpdateAsync( try { long[] res = transaction.batchUpdate( - Iterables.transform(updates, ParsedStatement::getStatement), options); + Iterables.transform(updates, ParsedStatement::getStatement), + appendLastStatement(options)); state = UnitOfWorkState.COMMITTED; return res; } catch (Throwable t) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java index 81246e41938..e4912b8e4f2 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java @@ -17,14 +17,15 @@ package com.google.cloud.spanner.connection; import com.google.cloud.NoCredentials; +import com.google.cloud.grpc.GcpManagedChannelOptions.GcpChannelPoolOptions; import com.google.cloud.spanner.DecodeMode; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.SessionPoolOptions; import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.cloud.spanner.SpannerOptions; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.base.Ticker; @@ -40,6 +41,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Stream; @@ -54,7 +56,7 @@ * opened and closed, and which {@link Spanner} objects could be closed. * *

              Call the method {@link SpannerPool#closeSpannerPool()} at the end of your application to - * gracefully shutdown all instances in the pool. + * gracefully shut down all instances in the pool. */ public class SpannerPool { // TODO: create separate Client Lib Token for the Connection API. @@ -152,6 +154,10 @@ static class SpannerPoolKey { private final CredentialsKey credentialsKey; private final SessionPoolOptions sessionPoolOptions; private final Integer numChannels; + private final Boolean enableDynamicChannelPool; + private final Integer dcpMinChannels; + private final Integer dcpMaxChannels; + private final Integer dcpInitialChannels; private final boolean usePlainText; private final String userAgent; private final String databaseRole; @@ -161,6 +167,12 @@ static class SpannerPoolKey { private final Boolean enableExtendedTracing; private final Boolean enableApiTracing; private final boolean enableEndToEndTracing; + private final String clientCertificate; + private final String clientCertificateKey; + private final boolean isExperimentalHost; + private final Boolean enableDirectAccess; + private final String universeDomain; + private final String grpcInterceptorProvider; @VisibleForTesting static SpannerPoolKey of(ConnectionOptions options) { @@ -184,6 +196,10 @@ private SpannerPoolKey(ConnectionOptions options) throws IOException { ? SessionPoolOptions.newBuilder().build() : options.getSessionPoolOptions(); this.numChannels = options.getNumChannels(); + this.enableDynamicChannelPool = options.isEnableDynamicChannelPool(); + this.dcpMinChannels = options.getDcpMinChannels(); + this.dcpMaxChannels = options.getDcpMaxChannels(); + this.dcpInitialChannels = options.getDcpInitialChannels(); this.usePlainText = options.isUsePlainText(); this.userAgent = options.getUserAgent(); this.routeToLeader = options.isRouteToLeader(); @@ -192,6 +208,12 @@ private SpannerPoolKey(ConnectionOptions options) throws IOException { this.enableExtendedTracing = options.isEnableExtendedTracing(); this.enableApiTracing = options.isEnableApiTracing(); this.enableEndToEndTracing = options.isEndToEndTracingEnabled(); + this.clientCertificate = options.getClientCertificate(); + this.clientCertificateKey = options.getClientCertificateKey(); + this.isExperimentalHost = options.isExperimentalHost(); + this.enableDirectAccess = options.isEnableDirectAccess(); + this.universeDomain = options.getUniverseDomain(); + this.grpcInterceptorProvider = options.getGrpcInterceptorProviderName(); } @Override @@ -205,6 +227,10 @@ public boolean equals(Object o) { && Objects.equals(this.credentialsKey, other.credentialsKey) && Objects.equals(this.sessionPoolOptions, other.sessionPoolOptions) && Objects.equals(this.numChannels, other.numChannels) + && Objects.equals(this.enableDynamicChannelPool, other.enableDynamicChannelPool) + && Objects.equals(this.dcpMinChannels, other.dcpMinChannels) + && Objects.equals(this.dcpMaxChannels, other.dcpMaxChannels) + && Objects.equals(this.dcpInitialChannels, other.dcpInitialChannels) && Objects.equals(this.databaseRole, other.databaseRole) && Objects.equals(this.usePlainText, other.usePlainText) && Objects.equals(this.userAgent, other.userAgent) @@ -214,7 +240,13 @@ public boolean equals(Object o) { && Objects.equals(this.openTelemetry, other.openTelemetry) && Objects.equals(this.enableExtendedTracing, other.enableExtendedTracing) && Objects.equals(this.enableApiTracing, other.enableApiTracing) - && Objects.equals(this.enableEndToEndTracing, other.enableEndToEndTracing); + && Objects.equals(this.enableEndToEndTracing, other.enableEndToEndTracing) + && Objects.equals(this.clientCertificate, other.clientCertificate) + && Objects.equals(this.clientCertificateKey, other.clientCertificateKey) + && Objects.equals(this.isExperimentalHost, other.isExperimentalHost) + && Objects.equals(this.enableDirectAccess, other.enableDirectAccess) + && Objects.equals(this.universeDomain, other.universeDomain) + && Objects.equals(this.grpcInterceptorProvider, other.grpcInterceptorProvider); } @Override @@ -225,6 +257,10 @@ public int hashCode() { this.credentialsKey, this.sessionPoolOptions, this.numChannels, + this.enableDynamicChannelPool, + this.dcpMinChannels, + this.dcpMaxChannels, + this.dcpInitialChannels, this.usePlainText, this.databaseRole, this.userAgent, @@ -233,7 +269,13 @@ public int hashCode() { this.openTelemetry, this.enableExtendedTracing, this.enableApiTracing, - this.enableEndToEndTracing); + this.enableEndToEndTracing, + this.clientCertificate, + this.clientCertificateKey, + this.isExperimentalHost, + this.enableDirectAccess, + this.universeDomain, + this.grpcInterceptorProvider); } } @@ -242,6 +284,7 @@ public int hashCode() { * threads to be created when the connection API is not used. */ private boolean initialized = false; + /** * Thread that will be run as a shutdown hook on closing the application. This thread will close * any Spanner instances opened by the Connection API that are still open. @@ -378,6 +421,50 @@ Spanner createSpanner(SpannerPoolKey key, ConnectionOptions options) { if (key.numChannels != null) { builder.setNumChannels(key.numChannels); } + // Configure Dynamic Channel Pooling (DCP) based on explicit user setting. + // Note: Setting numChannels disables DCP even if enableDynamicChannelPool is true. + if (key.enableDynamicChannelPool != null && key.numChannels == null) { + if (Boolean.TRUE.equals(key.enableDynamicChannelPool)) { + builder.enableDynamicChannelPool(); + // Build custom GcpChannelPoolOptions if any DCP-specific options are set. + if (key.dcpMinChannels != null + || key.dcpMaxChannels != null + || key.dcpInitialChannels != null) { + // Build GcpChannelPoolOptions from scratch with custom values or Spanner defaults. + // Note: GcpChannelPoolOptions does not have a toBuilder() method, so we must + // construct from scratch using SpannerOptions defaults for unspecified values. + int minChannels = + key.dcpMinChannels != null + ? key.dcpMinChannels + : SpannerOptions.DEFAULT_DYNAMIC_POOL_MIN_CHANNELS; + int maxChannels = + key.dcpMaxChannels != null + ? key.dcpMaxChannels + : SpannerOptions.DEFAULT_DYNAMIC_POOL_MAX_CHANNELS; + int initChannels = + key.dcpInitialChannels != null + ? key.dcpInitialChannels + : SpannerOptions.DEFAULT_DYNAMIC_POOL_INITIAL_SIZE; + GcpChannelPoolOptions poolOptions = + GcpChannelPoolOptions.newBuilder() + .setMinSize(minChannels) + .setMaxSize(maxChannels) + .setInitSize(initChannels) + .setDynamicScaling( + SpannerOptions.DEFAULT_DYNAMIC_POOL_MIN_RPC, + SpannerOptions.DEFAULT_DYNAMIC_POOL_MAX_RPC, + SpannerOptions.DEFAULT_DYNAMIC_POOL_SCALE_DOWN_INTERVAL) + .setAffinityKeyLifetime(SpannerOptions.DEFAULT_DYNAMIC_POOL_AFFINITY_KEY_LIFETIME) + .setCleanupInterval(SpannerOptions.DEFAULT_DYNAMIC_POOL_CLEANUP_INTERVAL) + .build(); + builder.setGcpChannelPoolOptions(poolOptions); + } + } else { + // Explicitly disable DCP when enableDynamicChannelPool=false. + // This ensures consistent behavior even if the default changes in the future. + builder.disableDynamicChannelPool(); + } + } if (options.getChannelProvider() != null) { builder.setChannelProvider(options.getChannelProvider()); } @@ -393,6 +480,21 @@ Spanner createSpanner(SpannerPoolKey key, ConnectionOptions options) { // Set a custom channel configurator to allow http instead of https. builder.setChannelConfigurator(ManagedChannelBuilder::usePlaintext); } + if (key.clientCertificate != null && key.clientCertificateKey != null) { + builder.useClientCert(key.clientCertificate, key.clientCertificateKey); + } + if (key.isExperimentalHost) { + builder.setExperimentalHost(key.host); + } + if (key.enableDirectAccess != null) { + builder.setEnableDirectAccess(key.enableDirectAccess); + } + if (key.universeDomain != null) { + builder.setUniverseDomain(key.universeDomain); + } + if (key.grpcInterceptorProvider != null) { + builder.setInterceptorProvider(options.getGrpcInterceptorProvider()); + } if (options.getConfigurator() != null) { options.getConfigurator().configure(builder); } @@ -481,7 +583,8 @@ void checkAndCloseSpanners( ErrorCode.FAILED_PRECONDITION, "There is/are " + keysStillInUse.size() - + " connection(s) still open. Close all connections before calling closeSpanner()"); + + " connection(s) still open. Close all connections before calling" + + " closeSpanner()"); } } finally { if (closerService != null) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java index fdd10bbf5ae..3e70170389c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java @@ -46,15 +46,6 @@ Dialect getDialect() { return Dialect.GOOGLE_STANDARD_SQL; } - /** - * Indicates whether the parser supports the {@code EXPLAIN} clause. The Spanner parser does - * support it. - */ - @Override - protected boolean supportsExplain() { - return true; - } - @Override boolean supportsNestedComments() { return false; @@ -154,7 +145,7 @@ String removeCommentsAndTrimInternal(String sql) { startQuote = 0; } } else if (c == '\\') { - lastCharWasEscapeChar = true; + lastCharWasEscapeChar = !lastCharWasEscapeChar; } else { lastCharWasEscapeChar = false; } @@ -303,7 +294,7 @@ protected boolean checkReturningClauseInternal(String rawSql) { startQuote = 0; } } else if (c == '\\') { - lastCharWasEscapeChar = true; + lastCharWasEscapeChar = !lastCharWasEscapeChar; } else { lastCharWasEscapeChar = false; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementExecutor.java index 7340834a926..b022158b917 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementExecutor.java @@ -138,6 +138,7 @@ java.time.Duration asDuration() { */ private static final ThreadFactory DEFAULT_VIRTUAL_THREAD_FACTORY = ThreadFactoryUtil.createVirtualOrPlatformDaemonThreadFactory("connection-executor", true); + /** * Use a {@link ThreadFactory} that produces daemon threads and sets a recognizable name on the * threads. @@ -171,9 +172,23 @@ private static ListeningExecutorService createExecutorService(StatementExecutorT */ private final List interceptors; - enum StatementExecutorType { + /** The executor type that is used for statements that are executed on a connection. */ + public enum StatementExecutorType { + /** + * Use a platform thread per connection. This allows async execution of statements, but costs + * more resources than the other options. + */ PLATFORM_THREAD, + /** + * Use a virtual thread per connection. This allows async execution of statements. Virtual + * threads are only supported on Java 21 and higher. + */ VIRTUAL_THREAD, + /** + * Use the calling thread for execution. This does not support async execution of statements. + * This option is used by drivers that do not support async execution, such as JDBC and + * PGAdapter. + */ DIRECT_EXECUTOR, } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementHintParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementHintParser.java index d6d4a7fa48c..727582bb8c4 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementHintParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementHintParser.java @@ -61,8 +61,8 @@ class StatementHintParser { new SimpleParser( dialect, sql, - /* pos = */ 0, - /* treatHintCommentsAsTokens = */ dialect == Dialect.POSTGRESQL); + /* pos= */ 0, + /* treatHintCommentsAsTokens= */ dialect == Dialect.POSTGRESQL); this.hasStatementHints = parser.peekTokens(getStartHintTokens(dialect)); if (this.hasStatementHints) { Tuple> hints = extract(parser, clientSideStatementHintNames); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java index bd364ed522f..55f09f46d93 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java @@ -58,6 +58,8 @@ enum ClientSideStatementType { SET_AUTOCOMMIT_DML_MODE, SHOW_STATEMENT_TIMEOUT, SET_STATEMENT_TIMEOUT, + SHOW_TRANSACTION_TIMEOUT, + SET_TRANSACTION_TIMEOUT, SHOW_READ_TIMESTAMP, SHOW_COMMIT_TIMESTAMP, SHOW_COMMIT_RESPONSE, @@ -96,6 +98,7 @@ enum ClientSideStatementType { SET_RPC_PRIORITY, SHOW_RPC_PRIORITY, SHOW_TRANSACTION_ISOLATION_LEVEL, + SHOW_DEFAULT_TRANSACTION_ISOLATION, SHOW_SAVEPOINT_SUPPORT, SET_SAVEPOINT_SUPPORT, SHOW_DATA_BOOST_ENABLED, @@ -118,8 +121,11 @@ enum ClientSideStatementType { SHOW_AUTO_BATCH_DML, SET_AUTO_BATCH_DML_UPDATE_COUNT, SHOW_AUTO_BATCH_DML_UPDATE_COUNT, + SET_BATCH_DML_UPDATE_COUNT, SET_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION, SHOW_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION, + SHOW_READ_LOCK_MODE, + SET_READ_LOCK_MODE, } /** diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/TransactionRunnerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/TransactionRunnerImpl.java new file mode 100644 index 00000000000..504b084dba3 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/TransactionRunnerImpl.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.spanner.connection; + +import static com.google.cloud.spanner.SpannerApiFutures.get; + +import com.google.cloud.spanner.AbortedException; +import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.cloud.spanner.connection.Connection.TransactionCallable; +import com.google.cloud.spanner.connection.ConnectionImpl.Caller; +import com.google.cloud.spanner.connection.UnitOfWork.CallType; + +class TransactionRunnerImpl { + private final ConnectionImpl connection; + + TransactionRunnerImpl(ConnectionImpl connection) { + this.connection = connection; + } + + T run(TransactionCallable callable) { + connection.beginTransaction(); + // Disable internal retries during this transaction. + connection.setRetryAbortsInternally(/* retryAbortsInternally= */ false, /* local= */ true); + UnitOfWork transaction = connection.getCurrentUnitOfWorkOrStartNewUnitOfWork(); + while (true) { + try { + T result = callable.run(connection); + get(connection.commitAsync(CallType.SYNC, Caller.TRANSACTION_RUNNER)); + return result; + } catch (AbortedException abortedException) { + try { + //noinspection BusyWait + Thread.sleep(abortedException.getRetryDelayInMillis()); + connection.resetForRetry(transaction); + } catch (InterruptedException interruptedException) { + connection.rollbackAsync(CallType.SYNC, Caller.TRANSACTION_RUNNER); + throw SpannerExceptionFactory.propagateInterrupt(interruptedException); + } catch (Throwable t) { + connection.rollbackAsync(CallType.SYNC, Caller.TRANSACTION_RUNNER); + throw t; + } + } catch (Throwable t) { + connection.rollbackAsync(CallType.SYNC, Caller.TRANSACTION_RUNNER); + throw t; + } + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java index ffa93d486e1..82b1bf8a15c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java @@ -87,16 +87,24 @@ interface EndTransactionCallback { /** Cancel the currently running statement (if any and the statement may be cancelled). */ void cancel(); - /** @return the type of unit of work. */ + /** + * @return the type of unit of work. + */ Type getType(); - /** @return the current state of this unit of work. */ + /** + * @return the current state of this unit of work. + */ UnitOfWorkState getState(); - /** @return true if this unit of work is still active. */ + /** + * @return true if this unit of work is still active. + */ boolean isActive(); - /** @return the {@link Span} that is used by this {@link UnitOfWork}. */ + /** + * @return the {@link Span} that is used by this {@link UnitOfWork}. + */ Span getSpan(); /** Returns true if this transaction can only be used for a single statement. */ @@ -125,13 +133,23 @@ interface EndTransactionCallback { ApiFuture rollbackAsync( @Nonnull CallType callType, @Nonnull EndTransactionCallback callback); - /** @see Connection#savepoint(String) */ + default void resetForRetry() { + throw new UnsupportedOperationException(); + } + + /** + * @see Connection#savepoint(String) + */ void savepoint(@Nonnull String name, @Nonnull Dialect dialect); - /** @see Connection#releaseSavepoint(String) */ + /** + * @see Connection#releaseSavepoint(String) + */ void releaseSavepoint(@Nonnull String name); - /** @see Connection#rollbackToSavepoint(String) */ + /** + * @see Connection#rollbackToSavepoint(String) + */ void rollbackToSavepoint(@Nonnull String name, @Nonnull SavepointSupport savepointSupport); /** @@ -153,7 +171,9 @@ ApiFuture rollbackAsync( */ void abortBatch(); - /** @return true if this unit of work is read-only. */ + /** + * @return true if this unit of work is read-only. + */ boolean isReadOnly(); /** @@ -198,7 +218,9 @@ ApiFuture partitionQueryAsync( */ Timestamp getReadTimestamp(); - /** @return the read timestamp of this transaction or null if there is no read timestamp. */ + /** + * @return the read timestamp of this transaction or null if there is no read timestamp. + */ Timestamp getReadTimestampOrNull(); /** @@ -207,7 +229,9 @@ ApiFuture partitionQueryAsync( */ Timestamp getCommitTimestamp(); - /** @return the commit timestamp of this transaction or null if there is no commit timestamp. */ + /** + * @return the commit timestamp of this transaction or null if there is no commit timestamp. + */ Timestamp getCommitTimestampOrNull(); /** diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/nativeimage/SpannerFeature.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/nativeimage/SpannerFeature.java index 3a1e042b3d0..60b41620fd7 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/nativeimage/SpannerFeature.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/nativeimage/SpannerFeature.java @@ -39,6 +39,8 @@ final class SpannerFeature implements Feature { "com.google.cloud.spanner.connection.ClientSideStatementNoParamExecutor"; private static final String CLIENT_SIDE_STATEMENT_SET_EXECUTOR = "com.google.cloud.spanner.connection.ClientSideStatementSetExecutor"; + private static final String CLIENT_SIDE_STATEMENT_BEGIN_EXECUTOR = + "com.google.cloud.spanner.connection.ClientSideStatementBeginExecutor"; private static final String CLIENT_SIDE_STATEMENT_PG_EXECUTOR = "com.google.cloud.spanner.connection.ClientSideStatementPgBeginExecutor"; private static final String CLIENT_SIDE_STATEMENT_EXPLAIN_EXECUTOR = @@ -67,6 +69,9 @@ public void beforeAnalysis(BeforeAnalysisAccess access) { if (access.findClassByName(CLIENT_SIDE_STATEMENT_NO_PARAM_EXECUTOR) != null) { NativeImageUtils.registerClassForReflection(access, CLIENT_SIDE_STATEMENT_NO_PARAM_EXECUTOR); } + if (access.findClassByName(CLIENT_SIDE_STATEMENT_BEGIN_EXECUTOR) != null) { + NativeImageUtils.registerClassForReflection(access, CLIENT_SIDE_STATEMENT_BEGIN_EXECUTOR); + } if (access.findClassByName(CLIENT_SIDE_STATEMENT_PG_EXECUTOR) != null) { NativeImageUtils.registerClassForReflection(access, CLIENT_SIDE_STATEMENT_PG_EXECUTOR); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpoint.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpoint.java new file mode 100644 index 00000000000..cd6b386dc8a --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpoint.java @@ -0,0 +1,66 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import io.grpc.ManagedChannel; + +/** + * Represents a Spanner server endpoint for location-aware routing. + * + *

              Each instance wraps a gRPC {@link ManagedChannel} connected to a specific Spanner server. The + * {@link ChannelEndpointCache} creates and caches these instances. + * + *

              Implementations must be thread-safe as instances may be shared across multiple concurrent + * operations. + * + * @see ChannelEndpointCache + */ +@InternalApi +public interface ChannelEndpoint { + + /** + * Returns the network address of this server. + * + * @return the server address in "host:port" format + */ + String getAddress(); + + /** + * Returns whether this server is ready to accept RPCs. + * + *

              A server is considered unhealthy if: + * + *

                + *
              • The underlying channel is shutdown or terminated + *
              • The channel is in a transient failure state + *
              + * + * @return true if the server is healthy and ready to accept RPCs + */ + boolean isHealthy(); + + /** + * Returns the gRPC channel for making RPCs to this server. + * + *

              The returned channel is managed by the {@link ChannelEndpointCache} and should not be shut + * down directly by callers. + * + * @return the managed channel for this server + */ + ManagedChannel getChannel(); +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpointCache.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpointCache.java new file mode 100644 index 00000000000..879ed546f2c --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpointCache.java @@ -0,0 +1,79 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; + +/** + * Cache for server connections used in location-aware routing. + * + *

              Implementations are expected to cache {@link ChannelEndpoint} instances such that repeated + * calls with the same address return the same instance. This allows routing components to + * efficiently manage server references. + * + *

              Implementations must be thread-safe. Multiple threads may concurrently call {@link + * #get(String)} with different addresses. + */ +@InternalApi +public interface ChannelEndpointCache { + + /** + * Returns the default channel endpoint. + * + *

              The default channel is the original endpoint configured in {@link + * com.google.cloud.spanner.SpannerOptions}. It is used as a fallback when the location cache does + * not have routing information for a request. + * + * @return the default channel, never null + */ + ChannelEndpoint defaultChannel(); + + /** + * Returns a cached channel for the given address, creating it if needed. + * + *

              If a channel for this address already exists in the cache, the cached instance is returned. + * Otherwise, a new server connection is created and cached. + * + * @param address the server address in "host:port" format + * @return a channel instance for the address, never null + * @throws com.google.cloud.spanner.SpannerException if the channel cannot be created + */ + ChannelEndpoint get(String address); + + /** + * Evicts a server connection from the cache and gracefully shuts down its channel. + * + *

              This method should be called when a server becomes unhealthy or is no longer needed. The + * channel shutdown is graceful: existing RPCs are allowed to complete, but new RPCs will not be + * accepted on this channel. + * + *

              If the address is not in the cache, this method does nothing. + * + * @param address the server address to evict + */ + void evict(String address); + + /** + * Shuts down all cached server connections. + * + *

              This method should be called when the Spanner client is closed to release all resources. + * Each channel is shut down gracefully, allowing in-flight RPCs to complete. + * + *

              After calling this method, the cache should not be used to create new connections. + */ + void shutdown(); +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpointCacheFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpointCacheFactory.java new file mode 100644 index 00000000000..0f122e4b765 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelEndpointCacheFactory.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import java.io.IOException; + +/** Factory for creating {@link ChannelEndpointCache} instances. */ +@InternalApi +public interface ChannelEndpointCacheFactory { + ChannelEndpointCache create(InstantiatingGrpcChannelProvider baseProvider) throws IOException; +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelFinder.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelFinder.java new file mode 100644 index 00000000000..4ced18eb920 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/ChannelFinder.java @@ -0,0 +1,191 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CacheUpdate; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.Mutation; +import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.RoutingHint; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionSelector; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Finds a server for a request using location-aware routing metadata. + * + *

              This component is per-database and maintains both recipe and range caches. + */ +@InternalApi +public final class ChannelFinder { + private final Object updateLock = new Object(); + private final AtomicLong databaseId = new AtomicLong(); + private final KeyRecipeCache recipeCache = new KeyRecipeCache(); + private final KeyRangeCache rangeCache; + + public ChannelFinder(ChannelEndpointCache endpointCache) { + this.rangeCache = new KeyRangeCache(Objects.requireNonNull(endpointCache)); + } + + void useDeterministicRandom() { + rangeCache.useDeterministicRandom(); + } + + public void update(CacheUpdate update) { + synchronized (updateLock) { + long currentId = databaseId.get(); + if (currentId != update.getDatabaseId()) { + if (currentId != 0) { + recipeCache.clear(); + rangeCache.clear(); + } + databaseId.set(update.getDatabaseId()); + } + if (update.hasKeyRecipes()) { + recipeCache.addRecipes(update.getKeyRecipes()); + } + rangeCache.addRanges(update); + } + } + + public ChannelEndpoint findServer(ReadRequest.Builder reqBuilder) { + return findServer(reqBuilder, preferLeader(reqBuilder.getTransaction())); + } + + public ChannelEndpoint findServer(ReadRequest.Builder reqBuilder, boolean preferLeader) { + recipeCache.computeKeys(reqBuilder); + return fillRoutingHint( + preferLeader, + KeyRangeCache.RangeMode.COVERING_SPLIT, + reqBuilder.getDirectedReadOptions(), + reqBuilder.getRoutingHintBuilder()); + } + + public ChannelEndpoint findServer(ExecuteSqlRequest.Builder reqBuilder) { + return findServer(reqBuilder, preferLeader(reqBuilder.getTransaction())); + } + + public ChannelEndpoint findServer(ExecuteSqlRequest.Builder reqBuilder, boolean preferLeader) { + recipeCache.computeKeys(reqBuilder); + return fillRoutingHint( + preferLeader, + KeyRangeCache.RangeMode.PICK_RANDOM, + reqBuilder.getDirectedReadOptions(), + reqBuilder.getRoutingHintBuilder()); + } + + public ChannelEndpoint findServer(BeginTransactionRequest.Builder reqBuilder) { + if (!reqBuilder.hasMutationKey()) { + return null; + } + return routeMutation( + reqBuilder.getMutationKey(), + preferLeader(reqBuilder.getOptions()), + reqBuilder.getRoutingHintBuilder()); + } + + public ChannelEndpoint fillRoutingHint(CommitRequest.Builder reqBuilder) { + Mutation mutation = selectMutationForRouting(reqBuilder.getMutationsList()); + if (mutation == null) { + return null; + } + return routeMutation(mutation, /* preferLeader= */ true, reqBuilder.getRoutingHintBuilder()); + } + + private static Mutation selectMutationForRouting(List mutations) { + if (mutations.isEmpty()) { + return null; + } + List mutationsExcludingInsert = new ArrayList<>(); + Mutation largestInsertMutation = null; + for (Mutation mutation : mutations) { + if (!mutation.hasInsert()) { + mutationsExcludingInsert.add(mutation); + continue; + } + if (largestInsertMutation == null + || mutation.getInsert().getValuesCount() + > largestInsertMutation.getInsert().getValuesCount()) { + largestInsertMutation = mutation; + } + } + if (!mutationsExcludingInsert.isEmpty()) { + return mutationsExcludingInsert.get( + ThreadLocalRandom.current().nextInt(mutationsExcludingInsert.size())); + } + return largestInsertMutation; + } + + private ChannelEndpoint routeMutation( + Mutation mutation, boolean preferLeader, RoutingHint.Builder hintBuilder) { + recipeCache.applySchemaGeneration(hintBuilder); + TargetRange target = recipeCache.mutationToTargetRange(mutation); + if (target == null) { + return null; + } + recipeCache.applyTargetRange(hintBuilder, target); + return fillRoutingHint( + preferLeader, + KeyRangeCache.RangeMode.COVERING_SPLIT, + DirectedReadOptions.getDefaultInstance(), + hintBuilder); + } + + private ChannelEndpoint fillRoutingHint( + boolean preferLeader, + KeyRangeCache.RangeMode rangeMode, + DirectedReadOptions directedReadOptions, + RoutingHint.Builder hintBuilder) { + long id = databaseId.get(); + if (id == 0) { + return null; + } + hintBuilder.setDatabaseId(id); + return rangeCache.fillRoutingHint(preferLeader, rangeMode, directedReadOptions, hintBuilder); + } + + private static boolean preferLeader(TransactionSelector selector) { + switch (selector.getSelectorCase()) { + case BEGIN: + return !selector.getBegin().hasReadOnly() || selector.getBegin().getReadOnly().getStrong(); + case SINGLE_USE: + if (!selector.getSingleUse().hasReadOnly()) { + return true; + } + return selector.getSingleUse().getReadOnly().getStrong(); + case ID: + case SELECTOR_NOT_SET: + default: + return true; + } + } + + private static boolean preferLeader(TransactionOptions options) { + if (options == null || !options.hasReadOnly()) { + return true; + } + return options.getReadOnly().getStrong(); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 0e540ea7926..2faa3a62fb9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -16,8 +16,10 @@ package com.google.cloud.spanner.spi.v1; +import static com.google.cloud.spanner.SpannerExceptionFactory.asSpannerException; import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException; import static com.google.cloud.spanner.ThreadFactoryUtil.tryCreateVirtualThreadPerTaskExecutor; +import static com.google.cloud.spanner.XGoogSpannerRequestId.REQUEST_ID_CALL_OPTIONS_KEY; import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; @@ -49,12 +51,14 @@ import com.google.api.gax.rpc.StatusCode; import com.google.api.gax.rpc.StatusCode.Code; import com.google.api.gax.rpc.StreamController; +import com.google.api.gax.rpc.TransportChannel; import com.google.api.gax.rpc.TransportChannelProvider; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.rpc.UnaryCallable; import com.google.api.gax.rpc.UnavailableException; import com.google.api.gax.rpc.WatchdogProvider; import com.google.api.pathtemplate.PathTemplate; +import com.google.auth.Credentials; import com.google.cloud.RetryHelper; import com.google.cloud.RetryHelper.RetryHelperException; import com.google.cloud.grpc.GcpManagedChannel; @@ -62,6 +66,9 @@ import com.google.cloud.grpc.GcpManagedChannelOptions; import com.google.cloud.grpc.GcpManagedChannelOptions.GcpMetricsOptions; import com.google.cloud.grpc.GrpcTransportOptions; +import com.google.cloud.grpc.fallback.GcpFallbackChannel; +import com.google.cloud.grpc.fallback.GcpFallbackChannelOptions; +import com.google.cloud.grpc.fallback.GcpFallbackOpenTelemetry; import com.google.cloud.spanner.AdminRequestsPerMinuteExceededException; import com.google.cloud.spanner.BackupId; import com.google.cloud.spanner.ErrorCode; @@ -71,6 +78,8 @@ import com.google.cloud.spanner.SpannerOptions; import com.google.cloud.spanner.SpannerOptions.CallContextConfigurator; import com.google.cloud.spanner.SpannerOptions.CallCredentialsProvider; +import com.google.cloud.spanner.XGoogSpannerRequestId; +import com.google.cloud.spanner.XGoogSpannerRequestId.RequestIdCreator; import com.google.cloud.spanner.admin.database.v1.stub.DatabaseAdminStub; import com.google.cloud.spanner.admin.database.v1.stub.DatabaseAdminStubSettings; import com.google.cloud.spanner.admin.database.v1.stub.GrpcDatabaseAdminCallableFactory; @@ -85,8 +94,6 @@ import com.google.common.base.Function; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.io.Resources; @@ -102,6 +109,7 @@ import com.google.longrunning.GetOperationRequest; import com.google.longrunning.Operation; import com.google.longrunning.OperationsGrpc; +import com.google.protobuf.ByteString; import com.google.protobuf.Empty; import com.google.protobuf.FieldMask; import com.google.protobuf.InvalidProtocolBufferException; @@ -183,16 +191,25 @@ import com.google.spanner.v1.SpannerGrpc; import com.google.spanner.v1.Transaction; import io.grpc.CallCredentials; +import io.grpc.CallOptions; +import io.grpc.Channel; +import io.grpc.ClientCall; +import io.grpc.ClientInterceptor; import io.grpc.Context; +import io.grpc.ForwardingChannelBuilder2; +import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import io.grpc.MethodDescriptor; -import io.opencensus.metrics.Metrics; +import io.grpc.auth.MoreCallCredentials; +import io.opentelemetry.api.OpenTelemetry; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -212,6 +229,7 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; @@ -221,9 +239,11 @@ public class GapicSpannerRpc implements SpannerRpc { private static final PathTemplate PROJECT_NAME_TEMPLATE = PathTemplate.create("projects/{project}"); + public static final String EXPERIMENTAL_LOCATION_API_ENV_VAR = + "GOOGLE_SPANNER_EXPERIMENTAL_LOCATION_API"; private static final PathTemplate OPERATION_NAME_TEMPLATE = PathTemplate.create("{database=projects/*/instances/*/databases/*}/operations/{operation}"); - private static final int MAX_MESSAGE_SIZE = 100 * 1024 * 1024; + private static final int MAX_MESSAGE_SIZE = 256 * 1024 * 1024; private static final int MAX_METADATA_SIZE = 32 * 1024; // bytes private static final String PROPERTY_TIMEOUT_SECONDS = "com.google.cloud.spanner.watchdogTimeoutSeconds"; @@ -236,8 +256,10 @@ public class GapicSpannerRpc implements SpannerRpc { private static final String CLIENT_LIBRARY_LANGUAGE = "spanner-java"; public static final String DEFAULT_USER_AGENT = CLIENT_LIBRARY_LANGUAGE + "/" + GaxProperties.getLibraryVersion(GapicSpannerRpc.class); + public static boolean DIRECTPATH_CHANNEL_CREATED = false; private static final String API_FILE = "grpc-gcp-apiconfig.json"; + private final RequestIdCreator requestIdCreator = new RequestIdCreatorImpl(); private boolean rpcIsClosed; private final SpannerStub spannerStub; private final RetrySettings executeQueryRetrySettings; @@ -277,8 +299,10 @@ public class GapicSpannerRpc implements SpannerRpc { private final boolean endToEndTracingEnabled; private final int numChannels; private final boolean isGrpcGcpExtensionEnabled; + private final boolean isDynamicChannelPoolEnabled; + @Nullable private final KeyAwareChannel keyAwareChannel; - private Supplier directPathEnabledSupplier = () -> false; + private final GrpcCallContext baseGrpcCallContext; public static GapicSpannerRpc create(SpannerOptions options) { return new GapicSpannerRpc(options); @@ -333,59 +357,40 @@ public GapicSpannerRpc(final SpannerOptions options) { this.endToEndTracingEnabled = options.isEndToEndTracingEnabled(); this.numChannels = options.getNumChannels(); this.isGrpcGcpExtensionEnabled = options.isGrpcGcpExtensionEnabled(); + this.isDynamicChannelPoolEnabled = options.isDynamicChannelPoolEnabled(); + this.baseGrpcCallContext = createBaseCallContext(); + + boolean isEnableDirectAccess = options.isEnableDirectAccess(); if (initializeStubs) { - // First check if SpannerOptions provides a TransportChannelProvider. Create one - // with information gathered from SpannerOptions if none is provided + CredentialsProvider credentialsProvider = + GrpcTransportOptions.setUpCredentialsProvider(options); + InstantiatingGrpcChannelProvider.Builder defaultChannelProviderBuilder = - InstantiatingGrpcChannelProvider.newBuilder() - .setChannelConfigurator(options.getChannelConfigurator()) - .setEndpoint(options.getEndpoint()) - .setMaxInboundMessageSize(MAX_MESSAGE_SIZE) - .setMaxInboundMetadataSize(MAX_METADATA_SIZE) - .setPoolSize(options.getNumChannels()) - - // Set a keepalive time of 120 seconds to help long running - // commit GRPC calls succeed - .setKeepAliveTimeDuration(Duration.ofSeconds(GRPC_KEEPALIVE_SECONDS)) - - // Then check if SpannerOptions provides an InterceptorProvider. Create a default - // SpannerInterceptorProvider if none is provided - .setInterceptorProvider( - SpannerInterceptorProvider.create( - MoreObjects.firstNonNull( - options.getInterceptorProvider(), - SpannerInterceptorProvider.createDefault( - options.getOpenTelemetry(), - (() -> directPathEnabledSupplier.get())))) - // This sets the trace context headers. - .withTraceContext(endToEndTracingEnabled, options.getOpenTelemetry()) - // This sets the response compressor (Server -> Client). - .withEncoding(compressorName)) - .setHeaderProvider(headerProviderWithUserAgent) - .setAllowNonDefaultServiceAccount(true); - String directPathXdsEnv = System.getenv("GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS"); - boolean isAttemptDirectPathXds = Boolean.parseBoolean(directPathXdsEnv); - if (isAttemptDirectPathXds) { - defaultChannelProviderBuilder.setAttemptDirectPath(true); - defaultChannelProviderBuilder.setAttemptDirectPathXds(); - } - if (options.isUseVirtualThreads()) { - ExecutorService executor = - tryCreateVirtualThreadPerTaskExecutor("spanner-virtual-grpc-executor"); - if (executor != null) { - defaultChannelProviderBuilder.setExecutor(executor); - } + createChannelProviderBuilder(options, headerProviderWithUserAgent, isEnableDirectAccess); + + if (options.getChannelProvider() == null + && isEnableDirectAccess + && options.isEnableGcpFallback()) { + setupGcpFallback( + defaultChannelProviderBuilder, + options, + headerProviderWithUserAgent, + credentialsProvider); } - // If it is enabled in options uses the channel pool provided by the gRPC-GCP extension. - maybeEnableGrpcGcpExtension(defaultChannelProviderBuilder, options); - TransportChannelProvider channelProvider = + boolean enableLocationApi = options.isEnableLocationApi(); + // First check if SpannerOptions provides a TransportChannelProvider. Create one + // with information gathered from SpannerOptions if none is provided + TransportChannelProvider baseChannelProvider = MoreObjects.firstNonNull( options.getChannelProvider(), defaultChannelProviderBuilder.build()); - - CredentialsProvider credentialsProvider = - GrpcTransportOptions.setUpCredentialsProvider(options); + TransportChannelProvider channelProvider = + enableLocationApi && baseChannelProvider instanceof InstantiatingGrpcChannelProvider + ? new KeyAwareTransportChannelProvider( + (InstantiatingGrpcChannelProvider) baseChannelProvider, + options.getChannelEndpointCacheFactory()) + : baseChannelProvider; spannerWatchdog = Executors.newSingleThreadScheduledExecutor( @@ -402,27 +407,25 @@ public GapicSpannerRpc(final SpannerOptions options) { final String emulatorHost = System.getenv("SPANNER_EMULATOR_HOST"); try { + // TODO: make our retry settings to inject and increment + // XGoogSpannerRequestId whenever a retry occurs. SpannerStubSettings spannerStubSettings = - options - .getSpannerStubSettings() - .toBuilder() + options.getSpannerStubSettings().toBuilder() .setTransportChannelProvider(channelProvider) .setCredentialsProvider(credentialsProvider) .setStreamWatchdogProvider(watchdogProvider) .setTracerFactory( options.getApiTracerFactory( - /* isAdminClient = */ false, isEmulatorEnabled(options, emulatorHost))) + /* isAdminClient= */ false, isEmulatorEnabled(options, emulatorHost))) .build(); ClientContext clientContext = ClientContext.create(spannerStubSettings); + this.keyAwareChannel = extractKeyAwareChannel(clientContext.getTransportChannel()); this.spannerStub = GrpcSpannerStubWithStubSettingsAndClientContext.create( spannerStubSettings, clientContext); - this.directPathEnabledSupplier = - Suppliers.memoize( - () -> { - return ((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath() - && isAttemptDirectPathXds; - }); + DIRECTPATH_CHANNEL_CREATED = + ((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath() + && isEnableDirectAccess; this.readRetrySettings = options.getSpannerStubSettings().streamingReadSettings().getRetrySettings(); this.readRetryableCodes = @@ -434,11 +437,7 @@ public GapicSpannerRpc(final SpannerOptions options) { this.commitRetrySettings = options.getSpannerStubSettings().commitSettings().getRetrySettings(); partitionedDmlRetrySettings = - options - .getSpannerStubSettings() - .executeSqlSettings() - .getRetrySettings() - .toBuilder() + options.getSpannerStubSettings().executeSqlSettings().getRetrySettings().toBuilder() .setInitialRpcTimeout(options.getPartitionedDmlTimeout()) .setMaxRpcTimeout(options.getPartitionedDmlTimeout()) .setTotalTimeout(options.getPartitionedDmlTimeout()) @@ -451,7 +450,7 @@ public GapicSpannerRpc(final SpannerOptions options) { .setStreamWatchdogProvider(watchdogProvider) .setTracerFactory( options.getApiTracerFactory( - /* isAdminClient = */ false, isEmulatorEnabled(options, emulatorHost))) + /* isAdminClient= */ false, isEmulatorEnabled(options, emulatorHost))) .executeSqlSettings() .setRetrySettings(partitionedDmlRetrySettings); pdmlSettings.executeStreamingSqlSettings().setRetrySettings(partitionedDmlRetrySettings); @@ -471,30 +470,27 @@ public GapicSpannerRpc(final SpannerOptions options) { .withCheckInterval(pdmlSettings.getStreamWatchdogCheckInterval())); } this.partitionedDmlStub = - GrpcSpannerStubWithStubSettingsAndClientContext.create(pdmlSettings.build()); + GrpcSpannerStubWithStubSettingsAndClientContext.create( + pdmlSettings.build(), clientContext); this.instanceAdminStubSettings = - options - .getInstanceAdminStubSettings() - .toBuilder() + options.getInstanceAdminStubSettings().toBuilder() .setTransportChannelProvider(channelProvider) .setCredentialsProvider(credentialsProvider) .setStreamWatchdogProvider(watchdogProvider) .setTracerFactory( options.getApiTracerFactory( - /* isAdminClient = */ true, isEmulatorEnabled(options, emulatorHost))) + /* isAdminClient= */ true, isEmulatorEnabled(options, emulatorHost))) .build(); this.instanceAdminStub = GrpcInstanceAdminStub.create(instanceAdminStubSettings); this.databaseAdminStubSettings = - options - .getDatabaseAdminStubSettings() - .toBuilder() + options.getDatabaseAdminStubSettings().toBuilder() .setTransportChannelProvider(channelProvider) .setCredentialsProvider(credentialsProvider) .setStreamWatchdogProvider(watchdogProvider) .setTracerFactory( options.getApiTracerFactory( - /* isAdminClient = */ true, isEmulatorEnabled(options, emulatorHost))) + /* isAdminClient= */ true, isEmulatorEnabled(options, emulatorHost))) .build(); // Automatically retry RESOURCE_EXHAUSTED for GetOperation if auto-throttling of @@ -540,9 +536,10 @@ public UnaryCallable createUnaryCalla // is actually running. checkEmulatorConnection(options, channelProvider, credentialsProvider, emulatorHost); } catch (Exception e) { - throw newSpannerException(e); + throw asSpannerException(e); } } else { + this.keyAwareChannel = null; this.databaseAdminStub = null; this.instanceAdminStub = null; this.spannerStub = null; @@ -560,6 +557,45 @@ public UnaryCallable createUnaryCalla } } + @VisibleForTesting + GcpFallbackChannelOptions createFallbackChannelOptions( + GcpFallbackOpenTelemetry fallbackTelemetry, int minFailedCalls) { + return GcpFallbackChannelOptions.newBuilder() + .setPrimaryChannelName("directpath") + .setFallbackChannelName("cloudpath") + .setMinFailedCalls(minFailedCalls) + .setGcpFallbackOpenTelemetry(fallbackTelemetry) + .build(); + } + + @VisibleForTesting + OpenTelemetry getFallbackOpenTelemetry(SpannerOptions options) { + if (options.isEnableBuiltInMetrics()) { + OpenTelemetry builtInOtel = options.getBuiltInOpenTelemetry(); + if (builtInOtel != null) { + return builtInOtel; + } + } + return OpenTelemetry.noop(); + } + + private static KeyAwareChannel extractKeyAwareChannel(TransportChannel transportChannel) { + if (transportChannel instanceof GrpcTransportChannel) { + Channel channel = ((GrpcTransportChannel) transportChannel).getChannel(); + if (channel instanceof KeyAwareChannel) { + return (KeyAwareChannel) channel; + } + } + return null; + } + + @Override + public void clearTransactionAffinity(ByteString transactionId) { + if (keyAwareChannel != null) { + keyAwareChannel.clearTransactionAffinity(transactionId); + } + } + private static String parseGrpcGcpApiConfig() { try { return Resources.toString( @@ -569,24 +605,181 @@ private static String parseGrpcGcpApiConfig() { } } - // Enhance metric options for gRPC-GCP extension. Adds metric registry if not specified. - private static GcpManagedChannelOptions grpcGcpOptionsWithMetrics(SpannerOptions options) { + private void setupGcpFallback( + InstantiatingGrpcChannelProvider.Builder defaultChannelProviderBuilder, + final SpannerOptions options, + final HeaderProvider headerProviderWithUserAgent, + final CredentialsProvider credentialsProvider) { + InstantiatingGrpcChannelProvider.Builder cloudPathProviderBuilder = + createChannelProviderBuilder( + options, headerProviderWithUserAgent, /* isEnableDirectAccess= */ false); + + final ApiFunction existingCloudPathConfigurator = + cloudPathProviderBuilder.getChannelConfigurator(); + final AtomicReference cloudPathBuilderRef = new AtomicReference<>(); + cloudPathProviderBuilder.setChannelConfigurator( + builder -> { + ManagedChannelBuilder effectiveBuilder = builder; + if (existingCloudPathConfigurator != null) { + effectiveBuilder = existingCloudPathConfigurator.apply(effectiveBuilder); + } + cloudPathBuilderRef.set(effectiveBuilder); + return effectiveBuilder; + }); + + // Build the cloudPathProvider to extract the builder which will be provided to + // FallbackChannelBuilder. + try (TransportChannel ignored = cloudPathProviderBuilder.build().getTransportChannel()) { + } catch (Exception e) { + throw asSpannerException(e); + } + + ManagedChannelBuilder cloudPathBuilder = cloudPathBuilderRef.get(); + if (cloudPathBuilder == null) { + throw new IllegalStateException("CloudPath builder was not captured."); + } + + try { + Credentials credentials = credentialsProvider.getCredentials(); + if (credentials != null) { + cloudPathBuilder.intercept( + new ClientInterceptor() { + @Override + public ClientCall interceptCall( + MethodDescriptor method, CallOptions callOptions, Channel next) { + return next.newCall( + method, callOptions.withCallCredentials(MoreCallCredentials.from(credentials))); + } + }); + } + } catch (Exception e) { + throw asSpannerException(e); + } + + final ApiFunction existingConfigurator = + defaultChannelProviderBuilder.getChannelConfigurator(); + defaultChannelProviderBuilder.setChannelConfigurator( + directPathBuilder -> { + ManagedChannelBuilder builder = directPathBuilder; + if (existingConfigurator != null) { + builder = existingConfigurator.apply(builder); + } + + String jsonApiConfig = parseGrpcGcpApiConfig(); + GcpManagedChannelOptions gcpOptions = grpcGcpOptionsWithMetricsAndDcp(options); + if (gcpOptions == null) { + gcpOptions = GcpManagedChannelOptions.newBuilder().build(); + } + + GcpManagedChannelBuilder primaryGcpBuilder = + GcpManagedChannelBuilder.forDelegateBuilder(builder) + .withApiConfigJsonString(jsonApiConfig) + .withOptions(gcpOptions); + + GcpManagedChannelBuilder fallbackGcpBuilder = + GcpManagedChannelBuilder.forDelegateBuilder(cloudPathBuilder) + .withApiConfigJsonString(jsonApiConfig) + .withOptions(gcpOptions); + + GcpFallbackOpenTelemetry fallbackTelemetry = + GcpFallbackOpenTelemetry.newBuilder() + .withSdk(getFallbackOpenTelemetry(options)) + .disableAllMetrics() + .enableMetrics(Arrays.asList("fallback_count", "call_status")) + .build(); + + return new FallbackChannelBuilder( + primaryGcpBuilder, + fallbackGcpBuilder, + createFallbackChannelOptions(fallbackTelemetry, 1)); + }); + } + + private InstantiatingGrpcChannelProvider.Builder createChannelProviderBuilder( + final SpannerOptions options, + final HeaderProvider headerProviderWithUserAgent, + boolean isEnableDirectAccess) { + InstantiatingGrpcChannelProvider.Builder defaultChannelProviderBuilder = + InstantiatingGrpcChannelProvider.newBuilder() + .setChannelConfigurator(options.getChannelConfigurator()) + .setEndpoint(options.getEndpoint()) + .setMaxInboundMessageSize(MAX_MESSAGE_SIZE) + .setMaxInboundMetadataSize(MAX_METADATA_SIZE) + .setPoolSize(options.getNumChannels()) + + // Set a keepalive time of 120 seconds to help long running + // commit GRPC calls succeed + .setKeepAliveTimeDuration(Duration.ofSeconds(GRPC_KEEPALIVE_SECONDS)) + + // Then check if SpannerOptions provides an InterceptorProvider. Create a default + // SpannerInterceptorProvider if none is provided + .setInterceptorProvider( + SpannerInterceptorProvider.create( + MoreObjects.firstNonNull( + options.getInterceptorProvider(), + SpannerInterceptorProvider.createDefault(options.getOpenTelemetry()))) + // This sets the trace context headers. + .withTraceContext(endToEndTracingEnabled, options.getOpenTelemetry()) + // This sets the response compressor (Server -> Client). + .withEncoding(compressorName)) + .setHeaderProvider(headerProviderWithUserAgent) + .setAllowNonDefaultServiceAccount(true); + if (isEnableDirectAccess) { + defaultChannelProviderBuilder.setAttemptDirectPath(true); + if (isEnableDirectPathBoundToken()) { + // This will let the credentials try to fetch a hard-bound access token if the runtime + // environment supports it. + defaultChannelProviderBuilder.setAllowHardBoundTokenTypes( + Collections.singletonList(InstantiatingGrpcChannelProvider.HardBoundTokenTypes.ALTS)); + } + defaultChannelProviderBuilder.setAttemptDirectPathXds(); + } + + options.enablegRPCMetrics(defaultChannelProviderBuilder); + + if (options.isUseVirtualThreads()) { + ExecutorService executor = + tryCreateVirtualThreadPerTaskExecutor("spanner-virtual-grpc-executor"); + if (executor != null) { + defaultChannelProviderBuilder.setExecutor(executor); + } + } + // If it is enabled in options uses the channel pool provided by the gRPC-GCP extension. + maybeEnableGrpcGcpExtension(defaultChannelProviderBuilder, options); + return defaultChannelProviderBuilder; + } + + // Enhance gRPC-GCP options with metrics and dynamic channel pool configuration. + private static GcpManagedChannelOptions grpcGcpOptionsWithMetricsAndDcp(SpannerOptions options) { GcpManagedChannelOptions grpcGcpOptions = MoreObjects.firstNonNull(options.getGrpcGcpOptions(), new GcpManagedChannelOptions()); + GcpManagedChannelOptions.Builder optionsBuilder = + GcpManagedChannelOptions.newBuilder(grpcGcpOptions); + + // Configure metrics options with OpenTelemetry meter GcpMetricsOptions metricsOptions = MoreObjects.firstNonNull( grpcGcpOptions.getMetricsOptions(), GcpMetricsOptions.newBuilder().build()); GcpMetricsOptions.Builder metricsOptionsBuilder = GcpMetricsOptions.newBuilder(metricsOptions); - if (metricsOptions.getMetricRegistry() == null) { - metricsOptionsBuilder.withMetricRegistry(Metrics.getMetricRegistry()); - } // TODO: Add default labels with values: client_id, database, instance_id. if (metricsOptions.getNamePrefix().equals("")) { metricsOptionsBuilder.withNamePrefix("cloud.google.com/java/spanner/gcp-channel-pool/"); } - return GcpManagedChannelOptions.newBuilder(grpcGcpOptions) - .withMetricsOptions(metricsOptionsBuilder.build()) - .build(); + // Pass OpenTelemetry meter to grpc-gcp for channel pool metrics + if (metricsOptions.getOpenTelemetryMeter() == null && options.isGrpcGcpOtelMetricsEnabled()) { + metricsOptionsBuilder.withOpenTelemetryMeter( + options.getOpenTelemetry().getMeter("com.google.cloud.spanner")); + } + optionsBuilder.withMetricsOptions(metricsOptionsBuilder.build()); + + // Configure dynamic channel pool options if enabled. + // Uses the GcpChannelPoolOptions from SpannerOptions, which contains Spanner-specific defaults + // or user-provided configuration. + if (options.isDynamicChannelPoolEnabled()) { + optionsBuilder.withChannelPoolOptions(options.getGcpChannelPoolOptions()); + } + + return optionsBuilder.build(); } @SuppressWarnings("rawtypes") @@ -598,17 +791,23 @@ private static void maybeEnableGrpcGcpExtension( } final String jsonApiConfig = parseGrpcGcpApiConfig(); - final GcpManagedChannelOptions grpcGcpOptions = grpcGcpOptionsWithMetrics(options); + final GcpManagedChannelOptions grpcGcpOptions = grpcGcpOptionsWithMetricsAndDcp(options); + + // When dynamic channel pool is enabled, use the DCP initial size as the pool size. + // When disabled, use the explicitly configured numChannels. + final int poolSize = options.isDynamicChannelPoolEnabled() ? 0 : options.getNumChannels(); + ApiFunction baseConfigurator = + defaultChannelProviderBuilder.getChannelConfigurator(); ApiFunction apiFunction = channelBuilder -> { - if (options.getChannelConfigurator() != null) { - channelBuilder = options.getChannelConfigurator().apply(channelBuilder); + if (baseConfigurator != null) { + channelBuilder = baseConfigurator.apply(channelBuilder); } return GcpManagedChannelBuilder.forDelegateBuilder(channelBuilder) .withApiConfigJsonString(jsonApiConfig) .withOptions(grpcGcpOptions) - .setPoolSize(options.getNumChannels()); + .setPoolSize(poolSize); }; // Disable the GAX channel pooling functionality by setting the GAX channel pool size to 1. @@ -645,9 +844,7 @@ private static void checkEmulatorConnection( // Do a quick check to see if the emulator is actually running. try { InstanceAdminStubSettings.Builder testEmulatorSettings = - options - .getInstanceAdminStubSettings() - .toBuilder() + options.getInstanceAdminStubSettings().toBuilder() .setTransportChannelProvider(channelProvider) .setCredentialsProvider(credentialsProvider); testEmulatorSettings @@ -683,6 +880,20 @@ private static boolean isEmulatorEnabled(SpannerOptions options, String emulator && options.getHost().endsWith(emulatorHost); } + public static boolean isEnableAFEServerTiming() { + // Enable AFE metrics as default unless explicitly + // disabled via env. + return !Boolean.parseBoolean(System.getenv("SPANNER_DISABLE_AFE_SERVER_TIMING")); + } + + public static boolean isEnableDirectPathXdsEnv() { + return Boolean.parseBoolean(System.getenv("GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS")); + } + + public static boolean isEnableDirectPathBoundToken() { + return !Boolean.parseBoolean(System.getenv("GOOGLE_SPANNER_DISABLE_DIRECT_ACCESS_BOUND_TOKEN")); + } + private static final RetrySettings ADMIN_REQUESTS_LIMIT_EXCEEDED_RETRY_SETTINGS = RetrySettings.newBuilder() .setInitialRetryDelayDuration(Duration.ofSeconds(5L)) @@ -716,7 +927,7 @@ private T runWithRetryOnAdministrativeRequestsExceeded(Callable callable) new AdminRequestsLimitExceededRetryAlgorithm<>(), NanoClock.getDefaultClock()); } catch (RetryHelperException e) { - throw SpannerExceptionFactory.asSpannerException(e.getCause()); + throw asSpannerException(e.getCause()); } } @@ -814,7 +1025,7 @@ public OperationFuture call() { isRetry = true; if (operationName == null) { - GrpcCallContext context = newCallContext(null, instanceName, initialRequest, method); + GrpcCallContext context = newAdminCallContext(instanceName, initialRequest, method); return operationCallable.futureCall(initialRequest, context); } else { return operationCallable.resumeFutureCall(operationName); @@ -905,8 +1116,7 @@ public Paginated listInstanceConfigs(int pageSize, @Nullable Str ListInstanceConfigsRequest request = requestBuilder.build(); GrpcCallContext context = - newCallContext( - null, projectName, request, InstanceAdminGrpc.getListInstanceConfigsMethod()); + newAdminCallContext(projectName, request, InstanceAdminGrpc.getListInstanceConfigsMethod()); ListInstanceConfigsResponse response = get(instanceAdminStub.listInstanceConfigsCallable().futureCall(request, context)); return new Paginated<>(response.getInstanceConfigsList(), response.getNextPageToken()); @@ -929,7 +1139,7 @@ public OperationFuture createInsta } CreateInstanceConfigRequest request = builder.build(); GrpcCallContext context = - newCallContext(null, parent, request, InstanceAdminGrpc.getCreateInstanceConfigMethod()); + newAdminCallContext(parent, request, InstanceAdminGrpc.getCreateInstanceConfigMethod()); return instanceAdminStub.createInstanceConfigOperationCallable().futureCall(request, context); } @@ -946,11 +1156,8 @@ public OperationFuture updateInsta } UpdateInstanceConfigRequest request = builder.build(); GrpcCallContext context = - newCallContext( - null, - instanceConfig.getName(), - request, - InstanceAdminGrpc.getUpdateInstanceConfigMethod()); + newAdminCallContext( + instanceConfig.getName(), request, InstanceAdminGrpc.getUpdateInstanceConfigMethod()); return instanceAdminStub.updateInstanceConfigOperationCallable().futureCall(request, context); } @@ -960,7 +1167,7 @@ public InstanceConfig getInstanceConfig(String instanceConfigName) throws Spanne GetInstanceConfigRequest.newBuilder().setName(instanceConfigName).build(); GrpcCallContext context = - newCallContext(null, projectName, request, InstanceAdminGrpc.getGetInstanceConfigMethod()); + newAdminCallContext(projectName, request, InstanceAdminGrpc.getGetInstanceConfigMethod()); return get(instanceAdminStub.getInstanceConfigCallable().futureCall(request, context)); } @@ -979,8 +1186,8 @@ public void deleteInstanceConfig( } DeleteInstanceConfigRequest request = requestBuilder.build(); GrpcCallContext context = - newCallContext( - null, instanceConfigName, request, InstanceAdminGrpc.getDeleteInstanceConfigMethod()); + newAdminCallContext( + instanceConfigName, request, InstanceAdminGrpc.getDeleteInstanceConfigMethod()); get(instanceAdminStub.deleteInstanceConfigCallable().futureCall(request, context)); } @@ -1001,8 +1208,8 @@ public Paginated listInstanceConfigOperations( final ListInstanceConfigOperationsRequest request = requestBuilder.build(); final GrpcCallContext context = - newCallContext( - null, projectName, request, InstanceAdminGrpc.getListInstanceConfigOperationsMethod()); + newAdminCallContext( + projectName, request, InstanceAdminGrpc.getListInstanceConfigOperationsMethod()); ListInstanceConfigOperationsResponse response = runWithRetryOnAdministrativeRequestsExceeded( () -> @@ -1027,7 +1234,7 @@ public Paginated listInstances( ListInstancesRequest request = requestBuilder.build(); GrpcCallContext context = - newCallContext(null, projectName, request, InstanceAdminGrpc.getListInstancesMethod()); + newAdminCallContext(projectName, request, InstanceAdminGrpc.getListInstancesMethod()); ListInstancesResponse response = get(instanceAdminStub.listInstancesCallable().futureCall(request, context)); return new Paginated<>(response.getInstancesList(), response.getNextPageToken()); @@ -1043,7 +1250,7 @@ public OperationFuture createInstance( .setInstance(instance) .build(); GrpcCallContext context = - newCallContext(null, parent, request, InstanceAdminGrpc.getCreateInstanceMethod()); + newAdminCallContext(parent, request, InstanceAdminGrpc.getCreateInstanceMethod()); return instanceAdminStub.createInstanceOperationCallable().futureCall(request, context); } @@ -1053,8 +1260,8 @@ public OperationFuture updateInstance( UpdateInstanceRequest request = UpdateInstanceRequest.newBuilder().setInstance(instance).setFieldMask(fieldMask).build(); GrpcCallContext context = - newCallContext( - null, instance.getName(), request, InstanceAdminGrpc.getUpdateInstanceMethod()); + newAdminCallContext( + instance.getName(), request, InstanceAdminGrpc.getUpdateInstanceMethod()); return instanceAdminStub.updateInstanceOperationCallable().futureCall(request, context); } @@ -1063,7 +1270,7 @@ public Instance getInstance(String instanceName) throws SpannerException { GetInstanceRequest request = GetInstanceRequest.newBuilder().setName(instanceName).build(); GrpcCallContext context = - newCallContext(null, instanceName, request, InstanceAdminGrpc.getGetInstanceMethod()); + newAdminCallContext(instanceName, request, InstanceAdminGrpc.getGetInstanceMethod()); return get(instanceAdminStub.getInstanceCallable().futureCall(request, context)); } @@ -1073,7 +1280,7 @@ public void deleteInstance(String instanceName) throws SpannerException { DeleteInstanceRequest.newBuilder().setName(instanceName).build(); GrpcCallContext context = - newCallContext(null, instanceName, request, InstanceAdminGrpc.getDeleteInstanceMethod()); + newAdminCallContext(instanceName, request, InstanceAdminGrpc.getDeleteInstanceMethod()); get(instanceAdminStub.deleteInstanceCallable().futureCall(request, context)); } @@ -1092,8 +1299,8 @@ public Paginated listBackupOperations( final ListBackupOperationsRequest request = requestBuilder.build(); final GrpcCallContext context = - newCallContext( - null, instanceName, request, DatabaseAdminGrpc.getListBackupOperationsMethod()); + newAdminCallContext( + instanceName, request, DatabaseAdminGrpc.getListBackupOperationsMethod()); ListBackupOperationsResponse response = runWithRetryOnAdministrativeRequestsExceeded( () -> @@ -1117,8 +1324,8 @@ public Paginated listDatabaseOperations( final ListDatabaseOperationsRequest request = requestBuilder.build(); final GrpcCallContext context = - newCallContext( - null, instanceName, request, DatabaseAdminGrpc.getListDatabaseOperationsMethod()); + newAdminCallContext( + instanceName, request, DatabaseAdminGrpc.getListDatabaseOperationsMethod()); ListDatabaseOperationsResponse response = runWithRetryOnAdministrativeRequestsExceeded( () -> @@ -1143,7 +1350,7 @@ public Paginated listDatabaseRoles( final ListDatabaseRolesRequest request = requestBuilder.build(); final GrpcCallContext context = - newCallContext(null, databaseName, request, DatabaseAdminGrpc.getListDatabaseRolesMethod()); + newAdminCallContext(databaseName, request, DatabaseAdminGrpc.getListDatabaseRolesMethod()); ListDatabaseRolesResponse response = runWithRetryOnAdministrativeRequestsExceeded( () -> get(databaseAdminStub.listDatabaseRolesCallable().futureCall(request, context))); @@ -1167,7 +1374,7 @@ public Paginated listBackups( final ListBackupsRequest request = requestBuilder.build(); final GrpcCallContext context = - newCallContext(null, instanceName, request, DatabaseAdminGrpc.getListBackupsMethod()); + newAdminCallContext(instanceName, request, DatabaseAdminGrpc.getListBackupsMethod()); ListBackupsResponse response = runWithRetryOnAdministrativeRequestsExceeded( () -> get(databaseAdminStub.listBackupsCallable().futureCall(request, context))); @@ -1187,7 +1394,7 @@ public Paginated listDatabases( final ListDatabasesRequest request = requestBuilder.build(); final GrpcCallContext context = - newCallContext(null, instanceName, request, DatabaseAdminGrpc.getListDatabasesMethod()); + newAdminCallContext(instanceName, request, DatabaseAdminGrpc.getListDatabasesMethod()); ListDatabasesResponse response = runWithRetryOnAdministrativeRequestsExceeded( () -> get(databaseAdminStub.listDatabasesCallable().futureCall(request, context))); @@ -1289,8 +1496,7 @@ public OperationFuture updateDatabaseDdl( } final UpdateDatabaseDdlRequest request = requestBuilder.build(); final GrpcCallContext context = - newCallContext( - null, + newAdminCallContext( databaseInfo.getId().getName(), request, DatabaseAdminGrpc.getUpdateDatabaseDdlMethod()); @@ -1307,7 +1513,7 @@ public OperationFuture updateDatabaseDdl( throw newSpannerException(e); } catch (ExecutionException e) { Throwable t = e.getCause(); - SpannerException se = SpannerExceptionFactory.asSpannerException(t); + SpannerException se = asSpannerException(t); if (se instanceof AdminRequestsPerMinuteExceededException) { // Propagate this to trigger a retry. throw se; @@ -1330,7 +1536,7 @@ public void dropDatabase(String databaseName) throws SpannerException { DropDatabaseRequest.newBuilder().setDatabase(databaseName).build(); final GrpcCallContext context = - newCallContext(null, databaseName, request, DatabaseAdminGrpc.getDropDatabaseMethod()); + newAdminCallContext(databaseName, request, DatabaseAdminGrpc.getDropDatabaseMethod()); runWithRetryOnAdministrativeRequestsExceeded( () -> { get(databaseAdminStub.dropDatabaseCallable().futureCall(request, context)); @@ -1345,7 +1551,7 @@ public Database getDatabase(String databaseName) throws SpannerException { GetDatabaseRequest.newBuilder().setName(databaseName).build(); final GrpcCallContext context = - newCallContext(null, databaseName, request, DatabaseAdminGrpc.getGetDatabaseMethod()); + newAdminCallContext(databaseName, request, DatabaseAdminGrpc.getGetDatabaseMethod()); return runWithRetryOnAdministrativeRequestsExceeded( () -> get(databaseAdminStub.getDatabaseCallable().futureCall(request, context))); } @@ -1356,8 +1562,8 @@ public OperationFuture updateDatabase( UpdateDatabaseRequest request = UpdateDatabaseRequest.newBuilder().setDatabase(database).setUpdateMask(updateMask).build(); GrpcCallContext context = - newCallContext( - null, database.getName(), request, DatabaseAdminGrpc.getUpdateDatabaseMethod()); + newAdminCallContext( + database.getName(), request, DatabaseAdminGrpc.getUpdateDatabaseMethod()); return databaseAdminStub.updateDatabaseOperationCallable().futureCall(request, context); } @@ -1368,7 +1574,7 @@ public GetDatabaseDdlResponse getDatabaseDdl(String databaseName) throws Spanner GetDatabaseDdlRequest.newBuilder().setDatabase(databaseName).build(); final GrpcCallContext context = - newCallContext(null, databaseName, request, DatabaseAdminGrpc.getGetDatabaseDdlMethod()); + newAdminCallContext(databaseName, request, DatabaseAdminGrpc.getGetDatabaseDdlMethod()); return runWithRetryOnAdministrativeRequestsExceeded( () -> get(databaseAdminStub.getDatabaseDdlCallable().futureCall(request, context))); } @@ -1552,7 +1758,7 @@ public Backup updateBackup(Backup backup, FieldMask updateMask) { final UpdateBackupRequest request = UpdateBackupRequest.newBuilder().setBackup(backup).setUpdateMask(updateMask).build(); final GrpcCallContext context = - newCallContext(null, backup.getName(), request, DatabaseAdminGrpc.getUpdateBackupMethod()); + newAdminCallContext(backup.getName(), request, DatabaseAdminGrpc.getUpdateBackupMethod()); return runWithRetryOnAdministrativeRequestsExceeded( () -> databaseAdminStub.updateBackupCallable().call(request, context)); } @@ -1563,7 +1769,7 @@ public void deleteBackup(String backupName) { final DeleteBackupRequest request = DeleteBackupRequest.newBuilder().setName(backupName).build(); final GrpcCallContext context = - newCallContext(null, backupName, request, DatabaseAdminGrpc.getDeleteBackupMethod()); + newAdminCallContext(backupName, request, DatabaseAdminGrpc.getDeleteBackupMethod()); runWithRetryOnAdministrativeRequestsExceeded( () -> { databaseAdminStub.deleteBackupCallable().call(request, context); @@ -1576,7 +1782,7 @@ public Backup getBackup(String backupName) throws SpannerException { acquireAdministrativeRequestsRateLimiter(); final GetBackupRequest request = GetBackupRequest.newBuilder().setName(backupName).build(); final GrpcCallContext context = - newCallContext(null, backupName, request, DatabaseAdminGrpc.getGetBackupMethod()); + newAdminCallContext(backupName, request, DatabaseAdminGrpc.getGetBackupMethod()); return runWithRetryOnAdministrativeRequestsExceeded( () -> get(databaseAdminStub.getBackupCallable().futureCall(request, context))); } @@ -1586,7 +1792,7 @@ public Operation getOperation(String name) throws SpannerException { acquireAdministrativeRequestsRateLimiter(); final GetOperationRequest request = GetOperationRequest.newBuilder().setName(name).build(); final GrpcCallContext context = - newCallContext(null, name, request, OperationsGrpc.getGetOperationMethod()); + newAdminCallContext(name, request, OperationsGrpc.getGetOperationMethod()); return runWithRetryOnAdministrativeRequestsExceeded( () -> get( @@ -1602,7 +1808,7 @@ public void cancelOperation(String name) throws SpannerException { final CancelOperationRequest request = CancelOperationRequest.newBuilder().setName(name).build(); final GrpcCallContext context = - newCallContext(null, name, request, OperationsGrpc.getCancelOperationMethod()); + newAdminCallContext(name, request, OperationsGrpc.getCancelOperationMethod()); runWithRetryOnAdministrativeRequestsExceeded( () -> { get( @@ -1649,7 +1855,7 @@ public Session createSession( @Nullable Map labels, @Nullable Map options) throws SpannerException { - // By default sessions are not multiplexed + // By default, sessions are not multiplexed return createSession(databaseName, databaseRole, labels, options, false); } @@ -1707,10 +1913,16 @@ public StreamingCall read( ReadRequest request, ResultStreamConsumer consumer, @Nullable Map options, + XGoogSpannerRequestId requestId, boolean routeToLeader) { GrpcCallContext context = newCallContext( - options, request.getSession(), request, SpannerGrpc.getReadMethod(), routeToLeader); + options, + requestId, + request.getSession(), + request, + SpannerGrpc.getReadMethod(), + routeToLeader); SpannerResponseObserver responseObserver = new SpannerResponseObserver(consumer); spannerStub.streamingReadCallable().call(request, responseObserver, context); return new GrpcStreamingCall(context, responseObserver.getController()); @@ -1761,10 +1973,14 @@ public RetrySettings getPartitionedDmlRetrySettings() { @Override public ServerStream executeStreamingPartitionedDml( - ExecuteSqlRequest request, Map options, Duration timeout) { + ExecuteSqlRequest request, + Map options, + XGoogSpannerRequestId requestId, + Duration timeout) { GrpcCallContext context = newCallContext( options, + requestId, request.getSession(), request, SpannerGrpc.getExecuteStreamingSqlMethod(), @@ -1787,10 +2003,12 @@ public StreamingCall executeQuery( ExecuteSqlRequest request, ResultStreamConsumer consumer, @Nullable Map options, + XGoogSpannerRequestId requestId, boolean routeToLeader) { GrpcCallContext context = newCallContext( options, + requestId, request.getSession(), request, SpannerGrpc.getExecuteStreamingSqlMethod(), @@ -1973,11 +2191,32 @@ private static T get(final Future future) throws SpannerException { // We are the sole consumer of the future, so cancel it. future.cancel(true); throw SpannerExceptionFactory.propagateInterrupt(e); - } catch (Exception e) { + } catch (ExecutionException e) { + throw asSpannerException(e.getCause()); + } catch (CancellationException e) { throw newSpannerException(context, e); + } catch (Exception exception) { + throw asSpannerException(exception); } } + private GrpcCallContext createBaseCallContext() { + GrpcCallContext context = GrpcCallContext.createDefault(); + if (compressorName != null) { + // This sets the compressor for Client -> Server. + context = context.withCallOptions(context.getCallOptions().withCompression(compressorName)); + } + if (endToEndTracingEnabled) { + context = context.withExtraHeaders(metadataProvider.newEndToEndTracingHeader()); + } + if (isEnableAFEServerTiming()) { + context = context.withExtraHeaders(metadataProvider.newAfeServerTimingHeader()); + } + return context + .withStreamWaitTimeoutDuration(waitTimeout) + .withStreamIdleTimeoutDuration(idleTimeout); + } + // Before removing this method, please verify with a code owner that it is not used // in any internal testing infrastructure. @VisibleForTesting @@ -1986,6 +2225,11 @@ GrpcCallContext newCallContext(@Nullable Map options, String resource return newCallContext(options, resource, null, null); } + private GrpcCallContext newAdminCallContext( + String resource, ReqT request, MethodDescriptor method) { + return newCallContext(null, resource, request, method, false); + } + @VisibleForTesting GrpcCallContext newCallContext( @Nullable Map options, @@ -2002,34 +2246,62 @@ GrpcCallContext newCallContext( ReqT request, MethodDescriptor method, boolean routeToLeader) { - GrpcCallContext context = GrpcCallContext.createDefault(); - if (options != null) { + return newCallContext(options, /* requestId= */ null, resource, request, method, routeToLeader); + } + + @VisibleForTesting + GrpcCallContext newCallContext( + @Nullable Map options, + @Nullable XGoogSpannerRequestId requestId, + String resource, + ReqT request, + MethodDescriptor method, + boolean routeToLeader) { + GrpcCallContext context = this.baseGrpcCallContext; + Long affinity = options == null ? null : Option.CHANNEL_HINT.getLong(options); + if (affinity != null) { if (this.isGrpcGcpExtensionEnabled) { // Set channel affinity in gRPC-GCP. - // Compute bounded channel hint to prevent gRPC-GCP affinity map from getting unbounded. - int boundedChannelHint = Option.CHANNEL_HINT.getLong(options).intValue() % this.numChannels; + String affinityKey; + if (this.isDynamicChannelPoolEnabled) { + // When dynamic channel pooling is enabled, we use the raw affinity value as the key. + // This allows grpc-gcp to use round-robin for new keys, enabling new channels + // (created during scale-up) to receive requests. The affinity key lifetime setting + // ensures the affinity map doesn't grow unbounded. + affinityKey = String.valueOf(affinity); + } else { + // When DCP is disabled, compute bounded channel hint to prevent + // gRPC-GCP affinity map from getting unbounded. + int boundedChannelHint = affinity.intValue() % this.numChannels; + affinityKey = String.valueOf(boundedChannelHint); + } context = context.withCallOptions( - context - .getCallOptions() - .withOption( - GcpManagedChannel.AFFINITY_KEY, String.valueOf(boundedChannelHint))); + context.getCallOptions().withOption(GcpManagedChannel.AFFINITY_KEY, affinityKey)); } else { // Set channel affinity in GAX. - context = context.withChannelAffinity(Option.CHANNEL_HINT.getLong(options).intValue()); + context = context.withChannelAffinity(affinity.intValue()); } } - if (compressorName != null) { - // This sets the compressor for Client -> Server. - context = context.withCallOptions(context.getCallOptions().withCompression(compressorName)); + // When grpc-gcp extension with dynamic channel pooling is enabled, the actual channel ID + // will be set by RequestIdInterceptor after grpc-gcp selects the channel. + // Set to 0 (unknown) here as a placeholder. + int requestIdChannel = + (this.isGrpcGcpExtensionEnabled && this.isDynamicChannelPoolEnabled) + ? 0 + : convertToRequestIdChannelNumber(affinity); + if (requestId == null) { + requestId = requestIdCreator.nextRequestId(requestIdChannel); + } else { + requestId.setChannelId(requestIdChannel); } + context = + context.withCallOptions( + context.getCallOptions().withOption(REQUEST_ID_CALL_OPTIONS_KEY, requestId)); context = context.withExtraHeaders(metadataProvider.newExtraHeaders(resource, projectName)); if (routeToLeader && leaderAwareRoutingEnabled) { context = context.withExtraHeaders(metadataProvider.newRouteToLeaderHeader()); } - if (endToEndTracingEnabled) { - context = context.withExtraHeaders(metadataProvider.newEndToEndTracingHeader()); - } if (callCredentialsProvider != null) { CallCredentials callCredentials = callCredentialsProvider.getCallCredentials(); if (callCredentials != null) { @@ -2037,10 +2309,6 @@ GrpcCallContext newCallContext( context.withCallOptions(context.getCallOptions().withCallCredentials(callCredentials)); } } - context = - context - .withStreamWaitTimeoutDuration(waitTimeout) - .withStreamIdleTimeoutDuration(idleTimeout); CallContextConfigurator configurator = SpannerOptions.CALL_CONTEXT_CONFIGURATOR_KEY.get(); ApiCallContext apiCallContextFromContext = null; if (configurator != null) { @@ -2049,6 +2317,21 @@ GrpcCallContext newCallContext( return (GrpcCallContext) context.merge(apiCallContextFromContext); } + @Override + public RequestIdCreator getRequestIdCreator() { + return this.requestIdCreator; + } + + private int convertToRequestIdChannelNumber(@Nullable Long affinity) { + if (affinity == null) { + return 0; + } + int requestIdChannel = affinity.intValue(); + requestIdChannel = requestIdChannel == Integer.MAX_VALUE ? 0 : Math.abs(requestIdChannel); + // Start counting at 1, to distinguish between '0 == Unknown and >0 == known'. + return requestIdChannel % this.numChannels + 1; + } + void registerResponseObserver(SpannerResponseObserver responseObserver) { responseObservers.add(responseObserver); } @@ -2188,7 +2471,7 @@ public void onError(Throwable t) { if (this.consumer.cancelQueryWhenClientIsClosed()) { unregisterResponseObserver(this); } - consumer.onError(newSpannerException(t)); + consumer.onError(asSpannerException(t)); } @Override @@ -2209,4 +2492,40 @@ private static Duration systemProperty(String name, int defaultValue) { String stringValue = System.getProperty(name, ""); return Duration.ofSeconds(stringValue.isEmpty() ? defaultValue : Integer.parseInt(stringValue)); } + + // Wrapper class to build the GcpFallbackChannel using GAX's configuration + private static class FallbackChannelBuilder + extends ForwardingChannelBuilder2 { + private final GcpFallbackChannelOptions options; + + private final GcpManagedChannelBuilder primaryGcpBuilder; + private final GcpManagedChannelBuilder fallbackGcpBuilder; + + private FallbackChannelBuilder( + GcpManagedChannelBuilder primary, + GcpManagedChannelBuilder fallback, + GcpFallbackChannelOptions options) { + this.primaryGcpBuilder = primary; + this.fallbackGcpBuilder = fallback; + this.options = options; + } + + /** + * Delegates all configuration calls (e.g., interceptors, userAgent) to the primary builder. + * This ensures the primary channel receives all of GAX's standard configuration. + */ + @Override + protected ManagedChannelBuilder delegate() { + return primaryGcpBuilder; + } + + /** + * Overrides the build method to return our custom GcpFallbackChannel instead of a standard gRPC + * channel. + */ + @Override + public ManagedChannel build() { + return new GcpFallbackChannel(options, primaryGcpBuilder, fallbackGcpBuilder); + } + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcChannelEndpointCache.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcChannelEndpointCache.java new file mode 100644 index 00000000000..3ee4d789592 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcChannelEndpointCache.java @@ -0,0 +1,228 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.common.annotations.VisibleForTesting; +import io.grpc.ConnectivityState; +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import java.io.IOException; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * gRPC implementation of {@link ChannelEndpointCache}. + * + *

              This cache creates and caches gRPC channels per address. It uses {@link + * InstantiatingGrpcChannelProvider#withEndpoint(String)} to create new channels with the same + * configuration but different endpoints, avoiding race conditions. + */ +@InternalApi +class GrpcChannelEndpointCache implements ChannelEndpointCache { + + /** Timeout for graceful channel shutdown. */ + private static final long SHUTDOWN_TIMEOUT_SECONDS = 5; + + private final InstantiatingGrpcChannelProvider baseProvider; + private final Map servers = new ConcurrentHashMap<>(); + private final GrpcChannelEndpoint defaultEndpoint; + private final String defaultAuthority; + private final AtomicBoolean isShutdown = new AtomicBoolean(false); + + /** + * Creates a new cache with the given channel provider. + * + * @param channelProvider the base provider used to create channels. New channels for different + * endpoints are created using {@link InstantiatingGrpcChannelProvider#withEndpoint(String)}. + * @throws IOException if the default channel cannot be created + */ + public GrpcChannelEndpointCache(InstantiatingGrpcChannelProvider channelProvider) + throws IOException { + this.baseProvider = channelProvider; + String defaultEndpoint = channelProvider.getEndpoint(); + this.defaultEndpoint = new GrpcChannelEndpoint(defaultEndpoint, channelProvider); + this.defaultAuthority = this.defaultEndpoint.getChannel().authority(); + this.servers.put(defaultEndpoint, this.defaultEndpoint); + } + + @Override + public ChannelEndpoint defaultChannel() { + return defaultEndpoint; + } + + @Override + public ChannelEndpoint get(String address) { + if (isShutdown.get()) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.FAILED_PRECONDITION, "ChannelEndpointCache has been shut down"); + } + + return servers.computeIfAbsent( + address, + addr -> { + try { + // Create a new provider with the same config but different endpoint. + // This is thread-safe as withEndpoint() returns a new provider instance. + TransportChannelProvider newProvider = createProviderWithAuthorityOverride(addr); + return new GrpcChannelEndpoint(addr, newProvider); + } catch (IOException e) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INTERNAL, "Failed to create channel for address: " + addr, e); + } + }); + } + + private TransportChannelProvider createProviderWithAuthorityOverride(String address) { + InstantiatingGrpcChannelProvider endpointProvider = + (InstantiatingGrpcChannelProvider) baseProvider.withEndpoint(address); + if (Objects.equals(defaultAuthority, address)) { + return endpointProvider; + } + Builder builder = endpointProvider.toBuilder(); + final com.google.api.core.ApiFunction + baseConfigurator = builder.getChannelConfigurator(); + builder.setChannelConfigurator( + channelBuilder -> { + ManagedChannelBuilder effectiveBuilder = channelBuilder; + if (baseConfigurator != null) { + effectiveBuilder = baseConfigurator.apply(effectiveBuilder); + } + return effectiveBuilder.overrideAuthority(defaultAuthority); + }); + return builder.build(); + } + + @Override + public void evict(String address) { + if (defaultEndpoint.getAddress().equals(address)) { + return; + } + GrpcChannelEndpoint server = servers.remove(address); + if (server != null) { + shutdownChannel(server, false); + } + } + + @Override + public void shutdown() { + if (!isShutdown.compareAndSet(false, true)) { + return; + } + for (GrpcChannelEndpoint server : servers.values()) { + shutdownChannel(server, true); + } + servers.clear(); + } + + /** + * Shuts down a server's channel. + * + *

              First attempts a graceful shutdown. When awaitTermination is true, waits for in-flight RPCs + * to complete and forces shutdown on timeout. + */ + private void shutdownChannel(GrpcChannelEndpoint server, boolean awaitTermination) { + ManagedChannel channel = server.getChannel(); + if (channel.isShutdown()) { + return; + } + + channel.shutdown(); + if (!awaitTermination) { + return; + } + try { + if (!channel.awaitTermination(SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS)) { + channel.shutdownNow(); + } + } catch (InterruptedException e) { + channel.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + + /** gRPC implementation of {@link ChannelEndpoint}. */ + static class GrpcChannelEndpoint implements ChannelEndpoint { + private final String address; + private final ManagedChannel channel; + + /** + * Creates a server from a channel provider. + * + * @param address the server address + * @param provider the channel provider (must be a gRPC provider) + * @throws IOException if the channel cannot be created + */ + GrpcChannelEndpoint(String address, TransportChannelProvider provider) throws IOException { + this.address = address; + TransportChannelProvider readyProvider = provider; + if (provider.needsHeaders()) { + readyProvider = provider.withHeaders(java.util.Collections.emptyMap()); + } + GrpcTransportChannel transportChannel = + (GrpcTransportChannel) readyProvider.getTransportChannel(); + this.channel = (ManagedChannel) transportChannel.getChannel(); + } + + /** + * Creates a server with an existing channel. Primarily for testing. + * + * @param address the server address + * @param channel the managed channel + */ + @VisibleForTesting + GrpcChannelEndpoint(String address, ManagedChannel channel) { + this.address = address; + this.channel = channel; + } + + @Override + public String getAddress() { + return address; + } + + @Override + public boolean isHealthy() { + if (channel.isShutdown() || channel.isTerminated()) { + return false; + } + // Check connectivity state without triggering a connection attempt. + // Some channel implementations don't support getState(), in which case + // we assume the channel is healthy if it's not shutdown/terminated. + try { + ConnectivityState state = channel.getState(false); + return state != ConnectivityState.SHUTDOWN && state != ConnectivityState.TRANSIENT_FAILURE; + } catch (UnsupportedOperationException ignore) { + return true; + } + } + + @Override + public ManagedChannel getChannel() { + return channel; + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java index 026f9b4ca9d..861e839a036 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java @@ -24,23 +24,14 @@ import static com.google.cloud.spanner.spi.v1.SpannerRpcViews.SPANNER_GFE_LATENCY; import com.google.api.gax.tracing.ApiTracer; -import com.google.cloud.spanner.BuiltInMetricsConstant; -import com.google.cloud.spanner.CompositeTracer; -import com.google.cloud.spanner.SpannerExceptionFactory; -import com.google.cloud.spanner.SpannerRpcMetrics; -import com.google.common.base.Supplier; +import com.google.cloud.spanner.*; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.spanner.admin.database.v1.DatabaseName; -import io.grpc.CallOptions; -import io.grpc.Channel; -import io.grpc.ClientCall; -import io.grpc.ClientInterceptor; +import io.grpc.*; import io.grpc.ForwardingClientCall.SimpleForwardingClientCall; import io.grpc.ForwardingClientCallListener.SimpleForwardingClientCallListener; -import io.grpc.Grpc; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; +import io.grpc.alts.AltsContextUtil; import io.opencensus.stats.MeasureMap; import io.opencensus.stats.Stats; import io.opencensus.stats.StatsRecorder; @@ -51,9 +42,6 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.trace.Span; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.SocketAddress; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -71,9 +59,12 @@ class HeaderInterceptor implements ClientInterceptor { DatabaseName.of("undefined-project", "undefined-instance", "undefined-database"); private static final Metadata.Key SERVER_TIMING_HEADER_KEY = Metadata.Key.of("server-timing", Metadata.ASCII_STRING_MARSHALLER); - private static final String SERVER_TIMING_HEADER_PREFIX = "gfet4t7; dur="; + private static final String GFE_TIMING_HEADER = "gfet4t7"; + private static final String AFE_TIMING_HEADER = "afe"; private static final Metadata.Key GOOGLE_CLOUD_RESOURCE_PREFIX_KEY = Metadata.Key.of("google-cloud-resource-prefix", Metadata.ASCII_STRING_MARSHALLER); + private static final Pattern SERVER_TIMING_PATTERN = + Pattern.compile("(?[a-zA-Z0-9_-]+);\\s*dur=(?\\d+(\\.\\d+)?)"); private static final Pattern GOOGLE_CLOUD_RESOURCE_PREFIX_PATTERN = Pattern.compile( ".*projects/(?\\p{ASCII}[^/]*)(/instances/(?\\p{ASCII}[^/]*))?(/databases/(?\\p{ASCII}[^/]*))?"); @@ -85,6 +76,8 @@ class HeaderInterceptor implements ClientInterceptor { CacheBuilder.newBuilder().maximumSize(1000).build(); private final Cache> builtInAttributesCache = CacheBuilder.newBuilder().maximumSize(1000).build(); + private final Cache> keyCache = + CacheBuilder.newBuilder().maximumSize(1000).build(); // Get the global singleton Tagger object. private static final Tagger TAGGER = Tags.getTagger(); @@ -93,13 +86,11 @@ class HeaderInterceptor implements ClientInterceptor { private static final Logger LOGGER = Logger.getLogger(HeaderInterceptor.class.getName()); private static final Level LEVEL = Level.INFO; private final SpannerRpcMetrics spannerRpcMetrics; + private Float gfeLatency; + private Float afeLatency; - private final Supplier directPathEnabledSupplier; - - HeaderInterceptor( - SpannerRpcMetrics spannerRpcMetrics, Supplier directPathEnabledSupplier) { + HeaderInterceptor(SpannerRpcMetrics spannerRpcMetrics) { this.spannerRpcMetrics = spannerRpcMetrics; - this.directPathEnabledSupplier = directPathEnabledSupplier; } @Override @@ -114,23 +105,51 @@ public void start(Listener responseListener, Metadata headers) { try { Span span = Span.current(); DatabaseName databaseName = extractDatabaseName(headers); - String key = databaseName + method.getFullMethodName(); + String key = extractKey(databaseName, method.getFullMethodName()); + String requestId = extractRequestId(headers); TagContext tagContext = getTagContext(key, method.getFullMethodName(), databaseName); Attributes attributes = getMetricAttributes(key, method.getFullMethodName(), databaseName); - Map builtInMetricsAttributes = - getBuiltInMetricAttributes(key, databaseName); + super.start( new SimpleForwardingClientCallListener(responseListener) { @Override public void onHeaders(Metadata metadata) { - Boolean isDirectPathUsed = - isDirectPathUsed(getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR)); - addBuiltInMetricAttributes( - compositeTracer, builtInMetricsAttributes, isDirectPathUsed); - processHeader(metadata, tagContext, attributes, span); + String serverTiming = metadata.get(SERVER_TIMING_HEADER_KEY); + try { + // Get gfe and afe Latency value + Map serverTimingMetrics = parseServerTimingHeader(serverTiming); + gfeLatency = serverTimingMetrics.get(GFE_TIMING_HEADER); + afeLatency = serverTimingMetrics.get(AFE_TIMING_HEADER); + } catch (NumberFormatException e) { + LOGGER.log(LEVEL, "Invalid server-timing object in header: {}", serverTiming); + } + super.onHeaders(metadata); } + + @Override + public void onClose(Status status, Metadata trailers) { + // Record Built-in Metrics + boolean isDirectPathUsed = AltsContextUtil.check(getAttributes()); + boolean isAfeEnabled = GapicSpannerRpc.isEnableAFEServerTiming(); + recordSpan(span, requestId); + recordCustomMetrics(tagContext, attributes, isDirectPathUsed); + Map builtInMetricsAttributes = new HashMap<>(); + try { + builtInMetricsAttributes = getBuiltInMetricAttributes(key, databaseName); + } catch (ExecutionException e) { + LOGGER.log( + LEVEL, "Unable to get built-in metric attributes {}", e.getMessage()); + } + recordBuiltInMetrics( + compositeTracer, + builtInMetricsAttributes, + requestId, + isDirectPathUsed, + isAfeEnabled); + super.onClose(status, trailers); + } }, headers); } catch (ExecutionException executionException) { @@ -141,30 +160,75 @@ public void onHeaders(Metadata metadata) { }; } - private void processHeader( - Metadata metadata, TagContext tagContext, Attributes attributes, Span span) { + private void recordCustomMetrics( + TagContext tagContext, Attributes attributes, Boolean isDirectPathUsed) { + // Record OpenCensus and Custom OpenTelemetry Metrics MeasureMap measureMap = STATS_RECORDER.newMeasureMap(); - String serverTiming = metadata.get(SERVER_TIMING_HEADER_KEY); - if (serverTiming != null && serverTiming.startsWith(SERVER_TIMING_HEADER_PREFIX)) { - try { - long latency = Long.parseLong(serverTiming.substring(SERVER_TIMING_HEADER_PREFIX.length())); - measureMap.put(SPANNER_GFE_LATENCY, latency); - measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 0L); - measureMap.record(tagContext); - spannerRpcMetrics.recordGfeLatency(latency, attributes); + if (!isDirectPathUsed) { + if (gfeLatency != null) { + long gfeVal = gfeLatency.longValue(); + measureMap.put(SPANNER_GFE_LATENCY, gfeVal); + measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 0L); + spannerRpcMetrics.recordGfeLatency(gfeVal, attributes); spannerRpcMetrics.recordGfeHeaderMissingCount(0L, attributes); + } else { + measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 1L); + spannerRpcMetrics.recordGfeHeaderMissingCount(1L, attributes); + } + } + measureMap.record(tagContext); + } + + private void recordSpan(Span span, String requestId) { + if (span != null) { + if (gfeLatency != null) { + span.setAttribute("gfe_latency", gfeLatency.toString()); + } + if (afeLatency != null) { + span.setAttribute("afe_latency", afeLatency.toString()); + } + span.setAttribute(XGoogSpannerRequestId.REQUEST_ID_HEADER_NAME, requestId); + } + } - if (span != null) { - span.setAttribute("gfe_latency", String.valueOf(latency)); + private void recordBuiltInMetrics( + CompositeTracer compositeTracer, + Map builtInMetricsAttributes, + String requestId, + Boolean isDirectPathUsed, + Boolean isAfeEnabled) { + if (compositeTracer != null) { + builtInMetricsAttributes.put(BuiltInMetricsConstant.REQUEST_ID_KEY.getKey(), requestId); + builtInMetricsAttributes.put( + BuiltInMetricsConstant.DIRECT_PATH_USED_KEY.getKey(), Boolean.toString(isDirectPathUsed)); + compositeTracer.addAttributes(builtInMetricsAttributes); + compositeTracer.recordServerTimingHeaderMetrics( + gfeLatency, afeLatency, isDirectPathUsed, isAfeEnabled); + } + } + + private Map parseServerTimingHeader(String serverTiming) { + Map serverTimingMetrics = new HashMap<>(); + if (serverTiming != null) { + Matcher matcher = SERVER_TIMING_PATTERN.matcher(serverTiming); + while (matcher.find()) { + String metricName = matcher.group("metricName"); + String durationStr = matcher.group("duration"); + + if (metricName != null && durationStr != null) { + serverTimingMetrics.put(metricName, Float.valueOf(durationStr)); } - } catch (NumberFormatException e) { - LOGGER.log(LEVEL, "Invalid server-timing object in header: {}", serverTiming); } - } else { - spannerRpcMetrics.recordGfeHeaderMissingCount(1L, attributes); - measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 1L).record(tagContext); } + return serverTimingMetrics; + } + + private String extractKey(DatabaseName databaseName, String methodName) + throws ExecutionException { + Cache keys = + keyCache.get(databaseName, () -> CacheBuilder.newBuilder().maximumSize(1000).build()); + return keys.get(methodName, () -> databaseName + methodName); } private DatabaseName extractDatabaseName(Metadata headers) throws ExecutionException { @@ -195,6 +259,10 @@ private DatabaseName extractDatabaseName(Metadata headers) throws ExecutionExcep return UNDEFINED_DATABASE_NAME; } + private String extractRequestId(Metadata headers) throws ExecutionException { + return headers.get(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY); + } + private TagContext getTagContext(String key, String method, DatabaseName databaseName) throws ExecutionException { return tagsCache.get( @@ -235,32 +303,8 @@ private Map getBuiltInMetricAttributes(String key, DatabaseName BuiltInMetricsConstant.INSTANCE_ID_KEY.getKey(), databaseName.getInstance()); attributes.put( BuiltInMetricsConstant.DIRECT_PATH_ENABLED_KEY.getKey(), - String.valueOf(this.directPathEnabledSupplier.get())); + String.valueOf(GapicSpannerRpc.DIRECTPATH_CHANNEL_CREATED)); return attributes; }); } - - private void addBuiltInMetricAttributes( - CompositeTracer compositeTracer, - Map builtInMetricsAttributes, - Boolean isDirectPathUsed) { - if (compositeTracer != null) { - // Direct Path used attribute - Map attributes = new HashMap<>(builtInMetricsAttributes); - attributes.put( - BuiltInMetricsConstant.DIRECT_PATH_USED_KEY.getKey(), Boolean.toString(isDirectPathUsed)); - - compositeTracer.addAttributes(attributes); - } - } - - private Boolean isDirectPathUsed(SocketAddress remoteAddr) { - if (remoteAddr instanceof InetSocketAddress) { - InetAddress inetAddress = ((InetSocketAddress) remoteAddr).getAddress(); - String addr = inetAddress.getHostAddress(); - return addr.startsWith(BuiltInMetricsConstant.DP_IPV4_PREFIX) - || addr.startsWith(BuiltInMetricsConstant.DP_IPV6_PREFIX); - } - return false; - } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyAwareChannel.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyAwareChannel.java new file mode 100644 index 00000000000..59fc03dfd80 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyAwareChannel.java @@ -0,0 +1,662 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.protobuf.ByteString; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.CommitResponse; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.PartialResultSet; +import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.ResultSet; +import com.google.spanner.v1.RollbackRequest; +import com.google.spanner.v1.Transaction; +import com.google.spanner.v1.TransactionSelector; +import io.grpc.CallOptions; +import io.grpc.ClientCall; +import io.grpc.ForwardingClientCall; +import io.grpc.ForwardingClientCallListener.SimpleForwardingClientCallListener; +import io.grpc.ManagedChannel; +import io.grpc.Metadata; +import io.grpc.MethodDescriptor; +import java.io.IOException; +import java.lang.ref.SoftReference; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import javax.annotation.Nullable; + +/** + * ManagedChannel that routes eligible requests using location-aware routing hints. + * + *

              Routing hints are applied to streaming read/query and unary ExecuteSql. Mutation-based + * BeginTransaction and Commit requests also carry routing hints when recipes are available. + * Commit/Rollback use transaction affinity when available. BeginTransaction is routed only when a + * mutation key is provided. + */ +@InternalApi +final class KeyAwareChannel extends ManagedChannel { + private static final long MAX_TRACKED_READ_ONLY_TRANSACTIONS = 100_000L; + private static final String STREAMING_READ_METHOD = "google.spanner.v1.Spanner/StreamingRead"; + private static final String STREAMING_SQL_METHOD = + "google.spanner.v1.Spanner/ExecuteStreamingSql"; + private static final String UNARY_SQL_METHOD = "google.spanner.v1.Spanner/ExecuteSql"; + private static final String BEGIN_TRANSACTION_METHOD = + "google.spanner.v1.Spanner/BeginTransaction"; + private static final String COMMIT_METHOD = "google.spanner.v1.Spanner/Commit"; + private static final String ROLLBACK_METHOD = "google.spanner.v1.Spanner/Rollback"; + + private final ManagedChannel defaultChannel; + private final ChannelEndpointCache endpointCache; + private final String authority; + private final String defaultEndpointAddress; + private final Map> channelFinders = + new ConcurrentHashMap<>(); + private final Map transactionAffinities = new ConcurrentHashMap<>(); + // Maps read-only transaction IDs to their preferLeader value. + // Strong reads → true (prefer leader), Stale reads → false (any replica). + // Bounded to prevent unbounded growth if application code does not close read-only transactions. + private final Cache readOnlyTxPreferLeader = + CacheBuilder.newBuilder().maximumSize(MAX_TRACKED_READ_ONLY_TRANSACTIONS).build(); + + private KeyAwareChannel( + InstantiatingGrpcChannelProvider channelProvider, + @Nullable ChannelEndpointCacheFactory endpointCacheFactory) + throws IOException { + if (endpointCacheFactory == null) { + this.endpointCache = new GrpcChannelEndpointCache(channelProvider); + } else { + this.endpointCache = endpointCacheFactory.create(channelProvider); + } + this.defaultChannel = endpointCache.defaultChannel().getChannel(); + this.defaultEndpointAddress = endpointCache.defaultChannel().getAddress(); + this.authority = this.defaultChannel.authority(); + } + + static KeyAwareChannel create( + InstantiatingGrpcChannelProvider channelProvider, + @Nullable ChannelEndpointCacheFactory endpointCacheFactory) + throws IOException { + return new KeyAwareChannel(channelProvider, endpointCacheFactory); + } + + private String extractDatabaseIdFromSession(String session) { + if (session == null || session.isEmpty()) { + return null; + } + int sessionsIndex = session.indexOf("/sessions/"); + if (sessionsIndex == -1) { + return null; + } + return session.substring(0, sessionsIndex); + } + + private ChannelFinder getOrCreateChannelFinder(String databaseId) { + SoftReference ref = channelFinders.get(databaseId); + ChannelFinder finder = (ref != null) ? ref.get() : null; + if (finder == null) { + synchronized (channelFinders) { + ref = channelFinders.get(databaseId); + finder = (ref != null) ? ref.get() : null; + if (finder == null) { + finder = new ChannelFinder(endpointCache); + channelFinders.put(databaseId, new SoftReference<>(finder)); + } + } + } + return finder; + } + + @Override + public ManagedChannel shutdown() { + endpointCache.shutdown(); + return this; + } + + @Override + public ManagedChannel shutdownNow() { + endpointCache.shutdown(); + return this; + } + + @Override + public boolean isTerminated() { + return defaultChannel.isTerminated(); + } + + @Override + public boolean isShutdown() { + return defaultChannel.isShutdown(); + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + return defaultChannel.awaitTermination(timeout, unit); + } + + @Override + public String authority() { + return authority; + } + + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + if (isKeyAware(methodDescriptor)) { + return new KeyAwareClientCall<>(this, methodDescriptor, callOptions); + } + return defaultChannel.newCall(methodDescriptor, callOptions); + } + + private static boolean isKeyAware(MethodDescriptor methodDescriptor) { + String method = methodDescriptor.getFullMethodName(); + return STREAMING_READ_METHOD.equals(method) + || STREAMING_SQL_METHOD.equals(method) + || UNARY_SQL_METHOD.equals(method) + || BEGIN_TRANSACTION_METHOD.equals(method) + || COMMIT_METHOD.equals(method) + || ROLLBACK_METHOD.equals(method); + } + + @Nullable + private ChannelEndpoint affinityEndpoint(ByteString transactionId) { + if (transactionId == null || transactionId.isEmpty()) { + return null; + } + String address = transactionAffinities.get(transactionId); + if (address == null) { + return null; + } + return endpointCache.get(address); + } + + private void clearAffinity(ByteString transactionId) { + if (transactionId == null || transactionId.isEmpty()) { + return; + } + transactionAffinities.remove(transactionId); + readOnlyTxPreferLeader.invalidate(transactionId); + } + + void clearTransactionAffinity(ByteString transactionId) { + clearAffinity(transactionId); + } + + private boolean isReadOnlyTransaction(ByteString transactionId) { + return transactionId != null + && !transactionId.isEmpty() + && readOnlyTxPreferLeader.getIfPresent(transactionId) != null; + } + + @Nullable + private Boolean readOnlyPreferLeader(ByteString transactionId) { + if (transactionId == null || transactionId.isEmpty()) { + return null; + } + return readOnlyTxPreferLeader.getIfPresent(transactionId); + } + + private void trackReadOnlyTransaction(ByteString transactionId, boolean preferLeader) { + if (transactionId == null || transactionId.isEmpty()) { + return; + } + readOnlyTxPreferLeader.put(transactionId, preferLeader); + } + + private void recordAffinity( + ByteString transactionId, @Nullable ChannelEndpoint endpoint, boolean allowDefault) { + if (transactionId == null || transactionId.isEmpty() || endpoint == null) { + return; + } + String address = endpoint.getAddress(); + if (!allowDefault && defaultEndpointAddress.equals(address)) { + return; + } + transactionAffinities.put(transactionId, address); + } + + private static ByteString transactionIdFromSelector(TransactionSelector selector) { + if (selector.getSelectorCase() == TransactionSelector.SelectorCase.ID) { + return selector.getId(); + } + return ByteString.EMPTY; + } + + @Nullable + private static ByteString transactionIdFromMetadata(PartialResultSet result) { + if (result.hasMetadata()) { + return transactionIdFromTransaction(result.getMetadata().getTransaction()); + } + return null; + } + + @Nullable + private static ByteString transactionIdFromMetadata(ResultSet result) { + if (result.hasMetadata()) { + return transactionIdFromTransaction(result.getMetadata().getTransaction()); + } + return null; + } + + @Nullable + private static ByteString transactionIdFromTransaction(Transaction transaction) { + if (transaction != null && !transaction.getId().isEmpty()) { + return transaction.getId(); + } + return null; + } + + static final class KeyAwareClientCall + extends ForwardingClientCall { + private final KeyAwareChannel parentChannel; + private final MethodDescriptor methodDescriptor; + private final CallOptions callOptions; + private Listener responseListener; + private Metadata headers; + @Nullable private ClientCall delegate; + private ChannelFinder channelFinder; + @Nullable private ChannelEndpoint selectedEndpoint; + @Nullable private ByteString transactionIdToClear; + private boolean allowDefaultAffinity; + private long pendingRequests; + private boolean pendingHalfClose; + @Nullable private Boolean pendingMessageCompression; + @Nullable private io.grpc.Status cancelledStatus; + @Nullable private Metadata cancelledTrailers; + private boolean isReadOnlyBegin; + private boolean readOnlyIsStrong; + private final Object lock = new Object(); + + KeyAwareClientCall( + KeyAwareChannel parentChannel, + MethodDescriptor methodDescriptor, + CallOptions callOptions) { + this.parentChannel = parentChannel; + this.methodDescriptor = methodDescriptor; + this.callOptions = callOptions; + } + + @Override + protected ClientCall delegate() { + synchronized (lock) { + if (delegate == null) { + throw new IllegalStateException( + "Delegate call not initialized before use. sendMessage was likely not called."); + } + return delegate; + } + } + + @Override + public void start(Listener responseListener, Metadata headers) { + Listener listenerToClose = null; + io.grpc.Status statusToClose = null; + Metadata trailersToClose = null; + synchronized (lock) { + this.responseListener = new KeyAwareClientCallListener<>(responseListener, this); + this.headers = headers; + if (this.cancelledStatus != null) { + listenerToClose = this.responseListener; + statusToClose = this.cancelledStatus; + trailersToClose = + this.cancelledTrailers == null ? new Metadata() : this.cancelledTrailers; + } + } + if (listenerToClose != null) { + listenerToClose.onClose(statusToClose, trailersToClose); + } + } + + @Override + @SuppressWarnings("unchecked") + public void sendMessage(RequestT message) { + synchronized (lock) { + if (this.cancelledStatus != null) { + return; + } + if (responseListener == null || headers == null) { + throw new IllegalStateException("start must be called before sendMessage"); + } + ChannelEndpoint endpoint = null; + ChannelFinder finder = null; + + if (message instanceof ReadRequest) { + ReadRequest.Builder reqBuilder = ((ReadRequest) message).toBuilder(); + maybeTrackReadOnlyBegin(reqBuilder.getTransaction()); + RoutingDecision routing = routeFromRequest(reqBuilder); + finder = routing.finder; + endpoint = routing.endpoint; + message = (RequestT) reqBuilder.build(); + } else if (message instanceof ExecuteSqlRequest) { + ExecuteSqlRequest.Builder reqBuilder = ((ExecuteSqlRequest) message).toBuilder(); + maybeTrackReadOnlyBegin(reqBuilder.getTransaction()); + RoutingDecision routing = routeFromRequest(reqBuilder); + finder = routing.finder; + endpoint = routing.endpoint; + message = (RequestT) reqBuilder.build(); + } else if (message instanceof BeginTransactionRequest) { + BeginTransactionRequest.Builder reqBuilder = + ((BeginTransactionRequest) message).toBuilder(); + String databaseId = parentChannel.extractDatabaseIdFromSession(reqBuilder.getSession()); + if (databaseId != null) { + finder = parentChannel.getOrCreateChannelFinder(databaseId); + } + if (finder != null && reqBuilder.hasMutationKey()) { + endpoint = finder.findServer(reqBuilder); + } + if (reqBuilder.hasOptions() && reqBuilder.getOptions().hasReadOnly()) { + isReadOnlyBegin = true; + readOnlyIsStrong = reqBuilder.getOptions().getReadOnly().getStrong(); + } else { + allowDefaultAffinity = true; + } + message = (RequestT) reqBuilder.build(); + } else if (message instanceof CommitRequest) { + CommitRequest request = (CommitRequest) message; + String databaseId = parentChannel.extractDatabaseIdFromSession(request.getSession()); + if (databaseId != null) { + finder = parentChannel.getOrCreateChannelFinder(databaseId); + } + CommitRequest.Builder reqBuilder = null; + if (finder != null && request.getMutationsCount() > 0) { + reqBuilder = request.toBuilder(); + endpoint = finder.fillRoutingHint(reqBuilder); + request = reqBuilder.build(); + } + if (!request.getTransactionId().isEmpty()) { + ChannelEndpoint affinityEndpoint = + parentChannel.affinityEndpoint(request.getTransactionId()); + if (affinityEndpoint != null) { + endpoint = affinityEndpoint; + } + transactionIdToClear = request.getTransactionId(); + } + if (reqBuilder != null) { + message = (RequestT) request; + } + } else if (message instanceof RollbackRequest) { + RollbackRequest request = (RollbackRequest) message; + if (!request.getTransactionId().isEmpty()) { + endpoint = parentChannel.affinityEndpoint(request.getTransactionId()); + transactionIdToClear = request.getTransactionId(); + } + } else { + throw new IllegalStateException( + "Only read, query, begin transaction, commit, and rollback requests are supported for" + + " key-aware calls."); + } + + if (endpoint == null) { + endpoint = parentChannel.endpointCache.defaultChannel(); + } + selectedEndpoint = endpoint; + this.channelFinder = finder; + + delegate = endpoint.getChannel().newCall(methodDescriptor, callOptions); + if (pendingMessageCompression != null) { + delegate.setMessageCompression(pendingMessageCompression); + pendingMessageCompression = null; + } + delegate.start(responseListener, headers); + drainPendingRequests(); + delegate.sendMessage(message); + if (pendingHalfClose) { + delegate.halfClose(); + } + } + } + + @Override + public void halfClose() { + ClientCall currentDelegate; + synchronized (lock) { + if (this.cancelledStatus != null) { + return; + } + if (delegate == null) { + pendingHalfClose = true; + return; + } + currentDelegate = delegate; + } + currentDelegate.halfClose(); + } + + @Override + public void cancel(@Nullable String message, @Nullable Throwable cause) { + ClientCall currentDelegate; + Listener listenerToClose = null; + io.grpc.Status statusToClose = null; + Metadata trailersToClose = null; + synchronized (lock) { + currentDelegate = delegate; + if (currentDelegate == null) { + cancelledStatus = io.grpc.Status.CANCELLED.withDescription(message).withCause(cause); + Metadata trailers = + cause == null ? new Metadata() : io.grpc.Status.trailersFromThrowable(cause); + cancelledTrailers = trailers == null ? new Metadata() : trailers; + if (responseListener != null) { + listenerToClose = responseListener; + statusToClose = cancelledStatus; + trailersToClose = cancelledTrailers; + } + } + } + if (currentDelegate != null) { + currentDelegate.cancel(message, cause); + } else if (listenerToClose != null) { + listenerToClose.onClose(statusToClose, trailersToClose); + } + } + + @Override + public void request(int numMessages) { + ClientCall currentDelegate; + synchronized (lock) { + if (cancelledStatus != null) { + return; + } + if (delegate != null) { + currentDelegate = delegate; + } else { + if (numMessages <= 0) { + return; + } + long updated = pendingRequests + numMessages; + if (updated < 0L) { + updated = Long.MAX_VALUE; + } + pendingRequests = updated; + return; + } + } + currentDelegate.request(numMessages); + } + + @Override + public boolean isReady() { + ClientCall currentDelegate; + synchronized (lock) { + currentDelegate = delegate; + } + if (currentDelegate == null) { + return false; + } + return currentDelegate.isReady(); + } + + @Override + public void setMessageCompression(boolean enabled) { + ClientCall currentDelegate; + synchronized (lock) { + if (cancelledStatus != null) { + return; + } + if (delegate != null) { + currentDelegate = delegate; + } else { + pendingMessageCompression = enabled; + return; + } + } + currentDelegate.setMessageCompression(enabled); + } + + private void drainPendingRequests() { + ClientCall currentDelegate = delegate; + if (currentDelegate == null) { + return; + } + long requests = pendingRequests; + pendingRequests = 0L; + while (requests > 0) { + int batch = requests > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) requests; + currentDelegate.request(batch); + requests -= batch; + } + } + + void maybeRecordAffinity(ByteString transactionId) { + parentChannel.recordAffinity(transactionId, selectedEndpoint, allowDefaultAffinity); + } + + void maybeClearAffinity() { + parentChannel.clearAffinity(transactionIdToClear); + } + + private void maybeTrackReadOnlyBegin(TransactionSelector selector) { + if (selector.getSelectorCase() == TransactionSelector.SelectorCase.BEGIN + && selector.getBegin().hasReadOnly()) { + isReadOnlyBegin = true; + readOnlyIsStrong = selector.getBegin().getReadOnly().getStrong(); + } + } + + private RoutingDecision routeFromRequest(ReadRequest.Builder reqBuilder) { + String databaseId = parentChannel.extractDatabaseIdFromSession(reqBuilder.getSession()); + ByteString transactionId = transactionIdFromSelector(reqBuilder.getTransaction()); + // Skip affinity for read-only transactions so each read routes independently. + boolean isReadOnly = parentChannel.isReadOnlyTransaction(transactionId); + ChannelEndpoint endpoint = isReadOnly ? null : parentChannel.affinityEndpoint(transactionId); + ChannelFinder finder = null; + if (databaseId != null) { + finder = parentChannel.getOrCreateChannelFinder(databaseId); + } + if (databaseId != null && endpoint == null) { + Boolean preferLeaderOverride = parentChannel.readOnlyPreferLeader(transactionId); + ChannelEndpoint routed = + preferLeaderOverride != null + ? finder.findServer(reqBuilder, preferLeaderOverride) + : finder.findServer(reqBuilder); + endpoint = routed; + } + return new RoutingDecision(finder, endpoint); + } + + private RoutingDecision routeFromRequest(ExecuteSqlRequest.Builder reqBuilder) { + String databaseId = parentChannel.extractDatabaseIdFromSession(reqBuilder.getSession()); + ByteString transactionId = transactionIdFromSelector(reqBuilder.getTransaction()); + // Skip affinity for read-only transactions so each query routes independently. + boolean isReadOnly = parentChannel.isReadOnlyTransaction(transactionId); + ChannelEndpoint endpoint = isReadOnly ? null : parentChannel.affinityEndpoint(transactionId); + ChannelFinder finder = null; + if (databaseId != null) { + finder = parentChannel.getOrCreateChannelFinder(databaseId); + } + if (databaseId != null && endpoint == null) { + Boolean preferLeaderOverride = parentChannel.readOnlyPreferLeader(transactionId); + ChannelEndpoint routed = + preferLeaderOverride != null + ? finder.findServer(reqBuilder, preferLeaderOverride) + : finder.findServer(reqBuilder); + endpoint = routed; + } + return new RoutingDecision(finder, endpoint); + } + } + + private static final class RoutingDecision { + @Nullable private final ChannelFinder finder; + @Nullable private final ChannelEndpoint endpoint; + + private RoutingDecision(@Nullable ChannelFinder finder, @Nullable ChannelEndpoint endpoint) { + this.finder = finder; + this.endpoint = endpoint; + } + } + + static final class KeyAwareClientCallListener + extends SimpleForwardingClientCallListener { + private final KeyAwareClientCall call; + + KeyAwareClientCallListener( + ClientCall.Listener responseListener, KeyAwareClientCall call) { + super(responseListener); + this.call = call; + } + + @Override + public void onMessage(ResponseT message) { + ByteString transactionId = null; + if (message instanceof PartialResultSet) { + PartialResultSet response = (PartialResultSet) message; + if (response.hasCacheUpdate() && call.channelFinder != null) { + call.channelFinder.update(response.getCacheUpdate()); + } + transactionId = transactionIdFromMetadata(response); + } else if (message instanceof ResultSet) { + ResultSet response = (ResultSet) message; + if (response.hasCacheUpdate() && call.channelFinder != null) { + call.channelFinder.update(response.getCacheUpdate()); + } + transactionId = transactionIdFromMetadata(response); + } else if (message instanceof Transaction) { + Transaction response = (Transaction) message; + if (response.hasCacheUpdate() && call.channelFinder != null) { + call.channelFinder.update(response.getCacheUpdate()); + } + transactionId = transactionIdFromTransaction(response); + } else if (message instanceof CommitResponse) { + CommitResponse response = (CommitResponse) message; + if (response.hasCacheUpdate() && call.channelFinder != null) { + call.channelFinder.update(response.getCacheUpdate()); + } + } + if (transactionId != null) { + if (call.isReadOnlyBegin) { + // Track the read-only transaction so subsequent reads skip affinity + // and route independently based on key-based routing. + call.parentChannel.trackReadOnlyTransaction(transactionId, call.readOnlyIsStrong); + } else if (!call.parentChannel.isReadOnlyTransaction(transactionId)) { + call.maybeRecordAffinity(transactionId); + } + } + super.onMessage(message); + } + + @Override + public void onClose(io.grpc.Status status, Metadata trailers) { + call.maybeClearAffinity(); + super.onClose(status, trailers); + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyAwareTransportChannelProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyAwareTransportChannelProvider.java new file mode 100644 index 00000000000..438717c3c98 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyAwareTransportChannelProvider.java @@ -0,0 +1,129 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.auth.Credentials; +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; +import javax.annotation.Nullable; + +final class KeyAwareTransportChannelProvider implements TransportChannelProvider { + private final InstantiatingGrpcChannelProvider baseProvider; + @Nullable private final ChannelEndpointCacheFactory endpointCacheFactory; + + KeyAwareTransportChannelProvider( + InstantiatingGrpcChannelProvider.Builder builder, + @Nullable ChannelEndpointCacheFactory endpointCacheFactory) { + this.baseProvider = builder.build(); + this.endpointCacheFactory = endpointCacheFactory; + } + + KeyAwareTransportChannelProvider( + InstantiatingGrpcChannelProvider baseProvider, + @Nullable ChannelEndpointCacheFactory endpointCacheFactory) { + this.baseProvider = baseProvider; + this.endpointCacheFactory = endpointCacheFactory; + } + + @Override + public GrpcTransportChannel getTransportChannel() throws IOException { + return GrpcTransportChannel.newBuilder() + .setManagedChannel(KeyAwareChannel.create(baseProvider, endpointCacheFactory)) + .build(); + } + + @Override + public String getTransportName() { + return baseProvider.getTransportName(); + } + + @Override + public boolean needsEndpoint() { + return baseProvider.needsEndpoint(); + } + + @Override + public boolean needsCredentials() { + return baseProvider.needsCredentials(); + } + + @Override + public boolean needsExecutor() { + return baseProvider.needsExecutor(); + } + + @Override + public boolean needsHeaders() { + return baseProvider.needsHeaders(); + } + + @Override + public boolean shouldAutoClose() { + return baseProvider.shouldAutoClose(); + } + + @Override + public TransportChannelProvider withEndpoint(String endpoint) { + return new KeyAwareTransportChannelProvider( + (InstantiatingGrpcChannelProvider) baseProvider.withEndpoint(endpoint), + endpointCacheFactory); + } + + @Override + public TransportChannelProvider withCredentials(Credentials credentials) { + return new KeyAwareTransportChannelProvider( + (InstantiatingGrpcChannelProvider) baseProvider.withCredentials(credentials), + endpointCacheFactory); + } + + @Override + public TransportChannelProvider withHeaders(Map headers) { + return new KeyAwareTransportChannelProvider( + (InstantiatingGrpcChannelProvider) baseProvider.withHeaders(headers), endpointCacheFactory); + } + + @Override + public TransportChannelProvider withPoolSize(int poolSize) { + return new KeyAwareTransportChannelProvider( + (InstantiatingGrpcChannelProvider) baseProvider.withPoolSize(poolSize), + endpointCacheFactory); + } + + @Override + public TransportChannelProvider withExecutor(ScheduledExecutorService executor) { + return new KeyAwareTransportChannelProvider( + (InstantiatingGrpcChannelProvider) baseProvider.withExecutor(executor), + endpointCacheFactory); + } + + @Override + public TransportChannelProvider withExecutor(Executor executor) { + return new KeyAwareTransportChannelProvider( + (InstantiatingGrpcChannelProvider) baseProvider.withExecutor(executor), + endpointCacheFactory); + } + + @Override + public boolean acceptsPoolSize() { + return baseProvider.acceptsPoolSize(); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRangeCache.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRangeCache.java new file mode 100644 index 00000000000..bdbd495aa58 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRangeCache.java @@ -0,0 +1,688 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.hash.Hashing; +import com.google.protobuf.ByteString; +import com.google.spanner.v1.CacheUpdate; +import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.Group; +import com.google.spanner.v1.Range; +import com.google.spanner.v1.RoutingHint; +import com.google.spanner.v1.Tablet; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.NavigableMap; +import java.util.Objects; +import java.util.TreeMap; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.IntStream; + +/** Cache for routing information used by location-aware routing. */ +@InternalApi +public final class KeyRangeCache { + + private static final int MAX_LOCAL_REPLICA_DISTANCE = 5; + private static final int DEFAULT_MIN_ENTRIES_FOR_RANDOM_PICK = 1000; + + /** Determines how to handle ranges that span multiple splits. */ + public enum RangeMode { + /** Consider it a cache miss if the whole range is not in a single split. */ + COVERING_SPLIT, + /** If the range spans multiple splits, pick a random split when possible. */ + PICK_RANDOM + } + + private final ChannelEndpointCache endpointCache; + private final NavigableMap ranges = + new TreeMap<>(ByteString.unsignedLexicographicalComparator()); + private final Map groups = new HashMap<>(); + private final Object lock = new Object(); + private final AtomicLong accessCounter = new AtomicLong(); + + private volatile boolean deterministicRandom = false; + private volatile int minCacheEntriesForRandomPick = DEFAULT_MIN_ENTRIES_FOR_RANDOM_PICK; + + public KeyRangeCache(ChannelEndpointCache endpointCache) { + this.endpointCache = Objects.requireNonNull(endpointCache); + } + + @VisibleForTesting + void useDeterministicRandom() { + deterministicRandom = true; + } + + @VisibleForTesting + void setMinCacheEntriesForRandomPick(int value) { + minCacheEntriesForRandomPick = value; + } + + /** Applies cache updates. Tablets are processed inside group updates. */ + public void addRanges(CacheUpdate cacheUpdate) { + List newGroups = new ArrayList<>(); + synchronized (lock) { + for (Group groupIn : cacheUpdate.getGroupList()) { + newGroups.add(findOrInsertGroup(groupIn)); + } + for (Range rangeIn : cacheUpdate.getRangeList()) { + replaceRangeIfNewer(rangeIn); + } + for (CachedGroup group : newGroups) { + unref(group); + } + } + } + + /** + * Fills routing hint and returns the server to use, or null if no routing decision can be made. + */ + public ChannelEndpoint fillRoutingHint( + boolean preferLeader, + RangeMode rangeMode, + DirectedReadOptions directedReadOptions, + RoutingHint.Builder hintBuilder) { + ByteString key = hintBuilder.getKey(); + if (key.isEmpty()) { + return null; + } + + CachedRange targetRange; + synchronized (lock) { + targetRange = findRangeLocked(key, hintBuilder.getLimitKey(), rangeMode); + } + + if (targetRange == null || targetRange.group == null) { + return null; + } + + hintBuilder.setGroupUid(targetRange.group.groupUid); + hintBuilder.setSplitId(targetRange.splitId); + hintBuilder.setKey(targetRange.startKey); + hintBuilder.setLimitKey(targetRange.limitKey); + + return targetRange.group.fillRoutingHint(preferLeader, directedReadOptions, hintBuilder); + } + + public void clear() { + synchronized (lock) { + for (CachedRange range : ranges.values()) { + unref(range.group); + } + ranges.clear(); + groups.clear(); + } + } + + public int size() { + synchronized (lock) { + return ranges.size(); + } + } + + public void shrinkTo(int newSize) { + synchronized (lock) { + if (newSize <= 0) { + clear(); + return; + } + if (newSize >= ranges.size()) { + return; + } + + int numToShrink = ranges.size() - newSize; + int numToSample = Math.min(numToShrink * 2, ranges.size()); + List allRanges = new ArrayList<>(ranges.values()); + int[] sampleIndexes = sampleWithoutReplacement(allRanges.size(), numToSample); + Arrays.sort(sampleIndexes); + + List sampled = new ArrayList<>(numToSample); + for (int index : sampleIndexes) { + sampled.add(allRanges.get(index)); + } + sampled.sort(Comparator.comparingLong(range -> range.lastAccess)); + + for (int i = 0; i < numToShrink; i++) { + CachedRange range = sampled.get(i); + ranges.remove(range.limitKey); + unref(range.group); + } + } + } + + public String debugString() { + StringBuilder sb = new StringBuilder(); + synchronized (lock) { + for (Map.Entry entry : ranges.entrySet()) { + CachedRange cachedRange = entry.getValue(); + sb.append("Range[") + .append(cachedRange.startKey.toStringUtf8()) + .append("-") + .append(entry.getKey().toStringUtf8()) + .append("]: ") + .append(cachedRange.debugString()) + .append("\n"); + } + for (CachedGroup g : groups.values()) { + sb.append(g.debugString()).append("\n"); + } + } + return sb.toString(); + } + + private long accessTimeNow() { + return accessCounter.incrementAndGet(); + } + + private CachedRange findRangeLocked(ByteString key, ByteString limit, RangeMode mode) { + Map.Entry entry = ranges.higherEntry(key); + if (entry == null) { + return null; + } + + CachedRange firstRange = entry.getValue(); + boolean startInRange = compare(key, firstRange.startKey) >= 0; + if (limit.isEmpty()) { + if (startInRange) { + firstRange.lastAccess = accessTimeNow(); + return firstRange; + } + return null; + } + + boolean limitInRange = compare(limit, entry.getKey()) <= 0; + if (startInRange && limitInRange) { + firstRange.lastAccess = accessTimeNow(); + return firstRange; + } + if (mode == RangeMode.COVERING_SPLIT) { + return null; + } + + int total = 0; + boolean foundGap = !startInRange; + boolean hitEnd = false; + Map.Entry sampled = entry; + ByteString lastLimit = firstRange.startKey; + + Map.Entry current = entry; + while (current != null) { + CachedRange range = current.getValue(); + if (!lastLimit.equals(range.startKey)) { + foundGap = true; + if (compare(range.startKey, limit) >= 0) { + break; + } + } + total++; + if (uniformRandom(total, key, limit, range.startKey) == 0) { + sampled = current; + } + lastLimit = range.limitKey; + if (compare(lastLimit, limit) >= 0 || total >= minCacheEntriesForRandomPick) { + break; + } + Map.Entry next = ranges.higherEntry(current.getKey()); + if (next == null) { + hitEnd = true; + break; + } + current = next; + } + + if (hitEnd) { + foundGap = true; + } + + if (!foundGap || total >= minCacheEntriesForRandomPick) { + CachedRange selected = sampled.getValue(); + selected.lastAccess = accessTimeNow(); + return selected; + } + return null; + } + + private int uniformRandom(int n, ByteString seed1, ByteString seed2, ByteString seed3) { + if (deterministicRandom) { + ByteString combined = seed1.concat(seed2).concat(seed3); + int hash = Hashing.crc32c().hashBytes(combined.toByteArray()).asInt(); + long unsigned = Integer.toUnsignedLong(hash); + return (int) (unsigned % n); + } + return ThreadLocalRandom.current().nextInt(n); + } + + private int[] sampleWithoutReplacement(int populationSize, int sampleSize) { + int[] indexes = IntStream.range(0, populationSize).toArray(); + for (int i = 0; i < sampleSize; i++) { + int j = i + ThreadLocalRandom.current().nextInt(populationSize - i); + int tmp = indexes[i]; + indexes[i] = indexes[j]; + indexes[j] = tmp; + } + return Arrays.copyOf(indexes, sampleSize); + } + + private void replaceRangeIfNewer(Range rangeIn) { + ByteString startKey = rangeIn.getStartKey(); + ByteString limitKey = rangeIn.getLimitKey(); + + Map.Entry startEntry = ranges.higherEntry(startKey); + if (startEntry == null || compare(startEntry.getValue().startKey, limitKey) >= 0) { + CachedRange newRange = + new CachedRange( + startKey, + limitKey, + findAndRefGroup(rangeIn.getGroupUid()), + rangeIn.getSplitId(), + rangeIn.getGeneration(), + accessTimeNow()); + ranges.put(limitKey, newRange); + return; + } + + List overlapping = new ArrayList<>(); + for (Map.Entry entry = startEntry; + entry != null && compare(entry.getValue().startKey, limitKey) < 0; + entry = ranges.higherEntry(entry.getKey())) { + CachedRange existing = entry.getValue(); + int genCompare = compare(rangeIn.getGeneration(), existing.generation); + if (genCompare < 0 + || (genCompare == 0 + && startKey.equals(existing.startKey) + && limitKey.equals(existing.limitKey))) { + return; + } + overlapping.add(existing); + } + + for (CachedRange range : overlapping) { + ranges.remove(range.limitKey); + } + + CachedRange first = overlapping.get(0); + if (compare(first.startKey, startKey) < 0) { + CachedRange head = + new CachedRange( + first.startKey, + startKey, + refGroup(first.group), + first.splitId, + first.generation, + first.lastAccess); + ranges.put(head.limitKey, head); + } + + CachedRange newRange = + new CachedRange( + startKey, + limitKey, + findAndRefGroup(rangeIn.getGroupUid()), + rangeIn.getSplitId(), + rangeIn.getGeneration(), + accessTimeNow()); + ranges.put(limitKey, newRange); + + CachedRange last = overlapping.get(overlapping.size() - 1); + if (compare(last.limitKey, limitKey) > 0) { + CachedRange tail = + new CachedRange( + limitKey, + last.limitKey, + refGroup(last.group), + last.splitId, + last.generation, + last.lastAccess); + ranges.put(tail.limitKey, tail); + } + + for (CachedRange range : overlapping) { + unref(range.group); + } + } + + private CachedGroup findAndRefGroup(long groupUid) { + CachedGroup group = groups.get(groupUid); + if (group != null) { + group.refs++; + } + return group; + } + + private CachedGroup findOrInsertGroup(Group groupIn) { + CachedGroup group = groups.get(groupIn.getGroupUid()); + if (group == null) { + group = new CachedGroup(groupIn.getGroupUid()); + groups.put(groupIn.getGroupUid(), group); + } else { + group.refs++; + } + group.update(groupIn); + return group; + } + + private CachedGroup refGroup(CachedGroup group) { + if (group != null) { + group.refs++; + } + return group; + } + + private void unref(CachedGroup group) { + if (group == null) { + return; + } + if (--group.refs == 0) { + groups.remove(group.groupUid); + } + } + + private int compare(ByteString left, ByteString right) { + return ByteString.unsignedLexicographicalComparator().compare(left, right); + } + + /** Represents a single tablet within a group. */ + private class CachedTablet { + long tabletUid = 0; + ByteString incarnation = ByteString.EMPTY; + String serverAddress = ""; + int distance = 0; + boolean skip = false; + Tablet.Role role = Tablet.Role.ROLE_UNSPECIFIED; + String location = ""; + + ChannelEndpoint endpoint = null; + + void update(Tablet tabletIn) { + if (tabletUid > 0 && compare(incarnation, tabletIn.getIncarnation()) > 0) { + return; + } + + tabletUid = tabletIn.getTabletUid(); + incarnation = tabletIn.getIncarnation(); + distance = tabletIn.getDistance(); + skip = tabletIn.getSkip(); + role = tabletIn.getRole(); + location = tabletIn.getLocation(); + + if (!serverAddress.equals(tabletIn.getServerAddress())) { + serverAddress = tabletIn.getServerAddress(); + endpoint = null; + } + } + + boolean matches(DirectedReadOptions directedReadOptions) { + switch (directedReadOptions.getReplicasCase()) { + case INCLUDE_REPLICAS: + for (DirectedReadOptions.ReplicaSelection rs : + directedReadOptions.getIncludeReplicas().getReplicaSelectionsList()) { + if (matches(rs)) { + return true; + } + } + return false; + case EXCLUDE_REPLICAS: + for (DirectedReadOptions.ReplicaSelection rs : + directedReadOptions.getExcludeReplicas().getReplicaSelectionsList()) { + if (matches(rs)) { + return false; + } + } + return true; + case REPLICAS_NOT_SET: + default: + return distance <= MAX_LOCAL_REPLICA_DISTANCE; + } + } + + private boolean matches(DirectedReadOptions.ReplicaSelection selection) { + if (!selection.getLocation().isEmpty() && !selection.getLocation().equals(location)) { + return false; + } + switch (selection.getType()) { + case READ_WRITE: + return role == Tablet.Role.READ_WRITE || role == Tablet.Role.ROLE_UNSPECIFIED; + case READ_ONLY: + return role == Tablet.Role.READ_ONLY; + default: + return true; + } + } + + boolean shouldSkip(RoutingHint.Builder hintBuilder) { + if (skip || serverAddress.isEmpty() || (endpoint != null && !endpoint.isHealthy())) { + RoutingHint.SkippedTablet.Builder skipped = hintBuilder.addSkippedTabletUidBuilder(); + skipped.setTabletUid(tabletUid); + skipped.setIncarnation(incarnation); + return true; + } + return false; + } + + ChannelEndpoint pick(RoutingHint.Builder hintBuilder) { + hintBuilder.setTabletUid(tabletUid); + if (endpoint == null && !serverAddress.isEmpty()) { + endpoint = endpointCache.get(serverAddress); + } + return endpoint; + } + + String debugString() { + return tabletUid + + ":" + + serverAddress + + "@" + + incarnation + + "(location=" + + location + + ",role=" + + role + + ",distance=" + + distance + + (skip ? ",skip" : "") + + ")"; + } + } + + /** Represents a paxos group with its tablets. */ + private class CachedGroup { + final long groupUid; + ByteString generation = ByteString.EMPTY; + List tablets = new ArrayList<>(); + int leaderIndex = -1; + int refs = 1; + + CachedGroup(long groupUid) { + this.groupUid = groupUid; + } + + synchronized void update(Group groupIn) { + if (compare(groupIn.getGeneration(), generation) > 0) { + generation = groupIn.getGeneration(); + if (groupIn.getLeaderIndex() >= 0 && groupIn.getLeaderIndex() < groupIn.getTabletsCount()) { + leaderIndex = groupIn.getLeaderIndex(); + } else { + leaderIndex = -1; + } + } + + if (tablets.size() == groupIn.getTabletsCount()) { + boolean mismatch = false; + for (int t = 0; t < groupIn.getTabletsCount(); t++) { + if (tablets.get(t).tabletUid != groupIn.getTablets(t).getTabletUid()) { + mismatch = true; + break; + } + } + if (!mismatch) { + for (int t = 0; t < groupIn.getTabletsCount(); t++) { + tablets.get(t).update(groupIn.getTablets(t)); + } + return; + } + } + + Map tabletsByUid = new HashMap<>(tablets.size()); + for (CachedTablet tablet : tablets) { + tabletsByUid.put(tablet.tabletUid, tablet); + } + List newTablets = new ArrayList<>(groupIn.getTabletsCount()); + for (int t = 0; t < groupIn.getTabletsCount(); t++) { + Tablet tabletIn = groupIn.getTablets(t); + CachedTablet tablet = tabletsByUid.get(tabletIn.getTabletUid()); + if (tablet == null) { + tablet = new CachedTablet(); + } + tablet.update(tabletIn); + newTablets.add(tablet); + } + tablets = newTablets; + } + + ChannelEndpoint fillRoutingHint( + boolean preferLeader, + DirectedReadOptions directedReadOptions, + RoutingHint.Builder hintBuilder) { + boolean hasDirectedReadOptions = + directedReadOptions.getReplicasCase() + != DirectedReadOptions.ReplicasCase.REPLICAS_NOT_SET; + + // Fast path: pick a tablet while holding the lock. If the endpoint is already + // cached on the tablet, return it immediately without releasing the lock. + // If the endpoint needs to be created (blocking network dial), release the + // lock first so other threads are not blocked during channel creation. + CachedTablet selected; + synchronized (this) { + selected = + selectTabletLocked( + preferLeader, hasDirectedReadOptions, hintBuilder, directedReadOptions); + if (selected == null) { + return null; + } + if (selected.endpoint != null || selected.serverAddress.isEmpty()) { + return selected.pick(hintBuilder); + } + // Slow path: endpoint not yet created. Capture the address and release the + // lock before calling endpointCache.get(), which may block on network dial. + hintBuilder.setTabletUid(selected.tabletUid); + } + + String serverAddress = selected.serverAddress; + ChannelEndpoint endpoint = endpointCache.get(serverAddress); + + synchronized (this) { + // Only update if the tablet's address hasn't changed since we released the lock. + if (selected.endpoint == null && selected.serverAddress.equals(serverAddress)) { + selected.endpoint = endpoint; + } + // Re-set tabletUid with the latest value in case update() ran concurrently. + hintBuilder.setTabletUid(selected.tabletUid); + return selected.endpoint; + } + } + + private CachedTablet selectTabletLocked( + boolean preferLeader, + boolean hasDirectedReadOptions, + RoutingHint.Builder hintBuilder, + DirectedReadOptions directedReadOptions) { + if (preferLeader + && !hasDirectedReadOptions + && hasLeader() + && leader().distance <= MAX_LOCAL_REPLICA_DISTANCE + && !leader().shouldSkip(hintBuilder)) { + return leader(); + } + for (CachedTablet tablet : tablets) { + if (!tablet.matches(directedReadOptions)) { + continue; + } + if (tablet.shouldSkip(hintBuilder)) { + continue; + } + return tablet; + } + return null; + } + + boolean hasLeader() { + return leaderIndex >= 0 && leaderIndex < tablets.size(); + } + + CachedTablet leader() { + return tablets.get(leaderIndex); + } + + String debugString() { + StringBuilder sb = new StringBuilder(); + sb.append(groupUid).append(":["); + for (int i = 0; i < tablets.size(); i++) { + sb.append(tablets.get(i).debugString()); + if (hasLeader() && i == leaderIndex) { + sb.append(" (leader)"); + } + if (i < tablets.size() - 1) { + sb.append(", "); + } + } + sb.append("]@").append(generation.toStringUtf8()); + sb.append("#").append(refs); + return sb.toString(); + } + } + + /** Represents a cached range with its group and split information. */ + private static class CachedRange { + final ByteString startKey; + final ByteString limitKey; + final CachedGroup group; + final long splitId; + final ByteString generation; + long lastAccess; + + CachedRange( + ByteString startKey, + ByteString limitKey, + CachedGroup group, + long splitId, + ByteString generation, + long lastAccess) { + this.startKey = startKey; + this.limitKey = limitKey; + this.group = group; + this.splitId = splitId; + this.generation = generation; + this.lastAccess = lastAccess; + } + + String debugString() { + return (group != null ? group.groupUid : "null_group") + + "," + + splitId + + "@" + + (generation.isEmpty() ? "" : generation.toStringUtf8()) + + ",last_access=" + + lastAccess; + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRecipe.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRecipe.java new file mode 100644 index 00000000000..1e15b69bf97 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRecipe.java @@ -0,0 +1,865 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.protobuf.ByteString; +import com.google.protobuf.ListValue; +import com.google.protobuf.Struct; +import com.google.protobuf.Value; +import com.google.spanner.v1.KeyRange; +import com.google.spanner.v1.KeySet; +import com.google.spanner.v1.Mutation; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.time.format.ResolverStyle; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; +import java.util.function.BiFunction; +import java.util.stream.Collectors; + +@InternalApi +public final class KeyRecipe { + + // kInfinity is "\xff" - the largest single byte, used as a sentinel for ranges + private static final ByteString K_INFINITY = ByteString.copyFrom(new byte[] {(byte) 0xFF}); + + private enum Kind { + TAG, + VALUE, + INVALID + } + + private enum KeyType { + FULL_KEY, + PREFIX, + PREFIX_SUCCESSOR, + INDEX_KEY + } + + private enum EncodeState { + OK, + FAILED, + END_OF_KEYS + } + + private static final class Part { + private final Kind kind; + private final int tag; // if kind == TAG + private final com.google.spanner.v1.Type type; // if kind == VALUE + private final com.google.spanner.v1.KeyRecipe.Part.Order order; // if kind == VALUE + private final com.google.spanner.v1.KeyRecipe.Part.NullOrder nullOrder; // if kind == VALUE + private final String identifier; // if kind == VALUE + private final List structIdentifiers; // if kind == VALUE + private final Value constantValue; // if kind == VALUE and value is set + private final boolean random; // if kind == VALUE and random: true + + private Value constantValue() { + return constantValue; + } + + private boolean hasConstantValue() { + return constantValue != null; + } + + private Part( + Kind kind, + int tag, + com.google.spanner.v1.Type type, + com.google.spanner.v1.KeyRecipe.Part.Order order, + com.google.spanner.v1.KeyRecipe.Part.NullOrder nullOrder, + String identifier, + List structIdentifiers, + Value constantValue, + boolean random) { + this.kind = kind; + this.tag = tag; + this.type = type; + this.order = order; + this.nullOrder = nullOrder; + this.identifier = identifier; + this.structIdentifiers = structIdentifiers; + this.constantValue = constantValue; + this.random = random; + } + + private ResolvedValue resolveValue(BiFunction valueFinder, int index) { + if (hasConstantValue()) { + return ResolvedValue.ofValue(constantValue()); + } + Value value = valueFinder.apply(index, identifier == null ? "" : identifier); + if (value == null) { + return ResolvedValue.missing(); + } + if (structIdentifiers.isEmpty()) { + return ResolvedValue.ofValue(value); + } + Value current = value; + // structIdentifiers is a path of list indices into nested STRUCT values. + // STRUCT values are represented as ListValue in field order. + for (int structIndex : structIdentifiers) { + if (current.getKindCase() != Value.KindCase.LIST_VALUE + || structIndex < 0 + || structIndex >= current.getListValue().getValuesCount()) { + return ResolvedValue.failed(); + } + current = current.getListValue().getValues(structIndex); + } + return ResolvedValue.ofValue(current); + } + + private boolean shouldConsumeValueIndex() { + return !hasConstantValue() && !random; + } + + static Part fromProto(com.google.spanner.v1.KeyRecipe.Part partProto) { + if (partProto.getTag() != 0) { + if (partProto.getTag() < 0) { + return new Part(Kind.INVALID, 0, null, null, null, null, null, null, false); + } + return new Part(Kind.TAG, partProto.getTag(), null, null, null, null, null, null, false); + } + if (!partProto.hasType()) { + return new Part(Kind.INVALID, 0, null, null, null, null, null, null, false); + } + if (partProto.getOrder() != com.google.spanner.v1.KeyRecipe.Part.Order.ASCENDING + && partProto.getOrder() != com.google.spanner.v1.KeyRecipe.Part.Order.DESCENDING) { + return new Part(Kind.INVALID, 0, null, null, null, null, null, null, false); + } + if (partProto.getNullOrder() != com.google.spanner.v1.KeyRecipe.Part.NullOrder.NULLS_FIRST + && partProto.getNullOrder() != com.google.spanner.v1.KeyRecipe.Part.NullOrder.NULLS_LAST + && partProto.getNullOrder() != com.google.spanner.v1.KeyRecipe.Part.NullOrder.NOT_NULL) { + return new Part(Kind.INVALID, 0, null, null, null, null, null, null, false); + } + if (partProto.hasRandom() + && partProto.getType().getCode() != com.google.spanner.v1.TypeCode.INT64) { + return new Part(Kind.INVALID, 0, null, null, null, null, null, null, false); + } + + String identifier = partProto.hasIdentifier() ? partProto.getIdentifier() : null; + List structIdentifiers = new ArrayList<>(partProto.getStructIdentifiersList()); + + Value constantValue = partProto.hasValue() ? partProto.getValue() : null; + + return new Part( + Kind.VALUE, + 0, + partProto.getType(), + partProto.getOrder(), + partProto.getNullOrder(), + identifier, + structIdentifiers, + constantValue, + partProto.hasRandom()); + } + } + + private static void encodeRandomValuePart(Part part, UnsynchronizedByteArrayOutputStream out) { + long value = ThreadLocalRandom.current().nextLong(0, Long.MAX_VALUE); + boolean ascending = part.order == com.google.spanner.v1.KeyRecipe.Part.Order.ASCENDING; + if (ascending) { + SsFormat.appendInt64Increasing(out, value); + } else { + SsFormat.appendInt64Decreasing(out, value); + } + } + + private static final class ResolvedValue { + private final Value value; + private final boolean found; + private final boolean failed; + + private ResolvedValue(Value value, boolean found, boolean failed) { + this.value = value; + this.found = found; + this.failed = failed; + } + + private static ResolvedValue ofValue(Value value) { + return new ResolvedValue(value, true, false); + } + + private static ResolvedValue missing() { + return new ResolvedValue(null, false, false); + } + + private static ResolvedValue failed() { + return new ResolvedValue(null, false, true); + } + } + + private final List parts; + private final boolean isIndex; + + private KeyRecipe(List parts, boolean isIndex) { + this.parts = parts; + this.isIndex = isIndex; + } + + public static KeyRecipe create(com.google.spanner.v1.KeyRecipe in) { + if (in.getPartCount() == 0) { + throw new IllegalArgumentException("KeyRecipe must have at least one part."); + } + boolean isIndex = in.hasIndexName(); + List partsList = + in.getPartList().stream().map(Part::fromProto).collect(Collectors.toList()); + if (partsList.get(0).kind != Kind.TAG) { + throw new IllegalArgumentException("KeyRecipe must start with a tag."); + } + return new KeyRecipe(partsList, isIndex); + } + + private static void encodeNull(Part part, UnsynchronizedByteArrayOutputStream out) { + switch (part.nullOrder) { + case NULLS_FIRST: + SsFormat.appendNullOrderedFirst(out); + break; + case NULLS_LAST: + SsFormat.appendNullOrderedLast(out); + break; + case NOT_NULL: + throw new IllegalArgumentException("Key part cannot be NULL"); + default: + throw new IllegalArgumentException("Unknown null order: " + part.nullOrder); + } + } + + private static void encodeNotNull(Part part, UnsynchronizedByteArrayOutputStream out) { + switch (part.nullOrder) { + case NULLS_FIRST: + SsFormat.appendNotNullMarkerNullOrderedFirst(out); + break; + case NULLS_LAST: + SsFormat.appendNotNullMarkerNullOrderedLast(out); + break; + case NOT_NULL: + // No marker needed for NOT_NULL + break; + default: + throw new IllegalArgumentException("Unknown null order: " + part.nullOrder); + } + } + + private static void encodeSingleValuePart( + Part part, Value value, UnsynchronizedByteArrayOutputStream out) { + if (value.getKindCase() == Value.KindCase.NULL_VALUE) { + encodeNull(part, out); + return; + } + + // Validate type compatibility BEFORE encoding anything + validateValueType(part, value); + + // Now safe to encode the NOT_NULL marker + encodeNotNull(part, out); + + boolean isAscending = (part.order == com.google.spanner.v1.KeyRecipe.Part.Order.ASCENDING); + + switch (part.type.getCode()) { + case BOOL: + if (isAscending) { + SsFormat.appendBoolIncreasing(out, value.getBoolValue()); + } else { + SsFormat.appendBoolDecreasing(out, value.getBoolValue()); + } + break; + case INT64: + long intVal = Long.parseLong(value.getStringValue()); + if (isAscending) { + SsFormat.appendInt64Increasing(out, intVal); + } else { + SsFormat.appendInt64Decreasing(out, intVal); + } + break; + case FLOAT64: + double dblVal; + if (value.getKindCase() == Value.KindCase.STRING_VALUE) { + // Handle special float values like Infinity, -Infinity, NaN + String strVal = value.getStringValue(); + if ("Infinity".equals(strVal)) { + dblVal = Double.POSITIVE_INFINITY; + } else if ("-Infinity".equals(strVal)) { + dblVal = Double.NEGATIVE_INFINITY; + } else if ("NaN".equals(strVal)) { + dblVal = Double.NaN; + } else { + throw new IllegalArgumentException("Invalid FLOAT64 string: " + strVal); + } + } else { + dblVal = value.getNumberValue(); + } + if (isAscending) { + SsFormat.appendDoubleIncreasing(out, dblVal); + } else { + SsFormat.appendDoubleDecreasing(out, dblVal); + } + break; + case STRING: + if (isAscending) { + SsFormat.appendStringIncreasing(out, value.getStringValue()); + } else { + SsFormat.appendStringDecreasing(out, value.getStringValue()); + } + break; + case BYTES: + byte[] bytesDecoded = Base64.getDecoder().decode(value.getStringValue()); + if (isAscending) { + SsFormat.appendBytesIncreasing(out, bytesDecoded); + } else { + SsFormat.appendBytesDecreasing(out, bytesDecoded); + } + break; + case TIMESTAMP: + String tsStr = value.getStringValue(); + long[] parsed = parseTimestamp(tsStr); + byte[] encoded = SsFormat.encodeTimestamp(parsed[0], (int) parsed[1]); + if (isAscending) { + SsFormat.appendBytesIncreasing(out, encoded); + } else { + SsFormat.appendBytesDecreasing(out, encoded); + } + break; + case DATE: + String dateStr = value.getStringValue(); + int daysSinceEpoch = parseDate(dateStr); + if (isAscending) { + SsFormat.appendInt64Increasing(out, daysSinceEpoch); + } else { + SsFormat.appendInt64Decreasing(out, daysSinceEpoch); + } + break; + case UUID: + String uuidStr = value.getStringValue(); + long[] parsedUuid = parseUuid(uuidStr); + byte[] encodedUuid = SsFormat.encodeUuid(parsedUuid[0], parsedUuid[1]); + if (isAscending) { + SsFormat.appendBytesIncreasing(out, encodedUuid); + } else { + SsFormat.appendBytesDecreasing(out, encodedUuid); + } + break; + case ENUM: + // ENUM values are sent as string representation of the enum number + long enumVal = Long.parseLong(value.getStringValue()); + if (isAscending) { + SsFormat.appendInt64Increasing(out, enumVal); + } else { + SsFormat.appendInt64Decreasing(out, enumVal); + } + break; + case NUMERIC: + case TYPE_CODE_UNSPECIFIED: + case ARRAY: + case STRUCT: + case PROTO: + case UNRECOGNIZED: + default: + throw new IllegalArgumentException( + "Unsupported type code for ssformat encoding: " + part.type.getCode()); + } + } + + private static void validateValueType(Part part, Value value) { + switch (part.type.getCode()) { + case BOOL: + if (value.getKindCase() != Value.KindCase.BOOL_VALUE) { + throw new IllegalArgumentException("Type mismatch for BOOL."); + } + break; + case INT64: + if (value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for INT64, expecting decimal string."); + } + // Also validate it's a valid integer + try { + Long.parseLong(value.getStringValue()); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Invalid INT64 string: " + value.getStringValue(), e); + } + break; + case FLOAT64: + if (value.getKindCase() != Value.KindCase.NUMBER_VALUE + && value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for FLOAT64."); + } + if (value.getKindCase() == Value.KindCase.STRING_VALUE) { + String strVal = value.getStringValue(); + if (!"Infinity".equals(strVal) && !"-Infinity".equals(strVal) && !"NaN".equals(strVal)) { + throw new IllegalArgumentException("Invalid FLOAT64 string: " + strVal); + } + } + break; + case STRING: + if (value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for STRING."); + } + break; + case BYTES: + if (value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for BYTES, expecting base64 string."); + } + // Validate base64 + try { + Base64.getDecoder().decode(value.getStringValue()); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Invalid base64 for BYTES type.", e); + } + break; + case TIMESTAMP: + if (value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for TIMESTAMP."); + } + // Validate timestamp format: must end with Z (UTC) and be RFC3339 + validateTimestamp(value.getStringValue()); + break; + case DATE: + if (value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for DATE."); + } + // Validate date format: YYYY-MM-DD, exactly 10 chars + validateDate(value.getStringValue()); + break; + case UUID: + if (value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for UUID."); + } + // Validate UUID format + validateUuid(value.getStringValue()); + break; + case ENUM: + if (value.getKindCase() != Value.KindCase.STRING_VALUE) { + throw new IllegalArgumentException("Type mismatch for ENUM, expecting string."); + } + // Validate it's a valid integer string + try { + Long.parseLong(value.getStringValue()); + } catch (NumberFormatException e) { + throw new IllegalArgumentException( + "Invalid ENUM string (expecting number): " + value.getStringValue(), e); + } + break; + case NUMERIC: + case TYPE_CODE_UNSPECIFIED: + case ARRAY: + case STRUCT: + case PROTO: + case UNRECOGNIZED: + default: + throw new IllegalArgumentException( + "Unsupported type code for ssformat encoding: " + part.type.getCode()); + } + } + + private static void validateTimestamp(String ts) { + parseTimestamp(ts); + } + + private static long[] parseTimestamp(String ts) { + if (!ts.endsWith("Z")) { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts); + } + String withoutZ = ts.substring(0, ts.length() - 1); + int tIndex = withoutZ.indexOf('T'); + if (tIndex <= 0 || tIndex == withoutZ.length() - 1) { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts); + } + + String datePart = withoutZ.substring(0, tIndex); + String timePart = withoutZ.substring(tIndex + 1); + LocalDate date; + try { + date = LocalDate.parse(datePart, DATE_FORMATTER); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts, e); + } + + int nanos = 0; + String timeMain = timePart; + int dotIndex = timePart.indexOf('.'); + if (dotIndex >= 0) { + timeMain = timePart.substring(0, dotIndex); + String fracStr = timePart.substring(dotIndex + 1); + if (fracStr.isEmpty()) { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts); + } + for (int i = 0; i < fracStr.length(); i++) { + char c = fracStr.charAt(i); + if (c < '0' || c > '9') { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts); + } + } + while (fracStr.length() < 9) { + fracStr = fracStr + "0"; + } + if (fracStr.length() > 9) { + fracStr = fracStr.substring(0, 9); + } + nanos = Integer.parseInt(fracStr); + } + + String[] timeParts = timeMain.split(":"); + if (timeParts.length != 3) { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts); + } + int hour; + int minute; + int second; + try { + hour = Integer.parseInt(timeParts[0]); + minute = Integer.parseInt(timeParts[1]); + second = Integer.parseInt(timeParts[2]); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts, e); + } + if (hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59) { + throw new IllegalArgumentException("Invalid TIMESTAMP string: " + ts); + } + + long seconds = date.toEpochDay() * 86400L + hour * 3600L + minute * 60L + second; + return new long[] {seconds, nanos}; + } + + private static final DateTimeFormatter DATE_FORMATTER = + DateTimeFormatter.ofPattern("uuuu-MM-dd").withResolverStyle(ResolverStyle.STRICT); + + private static void validateDate(String dateStr) { + parseDate(dateStr); + } + + private static int parseDate(String dateStr) { + try { + LocalDate date = LocalDate.parse(dateStr, DATE_FORMATTER); + return (int) date.toEpochDay(); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("Invalid DATE string: " + dateStr, e); + } + } + + private static void validateUuid(String uuid) { + parseUuid(uuid); + // parseUuid throws if invalid + } + + private static long[] parseUuid(String uuid) { + String originalUuid = uuid; + + // Handle optional braces + if (uuid.startsWith("{")) { + if (!uuid.endsWith("}")) { + throw new IllegalArgumentException("Invalid UUID string: " + originalUuid); + } + uuid = uuid.substring(1, uuid.length() - 1); + } + + // Minimum 36 characters required (standard UUID format: 8-4-4-4-12) + if (uuid.length() < 36) { + throw new IllegalArgumentException("Invalid UUID string: " + originalUuid); + } + + // Check for leading hyphen + if (uuid.startsWith("-")) { + throw new IllegalArgumentException("Invalid UUID string: " + originalUuid); + } + + // Parse 32 hex digits (ignoring hyphens in between) + long high = 0; + long low = 0; + int hexCount = 0; + + for (int i = 0; i < uuid.length(); i++) { + char c = uuid.charAt(i); + if (c == '-') { + continue; // Skip hyphens + } + int digit = hexDigit(c); + if (digit < 0) { + throw new IllegalArgumentException("Invalid UUID string: " + originalUuid); + } + if (hexCount < 16) { + high = (high << 4) | digit; + } else { + low = (low << 4) | digit; + } + hexCount++; + } + + if (hexCount != 32) { + throw new IllegalArgumentException("Invalid UUID string: " + originalUuid); + } + + // After parsing, verify there are no trailing characters + // (uuid must be exactly consumed) + if (uuid.length() > 36) { + throw new IllegalArgumentException("Invalid UUID string: " + originalUuid); + } + + return new long[] {high, low}; + } + + private static int hexDigit(char c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'a' && c <= 'f') return 10 + (c - 'a'); + if (c >= 'A' && c <= 'F') return 10 + (c - 'A'); + return -1; + } + + private TargetRange encodeKeyInternal( + BiFunction valueFinder, KeyType keyType) { + UnsynchronizedByteArrayOutputStream ssKey = new UnsynchronizedByteArrayOutputStream(); + int valueIdx = 0; + EncodeState state = EncodeState.OK; + int p = 0; + for (; p < parts.size(); ++p) { + final Part part = parts.get(p); + if (part.kind == Kind.TAG) { + SsFormat.appendCompositeTag(ssKey, part.tag); + } else if (part.kind == Kind.VALUE) { + if (part.random) { + encodeRandomValuePart(part, ssKey); + continue; + } + + int currentIndex = valueIdx; + if (part.shouldConsumeValueIndex()) { + valueIdx++; + } + ResolvedValue resolved = part.resolveValue(valueFinder, currentIndex); + if (resolved.failed) { + state = EncodeState.FAILED; + break; + } + if (!resolved.found) { + state = part.shouldConsumeValueIndex() ? EncodeState.END_OF_KEYS : EncodeState.FAILED; + break; + } + try { + encodeSingleValuePart(part, resolved.value, ssKey); + } catch (IllegalArgumentException e) { + state = EncodeState.FAILED; + break; + } + } else { + state = EncodeState.FAILED; + break; + } + } + + ByteString start = ByteString.copyFrom(ssKey.toByteArray()); + ByteString limit = ByteString.EMPTY; + boolean approximate = false; + + if (p == parts.size() || (keyType != KeyType.FULL_KEY && state == EncodeState.END_OF_KEYS)) { + if (keyType == KeyType.PREFIX_SUCCESSOR) { + start = SsFormat.makePrefixSuccessor(start); + } else if (keyType == KeyType.INDEX_KEY) { + limit = SsFormat.makePrefixSuccessor(start); + } + } else { + approximate = true; + limit = SsFormat.makePrefixSuccessor(start); + } + return new TargetRange(start, limit, approximate); + } + + public TargetRange keyToTargetRange(ListValue in) { + return encodeKeyInternal( + (index, identifier) -> { + if (index < 0 || index >= in.getValuesCount()) { + return null; + } + return in.getValues(index); + }, + isIndex ? KeyType.INDEX_KEY : KeyType.FULL_KEY); + } + + public TargetRange keyRangeToTargetRange(KeyRange in) { + TargetRange start; + switch (in.getStartKeyTypeCase()) { + case START_CLOSED: + start = + encodeKeyInternal( + (index, id) -> { + if (index < 0 || index >= in.getStartClosed().getValuesCount()) { + return null; + } + return in.getStartClosed().getValues(index); + }, + KeyType.PREFIX); + break; + case START_OPEN: + start = + encodeKeyInternal( + (index, id) -> { + if (index < 0 || index >= in.getStartOpen().getValuesCount()) { + return null; + } + return in.getStartOpen().getValues(index); + }, + KeyType.PREFIX_SUCCESSOR); + break; + default: + start = encodeKeyInternal((index, id) -> null, KeyType.PREFIX); + start.approximate = true; + break; + } + + TargetRange limit; + switch (in.getEndKeyTypeCase()) { + case END_CLOSED: + limit = + encodeKeyInternal( + (index, id) -> { + if (index < 0 || index >= in.getEndClosed().getValuesCount()) { + return null; + } + return in.getEndClosed().getValues(index); + }, + KeyType.PREFIX_SUCCESSOR); + break; + case END_OPEN: + limit = + encodeKeyInternal( + (index, id) -> { + if (index < 0 || index >= in.getEndOpen().getValuesCount()) { + return null; + } + return in.getEndOpen().getValues(index); + }, + KeyType.PREFIX); + break; + default: + limit = encodeKeyInternal((index, id) -> null, KeyType.PREFIX_SUCCESSOR); + limit.approximate = true; + break; + } + ByteString limitKey = limit.approximate ? limit.limit : limit.start; + return new TargetRange(start.start, limitKey, start.approximate || limit.approximate); + } + + public TargetRange keySetToTargetRange(KeySet in) { + if (in.getAll()) { + return keyRangeToTargetRange( + KeyRange.newBuilder() + .setStartClosed(ListValue.getDefaultInstance()) + .setEndClosed(ListValue.getDefaultInstance()) + .build()); + } + if (in.getRangesCount() == 0) { + if (in.getKeysCount() == 0) { + return new TargetRange(ByteString.EMPTY, K_INFINITY, true); + } else if (in.getKeysCount() == 1) { + return keyToTargetRange(in.getKeys(0)); + } + } + + TargetRange target = new TargetRange(K_INFINITY, ByteString.EMPTY, false); + for (ListValue key : in.getKeysList()) { + target.mergeFrom(keyToTargetRange(key)); + } + for (KeyRange range : in.getRangesList()) { + target.mergeFrom(keyRangeToTargetRange(range)); + } + return target; + } + + public TargetRange queryParamsToTargetRange(Struct in) { + // toLowerCase(Locale.ROOT) is safe for query parameter names, even for non-ASCII + // characters such as the Turkish upper-case İ (U+0130). Query parameter names cannot + // be quoted in Spanner SQL (the @paramName syntax imposes an unquoted identifier + // grammar), so both the identifier sent by the server in the KeyRecipe and the + // parameter name bound by the user must follow the same syntax rules. Applying the + // same Locale.ROOT case-folding to both sides guarantees a consistent match. + // If the server were to normalize identifiers differently, the only consequence is + // a routing miss and graceful fallback to the default endpoint — not a query failure. + // + // Sort field names before inserting into the map so that when two param names + // collide after case-folding (e.g. "Id" vs "ID") the winner is deterministic, + // matching the Go implementation. + List fieldNames = new ArrayList<>(in.getFieldsMap().keySet()); + Collections.sort(fieldNames); + final Map lowercaseFields = new HashMap<>(fieldNames.size()); + for (String fieldName : fieldNames) { + lowercaseFields.put(fieldName.toLowerCase(Locale.ROOT), in.getFieldsMap().get(fieldName)); + } + return encodeKeyInternal( + (index, identifier) -> lowercaseFields.get(identifier.toLowerCase(Locale.ROOT)), + KeyType.FULL_KEY); + } + + public TargetRange mutationToTargetRange(Mutation in) { + TargetRange target = new TargetRange(K_INFINITY, ByteString.EMPTY, false); + + switch (in.getOperationCase()) { + case INSERT: + case UPDATE: + case INSERT_OR_UPDATE: + case REPLACE: + final Mutation.Write write = getWrite(in); + for (ListValue values : write.getValuesList()) { + target.mergeFrom( + encodeKeyInternal( + (index, id) -> { + int colIndex = write.getColumnsList().indexOf(id); + if (colIndex == -1 || colIndex >= values.getValuesCount()) { + return null; + } + return values.getValues(colIndex); + }, + KeyType.FULL_KEY)); + } + break; + case DELETE: + target.mergeFrom(keySetToTargetRange(in.getDelete().getKeySet())); + break; + case SEND: + target.mergeFrom(keyToTargetRange(in.getSend().getKey())); + break; + case ACK: + target.mergeFrom(keyToTargetRange(in.getAck().getKey())); + break; + default: + break; + } + + if (target.start.equals(K_INFINITY)) { + target = new TargetRange(ByteString.EMPTY, K_INFINITY, true); + } + return target; + } + + private Mutation.Write getWrite(Mutation in) { + switch (in.getOperationCase()) { + case INSERT: + return in.getInsert(); + case UPDATE: + return in.getUpdate(); + case INSERT_OR_UPDATE: + return in.getInsertOrUpdate(); + case REPLACE: + return in.getReplace(); + default: + throw new IllegalArgumentException("Mutation is not a write operation"); + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRecipeCache.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRecipeCache.java new file mode 100644 index 00000000000..1e0857108b2 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/KeyRecipeCache.java @@ -0,0 +1,377 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.collect.ImmutableList; +import com.google.common.hash.Hasher; +import com.google.common.hash.Hashing; +import com.google.protobuf.ByteString; +import com.google.protobuf.Value; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.Mutation; +import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.RecipeList; +import com.google.spanner.v1.RoutingHint; +import com.google.spanner.v1.Type; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicLong; +import java.util.logging.Logger; + +@InternalApi +public final class KeyRecipeCache { + // Best-effort routing cache; compute calls are intentionally unsynchronized and may race with + // updates. Requests still succeed without routing hints when data is stale. + private static final Logger logger = Logger.getLogger(KeyRecipeCache.class.getName()); + private static final long DEFAULT_SCHEMA_RECIPE_CACHE_SIZE = 1000; + private static final long DEFAULT_PREPARED_QUERY_CACHE_SIZE = 1000; + private static final long DEFAULT_PREPARED_READ_CACHE_SIZE = 1000; + + @VisibleForTesting + static long fingerprint(ReadRequest req) { + Hasher hasher = Hashing.goodFastHash(64).newHasher(); + hasher.putString(req.getTable(), StandardCharsets.UTF_8); + hasher.putString(req.getIndex(), StandardCharsets.UTF_8); + hasher.putInt(req.getColumnsCount()); + for (String column : req.getColumnsList()) { + hasher.putString(column, StandardCharsets.UTF_8); + } + return hasher.hash().asLong(); + } + + @VisibleForTesting + static long fingerprint(ExecuteSqlRequest req) { + Hasher hasher = Hashing.goodFastHash(64).newHasher(); + hasher.putString(req.getSql(), StandardCharsets.UTF_8); + + List paramNames = new ArrayList<>(req.getParams().getFieldsMap().keySet()); + paramNames.sort(Comparator.naturalOrder()); + for (String name : paramNames) { + hasher.putString(name, StandardCharsets.UTF_8); + if (req.getParamTypesMap().containsKey(name)) { + hasher.putBytes(req.getParamTypesMap().get(name).toByteArray()); + } else { + Value value = req.getParams().getFieldsMap().get(name); + hasher.putInt(value.getKindCase().getNumber()); + } + } + + hasher.putBytes(req.getQueryOptions().toByteArray()); + return hasher.hash().asLong(); + } + + private final AtomicLong nextOperationUid = new AtomicLong(1); + private volatile ByteString schemaGeneration = ByteString.EMPTY; + + private final Cache schemaRecipes = + CacheBuilder.newBuilder().maximumSize(DEFAULT_SCHEMA_RECIPE_CACHE_SIZE).build(); + private final Cache queryRecipes = + CacheBuilder.newBuilder().maximumSize(DEFAULT_PREPARED_QUERY_CACHE_SIZE).build(); + private final Cache preparedReads = + CacheBuilder.newBuilder().maximumSize(DEFAULT_PREPARED_READ_CACHE_SIZE).build(); + private final Cache preparedQueries = + CacheBuilder.newBuilder().maximumSize(DEFAULT_PREPARED_QUERY_CACHE_SIZE).build(); + + public KeyRecipeCache() {} + + private static V getIfPresent(Cache cache, K key) { + return cache.getIfPresent(key); + } + + @VisibleForTesting + static int getPreparedReadCacheSize(KeyRecipeCache cache) { + return (int) cache.preparedReads.size(); + } + + @VisibleForTesting + static int getPreparedQueryCacheSize(KeyRecipeCache cache) { + return (int) cache.preparedQueries.size(); + } + + /** + * Applies recipes from a server CacheUpdate. + * + *

              This is expected to be called only when responses include new recipes, not on every request. + * It is synchronized to atomically update schema generation and cache contents. + */ + public synchronized void addRecipes(RecipeList recipeList) { + int cmp = + ByteString.unsignedLexicographicalComparator() + .compare(recipeList.getSchemaGeneration(), schemaGeneration); + if (cmp < 0) { + return; + } + if (cmp > 0) { + schemaGeneration = recipeList.getSchemaGeneration(); + schemaRecipes.invalidateAll(); + queryRecipes.invalidateAll(); + } + + int failedCount = 0; + IllegalArgumentException failureExample = null; + for (com.google.spanner.v1.KeyRecipe recipeProto : recipeList.getRecipeList()) { + try { + KeyRecipe recipe = KeyRecipe.create(recipeProto); + if (recipeProto.hasTableName()) { + schemaRecipes.put(recipeProto.getTableName(), recipe); + } else if (recipeProto.hasIndexName()) { + schemaRecipes.put(recipeProto.getIndexName(), recipe); + } else if (recipeProto.hasOperationUid()) { + queryRecipes.put(recipeProto.getOperationUid(), recipe); + } + } catch (IllegalArgumentException e) { + failedCount++; + if (failureExample == null) { + failureExample = e; + } + } + } + if (failedCount > 0) { + logger.warning( + "Failed to add " + failedCount + " recipes, example: " + failureExample.getMessage()); + } + } + + public void computeKeys(ReadRequest.Builder reqBuilder) { + long reqFp = fingerprint(reqBuilder.buildPartial()); + + RoutingHint.Builder hintBuilder = reqBuilder.getRoutingHintBuilder(); + applySchemaGeneration(hintBuilder); + + PreparedRead preparedRead = getIfPresent(preparedReads, reqFp); + if (preparedRead == null) { + preparedRead = PreparedRead.fromRequest(reqBuilder.buildPartial()); + preparedRead.operationUid = nextOperationUid.getAndIncrement(); + preparedReads.put(reqFp, preparedRead); + } else if (!preparedRead.matches(reqBuilder.buildPartial())) { + logger.fine("Fingerprint collision for ReadRequest: " + reqFp); + return; + } + + hintBuilder.setOperationUid(preparedRead.operationUid); + String recipeKey = reqBuilder.getTable(); + if (!reqBuilder.getIndex().isEmpty()) { + recipeKey = reqBuilder.getIndex(); + } + + KeyRecipe recipe = getIfPresent(schemaRecipes, recipeKey); + if (recipe == null) { + logger.fine("Schema recipe not found for: " + recipeKey); + return; + } + + try { + TargetRange target = recipe.keySetToTargetRange(reqBuilder.getKeySet()); + applyTargetRange(hintBuilder, target); + } catch (IllegalArgumentException e) { + logger.fine("Failed key encoding: " + e.getMessage()); + } + } + + public void computeKeys(ExecuteSqlRequest.Builder reqBuilder) { + long reqFp = fingerprint(reqBuilder.buildPartial()); + + RoutingHint.Builder hintBuilder = reqBuilder.getRoutingHintBuilder(); + applySchemaGeneration(hintBuilder); + + PreparedQuery preparedQuery = getIfPresent(preparedQueries, reqFp); + if (preparedQuery == null) { + preparedQuery = PreparedQuery.fromRequest(reqBuilder.buildPartial()); + preparedQuery.operationUid = nextOperationUid.getAndIncrement(); + preparedQueries.put(reqFp, preparedQuery); + } else if (!preparedQuery.matches(reqBuilder.buildPartial())) { + logger.fine("Fingerprint collision for ExecuteSqlRequest: " + reqFp); + return; + } + + hintBuilder.setOperationUid(preparedQuery.operationUid); + KeyRecipe recipe = getIfPresent(queryRecipes, preparedQuery.operationUid); + if (recipe == null) { + return; + } + + try { + TargetRange target = recipe.queryParamsToTargetRange(reqBuilder.getParams()); + applyTargetRange(hintBuilder, target); + } catch (IllegalArgumentException e) { + logger.fine("Failed query param encoding: " + e.getMessage()); + } + } + + void applySchemaGeneration(RoutingHint.Builder hintBuilder) { + if (!schemaGeneration.isEmpty()) { + hintBuilder.setSchemaGeneration(schemaGeneration); + } + } + + void applyTargetRange(RoutingHint.Builder hintBuilder, TargetRange target) { + hintBuilder.setKey(target.start); + if (!target.limit.isEmpty()) { + hintBuilder.setLimitKey(target.limit); + } + } + + public TargetRange mutationToTargetRange(Mutation mutation) { + if (mutation == null) { + return null; + } + String tableName = tableNameFromMutation(mutation); + if (tableName == null || tableName.isEmpty()) { + return null; + } + + KeyRecipe recipe = getIfPresent(schemaRecipes, tableName); + if (recipe == null) { + logger.fine("Schema recipe not found for mutation table: " + tableName); + return null; + } + + try { + return recipe.mutationToTargetRange(mutation); + } catch (IllegalArgumentException e) { + logger.fine("Failed mutation key encoding: " + e.getMessage()); + return null; + } + } + + private static String tableNameFromMutation(Mutation mutation) { + switch (mutation.getOperationCase()) { + case INSERT: + return mutation.getInsert().getTable(); + case UPDATE: + return mutation.getUpdate().getTable(); + case INSERT_OR_UPDATE: + return mutation.getInsertOrUpdate().getTable(); + case REPLACE: + return mutation.getReplace().getTable(); + case DELETE: + return mutation.getDelete().getTable(); + default: + return null; + } + } + + public synchronized void clear() { + schemaGeneration = ByteString.EMPTY; + preparedReads.invalidateAll(); + preparedQueries.invalidateAll(); + schemaRecipes.invalidateAll(); + queryRecipes.invalidateAll(); + } + + private static class PreparedRead { + final String table; + final ImmutableList columns; + long operationUid; // Not final, assigned after construction + + private PreparedRead(String table, List columns) { + this.table = table; + this.columns = ImmutableList.copyOf(columns); + } + + static PreparedRead fromRequest(ReadRequest req) { + return new PreparedRead(req.getTable(), req.getColumnsList()); + } + + boolean matches(ReadRequest req) { + if (!Objects.equals(table, req.getTable())) { + return false; + } + return columns.equals(req.getColumnsList()); + } + } + + private static final class PreparedQuery { + private final String sql; + private final ImmutableList params; + private final ExecuteSqlRequest.QueryOptions queryOptions; + private long operationUid; + + private PreparedQuery( + String sql, List params, ExecuteSqlRequest.QueryOptions queryOptions) { + this.sql = sql; + this.params = ImmutableList.copyOf(params); + this.queryOptions = queryOptions; + } + + private static PreparedQuery fromRequest(ExecuteSqlRequest req) { + List params = new ArrayList<>(); + for (Map.Entry entry : req.getParams().getFieldsMap().entrySet()) { + String name = entry.getKey(); + if (req.getParamTypesMap().containsKey(name)) { + params.add(Param.ofType(name, req.getParamTypesMap().get(name))); + } else { + params.add(Param.ofKind(name, entry.getValue().getKindCase())); + } + } + params.sort(Comparator.comparing(param -> param.name)); + return new PreparedQuery(req.getSql(), params, req.getQueryOptions()); + } + + private boolean matches(ExecuteSqlRequest req) { + if (!sql.equals(req.getSql())) { + return false; + } + if (params.size() != req.getParams().getFieldsCount()) { + return false; + } + for (Param param : params) { + Value value = req.getParams().getFieldsMap().get(param.name); + if (value == null) { + return false; + } + if (param.type != null) { + Type type = req.getParamTypesMap().get(param.name); + if (type == null || !type.equals(param.type)) { + return false; + } + } else if (param.kindCase != value.getKindCase()) { + return false; + } + } + return Objects.equals(queryOptions, req.getQueryOptions()); + } + } + + private static final class Param { + private final String name; + private final Type type; + private final Value.KindCase kindCase; + + private Param(String name, Type type, Value.KindCase kindCase) { + this.name = name; + this.type = type; + this.kindCase = kindCase; + } + + private static Param ofType(String name, Type type) { + return new Param(name, type, null); + } + + private static Param ofKind(String name, Value.KindCase kindCase) { + return new Param(name, null, kindCase); + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/RequestIdCreatorImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/RequestIdCreatorImpl.java new file mode 100644 index 00000000000..5904fa581fd --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/RequestIdCreatorImpl.java @@ -0,0 +1,43 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.cloud.spanner.XGoogSpannerRequestId; +import com.google.cloud.spanner.XGoogSpannerRequestId.RequestIdCreator; +import java.util.concurrent.atomic.AtomicLong; + +class RequestIdCreatorImpl implements RequestIdCreator { + private static final AtomicLong NEXT_CLIENT_ID = new AtomicLong(); + + private final long clientId = NEXT_CLIENT_ID.incrementAndGet(); + private final AtomicLong requestId = new AtomicLong(); + + @Override + public long getClientId() { + return this.clientId; + } + + @Override + public XGoogSpannerRequestId nextRequestId(long channelId) { + return XGoogSpannerRequestId.of(clientId, channelId, requestId.incrementAndGet(), 0); + } + + @Override + public void reset() { + requestId.set(0); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/RequestIdInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/RequestIdInterceptor.java new file mode 100644 index 00000000000..ea7204301e3 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/RequestIdInterceptor.java @@ -0,0 +1,67 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static com.google.cloud.spanner.XGoogSpannerRequestId.REQUEST_ID_CALL_OPTIONS_KEY; +import static com.google.cloud.spanner.XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY; + +import com.google.cloud.grpc.GcpManagedChannel; +import com.google.cloud.spanner.XGoogSpannerRequestId; +import io.grpc.CallOptions; +import io.grpc.Channel; +import io.grpc.ClientCall; +import io.grpc.ClientInterceptor; +import io.grpc.ForwardingClientCall; +import io.grpc.Metadata; +import io.grpc.Metadata.Key; +import io.grpc.MethodDescriptor; +import java.util.concurrent.atomic.AtomicLong; + +class RequestIdInterceptor implements ClientInterceptor { + static final CallOptions.Key ATTEMPT_KEY = CallOptions.Key.create("Attempt"); + private static final String RESPONSE_ENCODING_KEY_NAME = "x-response-encoding"; + private static final Key RESPONSE_ENCODING_KEY = + Key.of(RESPONSE_ENCODING_KEY_NAME, Metadata.ASCII_STRING_MARSHALLER); + + RequestIdInterceptor() {} + + @Override + public ClientCall interceptCall( + MethodDescriptor method, CallOptions callOptions, Channel next) { + return new ForwardingClientCall.SimpleForwardingClientCall( + next.newCall(method, callOptions)) { + @Override + public void start(Listener responseListener, Metadata headers) { + XGoogSpannerRequestId requestId = callOptions.getOption(REQUEST_ID_CALL_OPTIONS_KEY); + if (requestId != null) { + // If grpc-gcp has set the actual channel ID, use it to update the request ID. + // This provides the real channel ID used after channel selection, especially + // important when dynamic channel pooling is enabled. + Integer gcpChannelId = callOptions.getOption(GcpManagedChannel.CHANNEL_ID_KEY); + if (gcpChannelId != null) { + // Channel IDs from grpc-gcp are 0-based, add 1 to match request ID convention + // where 0 means unknown and >0 means a known channel. + requestId.setChannelId(gcpChannelId + 1); + } + requestId.incrementAttempt(); + headers.put(REQUEST_ID_HEADER_KEY, requestId.getHeaderValue()); + } + super.start(responseListener, headers); + } + }; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerErrorInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerErrorInterceptor.java index 65db088ffac..9c3b2af2b06 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerErrorInterceptor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerErrorInterceptor.java @@ -16,6 +16,9 @@ package com.google.cloud.spanner.spi.v1; +import com.google.cloud.spanner.IsRetryableInternalError; +import com.google.cloud.spanner.XGoogSpannerRequestId; +import com.google.common.base.Strings; import com.google.rpc.BadRequest; import com.google.rpc.Help; import com.google.rpc.LocalizedMessage; @@ -32,7 +35,9 @@ import io.grpc.Metadata; import io.grpc.MethodDescriptor; import io.grpc.Status; +import io.grpc.Status.Code; import io.grpc.protobuf.ProtoUtils; +import java.util.Objects; import java.util.logging.Level; import java.util.logging.Logger; @@ -68,7 +73,28 @@ public void start(Listener responseListener, Metadata headers) { new SimpleForwardingClientCallListener(responseListener) { @Override public void onClose(Status status, Metadata trailers) { + // Return quickly if there is no error. + if (status.isOk()) { + super.onClose(status, trailers); + return; + } try { + if (headers.containsKey(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY)) { + String requestId = headers.get(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY); + if (!Strings.isNullOrEmpty(requestId)) { + if (!trailers.containsKey(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY)) { + trailers.put( + XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY, + Objects.requireNonNull( + headers.get(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY))); + } + } + } + // Translate INTERNAL errors that should be retried to a retryable error code. + if (IsRetryableInternalError.INSTANCE.isRetryableInternalError(status)) { + status = + Status.fromCode(Code.UNAVAILABLE).withDescription(status.getDescription()); + } if (trailers.containsKey(LOCALIZED_MESSAGE_KEY)) { status = Status.fromCodeValue(status.getCode().value()) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java index c3c05b8af15..e8d6c3ebddb 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java @@ -56,14 +56,15 @@ public static SpannerInterceptorProvider createDefault(OpenTelemetry openTelemet })); } + @ObsoleteApi("DirectPathEnabledSupplier is not used") public static SpannerInterceptorProvider createDefault( OpenTelemetry openTelemetry, Supplier directPathEnabledSupplier) { List defaultInterceptorList = new ArrayList<>(); defaultInterceptorList.add(new SpannerErrorInterceptor()); defaultInterceptorList.add( new LoggingInterceptor(Logger.getLogger(GapicSpannerRpc.class.getName()), Level.FINER)); - defaultInterceptorList.add( - new HeaderInterceptor(new SpannerRpcMetrics(openTelemetry), directPathEnabledSupplier)); + defaultInterceptorList.add(new HeaderInterceptor(new SpannerRpcMetrics(openTelemetry))); + defaultInterceptorList.add(new RequestIdInterceptor()); return new SpannerInterceptorProvider(ImmutableList.copyOf(defaultInterceptorList)); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java index 2ebc4925788..e9c74847275 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java @@ -38,6 +38,8 @@ class SpannerMetadataProvider { private final String resourceHeaderKey; private static final String ROUTE_TO_LEADER_HEADER_KEY = "x-goog-spanner-route-to-leader"; private static final String END_TO_END_TRACING_HEADER_KEY = "x-goog-spanner-end-to-end-tracing"; + private static final String AFE_SERVER_TIMING_HEADER_KEY = + "x-goog-spanner-enable-afe-server-timing"; private static final Pattern[] RESOURCE_TOKEN_PATTERNS = { Pattern.compile("^(?projects/[^/]*/instances/[^/]*/databases/[^/]*)(.*)?"), Pattern.compile("^(?projects/[^/]*/instances/[^/]*)(.*)?") @@ -47,6 +49,8 @@ class SpannerMetadataProvider { ImmutableMap.of(ROUTE_TO_LEADER_HEADER_KEY, Collections.singletonList("true")); private static final Map> END_TO_END_TRACING_HEADER_MAP = ImmutableMap.of(END_TO_END_TRACING_HEADER_KEY, Collections.singletonList("true")); + private static final Map> AFE_SERVER_TIMING_HEADER_MAP = + ImmutableMap.of(AFE_SERVER_TIMING_HEADER_KEY, Collections.singletonList("true")); private SpannerMetadataProvider(Map headers, String resourceHeaderKey) { this.resourceHeaderKey = resourceHeaderKey; @@ -96,6 +100,10 @@ Map> newEndToEndTracingHeader() { return END_TO_END_TRACING_HEADER_MAP; } + Map> newAfeServerTimingHeader() { + return AFE_SERVER_TIMING_HEADER_MAP; + } + private Map, String> constructHeadersAsMetadata( Map headers) { ImmutableMap.Builder, String> headersAsMetadataBuilder = diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java index 9ad94204743..7fd50f41c2d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java @@ -27,6 +27,8 @@ import com.google.cloud.spanner.BackupId; import com.google.cloud.spanner.Restore; import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.XGoogSpannerRequestId; +import com.google.cloud.spanner.XGoogSpannerRequestId.RequestIdCreator; import com.google.cloud.spanner.admin.database.v1.stub.DatabaseAdminStub; import com.google.cloud.spanner.admin.database.v1.stub.DatabaseAdminStubSettings; import com.google.cloud.spanner.admin.instance.v1.stub.InstanceAdminStub; @@ -37,6 +39,7 @@ import com.google.iam.v1.Policy; import com.google.iam.v1.TestIamPermissionsResponse; import com.google.longrunning.Operation; +import com.google.protobuf.ByteString; import com.google.protobuf.Empty; import com.google.protobuf.FieldMask; import com.google.spanner.admin.database.v1.Backup; @@ -188,6 +191,13 @@ interface StreamingCall { void cancel(@Nullable String message); } + default RequestIdCreator getRequestIdCreator() { + throw new UnsupportedOperationException("Not implemented"); + } + + /** Clears any client-side affinity associated with the given transaction id. */ + default void clearTransactionAffinity(ByteString transactionId) {} + // Instance admin APIs. Paginated listInstanceConfigs(int pageSize, @Nullable String pageToken) throws SpannerException; @@ -269,6 +279,7 @@ OperationFuture updateDatabase( Database database, FieldMask fieldMask) throws SpannerException; GetDatabaseDdlResponse getDatabaseDdl(String databaseName) throws SpannerException; + /** Lists the backups in the specified instance. */ Paginated listBackups( String instanceName, int pageSize, @Nullable String filter, @Nullable String pageToken) @@ -387,6 +398,7 @@ StreamingCall read( ReadRequest request, ResultStreamConsumer consumer, @Nullable Map options, + XGoogSpannerRequestId requestId, boolean routeToLeader); /** Returns the retry settings for streaming query operations. */ @@ -426,7 +438,10 @@ ApiFuture executeQueryAsync( RetrySettings getPartitionedDmlRetrySettings(); ServerStream executeStreamingPartitionedDml( - ExecuteSqlRequest request, @Nullable Map options, Duration timeout); + ExecuteSqlRequest request, + @Nullable Map options, + XGoogSpannerRequestId requestId, + Duration timeout); ServerStream batchWriteAtLeastOnce( BatchWriteRequest request, @Nullable Map options); @@ -443,6 +458,7 @@ StreamingCall executeQuery( ExecuteSqlRequest request, ResultStreamConsumer consumer, @Nullable Map options, + XGoogSpannerRequestId requestId, boolean routeToLeader); ExecuteBatchDmlResponse executeBatchDml(ExecuteBatchDmlRequest build, Map options); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpcViews.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpcViews.java index 7d6cc163b46..21f639e130a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpcViews.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpcViews.java @@ -37,6 +37,7 @@ public class SpannerRpcViews { /** Unit to represent milliseconds. */ private static final String MILLISECOND = "ms"; + /** Unit to represent counts. */ private static final String COUNT = "1"; @@ -51,13 +52,16 @@ public class SpannerRpcViews { public static final MeasureLong SPANNER_GFE_LATENCY = MeasureLong.create( "cloud.google.com/java/spanner/gfe_latency", - "Latency between Google's network receiving an RPC and reading back the first byte of the response", + "Latency between Google's network receiving an RPC and reading back the first byte of the" + + " response", MILLISECOND); + /** Number of responses without the server-timing header. */ public static final MeasureLong SPANNER_GFE_HEADER_MISSING_COUNT = MeasureLong.create( "cloud.google.com/java/spanner/gfe_header_missing_count", - "Number of RPC responses received without the server-timing header, most likely means that the RPC never reached Google's network", + "Number of RPC responses received without the server-timing header, most likely means" + + " that the RPC never reached Google's network", COUNT); static final List RPC_MILLIS_BUCKET_BOUNDARIES = @@ -72,7 +76,8 @@ public class SpannerRpcViews { static final View SPANNER_GFE_LATENCY_VIEW = View.create( View.Name.create("cloud.google.com/java/spanner/gfe_latency"), - "Latency between Google's network receiving an RPC and reading back the first byte of the response", + "Latency between Google's network receiving an RPC and reading back the first byte of the" + + " response", SPANNER_GFE_LATENCY, AGGREGATION_WITH_MILLIS_HISTOGRAM, ImmutableList.of(METHOD, PROJECT_ID, INSTANCE_ID, DATABASE_ID)); @@ -81,7 +86,8 @@ public class SpannerRpcViews { static final View SPANNER_GFE_HEADER_MISSING_COUNT_VIEW = View.create( View.Name.create("cloud.google.com/java/spanner/gfe_header_missing_count"), - "Number of RPC responses received without the server-timing header, most likely means that the RPC never reached Google's network", + "Number of RPC responses received without the server-timing header, most likely means" + + " that the RPC never reached Google's network", SPANNER_GFE_HEADER_MISSING_COUNT, SUM, ImmutableList.of(METHOD, PROJECT_ID, INSTANCE_ID, DATABASE_ID)); @@ -99,7 +105,8 @@ public class SpannerRpcViews { */ @VisibleForTesting @ObsoleteApi( - "The OpenCensus project is deprecated. Use OpenTelemetry to get gfe_latency and gfe_header_missing_count metrics.") + "The OpenCensus project is deprecated. Use OpenTelemetry to get gfe_latency and" + + " gfe_header_missing_count metrics.") public static void registerGfeLatencyAndHeaderMissingCountViews() { if (SpannerOptions.isEnabledOpenCensusMetrics()) { viewManager.registerView(SPANNER_GFE_LATENCY_VIEW); @@ -116,7 +123,8 @@ public static void registerGfeLatencyAndHeaderMissingCountViews() { */ @VisibleForTesting @ObsoleteApi( - "The OpenCensus project is deprecated. Use OpenTelemetry to get gfe_latency and gfe_header_missing_count metrics.") + "The OpenCensus project is deprecated. Use OpenTelemetry to get gfe_latency and" + + " gfe_header_missing_count metrics.") public static void registerGfeLatencyView() { if (SpannerOptions.isEnabledOpenCensusMetrics()) { viewManager.registerView(SPANNER_GFE_LATENCY_VIEW); @@ -132,7 +140,8 @@ public static void registerGfeLatencyView() { */ @VisibleForTesting @ObsoleteApi( - "The OpenCensus project is deprecated. Use OpenTelemetry to get gfe_latency and gfe_header_missing_count metrics.") + "The OpenCensus project is deprecated. Use OpenTelemetry to get gfe_latency and" + + " gfe_header_missing_count metrics.") public static void registerGfeHeaderMissingCountView() { if (SpannerOptions.isEnabledOpenCensusMetrics()) { viewManager.registerView(SPANNER_GFE_HEADER_MISSING_COUNT_VIEW); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SsFormat.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SsFormat.java new file mode 100644 index 00000000000..0e2c12dd202 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SsFormat.java @@ -0,0 +1,322 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.protobuf.ByteString; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; + +/** + * Sortable String Format encoding utilities for Spanner keys. + * + *

              This class provides methods to encode various data types into a byte format that preserves + * lexicographic ordering. The encoding supports both increasing and decreasing sort orders. + */ +@InternalApi +public final class SsFormat { + + /** + * Makes the given key a prefix successor. This means that the returned key is the smallest + * possible key that is larger than the input key, and that does not have the input key as a + * prefix. + * + *

              This is done by flipping the least significant bit of the last byte of the key. + * + * @param key The key to make a prefix successor. + * @return The prefix successor key. + */ + public static ByteString makePrefixSuccessor(ByteString key) { + if (key == null || key.isEmpty()) { + return ByteString.EMPTY; + } + byte[] bytes = key.toByteArray(); + bytes[bytes.length - 1] = (byte) (bytes[bytes.length - 1] | 1); + return ByteString.copyFrom(bytes); + } + + private SsFormat() {} + + private static final int IS_KEY = 0x80; + + // HeaderType enum values + // Unsigned integers (variable length 1-9 bytes) + private static final int TYPE_UINT_1 = 0; + private static final int TYPE_DECREASING_UINT_1 = 40; + + // Signed integers (variable length 1-8 bytes) + private static final int TYPE_NEG_INT_1 = 16; + private static final int TYPE_POS_INT_1 = 17; + private static final int TYPE_DECREASING_NEG_INT_1 = 48; + private static final int TYPE_DECREASING_POS_INT_1 = 49; + + // Strings + private static final int TYPE_STRING = 25; + private static final int TYPE_DECREASING_STRING = 57; + + // Nullable markers + private static final int TYPE_NULL_ORDERED_FIRST = 27; + private static final int TYPE_NULLABLE_NOT_NULL_NULL_ORDERED_FIRST = 28; + private static final int TYPE_NULLABLE_NOT_NULL_NULL_ORDERED_LAST = 59; + private static final int TYPE_NULL_ORDERED_LAST = 60; + + // Doubles (variable length 1-8 bytes, encoded as transformed int64) + private static final int TYPE_NEG_DOUBLE_1 = 73; + private static final int TYPE_POS_DOUBLE_1 = 74; + private static final int TYPE_DECREASING_NEG_DOUBLE_1 = 89; + private static final int TYPE_DECREASING_POS_DOUBLE_1 = 90; + + // EscapeChar enum values + private static final byte ASCENDING_ZERO_ESCAPE = (byte) 0xf0; + private static final byte ASCENDING_FF_ESCAPE = (byte) 0x10; + private static final byte SEP = (byte) 0x78; // 'x' + + // For AppendCompositeTag + private static final int K_OBJECT_EXISTENCE_TAG = 0x7e; + private static final int K_MAX_FIELD_TAG = 0xffff; + + // Offset to make negative timestamp seconds sort correctly + private static final long TIMESTAMP_SECONDS_OFFSET = 1L << 63; + + public static void appendCompositeTag(UnsynchronizedByteArrayOutputStream out, int tag) { + if (tag == K_OBJECT_EXISTENCE_TAG || tag <= 0 || tag > K_MAX_FIELD_TAG) { + throw new IllegalArgumentException("Invalid tag value: " + tag); + } + + if (tag < 16) { + // Short tag: 000 TTTT S (S is LSB of tag, but here tag is original, so S=0) + // Encodes as (tag << 1) + out.write((byte) (tag << 1)); + } else { + // Long tag + int shiftedTag = tag << 1; // LSB is 0 for prefix successor + if (shiftedTag < (1 << (5 + 8))) { // Original tag < 4096 + // Header: num_extra_bytes=1 (01xxxxx), P=payload bits from tag + // (1 << 5) is 00100000 + // (shiftedTag >> 8) are the 5 MSBs of the payload part of the tag + out.write((byte) ((1 << 5) | (shiftedTag >> 8))); + out.write((byte) (shiftedTag & 0xFF)); + } else { // Original tag >= 4096 and <= K_MAX_FIELD_TAG (65535) + // Header: num_extra_bytes=2 (10xxxxx) + // (2 << 5) is 01000000 + out.write((byte) ((2 << 5) | (shiftedTag >> 16))); + out.write((byte) ((shiftedTag >> 8) & 0xFF)); + out.write((byte) (shiftedTag & 0xFF)); + } + } + } + + public static void appendNullOrderedFirst(UnsynchronizedByteArrayOutputStream out) { + out.write((byte) (IS_KEY | TYPE_NULL_ORDERED_FIRST)); + out.write((byte) 0); + } + + public static void appendNullOrderedLast(UnsynchronizedByteArrayOutputStream out) { + out.write((byte) (IS_KEY | TYPE_NULL_ORDERED_LAST)); + out.write((byte) 0); + } + + public static void appendNotNullMarkerNullOrderedFirst(UnsynchronizedByteArrayOutputStream out) { + out.write((byte) (IS_KEY | TYPE_NULLABLE_NOT_NULL_NULL_ORDERED_FIRST)); + } + + public static void appendNotNullMarkerNullOrderedLast(UnsynchronizedByteArrayOutputStream out) { + out.write((byte) (IS_KEY | TYPE_NULLABLE_NOT_NULL_NULL_ORDERED_LAST)); + } + + /** + * Appends a boolean value in ascending (increasing) sort order. + * + *

              Boolean values are encoded using unsigned integer encoding where false=0 and true=1. This + * preserves the natural ordering where false < true. + * + * @param out the output stream to append to + * @param value the boolean value to encode + */ + public static void appendBoolIncreasing(UnsynchronizedByteArrayOutputStream out, boolean value) { + // BOOL uses unsigned int encoding: false=0, true=1 + // For values 0 and 1, payload is always 1 byte + int encoded = value ? 1 : 0; + out.write((byte) (IS_KEY | TYPE_UINT_1)); // Header for 1-byte unsigned int + out.write( + (byte) (encoded << 1)); // Payload: value shifted left by 1 (LSB is prefix-successor bit) + } + + /** + * Appends a boolean value in descending (decreasing) sort order. + * + *

              Boolean values are encoded using unsigned integer encoding where false=0 and true=1, then + * inverted for descending order. This preserves reverse ordering where true < false. + * + * @param out the output stream to append to + * @param value the boolean value to encode + */ + public static void appendBoolDecreasing(UnsynchronizedByteArrayOutputStream out, boolean value) { + // BOOL uses decreasing unsigned int encoding: false=0, true=1, then inverted + // For values 0 and 1, payload is always 1 byte + int encoded = value ? 1 : 0; + out.write( + (byte) (IS_KEY | TYPE_DECREASING_UINT_1)); // Header for 1-byte decreasing unsigned int + out.write((byte) ((~encoded & 0x7F) << 1)); // Inverted payload + } + + private static void appendInt64Internal( + UnsynchronizedByteArrayOutputStream out, long val, boolean decreasing, boolean isDouble) { + if (decreasing) { + val = ~val; + } + + byte[] buf = new byte[8]; // Max 8 bytes for payload + int len = 0; + long tempVal = val; + + if (tempVal >= 0) { + buf[7 - len] = (byte) ((tempVal & 0x7F) << 1); + tempVal >>= 7; + len++; + while (tempVal > 0) { + buf[7 - len] = (byte) (tempVal & 0xFF); + tempVal >>= 8; + len++; + } + } else { // tempVal < 0 + // For negative numbers, extend sign bit after shifting + buf[7 - len] = (byte) ((tempVal & 0x7F) << 1); + // Simulate sign extension for right shift of negative number + // (x >> 7) | 0xFE00000000000000ULL; (if x has 64 bits) + // In Java, right shift `>>` on negative longs performs sign extension. + tempVal >>= 7; + len++; + while (tempVal != -1L) { // Loop until all remaining bits are 1s (sign extension) + buf[7 - len] = (byte) (tempVal & 0xFF); + tempVal >>= 8; + len++; + if (len > 8) { + // Defensive assertion: unreachable for any valid 64-bit signed integer + throw new AssertionError("Signed int encoding overflow"); + } + } + } + + int type; + if (val >= 0) { // Original val before potential bit-negation for decreasing + if (!decreasing) { + type = isDouble ? (TYPE_POS_DOUBLE_1 + len - 1) : (TYPE_POS_INT_1 + len - 1); + } else { + type = + isDouble + ? (TYPE_DECREASING_POS_DOUBLE_1 + len - 1) + : (TYPE_DECREASING_POS_INT_1 + len - 1); + } + } else { + if (!decreasing) { + type = isDouble ? (TYPE_NEG_DOUBLE_1 - len + 1) : (TYPE_NEG_INT_1 - len + 1); + } else { + type = + isDouble + ? (TYPE_DECREASING_NEG_DOUBLE_1 - len + 1) + : (TYPE_DECREASING_NEG_INT_1 - len + 1); + } + } + out.write((byte) (IS_KEY | type)); + out.write(buf, 8 - len, len); + } + + public static void appendInt64Increasing(UnsynchronizedByteArrayOutputStream out, long value) { + appendInt64Internal(out, value, false, false); + } + + public static void appendInt64Decreasing(UnsynchronizedByteArrayOutputStream out, long value) { + appendInt64Internal(out, value, true, false); + } + + public static void appendDoubleIncreasing(UnsynchronizedByteArrayOutputStream out, double value) { + long enc = Double.doubleToRawLongBits(value); + if (enc < 0) { + // Transform negative doubles to maintain lexicographic sort order + enc = Long.MIN_VALUE - enc; + } + appendInt64Internal(out, enc, false, true); + } + + public static void appendDoubleDecreasing(UnsynchronizedByteArrayOutputStream out, double value) { + long enc = Double.doubleToRawLongBits(value); + if (enc < 0) { + enc = Long.MIN_VALUE - enc; + } + appendInt64Internal(out, enc, true, true); + } + + private static void appendByteSequence( + UnsynchronizedByteArrayOutputStream out, byte[] bytes, boolean decreasing) { + out.write((byte) (IS_KEY | (decreasing ? TYPE_DECREASING_STRING : TYPE_STRING))); + + for (byte b : bytes) { + byte currentByte = decreasing ? (byte) ~b : b; + int unsignedByte = currentByte & 0xFF; + if (unsignedByte == 0x00) { + // Escape sequence for 0x00: write 0x00 followed by 0xF0 + out.write((byte) 0x00); + out.write(ASCENDING_ZERO_ESCAPE); + } else if (unsignedByte == 0xFF) { + // Escape sequence for 0xFF: write 0xFF followed by 0x10 + out.write((byte) 0xFF); + out.write(ASCENDING_FF_ESCAPE); + } else { + out.write((byte) unsignedByte); + } + } + // Terminator + out.write((byte) (decreasing ? 0xFF : 0x00)); + out.write(SEP); + } + + public static void appendStringIncreasing(UnsynchronizedByteArrayOutputStream out, String value) { + appendByteSequence(out, value.getBytes(StandardCharsets.UTF_8), false); + } + + public static void appendStringDecreasing(UnsynchronizedByteArrayOutputStream out, String value) { + appendByteSequence(out, value.getBytes(StandardCharsets.UTF_8), true); + } + + public static void appendBytesIncreasing(UnsynchronizedByteArrayOutputStream out, byte[] value) { + appendByteSequence(out, value, false); + } + + public static void appendBytesDecreasing(UnsynchronizedByteArrayOutputStream out, byte[] value) { + appendByteSequence(out, value, true); + } + + /** + * Encodes a timestamp as 12 bytes: 8 bytes for seconds since epoch (with offset to handle + * negative), 4 bytes for nanoseconds. + */ + public static byte[] encodeTimestamp(long seconds, int nanos) { + long offsetSeconds = seconds + TIMESTAMP_SECONDS_OFFSET; + byte[] buf = new byte[12]; + ByteBuffer.wrap(buf).order(ByteOrder.BIG_ENDIAN).putLong(offsetSeconds).putInt(nanos); + return buf; + } + + /** Encodes a UUID (128-bit) as 16 bytes in big-endian order. */ + public static byte[] encodeUuid(long high, long low) { + byte[] buf = new byte[16]; + ByteBuffer.wrap(buf).order(ByteOrder.BIG_ENDIAN).putLong(high).putLong(low); + return buf; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/TargetRange.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/TargetRange.java new file mode 100644 index 00000000000..bfcd2e30a8b --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/TargetRange.java @@ -0,0 +1,56 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import com.google.protobuf.ByteString; + +/** Represents a key range with start and limit boundaries for routing. */ +@InternalApi +public class TargetRange { + public ByteString start; + public ByteString limit; + public boolean approximate; + + public TargetRange(ByteString start, ByteString limit, boolean approximate) { + this.start = start; + this.limit = limit; + this.approximate = approximate; + } + + public boolean isPoint() { + return limit.isEmpty(); + } + + /** + * Merges another TargetRange into this one. The resulting range will be the union of the two + * ranges, taking the minimum start key and maximum limit key. + */ + public void mergeFrom(TargetRange other) { + if (ByteString.unsignedLexicographicalComparator().compare(other.start, this.start) < 0) { + this.start = other.start; + } + if (other.isPoint() + && ByteString.unsignedLexicographicalComparator().compare(other.start, this.limit) >= 0) { + this.limit = SsFormat.makePrefixSuccessor(other.start); + } else if (ByteString.unsignedLexicographicalComparator().compare(other.limit, this.limit) + > 0) { + this.limit = other.limit; + } + this.approximate |= other.approximate; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/UnsynchronizedByteArrayOutputStream.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/UnsynchronizedByteArrayOutputStream.java new file mode 100644 index 00000000000..864215c9874 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/UnsynchronizedByteArrayOutputStream.java @@ -0,0 +1,105 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import com.google.api.core.InternalApi; +import java.util.Arrays; + +/** + * A simple, unsynchronized byte array output stream optimized for key encoding. + * + *

              Unlike {@link java.io.ByteArrayOutputStream}, this class is not thread-safe and does not incur + * synchronization overhead. This provides better performance for single-threaded key encoding + * operations where synchronization is not required. + */ +@InternalApi +public final class UnsynchronizedByteArrayOutputStream { + + private byte[] buf; + private int count; + + /** Creates a new output stream with a default initial capacity of 32 bytes. */ + public UnsynchronizedByteArrayOutputStream() { + this(32); + } + + /** + * Creates a new output stream with the specified initial capacity. + * + * @param initialCapacity the initial buffer size + * @throws IllegalArgumentException if initialCapacity is negative + */ + public UnsynchronizedByteArrayOutputStream(int initialCapacity) { + if (initialCapacity < 0) { + throw new IllegalArgumentException("Negative initial capacity: " + initialCapacity); + } + this.buf = new byte[initialCapacity]; + } + + private void ensureCapacity(int minCapacity) { + if (minCapacity > buf.length) { + int newCapacity = Math.max(buf.length << 1, minCapacity); + buf = Arrays.copyOf(buf, newCapacity); + } + } + + /** + * Writes the specified byte to this output stream. + * + * @param b the byte to write (only the low 8 bits are used) + */ + public void write(int b) { + ensureCapacity(count + 1); + buf[count++] = (byte) b; + } + + /** + * Writes a portion of a byte array to this output stream. + * + * @param b the source byte array + * @param off the start offset in the array + * @param len the number of bytes to write + */ + public void write(byte[] b, int off, int len) { + ensureCapacity(count + len); + System.arraycopy(b, off, buf, count, len); + count += len; + } + + /** + * Returns a copy of the buffer contents as a new byte array. + * + * @return a new byte array containing the written bytes + */ + public byte[] toByteArray() { + return Arrays.copyOf(buf, count); + } + + /** Resets the buffer so that it can be reused. The underlying buffer is retained. */ + public void reset() { + count = 0; + } + + /** + * Returns the current number of bytes written to this stream. + * + * @return the number of valid bytes in the buffer + */ + public int size() { + return count; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/testing/ExperimentalHostHelper.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/testing/ExperimentalHostHelper.java new file mode 100644 index 00000000000..f6387535e4d --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/testing/ExperimentalHostHelper.java @@ -0,0 +1,67 @@ +/* + * 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.spanner.testing; + +import com.google.cloud.spanner.SpannerOptions; +import com.google.common.base.Strings; + +public class ExperimentalHostHelper { + private static final String EXPERIMENTAL_HOST = "spanner.experimental_host"; + private static final String USE_PLAIN_TEXT = "spanner.use_plain_text"; + private static final String USE_MTLS = "spanner.mtls"; + private static final String CLIENT_CERT_PATH = "spanner.client_cert_path"; + private static final String CLIENT_CERT_KEY_PATH = "spanner.client_cert_key_path"; + + /** + * Checks whether the emulator is being used. This is done by checking if the + * SPANNER_EMULATOR_HOST environment variable is set. + * + * @return true if the emulator is being used. Returns false otherwise. + */ + public static boolean isExperimentalHost() { + return !Strings.isNullOrEmpty(System.getProperty(EXPERIMENTAL_HOST)); + } + + public static void appendExperimentalHost(StringBuilder uri) { + uri.append(";isExperimentalHost=true"); + if (isMtlsSetup()) { + String clientCertificate = System.getProperty(CLIENT_CERT_PATH, ""); + String clientKey = System.getProperty(CLIENT_CERT_KEY_PATH, ""); + uri.append(";clientCertificate=").append(clientCertificate); + uri.append(";clientKey=").append(clientKey); + } + } + + public static boolean isMtlsSetup() { + return Boolean.getBoolean(USE_MTLS); + } + + public static void setExperimentalHostSpannerOptions(SpannerOptions.Builder builder) { + String experimentalHost = System.getProperty(EXPERIMENTAL_HOST, ""); + boolean usePlainText = Boolean.getBoolean(USE_PLAIN_TEXT); + builder.setExperimentalHost(experimentalHost); + builder.setBuiltInMetricsEnabled(false); + if (usePlainText) { + builder.usePlainText(); + } + if (isMtlsSetup()) { + String clientCertificate = System.getProperty(CLIENT_CERT_PATH, ""); + String clientKey = System.getProperty(CLIENT_CERT_KEY_PATH, ""); + builder.useClientCert(clientCertificate, clientKey); + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/testing/RemoteSpannerHelper.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/testing/RemoteSpannerHelper.java index e2001364abb..c70c2c93cc3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/testing/RemoteSpannerHelper.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/testing/RemoteSpannerHelper.java @@ -54,7 +54,8 @@ public class RemoteSpannerHelper { private final InstanceId instanceId; private static final AtomicInteger dbSeq = new AtomicInteger(); private static final int dbPrefix = new Random().nextInt(Integer.MAX_VALUE); - private static final AtomicInteger dbRoleSeq = new AtomicInteger();; + private static final AtomicInteger dbRoleSeq = new AtomicInteger(); + ; private static int dbRolePrefix = new Random().nextInt(Integer.MAX_VALUE); private static final AtomicInteger backupSeq = new AtomicInteger(); private static final int backupPrefix = new Random().nextInt(Integer.MAX_VALUE); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java index 3cb3c7c4cc6..47dc7da50af 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -99,8 +99,8 @@ *

              CreateSession *

              Creates a new session. A session can be used to perform transactions that read and/or modify data in a Cloud Spanner database. Sessions are meant to be reused for many consecutive transactions. *

              Sessions can only execute one transaction at a time. To execute multiple concurrent read-write/write-only transactions, create multiple sessions. Note that standalone reads and queries use a transaction internally, and count toward the one transaction limit. - *

              Active sessions use additional server resources, so it is a good idea to delete idle and unneeded sessions. Aside from explicit deletes, Cloud Spanner may delete sessions for which no operations are sent for more than an hour. If a session is deleted, requests to it return `NOT_FOUND`. - *

              Idle sessions can be kept alive by sending a trivial SQL query periodically, e.g., `"SELECT 1"`. + *

              Active sessions use additional server resources, so it's a good idea to delete idle and unneeded sessions. Aside from explicit deletes, Cloud Spanner can delete sessions when no operations are sent for more than an hour. If a session is deleted, requests to it return `NOT_FOUND`. + *

              Idle sessions can be kept alive by sending a trivial SQL query periodically, for example, `"SELECT 1"`. * *

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

              *
                @@ -139,7 +139,7 @@ * * *

                GetSession - *

                Gets a session. Returns `NOT_FOUND` if the session does not exist. This is mainly useful for determining whether a session is still alive. + *

                Gets a session. Returns `NOT_FOUND` if the session doesn't exist. This is mainly useful for determining whether a session is still alive. * *

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

                *
                  @@ -178,7 +178,7 @@ * * *

                  DeleteSession - *

                  Ends a session, releasing server resources associated with it. This will asynchronously trigger cancellation of any operations that are running with this session. + *

                  Ends a session, releasing server resources associated with it. This asynchronously triggers the cancellation of any operations that are running with this session. * *

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

                  *
                    @@ -197,9 +197,10 @@ * * *

                    ExecuteSql - *

                    Executes an SQL statement, returning all results in a single reply. This method cannot be used to return a result set larger than 10 MiB; if the query yields more data than that, the query fails with a `FAILED_PRECONDITION` error. + *

                    Executes an SQL statement, returning all results in a single reply. This method can't be used to return a result set larger than 10 MiB; if the query yields more data than that, the query fails with a `FAILED_PRECONDITION` error. *

                    Operations inside read-write transactions might return `ABORTED`. If this occurs, the application should restart the transaction from the beginning. See [Transaction][google.spanner.v1.Transaction] for more details. - *

                    Larger result sets can be fetched in streaming fashion by calling [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead. + *

                    Larger result sets can be fetched in streaming fashion by calling [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead. + *

                    The query string can be SQL or [Graph Query Language (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). * *

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

                    *
                      @@ -213,7 +214,8 @@ * * *

                      ExecuteStreamingSql - *

                      Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there is no limit on the size of the returned result set. However, no individual row in the result set can exceed 100 MiB, and no column value can exceed 10 MiB. + *

                      Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there is no limit on the size of the returned result set. However, no individual row in the result set can exceed 100 MiB, and no column value can exceed 10 MiB. + *

                      The query string can be SQL or [Graph Query Language (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). * *

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

                      *
                        @@ -239,7 +241,7 @@ * * *

                        Read - *

                        Reads rows from the database using key lookups and scans, as a simple key/value style alternative to [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be used to return a result set larger than 10 MiB; if the read matches more data than that, the read fails with a `FAILED_PRECONDITION` error. + *

                        Reads rows from the database using key lookups and scans, as a simple key/value style alternative to [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be used to return a result set larger than 10 MiB; if the read matches more data than that, the read fails with a `FAILED_PRECONDITION` error. *

                        Reads inside read-write transactions might return `ABORTED`. If this occurs, the application should restart the transaction from the beginning. See [Transaction][google.spanner.v1.Transaction] for more details. *

                        Larger result sets can be yielded in streaming fashion by calling [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead. * @@ -285,7 +287,7 @@ * *

                        Commit *

                        Commits a transaction. The request includes the mutations to be applied to rows in the database. - *

                        `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is conflicts with concurrent transactions. However, it can also happen for a variety of other reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the beginning, re-using the same session. + *

                        `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is conflicts with concurrent transactions. However, it can also happen for a variety of other reasons. If `Commit` returns `ABORTED`, the caller should retry the transaction from the beginning, reusing the same session. *

                        On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, for example, if the client job experiences a 1+ hour networking failure. At that point, Cloud Spanner has lost track of the transaction outcome and we recommend that you perform another read from the database to see the state of things as they are now. * *

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

                        @@ -307,8 +309,8 @@ * * *

                        Rollback - *

                        Rolls back a transaction, releasing any locks it holds. It is a good idea to call this for any transaction that includes one or more [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately decides not to commit. - *

                        `Rollback` returns `OK` if it successfully aborts the transaction, the transaction was already aborted, or the transaction is not found. `Rollback` never returns `ABORTED`. + *

                        Rolls back a transaction, releasing any locks it holds. It's a good idea to call this for any transaction that includes one or more [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately decides not to commit. + *

                        `Rollback` returns `OK` if it successfully aborts the transaction, the transaction was already aborted, or the transaction isn't found. `Rollback` never returns `ABORTED`. * *

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

                        *
                          @@ -327,8 +329,8 @@ * * *

                          PartitionQuery - *

                          Creates a set of partition tokens that can be used to execute a query operation in parallel. Each of the returned partition tokens can be used by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to specify a subset of the query result to read. The same session and read-only transaction must be used by the PartitionQueryRequest used to create the partition tokens and the ExecuteSqlRequests that use the partition tokens. - *

                          Partition tokens become invalid when the session used to create them is deleted, is idle for too long, begins a new transaction, or becomes too old. When any of these happen, it is not possible to resume the query, and the whole operation must be restarted from the beginning. + *

                          Creates a set of partition tokens that can be used to execute a query operation in parallel. Each of the returned partition tokens can be used by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to specify a subset of the query result to read. The same session and read-only transaction must be used by the `PartitionQueryRequest` used to create the partition tokens and the `ExecuteSqlRequests` that use the partition tokens. + *

                          Partition tokens become invalid when the session used to create them is deleted, is idle for too long, begins a new transaction, or becomes too old. When any of these happen, it isn't possible to resume the query, and the whole operation must be restarted from the beginning. * *

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

                          *
                            @@ -342,8 +344,8 @@ * * *

                            PartitionRead - *

                            Creates a set of partition tokens that can be used to execute a read operation in parallel. Each of the returned partition tokens can be used by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a subset of the read result to read. The same session and read-only transaction must be used by the PartitionReadRequest used to create the partition tokens and the ReadRequests that use the partition tokens. There are no ordering guarantees on rows returned among the returned partition tokens, or even within each individual StreamingRead call issued with a partition_token. - *

                            Partition tokens become invalid when the session used to create them is deleted, is idle for too long, begins a new transaction, or becomes too old. When any of these happen, it is not possible to resume the read, and the whole operation must be restarted from the beginning. + *

                            Creates a set of partition tokens that can be used to execute a read operation in parallel. Each of the returned partition tokens can be used by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a subset of the read result to read. The same session and read-only transaction must be used by the `PartitionReadRequest` used to create the partition tokens and the `ReadRequests` that use the partition tokens. There are no ordering guarantees on rows returned among the returned partition tokens, or even within each individual `StreamingRead` call issued with a `partition_token`. + *

                            Partition tokens become invalid when the session used to create them is deleted, is idle for too long, begins a new transaction, or becomes too old. When any of these happen, it isn't possible to resume the read, and the whole operation must be restarted from the beginning. * *

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

                            *
                              @@ -357,8 +359,8 @@ * * *

                              BatchWrite - *

                              Batches the supplied mutation groups in a collection of efficient transactions. All mutations in a group are committed atomically. However, mutations across groups can be committed non-atomically in an unspecified order and thus, they must be independent of each other. Partial failure is possible, i.e., some groups may have been committed successfully, while some may have failed. The results of individual batches are streamed into the response as the batches are applied. - *

                              BatchWrite requests are not replay protected, meaning that each mutation group may be applied more than once. Replays of non-idempotent mutations may have undesirable effects. For example, replays of an insert mutation may produce an already exists error or if you use generated or commit timestamp-based keys, it may result in additional rows being added to the mutation's table. We recommend structuring your mutation groups to be idempotent to avoid this issue. + *

                              Batches the supplied mutation groups in a collection of efficient transactions. All mutations in a group are committed atomically. However, mutations across groups can be committed non-atomically in an unspecified order and thus, they must be independent of each other. Partial failure is possible, that is, some groups might have been committed successfully, while some might have failed. The results of individual batches are streamed into the response as the batches are applied. + *

                              `BatchWrite` requests are not replay protected, meaning that each mutation group can be applied more than once. Replays of non-idempotent mutations can have undesirable effects. For example, replays of an insert mutation can produce an already exists error or if you use generated or commit timestamp-based keys, it can result in additional rows being added to the mutation's table. We recommend structuring your mutation groups to be idempotent to avoid this issue. * *

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

                              *
                                @@ -477,13 +479,13 @@ public SpannerStub getStub() { * read-write/write-only transactions, create multiple sessions. Note that standalone reads and * queries use a transaction internally, and count toward the one transaction limit. * - *

                                Active sessions use additional server resources, so it is a good idea to delete idle and - * unneeded sessions. Aside from explicit deletes, Cloud Spanner may delete sessions for which no + *

                                Active sessions use additional server resources, so it's a good idea to delete idle and + * unneeded sessions. Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, requests to it return * `NOT_FOUND`. * - *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, e.g., `"SELECT - * 1"`. + *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, for example, + * `"SELECT 1"`. * *

                                Sample code: * @@ -520,13 +522,13 @@ public final Session createSession(DatabaseName database) { * read-write/write-only transactions, create multiple sessions. Note that standalone reads and * queries use a transaction internally, and count toward the one transaction limit. * - *

                                Active sessions use additional server resources, so it is a good idea to delete idle and - * unneeded sessions. Aside from explicit deletes, Cloud Spanner may delete sessions for which no + *

                                Active sessions use additional server resources, so it's a good idea to delete idle and + * unneeded sessions. Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, requests to it return * `NOT_FOUND`. * - *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, e.g., `"SELECT - * 1"`. + *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, for example, + * `"SELECT 1"`. * *

                                Sample code: * @@ -560,13 +562,13 @@ public final Session createSession(String database) { * read-write/write-only transactions, create multiple sessions. Note that standalone reads and * queries use a transaction internally, and count toward the one transaction limit. * - *

                                Active sessions use additional server resources, so it is a good idea to delete idle and - * unneeded sessions. Aside from explicit deletes, Cloud Spanner may delete sessions for which no + *

                                Active sessions use additional server resources, so it's a good idea to delete idle and + * unneeded sessions. Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, requests to it return * `NOT_FOUND`. * - *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, e.g., `"SELECT - * 1"`. + *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, for example, + * `"SELECT 1"`. * *

                                Sample code: * @@ -603,13 +605,13 @@ public final Session createSession(CreateSessionRequest request) { * read-write/write-only transactions, create multiple sessions. Note that standalone reads and * queries use a transaction internally, and count toward the one transaction limit. * - *

                                Active sessions use additional server resources, so it is a good idea to delete idle and - * unneeded sessions. Aside from explicit deletes, Cloud Spanner may delete sessions for which no + *

                                Active sessions use additional server resources, so it's a good idea to delete idle and + * unneeded sessions. Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, requests to it return * `NOT_FOUND`. * - *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, e.g., `"SELECT - * 1"`. + *

                                Idle sessions can be kept alive by sending a trivial SQL query periodically, for example, + * `"SELECT 1"`. * *

                                Sample code: * @@ -659,9 +661,10 @@ public final UnaryCallable createSessionCallable( * } * * @param database Required. The database in which the new sessions are created. - * @param sessionCount Required. The number of sessions to be created in this batch call. The API - * may return fewer than the requested number of sessions. If a specific number of sessions - * are desired, the client can make additional calls to BatchCreateSessions (adjusting + * @param sessionCount Required. The number of sessions to be created in this batch call. At least + * one session is created. The API can return fewer than the requested number of sessions. If + * a specific number of sessions are desired, the client can make additional calls to + * `BatchCreateSessions` (adjusting * [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count] as necessary). * @throws com.google.api.gax.rpc.ApiException if the remote call fails */ @@ -699,9 +702,10 @@ public final BatchCreateSessionsResponse batchCreateSessions( * } * * @param database Required. The database in which the new sessions are created. - * @param sessionCount Required. The number of sessions to be created in this batch call. The API - * may return fewer than the requested number of sessions. If a specific number of sessions - * are desired, the client can make additional calls to BatchCreateSessions (adjusting + * @param sessionCount Required. The number of sessions to be created in this batch call. At least + * one session is created. The API can return fewer than the requested number of sessions. If + * a specific number of sessions are desired, the client can make additional calls to + * `BatchCreateSessions` (adjusting * [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count] as necessary). * @throws com.google.api.gax.rpc.ApiException if the remote call fails */ @@ -783,7 +787,7 @@ public final BatchCreateSessionsResponse batchCreateSessions(BatchCreateSessions // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Gets a session. Returns `NOT_FOUND` if the session does not exist. This is mainly useful for + * Gets a session. Returns `NOT_FOUND` if the session doesn't exist. This is mainly useful for * determining whether a session is still alive. * *

                                Sample code: @@ -811,7 +815,7 @@ public final Session getSession(SessionName name) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Gets a session. Returns `NOT_FOUND` if the session does not exist. This is mainly useful for + * Gets a session. Returns `NOT_FOUND` if the session doesn't exist. This is mainly useful for * determining whether a session is still alive. * *

                                Sample code: @@ -838,7 +842,7 @@ public final Session getSession(String name) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Gets a session. Returns `NOT_FOUND` if the session does not exist. This is mainly useful for + * Gets a session. Returns `NOT_FOUND` if the session doesn't exist. This is mainly useful for * determining whether a session is still alive. * *

                                Sample code: @@ -868,7 +872,7 @@ public final Session getSession(GetSessionRequest request) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Gets a session. Returns `NOT_FOUND` if the session does not exist. This is mainly useful for + * Gets a session. Returns `NOT_FOUND` if the session doesn't exist. This is mainly useful for * determining whether a session is still alive. * *

                                Sample code: @@ -1061,7 +1065,7 @@ public final UnaryCallable listSessio // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Ends a session, releasing server resources associated with it. This will asynchronously trigger + * Ends a session, releasing server resources associated with it. This asynchronously triggers the * cancellation of any operations that are running with this session. * *

                                Sample code: @@ -1089,7 +1093,7 @@ public final void deleteSession(SessionName name) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Ends a session, releasing server resources associated with it. This will asynchronously trigger + * Ends a session, releasing server resources associated with it. This asynchronously triggers the * cancellation of any operations that are running with this session. * *

                                Sample code: @@ -1116,7 +1120,7 @@ public final void deleteSession(String name) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Ends a session, releasing server resources associated with it. This will asynchronously trigger + * Ends a session, releasing server resources associated with it. This asynchronously triggers the * cancellation of any operations that are running with this session. * *

                                Sample code: @@ -1146,7 +1150,7 @@ public final void deleteSession(DeleteSessionRequest request) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Ends a session, releasing server resources associated with it. This will asynchronously trigger + * Ends a session, releasing server resources associated with it. This asynchronously triggers the * cancellation of any operations that are running with this session. * *

                                Sample code: @@ -1175,7 +1179,7 @@ public final UnaryCallable deleteSessionCallable() // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Executes an SQL statement, returning all results in a single reply. This method cannot be used + * Executes an SQL statement, returning all results in a single reply. This method can't be used * to return a result set larger than 10 MiB; if the query yields more data than that, the query * fails with a `FAILED_PRECONDITION` error. * @@ -1186,6 +1190,9 @@ public final UnaryCallable deleteSessionCallable() *

                                Larger result sets can be fetched in streaming fashion by calling * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead. * + *

                                The query string can be SQL or [Graph Query Language + * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). + * *

                                Sample code: * *

                                {@code
                                @@ -1211,6 +1218,7 @@ public final UnaryCallable deleteSessionCallable()
                                    *           .setDirectedReadOptions(DirectedReadOptions.newBuilder().build())
                                    *           .setDataBoostEnabled(true)
                                    *           .setLastStatement(true)
                                +   *           .setRoutingHint(RoutingHint.newBuilder().build())
                                    *           .build();
                                    *   ResultSet response = spannerClient.executeSql(request);
                                    * }
                                @@ -1225,7 +1233,7 @@ public final ResultSet executeSql(ExecuteSqlRequest request) {
                                 
                                   // AUTO-GENERATED DOCUMENTATION AND METHOD.
                                   /**
                                -   * Executes an SQL statement, returning all results in a single reply. This method cannot be used
                                +   * Executes an SQL statement, returning all results in a single reply. This method can't be used
                                    * to return a result set larger than 10 MiB; if the query yields more data than that, the query
                                    * fails with a `FAILED_PRECONDITION` error.
                                    *
                                @@ -1236,6 +1244,9 @@ public final ResultSet executeSql(ExecuteSqlRequest request) {
                                    * 

                                Larger result sets can be fetched in streaming fashion by calling * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead. * + *

                                The query string can be SQL or [Graph Query Language + * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). + * *

                                Sample code: * *

                                {@code
                                @@ -1261,6 +1272,7 @@ public final ResultSet executeSql(ExecuteSqlRequest request) {
                                    *           .setDirectedReadOptions(DirectedReadOptions.newBuilder().build())
                                    *           .setDataBoostEnabled(true)
                                    *           .setLastStatement(true)
                                +   *           .setRoutingHint(RoutingHint.newBuilder().build())
                                    *           .build();
                                    *   ApiFuture future = spannerClient.executeSqlCallable().futureCall(request);
                                    *   // Do something.
                                @@ -1279,6 +1291,9 @@ public final UnaryCallable executeSqlCallable() {
                                    * size of the returned result set. However, no individual row in the result set can exceed 100
                                    * MiB, and no column value can exceed 10 MiB.
                                    *
                                +   * 

                                The query string can be SQL or [Graph Query Language + * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). + * *

                                Sample code: * *

                                {@code
                                @@ -1304,6 +1319,7 @@ public final UnaryCallable executeSqlCallable() {
                                    *           .setDirectedReadOptions(DirectedReadOptions.newBuilder().build())
                                    *           .setDataBoostEnabled(true)
                                    *           .setLastStatement(true)
                                +   *           .setRoutingHint(RoutingHint.newBuilder().build())
                                    *           .build();
                                    *   ServerStream stream =
                                    *       spannerClient.executeStreamingSqlCallable().call(request);
                                @@ -1408,9 +1424,9 @@ public final ExecuteBatchDmlResponse executeBatchDml(ExecuteBatchDmlRequest requ
                                   // AUTO-GENERATED DOCUMENTATION AND METHOD.
                                   /**
                                    * Reads rows from the database using key lookups and scans, as a simple key/value style
                                -   * alternative to [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be used
                                -   * to return a result set larger than 10 MiB; if the read matches more data than that, the read
                                -   * fails with a `FAILED_PRECONDITION` error.
                                +   * alternative to [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be used to
                                +   * return a result set larger than 10 MiB; if the read matches more data than that, the read fails
                                +   * with a `FAILED_PRECONDITION` error.
                                    *
                                    * 

                                Reads inside read-write transactions might return `ABORTED`. If this occurs, the application * should restart the transaction from the beginning. See @@ -1443,6 +1459,7 @@ public final ExecuteBatchDmlResponse executeBatchDml(ExecuteBatchDmlRequest requ * .setRequestOptions(RequestOptions.newBuilder().build()) * .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) * .setDataBoostEnabled(true) + * .setRoutingHint(RoutingHint.newBuilder().build()) * .build(); * ResultSet response = spannerClient.read(request); * } @@ -1458,9 +1475,9 @@ public final ResultSet read(ReadRequest request) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Reads rows from the database using key lookups and scans, as a simple key/value style - * alternative to [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be used - * to return a result set larger than 10 MiB; if the read matches more data than that, the read - * fails with a `FAILED_PRECONDITION` error. + * alternative to [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be used to + * return a result set larger than 10 MiB; if the read matches more data than that, the read fails + * with a `FAILED_PRECONDITION` error. * *

                                Reads inside read-write transactions might return `ABORTED`. If this occurs, the application * should restart the transaction from the beginning. See @@ -1493,6 +1510,7 @@ public final ResultSet read(ReadRequest request) { * .setRequestOptions(RequestOptions.newBuilder().build()) * .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) * .setDataBoostEnabled(true) + * .setRoutingHint(RoutingHint.newBuilder().build()) * .build(); * ApiFuture future = spannerClient.readCallable().futureCall(request); * // Do something. @@ -1535,6 +1553,7 @@ public final UnaryCallable readCallable() { * .setRequestOptions(RequestOptions.newBuilder().build()) * .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) * .setDataBoostEnabled(true) + * .setRoutingHint(RoutingHint.newBuilder().build()) * .build(); * ServerStream stream = spannerClient.streamingReadCallable().call(request); * for (PartialResultSet response : stream) { @@ -1635,6 +1654,7 @@ public final Transaction beginTransaction(String session, TransactionOptions opt * .setOptions(TransactionOptions.newBuilder().build()) * .setRequestOptions(RequestOptions.newBuilder().build()) * .setMutationKey(Mutation.newBuilder().build()) + * .setRoutingHint(RoutingHint.newBuilder().build()) * .build(); * Transaction response = spannerClient.beginTransaction(request); * } @@ -1669,6 +1689,7 @@ public final Transaction beginTransaction(BeginTransactionRequest request) { * .setOptions(TransactionOptions.newBuilder().build()) * .setRequestOptions(RequestOptions.newBuilder().build()) * .setMutationKey(Mutation.newBuilder().build()) + * .setRoutingHint(RoutingHint.newBuilder().build()) * .build(); * ApiFuture future = spannerClient.beginTransactionCallable().futureCall(request); * // Do something. @@ -1687,8 +1708,8 @@ public final UnaryCallable beginTransactio * *

                                `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is * conflicts with concurrent transactions. However, it can also happen for a variety of other - * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the - * beginning, re-using the same session. + * reasons. If `Commit` returns `ABORTED`, the caller should retry the transaction from the + * beginning, reusing the same session. * *

                                On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, for example, if * the client job experiences a 1+ hour networking failure. At that point, Cloud Spanner has lost @@ -1735,8 +1756,8 @@ public final CommitResponse commit( * *

                                `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is * conflicts with concurrent transactions. However, it can also happen for a variety of other - * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the - * beginning, re-using the same session. + * reasons. If `Commit` returns `ABORTED`, the caller should retry the transaction from the + * beginning, reusing the same session. * *

                                On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, for example, if * the client job experiences a 1+ hour networking failure. At that point, Cloud Spanner has lost @@ -1763,7 +1784,7 @@ public final CommitResponse commit( * @param singleUseTransaction Execute mutations in a temporary transaction. Note that unlike * commit of a previously-started transaction, commit with a temporary transaction is * non-idempotent. That is, if the `CommitRequest` is sent to Cloud Spanner more than once - * (for instance, due to retries in the application, or in the transport library), it is + * (for instance, due to retries in the application, or in the transport library), it's * possible that the mutations are executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1789,8 +1810,8 @@ public final CommitResponse commit( * *

                                `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is * conflicts with concurrent transactions. However, it can also happen for a variety of other - * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the - * beginning, re-using the same session. + * reasons. If `Commit` returns `ABORTED`, the caller should retry the transaction from the + * beginning, reusing the same session. * *

                                On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, for example, if * the client job experiences a 1+ hour networking failure. At that point, Cloud Spanner has lost @@ -1838,8 +1859,8 @@ public final CommitResponse commit( * *

                                `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is * conflicts with concurrent transactions. However, it can also happen for a variety of other - * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the - * beginning, re-using the same session. + * reasons. If `Commit` returns `ABORTED`, the caller should retry the transaction from the + * beginning, reusing the same session. * *

                                On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, for example, if * the client job experiences a 1+ hour networking failure. At that point, Cloud Spanner has lost @@ -1867,7 +1888,7 @@ public final CommitResponse commit( * @param singleUseTransaction Execute mutations in a temporary transaction. Note that unlike * commit of a previously-started transaction, commit with a temporary transaction is * non-idempotent. That is, if the `CommitRequest` is sent to Cloud Spanner more than once - * (for instance, due to retries in the application, or in the transport library), it is + * (for instance, due to retries in the application, or in the transport library), it's * possible that the mutations are executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1893,8 +1914,8 @@ public final CommitResponse commit( * *

                                `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is * conflicts with concurrent transactions. However, it can also happen for a variety of other - * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the - * beginning, re-using the same session. + * reasons. If `Commit` returns `ABORTED`, the caller should retry the transaction from the + * beginning, reusing the same session. * *

                                On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, for example, if * the client job experiences a 1+ hour networking failure. At that point, Cloud Spanner has lost @@ -1919,6 +1940,7 @@ public final CommitResponse commit( * .setMaxCommitDelay(Duration.newBuilder().build()) * .setRequestOptions(RequestOptions.newBuilder().build()) * .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + * .setRoutingHint(RoutingHint.newBuilder().build()) * .build(); * CommitResponse response = spannerClient.commit(request); * } @@ -1938,8 +1960,8 @@ public final CommitResponse commit(CommitRequest request) { * *

                                `Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is * conflicts with concurrent transactions. However, it can also happen for a variety of other - * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the - * beginning, re-using the same session. + * reasons. If `Commit` returns `ABORTED`, the caller should retry the transaction from the + * beginning, reusing the same session. * *

                                On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, for example, if * the client job experiences a 1+ hour networking failure. At that point, Cloud Spanner has lost @@ -1964,6 +1986,7 @@ public final CommitResponse commit(CommitRequest request) { * .setMaxCommitDelay(Duration.newBuilder().build()) * .setRequestOptions(RequestOptions.newBuilder().build()) * .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + * .setRoutingHint(RoutingHint.newBuilder().build()) * .build(); * ApiFuture future = spannerClient.commitCallable().futureCall(request); * // Do something. @@ -1977,13 +2000,13 @@ public final UnaryCallable commitCallable() { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Rolls back a transaction, releasing any locks it holds. It is a good idea to call this for any + * Rolls back a transaction, releasing any locks it holds. It's a good idea to call this for any * transaction that includes one or more [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately decides not to * commit. * *

                                `Rollback` returns `OK` if it successfully aborts the transaction, the transaction was - * already aborted, or the transaction is not found. `Rollback` never returns `ABORTED`. + * already aborted, or the transaction isn't found. `Rollback` never returns `ABORTED`. * *

                                Sample code: * @@ -2015,13 +2038,13 @@ public final void rollback(SessionName session, ByteString transactionId) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Rolls back a transaction, releasing any locks it holds. It is a good idea to call this for any + * Rolls back a transaction, releasing any locks it holds. It's a good idea to call this for any * transaction that includes one or more [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately decides not to * commit. * *

                                `Rollback` returns `OK` if it successfully aborts the transaction, the transaction was - * already aborted, or the transaction is not found. `Rollback` never returns `ABORTED`. + * already aborted, or the transaction isn't found. `Rollback` never returns `ABORTED`. * *

                                Sample code: * @@ -2051,13 +2074,13 @@ public final void rollback(String session, ByteString transactionId) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Rolls back a transaction, releasing any locks it holds. It is a good idea to call this for any + * Rolls back a transaction, releasing any locks it holds. It's a good idea to call this for any * transaction that includes one or more [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately decides not to * commit. * *

                                `Rollback` returns `OK` if it successfully aborts the transaction, the transaction was - * already aborted, or the transaction is not found. `Rollback` never returns `ABORTED`. + * already aborted, or the transaction isn't found. `Rollback` never returns `ABORTED`. * *

                                Sample code: * @@ -2087,13 +2110,13 @@ public final void rollback(RollbackRequest request) { // AUTO-GENERATED DOCUMENTATION AND METHOD. /** - * Rolls back a transaction, releasing any locks it holds. It is a good idea to call this for any + * Rolls back a transaction, releasing any locks it holds. It's a good idea to call this for any * transaction that includes one or more [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately decides not to * commit. * *

                                `Rollback` returns `OK` if it successfully aborts the transaction, the transaction was - * already aborted, or the transaction is not found. `Rollback` never returns `ABORTED`. + * already aborted, or the transaction isn't found. `Rollback` never returns `ABORTED`. * *

                                Sample code: * @@ -2126,11 +2149,11 @@ public final UnaryCallable rollbackCallable() { * Each of the returned partition tokens can be used by * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to specify a subset of the * query result to read. The same session and read-only transaction must be used by the - * PartitionQueryRequest used to create the partition tokens and the ExecuteSqlRequests that use - * the partition tokens. + * `PartitionQueryRequest` used to create the partition tokens and the `ExecuteSqlRequests` that + * use the partition tokens. * *

                                Partition tokens become invalid when the session used to create them is deleted, is idle for - * too long, begins a new transaction, or becomes too old. When any of these happen, it is not + * too long, begins a new transaction, or becomes too old. When any of these happen, it isn't * possible to resume the query, and the whole operation must be restarted from the beginning. * *

                                Sample code: @@ -2169,11 +2192,11 @@ public final PartitionResponse partitionQuery(PartitionQueryRequest request) { * Each of the returned partition tokens can be used by * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to specify a subset of the * query result to read. The same session and read-only transaction must be used by the - * PartitionQueryRequest used to create the partition tokens and the ExecuteSqlRequests that use - * the partition tokens. + * `PartitionQueryRequest` used to create the partition tokens and the `ExecuteSqlRequests` that + * use the partition tokens. * *

                                Partition tokens become invalid when the session used to create them is deleted, is idle for - * too long, begins a new transaction, or becomes too old. When any of these happen, it is not + * too long, begins a new transaction, or becomes too old. When any of these happen, it isn't * possible to resume the query, and the whole operation must be restarted from the beginning. * *

                                Sample code: @@ -2211,13 +2234,13 @@ public final UnaryCallable partitionQu * Creates a set of partition tokens that can be used to execute a read operation in parallel. * Each of the returned partition tokens can be used by * [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a subset of the read result - * to read. The same session and read-only transaction must be used by the PartitionReadRequest - * used to create the partition tokens and the ReadRequests that use the partition tokens. There + * to read. The same session and read-only transaction must be used by the `PartitionReadRequest` + * used to create the partition tokens and the `ReadRequests` that use the partition tokens. There * are no ordering guarantees on rows returned among the returned partition tokens, or even within - * each individual StreamingRead call issued with a partition_token. + * each individual `StreamingRead` call issued with a `partition_token`. * *

                                Partition tokens become invalid when the session used to create them is deleted, is idle for - * too long, begins a new transaction, or becomes too old. When any of these happen, it is not + * too long, begins a new transaction, or becomes too old. When any of these happen, it isn't * possible to resume the read, and the whole operation must be restarted from the beginning. * *

                                Sample code: @@ -2256,13 +2279,13 @@ public final PartitionResponse partitionRead(PartitionReadRequest request) { * Creates a set of partition tokens that can be used to execute a read operation in parallel. * Each of the returned partition tokens can be used by * [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a subset of the read result - * to read. The same session and read-only transaction must be used by the PartitionReadRequest - * used to create the partition tokens and the ReadRequests that use the partition tokens. There + * to read. The same session and read-only transaction must be used by the `PartitionReadRequest` + * used to create the partition tokens and the `ReadRequests` that use the partition tokens. There * are no ordering guarantees on rows returned among the returned partition tokens, or even within - * each individual StreamingRead call issued with a partition_token. + * each individual `StreamingRead` call issued with a `partition_token`. * *

                                Partition tokens become invalid when the session used to create them is deleted, is idle for - * too long, begins a new transaction, or becomes too old. When any of these happen, it is not + * too long, begins a new transaction, or becomes too old. When any of these happen, it isn't * possible to resume the read, and the whole operation must be restarted from the beginning. * *

                                Sample code: @@ -2301,14 +2324,14 @@ public final UnaryCallable partitionRea * Batches the supplied mutation groups in a collection of efficient transactions. All mutations * in a group are committed atomically. However, mutations across groups can be committed * non-atomically in an unspecified order and thus, they must be independent of each other. - * Partial failure is possible, i.e., some groups may have been committed successfully, while some - * may have failed. The results of individual batches are streamed into the response as the + * Partial failure is possible, that is, some groups might have been committed successfully, while + * some might have failed. The results of individual batches are streamed into the response as the * batches are applied. * - *

                                BatchWrite requests are not replay protected, meaning that each mutation group may be - * applied more than once. Replays of non-idempotent mutations may have undesirable effects. For - * example, replays of an insert mutation may produce an already exists error or if you use - * generated or commit timestamp-based keys, it may result in additional rows being added to the + *

                                `BatchWrite` requests are not replay protected, meaning that each mutation group can be + * applied more than once. Replays of non-idempotent mutations can have undesirable effects. For + * example, replays of an insert mutation can produce an already exists error or if you use + * generated or commit timestamp-based keys, it can result in additional rows being added to the * mutation's table. We recommend structuring your mutation groups to be idempotent to avoid this * issue. * diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java index 721e874e01e..49b7de0cd9f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -107,8 +107,8 @@ * }

                                * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. */ @Generated("by gapic-generator-java") public class SpannerSettings extends ClientSettings { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java index 286b948aaa9..5379035e913 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerCallableFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerCallableFactory.java index cd0587f6e98..afb24becec4 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerCallableFactory.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java index 6d7cc8d0bc3..58d8d27c858 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -74,6 +74,7 @@ public class GrpcSpannerStub extends SpannerStub { .setRequestMarshaller( ProtoUtils.marshaller(CreateSessionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Session.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -85,6 +86,7 @@ public class GrpcSpannerStub extends SpannerStub { ProtoUtils.marshaller(BatchCreateSessionsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(BatchCreateSessionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor getSessionMethodDescriptor = @@ -93,6 +95,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/GetSession") .setRequestMarshaller(ProtoUtils.marshaller(GetSessionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Session.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -103,6 +106,7 @@ public class GrpcSpannerStub extends SpannerStub { .setRequestMarshaller(ProtoUtils.marshaller(ListSessionsRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ListSessionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor deleteSessionMethodDescriptor = @@ -111,6 +115,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/DeleteSession") .setRequestMarshaller(ProtoUtils.marshaller(DeleteSessionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor executeSqlMethodDescriptor = @@ -119,6 +124,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/ExecuteSql") .setRequestMarshaller(ProtoUtils.marshaller(ExecuteSqlRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(ResultSet.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -128,6 +134,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/ExecuteStreamingSql") .setRequestMarshaller(ProtoUtils.marshaller(ExecuteSqlRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(PartialResultSet.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -139,6 +146,7 @@ public class GrpcSpannerStub extends SpannerStub { ProtoUtils.marshaller(ExecuteBatchDmlRequest.getDefaultInstance())) .setResponseMarshaller( ProtoUtils.marshaller(ExecuteBatchDmlResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor readMethodDescriptor = @@ -147,6 +155,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/Read") .setRequestMarshaller(ProtoUtils.marshaller(ReadRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(ResultSet.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -156,6 +165,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/StreamingRead") .setRequestMarshaller(ProtoUtils.marshaller(ReadRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(PartialResultSet.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -166,6 +176,7 @@ public class GrpcSpannerStub extends SpannerStub { .setRequestMarshaller( ProtoUtils.marshaller(BeginTransactionRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Transaction.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor commitMethodDescriptor = @@ -174,6 +185,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/Commit") .setRequestMarshaller(ProtoUtils.marshaller(CommitRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(CommitResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor rollbackMethodDescriptor = @@ -182,6 +194,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/Rollback") .setRequestMarshaller(ProtoUtils.marshaller(RollbackRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -192,6 +205,7 @@ public class GrpcSpannerStub extends SpannerStub { .setRequestMarshaller( ProtoUtils.marshaller(PartitionQueryRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(PartitionResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -202,6 +216,7 @@ public class GrpcSpannerStub extends SpannerStub { .setRequestMarshaller( ProtoUtils.marshaller(PartitionReadRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(PartitionResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private static final MethodDescriptor @@ -211,6 +226,7 @@ public class GrpcSpannerStub extends SpannerStub { .setFullMethodName("google.spanner.v1.Spanner/BatchWrite") .setRequestMarshaller(ProtoUtils.marshaller(BatchWriteRequest.getDefaultInstance())) .setResponseMarshaller(ProtoUtils.marshaller(BatchWriteResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) .build(); private final UnaryCallable createSessionCallable; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerCallableFactory.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerCallableFactory.java index 4368496c416..df602575039 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerCallableFactory.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java index 5ba7eb584af..767dab584e2 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java index e3e1edd3008..aa3c5b0fe15 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java index 004f1e09756..87a681734b4 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,6 +35,7 @@ import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.LibraryMetadata; import com.google.api.gax.rpc.PageContext; import com.google.api.gax.rpc.PagedCallSettings; import com.google.api.gax.rpc.PagedListDescriptor; @@ -125,10 +126,11 @@ * }
                                * * 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. + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. */ @Generated("by gapic-generator-java") +@SuppressWarnings("CanonicalDuration") public class SpannerStubSettings extends StubSettings { /** The default scopes of the service. */ private static final ImmutableList DEFAULT_SERVICE_SCOPES = @@ -422,6 +424,14 @@ protected SpannerStubSettings(Builder settingsBuilder) throws IOException { batchWriteSettings = settingsBuilder.batchWriteSettings().build(); } + @Override + protected LibraryMetadata getLibraryMetadata() { + return LibraryMetadata.newBuilder() + .setArtifactName("com.google.cloud:google-cloud-spanner") + .setRepository("googleapis/java-spanner") + .build(); + } + /** Builder for SpannerStubSettings. */ public static class Builder extends StubSettings.Builder { private final ImmutableList> unaryMethodSettingsBuilders; diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json index 15e53bae299..2377603cc28 100644 --- a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json @@ -1034,6 +1034,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnforceNamingStyle", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnumType", "queryAllDeclaredConstructors": true, @@ -1088,6 +1097,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$DefaultSymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults", "queryAllDeclaredConstructors": true, @@ -1205,6 +1241,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FieldOptions$JSType", "queryAllDeclaredConstructors": true, @@ -1511,6 +1565,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$SymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption", "queryAllDeclaredConstructors": true, @@ -1601,6 +1664,51 @@ "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.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, @@ -1619,6 +1727,24 @@ "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.rpc.Status", "queryAllDeclaredConstructors": true, @@ -1637,6 +1763,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.AddSplitPointsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.Backup", "queryAllDeclaredConstructors": true, @@ -1682,6 +1844,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.BackupSchedule", "queryAllDeclaredConstructors": true, @@ -2213,6 +2393,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.ListBackupOperationsRequest", "queryAllDeclaredConstructors": true, @@ -2555,6 +2771,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints$Key", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.SplitPoints$Key$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.UpdateBackupRequest", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json index 1a2d3dd10d9..489454bd09e 100644 --- a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json @@ -1034,6 +1034,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnforceNamingStyle", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnumType", "queryAllDeclaredConstructors": true, @@ -1088,6 +1097,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$DefaultSymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults", "queryAllDeclaredConstructors": true, @@ -1205,6 +1241,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FieldOptions$JSType", "queryAllDeclaredConstructors": true, @@ -1511,6 +1565,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$SymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption", "queryAllDeclaredConstructors": true, @@ -1889,6 +1952,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.FreeInstanceMetadata", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.instance.v1.FreeInstanceMetadata$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.instance.v1.FreeInstanceMetadata$ExpireBehavior", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.FulfillmentPeriod", "queryAllDeclaredConstructors": true, @@ -1988,6 +2078,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.Instance$InstanceType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.Instance$State", "queryAllDeclaredConstructors": true, @@ -2015,6 +2114,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.InstanceConfig$FreeInstanceAvailability", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.instance.v1.InstanceConfig$QuorumType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.InstanceConfig$State", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json index bcbb239a5be..71bc0fe83f6 100644 --- a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json @@ -647,6 +647,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnforceNamingStyle", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnumType", "queryAllDeclaredConstructors": true, @@ -701,6 +710,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$DefaultSymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults", "queryAllDeclaredConstructors": true, @@ -818,6 +854,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$FieldOptions$JSType", "queryAllDeclaredConstructors": true, @@ -1124,6 +1178,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.protobuf.DescriptorProtos$SymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption", "queryAllDeclaredConstructors": true, @@ -1403,6 +1466,240 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.CacheUpdate", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.CacheUpdate$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$ColumnMetadata", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$ColumnMetadata$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$Mod", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$Mod$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$ModType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$ModValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$ModValue$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$DataChangeRecord$ValueCaptureType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$HeartbeatRecord", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$HeartbeatRecord$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEndRecord", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEndRecord$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEventRecord", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEventRecord$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEventRecord$MoveInEvent", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEventRecord$MoveInEvent$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEventRecord$MoveOutEvent", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionEventRecord$MoveOutEvent$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionStartRecord", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.ChangeStreamRecord$PartitionStartRecord$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.CommitRequest", "queryAllDeclaredConstructors": true, @@ -1691,6 +1988,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Group", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Group$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.KeyRange", "queryAllDeclaredConstructors": true, @@ -1709,6 +2024,60 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.KeyRecipe", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part$NullOrder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.KeyRecipe$Part$Order", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.KeySet", "queryAllDeclaredConstructors": true, @@ -1790,6 +2159,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Mutation$Ack", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Mutation$Ack$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Mutation$Builder", "queryAllDeclaredConstructors": true, @@ -1817,6 +2204,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Mutation$Send", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Mutation$Send$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Mutation$Write", "queryAllDeclaredConstructors": true, @@ -2006,6 +2411,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult$IndexAdvice", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.QueryAdvisorResult$IndexAdvice$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.QueryPlan", "queryAllDeclaredConstructors": true, @@ -2024,6 +2465,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Range", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Range$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.ReadRequest", "queryAllDeclaredConstructors": true, @@ -2060,6 +2519,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.RecipeList", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RecipeList$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.RequestOptions", "queryAllDeclaredConstructors": true, @@ -2078,6 +2555,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.RequestOptions$ClientContext", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RequestOptions$ClientContext$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.RequestOptions$Priority", "queryAllDeclaredConstructors": true, @@ -2159,6 +2654,42 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.RoutingHint", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RoutingHint$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RoutingHint$SkippedTablet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.RoutingHint$SkippedTablet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Session", "queryAllDeclaredConstructors": true, @@ -2213,6 +2744,33 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.Tablet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Tablet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.v1.Tablet$Role", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.Transaction", "queryAllDeclaredConstructors": true, @@ -2249,6 +2807,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.TransactionOptions$IsolationLevel", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.TransactionOptions$PartitionedDml", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner/grpc-gcp-reflect-config.json b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner/grpc-gcp-reflect-config.json new file mode 100644 index 00000000000..a92f2c29737 --- /dev/null +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner/grpc-gcp-reflect-config.json @@ -0,0 +1,56 @@ +[ + { + "name": "com.google.cloud.grpc.proto.ApiConfig", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.ApiConfig$Builder", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.ChannelPoolConfig", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.ChannelPoolConfig$Builder", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.MethodConfig", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.MethodConfig$Builder", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.AffinityConfig", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.AffinityConfig$Builder", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.google.cloud.grpc.proto.AffinityConfig$Command", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + } +] diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/native-image.properties b/google-cloud-spanner/src/main/resources/META-INF/native-image/native-image.properties index 0bcf872e79b..566244d3e59 100644 --- a/google-cloud-spanner/src/main/resources/META-INF/native-image/native-image.properties +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/native-image.properties @@ -1,4 +1,6 @@ Args = --initialize-at-build-time=com.google.cloud.spanner.IntegrationTestEnv,\ org.junit.experimental.categories.CategoryValidator,\ - org.junit.validator.AnnotationValidator \ + org.junit.validator.AnnotationValidator,\ + java.lang.annotation.Annotation \ + -H:ReflectionConfigurationResources=${.}/com.google.cloud.spanner/grpc-gcp-reflect-config.json \ --features=com.google.cloud.spanner.nativeimage.SpannerFeature diff --git a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json index 7998d50c2b8..bf7fb8968bc 100644 --- a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json +++ b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json @@ -47,6 +47,15 @@ "method": "statementShowStatementTimeout", "exampleStatements": ["show variable statement_timeout"] }, + { + "name": "SHOW VARIABLE TRANSACTION_TIMEOUT", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_TRANSACTION_TIMEOUT", + "regex": "(?is)\\A\\s*show\\s+variable\\s+transaction_timeout\\s*\\z", + "method": "statementShowTransactionTimeout", + "exampleStatements": ["show variable transaction_timeout"] + }, { "name": "SHOW VARIABLE READ_TIMESTAMP", "executorName": "ClientSideStatementNoParamExecutor", @@ -249,13 +258,26 @@ "exampleStatements": ["run partitioned query select col1, col2 from my_table"] }, { - "name": "BEGIN TRANSACTION", - "executorName": "ClientSideStatementNoParamExecutor", + "name": "BEGIN [TRANSACTION] [ISOLATION LEVEL isolation_level]", + "executorName": "ClientSideStatementBeginExecutor", "resultType": "NO_RESULT", "statementType": "BEGIN", - "regex": "(?is)\\A\\s*(?:begin|start)(?:\\s+transaction)?\\s*\\z", + "regex": "(?is)\\A\\s*(?:begin|start)(?:\\s+transaction)?(?:\\s+isolation\\s+level\\s+(repeatable\\s+read|serializable))?\\s*\\z", "method": "statementBeginTransaction", - "exampleStatements": ["begin", "start", "begin transaction", "start transaction"] + "exampleStatements": [ + "begin", + "start", + "begin transaction", + "start transaction", + "begin isolation level repeatable read", + "begin transaction isolation level repeatable read", + "begin isolation level serializable", + "begin transaction isolation level serializable", + "start isolation level repeatable read", + "start transaction isolation level repeatable read", + "start isolation level serializable", + "start transaction isolation level serializable" + ] }, { "name": "COMMIT TRANSACTION", @@ -415,6 +437,31 @@ "converterName": "ClientSideStatementValueConverters$DurationConverter" } }, + { + "name": "SET TRANSACTION_TIMEOUT = ''|NULL", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_TRANSACTION_TIMEOUT", + "regex": "(?is)\\A\\s*set\\s+transaction_timeout\\s*(?:=)\\s*(.*)\\z", + "method": "statementSetTransactionTimeout", + "exampleStatements": [ + "set transaction_timeout=null", + "set transaction_timeout = null ", + "set transaction_timeout='1s'", + "set transaction_timeout = '1s' ", + "set transaction_timeout=100", + "set transaction_timeout = 100 ", + "set transaction_timeout='100ms'", + "set transaction_timeout='10000us'", + "set transaction_timeout='9223372036854775807ns'" + ], + "setStatement": { + "propertyName": "TRANSACTION_TIMEOUT", + "separator": "=", + "allowedValues": "('(\\d{1,19})(s|ms|us|ns)'|\\d{1,19}|NULL)", + "converterName": "ClientSideStatementValueConverters$DurationConverter" + } + }, { "name": "SET TRANSACTION READ ONLY|READ WRITE", "executorName": "ClientSideStatementSetExecutor", @@ -706,6 +753,54 @@ "converterName": "ClientSideStatementValueConverters$BooleanConverter" } }, + { + "name": "SET [LOCAL] BATCH_DML_UPDATE_COUNT = ", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_BATCH_DML_UPDATE_COUNT", + "regex": "(?is)\\A\\s*set\\s+(local\\s+)?batch_dml_update_count\\s*(?:=)\\s*(.*)\\z", + "method": "statementSetBatchDmlUpdateCount", + "exampleStatements": [ + "set local batch_dml_update_count = 0", + "set local batch_dml_update_count = 100", + "set batch_dml_update_count = 1", + "set batch_dml_update_count = 100" + ], + "examplePrerequisiteStatements": ["set readonly = false", "set autocommit = false"], + "setStatement": { + "propertyName": "BATCH_DML_UPDATE_COUNT", + "separator": "=", + "allowedValues": "(\\d{1,19})", + "converterName": "ClientSideStatementValueConverters$LongConverter" + } + }, + { + "name": "SHOW VARIABLE READ_LOCK_MODE", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_READ_LOCK_MODE", + "regex": "(?is)\\A\\s*show\\s+variable\\s+read_lock_mode\\s*\\z", + "method": "statementShowReadLockMode", + "exampleStatements": ["show variable read_lock_mode"] + }, + { + "name": "SET READ_LOCK_MODE = 'OPTIMISTIC'|'PESSIMISTIC'|'UNSPECIFIED'", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_READ_LOCK_MODE", + "regex": "(?is)\\A\\s*set\\s+read_lock_mode\\s*(?:=)\\s*(.*)\\z", + "method": "statementSetReadLockMode", + "exampleStatements": [ + "set read_lock_mode='OPTIMISTIC'", + "set read_lock_mode='PESSIMISTIC'", + "set read_lock_mode='UNSPECIFIED'"], + "setStatement": { + "propertyName": "READ_LOCK_MODE", + "separator": "=", + "allowedValues": "'(OPTIMISTIC|PESSIMISTIC|UNSPECIFIED|READ_LOCK_MODE_UNSPECIFIED)'", + "converterName": "ClientSideStatementValueConverters$ReadLockModeConverter" + } + }, { "name": "SHOW VARIABLE DATA_BOOST_ENABLED", "executorName": "ClientSideStatementNoParamExecutor", diff --git a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json index 1c9dea19597..f5246d5a0cc 100644 --- a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json +++ b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json @@ -47,6 +47,15 @@ "method": "statementShowStatementTimeout", "exampleStatements": ["show statement_timeout","show variable statement_timeout"] }, + { + "name": "SHOW [VARIABLE] SPANNER.TRANSACTION_TIMEOUT", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_TRANSACTION_TIMEOUT", + "regex": "(?is)\\A\\s*show\\s+(?:variable\\s+)?spanner\\.transaction_timeout\\s*\\z", + "method": "statementShowTransactionTimeout", + "exampleStatements": ["show spanner.transaction_timeout","show variable spanner.transaction_timeout"] + }, { "name": "SHOW [VARIABLE] SPANNER.READ_TIMESTAMP", "executorName": "ClientSideStatementNoParamExecutor", @@ -176,6 +185,15 @@ "method": "statementShowSavepointSupport", "exampleStatements": ["show spanner.savepoint_support","show variable spanner.savepoint_support"] }, + { + "name": "SHOW [VARIABLE] SPANNER.READ_LOCK_MODE", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_READ_LOCK_MODE", + "regex": "(?is)\\A\\s*show\\s+(?:variable\\s+)?spanner\\.read_lock_mode\\s*\\z", + "method": "statementShowReadLockMode", + "exampleStatements": ["show spanner.read_lock_mode","show variable spanner.read_lock_mode"] + }, { "name": "SHOW [VARIABLE] SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE", "executorName": "ClientSideStatementNoParamExecutor", @@ -230,6 +248,15 @@ "method": "statementShowTransactionIsolationLevel", "exampleStatements": ["show transaction isolation level","show variable transaction isolation level"] }, + { + "name": "SHOW [VARIABLE] DEFAULT_TRANSACTION_ISOLATION", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_DEFAULT_TRANSACTION_ISOLATION", + "regex": "(?is)\\A\\s*show\\s+(?:variable\\s+)?default_transaction_isolation\\s*\\z", + "method": "statementShowDefaultTransactionIsolation", + "exampleStatements": ["show default_transaction_isolation","show variable default_transaction_isolation"] + }, { "name": "EXPLAIN ", "executorName": "ClientSideStatementExplainExecutor", @@ -267,11 +294,11 @@ "exampleStatements": [] }, { - "name": "{START | BEGIN} [TRANSACTION | WORK] [{ (READ ONLY|READ WRITE) [[,] (ISOLATION LEVEL (DEFAULT|SERIALIZABLE))] [[,] NOT DEFERRABLE]}]", + "name": "{START | BEGIN} [TRANSACTION | WORK] [{ (READ ONLY|READ WRITE) [[,] (ISOLATION LEVEL (DEFAULT|SERIALIZABLE|REPEATABLE READ))] [[,] NOT DEFERRABLE]}]", "executorName": "ClientSideStatementPgBeginExecutor", "resultType": "NO_RESULT", "statementType": "BEGIN", - "regex": "(?is)\\A\\s*(?:begin|start)(?:\\s+transaction|\\s+work)?((?:(?:\\s+|\\s*,\\s*)read\\s+only|(?:\\s+|\\s*,\\s*)read\\s+write|(?:\\s+|\\s*,\\s*)isolation\\s+level\\s+default|(?:\\s+|\\s*,\\s*)isolation\\s+level\\s+serializable|(?:\\s+|\\s*,\\s*)not\\s+deferrable)*)?\\s*\\z", + "regex": "(?is)\\A\\s*(?:begin|start)(?:\\s+transaction|\\s+work)?((?:(?:\\s+|\\s*,\\s*)read\\s+only|(?:\\s+|\\s*,\\s*)read\\s+write|(?:\\s+|\\s*,\\s*)isolation\\s+level\\s+default|(?:\\s+|\\s*,\\s*)isolation\\s+level\\s+serializable|(?:\\s+|\\s*,\\s*)isolation\\s+level\\s+repeatable\\s+read|(?:\\s+|\\s*,\\s*)not\\s+deferrable)*)?\\s*\\z", "method": "statementBeginPgTransaction", "exampleStatements": [ "begin", "start", "begin transaction", "start transaction", "begin work", "start work", @@ -279,9 +306,12 @@ "begin read write", "start read write", "begin transaction read write", "start transaction read write", "begin work read write", "start work read write", "begin isolation level default", "start isolation level default", "begin transaction isolation level default", "start transaction isolation level default", "begin work isolation level default", "start work isolation level default", "begin isolation level serializable", "start isolation level serializable", "begin transaction isolation level serializable", "start transaction isolation level serializable", "begin work isolation level serializable", "start work isolation level serializable", + "begin isolation level repeatable read", "start isolation level repeatable read", "begin transaction isolation level repeatable read", "start transaction isolation level repeatable read", "begin work isolation level repeatable read", "start work isolation level repeatable read", "begin isolation level default read write", "start isolation level default read only", "begin transaction isolation level default read only", "start transaction isolation level default read write", "begin work isolation level default read write", "start work isolation level default read only", "begin isolation level serializable read write", "start isolation level serializable read write", "begin transaction isolation level serializable read only", "start transaction isolation level serializable read write", "begin work isolation level serializable read write", "start work isolation level serializable read only", + "begin isolation level repeatable read read write", "start isolation level repeatable read read write", "begin transaction isolation level repeatable read read only", "start transaction isolation level repeatable read read write", "begin work isolation level repeatable read read write", "start work isolation level repeatable read read only", "begin isolation level serializable, read write", "start isolation level serializable, read write", "begin transaction isolation level serializable, read only", "start transaction isolation level serializable, read write", "begin work isolation level serializable, read write", "start work isolation level serializable, read only", + "begin isolation level repeatable read, read write", "start isolation level repeatable read, read write", "begin transaction isolation level repeatable read, read only", "start transaction isolation level repeatable read, read write", "begin work isolation level repeatable read, read write", "start work isolation level repeatable read, read only", "begin not deferrable", "start not deferrable", "begin transaction not deferrable", "start transaction not deferrable", "begin work not deferrable", "start work not deferrable", "begin read only not deferrable", "start read only not deferrable", "begin transaction read only not deferrable", "start transaction read only not deferrable", "begin work read only not deferrable", "start work read only not deferrable", "begin read write not deferrable", "start read write not deferrable", "begin transaction read write not deferrable", "start transaction read write not deferrable", "begin work read write not deferrable", "start work read write not deferrable", @@ -297,7 +327,8 @@ "begin not deferrable isolation level serializable", "start isolation level serializable", "begin transaction not deferrable isolation level serializable", "start transaction isolation level serializable", "begin work not deferrable isolation level serializable", "start work isolation level serializable", "begin not deferrable isolation level default read write", "start isolation level default read only", "begin transaction not deferrable isolation level default read only", "start transaction isolation level default read write", "begin work not deferrable isolation level default read write", "start work isolation level default read only", "begin not deferrable isolation level serializable read write", "start isolation level serializable read write", "begin transaction not deferrable isolation level serializable read only", "start transaction isolation level serializable read write", "begin work not deferrable isolation level serializable read write", "start work isolation level serializable read only", - "begin not deferrable isolation level serializable, read write", "start isolation level serializable, read write", "begin transaction not deferrable isolation level serializable, read only", "start transaction isolation level serializable, read write", "begin work not deferrable isolation level serializable, read write", "start work isolation level serializable, read only" + "begin not deferrable isolation level serializable, read write", "start isolation level serializable, read write", "begin transaction not deferrable isolation level serializable, read only", "start transaction isolation level serializable, read write", "begin work not deferrable isolation level serializable, read write", "start work isolation level serializable, read only", + "begin not deferrable isolation level repeatable read, read write", "start isolation level repeatable read, read write", "begin transaction not deferrable isolation level repeatable read, read only", "start transaction isolation level repeatable read, read write", "begin work not deferrable isolation level repeatable read, read write", "start work isolation level repeatable read, read only" ] }, { @@ -487,38 +518,70 @@ } }, { - "name": "SET TRANSACTION { (READ ONLY|READ WRITE) [[,] (ISOLATION LEVEL (DEFAULT|SERIALIZABLE))] }", + "name": "SET SPANNER.TRANSACTION_TIMEOUT =|TO ''|INT8|DEFAULT", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_TRANSACTION_TIMEOUT", + "regex": "(?is)\\A\\s*set\\s+spanner\\.transaction_timeout(?:\\s*=\\s*|\\s+to\\s+)(.*)\\z", + "method": "statementSetTransactionTimeout", + "exampleStatements": [ + "set spanner.transaction_timeout=default", + "set spanner.transaction_timeout = default ", + "set spanner.transaction_timeout = DEFAULT ", + "set spanner.transaction_timeout='1s'", + "set spanner.transaction_timeout = '1s' ", + "set spanner.transaction_timeout='100ms'", + "set spanner.transaction_timeout=100", + "set spanner.transaction_timeout = 100 ", + "set spanner.transaction_timeout='10000us'", + "set spanner.transaction_timeout='9223372036854775807ns'", + "set spanner.transaction_timeout to default", + "set spanner.transaction_timeout to '1s'", + "set spanner.transaction_timeout to '100ms'", + "set spanner.transaction_timeout to 100", + "set spanner.transaction_timeout to '10000us'", + "set spanner.transaction_timeout to '9223372036854775807ns'" + ], + "setStatement": { + "propertyName": "SPANNER.TRANSACTION_TIMEOUT", + "separator": "(?:=|\\s+TO\\s+)", + "allowedValues": "('(\\d{1,19})(s|ms|us|ns)'|\\d{1,19}|DEFAULT)", + "converterName": "ClientSideStatementValueConverters$PgDurationConverter" + } + }, + { + "name": "SET TRANSACTION { (READ ONLY|READ WRITE) [[,] (ISOLATION LEVEL (DEFAULT|SERIALIZABLE|REPEATABLE READ))] }", "executorName": "ClientSideStatementSetExecutor", "resultType": "NO_RESULT", "statementType": "SET_TRANSACTION_MODE", "regex": "(?is)\\A\\s*set\\s+transaction\\s*(?:\\s+)\\s*(.*)\\z", "method": "statementSetPgTransactionMode", - "exampleStatements": ["set transaction read only", "set transaction read write", "set transaction isolation level default", "set transaction isolation level serializable"], + "exampleStatements": ["set transaction read only", "set transaction read write", "set transaction isolation level default", "set transaction isolation level serializable", "set transaction isolation level repeatable read"], "examplePrerequisiteStatements": ["set autocommit = false"], "setStatement": { "propertyName": "TRANSACTION", "separator": "\\s+", - "allowedValues": "(((?:\\s*|\\s*,\\s*)READ\\s+ONLY|(?:\\s*|\\s*,\\s*)READ\\s+WRITE|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+DEFAULT|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+SERIALIZABLE)+)", + "allowedValues": "(((?:\\s*|\\s*,\\s*)READ\\s+ONLY|(?:\\s*|\\s*,\\s*)READ\\s+WRITE|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+DEFAULT|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+SERIALIZABLE|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+REPEATABLE\\s+READ)+)", "converterName": "ClientSideStatementValueConverters$PgTransactionModeConverter" } }, { - "name": "SET SESSION CHARACTERISTICS AS TRANSACTION { (READ ONLY|READ WRITE) [[,] (ISOLATION LEVEL (DEFAULT|SERIALIZABLE))] }", + "name": "SET SESSION CHARACTERISTICS AS TRANSACTION { (READ ONLY|READ WRITE) [[,] (ISOLATION LEVEL (DEFAULT|SERIALIZABLE|REPEATABLE READ))] }", "executorName": "ClientSideStatementSetExecutor", "resultType": "NO_RESULT", "statementType": "SET_READONLY", "regex": "(?is)\\A\\s*set\\s+session\\s+characteristics\\s+as\\s+transaction\\s*(?:\\s+)\\s*(.*)\\z", "method": "statementSetPgSessionCharacteristicsTransactionMode", - "exampleStatements": ["set session characteristics as transaction read only", "set session characteristics as transaction read write", "set session characteristics as transaction isolation level default", "set session characteristics as transaction isolation level serializable"], + "exampleStatements": ["set session characteristics as transaction read only", "set session characteristics as transaction read write", "set session characteristics as transaction isolation level default", "set session characteristics as transaction isolation level serializable", "set session characteristics as transaction isolation level repeatable read"], "setStatement": { "propertyName": "SESSION\\s+CHARACTERISTICS\\s+AS\\s+TRANSACTION", "separator": "\\s+", - "allowedValues": "(((?:\\s*|\\s*,\\s*)READ\\s+ONLY|(?:\\s*|\\s*,\\s*)READ\\s+WRITE|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+DEFAULT|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+SERIALIZABLE)+)", + "allowedValues": "(((?:\\s*|\\s*,\\s*)READ\\s+ONLY|(?:\\s*|\\s*,\\s*)READ\\s+WRITE|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+DEFAULT|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+SERIALIZABLE|(?:\\s*|\\s*,\\s*)ISOLATION\\s+LEVEL\\s+REPEATABLE\\s+READ)+)", "converterName": "ClientSideStatementValueConverters$PgTransactionModeConverter" } }, { - "name": "SET DEFAULT_TRANSACTION_ISOLATION =|TO 'SERIALIZABLE'|SERIALIZABLE|DEFAULT", + "name": "SET DEFAULT_TRANSACTION_ISOLATION =|TO 'SERIALIZABLE'|SERIALIZABLE|'REPEATABLE READ'|REPEATABLE READ|DEFAULT", "executorName": "ClientSideStatementSetExecutor", "resultType": "NO_RESULT", "statementType": "SET_READONLY", @@ -530,13 +593,18 @@ "set default_transaction_isolation to 'serializable'", "set default_transaction_isolation = 'serializable'", "set default_transaction_isolation = \"SERIALIZABLE\"", + "set default_transaction_isolation=repeatable read", + "set default_transaction_isolation to repeatable read", + "set default_transaction_isolation to 'repeatable read'", + "set default_transaction_isolation = 'repeatable read'", + "set default_transaction_isolation = \"REPEATABLE READ\"", "set default_transaction_isolation = DEFAULT", "set default_transaction_isolation to DEFAULT" ], "setStatement": { "propertyName": "default_transaction_isolation", "separator": "(?:=|\\s+TO\\s+)", - "allowedValues": "(SERIALIZABLE|'SERIALIZABLE'|\"SERIALIZABLE\"|DEFAULT)", + "allowedValues": "(SERIALIZABLE|'SERIALIZABLE'|\"SERIALIZABLE\"|REPEATABLE\\s+READ|'REPEATABLE\\s+READ'|\"REPEATABLE\\s+READ\"|DEFAULT)", "converterName": "ClientSideStatementValueConverters$PgTransactionIsolationConverter" } }, @@ -825,6 +893,28 @@ "converterName": "ClientSideStatementValueConverters$SavepointSupportConverter" } }, + { + "name": "SET SPANNER.READ_LOCK_MODE =|TO 'OPTIMISTIC'|'PESSIMISTIC'|'UNSPECIFIED'", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_READ_LOCK_MODE", + "regex": "(?is)\\A\\s*set\\s+spanner\\.read_lock_mode(?:\\s*=\\s*|\\s+to\\s+)(.*)\\z", + "method": "statementSetReadLockMode", + "exampleStatements": [ + "set spanner.read_lock_mode='OPTIMISTIC'", + "set spanner.read_lock_mode='PESSIMISTIC'", + "set spanner.read_lock_mode='UNSPECIFIED'", + "set spanner.read_lock_mode to 'OPTIMISTIC'", + "set spanner.read_lock_mode to 'PESSIMISTIC'", + "set spanner.read_lock_mode to 'UNSPECIFIED'" + ], + "setStatement": { + "propertyName": "SPANNER.READ_LOCK_MODE", + "separator": "(?:=|\\s+TO\\s+)", + "allowedValues": "'(OPTIMISTIC|PESSIMISTIC|UNSPECIFIED|READ_LOCK_MODE_UNSPECIFIED)'", + "converterName": "ClientSideStatementValueConverters$ReadLockModeConverter" + } + }, { "name": "SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = TRUE|FALSE", "executorName": "ClientSideStatementSetExecutor", @@ -885,6 +975,28 @@ "converterName": "ClientSideStatementValueConverters$LongConverter" } }, + { + "name": "SET [LOCAL] SPANNER.BATCH_DML_UPDATE_COUNT =|TO ", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_BATCH_DML_UPDATE_COUNT", + "regex": "(?is)\\A\\s*set\\s+((?:session|local)\\s+)?spanner\\.batch_dml_update_count(?:\\s*=\\s*|\\s+to\\s+)(.*)\\z", + "method": "statementSetBatchDmlUpdateCount", + "exampleStatements": [ + "set local spanner.batch_dml_update_count = 0", + "set local spanner.batch_dml_update_count = 100", + "set local spanner.batch_dml_update_count to 1", + "set spanner.batch_dml_update_count to 1", + "set spanner.batch_dml_update_count = 1" + ], + "examplePrerequisiteStatements": ["set spanner.readonly = false", "set autocommit = false"], + "setStatement": { + "propertyName": "SPANNER.BATCH_DML_UPDATE_COUNT", + "separator": "(?:=|\\s+TO\\s+)", + "allowedValues": "(\\d{1,19})", + "converterName": "ClientSideStatementValueConverters$LongConverter" + } + }, { "name": "SET SPANNER.AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = TRUE|FALSE", "executorName": "ClientSideStatementSetExecutor", diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java index 2296b2d4d6a..0474a807d2b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java @@ -52,7 +52,6 @@ public abstract class AbstractAsyncTransactionTest { static ExecutorService executor; Spanner spanner; - Spanner spannerWithEmptySessionPool; @BeforeClass public static void setup() throws Exception { @@ -99,24 +98,11 @@ public void before() { .setSessionPoolOption(SessionPoolOptions.newBuilder().setFailOnSessionLeak().build()) .build() .getService(); - spannerWithEmptySessionPool = - spanner - .getOptions() - .toBuilder() - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setFailOnSessionLeak() - .setMinSessions(0) - .setIncStep(1) - .build()) - .build() - .getService(); } @After public void after() { spanner.close(); - spannerWithEmptySessionPool.close(); mockSpanner.removeAllExecutionTimes(); mockSpanner.reset(); } @@ -124,9 +110,4 @@ public void after() { DatabaseClient client() { return spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); } - - DatabaseClient clientWithEmptySessionPool() { - return spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java index f50ef5e2090..80a376efa01 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java @@ -41,6 +41,7 @@ public abstract class AbstractLatencyBenchmark { static final int NUM_GRPC_CHANNELS = Integer.valueOf( MoreObjects.firstNonNull(System.getenv("SPANNER_TEST_JMH_NUM_GRPC_CHANNELS"), "4")); + /** * Total number of reads per test run for 1 thread. Increasing the value here will increase the * duration of the benchmark. For ex - With PARALLEL_THREADS = 2, TOTAL_READS_PER_RUN = 200, there diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java index 76d13e73869..7857054bcb0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java @@ -31,7 +31,6 @@ import io.grpc.Server; import io.grpc.inprocess.InProcessServerBuilder; import io.grpc.stub.StreamObserver; -import java.io.IOException; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.After; import org.junit.AfterClass; @@ -49,7 +48,7 @@ abstract class AbstractMockServerTest { protected Spanner spanner; @BeforeClass - public static void startMockServer() throws IOException { + public static void startMockServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockInstanceAdmin = new MockInstanceAdminImpl(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java new file mode 100644 index 00000000000..a5d3b62d98d --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java @@ -0,0 +1,117 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import com.google.api.gax.grpc.testing.LocalChannelProvider; +import com.google.cloud.NoCredentials; +import io.grpc.ForwardingServerCall; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Metadata; +import io.grpc.Server; +import io.grpc.ServerCall; +import io.grpc.ServerCallHandler; +import io.grpc.ServerInterceptor; +import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; +import java.net.InetSocketAddress; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; + +abstract class AbstractNettyMockServerTest { + protected static MockSpannerServiceImpl mockSpanner; + + protected static Server server; + protected static InetSocketAddress address; + static ExecutorService executor; + protected static LocalChannelProvider channelProvider; + protected static final AtomicReference fakeServerTiming = + new AtomicReference<>((float) (new Random().nextDouble() * 1000) + 1); + protected static final AtomicReference fakeAFEServerTiming = + new AtomicReference<>((float) new Random().nextInt(500) + 1); + + protected Spanner spanner; + + @BeforeClass + public static void startMockServer() throws Exception { + mockSpanner = new MockSpannerServiceImpl(); + mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. + + address = new InetSocketAddress("localhost", 0); + server = + NettyServerBuilder.forAddress(address) + .addService(mockSpanner) + .intercept( + new ServerInterceptor() { + @Override + public ServerCall.Listener interceptCall( + ServerCall serverCall, + Metadata headers, + ServerCallHandler serverCallHandler) { + return serverCallHandler.startCall( + new ForwardingServerCall.SimpleForwardingServerCall( + serverCall) { + @Override + public void sendHeaders(Metadata headers) { + headers.put( + Metadata.Key.of("server-timing", Metadata.ASCII_STRING_MARSHALLER), + String.format( + "afe; dur=%f, gfet4t7; dur=%f", + fakeAFEServerTiming.get(), fakeServerTiming.get())); + super.sendHeaders(headers); + } + }, + headers); + } + }) + .build() + .start(); + executor = Executors.newSingleThreadExecutor(); + } + + @AfterClass + public static void stopMockServer() throws InterruptedException { + server.shutdown(); + server.awaitTermination(); + executor.shutdown(); + } + + @Before + public void createSpannerInstance() { + String endpoint = address.getHostString() + ":" + server.getPort(); + spanner = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://" + endpoint) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption(SessionPoolOptions.newBuilder().setFailOnSessionLeak().build()) + .build() + .getService(); + } + + @After + public void cleanup() { + spanner.close(); + mockSpanner.reset(); + mockSpanner.removeAllExecutionTimes(); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java index ce7d6b300d1..b4bc7bf7bb6 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java @@ -18,6 +18,7 @@ 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.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -34,6 +35,7 @@ import com.google.spanner.v1.ExecuteSqlRequest.QueryMode; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.ReadRequest.LockHint; import com.google.spanner.v1.ReadRequest.OrderBy; import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.RequestOptions.Priority; @@ -136,6 +138,10 @@ String getTransactionTag() { public void setup() { SessionImpl session = mock(SessionImpl.class); when(session.getName()).thenReturn("session-1"); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions spannerOptions = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(spannerOptions); + when(session.getSpanner()).thenReturn(spanner); TestReadContextBuilder builder = new TestReadContextBuilder(); context = builder @@ -241,6 +247,21 @@ public void testGetReadRequestBuilderWithOrderBy() { assertEquals(OrderBy.ORDER_BY_NO_ORDER, request.getOrderBy()); } + @Test + public void testGetReadRequestBuilderWithLockHint() { + ReadRequest request = + ReadRequest.newBuilder() + .setSession( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .setTransaction(TransactionSelector.newBuilder().build()) + .setTable("table110115790") + .setIndex("index100346066") + .addAllColumns(new ArrayList()) + .setLockHintValue(2) + .build(); + assertEquals(LockHint.LOCK_HINT_EXCLUSIVE, request.getLockHint()); + } + @Test public void testGetExecuteBatchDmlRequestBuilderWithPriority() { ExecuteBatchDmlRequest.Builder request = @@ -250,6 +271,42 @@ public void testGetExecuteBatchDmlRequestBuilderWithPriority() { assertEquals(Priority.PRIORITY_LOW, request.getRequestOptions().getPriority()); } + @Test + public void testExecuteSqlLastStatement() { + assertFalse( + context + .getExecuteSqlRequestBuilder( + Statement.of("insert into test (id) values (1)"), + QueryMode.NORMAL, + Options.fromUpdateOptions(), + false) + .getLastStatement()); + assertTrue( + context + .getExecuteSqlRequestBuilder( + Statement.of("insert into test (id) values (1)"), + QueryMode.NORMAL, + Options.fromUpdateOptions(Options.lastStatement()), + false) + .getLastStatement()); + } + + @Test + public void testExecuteBatchDmlLastStatement() { + assertFalse( + context + .getExecuteBatchDmlRequestBuilder( + Collections.singleton(Statement.of("insert into test (id) values (1)")), + Options.fromUpdateOptions()) + .getLastStatements()); + assertTrue( + context + .getExecuteBatchDmlRequestBuilder( + Collections.singleton(Statement.of("insert into test (id) values (1)")), + Options.fromUpdateOptions(Options.lastStatement())) + .getLastStatements()); + } + public void executeSqlRequestBuilderWithRequestOptions() { ExecuteSqlRequest request = context @@ -269,6 +326,10 @@ public void executeSqlRequestBuilderWithRequestOptions() { public void executeSqlRequestBuilderWithRequestOptionsWithTxnTag() { SessionImpl session = mock(SessionImpl.class); when(session.getName()).thenReturn("session-1"); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions spannerOptions = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(spannerOptions); + when(session.getSpanner()).thenReturn(spanner); TestReadContextWithTagBuilder builder = new TestReadContextWithTagBuilder(); TestReadContextWithTag contextWithTag = builder @@ -292,6 +353,18 @@ public void executeSqlRequestBuilderWithRequestOptionsWithTxnTag() { assertThat(request.getRequestOptions().getTransactionTag()).isEqualTo("app=spanner,env=test"); } + @Test + public void testBuildRequestOptionsWithClientContext() { + RequestOptions.ClientContext clientContext = + RequestOptions.ClientContext.newBuilder() + .putSecureContext( + "key", com.google.protobuf.Value.newBuilder().setStringValue("value").build()) + .build(); + RequestOptions requestOptions = + context.buildRequestOptions(Options.fromQueryOptions(Options.clientContext(clientContext))); + assertEquals(clientContext, requestOptions.getClientContext()); + } + @Test public void testGetExecuteSqlRequestBuilderWithDirectedReadOptions() { ExecuteSqlRequest.Builder request = diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractStructReaderTypesTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractStructReaderTypesTest.java index 595bbcaf26a..66596cacb92 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractStructReaderTypesTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractStructReaderTypesTest.java @@ -36,6 +36,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.UUID; import java.util.function.Function; import javax.annotation.Nullable; import org.junit.Before; @@ -103,6 +104,15 @@ protected Date getDateInternal(int columnIndex) { return null; } + @Override + protected UUID getUuidInternal(int columnIndex) { + return null; + } + + protected Interval getIntervalInternal(int columnIndex) { + return null; + } + @Override protected T getProtoMessageInternal(int columnIndex, T message) { return null; @@ -206,6 +216,16 @@ protected List getDateListInternal(int columnIndex) { return null; } + @Override + protected List getUuidListInternal(int columnIndex) { + return null; + } + + @Override + protected List getIntervalListInternal(int columnIndex) { + return null; + } + @Override protected List getStructListInternal(int columnIndex) { return null; @@ -301,6 +321,20 @@ public static Collection parameters() { "getDate", Collections.singletonList("getValue") }, + { + Type.uuid(), + "getUuidInternal", + UUID.randomUUID(), + "getUuid", + Collections.singletonList("getValue") + }, + { + Type.interval(), + "getIntervalInternal", + Interval.parseFromString("P1Y2M3DT4H5M6.78912345S"), + "getInterval", + Collections.singletonList("getValue") + }, { Type.array(Type.bool()), "getBooleanArrayInternal", @@ -423,6 +457,23 @@ public static Collection parameters() { "getDateList", Collections.singletonList("getValue") }, + { + Type.array(Type.uuid()), + "getUuidListInternal", + Arrays.asList(UUID.randomUUID(), UUID.randomUUID()), + "getUuidList", + Collections.singletonList("getValue") + }, + { + Type.array(Type.interval()), + "getIntervalListInternal", + Arrays.asList( + Interval.parseFromString("P1Y2M3DT4H5M6.78912345S"), + Interval.parseFromString("P0Y"), + Interval.parseFromString("P-1Y2M-3DT-4H5M6.78912345S")), + "getIntervalList", + Collections.singletonList("getValue") + }, { Type.array(Type.struct(StructField.of("f1", Type.int64()))), "getStructListInternal", diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java index 0ba924ef740..74487283c1c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java @@ -104,7 +104,7 @@ public void tryNextNotAllowed() { new AsyncResultSetImpl( mockedProvider, mock(ResultSet.class), AsyncResultSetImpl.DEFAULT_BUFFER_SIZE)) { rs.setCallback(mock(Executor.class), mock(ReadyCallback.class)); - IllegalStateException e = assertThrows(IllegalStateException.class, () -> rs.tryNext()); + IllegalStateException e = assertThrows(IllegalStateException.class, rs::tryNext); assertThat(e.getMessage()).contains("tryNext may only be called from a DataReady callback."); } } @@ -152,7 +152,7 @@ public void toListAsync() throws InterruptedException, ExecutionException { } @Test - public void toListAsyncPropagatesError() throws InterruptedException { + public void toListAsyncPropagatesError() { ExecutorService executor = Executors.newFixedThreadPool(1); ResultSet delegate = mock(ResultSet.class); when(delegate.next()) @@ -326,10 +326,7 @@ public void testCallbackIsNotCalledWhilePaused() throws InterruptedException, Ex @Override public Boolean answer(InvocationOnMock invocation) throws Throwable { row++; - if (row > simulatedRows) { - return false; - } - return true; + return row <= simulatedRows; } }); when(delegate.getCurrentRowAsStruct()).thenReturn(mock(Struct.class)); @@ -345,17 +342,17 @@ public Boolean answer(InvocationOnMock invocation) throws Throwable { assertFalse(paused.get()); callbackCounter.incrementAndGet(); try { - while (true) { - switch (resultSet.tryNext()) { - case OK: - paused.set(true); - queue.put(new Object()); - return CallbackResponse.PAUSE; - case DONE: - return CallbackResponse.DONE; - case NOT_READY: - return CallbackResponse.CONTINUE; - } + switch (resultSet.tryNext()) { + case OK: + paused.set(true); + queue.put(new Object()); + return CallbackResponse.PAUSE; + case DONE: + return CallbackResponse.DONE; + case NOT_READY: + return CallbackResponse.CONTINUE; + default: + throw new IllegalStateException(); } } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); @@ -384,9 +381,8 @@ public Boolean answer(InvocationOnMock invocation) throws Throwable { } @Test - public void testCallbackIsNotCalledWhilePausedAndCanceled() - throws InterruptedException, ExecutionException { - Executor executor = Executors.newSingleThreadExecutor(); + public void testCallbackIsNotCalledWhilePausedAndCanceled() { + ExecutorService executor = Executors.newSingleThreadExecutor(); StreamingResultSet delegate = mock(StreamingResultSet.class); final AtomicInteger callbackCounter = new AtomicInteger(); @@ -414,6 +410,8 @@ public void testCallbackIsNotCalledWhilePausedAndCanceled() SpannerException exception = assertThrows(SpannerException.class, () -> get(callbackResult)); assertEquals(ErrorCode.CANCELLED, exception.getErrorCode()); assertEquals(1, callbackCounter.get()); + } finally { + executor.shutdown(); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java index d659e149282..562e90186cc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java @@ -60,17 +60,51 @@ public void clearRequests() { @Test public void testAsyncRunner_doesNotReturnCommitTimestampBeforeCommit() { AsyncRunner runner = client().runAsync(); - IllegalStateException e = - assertThrows(IllegalStateException.class, () -> runner.getCommitTimestamp()); - assertTrue(e.getMessage().contains("runAsync() has not yet been called")); + if (isMultiplexedSessionsEnabledForRW()) { + Throwable e = assertThrows(Throwable.class, () -> runner.getCommitTimestamp().get()); + // If the error occurs within the future, it gets wrapped in an ExecutionException. + // This happens when DelayedAsyncRunner is invoked while the multiplexed session is not yet + // created. + // If the error occurs before the future is created, it may throw an IllegalStateException + // instead. + assertTrue(e instanceof ExecutionException || e instanceof IllegalStateException); + if (e instanceof ExecutionException) { + Throwable cause = e.getCause(); + assertTrue(cause instanceof IllegalStateException); + assertTrue(cause.getMessage().contains("runAsync() has not yet been called")); + } else { + assertTrue(e.getMessage().contains("runAsync() has not yet been called")); + } + } else { + IllegalStateException e = + assertThrows(IllegalStateException.class, () -> runner.getCommitTimestamp()); + assertTrue(e.getMessage().contains("runAsync() has not yet been called")); + } } @Test public void testAsyncRunner_doesNotReturnCommitResponseBeforeCommit() { AsyncRunner runner = client().runAsync(); - IllegalStateException e = - assertThrows(IllegalStateException.class, () -> runner.getCommitResponse()); - assertTrue(e.getMessage().contains("runAsync() has not yet been called")); + if (isMultiplexedSessionsEnabledForRW()) { + Throwable e = assertThrows(Throwable.class, () -> runner.getCommitResponse().get()); + // If the error occurs within the future, it gets wrapped in an ExecutionException. + // This happens when DelayedAsyncRunner is invoked while the multiplexed session is not yet + // created. + // If the error occurs before the future is created, it may throw an IllegalStateException + // instead. + assertTrue(e instanceof ExecutionException || e instanceof IllegalStateException); + if (e instanceof ExecutionException) { + Throwable cause = e.getCause(); + assertTrue(cause instanceof IllegalStateException); + assertTrue(cause.getMessage().contains("runAsync() has not yet been called")); + } else { + assertTrue(e.getMessage().contains("runAsync() has not yet been called")); + } + } else { + IllegalStateException e = + assertThrows(IllegalStateException.class, () -> runner.getCommitResponse()); + assertTrue(e.getMessage().contains("runAsync() has not yet been called")); + } } @Test @@ -84,7 +118,7 @@ public void asyncRunnerUpdate() throws Exception { @Test public void asyncRunnerIsNonBlocking() throws Exception { mockSpanner.freeze(); - AsyncRunner runner = clientWithEmptySessionPool().runAsync(); + AsyncRunner runner = client().runAsync(); ApiFuture res = runner.runAsync( txn -> { @@ -182,7 +216,7 @@ public void asyncRunnerCommitAborted() throws Exception { @Test public void asyncRunnerUpdateAbortedWithoutGettingResult() throws Exception { final AtomicInteger attempt = new AtomicInteger(); - AsyncRunner runner = clientWithEmptySessionPool().runAsync(); + AsyncRunner runner = client().runAsync(); ApiFuture result = runner.runAsync( txn -> { @@ -201,7 +235,17 @@ public void asyncRunnerUpdateAbortedWithoutGettingResult() throws Exception { executor); assertThat(result.get()).isNull(); assertThat(attempt.get()).isEqualTo(2); - if (isMultiplexedSessionsEnabled()) { + if (isMultiplexedSessionsEnabledForRW()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + ExecuteSqlRequest.class, + // The retry will use an explicit BeginTransaction RPC because the first statement of + // the transaction did not return a transaction id during the initial attempt. + BeginTransactionRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class); + } else if (isMultiplexedSessionsEnabled()) { assertThat(mockSpanner.getRequestTypes()) .containsExactly( CreateSessionRequest.class, @@ -251,7 +295,7 @@ public void asyncRunnerCommitFails() throws Exception { @Test public void asyncRunnerWaitsUntilAsyncUpdateHasFinished() throws Exception { - AsyncRunner runner = clientWithEmptySessionPool().runAsync(); + AsyncRunner runner = client().runAsync(); ApiFuture res = runner.runAsync( txn -> { @@ -260,7 +304,11 @@ public void asyncRunnerWaitsUntilAsyncUpdateHasFinished() throws Exception { }, executor); res.get(); - if (isMultiplexedSessionsEnabled()) { + if (isMultiplexedSessionsEnabledForRW()) { + assertThat(mockSpanner.getRequestTypes()) + .containsAtLeast( + CreateSessionRequest.class, ExecuteSqlRequest.class, CommitRequest.class); + } else if (isMultiplexedSessionsEnabled()) { // The mock server could have received a CreateSession request for a multiplexed session, but // it could also be that that request has not yet reached the server. assertThat(mockSpanner.getRequestTypes()) @@ -286,7 +334,7 @@ public void asyncRunnerBatchUpdate() throws Exception { @Test public void asyncRunnerIsNonBlockingWithBatchUpdate() throws Exception { mockSpanner.freeze(); - AsyncRunner runner = clientWithEmptySessionPool().runAsync(); + AsyncRunner runner = client().runAsync(); ApiFuture res = runner.runAsync( txn -> { @@ -380,7 +428,7 @@ public void asyncRunnerWithBatchUpdateCommitAborted() throws Exception { @Test public void asyncRunnerBatchUpdateAbortedWithoutGettingResult() throws Exception { final AtomicInteger attempt = new AtomicInteger(); - AsyncRunner runner = clientWithEmptySessionPool().runAsync(); + AsyncRunner runner = client().runAsync(); ApiFuture result = runner.runAsync( txn -> { @@ -404,7 +452,17 @@ public void asyncRunnerBatchUpdateAbortedWithoutGettingResult() throws Exception executor); assertThat(result.get()).isNull(); assertThat(attempt.get()).isEqualTo(2); - if (isMultiplexedSessionsEnabled()) { + if (isMultiplexedSessionsEnabledForRW()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + ExecuteSqlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + ExecuteSqlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else if (isMultiplexedSessionsEnabled()) { assertThat(mockSpanner.getRequestTypes()) .containsExactly( CreateSessionRequest.class, @@ -454,7 +512,7 @@ public void asyncRunnerWithBatchUpdateCommitFails() throws Exception { @Test public void asyncRunnerWaitsUntilAsyncBatchUpdateHasFinished() throws Exception { - AsyncRunner runner = clientWithEmptySessionPool().runAsync(); + AsyncRunner runner = client().runAsync(); ApiFuture res = runner.runAsync( txn -> { @@ -463,7 +521,11 @@ public void asyncRunnerWaitsUntilAsyncBatchUpdateHasFinished() throws Exception }, executor); res.get(); - if (isMultiplexedSessionsEnabled()) { + if (isMultiplexedSessionsEnabledForRW()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + } else if (isMultiplexedSessionsEnabled()) { assertThat(mockSpanner.getRequestTypes()) .containsExactly( CreateSessionRequest.class, @@ -483,9 +545,6 @@ public void closeTransactionBeforeEndOfAsyncQuery() throws Exception { final SettableApiFuture finished = SettableApiFuture.create(); DatabaseClientImpl clientImpl = (DatabaseClientImpl) client(); - // There should currently not be any sessions checked out of the pool. - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); - AsyncRunner runner = clientImpl.runAsync(); final CountDownLatch dataReceived = new CountDownLatch(1); final CountDownLatch dataChecked = new CountDownLatch(1); @@ -530,7 +589,6 @@ public void closeTransactionBeforeEndOfAsyncQuery() throws Exception { // Wait until at least one row has been fetched. At that moment there should be one session // checked out. dataReceived.await(); - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(1); assertThat(res.isDone()).isFalse(); dataChecked.countDown(); // Get the data from the transaction. @@ -541,7 +599,6 @@ public void closeTransactionBeforeEndOfAsyncQuery() throws Exception { assertThat(finished.get()).isTrue(); assertThat(resultList).containsExactly("k1", "k2", "k3"); assertThat(res.get()).isNull(); - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); } @Test @@ -576,4 +633,11 @@ private boolean isMultiplexedSessionsEnabled() { } return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); } + + private boolean isMultiplexedSessionsEnabledForRW() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerImplTest.java index 006a926e907..dd13c39abc8 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerImplTest.java @@ -16,18 +16,14 @@ package com.google.cloud.spanner; -import static org.junit.Assert.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.clearInvocations; -import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.api.core.ApiFutures; import com.google.cloud.Timestamp; -import com.google.protobuf.ByteString; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Scope; import org.junit.Test; @@ -60,67 +56,4 @@ public void testCommitReturnsCommitStats() { verify(transaction).commitAsync(); } } - - @Test - public void testRetryUsesPreviousTransactionIdOnMultiplexedSession() { - // Set up mock transaction IDs - final ByteString mockTransactionId = ByteString.copyFromUtf8("mockTransactionId"); - final ByteString mockPreviousTransactionId = - ByteString.copyFromUtf8("mockPreviousTransactionId"); - - Span oTspan = mock(Span.class); - ISpan span = new OpenTelemetrySpan(oTspan); - when(oTspan.makeCurrent()).thenReturn(mock(Scope.class)); - // Mark the session as multiplexed. - when(session.getIsMultiplexed()).thenReturn(true); - - // Initialize a mock transaction with transactionId = null, previousTransactionId = null. - transaction = mock(TransactionRunnerImpl.TransactionContextImpl.class); - when(transaction.ensureTxnAsync()).thenReturn(ApiFutures.immediateFuture(null)); - when(session.newTransaction(eq(Options.fromTransactionOptions(Options.commitStats())), any())) - .thenReturn(transaction); - - // Simulate an ABORTED error being thrown when `commitAsync()` is called. - doThrow(SpannerExceptionFactory.newSpannerException(ErrorCode.ABORTED, "")) - .when(transaction) - .commitAsync(); - - try (AsyncTransactionManagerImpl manager = - new AsyncTransactionManagerImpl(session, span, Options.commitStats())) { - manager.beginAsync(); - - // Verify that for the first transaction attempt, the `previousTransactionId` is - // ByteString.EMPTY. - // This is because no transaction has been previously aborted at this point. - verify(session) - .newTransaction(Options.fromTransactionOptions(Options.commitStats()), ByteString.EMPTY); - assertThrows(AbortedException.class, manager::commitAsync); - clearInvocations(session); - - // Mock the transaction object to contain transactionID=null and - // previousTransactionId=mockPreviousTransactionId - when(transaction.getPreviousTransactionId()).thenReturn(mockPreviousTransactionId); - manager.resetForRetryAsync(); - // Verify that in the first retry attempt, the `previousTransactionId` - // (mockPreviousTransactionId) is passed to the new transaction. - // This allows Spanner to retry the transaction using the ID of the aborted transaction. - verify(session) - .newTransaction( - Options.fromTransactionOptions(Options.commitStats()), mockPreviousTransactionId); - assertThrows(AbortedException.class, manager::commitAsync); - clearInvocations(session); - - // Mock the transaction object to contain transactionID=mockTransactionId and - // previousTransactionId=mockPreviousTransactionId and transactionID = null - transaction.transactionId = mockTransactionId; - manager.resetForRetryAsync(); - // Verify that the latest `transactionId` (mockTransactionId) is used in the retry. - // This ensures the retry logic is working as expected with the latest transaction ID. - verify(session) - .newTransaction(Options.fromTransactionOptions(Options.commitStats()), mockTransactionId); - - when(transaction.rollbackAsync()).thenReturn(ApiFutures.immediateFuture(null)); - manager.closeAsync(); - } - } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java index 2449b8fba7c..964fd9c8004 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java @@ -27,6 +27,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutureCallback; @@ -39,7 +41,6 @@ import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.cloud.spanner.Options.ReadOption; -import com.google.cloud.spanner.SessionPool.SessionPoolTransactionContext; import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; @@ -178,9 +179,8 @@ public void asyncTransactionManager_shouldRollbackOnCloseAsync() throws Exceptio AsyncTransactionManager manager = client().transactionManagerAsync(); TransactionContext txn = manager.beginAsync().get(); txn.executeUpdateAsync(UPDATE_STATEMENT).get(); - final TransactionSelector selector = - ((TransactionContextImpl) ((SessionPoolTransactionContext) txn).delegate) - .getTransactionSelector(); + TransactionContextImpl impl = (TransactionContextImpl) txn; + final TransactionSelector selector = impl.getTransactionSelector(); SpannerApiFutures.get(manager.closeAsync()); // The mock server should already have the Rollback request, as we are waiting for the returned @@ -196,6 +196,14 @@ public void asyncTransactionManager_shouldRollbackOnCloseAsync() throws Exceptio 0L); } + @Test + public void testAsyncTransactionManager_getCommitResponseReturnsErrorBeforeCommit() { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { + TransactionContextFuture transactionContextFuture = manager.beginAsync(); + assertThrows(IllegalStateException.class, manager::getCommitResponse); + } + } + @Test public void testAsyncTransactionManager_returnsCommitStats() throws Exception { try (AsyncTransactionManager manager = @@ -247,8 +255,13 @@ public void asyncTransactionManagerUpdate() throws Exception { @Test public void asyncTransactionManagerIsNonBlocking() throws Exception { + // TODO: Remove this condition once DelayedAsyncTransactionManager is made non-blocking with + // multiplexed sessions. + assumeFalse( + "DelayedAsyncTransactionManager is currently blocking with multiplexed sessions.", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW()); mockSpanner.freeze(); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -290,7 +303,7 @@ public void asyncTransactionManagerInvalidUpdate() throws Exception { public void asyncTransactionManagerCommitAborted() throws Exception { final AtomicInteger attempt = new AtomicInteger(); CountDownLatch abortedLatch = new CountDownLatch(1); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -323,7 +336,7 @@ public void asyncTransactionManagerCommitAborted() throws Exception { @Test public void asyncTransactionManagerFireAndForgetInvalidUpdate() throws Exception { - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -346,9 +359,9 @@ public void asyncTransactionManagerFireAndForgetInvalidUpdate() throws Exception } } } - ImmutableList> expectedRequests = + ImmutableList> expectedRequestsWithMultiplexedSessionForRW = ImmutableList.of( - BatchCreateSessionsRequest.class, + CreateSessionRequest.class, // The first update that fails. This will cause a transaction retry. ExecuteSqlRequest.class, // The retry will use an explicit BeginTransaction call. @@ -358,11 +371,8 @@ public void asyncTransactionManagerFireAndForgetInvalidUpdate() throws Exception ExecuteSqlRequest.class, ExecuteSqlRequest.class, CommitRequest.class); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()).containsAtLeastElementsIn(expectedRequests); - } else { - assertThat(mockSpanner.getRequestTypes()).containsExactlyElementsIn(expectedRequests); - } + assertThat(mockSpanner.getRequestTypes()) + .containsExactlyElementsIn(expectedRequestsWithMultiplexedSessionForRW); } @Test @@ -474,7 +484,7 @@ public void asyncTransactionManagerUpdateAborted() throws Exception { @Test public void asyncTransactionManagerUpdateAbortedWithoutGettingResult() throws Exception { final AtomicInteger attempt = new AtomicInteger(); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -503,7 +513,7 @@ public void asyncTransactionManagerUpdateAbortedWithoutGettingResult() throws Ex // attempt to call the Commit RPC and instead directly propagate the Aborted error. assertThat(mockSpanner.getRequestTypes()) .containsAtLeast( - BatchCreateSessionsRequest.class, + CreateSessionRequest.class, ExecuteSqlRequest.class, // The retry will use a BeginTransaction RPC. BeginTransactionRequest.class, @@ -542,7 +552,7 @@ public void asyncTransactionManagerCommitFails() throws Exception { @Test public void asyncTransactionManagerWaitsUntilAsyncUpdateHasFinished() throws Exception { - try (AsyncTransactionManager mgr = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager mgr = client().transactionManagerAsync()) { TransactionContextFuture txn = mgr.beginAsync(); while (true) { try { @@ -556,18 +566,9 @@ public void asyncTransactionManagerWaitsUntilAsyncUpdateHasFinished() throws Exc executor) .commitAsync() .get(); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - CreateSessionRequest.class, - BatchCreateSessionsRequest.class, - ExecuteSqlRequest.class, - CommitRequest.class); - } else { - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, ExecuteSqlRequest.class, CommitRequest.class); - } + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, ExecuteSqlRequest.class, CommitRequest.class); break; } catch (AbortedException e) { txn = mgr.resetForRetryAsync(); @@ -600,8 +601,13 @@ public void asyncTransactionManagerBatchUpdate() throws Exception { @Test public void asyncTransactionManagerIsNonBlockingWithBatchUpdate() throws Exception { + // TODO: Remove this condition once DelayedAsyncTransactionManager is made non-blocking with + // multiplexed sessions. + assumeFalse( + "DelayedAsyncTransactionManager is currently blocking with multiplexed sessions.", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW()); mockSpanner.freeze(); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -645,7 +651,7 @@ public void asyncTransactionManagerInvalidBatchUpdate() throws Exception { @Test public void asyncTransactionManagerFireAndForgetInvalidBatchUpdate() throws Exception { - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -677,17 +683,20 @@ public void asyncTransactionManagerFireAndForgetInvalidBatchUpdate() throws Exce ExecuteBatchDmlRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()).containsAtLeastElementsIn(expectedRequests); - } else { - assertThat(mockSpanner.getRequestTypes()).containsExactlyElementsIn(expectedRequests); - } + ImmutableList> expectedRequestsWithMultiplexedSessionsRW = + ImmutableList.of( + CreateSessionRequest.class, + ExecuteBatchDmlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + assertThat(mockSpanner.getRequestTypes()) + .containsExactlyElementsIn(expectedRequestsWithMultiplexedSessionsRW); } @Test public void asyncTransactionManagerBatchUpdateAborted() throws Exception { final AtomicInteger attempt = new AtomicInteger(); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -721,17 +730,21 @@ public void asyncTransactionManagerBatchUpdateAborted() throws Exception { BeginTransactionRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()).containsAtLeastElementsIn(expectedRequests); - } else { - assertThat(mockSpanner.getRequestTypes()).containsExactlyElementsIn(expectedRequests); - } + ImmutableList> expectedRequestsWithMultiplexedSessionsRW = + ImmutableList.of( + CreateSessionRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + assertThat(mockSpanner.getRequestTypes()) + .containsExactlyElementsIn(expectedRequestsWithMultiplexedSessionsRW); } @Test public void asyncTransactionManagerBatchUpdateAbortedBeforeFirstStatement() throws Exception { final AtomicInteger attempt = new AtomicInteger(); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -763,16 +776,23 @@ public void asyncTransactionManagerBatchUpdateAbortedBeforeFirstStatement() thro BeginTransactionRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()).containsAtLeastElementsIn(expectedRequests); - } else { - assertThat(mockSpanner.getRequestTypes()).containsExactlyElementsIn(expectedRequests); - } + // When requests run using multiplexed session with read-write enabled, the + // BatchCreateSessionsRequest will not be + // triggered because we are creating an empty pool during initialization. + ImmutableList> expectedRequestsWithMultiplexedSessionsRW = + ImmutableList.of( + CreateSessionRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + assertThat(mockSpanner.getRequestTypes()) + .containsExactlyElementsIn(expectedRequestsWithMultiplexedSessionsRW); } @Test public void asyncTransactionManagerWithBatchUpdateCommitAborted() throws Exception { - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { // Temporarily set the result of the update to 2 rows. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT + 1L)); final AtomicInteger attempt = new AtomicInteger(); @@ -824,17 +844,22 @@ public void asyncTransactionManagerWithBatchUpdateCommitAborted() throws Excepti BeginTransactionRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()).containsAtLeastElementsIn(expectedRequests); - } else { - assertThat(mockSpanner.getRequestTypes()).containsExactlyElementsIn(expectedRequests); - } + ImmutableList> expectedRequestsWithMultiplexedSessionsRW = + ImmutableList.of( + CreateSessionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + assertThat(mockSpanner.getRequestTypes()) + .containsExactlyElementsIn(expectedRequestsWithMultiplexedSessionsRW); } @Test public void asyncTransactionManagerBatchUpdateAbortedWithoutGettingResult() throws Exception { final AtomicInteger attempt = new AtomicInteger(); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -865,15 +890,12 @@ public void asyncTransactionManagerBatchUpdateAbortedWithoutGettingResult() thro } assertThat(attempt.get()).isEqualTo(2); List> requests = mockSpanner.getRequestTypes(); - // Remove the CreateSession requests for multiplexed sessions, as those are not relevant for - // this test. - requests.removeIf(request -> request == CreateSessionRequest.class); int size = Iterables.size(requests); assertThat(size).isIn(Range.closed(5, 6)); if (size == 5) { assertThat(requests) .containsExactly( - BatchCreateSessionsRequest.class, + CreateSessionRequest.class, ExecuteBatchDmlRequest.class, BeginTransactionRequest.class, ExecuteBatchDmlRequest.class, @@ -881,7 +903,7 @@ public void asyncTransactionManagerBatchUpdateAbortedWithoutGettingResult() thro } else { assertThat(requests) .containsExactly( - BatchCreateSessionsRequest.class, + CreateSessionRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class, BeginTransactionRequest.class, @@ -897,7 +919,7 @@ public void asyncTransactionManagerWithBatchUpdateCommitFails() { Status.INVALID_ARGUMENT .withDescription("mutation limit exceeded") .asRuntimeException())); - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); SpannerException e = assertThrows( @@ -917,16 +939,16 @@ public void asyncTransactionManagerWithBatchUpdateCommitFails() { ImmutableList> expectedRequests = ImmutableList.of( BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()).containsAtLeastElementsIn(expectedRequests); - } else { - assertThat(mockSpanner.getRequestTypes()).containsExactlyElementsIn(expectedRequests); - } + ImmutableList> expectedRequestsWithMultiplexedSessionsRW = + ImmutableList.of( + CreateSessionRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + assertThat(mockSpanner.getRequestTypes()) + .containsExactlyElementsIn(expectedRequestsWithMultiplexedSessionsRW); } @Test public void asyncTransactionManagerWaitsUntilAsyncBatchUpdateHasFinished() throws Exception { - try (AsyncTransactionManager manager = clientWithEmptySessionPool().transactionManagerAsync()) { + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { TransactionContextFuture transactionContextFuture = manager.beginAsync(); while (true) { try { @@ -948,11 +970,11 @@ public void asyncTransactionManagerWaitsUntilAsyncBatchUpdateHasFinished() throw ImmutableList> expectedRequests = ImmutableList.of( BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); - if (isMultiplexedSessionsEnabled()) { - assertThat(mockSpanner.getRequestTypes()).containsAtLeastElementsIn(expectedRequests); - } else { - assertThat(mockSpanner.getRequestTypes()).containsExactlyElementsIn(expectedRequests); - } + ImmutableList> expectedRequestsWithMultiplexedSessionsRW = + ImmutableList.of( + CreateSessionRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + assertThat(mockSpanner.getRequestTypes()) + .containsExactlyElementsIn(expectedRequestsWithMultiplexedSessionsRW); } @Test @@ -1084,10 +1106,34 @@ public void onSuccess(Long aLong) { } } - private boolean isMultiplexedSessionsEnabled() { - if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { - return false; + @Test + public void testAbandonedAsyncTransactionManager_rollbackFails() throws Exception { + mockSpanner.setRollbackExecutionTime( + SimulatedExecutionTime.ofException(Status.PERMISSION_DENIED.asRuntimeException())); + + boolean gotException = false; + try (AsyncTransactionManager manager = client().transactionManagerAsync()) { + TransactionContextFuture transactionContextFuture = manager.beginAsync(); + while (true) { + try { + AsyncTransactionStep updateCount = + transactionContextFuture.then( + (transactionContext, ignored) -> + transactionContext.executeUpdateAsync(UPDATE_STATEMENT), + executor); + assertEquals(1L, updateCount.get().longValue()); + // Break without committing or rolling back the transaction. + break; + } catch (AbortedException e) { + transactionContextFuture = manager.resetForRetryAsync(); + } + } + } catch (SpannerException spannerException) { + // The error from the automatically executed Rollback is surfaced when the + // AsyncTransactionManager is closed. + assertEquals(ErrorCode.PERMISSION_DENIED, spannerException.getErrorCode()); + gotException = true; } - return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + assertTrue(gotException); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BackendExhaustedTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BackendExhaustedTest.java deleted file mode 100644 index dba6d76e91e..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BackendExhaustedTest.java +++ /dev/null @@ -1,210 +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.spanner; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.api.gax.grpc.testing.LocalChannelProvider; -import com.google.cloud.NoCredentials; -import com.google.cloud.grpc.GrpcTransportOptions; -import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory; -import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; -import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; -import com.google.protobuf.ListValue; -import com.google.spanner.v1.ResultSetMetadata; -import com.google.spanner.v1.StructType; -import com.google.spanner.v1.StructType.Field; -import com.google.spanner.v1.TypeCode; -import io.grpc.Server; -import io.grpc.Status; -import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -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; -import org.junit.runners.JUnit4; - -/** - * Tests that a degraded backend that can no longer create any new sessions will not cause an - * application that already has a healthy session pool to stop functioning. - */ -@RunWith(JUnit4.class) -public class BackendExhaustedTest { - private static final String TEST_PROJECT = "my-project"; - private static final String TEST_INSTANCE = "my-instance"; - private static final String TEST_DATABASE = "my-database"; - private static MockSpannerServiceImpl mockSpanner; - private static Server server; - private static LocalChannelProvider channelProvider; - private static final Statement UPDATE_STATEMENT = - Statement.of("UPDATE FOO SET BAR=1 WHERE BAZ=2"); - private static final Statement INVALID_UPDATE_STATEMENT = - Statement.of("UPDATE NON_EXISTENT_TABLE SET BAR=1 WHERE BAZ=2"); - private static final long UPDATE_COUNT = 1L; - private static final Statement SELECT1 = Statement.of("SELECT 1 AS COL1"); - private static final ResultSetMetadata SELECT1_METADATA = - ResultSetMetadata.newBuilder() - .setRowType( - StructType.newBuilder() - .addFields( - Field.newBuilder() - .setName("COL1") - .setType( - com.google.spanner.v1.Type.newBuilder() - .setCode(TypeCode.INT64) - .build()) - .build()) - .build()) - .build(); - private static final com.google.spanner.v1.ResultSet SELECT1_RESULTSET = - com.google.spanner.v1.ResultSet.newBuilder() - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("1").build()) - .build()) - .setMetadata(SELECT1_METADATA) - .build(); - private Spanner spanner; - private DatabaseClientImpl client; - - @BeforeClass - public static void startStaticServer() throws IOException { - mockSpanner = new MockSpannerServiceImpl(); - mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. - mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); - mockSpanner.putStatementResult(StatementResult.query(SELECT1, SELECT1_RESULTSET)); - mockSpanner.putStatementResult( - StatementResult.exception( - INVALID_UPDATE_STATEMENT, - Status.INVALID_ARGUMENT.withDescription("invalid statement").asRuntimeException())); - - String uniqueName = InProcessServerBuilder.generateName(); - server = - InProcessServerBuilder.forName(uniqueName) - // We need to use a real executor for timeouts to occur. - .scheduledExecutorService(new ScheduledThreadPoolExecutor(1)) - .addService(mockSpanner) - .build() - .start(); - channelProvider = LocalChannelProvider.create(uniqueName); - } - - @AfterClass - public static void stopServer() throws InterruptedException { - // Force a shutdown as there are still requests stuck in the server. - server.shutdownNow(); - server.awaitTermination(); - } - - @Before - public void setUp() throws Exception { - SpannerOptions options = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .build(); - ExecutorFactory executorFactory = - ((GrpcTransportOptions) options.getTransportOptions()).getExecutorFactory(); - ScheduledThreadPoolExecutor executor = (ScheduledThreadPoolExecutor) executorFactory.get(); - options = - options - .toBuilder() - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setMinSessions(executor.getCorePoolSize()) - .setMaxSessions(executor.getCorePoolSize() * 3) - .build()) - .build(); - executorFactory.release(executor); - - spanner = options.getService(); - client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - // Wait until the session pool has initialized. - while (client.pool.getNumberOfSessionsInPool() - < spanner.getOptions().getSessionPoolOptions().getMinSessions()) { - Thread.sleep(1L); - } - } - - @After - public void tearDown() { - mockSpanner.reset(); - mockSpanner.removeAllExecutionTimes(); - // This test case force-closes the Spanner instance as it would otherwise wait - // forever on the BatchCreateSessions requests that are 'stuck'. - try { - ((SpannerImpl) spanner).close(10L, TimeUnit.MILLISECONDS); - } catch (SpannerException e) { - // ignore any errors during close as they are expected. - } - } - - @Test - public void test() throws Exception { - // Simulate very heavy load on the server by effectively stopping session creation. - mockSpanner.setBatchCreateSessionsExecutionTime( - SimulatedExecutionTime.ofMinimumAndRandomTime(Integer.MAX_VALUE, 0)); - // Create an executor that can handle twice as many requests as the minimum number of sessions - // in the pool and then start that many read requests. That will initiate the creation of - // additional sessions. - ScheduledExecutorService executor = - Executors.newScheduledThreadPool( - spanner.getOptions().getSessionPoolOptions().getMinSessions() * 2); - // Also temporarily freeze the server to ensure that the requests that can be served will - // continue to be in-flight and keep the sessions in the pool checked out. - mockSpanner.freeze(); - for (int i = 0; i < spanner.getOptions().getSessionPoolOptions().getMinSessions() * 2; i++) { - executor.submit(new ReadRunnable()); - } - // Now schedule as many write requests as there can be sessions in the pool. - for (int i = 0; i < spanner.getOptions().getSessionPoolOptions().getMaxSessions(); i++) { - executor.submit(new WriteRunnable()); - } - // Now unfreeze the server and verify that all requests can be served using the sessions that - // were already present in the pool. - mockSpanner.unfreeze(); - executor.shutdown(); - assertThat(executor.awaitTermination(10, TimeUnit.SECONDS)).isTrue(); - } - - private final class ReadRunnable implements Runnable { - @Override - public void run() { - try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { - while (rs.next()) {} - } - } - } - - private final class WriteRunnable implements Runnable { - @Override - public void run() { - TransactionRunner runner = client.readWriteTransaction(); - runner.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT)); - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BaseSessionPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BaseSessionPoolTest.java deleted file mode 100644 index 939114a7f60..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BaseSessionPoolTest.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyLong; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutures; -import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory; -import com.google.cloud.spanner.Options.TransactionOption; -import com.google.cloud.spanner.spi.v1.SpannerRpc.Option; -import com.google.protobuf.Empty; -import com.google.protobuf.Timestamp; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicLong; - -abstract class BaseSessionPoolTest { - ScheduledExecutorService mockExecutor; - int sessionIndex; - AtomicLong channelHint = new AtomicLong(0L); - - final class TestExecutorFactory implements ExecutorFactory { - - @Override - public ScheduledExecutorService get() { - ScheduledExecutorService realExecutor = new ScheduledThreadPoolExecutor(2); - mockExecutor = spy(realExecutor); - @SuppressWarnings("rawtypes") - ScheduledFuture mockFuture = mock(ScheduledFuture.class); - // To prevent maintenance loop from running. - doReturn(mockFuture) - .when(mockExecutor) - .scheduleAtFixedRate(any(Runnable.class), anyLong(), anyLong(), any(TimeUnit.class)); - return mockExecutor; - } - - @Override - public void release(ScheduledExecutorService executor) { - try { - executor.shutdown(); - } catch (Throwable ignore) { - } - } - } - - @SuppressWarnings("unchecked") - SessionImpl mockSession() { - final SessionImpl session = mock(SessionImpl.class); - Map options = new HashMap<>(); - options.put(Option.CHANNEL_HINT, channelHint.getAndIncrement()); - when(session.getOptions()).thenReturn(options); - when(session.getName()) - .thenReturn( - "projects/dummy/instances/dummy/database/dummy/sessions/session" + sessionIndex); - when(session.asyncClose()).thenReturn(ApiFutures.immediateFuture(Empty.getDefaultInstance())); - when(session.writeWithOptions(any(Iterable.class))) - .thenReturn(new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance())); - when(session.writeAtLeastOnceWithOptions(any(Iterable.class))) - .thenReturn(new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance())); - sessionIndex++; - return session; - } - - SessionImpl mockMultiplexedSession() { - final SessionImpl session = mock(SessionImpl.class); - Map options = new HashMap<>(); - when(session.getIsMultiplexed()).thenReturn(true); - when(session.getOptions()).thenReturn(options); - when(session.getName()) - .thenReturn( - "projects/dummy/instances/dummy/database/dummy/sessions/session" + sessionIndex); - when(session.asyncClose()).thenReturn(ApiFutures.immediateFuture(Empty.getDefaultInstance())); - when(session.writeWithOptions(any(Iterable.class))) - .thenReturn(new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance())); - when(session.writeAtLeastOnceWithOptions(any(Iterable.class))) - .thenReturn(new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance())); - sessionIndex++; - return session; - } - - SessionImpl buildMockSession(SpannerImpl spanner, ReadContext context) { - Map options = new HashMap<>(); - options.put(Option.CHANNEL_HINT, channelHint.getAndIncrement()); - final SessionImpl session = - new SessionImpl( - spanner, - new SessionReference( - "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, - options)) { - @Override - public ReadContext singleUse(TimestampBound bound) { - // The below stubs are added so that we can mock keep-alive. - return context; - } - - @Override - public ApiFuture asyncClose() { - return ApiFutures.immediateFuture(Empty.getDefaultInstance()); - } - - @Override - public CommitResponse writeAtLeastOnceWithOptions( - Iterable mutations, TransactionOption... transactionOptions) - throws SpannerException { - return new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance()); - } - - @Override - public CommitResponse writeWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - return new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance()); - } - }; - sessionIndex++; - return session; - } - - SessionImpl buildMockMultiplexedSession( - SpannerImpl spanner, ReadContext context, Timestamp creationTime) { - Map options = new HashMap<>(); - final SessionImpl session = - new SessionImpl( - spanner, - new SessionReference( - "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, - creationTime, - true, - options)) { - @Override - public ReadContext singleUse(TimestampBound bound) { - // The below stubs are added so that we can mock keep-alive. - return context; - } - - @Override - public ApiFuture asyncClose() { - return ApiFutures.immediateFuture(Empty.getDefaultInstance()); - } - - @Override - public CommitResponse writeAtLeastOnceWithOptions( - Iterable mutations, TransactionOption... transactionOptions) - throws SpannerException { - return new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance()); - } - - @Override - public CommitResponse writeWithOptions( - Iterable mutations, TransactionOption... options) throws SpannerException { - return new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance()); - } - }; - sessionIndex++; - return session; - } - - void runMaintenanceLoop(FakeClock clock, SessionPool pool, long numCycles) { - for (int i = 0; i < numCycles; i++) { - pool.poolMaintainer.maintainPool(); - clock.currentTimeMillis.addAndGet(pool.poolMaintainer.loopFrequency); - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java index edafc7ddba9..7a9ed7dcd91 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java @@ -57,7 +57,6 @@ public final class BatchClientImplTest { private static final String SESSION_NAME = DB_NAME + "/sessions/s1"; private static final ByteString TXN_ID = ByteString.copyFromUtf8("my-txn"); private static final String TIMESTAMP = "2017-11-15T10:54:20Z"; - private static boolean isMultiplexedSession = false; @Mock private SpannerRpc gapicRpc; @Mock private SpannerOptions spannerOptions; @@ -70,11 +69,6 @@ public final class BatchClientImplTest { public static void setupOpenTelemetry() { SpannerOptions.resetActiveTracingFramework(); SpannerOptions.enableOpenTelemetryTraces(); - Boolean useMultiplexedSessionFromEnvVariablePartitionedOps = - SessionPoolOptions.getUseMultiplexedSessionFromEnvVariablePartitionedOps(); - isMultiplexedSession = - useMultiplexedSessionFromEnvVariablePartitionedOps != null - && useMultiplexedSessionFromEnvVariablePartitionedOps; } @SuppressWarnings("unchecked") @@ -95,32 +89,21 @@ public void setUp() { when(spannerOptions.getTransportOptions()).thenReturn(transportOptions); SessionPoolOptions sessionPoolOptions = mock(SessionPoolOptions.class); when(sessionPoolOptions.getPoolMaintainerClock()).thenReturn(Clock.INSTANCE); - when(sessionPoolOptions.getUseMultiplexedSessionPartitionedOps()) - .thenReturn(isMultiplexedSession); + when(sessionPoolOptions.getUseMultiplexedSessionPartitionedOps()).thenReturn(true); when(sessionPoolOptions.getMultiplexedSessionMaintenanceDuration()).thenReturn(Duration.ZERO); when(spannerOptions.getSessionPoolOptions()).thenReturn(sessionPoolOptions); @SuppressWarnings("resource") SpannerImpl spanner = new SpannerImpl(gapicRpc, spannerOptions); - client = new BatchClientImpl(spanner.getSessionClient(db), isMultiplexedSession); + client = new BatchClientImpl(spanner.getSessionClient(db)); } @SuppressWarnings("unchecked") @Test public void testBatchReadOnlyTxnWithBound() throws Exception { - Session sessionProto = - Session.newBuilder().setName(SESSION_NAME).setMultiplexed(isMultiplexedSession).build(); - if (isMultiplexedSession) { - when(gapicRpc.createSession( - eq(DB_NAME), - anyString(), - anyMap(), - optionsCaptor.capture(), - eq(isMultiplexedSession))) - .thenReturn(sessionProto); - } else { - when(gapicRpc.createSession(eq(DB_NAME), anyString(), anyMap(), optionsCaptor.capture())) - .thenReturn(sessionProto); - } + Session sessionProto = Session.newBuilder().setName(SESSION_NAME).setMultiplexed(true).build(); + when(gapicRpc.createSession( + eq(DB_NAME), anyString(), anyMap(), optionsCaptor.capture(), eq(true))) + .thenReturn(sessionProto); com.google.protobuf.Timestamp timestamp = Timestamps.parse(TIMESTAMP); Transaction txnMetadata = Transaction.newBuilder().setId(TXN_ID).setReadTimestamp(timestamp).build(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java index 72d04d94614..38dcaa91d19 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java @@ -32,7 +32,6 @@ import com.google.common.util.concurrent.MoreExecutors; import io.grpc.Server; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.time.Duration; import java.util.ArrayList; import java.util.List; @@ -59,7 +58,7 @@ public class BatchCreateSessionsSlowTest { private Spanner spanner; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsTest.java deleted file mode 100644 index 8d359428c77..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsTest.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -import com.google.api.gax.grpc.testing.LocalChannelProvider; -import com.google.cloud.NoCredentials; -import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; -import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; -import com.google.common.base.Stopwatch; -import com.google.protobuf.ListValue; -import com.google.spanner.v1.ResultSetMetadata; -import com.google.spanner.v1.StructType; -import com.google.spanner.v1.StructType.Field; -import com.google.spanner.v1.TypeCode; -import io.grpc.Server; -import io.grpc.Status; -import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; -import java.util.concurrent.TimeUnit; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -@RunWith(JUnit4.class) -public class BatchCreateSessionsTest { - private static final Statement SELECT1AND2 = - Statement.of("SELECT 1 AS COL1 UNION ALL SELECT 2 AS COL1"); - private static final ResultSetMetadata SELECT1AND2_METADATA = - ResultSetMetadata.newBuilder() - .setRowType( - StructType.newBuilder() - .addFields( - Field.newBuilder() - .setName("COL1") - .setType( - com.google.spanner.v1.Type.newBuilder() - .setCode(TypeCode.INT64) - .build()) - .build()) - .build()) - .build(); - private static final com.google.spanner.v1.ResultSet SELECT1_RESULTSET = - com.google.spanner.v1.ResultSet.newBuilder() - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("1").build()) - .build()) - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("2").build()) - .build()) - .setMetadata(SELECT1AND2_METADATA) - .build(); - - private static MockSpannerServiceImpl mockSpanner; - private static Server server; - private static LocalChannelProvider channelProvider; - - @BeforeClass - public static void startStaticServer() throws IOException { - mockSpanner = new MockSpannerServiceImpl(); - mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. - mockSpanner.putStatementResult(StatementResult.query(SELECT1AND2, SELECT1_RESULTSET)); - - String uniqueName = InProcessServerBuilder.generateName(); - server = - InProcessServerBuilder.forName(uniqueName) - .directExecutor() - .addService(mockSpanner) - .build() - .start(); - channelProvider = LocalChannelProvider.create(uniqueName); - } - - @AfterClass - public static void stopServer() throws InterruptedException { - server.shutdown(); - server.awaitTermination(); - } - - @Before - public void setUp() { - mockSpanner.reset(); - mockSpanner.removeAllExecutionTimes(); - } - - private Spanner createSpanner(int minSessions, int maxSessions) { - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(maxSessions) - .build(); - return SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(sessionPoolOptions) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService(); - } - - @Test - public void testCreatedMinSessions() throws InterruptedException { - int minSessions = 1000; - int maxSessions = 4000; - try (Spanner spanner = createSpanner(minSessions, maxSessions)) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - Stopwatch watch = Stopwatch.createStarted(); - while (client.pool.totalSessions() < minSessions && watch.elapsed(TimeUnit.SECONDS) < 10) { - Thread.sleep(10L); - } - assertThat(client.pool.totalSessions(), is(equalTo(minSessions))); - } - } - - @Test - public void testClosePoolWhileInitializing() throws InterruptedException { - int minSessions = 10_000; - int maxSessions = 10_000; - DatabaseClientImpl client; - // Freeze the server to prevent it from creating sessions before we want to. - mockSpanner.freeze(); - try (Spanner spanner = createSpanner(minSessions, maxSessions)) { - // Create a database client which will create a session pool. - // No sessions will be created at the moment as the server is frozen. - client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - // Make sure session creation takes a little time to avoid all sessions being created at once. - mockSpanner.setBatchCreateSessionsExecutionTime( - SimulatedExecutionTime.ofMinimumAndRandomTime(10, 0)); - // Unfreeze the server to allow session creation to start. - mockSpanner.unfreeze(); - // Wait until at least one batch of sessions has been created. - Stopwatch watch = Stopwatch.createStarted(); - while (client.pool.totalSessions() == 0 && watch.elapsed(TimeUnit.SECONDS) < 10) { - Thread.sleep(1L); - } - // Close the Spanner instance which will start to delete sessions while the session pool is - // still being initialized. - } - // Verify that all sessions have been deleted. - assertThat(client.pool.totalSessions(), is(equalTo(0))); - } - - @Test - public void testSpannerReturnsAllAvailableSessionsAndThenNoSessions() - throws InterruptedException { - int minSessions = 1000; - int maxSessions = 1000; - // Set a maximum number of sessions that will be created by the server. - // After this the server will return an error when batchCreateSessions is called. - // This error is not propagated to the client. - int maxServerSessions = 550; - DatabaseClientImpl client; - mockSpanner.setMaxTotalSessions(maxServerSessions); - try (Spanner spanner = createSpanner(minSessions, maxSessions)) { - // Create a database client which will create a session pool. - client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - Stopwatch watch = Stopwatch.createStarted(); - while (client.pool.totalSessions() < maxServerSessions - && watch.elapsed(TimeUnit.SECONDS) < 10) { - Thread.sleep(10L); - } - assertThat(client.pool.totalSessions(), is(equalTo(maxServerSessions))); - // Wait until the pool has given up creating sessions. - watch = watch.reset(); - watch.start(); - while (client.pool.getNumberOfSessionsBeingCreated() > 0 - && watch.elapsed(TimeUnit.SECONDS) < 10) { - Thread.sleep(10L); - } - // Remove the max server sessions limit. - mockSpanner.setMaxTotalSessions(Integer.MAX_VALUE); - // Wait a little. No more sessions should be created, as the previous requests have given up, - // and no new sessions have been requested from the pool. - Thread.sleep(20L); - assertThat(client.pool.totalSessions(), is(equalTo(maxServerSessions))); - } - // Verify that all sessions have been deleted. - assertThat(client.pool.totalSessions(), is(equalTo(0))); - } - - @Test - public void testSpannerReturnsFailedPrecondition() throws InterruptedException { - int minSessions = 100; - int maxSessions = 1000; - int expectedSessions; - DatabaseClientImpl client; - // Make the first BatchCreateSessions return an error. - mockSpanner.addException(Status.FAILED_PRECONDITION.asRuntimeException()); - try (Spanner spanner = createSpanner(minSessions, maxSessions)) { - // Create a database client which will create a session pool. - client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - // Wait for the pool to be initialized. - // The first session creation request will fail. - expectedSessions = minSessions - minSessions / spanner.getOptions().getNumChannels(); - Stopwatch watch = Stopwatch.createStarted(); - while (client.pool.totalSessions() < expectedSessions - && watch.elapsed(TimeUnit.SECONDS) < 10) { - Thread.sleep(10L); - } - // Wait a little to allow any additional session creation to finish. - Thread.sleep(20L); - } - // Verify that all sessions have been deleted. - assertThat(client.pool.totalSessions(), is(equalTo(0))); - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProviderTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProviderTest.java index 43fe97113d0..73185177de1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProviderTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProviderTest.java @@ -29,31 +29,31 @@ public class BuiltInOpenTelemetryMetricsProviderTest { @Test public void testGenerateClientHashWithSimpleUid() { String clientUid = "testClient"; - verifyHash(BuiltInOpenTelemetryMetricsProvider.generateClientHash(clientUid)); + verifyHash(BuiltInMetricsProvider.generateClientHash(clientUid)); } @Test public void testGenerateClientHashWithEmptyUid() { String clientUid = ""; - verifyHash(BuiltInOpenTelemetryMetricsProvider.generateClientHash(clientUid)); + verifyHash(BuiltInMetricsProvider.generateClientHash(clientUid)); } @Test public void testGenerateClientHashWithNullUid() { String clientUid = null; - verifyHash(BuiltInOpenTelemetryMetricsProvider.generateClientHash(clientUid)); + verifyHash(BuiltInMetricsProvider.generateClientHash(clientUid)); } @Test public void testGenerateClientHashWithLongUid() { String clientUid = "aVeryLongUniqueClientIdentifierThatIsUnusuallyLong"; - verifyHash(BuiltInOpenTelemetryMetricsProvider.generateClientHash(clientUid)); + verifyHash(BuiltInMetricsProvider.generateClientHash(clientUid)); } @Test public void testGenerateClientHashWithSpecialCharacters() { String clientUid = "273d60f2-5604-42f1-b687-f5f1b975fd07@2316645@test#"; - verifyHash(BuiltInOpenTelemetryMetricsProvider.generateClientHash(clientUid)); + verifyHash(BuiltInMetricsProvider.generateClientHash(clientUid)); } private void verifyHash(String hash) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java index 30e06719181..182c9cc35b5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java @@ -16,22 +16,18 @@ package com.google.cloud.spanner; -import static io.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR; +import static java.util.stream.Collectors.toSet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; import com.google.protobuf.ListValue; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.SpannerGrpc; import com.google.spanner.v1.StructType; import com.google.spanner.v1.StructType.Field; import com.google.spanner.v1.TypeCode; -import io.grpc.Attributes; import io.grpc.Context; import io.grpc.Contexts; import io.grpc.Metadata; @@ -40,15 +36,13 @@ import io.grpc.ServerCallHandler; import io.grpc.ServerInterceptor; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; -import java.io.IOException; import java.net.InetSocketAddress; -import java.time.Duration; import java.util.Arrays; import java.util.Collection; +import java.util.Deque; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.Executors; +import java.util.concurrent.ConcurrentLinkedDeque; import java.util.logging.Level; import java.util.logging.Logger; import org.junit.After; @@ -70,13 +64,9 @@ public class ChannelUsageTest { @Parameter(0) public int numChannels; - @Parameter(1) - public boolean enableGcpPool; - - @Parameters(name = "num channels = {0}, enable GCP pool = {1}") + @Parameters(name = "num channels = {0}") public static Collection data() { - return Arrays.asList( - new Object[][] {{1, true}, {1, false}, {2, true}, {2, false}, {4, true}, {4, false}}); + return Arrays.asList(new Object[][] {{1}, {2}, {4}}); } private static final Statement SELECT1 = Statement.of("SELECT 1 AS COL1"); @@ -106,14 +96,15 @@ public static Collection data() { private static MockSpannerServiceImpl mockSpanner; private static Server server; private static InetSocketAddress address; - private static final Set batchCreateSessionLocalIps = - ConcurrentHashMap.newKeySet(); - private static final Set executeSqlLocalIps = ConcurrentHashMap.newKeySet(); + // Track channel hints (from X-Goog-Spanner-Request-Id header) per RPC method + private static final Set batchCreateSessionChannelHints = ConcurrentHashMap.newKeySet(); + private static final Set executeSqlChannelHints = ConcurrentHashMap.newKeySet(); + private static final Deque allExecuteSqlChannelHints = new ConcurrentLinkedDeque<>(); private static Level originalLogLevel; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1, SELECT1_RESULTSET)); @@ -122,8 +113,8 @@ public static void startServer() throws IOException { server = NettyServerBuilder.forAddress(address) .addService(mockSpanner) - // Add a server interceptor to register the remote addresses that we are seeing. This - // indicates how many channels are used client side to communicate with the server. + // Add a server interceptor to extract channel hints from X-Goog-Spanner-Request-Id + // header. This verifies that the client uses all configured channels. .intercept( new ServerInterceptor() { @Override @@ -137,22 +128,27 @@ public ServerCall.Listener interceptCall( headers.get( Metadata.Key.of( "x-response-encoding", Metadata.ASCII_STRING_MARSHALLER))); - Attributes attributes = call.getAttributes(); - @SuppressWarnings({"unchecked", "deprecation"}) - Attributes.Key key = - (Attributes.Key) - attributes.keys().stream() - .filter(k -> k.equals(TRANSPORT_ATTR_REMOTE_ADDR)) - .findFirst() - .orElse(null); - if (key != null) { - if (call.getMethodDescriptor() - .equals(SpannerGrpc.getBatchCreateSessionsMethod())) { - batchCreateSessionLocalIps.add(attributes.get(key)); - } - if (call.getMethodDescriptor() - .equals(SpannerGrpc.getExecuteStreamingSqlMethod())) { - executeSqlLocalIps.add(attributes.get(key)); + // Extract channel hint from X-Goog-Spanner-Request-Id header + String requestId = headers.get(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY); + if (requestId != null) { + // Format: + // ..... + String[] parts = requestId.split("\\."); + if (parts.length >= 4) { + try { + long channelHint = Long.parseLong(parts[3]); + if (call.getMethodDescriptor() + .equals(SpannerGrpc.getBatchCreateSessionsMethod())) { + batchCreateSessionChannelHints.add(channelHint); + } + if (call.getMethodDescriptor() + .equals(SpannerGrpc.getExecuteStreamingSqlMethod())) { + executeSqlChannelHints.add(channelHint); + allExecuteSqlChannelHints.add(channelHint); + } + } catch (NumberFormatException e) { + // Ignore parse errors + } } } return Contexts.interceptCall(Context.current(), call, headers, next); @@ -184,8 +180,9 @@ public static void resetLogging() { @After public void reset() { mockSpanner.reset(); - batchCreateSessionLocalIps.clear(); - executeSqlLocalIps.clear(); + batchCreateSessionChannelHints.clear(); + executeSqlChannelHints.clear(); + allExecuteSqlChannelHints.clear(); } private SpannerOptions createSpannerOptions() { @@ -207,68 +204,43 @@ private SpannerOptions createSpannerOptions() { .build()) .setHost("http://" + endpoint) .setCredentials(NoCredentials.getInstance()); - if (enableGcpPool) { - builder.enableGrpcGcpExtension(); - } return builder.build(); } - @Test - public void testCreatesNumChannels() { - try (Spanner spanner = createSpannerOptions().getService()) { - assumeFalse( - "GRPC-GCP is currently not supported with multiplexed sessions", - isMultiplexedSessionsEnabled(spanner) && enableGcpPool); - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - try (ResultSet resultSet = client.singleUse().executeQuery(SELECT1)) { - while (resultSet.next()) {} - } - } - assertEquals(numChannels, batchCreateSessionLocalIps.size()); - } - @Test public void testUsesAllChannels() throws InterruptedException { - final int multiplier = 2; + final int multiplier = 10; try (Spanner spanner = createSpannerOptions().getService()) { - assumeFalse( - "GRPC-GCP is currently not supported with multiplexed sessions", - isMultiplexedSessionsEnabled(spanner)); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - ListeningExecutorService executor = - MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(numChannels * multiplier)); - CountDownLatch latch = new CountDownLatch(numChannels * multiplier); for (int run = 0; run < numChannels * multiplier; run++) { - executor.submit( - () -> { - // Use a multi-use read-only transaction to make sure we keep a session in use for - // a longer period of time. - try (ReadOnlyTransaction transaction = client.readOnlyTransaction()) { - try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { - while (resultSet.next()) {} - } - latch.countDown(); - // Wait here until we now that all threads have reached this point and have a - // session in use. - latch.await(); - try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { - while (resultSet.next()) {} - } - } - return true; - }); + try (ReadOnlyTransaction transaction = client.readOnlyTransaction()) { + for (int i = 0; i < 2; i++) { + try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + } + } } - executor.shutdown(); - assertTrue(executor.awaitTermination(Duration.ofSeconds(10L))); } - assertEquals(numChannels, executeSqlLocalIps.size()); - } - - private boolean isMultiplexedSessionsEnabled(Spanner spanner) { - if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { - return false; + // Bound the channel hints to numChannels (matching gRPC-GCP behavior) and verify + // that channels are being distributed. The raw channel hints may be unbounded (based on + // session index), but gRPC-GCP bounds them to the actual number of channels. + assertEquals(2 * numChannels * multiplier, allExecuteSqlChannelHints.size()); + Set boundedChannelHints = + executeSqlChannelHints.stream().map(hint -> hint % numChannels).collect(toSet()); + // Verify that channel distribution is working: + // - For numChannels=1, exactly 1 channel should be used + // - For numChannels>1, multiple channels should be used (at least half) + if (numChannels == 1) { + assertEquals(1, boundedChannelHints.size()); + } else { + assertTrue( + "Expected at least " + + (numChannels / 2) + + " channels to be used, but got " + + boundedChannelHints.size(), + boundedChannelHints.size() >= numChannels / 2); } - return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CloseSpannerWithOpenResultSetTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CloseSpannerWithOpenResultSetTest.java index c8228e5ecf8..ed9f21c4635 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CloseSpannerWithOpenResultSetTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CloseSpannerWithOpenResultSetTest.java @@ -20,14 +20,11 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.cloud.spanner.connection.AbstractMockServerTest; import com.google.cloud.spanner.spi.v1.GapicSpannerRpc; -import com.google.spanner.v1.DeleteSessionRequest; -import com.google.spanner.v1.ExecuteSqlRequest; import io.grpc.ManagedChannelBuilder; import io.grpc.Status; import java.time.Duration; @@ -38,7 +35,6 @@ import java.util.concurrent.Future; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -79,72 +75,6 @@ public void cleanup() { mockSpanner.clearRequests(); } - @Test - public void testBatchClient_closedSpannerWithOpenResultSet_streamsAreCancelled() { - Spanner spanner = createSpanner(); - assumeFalse(spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - - BatchClient client = spanner.getBatchClient(DatabaseId.of("p", "i", "d")); - try (BatchReadOnlyTransaction transaction = - client.batchReadOnlyTransaction(TimestampBound.strong()); - ResultSet resultSet = transaction.executeQuery(SELECT_RANDOM_STATEMENT)) { - mockSpanner.freezeAfterReturningNumRows(1); - // This can sometimes fail, as the mock server may not always actually return the first row. - try { - assertTrue(resultSet.next()); - } catch (SpannerException exception) { - assertEquals(ErrorCode.DEADLINE_EXCEEDED, exception.getErrorCode()); - return; - } - ((SpannerImpl) spanner).close(1, TimeUnit.MILLISECONDS); - // This should return an error as the stream is cancelled. - SpannerException exception = - assertThrows( - SpannerException.class, - () -> { //noinspection StatementWithEmptyBody - while (resultSet.next()) {} - }); - assertEquals(ErrorCode.CANCELLED, exception.getErrorCode()); - } - } - - @Test - public void testNormalDatabaseClient_closedSpannerWithOpenResultSet_sessionsAreDeleted() - throws Exception { - Spanner spanner = createSpanner(); - assumeFalse(spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - try (ReadOnlyTransaction transaction = client.readOnlyTransaction(TimestampBound.strong()); - ResultSet resultSet = transaction.executeQuery(SELECT_RANDOM_STATEMENT)) { - mockSpanner.freezeAfterReturningNumRows(1); - // This can sometimes fail, as the mock server may not always actually return the first row. - try { - assertTrue(resultSet.next()); - } catch (SpannerException exception) { - assertEquals(ErrorCode.DEADLINE_EXCEEDED, exception.getErrorCode()); - return; - } - List executeSqlRequests = - mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).stream() - .filter(request -> request.getSql().equals(SELECT_RANDOM_STATEMENT.getSql())) - .collect(Collectors.toList()); - assertEquals(1, executeSqlRequests.size()); - ExecutorService service = Executors.newSingleThreadExecutor(); - service.submit(spanner::close); - // Verify that the session that is used by this transaction is deleted. - // That will automatically cancel the query. - mockSpanner.waitForRequestsToContain( - request -> - request instanceof DeleteSessionRequest - && ((DeleteSessionRequest) request) - .getName() - .equals(executeSqlRequests.get(0).getSession()), - /*timeoutMillis=*/ 1000L); - service.shutdownNow(); - } - } - @Test public void testStreamsAreCleanedUp() throws Exception { String invalidSql = "select * from foo"; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java index 26905c749d0..6ac22a28937 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java @@ -101,4 +101,22 @@ public void testHasCommitStats() { CommitResponse responseWithCommitStats = new CommitResponse(protoWithCommitStats); assertTrue(responseWithCommitStats.hasCommitStats()); } + + @Test + public void testGetSnapshotTimestamp() { + com.google.spanner.v1.CommitResponse protoWithoutSnapshotTimestamp = + com.google.spanner.v1.CommitResponse.getDefaultInstance(); + CommitResponse responseWithoutSnapshotTimestamp = + new CommitResponse(protoWithoutSnapshotTimestamp); + assertEquals(null, responseWithoutSnapshotTimestamp.getSnapshotTimestamp()); + + com.google.protobuf.Timestamp timestamp = + com.google.protobuf.Timestamp.newBuilder().setSeconds(123L).setNanos(456).build(); + com.google.spanner.v1.CommitResponse protoWithSnapshotTimestamp = + com.google.spanner.v1.CommitResponse.newBuilder().setSnapshotTimestamp(timestamp).build(); + CommitResponse responseWithSnapshotTimestamp = new CommitResponse(protoWithSnapshotTimestamp); + assertEquals( + Timestamp.ofTimeSecondsAndNanos(123L, 456), + responseWithSnapshotTimestamp.getSnapshotTimestamp()); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java index 8715d4e8107..f889d5b5f6f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java @@ -121,8 +121,7 @@ private DatabaseRole getAnotherDatabaseRoleProto() { } private Database getEncryptedDatabaseProto() { - return getDatabaseProto() - .toBuilder() + return getDatabaseProto().toBuilder() .setEncryptionConfig( com.google.spanner.admin.database.v1.EncryptionConfig.newBuilder() .setKmsKeyName(KMS_KEY_NAME) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientTest.java index e93066f2683..752f4c524cc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientTest.java @@ -185,8 +185,7 @@ public static void startStaticServer() throws Exception { .setRpcTimeoutMultiplier(1.3) .build())); builder.setRetryAdministrativeRequestsSettings( - SpannerOptions.Builder.DEFAULT_ADMIN_REQUESTS_LIMIT_EXCEEDED_RETRY_SETTINGS - .toBuilder() + SpannerOptions.Builder.DEFAULT_ADMIN_REQUESTS_LIMIT_EXCEEDED_RETRY_SETTINGS.toBuilder() .setInitialRetryDelayDuration(Duration.ofNanos(1L)) .build()); spanner = @@ -952,9 +951,7 @@ public void testRetriesDisabledForOperationOnAdminMethodQuotaPerMinutePerProject mockDatabaseAdmin.clearRequests(); try (Spanner spannerWithoutRetries = - spanner - .getOptions() - .toBuilder() + spanner.getOptions().toBuilder() .disableAdministrativeRequestRetries() .build() .getService()) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java index 86d0bfc2c94..8acb0a7b725 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java @@ -27,20 +27,13 @@ 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.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; -import static org.junit.Assume.assumeTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; -import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.api.gax.retrying.RetrySettings; import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.ServerStream; @@ -49,16 +42,12 @@ import com.google.cloud.NoCredentials; import com.google.cloud.Timestamp; import com.google.cloud.spanner.AsyncResultSet.CallbackResponse; -import com.google.cloud.spanner.AsyncTransactionManager.TransactionContextFuture; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.Options.RpcLockHint; import com.google.cloud.spanner.Options.RpcOrderBy; import com.google.cloud.spanner.Options.RpcPriority; -import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; -import com.google.cloud.spanner.SessionPoolOptions.ActionOnInactiveTransaction; -import com.google.cloud.spanner.SessionPoolOptions.InactiveTransactionRemovalOptions; import com.google.cloud.spanner.SingerProto.Genre; import com.google.cloud.spanner.SingerProto.SingerInfo; import com.google.cloud.spanner.SpannerException.ResourceNotFoundException; @@ -81,7 +70,6 @@ import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CreateSessionRequest; -import com.google.spanner.v1.DeleteSessionRequest; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.DirectedReadOptions.IncludeReplicas; import com.google.spanner.v1.DirectedReadOptions.ReplicaSelection; @@ -90,40 +78,41 @@ import com.google.spanner.v1.ExecuteSqlRequest.QueryMode; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.ReadRequest.LockHint; import com.google.spanner.v1.ReadRequest.OrderBy; import com.google.spanner.v1.RequestOptions.Priority; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.ResultSetStats; import com.google.spanner.v1.StructType; import com.google.spanner.v1.StructType.Field; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import com.google.spanner.v1.Type; import com.google.spanner.v1.TypeAnnotationCode; import com.google.spanner.v1.TypeCode; import io.grpc.Context; +import io.grpc.ManagedChannelBuilder; import io.grpc.Metadata; import io.grpc.MethodDescriptor; import io.grpc.Server; +import io.grpc.ServerInterceptors; import io.grpc.Status; import io.grpc.StatusRuntimeException; -import io.grpc.inprocess.InProcessServerBuilder; +import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; import io.grpc.protobuf.lite.ProtoLiteUtils; -import io.opencensus.trace.Tracing; -import io.opentelemetry.api.OpenTelemetry; -import java.io.IOException; +import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; import java.time.Duration; -import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; @@ -150,9 +139,9 @@ public class DatabaseClientImplTest { private static final String DATABASE_NAME = String.format( "projects/%s/instances/%s/databases/%s", TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE); + private static XGoogSpannerRequestIdTest.ServerHeaderEnforcer xGoogReqIdInterceptor; private static MockSpannerServiceImpl mockSpanner; private static Server server; - private static LocalChannelProvider channelProvider; private static final Statement UPDATE_STATEMENT = Statement.of("UPDATE FOO SET BAR=1 WHERE BAZ=2"); private static final Statement INVALID_UPDATE_STATEMENT = @@ -198,11 +187,10 @@ public class DatabaseClientImplTest { ReplicaSelection.newBuilder().setLocation("us-east1").build())) .build(); private Spanner spanner; - private Spanner spannerWithEmptySessionPool; private static ExecutorService executor; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); @@ -218,16 +206,33 @@ public static void startStaticServer() throws IOException { StatementResult.query(SELECT1_FROM_TABLE, MockSpannerTestUtil.SELECT1_RESULTSET)); mockSpanner.setBatchWriteResult(BATCH_WRITE_RESPONSES); + Set checkMethods = + new HashSet( + Arrays.asList( + "google.spanner.v1.Spanner/BatchCreateSessions", + "google.spanner.v1.Spanner/BatchWrite", + "google.spanner.v1.Spanner/BeginTransaction", + "google.spanner.v1.Spanner/Commit", + "google.spanner.v1.Spanner/CreateSession", + "google.spanner.v1.Spanner/DeleteSession", + "google.spanner.v1.Spanner/ExecuteBatchDml", + "google.spanner.v1.Spanner/ExecuteSql", + "google.spanner.v1.Spanner/ExecuteStreamingSql", + "google.spanner.v1.Spanner/GetSession", + "google.spanner.v1.Spanner/ListSessions", + "google.spanner.v1.Spanner/PartitionQuery", + "google.spanner.v1.Spanner/PartitionRead", + "google.spanner.v1.Spanner/Read", + "google.spanner.v1.Spanner/Rollback", + "google.spanner.v1.Spanner/StreamingRead")); + xGoogReqIdInterceptor = new XGoogSpannerRequestIdTest.ServerHeaderEnforcer(checkMethods); executor = Executors.newSingleThreadExecutor(); - String uniqueName = InProcessServerBuilder.generateName(); + InetSocketAddress address = new InetSocketAddress("localhost", 0); server = - InProcessServerBuilder.forName(uniqueName) - // We need to use a real executor for timeouts to occur. - .scheduledExecutorService(new ScheduledThreadPoolExecutor(1)) - .addService(mockSpanner) + NettyServerBuilder.forAddress(address) + .addService(ServerInterceptors.intercept(mockSpanner, xGoogReqIdInterceptor)) .build() .start(); - channelProvider = LocalChannelProvider.create(uniqueName); } @AfterClass @@ -239,1105 +244,33 @@ public static void stopServer() throws InterruptedException { @Before public void setUp() { + String endpoint = "localhost:" + server.getPort(); spanner = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://" + endpoint) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setFailOnSessionLeak().build()) .build() .getService(); - spannerWithEmptySessionPool = - spanner - .getOptions() - .toBuilder() - .setSessionPoolOption( - SessionPoolOptions.newBuilder().setMinSessions(0).setFailOnSessionLeak().build()) - .build() - .getService(); } @After public void tearDown() { mockSpanner.unfreeze(); spanner.close(); - spannerWithEmptySessionPool.close(); mockSpanner.reset(); + xGoogReqIdInterceptor.reset(); mockSpanner.removeAllExecutionTimes(); } - @Test - public void - testPoolMaintainer_whenInactiveTransactionAndSessionIsNotFoundOnBackend_removeSessionsFromPool() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 2L)) // any session not used for more than 2s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - mockSpanner.setCommitExecutionTime( - SimulatedExecutionTime.ofException( - mockSpanner.createSessionNotFoundException("TEST_SESSION_NAME"))); - while (true) { - try { - transaction.executeUpdate(UPDATE_STATEMENT); - - // Simulate a delay of 3 minutes to ensure that the below transaction is a long-running - // one. - // As per this test, anything which takes more than 2s is long-running - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - mockSpanner.setCommitExecutionTime(SimulatedExecutionTime.ofMinimumAndRandomTime(0, 0)); - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - // first session executed update, session found to be long-running and cleaned up. - // During commit, SessionNotFound exception from backend caused replacement of session and - // transaction needs to be retried. - // On retry, session again found to be long-running and cleaned up. - // During commit, there was no exception from backend. - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(2, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenInactiveTransactionAndSessionExistsOnBackend_removeSessionsFromPool() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 2L)) // any session not used for more than 2s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - transaction.executeUpdate(UPDATE_STATEMENT); - - // Simulate a delay of 3 minutes to ensure that the below transaction is a long-running - // one. - // As per this test, anything which takes more than 2s is long-running - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - // first session executed update, session found to be long-running and cleaned up. - // During commit, SessionNotFound exception from backend caused replacement of session and - // transaction needs to be retried. - // On retry, session again found to be long-running and cleaned up. - // During commit, there was no exception from backend. - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(1, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void testPoolMaintainer_whenLongRunningPartitionedUpdateRequest_takeNoAction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 2L)) // any session not used for more than 2s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - - client.executePartitionedUpdate(UPDATE_STATEMENT); - - // Simulate a delay of 3 minutes to ensure that the below transaction is a long-running one. - // As per this test, anything which takes more than 2s is long-running - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - /** - * PDML transaction is expected to be long-running. This is indicated through session flag - * eligibleForLongRunning = true . For all other transactions which are not expected to be - * long-running eligibleForLongRunning = false. - * - *

                                Below tests uses a session for PDML transaction. Post that, the same session is used for - * executeUpdate(). Both transactions are long-running. The test verifies that - * eligibleForLongRunning = false for the second transaction, and it's identified as a - * long-running transaction. - */ - @Test - public void testPoolMaintainer_whenPDMLFollowedByInactiveTransaction_removeSessionsFromPool() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 2L)) // any session not used for more than 2s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - - client.executePartitionedUpdate(UPDATE_STATEMENT); - - // Simulate a delay of 3 minutes to ensure that the below transaction is a long-running one. - // As per this test, anything which takes more than 2s is long-running - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - transaction.executeUpdate(UPDATE_STATEMENT); - - // Simulate a delay of 3 minutes to ensure that the below transaction is a long-running - // one. - // As per this test, anything which takes more than 2s is long-running - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMinutes(3).toMillis()); - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - // first session executed update, session found to be long-running and cleaned up. - // During commit, SessionNotFound exception from backend caused replacement of session and - // transaction needs to be retried. - // On retry, session again found to be long-running and cleaned up. - // During commit, there was no exception from backend. - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(1, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningReadsUsingTransactionRunner_retainSessionForTransaction() - throws Exception { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - TransactionRunner runner = client.readWriteTransaction(); - runner.run( - transaction -> { - try (ResultSet resultSet = - transaction.read( - READ_TABLE_NAME, - KeySet.singleKey(Key.of(1L)), - READ_COLUMN_NAMES, - Options.priority(RpcPriority.HIGH))) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - try (ResultSet resultSet = - transaction.read( - READ_TABLE_NAME, - KeySet.singleKey(Key.of(1L)), - READ_COLUMN_NAMES, - Options.priority(RpcPriority.HIGH))) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - return null; - }); - - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningQueriesUsingTransactionRunner_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - TransactionRunner runner = client.readWriteTransaction(); - runner.run( - transaction -> { - try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - return null; - }); - - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningUpdatesUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - transaction.executeUpdate(UPDATE_STATEMENT); - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - transaction.executeUpdate(UPDATE_STATEMENT); - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningReadsUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet resultSet = - transaction.read( - READ_TABLE_NAME, - KeySet.singleKey(Key.of(1L)), - READ_COLUMN_NAMES, - Options.priority(RpcPriority.HIGH))) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - try (ResultSet resultSet = - transaction.read( - READ_TABLE_NAME, - KeySet.singleKey(Key.of(1L)), - READ_COLUMN_NAMES, - Options.priority(RpcPriority.HIGH))) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningReadRowUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - transaction.readRow(READ_TABLE_NAME, Key.of(1L), READ_COLUMN_NAMES); - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - transaction.readRow(READ_TABLE_NAME, Key.of(1L), READ_COLUMN_NAMES); - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningAnalyzeUpdateStatementUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet resultSet = - transaction.analyzeUpdateStatement(UPDATE_STATEMENT, QueryAnalyzeMode.PROFILE)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - try (ResultSet resultSet = - transaction.analyzeUpdateStatement(UPDATE_STATEMENT, QueryAnalyzeMode.PROFILE)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningBatchUpdatesUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - transaction.batchUpdate(Lists.newArrayList(UPDATE_STATEMENT)); - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - transaction.batchUpdate(Lists.newArrayList(UPDATE_STATEMENT)); - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningBatchUpdatesAsyncUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - transaction.batchUpdateAsync(Lists.newArrayList(UPDATE_STATEMENT)); - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - transaction.batchUpdateAsync(Lists.newArrayList(UPDATE_STATEMENT)); - - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningExecuteQueryUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningExecuteQueryAsyncUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet resultSet = transaction.executeQueryAsync(SELECT1)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - try (ResultSet resultSet = transaction.executeQueryAsync(SELECT1)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - - @Test - public void - testPoolMaintainer_whenLongRunningAnalyzeQueryUsingTransactionManager_retainSessionForTransaction() { - FakeClock poolMaintainerClock = new FakeClock(); - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setIdleTimeThreshold( - Duration.ofSeconds( - 3L)) // any session not used for more than 3s will be long-running - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .setExecutionFrequency(Duration.ofSeconds(1)) // execute thread every 1s - .build(); - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) // to ensure there is 1 session and pool is 100% utilized - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .setLoopFrequency(1000L) // main thread runs every 1s - .setPoolMaintainerClock(poolMaintainerClock) - .build(); - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setDatabaseRole(TEST_DATABASE_ROLE) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(sessionPoolOptions) - .build() - .getService()) { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Instant initialExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet resultSet = - transaction.analyzeQuery(SELECT1, QueryAnalyzeMode.PROFILE)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(1050).toMillis()); - - try (ResultSet resultSet = - transaction.analyzeQuery(SELECT1, QueryAnalyzeMode.PROFILE)) { - consumeResults(resultSet); - } - poolMaintainerClock.currentTimeMillis.addAndGet(Duration.ofMillis(2050).toMillis()); - - // force trigger pool maintainer to check for long-running sessions - client.pool.poolMaintainer.maintainPool(); - - manager.commit(); - assertNotNull(manager.getCommitTimestamp()); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - Instant endExecutionTime = client.pool.poolMaintainer.lastExecutionTime; - - assertNotEquals( - endExecutionTime, - initialExecutionTime); // if session clean up task runs then these timings won't match - assertEquals(0, client.pool.numLeakedSessionsRemoved()); - assertTrue(client.pool.getNumberOfSessionsInPool() <= client.pool.totalSessions()); - } - } - @Test public void testWrite() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Timestamp timestamp = - client.write( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build())); + Timestamp timestamp = MockSpannerTestActions.writeInsertMutation(client); assertNotNull(timestamp); List beginTransactions = @@ -1364,10 +297,7 @@ public void testWriteAborted() { mockSpanner.setCommitExecutionTime( SimulatedExecutionTime.ofException( mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); - Timestamp timestamp = - client.write( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build())); + Timestamp timestamp = MockSpannerTestActions.writeInsertMutation(client); assertNotNull(timestamp); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); @@ -1383,24 +313,21 @@ public void testWriteAtLeastOnceAborted() { mockSpanner.setCommitExecutionTime( SimulatedExecutionTime.ofException( mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); - Timestamp timestamp = - client.writeAtLeastOnce( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build())); + Timestamp timestamp = MockSpannerTestActions.writeAtLeastOnceInsertMutation(client); assertNotNull(timestamp); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); assertEquals(2, commitRequests.size()); + // TODO(@odeke-em): Enable in later PR. + // xGoogReqIdInterceptor.assertIntegrity(); } @Test public void testWriteWithOptions() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - client.writeWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.priority(RpcPriority.HIGH)); + MockSpannerTestActions.writeInsertMutationWithOptions( + client, Options.priority(RpcPriority.HIGH)); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -1435,10 +362,8 @@ public void testWriteWithCommitStats() { public void testWriteWithExcludeTxnFromChangeStreams() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - client.writeWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.excludeTxnFromChangeStreams()); + MockSpannerTestActions.writeInsertMutationWithOptions( + client, Options.excludeTxnFromChangeStreams()); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -1453,10 +378,7 @@ public void testWriteWithExcludeTxnFromChangeStreams() { public void testWriteAtLeastOnce() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Timestamp timestamp = - client.writeAtLeastOnce( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build())); + Timestamp timestamp = MockSpannerTestActions.writeAtLeastOnceInsertMutation(client); assertNotNull(timestamp); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); @@ -1496,10 +418,8 @@ public void testWriteAtLeastOnceWithCommitStats() { public void testWriteAtLeastOnceWithOptions() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - client.writeAtLeastOnceWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.priority(RpcPriority.LOW)); + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + client, Options.priority(RpcPriority.LOW)); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(commitRequests).hasSize(1); @@ -1515,10 +435,8 @@ public void testWriteAtLeastOnceWithOptions() { public void testWriteAtLeastOnceWithTagOptions() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - client.writeAtLeastOnceWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.tag("app=spanner,env=test")); + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + client, Options.tag("app=spanner,env=test")); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(commitRequests).hasSize(1); @@ -1535,10 +453,8 @@ public void testWriteAtLeastOnceWithTagOptions() { public void testWriteAtLeastOnceWithExcludeTxnFromChangeStreams() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - client.writeAtLeastOnceWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.excludeTxnFromChangeStreams()); + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + client, Options.excludeTxnFromChangeStreams()); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(commitRequests).hasSize(1); @@ -1656,9 +572,7 @@ public void testExecuteQuery_withDirectedReadOptionsViaRequest() { @Test public void testExecuteQuery_withDirectedReadOptionsViaSpannerOptions() { Spanner spannerWithDirectedReadOptions = - spanner - .getOptions() - .toBuilder() + spanner.getOptions().toBuilder() .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) .build() .getService(); @@ -1679,9 +593,7 @@ public void testExecuteQuery_withDirectedReadOptionsViaSpannerOptions() { @Test public void testExecuteQuery_whenMultipleDirectedReadsOptions_preferRequestOption() { Spanner spannerWithDirectedReadOptions = - spanner - .getOptions() - .toBuilder() + spanner.getOptions().toBuilder() .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) .build() .getService(); @@ -1745,6 +657,53 @@ public void testExecuteReadWithOrderByOption() { assertEquals(OrderBy.ORDER_BY_NO_ORDER, request.getOrderBy()); } + @Test + public void testUnsupportedTransactionWithLockHintOption() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + try (ResultSet resultSet = + client + .singleUse() + .read( + READ_TABLE_NAME, + KeySet.singleKey(Key.of(1L)), + READ_COLUMN_NAMES, + Options.lockHint(RpcLockHint.EXCLUSIVE))) { + consumeResults(resultSet); + } + + List requests = mockSpanner.getRequestsOfType(ReadRequest.class); + assertThat(requests).hasSize(1); + ReadRequest request = requests.get(0); + // lock hint is only supported in ReadWriteTransaction + assertEquals(LockHint.LOCK_HINT_UNSPECIFIED, request.getLockHint()); + } + + @Test + public void testReadWriteTransactionWithLockHint() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + + TransactionRunner runner = client.readWriteTransaction(); + runner.run( + transaction -> { + try (ResultSet resultSet = + transaction.read( + READ_TABLE_NAME, + KeySet.singleKey(Key.of(1L)), + READ_COLUMN_NAMES, + Options.lockHint(RpcLockHint.EXCLUSIVE))) { + consumeResults(resultSet); + } + return null; + }); + + List requests = mockSpanner.getRequestsOfType(ReadRequest.class); + assertThat(requests).hasSize(1); + ReadRequest request = requests.get(0); + assertEquals(LockHint.LOCK_HINT_EXCLUSIVE, request.getLockHint()); + } + @Test public void testExecuteReadWithDirectedReadOptions() { DatabaseClient client = @@ -1770,9 +729,7 @@ public void testExecuteReadWithDirectedReadOptions() { @Test public void testExecuteReadWithDirectedReadOptionsViaSpannerOptions() { Spanner spannerWithDirectedReadOptions = - spanner - .getOptions() - .toBuilder() + spanner.getOptions().toBuilder() .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) .build() .getService(); @@ -1794,9 +751,7 @@ public void testExecuteReadWithDirectedReadOptionsViaSpannerOptions() { @Test public void testReadWriteExecuteQueryWithDirectedReadOptionsViaSpannerOptions() { Spanner spannerWithDirectedReadOptions = - spanner - .getOptions() - .toBuilder() + spanner.getOptions().toBuilder() .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) .build() .getService(); @@ -1843,6 +798,29 @@ public void testReadWriteExecuteQueryWithTag() { .isEqualTo("app=spanner,env=test,action=txn"); } + @Test + public void testBlindWriteWithTransactionTag() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + String transactionTag = "app=spanner,env=test,action=txn"; + TransactionRunner runner = client.readWriteTransaction(Options.tag(transactionTag)); + runner.run( + transaction -> { + transaction.buffer(Mutation.newInsertBuilder("abc").set("id").to(1L).build()); + return null; + }); + + List beginTransactionRequests = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class); + assertThat(beginTransactionRequests).hasSize(1); + assertThat(beginTransactionRequests.get(0).getRequestOptions().getTransactionTag()) + .isEqualTo(transactionTag); + List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); + assertThat(commitRequests).hasSize(1); + assertThat(commitRequests.get(0).getRequestOptions().getTransactionTag()) + .isEqualTo(transactionTag); + } + @Test public void testReadWriteExecuteReadWithTag() { DatabaseClient client = @@ -1870,6 +848,9 @@ public void testReadWriteExecuteReadWithTag() { .isEqualTo("app=spanner,env=test,action=read"); assertThat(request.getRequestOptions().getTransactionTag()) .isEqualTo("app=spanner,env=test,action=txn"); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + request.getTransaction().getBegin().getIsolationLevel()); } @Test @@ -1892,6 +873,9 @@ public void testExecuteUpdateWithTag() { assertNotNull(request.getTransaction().getBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertFalse(request.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + request.getTransaction().getBegin().getIsolationLevel()); } @Test @@ -1918,6 +902,9 @@ public void testBatchUpdateWithTag() { assertNotNull(request.getTransaction().getBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertFalse(request.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + request.getTransaction().getBegin().getIsolationLevel()); } @Test @@ -1948,13 +935,8 @@ public void testPartitionedDMLWithTag() { public void testCommitWithTag() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - TransactionRunner runner = - client.readWriteTransaction(Options.tag("app=spanner,env=test,action=commit")); - runner.run( - transaction -> { - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - return null; - }); + MockSpannerTestActions.commitDeleteTransaction( + client, Options.tag("app=spanner,env=test,action=commit")); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -1977,12 +959,8 @@ public void testCommitWithTag() { public void testTransactionManagerCommitWithTag() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - try (TransactionManager manager = - client.transactionManager(Options.tag("app=spanner,env=test,action=manager"))) { - TransactionContext transaction = manager.begin(); - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - manager.commit(); - } + MockSpannerTestActions.transactionManagerCommit( + client, Options.tag("app=spanner,env=test,action=manager")); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -1991,6 +969,9 @@ public void testTransactionManagerCommitWithTag() { assertNotNull(beginTransaction.getOptions()); assertTrue(beginTransaction.getOptions().hasReadWrite()); assertFalse(beginTransaction.getOptions().getExcludeTxnFromChangeStreams()); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + beginTransaction.getOptions().getIsolationLevel()); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -2005,14 +986,8 @@ public void testTransactionManagerCommitWithTag() { public void testAsyncRunnerCommitWithTag() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - AsyncRunner runner = client.runAsync(Options.tag("app=spanner,env=test,action=runner")); - get( - runner.runAsync( - txn -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor)); + MockSpannerTestActions.asyncRunnerCommit( + client, executor, Options.tag("app=spanner,env=test,action=runner")); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -2021,6 +996,9 @@ public void testAsyncRunnerCommitWithTag() { assertNotNull(beginTransaction.getOptions()); assertTrue(beginTransaction.getOptions().hasReadWrite()); assertFalse(beginTransaction.getOptions().getExcludeTxnFromChangeStreams()); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + beginTransaction.getOptions().getIsolationLevel()); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -2035,19 +1013,8 @@ public void testAsyncRunnerCommitWithTag() { public void testAsyncTransactionManagerCommitWithTag() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - try (AsyncTransactionManager manager = - client.transactionManagerAsync(Options.tag("app=spanner,env=test,action=manager"))) { - TransactionContextFuture transaction = manager.beginAsync(); - get( - transaction - .then( - (txn, input) -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor) - .commitAsync()); - } + MockSpannerTestActions.transactionManagerAsyncCommit( + client, executor, Options.tag("app=spanner,env=test,action=manager")); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -2056,6 +1023,9 @@ public void testAsyncTransactionManagerCommitWithTag() { assertNotNull(beginTransaction.getOptions()); assertTrue(beginTransaction.getOptions().hasReadWrite()); assertFalse(beginTransaction.getOptions().getExcludeTxnFromChangeStreams()); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + beginTransaction.getOptions().getIsolationLevel()); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -2085,8 +1055,8 @@ public void testReadWriteTxnWithExcludeTxnFromChangeStreams_executeUpdate() { public void testReadWriteTxnWithExcludeTxnFromChangeStreams_batchUpdate() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - TransactionRunner runner = client.readWriteTransaction(Options.excludeTxnFromChangeStreams()); - runner.run(transaction -> transaction.batchUpdate(Collections.singletonList(UPDATE_STATEMENT))); + MockSpannerTestActions.executeBatchUpdateTransaction( + client, Options.excludeTxnFromChangeStreams()); List requests = mockSpanner.getRequestsOfType(ExecuteBatchDmlRequest.class); @@ -2116,12 +1086,7 @@ public void testPartitionedDMLWithExcludeTxnFromChangeStreams() { public void testCommitWithExcludeTxnFromChangeStreams() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - TransactionRunner runner = client.readWriteTransaction(Options.excludeTxnFromChangeStreams()); - runner.run( - transaction -> { - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - return null; - }); + MockSpannerTestActions.commitDeleteTransaction(client, Options.excludeTxnFromChangeStreams()); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -2136,12 +1101,7 @@ public void testCommitWithExcludeTxnFromChangeStreams() { public void testTransactionManagerCommitWithExcludeTxnFromChangeStreams() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - try (TransactionManager manager = - client.transactionManager(Options.excludeTxnFromChangeStreams())) { - TransactionContext transaction = manager.begin(); - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - manager.commit(); - } + MockSpannerTestActions.transactionManagerCommit(client, Options.excludeTxnFromChangeStreams()); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -2156,14 +1116,8 @@ public void testTransactionManagerCommitWithExcludeTxnFromChangeStreams() { public void testAsyncRunnerCommitWithExcludeTxnFromChangeStreams() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - AsyncRunner runner = client.runAsync(Options.excludeTxnFromChangeStreams()); - get( - runner.runAsync( - txn -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor)); + MockSpannerTestActions.asyncRunnerCommit( + client, executor, Options.excludeTxnFromChangeStreams()); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -2178,19 +1132,8 @@ public void testAsyncRunnerCommitWithExcludeTxnFromChangeStreams() { public void testAsyncTransactionManagerCommitWithExcludeTxnFromChangeStreams() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - try (AsyncTransactionManager manager = - client.transactionManagerAsync(Options.excludeTxnFromChangeStreams())) { - TransactionContextFuture transaction = manager.beginAsync(); - get( - transaction - .then( - (txn, input) -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor) - .commitAsync()); - } + MockSpannerTestActions.transactionManagerAsyncCommit( + client, executor, Options.excludeTxnFromChangeStreams()); List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -2340,17 +1283,11 @@ public void singleUse() { DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Set checkedOut = client.pool.checkedOutSessions; - assertThat(checkedOut).isEmpty(); try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { assertThat(rs.next()).isTrue(); - if (!isMultiplexedSessionsEnabled()) { - assertThat(checkedOut).hasSize(1); - } assertThat(rs.getLong(0)).isEqualTo(1L); assertThat(rs.next()).isFalse(); } - assertThat(checkedOut).isEmpty(); } @Test @@ -2360,8 +1297,7 @@ public void singleUseIsNonBlocking() { // from the pool and then preparing a query is non-blocking (i.e. does not wait on a reply from // the server). DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { mockSpanner.unfreeze(); assertThat(rs.next()).isTrue(); @@ -2429,8 +1365,7 @@ public void singleUseBound() { public void singleUseBoundIsNonBlocking() { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (ResultSet rs = client .singleUse(TimestampBound.ofExactStaleness(15L, TimeUnit.SECONDS)) @@ -2488,8 +1423,7 @@ public void singleUseTransaction() { public void singleUseTransactionIsNonBlocking() { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (ResultSet rs = client.singleUseReadOnlyTransaction().executeQuery(SELECT1)) { mockSpanner.unfreeze(); assertThat(rs.next()).isTrue(); @@ -2516,8 +1450,7 @@ public void singleUseTransactionBound() { public void singleUseTransactionBoundIsNonBlocking() { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (ResultSet rs = client .singleUseReadOnlyTransaction(TimestampBound.ofExactStaleness(15L, TimeUnit.SECONDS)) @@ -2546,8 +1479,7 @@ public void readOnlyTransaction() { public void readOnlyTransactionIsNonBlocking() { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (ReadOnlyTransaction tx = client.readOnlyTransaction()) { try (ResultSet rs = tx.executeQuery(SELECT1)) { mockSpanner.unfreeze(); @@ -2576,8 +1508,7 @@ public void readOnlyTransactionBound() { public void readOnlyTransactionBoundIsNonBlocking() { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (ReadOnlyTransaction tx = client.readOnlyTransaction(TimestampBound.ofExactStaleness(15L, TimeUnit.SECONDS))) { try (ResultSet rs = tx.executeQuery(SELECT1)) { @@ -2621,8 +1552,7 @@ public void testReadWriteTransaction_returnsCommitStats() { public void readWriteTransactionIsNonBlocking() { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); TransactionRunner runner = client.readWriteTransaction(); // The runner.run(...) method cannot be made non-blocking, as it returns the result of the // transaction. @@ -2672,8 +1602,7 @@ public void testRunAsync_returnsCommitStats() { public void runAsyncIsNonBlocking() throws Exception { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); ExecutorService executor = Executors.newSingleThreadExecutor(); AsyncRunner runner = client.runAsync(); ApiFuture fut = @@ -2747,8 +1676,7 @@ public void testTransactionManager_returnsCommitStats() { public void transactionManagerIsNonBlocking() throws Exception { mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (TransactionManager txManager = client.transactionManager()) { mockSpanner.unfreeze(); TransactionContext transaction = txManager.begin(); @@ -2860,7 +1788,8 @@ public void testPartitionedDmlDoesNotTimeout() { SpannerOptions.Builder builder = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()); // Set normal DML timeout value. builder.getSpannerStubSettingsBuilder().executeSqlSettings().setRetrySettings(retrySettings); @@ -2888,6 +1817,31 @@ public void testPartitionedDmlDoesNotTimeout() { return null; })); assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); + + long NON_DETERMINISTIC = XGoogSpannerRequestIdTest.NON_DETERMINISTIC; + XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = { + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/ExecuteStreamingSql", + new XGoogSpannerRequestId(NON_DETERMINISTIC, NON_DETERMINISTIC, 6, 1)), + }; + if (false) { // TODO(@odeke-em): enable in next PRs. + xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues); + } + + XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = { + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/BeginTransaction", + new XGoogSpannerRequestId(NON_DETERMINISTIC, NON_DETERMINISTIC, 7, 1)), + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/CreateSession", + new XGoogSpannerRequestId(NON_DETERMINISTIC, 0, 1, 1)), + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/ExecuteSql", + new XGoogSpannerRequestId(NON_DETERMINISTIC, NON_DETERMINISTIC, 8, 1)), + }; + if (false) { // TODO(@odeke-em): enable in next PRs. + xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIdsAsSuffixes(wantUnaryValues); + } } } @@ -2898,7 +1852,8 @@ public void testPartitionedDmlWithLowerTimeout() { SpannerOptions.Builder builder = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()); // Set PDML timeout value. builder.setPartitionedDmlTimeoutDuration(Duration.ofMillis(10L)); @@ -2932,7 +1887,8 @@ public void testPartitionedDmlWithHigherTimeout() { SpannerOptions.Builder builder = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()); // Set PDML timeout value to a value that should allow the statement to be executed. builder.setPartitionedDmlTimeoutDuration(Duration.ofMillis(5000L)); @@ -2970,6 +1926,32 @@ public void testPartitionedDmlWithHigherTimeout() { .run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT))); assertThat(e.getErrorCode()).isEqualTo(ErrorCode.DEADLINE_EXCEEDED); assertThat(updateCount).isEqualTo(UPDATE_COUNT); + + long NON_DETERMINISTIC = XGoogSpannerRequestIdTest.NON_DETERMINISTIC; + XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = { + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/ExecuteStreamingSql", + new XGoogSpannerRequestId(NON_DETERMINISTIC, NON_DETERMINISTIC, 6, 1)), + }; + + if (false) { // TODO(@odeke-em): enable in next PRs. + xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues); + } + + XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = { + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/BeginTransaction", + new XGoogSpannerRequestId(NON_DETERMINISTIC, NON_DETERMINISTIC, 7, 1)), + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/CreateSession", + new XGoogSpannerRequestId(NON_DETERMINISTIC, 0, 1, 1)), + XGoogSpannerRequestIdTest.ofMethodAndRequestId( + "google.spanner.v1.Spanner/ExecuteSql", + new XGoogSpannerRequestId(NON_DETERMINISTIC, NON_DETERMINISTIC, 8, 1)), + }; + if (false) { // TODO(@odeke-em): enable in next PRs. + xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIdsAsSuffixes(wantUnaryValues); + } } } @@ -2980,7 +1962,8 @@ public void testPartitionedDmlRetriesOnUnavailable() { SpannerOptions.Builder builder = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()); try (Spanner spanner = builder.build().getService()) { DatabaseClient client = @@ -3003,11 +1986,12 @@ public void testDatabaseOrInstanceDoesNotExistOnInitialization() throws Exceptio try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .build() .getService()) { - mockSpanner.setBatchCreateSessionsExecutionTime( + mockSpanner.setCreateSessionExecutionTime( SimulatedExecutionTime.ofStickyException(exception)); DatabaseClientImpl dbClient = (DatabaseClientImpl) @@ -3016,13 +2000,12 @@ public void testDatabaseOrInstanceDoesNotExistOnInitialization() throws Exceptio // Wait until session creation has finished. Stopwatch watch = Stopwatch.createStarted(); while (watch.elapsed(TimeUnit.SECONDS) < 5 - && dbClient.pool.getNumberOfSessionsBeingCreated() > 0) { + && dbClient.multiplexedSessionDatabaseClient.isValid()) { //noinspection BusyWait Thread.sleep(1L); } // All session creation should fail and stop trying. - assertThat(dbClient.pool.getNumberOfSessionsInPool()).isEqualTo(0); - assertThat(dbClient.pool.getNumberOfSessionsBeingCreated()).isEqualTo(0); + assertFalse(dbClient.isValid()); mockSpanner.reset(); mockSpanner.removeAllExecutionTimes(); } @@ -3048,7 +2031,8 @@ public void testDatabaseOrInstanceDoesNotExistOnCreate() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption( SessionPoolOptions.newBuilder() @@ -3057,10 +2041,8 @@ public void testDatabaseOrInstanceDoesNotExistOnCreate() { .build()) .build() .getService()) { - boolean useMultiplexedSession = - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); DatabaseId databaseId = DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE); - if (useMultiplexedSession && !waitForMinSessions.isZero()) { + if (!waitForMinSessions.isZero()) { assertThrows( ResourceNotFoundException.class, () -> spanner.getDatabaseClient(databaseId)); } else { @@ -3084,14 +2066,7 @@ public void testDatabaseOrInstanceDoesNotExistOnCreate() { .readWriteTransaction() .run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT))); // No additional requests should have been sent by the client. - // Note that in case of the use of multiplexed sessions, then we have 2 requests: - // 1. BatchCreateSessions for the session pool. - // 2. CreateSession for the multiplexed session. - assertThat(mockSpanner.getRequests()) - .hasSize( - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession() - ? 2 - : 1); + assertThat(mockSpanner.getRequests()).hasSize(1); } } mockSpanner.reset(); @@ -3100,57 +2075,6 @@ public void testDatabaseOrInstanceDoesNotExistOnCreate() { } } - @Test - public void testDatabaseOrInstanceDoesNotExistOnReplenish() throws Exception { - StatusRuntimeException[] exceptions = - new StatusRuntimeException[] { - SpannerExceptionFactoryTest.newStatusResourceNotFoundException( - "Database", SpannerExceptionFactory.DATABASE_RESOURCE_TYPE, DATABASE_NAME), - SpannerExceptionFactoryTest.newStatusResourceNotFoundException( - "Instance", SpannerExceptionFactory.INSTANCE_RESOURCE_TYPE, INSTANCE_NAME) - }; - for (StatusRuntimeException exception : exceptions) { - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - mockSpanner.setBatchCreateSessionsExecutionTime( - SimulatedExecutionTime.ofStickyException(exception)); - DatabaseClientImpl dbClient = - (DatabaseClientImpl) - spanner.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - // Wait until session creation has finished. - Stopwatch watch = Stopwatch.createStarted(); - while (watch.elapsed(TimeUnit.SECONDS) < 5 - && dbClient.pool.getNumberOfSessionsBeingCreated() > 0) { - //noinspection BusyWait - Thread.sleep(1L); - } - // All session creation should fail and stop trying. - assertThat(dbClient.pool.getNumberOfSessionsInPool()).isEqualTo(0); - assertThat(dbClient.pool.getNumberOfSessionsBeingCreated()).isEqualTo(0); - // Force a maintainer run. This should schedule new session creation. - dbClient.pool.poolMaintainer.maintainPool(); - // Wait until the replenish has finished. - watch.reset().start(); - while (watch.elapsed(TimeUnit.SECONDS) < 5 - && dbClient.pool.getNumberOfSessionsBeingCreated() > 0) { - //noinspection BusyWait - Thread.sleep(1L); - } - // All session creation from replenishPool should fail and stop trying. - assertThat(dbClient.pool.getNumberOfSessionsInPool()).isEqualTo(0); - assertThat(dbClient.pool.getNumberOfSessionsBeingCreated()).isEqualTo(0); - } - mockSpanner.reset(); - mockSpanner.removeAllExecutionTimes(); - } - } - /** * Test showing that when a database is deleted while it is in use by a database client and then * re-created with the same name, will continue to return {@link DatabaseNotFoundException}s until @@ -3169,7 +2093,8 @@ public void testDatabaseOrInstanceIsDeletedAndThenRecreated() throws Exception { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .build() .getService()) { @@ -3180,7 +2105,7 @@ public void testDatabaseOrInstanceIsDeletedAndThenRecreated() throws Exception { // Wait until all sessions have been created and prepared. Stopwatch watch = Stopwatch.createStarted(); while (watch.elapsed(TimeUnit.SECONDS) < 5 - && (dbClient.pool.getNumberOfSessionsBeingCreated() > 0)) { + && (dbClient.multiplexedSessionDatabaseClient.getCurrentSessionReference() == null)) { //noinspection BusyWait Thread.sleep(1L); } @@ -3202,18 +2127,6 @@ public void testDatabaseOrInstanceIsDeletedAndThenRecreated() throws Exception { mockSpanner.reset(); // All subsequent calls should fail with a DatabaseNotFoundException. - if (!spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()) { - // We only verify this for read-only transactions if we are not using multiplexed - // sessions. For multiplexed sessions, we don't need any special handling, as deleting the - // database will also invalidate the multiplexed session, and trying to continue to use it - // will continue to return an error. - assertThrows( - ResourceNotFoundException.class, () -> dbClient.singleUse().executeQuery(SELECT1)); - } - - assertThrows( - ResourceNotFoundException.class, - () -> dbClient.readWriteTransaction().run(transaction -> null)); assertThat(mockSpanner.getRequests()).isEmpty(); // Now get a new database client. Normally multiple calls to Spanner#getDatabaseClient will // return the same instance, but not when the instance has been invalidated by a @@ -3246,12 +2159,11 @@ public void testGetInvalidatedClientMultipleTimes() { for (StatusRuntimeException exception : exceptions) { mockSpanner.setCreateSessionExecutionTime( SimulatedExecutionTime.ofStickyException(exception)); - mockSpanner.setBatchCreateSessionsExecutionTime( - SimulatedExecutionTime.ofStickyException(exception)); try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()) .build() @@ -3262,22 +2174,15 @@ public void testGetInvalidatedClientMultipleTimes() { spanner.getDatabaseClient( DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); for (int useClient = 0; useClient < 2; useClient++) { - // Using the same client multiple times should continue to return the same - // ResourceNotFoundException, even though the session pool has been invalidated. + // The multiplexed session client tries to create a new session at every attempt. assertThrows( ResourceNotFoundException.class, () -> dbClient.singleUse().executeQuery(SELECT1).next()); - if (spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()) { - // We should only receive 1 CreateSession request. The query should never be executed, - // as the session creation fails before it gets to executing a query. - assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); - assertEquals(0, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - } else { - // The server should only receive one BatchCreateSessions request for each run as we - // have set MinSessions=0. - assertThat(mockSpanner.getRequests()).hasSize(run + 1); - assertThat(dbClient.pool.isValid()).isFalse(); - } + // We should only receive 1 CreateSession request per attempt. + // The query should never be executed, as the session creation fails before it gets to + // executing a query. + assertEquals(run + 1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); } } } @@ -3295,22 +2200,19 @@ public void testAllowNestedTransactions() throws InterruptedException { final int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); Stopwatch watch = Stopwatch.createStarted(); while (watch.elapsed(TimeUnit.SECONDS) < 5 - && client.pool.getNumberOfSessionsInPool() < minSessions) { + && client.multiplexedSessionDatabaseClient.getCurrentSessionReference() == null) { //noinspection BusyWait Thread.sleep(1L); } - assertThat(client.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions); Long res = client .readWriteTransaction() .allowNestedTransaction() .run( transaction -> { - assertThat(client.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions - 1); return transaction.executeUpdate(UPDATE_STATEMENT); }); assertThat(res).isEqualTo(UPDATE_COUNT); - assertThat(client.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions); } @Test @@ -3326,33 +2228,22 @@ public void testNestedTransactionsUsingTwoDatabases() throws InterruptedExceptio final int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); Stopwatch watch = Stopwatch.createStarted(); while (watch.elapsed(TimeUnit.SECONDS) < 5 - && (client1.pool.getNumberOfSessionsInPool() < minSessions - || client2.pool.getNumberOfSessionsInPool() < minSessions)) { + && (client1.multiplexedSessionDatabaseClient.getCurrentSessionReference() == null + || client2.multiplexedSessionDatabaseClient.getCurrentSessionReference() == null)) { //noinspection BusyWait Thread.sleep(1L); } - assertThat(client1.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions); - assertThat(client2.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions); Long res = client1 .readWriteTransaction() .allowNestedTransaction() .run( transaction -> { - // Client1 should have 1 session checked out. - // Client2 should have 0 sessions checked out. - assertThat(client1.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions - 1); - assertThat(client2.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions); Long add = client2 .readWriteTransaction() .run( transaction1 -> { - // Both clients should now have 1 session checked out. - assertThat(client1.pool.getNumberOfSessionsInPool()) - .isEqualTo(minSessions - 1); - assertThat(client2.pool.getNumberOfSessionsInPool()) - .isEqualTo(minSessions - 1); try (ResultSet rs = transaction1.executeQuery(SELECT1)) { if (rs.next()) { return rs.getLong(0); @@ -3369,9 +2260,6 @@ public void testNestedTransactionsUsingTwoDatabases() throws InterruptedExceptio } }); assertThat(res).isEqualTo(2L); - // All sessions should now be checked back in to the pools. - assertThat(client1.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions); - assertThat(client2.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions); } @Test @@ -3381,7 +2269,8 @@ public void testBackendQueryOptions() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()) .build() @@ -3422,7 +2311,8 @@ public void testBackendQueryOptionsWithAnalyzeQuery() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()) .build() @@ -3465,7 +2355,8 @@ public void testBackendPartitionQueryOptions() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()) .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) @@ -3497,9 +2388,8 @@ public void testBackendPartitionQueryOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ExecuteSqlRequest.class); - ExecuteSqlRequest executeSqlRequest = (ExecuteSqlRequest) requests.get(requests.size() - 2); + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ExecuteSqlRequest.class); + ExecuteSqlRequest executeSqlRequest = (ExecuteSqlRequest) requests.get(requests.size() - 1); assertThat(executeSqlRequest.getQueryOptions()).isNotNull(); assertThat(executeSqlRequest.getQueryOptions().getOptimizerVersion()).isEqualTo("1"); assertThat(executeSqlRequest.getQueryOptions().getOptimizerStatisticsPackage()) @@ -3516,7 +2406,8 @@ public void testBackendPartitionQueryOptions() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()) .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) @@ -3547,9 +2438,8 @@ public void testBackendPartitionQueryOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ExecuteSqlRequest.class); - ExecuteSqlRequest executeSqlRequest = (ExecuteSqlRequest) requests.get(requests.size() - 2); + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ExecuteSqlRequest.class); + ExecuteSqlRequest executeSqlRequest = (ExecuteSqlRequest) requests.get(requests.size() - 1); assertThat(executeSqlRequest.getQueryOptions()).isNotNull(); assertThat(executeSqlRequest.getQueryOptions().getOptimizerVersion()).isEqualTo("1"); assertThat(executeSqlRequest.getQueryOptions().getOptimizerStatisticsPackage()) @@ -3565,7 +2455,8 @@ public void testBackendPartitionReadOptions() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()) .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) @@ -3593,9 +2484,8 @@ public void testBackendPartitionReadOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ReadRequest.class); - ReadRequest readRequest = (ReadRequest) requests.get(requests.size() - 2); + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ReadRequest.class); + ReadRequest readRequest = (ReadRequest) requests.get(requests.size() - 1); assertThat(readRequest.getDirectedReadOptions()).isEqualTo(DIRECTED_READ_OPTIONS1); } } @@ -3608,7 +2498,8 @@ public void testBackendPartitionReadOptions() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()) .setDirectedReadOptions(DIRECTED_READ_OPTIONS2) @@ -3636,9 +2527,8 @@ public void testBackendPartitionReadOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ReadRequest.class); - ReadRequest readRequest = (ReadRequest) requests.get(requests.size() - 2); + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ReadRequest.class); + ReadRequest readRequest = (ReadRequest) requests.get(requests.size() - 1); assertThat(readRequest.getDirectedReadOptions()).isEqualTo(DIRECTED_READ_OPTIONS2); } } @@ -3700,7 +2590,8 @@ public void testClientIdReusedOnDatabaseNotFound() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("my-project") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .build() .getService()) { @@ -3736,7 +2627,8 @@ public void testBatchCreateSessionsPermissionDenied() { try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("my-project") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption( SessionPoolOptions.newBuilder() @@ -3755,17 +2647,8 @@ public void testBatchCreateSessionsPermissionDenied() { spannerException = assertThrows(SpannerException.class, resultSet::next); } else { // This is blocking when we should wait for min sessions, and will therefore fail. - if (spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()) { - spannerException = - assertThrows(SpannerException.class, () -> spanner.getDatabaseClient(databaseId)); - } else { - // TODO: Fix the session pool implementation for waiting for min sessions, so this also - // propagates the error directly when session creation fails. - DatabaseClient client = spanner.getDatabaseClient(databaseId); - spannerException = - assertThrows( - SpannerException.class, () -> client.singleUse().executeQuery(SELECT1).next()); - } + spannerException = + assertThrows(SpannerException.class, () -> spanner.getDatabaseClient(databaseId)); } assertEquals(ErrorCode.PERMISSION_DENIED, spannerException.getErrorCode()); } finally { @@ -3855,109 +2738,27 @@ public void testSpecificTimeout() { }); } - @Test - public void testBatchCreateSessionsFailure_shouldNotPropagateToCloseMethod() { - assumeFalse( - "BatchCreateSessions RPC is not invoked for multiplexed sessions", - isMultiplexedSessionsEnabled()); - try { - // Simulate session creation failures on the backend. - mockSpanner.setBatchCreateSessionsExecutionTime( - SimulatedExecutionTime.ofStickyException( - Status.FAILED_PRECONDITION.asRuntimeException())); - DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - // This will not cause any failure as getting a session from the pool is guaranteed to be - // non-blocking, and any exceptions will be delayed until actual query execution. - try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { - SpannerException e = assertThrows(SpannerException.class, rs::next); - assertThat(e.getErrorCode()).isEqualTo(ErrorCode.FAILED_PRECONDITION); - } - } finally { - mockSpanner.setBatchCreateSessionsExecutionTime(SimulatedExecutionTime.none()); - } - } - @Test public void testCreateSessionsFailure_shouldNotPropagateToCloseMethod() { - assumeTrue( - "CreateSessions is not invoked for regular sessions", isMultiplexedSessionsEnabled()); try { // Simulate session creation failures on the backend. mockSpanner.setCreateSessionExecutionTime( - SimulatedExecutionTime.ofStickyException(Status.RESOURCE_EXHAUSTED.asRuntimeException())); + SimulatedExecutionTime.ofStickyException(Status.PERMISSION_DENIED.asRuntimeException())); // This will not cause any failure as getting a session from the pool is guaranteed to be // non-blocking, and any exceptions will be delayed until actual query execution. mockSpanner.freeze(); DatabaseClient client = - spannerWithEmptySessionPool.getDatabaseClient( - DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { mockSpanner.unfreeze(); - SpannerException e = assertThrows(SpannerException.class, rs::next); - assertThat(e.getErrorCode()).isEqualTo(ErrorCode.RESOURCE_EXHAUSTED); + SpannerException exception = assertThrows(SpannerException.class, rs::next); + assertEquals(ErrorCode.PERMISSION_DENIED, exception.getErrorCode()); } } finally { mockSpanner.setCreateSessionExecutionTime(SimulatedExecutionTime.none()); } } - @Test - public void testReadWriteTransaction_usesOptions() { - SessionPool pool = mock(SessionPool.class); - PooledSessionFuture session = mock(PooledSessionFuture.class); - when(pool.getSession()).thenReturn(session); - TransactionOption option = mock(TransactionOption.class); - - TraceWrapper traceWrapper = - new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer(""), false); - - DatabaseClientImpl client = new DatabaseClientImpl(pool, traceWrapper); - client.readWriteTransaction(option); - - verify(session).readWriteTransaction(option); - } - - @Test - public void testTransactionManager_usesOptions() { - SessionPool pool = mock(SessionPool.class); - PooledSessionFuture session = mock(PooledSessionFuture.class); - when(pool.getSession()).thenReturn(session); - TransactionOption option = mock(TransactionOption.class); - - DatabaseClientImpl client = new DatabaseClientImpl(pool, mock(TraceWrapper.class)); - try (TransactionManager ignore = client.transactionManager(option)) { - verify(session).transactionManager(option); - } - } - - @Test - public void testRunAsync_usesOptions() { - SessionPool pool = mock(SessionPool.class); - PooledSessionFuture session = mock(PooledSessionFuture.class); - when(pool.getSession()).thenReturn(session); - TransactionOption option = mock(TransactionOption.class); - - DatabaseClientImpl client = new DatabaseClientImpl(pool, mock(TraceWrapper.class)); - client.runAsync(option); - - verify(session).runAsync(option); - } - - @Test - public void testTransactionManagerAsync_usesOptions() { - SessionPool pool = mock(SessionPool.class); - PooledSessionFuture session = mock(PooledSessionFuture.class); - when(pool.getSession()).thenReturn(session); - TransactionOption option = mock(TransactionOption.class); - - DatabaseClientImpl client = new DatabaseClientImpl(pool, mock(TraceWrapper.class)); - try (AsyncTransactionManager ignore = client.transactionManagerAsync(option)) { - verify(session).transactionManagerAsync(option); - } - } - @Test public void testExecuteQueryWithPriority() { DatabaseClient client = @@ -4097,12 +2898,7 @@ public void testPartitionedDMLWithPriority() { public void testCommitWithPriority() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - TransactionRunner runner = client.readWriteTransaction(Options.priority(RpcPriority.HIGH)); - runner.run( - transaction -> { - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - return null; - }); + MockSpannerTestActions.commitDeleteTransaction(client, Options.priority(RpcPriority.HIGH)); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4115,12 +2911,7 @@ public void testCommitWithPriority() { public void testTransactionManagerCommitWithPriority() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - try (TransactionManager manager = - client.transactionManager(Options.priority(RpcPriority.HIGH))) { - TransactionContext transaction = manager.begin(); - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - manager.commit(); - } + MockSpannerTestActions.transactionManagerCommit(client, Options.priority(RpcPriority.HIGH)); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4133,14 +2924,7 @@ public void testTransactionManagerCommitWithPriority() { public void testAsyncRunnerCommitWithPriority() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - AsyncRunner runner = client.runAsync(Options.priority(RpcPriority.HIGH)); - get( - runner.runAsync( - txn -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor)); + MockSpannerTestActions.asyncRunnerCommit(client, executor, Options.priority(RpcPriority.HIGH)); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4153,19 +2937,8 @@ public void testAsyncRunnerCommitWithPriority() { public void testAsyncTransactionManagerCommitWithPriority() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - try (AsyncTransactionManager manager = - client.transactionManagerAsync(Options.priority(RpcPriority.HIGH))) { - TransactionContextFuture transaction = manager.beginAsync(); - get( - transaction - .then( - (txn, input) -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor) - .commitAsync()); - } + MockSpannerTestActions.transactionManagerAsyncCommit( + client, executor, Options.priority(RpcPriority.HIGH)); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4178,12 +2951,7 @@ public void testAsyncTransactionManagerCommitWithPriority() { public void testCommitWithoutMaxCommitDelay() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - TransactionRunner runner = client.readWriteTransaction(); - runner.run( - transaction -> { - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - return null; - }); + MockSpannerTestActions.commitDeleteTransaction(client); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4195,13 +2963,8 @@ public void testCommitWithoutMaxCommitDelay() { public void testCommitWithMaxCommitDelay() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - TransactionRunner runner = - client.readWriteTransaction(Options.maxCommitDelay(java.time.Duration.ofMillis(100))); - runner.run( - transaction -> { - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - return null; - }); + MockSpannerTestActions.commitDeleteTransaction( + client, Options.maxCommitDelay(java.time.Duration.ofMillis(100))); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4216,11 +2979,8 @@ public void testCommitWithMaxCommitDelay() { public void testTransactionManagerCommitWithMaxCommitDelay() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - TransactionManager manager = - client.transactionManager(Options.maxCommitDelay(java.time.Duration.ofMillis(100))); - TransactionContext transaction = manager.begin(); - transaction.buffer(Mutation.delete("TEST", KeySet.all())); - manager.commit(); + MockSpannerTestActions.transactionManagerCommit( + client, Options.maxCommitDelay(java.time.Duration.ofMillis(100))); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4235,14 +2995,8 @@ public void testTransactionManagerCommitWithMaxCommitDelay() { public void testAsyncRunnerCommitWithMaxCommitDelay() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - AsyncRunner runner = client.runAsync(Options.maxCommitDelay(java.time.Duration.ofMillis(100))); - get( - runner.runAsync( - txn -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor)); + MockSpannerTestActions.asyncRunnerCommit( + client, executor, Options.maxCommitDelay(java.time.Duration.ofMillis(100))); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4257,19 +3011,8 @@ public void testAsyncRunnerCommitWithMaxCommitDelay() { public void testAsyncTransactionManagerCommitWithMaxCommitDelay() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - try (AsyncTransactionManager manager = - client.transactionManagerAsync(Options.maxCommitDelay(java.time.Duration.ofMillis(100)))) { - TransactionContextFuture transaction = manager.beginAsync(); - get( - transaction - .then( - (txn, input) -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - executor) - .commitAsync()); - } + MockSpannerTestActions.transactionManagerAsyncCommit( + client, executor, Options.maxCommitDelay(java.time.Duration.ofMillis(100))); List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(requests).hasSize(1); @@ -4280,73 +3023,6 @@ public void testAsyncTransactionManagerCommitWithMaxCommitDelay() { request.getMaxCommitDelay()); } - @Test - public void singleUseNoAction_ClearsCheckedOutSession() { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Set checkedOut = client.pool.checkedOutSessions; - assertThat(checkedOut).isEmpty(); - - // Getting a single use read-only transaction and not using it should not cause any sessions - // to be stuck in the map of checked out sessions. - client.singleUse().close(); - - assertThat(checkedOut).isEmpty(); - } - - @Test - public void singleUseReadOnlyTransactionNoAction_ClearsCheckedOutSession() { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Set checkedOut = client.pool.checkedOutSessions; - assertThat(checkedOut).isEmpty(); - - client.singleUseReadOnlyTransaction().close(); - - assertThat(checkedOut).isEmpty(); - } - - @Test - public void readWriteTransactionNoAction_ClearsCheckedOutSession() { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Set checkedOut = client.pool.checkedOutSessions; - assertThat(checkedOut).isEmpty(); - - client.readWriteTransaction(); - - assertThat(checkedOut).isEmpty(); - } - - @Test - public void readOnlyTransactionNoAction_ClearsCheckedOutSession() { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Set checkedOut = client.pool.checkedOutSessions; - assertThat(checkedOut).isEmpty(); - - client.readOnlyTransaction().close(); - - assertThat(checkedOut).isEmpty(); - } - - @Test - public void transactionManagerNoAction_ClearsCheckedOutSession() { - DatabaseClientImpl client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - Set checkedOut = client.pool.checkedOutSessions; - assertThat(checkedOut).isEmpty(); - - client.transactionManager().close(); - - assertThat(checkedOut).isEmpty(); - } - @Test public void transactionContextFailsIfUsedMultipleTimes() { DatabaseClient client = @@ -4385,9 +3061,7 @@ public void testGetDialectDefault() { @Test public void testGetDialectDefaultPreloaded() { try (Spanner spanner = - this.spanner - .getOptions() - .toBuilder() + this.spanner.getOptions().toBuilder() .setSessionPoolOption( SessionPoolOptions.newBuilder().setAutoDetectDialect(true).build()) .build() @@ -4415,9 +3089,7 @@ public void testGetDialectPostgreSQL() { public void testGetDialectPostgreSQLPreloaded() { mockSpanner.putStatementResult(StatementResult.detectDialectResult(Dialect.POSTGRESQL)); try (Spanner spanner = - this.spanner - .getOptions() - .toBuilder() + this.spanner.getOptions().toBuilder() .setSessionPoolOption( SessionPoolOptions.newBuilder().setAutoDetectDialect(true).build()) .build() @@ -4435,6 +3107,8 @@ public void testGetDialectPostgreSQLPreloaded() { public void testGetDialect_FailsDirectlyIfDatabaseNotFound() { mockSpanner.setBatchCreateSessionsExecutionTime( SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); @@ -4451,10 +3125,10 @@ public void testGetDialect_FailsDirectlyIfDatabaseNotFound() { public void testGetDialectDefaultPreloaded_FailsDirectlyIfDatabaseNotFound() { mockSpanner.setBatchCreateSessionsExecutionTime( SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); try (Spanner spanner = - this.spanner - .getOptions() - .toBuilder() + this.spanner.getOptions().toBuilder() .setSessionPoolOption( SessionPoolOptions.newBuilder().setAutoDetectDialect(true).build()) .build() @@ -4627,6 +3301,7 @@ public void testGetAllTypesAsString() { resultSet, col++); assertAsString("2023-01-11", resultSet, col++); + assertAsString("b1153a48-cd31-498e-b770-f554bce48e05", resultSet, col++); assertAsString("2023-01-11T11:55:18.123456789Z", resultSet, col++); if (dialect == Dialect.POSTGRESQL) { // Check PG_OID value @@ -4668,6 +3343,13 @@ public void testGetAllTypesAsString() { resultSet, col++); assertAsString(ImmutableList.of("2000-02-29", "NULL", "2000-01-01"), resultSet, col++); + assertAsString( + ImmutableList.of( + "b1153a48-cd31-498e-b770-f554bce48e05", + "NULL", + "11546309-8b37-4366-9a20-369381c7803a"), + resultSet, + col++); assertAsString( ImmutableList.of("2023-01-11T11:55:18.123456789Z", "NULL", "2023-01-12T11:55:18Z"), resultSet, @@ -4886,7 +3568,9 @@ public void testMetadataUnknownTypes() { // There are no rows, but we need to call resultSet.next() before we can get the metadata. assertFalse(resultSet.next()); assertEquals( - "STRUCT, c3 UNRECOGNIZED, c4 ARRAY, c5 ARRAY>, c6 UNRECOGNIZED, c7 ARRAY>>", + "STRUCT, c3 UNRECOGNIZED, c4" + + " ARRAY, c5 ARRAY>, c6" + + " UNRECOGNIZED, c7 ARRAY>>", resultSet.getType().toString()); assertEquals( "UNRECOGNIZED", resultSet.getType().getStructFields().get(0).getType().toString()); @@ -4927,6 +3611,152 @@ public void testMetadataUnknownTypes() { } } + @Test + public void testStatementWithUnnamedParameters() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + + Statement statement = + client.getStatementFactory().withUnnamedParameters("select id from test where b=?", true); + Statement generatedStatement = + Statement.newBuilder("select id from test where b=@p1").bind("p1").to(true).build(); + mockSpanner.putStatementResult(StatementResult.query(generatedStatement, SELECT1_RESULTSET)); + + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + + @Test + public void testStatementWithUnnamedParametersAndSingleLineComment() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + + Statement statement = + client + .getStatementFactory() + .withUnnamedParameters( + "-- comment about ? in the statement\nselect id from test where b=?", true); + Statement generatedStatement = + Statement.newBuilder("-- comment about ? in the statement\nselect id from test where b=@p1") + .bind("p1") + .to(true) + .build(); + mockSpanner.putStatementResult(StatementResult.query(generatedStatement, SELECT1_RESULTSET)); + + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + + @Test + public void testStatementWithUnnamedParametersAndSingleLineCommentWithHash() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + + Statement statement = + client + .getStatementFactory() + .withUnnamedParameters( + "# comment about ? in the statement\nselect id from test where b=?", true); + Statement generatedStatement = + Statement.newBuilder("# comment about ? in the statement\nselect id from test where b=@p1") + .bind("p1") + .to(true) + .build(); + mockSpanner.putStatementResult(StatementResult.query(generatedStatement, SELECT1_RESULTSET)); + + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + + @Test + public void testStatementWithUnnamedParametersAndMultiLineComment() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + + Statement statement = + client + .getStatementFactory() + .withUnnamedParameters( + "# comment about ? in the statement\n" + + "select id from test\n" + + " /* This is a ? comment \n" + + " about ? */ \n" + + " where b=? # this is a inline command about ?", + true); + Statement generatedStatement = + Statement.newBuilder( + "# comment about ? in the statement\n" + + "select id from test\n" + + " /* This is a ? comment \n" + + " about ? */ \n" + + " where b=@p1 # this is a inline command about ?") + .bind("p1") + .to(true) + .build(); + mockSpanner.putStatementResult(StatementResult.query(generatedStatement, SELECT1_RESULTSET)); + + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + + @Test + public void testStatementWithUnnamedParametersAndStringLiteralWithQuestionMark() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + + Statement statement = + client + .getStatementFactory() + .withUnnamedParameters("select id from test where name = \"abc?\" AND b=?", true); + Statement generatedStatement = + Statement.newBuilder("select id from test where name = \"abc?\" AND b=@p1") + .bind("p1") + .to(true) + .build(); + mockSpanner.putStatementResult(StatementResult.query(generatedStatement, SELECT1_RESULTSET)); + + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + + @Test + public void testStatementWithUnnamedParametersAndHint() { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + + Statement statement = + client + .getStatementFactory() + .withUnnamedParameters("@{FORCE_INDEX=ABCDEF} select id from test where b=?", true); + Statement generatedStatement = + Statement.newBuilder("@{FORCE_INDEX=ABCDEF} select id from test where b=@p1") + .bind("p1") + .to(true) + .build(); + mockSpanner.putStatementResult(StatementResult.query(generatedStatement, SELECT1_RESULTSET)); + + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + @Test public void testStatementWithBytesArrayParameter() { Statement statement = @@ -5017,7 +3847,8 @@ public void testRetryOnResourceExhausted() { SpannerOptions.Builder builder = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) .setCredentials(NoCredentials.getInstance()); RetryInfo retryInfo = RetryInfo.newBuilder() @@ -5089,70 +3920,23 @@ public void testRetryOnResourceExhausted() { } @Test - public void testSessionPoolExhaustedError_containsStackTraces() { - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setFailIfPoolExhausted() - .setMinSessions(2) - .setMaxSessions(4) - .setWaitForMinSessionsDuration(Duration.ofSeconds(10L)) - .build()) - .build() - .getService()) { - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - List transactions = new ArrayList<>(); - // Deliberately leak 4 sessions. - for (int i = 0; i < 4; i++) { - // Get a transaction manager without doing anything with it. This will reserve a session - // from the pool, but not increase the number of sessions marked as in use. - transactions.add(client.transactionManager()); - } - // Trying to get yet another transaction will fail. - // NOTE: This fails directly, because we have set the setFailIfPoolExhausted() option. - SpannerException spannerException = - assertThrows(SpannerException.class, client::transactionManager); - assertEquals(ErrorCode.RESOURCE_EXHAUSTED, spannerException.getErrorCode()); - assertTrue( - spannerException.getMessage(), - spannerException.getMessage().contains("There are currently 4 sessions checked out:")); - assertTrue( - spannerException.getMessage(), - spannerException.getMessage().contains("Session was checked out from the pool at")); - - SessionPool pool = ((DatabaseClientImpl) client).pool; - // Verify that there are no sessions in the pool. - assertEquals(0, pool.getNumberOfSessionsInPool()); - // Verify that the sessions have not (yet) been marked as in use. - assertEquals(0, pool.getNumberOfSessionsInUse()); - assertEquals(0, pool.getMaxSessionsInUse()); - // Verify that we have 4 sessions in the pool. - assertEquals(4, pool.getTotalSessionsPlusNumSessionsBeingCreated()); - - // Release the sessions back into the pool. - for (TransactionManager transaction : transactions) { - transaction.close(); - } - // Wait up to 100 milliseconds for the sessions to actually all be in the pool, as there are - // two possible ways that the session pool handles the above: - // 1. The pool starts to create 4 sessions. - // 2. It then hands out whatever session has been created to one of the waiters. - // 3. The waiting process then executes its transaction, and when finished, the session is - // given to any other process waiting at that moment. - // The above means that although there will always be 4 sessions created, it could in theory - // be that not all of them are used, as it could be that a transaction finishes before the - // creation of session 2, 3, or 4 finished, and then the existing session is re-used. - Stopwatch watch = Stopwatch.createStarted(); - while (pool.getNumberOfSessionsInPool() < 4 && watch.elapsed(TimeUnit.MILLISECONDS) < 100) { - Thread.yield(); - } - // Closing the transactions should return the sessions to the pool. - assertEquals(4, pool.getNumberOfSessionsInPool()); + public void testSelectHasXGoogRequestIdHeader() { + Statement statement = + Statement.newBuilder("select id from test where b=@p1") + .bind("p1") + .toBytesArray( + Arrays.asList(ByteArray.copyFrom("test1"), null, ByteArray.copyFrom("test2"))) + .build(); + mockSpanner.putStatementResult(StatementResult.query(statement, SELECT1_RESULTSET)); + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } finally { + // TODO(@odeke-em): Enable in later PR. + // xGoogReqIdInterceptor.assertIntegrity(); } } @@ -5199,6 +3983,10 @@ private ListValue getRows(Dialect dialect) { .encodeToString("test-bytes".getBytes(StandardCharsets.UTF_8))) .build()) .addValues(com.google.protobuf.Value.newBuilder().setStringValue("2023-01-11").build()) + .addValues( + com.google.protobuf.Value.newBuilder() + .setStringValue("b1153a48-cd31-498e-b770-f554bce48e05") + .build()) .addValues( com.google.protobuf.Value.newBuilder() .setStringValue("2023-01-11T11:55:18.123456789Z") @@ -5363,6 +4151,23 @@ private ListValue getRows(Dialect dialect) { .setStringValue("2000-01-01") .build()) .build())) + .addValues( + com.google.protobuf.Value.newBuilder() + .setListValue( + ListValue.newBuilder() + .addValues( + com.google.protobuf.Value.newBuilder() + .setStringValue("b1153a48-cd31-498e-b770-f554bce48e05") + .build()) + .addValues( + com.google.protobuf.Value.newBuilder() + .setNullValue(NullValue.NULL_VALUE) + .build()) + .addValues( + com.google.protobuf.Value.newBuilder() + .setStringValue("11546309-8b37-4366-9a20-369381c7803a") + .build()) + .build())) .addValues( com.google.protobuf.Value.newBuilder() .setListValue( @@ -5443,11 +4248,4 @@ private ListValue getRows(Dialect dialect) { return valuesBuilder.build(); } - - private boolean isMultiplexedSessionsEnabled() { - if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { - return false; - } - return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); - } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplWithDefaultRWTransactionOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplWithDefaultRWTransactionOptionsTest.java new file mode 100644 index 00000000000..d37bef01895 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplWithDefaultRWTransactionOptionsTest.java @@ -0,0 +1,620 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.cloud.spanner.MockSpannerTestUtil.INVALID_SELECT_STATEMENT; +import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1; +import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1_RESULTSET; +import static com.google.cloud.spanner.MockSpannerTestUtil.UPDATE_COUNT; +import static com.google.cloud.spanner.MockSpannerTestUtil.UPDATE_STATEMENT; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import com.google.api.gax.grpc.testing.LocalChannelProvider; +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.Options.RpcPriority; +import com.google.cloud.spanner.Options.TransactionOption; +import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions; +import com.google.protobuf.AbstractMessage; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.ExecuteBatchDmlRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; +import io.grpc.Server; +import io.grpc.Status; +import io.grpc.inprocess.InProcessServerBuilder; +import java.util.Collections; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.function.Consumer; +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; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class DatabaseClientImplWithDefaultRWTransactionOptionsTest { + private static final TransactionOption SERIALIZABLE_ISOLATION_OPTION = + Options.isolationLevel(IsolationLevel.SERIALIZABLE); + private static final TransactionOption RR_ISOLATION_OPTION = + Options.isolationLevel(IsolationLevel.REPEATABLE_READ); + private static final TransactionOption OPTIMISTIC_READ_LOCK_OPTION = + Options.readLockMode(ReadLockMode.OPTIMISTIC); + private static final TransactionOption PESSIMISTIC_READ_LOCK_OPTION = + Options.readLockMode(ReadLockMode.PESSIMISTIC); + private static final DatabaseId DATABASE_ID = + DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + private static MockSpannerServiceImpl mockSpanner; + private static Server server; + private static ExecutorService executor; + private static LocalChannelProvider channelProvider; + private Spanner spanner; + private Spanner spannerWithRR; + private Spanner spannerWithRRPessimistic; + private Spanner spannerWithSerializable; + private Spanner spannerWithSerOptimistic; + private DatabaseClient client; + private DatabaseClient clientWithRepeatableReadOption; + private DatabaseClient clientWithRRPessimisticOption; + private DatabaseClient clientWithSerializableOption; + private DatabaseClient clientWithSerOptimisticOption; + + @BeforeClass + public static void startStaticServer() throws Exception { + mockSpanner = new MockSpannerServiceImpl(); + mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. + mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); + mockSpanner.putStatementResult(StatementResult.query(SELECT1, SELECT1_RESULTSET)); + mockSpanner.putStatementResult( + StatementResult.exception( + INVALID_SELECT_STATEMENT, + Status.INVALID_ARGUMENT.withDescription("invalid statement").asRuntimeException())); + mockSpanner.putStatementResult( + StatementResult.read( + "FOO", KeySet.all(), Collections.singletonList("ID"), SELECT1_RESULTSET)); + + String uniqueName = InProcessServerBuilder.generateName(); + executor = Executors.newSingleThreadExecutor(); + server = + InProcessServerBuilder.forName(uniqueName) + // We need to use a real executor for timeouts to occur. + .scheduledExecutorService(new ScheduledThreadPoolExecutor(1)) + .addService(mockSpanner) + .build() + .start(); + channelProvider = LocalChannelProvider.create(uniqueName); + } + + @AfterClass + public static void stopServer() throws InterruptedException { + server.shutdown(); + server.awaitTermination(); + } + + @Before + public void setUp() { + mockSpanner.reset(); + mockSpanner.removeAllExecutionTimes(); + spanner = getSpannerOptionsBuilder().build().getService(); + spannerWithRR = getSpannerOptionsBuilder(IsolationLevel.REPEATABLE_READ).build().getService(); + spannerWithRRPessimistic = + getSpannerOptionsBuilder(IsolationLevel.REPEATABLE_READ, ReadLockMode.PESSIMISTIC) + .build() + .getService(); + spannerWithSerializable = + getSpannerOptionsBuilder(IsolationLevel.SERIALIZABLE).build().getService(); + spannerWithSerOptimistic = + getSpannerOptionsBuilder(IsolationLevel.SERIALIZABLE, ReadLockMode.OPTIMISTIC) + .build() + .getService(); + client = spanner.getDatabaseClient(DATABASE_ID); + clientWithRepeatableReadOption = spannerWithRR.getDatabaseClient(DATABASE_ID); + clientWithRRPessimisticOption = spannerWithRRPessimistic.getDatabaseClient(DATABASE_ID); + clientWithSerializableOption = spannerWithSerializable.getDatabaseClient(DATABASE_ID); + clientWithSerOptimisticOption = spannerWithSerOptimistic.getDatabaseClient(DATABASE_ID); + } + + private static SpannerOptions.Builder getSpannerOptionsBuilder() { + return getSpannerOptionsBuilder( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, ReadLockMode.READ_LOCK_MODE_UNSPECIFIED); + } + + private static SpannerOptions.Builder getSpannerOptionsBuilder(IsolationLevel isolationLevel) { + return getSpannerOptionsBuilder(isolationLevel, ReadLockMode.READ_LOCK_MODE_UNSPECIFIED); + } + + private static SpannerOptions.Builder getSpannerOptionsBuilder( + IsolationLevel isolationLevel, ReadLockMode readLockMode) { + SpannerOptions.Builder spannerOptionsBuilder = + SpannerOptions.newBuilder() + .setProjectId("[PROJECT]") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()); + return spannerOptionsBuilder.setDefaultTransactionOptions( + DefaultReadWriteTransactionOptions.newBuilder() + .setIsolationLevel(isolationLevel) + .setReadLockMode(readLockMode) + .build()); + } + + private void executeTest( + Consumer testAction, IsolationLevel expectedIsolationLevel) { + testAction.accept(client); + validateIsolationLevel(expectedIsolationLevel, ReadLockMode.READ_LOCK_MODE_UNSPECIFIED); + } + + private void executeTest( + Consumer testAction, + IsolationLevel expectedIsolationLevel, + ReadLockMode readLockMode) { + testAction.accept(client); + validateIsolationLevel(expectedIsolationLevel, readLockMode); + } + + private void executeTestWithRR( + Consumer testAction, IsolationLevel expectedIsolationLevel) { + testAction.accept(clientWithRepeatableReadOption); + validateIsolationLevel(expectedIsolationLevel, ReadLockMode.READ_LOCK_MODE_UNSPECIFIED); + } + + private void executeTestWithRRPessimistic( + Consumer testAction, + IsolationLevel expectedIsolationLevel, + ReadLockMode expectedReadLockMode) { + testAction.accept(clientWithRRPessimisticOption); + validateIsolationLevel(expectedIsolationLevel, expectedReadLockMode); + } + + private void executeTestWithSerializable( + Consumer testAction, IsolationLevel expectedIsolationLevel) { + testAction.accept(clientWithSerializableOption); + validateIsolationLevel(expectedIsolationLevel, ReadLockMode.READ_LOCK_MODE_UNSPECIFIED); + } + + private void executeTestWithSerializableOptimistic( + Consumer testAction, + IsolationLevel expectedIsolationLevel, + ReadLockMode expectedReadLockMode) { + testAction.accept(clientWithSerOptimisticOption); + validateIsolationLevel(expectedIsolationLevel, expectedReadLockMode); + } + + @After + public void tearDown() { + spanner.close(); + spannerWithRR.close(); + spannerWithRRPessimistic.close(); + spannerWithSerializable.close(); + spannerWithSerOptimistic.close(); + } + + @Test + public void testWrite_WithNoIsolationLevel() { + executeTest( + MockSpannerTestActions::writeInsertMutation, IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED); + } + + @Test + public void testWrite_WithRRSpannerOptions() { + executeTestWithRR(MockSpannerTestActions::writeInsertMutation, IsolationLevel.REPEATABLE_READ); + } + + @Test + public void testWriteWithOptions_WithRRSpannerOptions() { + executeTestWithRR( + c -> + MockSpannerTestActions.writeInsertMutationWithOptions( + c, Options.priority(RpcPriority.HIGH)), + IsolationLevel.REPEATABLE_READ); + } + + @Test + public void testWriteWithOptions_WithRRPessimisticSpannerOptions() { + executeTestWithRRPessimistic( + c -> + MockSpannerTestActions.writeInsertMutationWithOptions( + c, Options.priority(RpcPriority.HIGH)), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void testWriteWithOptions_WithSerializableTxnOption() { + executeTestWithRR( + c -> + MockSpannerTestActions.writeInsertMutationWithOptions(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void testWriteWithOptions_WithSerializableOptimisticTxnOption() { + executeTestWithRRPessimistic( + c -> + MockSpannerTestActions.writeInsertMutationWithOptions( + c, SERIALIZABLE_ISOLATION_OPTION, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void testWriteAtLeastOnce_WithSerializableSpannerOptions() { + executeTestWithSerializable( + MockSpannerTestActions::writeAtLeastOnceInsertMutation, IsolationLevel.SERIALIZABLE); + } + + @Test + public void testWriteAtLeastOnceWithOptions_WithRRTxnOption() { + executeTestWithSerializable( + c -> + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + c, RR_ISOLATION_OPTION), + IsolationLevel.REPEATABLE_READ); + } + + @Test + public void testWriteAtLeastOnceWithOptions_WithRRPessimisticTxnOption() { + executeTestWithSerializableOptimistic( + c -> + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + c, RR_ISOLATION_OPTION, PESSIMISTIC_READ_LOCK_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void testWriteAtLeastOnceWithOptions_WithPessimisticTxnOption() { + executeTestWithRRPessimistic( + c -> + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + c, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void testReadWriteTxn_WithRRSpannerOption_batchUpdate() { + executeTestWithRR( + MockSpannerTestActions::executeBatchUpdateTransaction, IsolationLevel.REPEATABLE_READ); + } + + @Test + public void testReadWriteTxn_WithSerializableTxnOption_batchUpdate() { + executeTestWithRR( + c -> MockSpannerTestActions.executeBatchUpdateTransaction(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void testReadWriteTxn_WithSerOptimisticTxnOption_batchUpdate() { + executeTestWithRRPessimistic( + c -> + MockSpannerTestActions.executeBatchUpdateTransaction( + c, SERIALIZABLE_ISOLATION_OPTION, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void testPartitionedDML_WithRRSpannerOption() { + executeTestWithRR( + MockSpannerTestActions::executePartitionedUpdate, + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED); + } + + @Test + public void testCommit_WithSerializableTxnOption() { + executeTest( + c -> MockSpannerTestActions.commitDeleteTransaction(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void testCommit_WithSerializablePessimisticTxnOption() { + executeTest( + c -> + MockSpannerTestActions.commitDeleteTransaction( + c, SERIALIZABLE_ISOLATION_OPTION, PESSIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void testCommit_WithSerializableOptimisticTxnOption() { + executeTest( + c -> + MockSpannerTestActions.commitDeleteTransaction( + c, SERIALIZABLE_ISOLATION_OPTION, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void testTransactionManagerCommit_WithRRTxnOption() { + executeTestWithSerializable( + c -> MockSpannerTestActions.transactionManagerCommit(c, RR_ISOLATION_OPTION), + IsolationLevel.REPEATABLE_READ); + } + + @Test + public void testTransactionManagerCommit_WithRRTxnOptionAndSerOptimisticSpannerOptions() { + executeTestWithSerializableOptimistic( + c -> MockSpannerTestActions.transactionManagerCommit(c, RR_ISOLATION_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void testAsyncRunnerCommit_WithRRSpannerOption() { + executeTestWithRR( + c -> MockSpannerTestActions.asyncRunnerCommit(c, executor), IsolationLevel.REPEATABLE_READ); + } + + @Test + public void testAsyncRunnerCommit_WithSerOptimisticSpannerOption() { + executeTestWithSerializableOptimistic( + c -> MockSpannerTestActions.asyncRunnerCommit(c, executor), + IsolationLevel.SERIALIZABLE, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void testAsyncTransactionManagerCommit_WithSerializableTxnOption() { + executeTestWithRR( + c -> + MockSpannerTestActions.transactionManagerAsyncCommit( + c, executor, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void testAsyncTransactionManagerCommit_WithRRPessimisticSpannerOptions() { + executeTestWithRRPessimistic( + c -> MockSpannerTestActions.transactionManagerAsyncCommit(c, executor), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void testAsyncTransactionManagerCommit_WithSerOptimisticTxnOption() { + executeTestWithRRPessimistic( + c -> + MockSpannerTestActions.transactionManagerAsyncCommit( + c, executor, SERIALIZABLE_ISOLATION_OPTION, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void testReadWriteTxn_WithNoOptions() { + executeTest(MockSpannerTestActions::executeSelect1, IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED); + } + + @Test + public void executeSqlWithRWTransactionOptions_RepeatableRead() { + executeTest( + c -> MockSpannerTestActions.executeSelect1(c, RR_ISOLATION_OPTION), + IsolationLevel.REPEATABLE_READ); + } + + @Test + public void executeSqlWithRWTransactionOptions_RRPessimistic() { + executeTest( + c -> + MockSpannerTestActions.executeSelect1( + c, RR_ISOLATION_OPTION, PESSIMISTIC_READ_LOCK_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void executeSqlWithRWTransactionOptions_RROptimistic() { + executeTest( + c -> + MockSpannerTestActions.executeSelect1( + c, RR_ISOLATION_OPTION, PESSIMISTIC_READ_LOCK_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void + executeSqlWithDefaultSpannerOptions_SerializableAndRWTransactionOptions_RepeatableRead() { + executeTestWithSerializable( + c -> MockSpannerTestActions.executeSelect1(c, RR_ISOLATION_OPTION), + IsolationLevel.REPEATABLE_READ); + } + + @Test + public void + executeSqlWithDefaultSpannerOptions_RepeatableReadAndRWTransactionOptions_Serializable() { + executeTestWithRR( + c -> MockSpannerTestActions.executeSelect1(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void executeSqlWithDefaultSpannerOptions_RepeatableReadAndNoRWTransactionOptions() { + executeTestWithRR(MockSpannerTestActions::executeSelect1, IsolationLevel.REPEATABLE_READ); + } + + @Test + public void executeSqlWithRWTransactionOptions_Serializable() { + executeTest( + c -> MockSpannerTestActions.executeSelect1(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void executeSqlWithRWTransactionOptions_SerializablePessimistic() { + executeTest( + c -> + MockSpannerTestActions.executeSelect1( + c, SERIALIZABLE_ISOLATION_OPTION, PESSIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void executeSqlWithRWTransactionOptions_SerializableOptimistic() { + executeTest( + c -> + MockSpannerTestActions.executeSelect1( + c, SERIALIZABLE_ISOLATION_OPTION, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void readWithRWTransactionOptions_RepeatableRead() { + executeTest( + c -> MockSpannerTestActions.executeReadFoo(c, RR_ISOLATION_OPTION), + IsolationLevel.REPEATABLE_READ); + } + + @Test + public void readWithRWTransactionOptions_RepeatableReadPessimistic() { + executeTest( + c -> + MockSpannerTestActions.executeReadFoo( + c, RR_ISOLATION_OPTION, PESSIMISTIC_READ_LOCK_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void readWithRWTransactionOptions_RepeatableReadOptimistic() { + executeTest( + c -> + MockSpannerTestActions.executeReadFoo( + c, RR_ISOLATION_OPTION, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void readWithRWTransactionOptions_Serializable() { + executeTest( + c -> MockSpannerTestActions.executeReadFoo(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void beginTransactionWithRWTransactionOptions_RepeatableRead() { + executeTest( + c -> MockSpannerTestActions.executeInvalidAndValidSql(c, RR_ISOLATION_OPTION), + IsolationLevel.REPEATABLE_READ); + } + + @Test + public void beginTransactionWithRWTransactionOptions_Serializable() { + executeTest( + c -> MockSpannerTestActions.executeInvalidAndValidSql(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE); + } + + @Test + public void beginTransactionWithRWTransactionOptions_RROptimistic() { + executeTestWithRRPessimistic( + c -> MockSpannerTestActions.executeInvalidAndValidSql(c, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.REPEATABLE_READ, + ReadLockMode.OPTIMISTIC); + } + + @Test + public void beginTransactionWithRWTransactionOptions_SerPessimistic() { + executeTestWithRRPessimistic( + c -> MockSpannerTestActions.executeInvalidAndValidSql(c, SERIALIZABLE_ISOLATION_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.PESSIMISTIC); + } + + @Test + public void beginTransactionWithRWTransactionOptions_SerOptimistic() { + executeTestWithRRPessimistic( + c -> + MockSpannerTestActions.executeInvalidAndValidSql( + c, SERIALIZABLE_ISOLATION_OPTION, OPTIMISTIC_READ_LOCK_OPTION), + IsolationLevel.SERIALIZABLE, + ReadLockMode.OPTIMISTIC); + } + + private void validateIsolationLevel(IsolationLevel isolationLevel, ReadLockMode readLockMode) { + boolean foundMatchingRequest = false; + for (AbstractMessage request : mockSpanner.getRequests()) { + if (request instanceof ExecuteSqlRequest) { + foundMatchingRequest = true; + assertEquals( + isolationLevel, + ((ExecuteSqlRequest) request).getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, + ((ExecuteSqlRequest) request) + .getTransaction() + .getBegin() + .getReadWrite() + .getReadLockMode()); + } else if (request instanceof BeginTransactionRequest) { + foundMatchingRequest = true; + assertEquals( + isolationLevel, ((BeginTransactionRequest) request).getOptions().getIsolationLevel()); + assertEquals( + readLockMode, + ((BeginTransactionRequest) request).getOptions().getReadWrite().getReadLockMode()); + } else if (request instanceof ReadRequest) { + foundMatchingRequest = true; + assertEquals( + isolationLevel, + ((ReadRequest) request).getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, + ((ReadRequest) request).getTransaction().getBegin().getReadWrite().getReadLockMode()); + } else if (request instanceof CommitRequest) { + foundMatchingRequest = true; + assertEquals( + isolationLevel, + ((CommitRequest) request).getSingleUseTransaction().getIsolationLevel()); + assertEquals( + readLockMode, + ((CommitRequest) request).getSingleUseTransaction().getReadWrite().getReadLockMode()); + } else if (request instanceof ExecuteBatchDmlRequest) { + foundMatchingRequest = true; + assertEquals( + isolationLevel, + ((ExecuteBatchDmlRequest) request).getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, + ((ExecuteBatchDmlRequest) request) + .getTransaction() + .getBegin() + .getReadWrite() + .getReadLockMode()); + } + if (foundMatchingRequest) { + break; + } + } + assertTrue("No gRPC call is made", foundMatchingRequest); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java index f49ba026d43..dc65f738619 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java @@ -157,8 +157,7 @@ public void testToProto() { public void testUnspecifiedDialectDefaultsToGoogleStandardSqlDialect() { final Database database = Database.fromProto( - defaultProtoDatabase() - .toBuilder() + defaultProtoDatabase().toBuilder() .setDatabaseDialect(DatabaseDialect.DATABASE_DIALECT_UNSPECIFIED) .build(), dbClient); @@ -172,8 +171,7 @@ public void testUnrecognizedDialectThrowsException() { IllegalArgumentException.class, () -> Database.fromProto( - defaultProtoDatabase() - .toBuilder() + defaultProtoDatabase().toBuilder() .setDatabaseDialect(DatabaseDialect.UNRECOGNIZED) .build(), dbClient)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java index 35712cd5b4e..28580f53365 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java @@ -17,7 +17,6 @@ package com.google.cloud.spanner; import static com.google.cloud.spanner.BenchmarkingUtilityScripts.collectResults; -import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -114,9 +113,6 @@ public void teardown() throws Exception { @Benchmark public void burstQueries(final BenchmarkState server) throws Exception { final DatabaseClientImpl client = server.client; - SessionPool pool = client.pool; - assertThat(pool.totalSessions()) - .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(PARALLEL_THREADS)); @@ -132,9 +128,6 @@ public void burstQueries(final BenchmarkState server) throws Exception { @Benchmark public void burstQueriesAndWrites(final BenchmarkState server) throws Exception { final DatabaseClientImpl client = server.client; - SessionPool pool = client.pool; - assertThat(pool.totalSessions()) - .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(PARALLEL_THREADS)); @@ -154,9 +147,6 @@ public void burstQueriesAndWrites(final BenchmarkState server) throws Exception @Benchmark public void burstUpdates(final BenchmarkState server) throws Exception { final DatabaseClientImpl client = server.client; - SessionPool pool = client.pool; - assertThat(pool.totalSessions()) - .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(PARALLEL_THREADS)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ExcludeFromChangeStreamTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ExcludeFromChangeStreamTest.java new file mode 100644 index 00000000000..498e2fab107 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ExcludeFromChangeStreamTest.java @@ -0,0 +1,299 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.connection.AbstractMockServerTest; +import com.google.cloud.spanner.connection.RandomResultSetGenerator; +import com.google.common.collect.ImmutableList; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.ReadRequest; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Status; +import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class ExcludeFromChangeStreamTest extends AbstractMockServerTest { + + @BeforeClass + public static void setupReadResult() { + RandomResultSetGenerator generator = new RandomResultSetGenerator(10); + mockSpanner.putStatementResult( + StatementResult.query( + Statement.of("SELECT my-column FROM my-table WHERE 1=1"), generator.generate())); + } + + private Spanner createSpanner() { + return SpannerOptions.newBuilder() + .setProjectId("fake-project") + .setHost("http://localhost:" + getPort()) + .setCredentials(NoCredentials.getInstance()) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .build() + .getService(); + } + + @Test + public void testStandardTransaction() { + try (Spanner spanner = createSpanner()) { + for (int i = 0; i < 10; i++) { + DatabaseClient client = + spanner.getDatabaseClient( + DatabaseId.of("fake-project", "fake-instance", "fake-database")); + client + .readWriteTransaction(Options.tag("some-tag"), Options.excludeTxnFromChangeStreams()) + .run( + transaction -> { + try (ResultSet resultSet = + transaction.read("my-table", KeySet.all(), ImmutableList.of("my-column"))) { + while (resultSet.next()) {} + } + transaction.buffer( + Mutation.newInsertOrUpdateBuilder("my-table") + .set("my-column") + .to(1L) + .build()); + return null; + }); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(ReadRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + ReadRequest readRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(0); + assertTrue(readRequest.hasTransaction()); + assertTrue(readRequest.getTransaction().hasBegin()); + assertTrue(readRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(readRequest.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + + CommitRequest commitRequest = mockSpanner.getRequestsOfType(CommitRequest.class).get(0); + assertNotNull(commitRequest.getTransactionId()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testTransactionAbortedDuringRead() { + try (Spanner spanner = createSpanner()) { + for (int i = 0; i < 10; i++) { + DatabaseClient client = + spanner.getDatabaseClient( + DatabaseId.of("fake-project", "fake-instance", "fake-database")); + AtomicBoolean hasAborted = new AtomicBoolean(false); + client + .readWriteTransaction(Options.tag("some-tag"), Options.excludeTxnFromChangeStreams()) + .run( + transaction -> { + if (hasAborted.compareAndSet(false, true)) { + mockSpanner.abortNextStatement(); + } + try (ResultSet resultSet = + transaction.read("my-table", KeySet.all(), ImmutableList.of("my-column"))) { + while (resultSet.next()) {} + } + transaction.buffer( + Mutation.newInsertOrUpdateBuilder("my-table") + .set("my-column") + .to(1L) + .build()); + return null; + }); + assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(ReadRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + BeginTransactionRequest beginRequest = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class).get(0); + assertTrue(beginRequest.getOptions().hasReadWrite()); + assertTrue(beginRequest.getOptions().getExcludeTxnFromChangeStreams()); + + ReadRequest firstReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(0); + assertTrue(firstReadRequest.hasTransaction()); + assertTrue(firstReadRequest.getTransaction().hasBegin()); + assertTrue(firstReadRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(firstReadRequest.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + + ReadRequest secondReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(1); + assertTrue(secondReadRequest.hasTransaction()); + assertTrue(secondReadRequest.getTransaction().hasId()); + + CommitRequest commitRequest = mockSpanner.getRequestsOfType(CommitRequest.class).get(0); + assertNotNull(commitRequest.getTransactionId()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testTransactionAbortedDuringCommit() { + try (Spanner spanner = createSpanner()) { + for (int i = 0; i < 10; i++) { + DatabaseClient client = + spanner.getDatabaseClient( + DatabaseId.of("fake-project", "fake-instance", "fake-database")); + AtomicBoolean hasAborted = new AtomicBoolean(false); + client + .readWriteTransaction(Options.tag("some-tag"), Options.excludeTxnFromChangeStreams()) + .run( + transaction -> { + try (ResultSet resultSet = + transaction.read("my-table", KeySet.all(), ImmutableList.of("my-column"))) { + while (resultSet.next()) {} + } + if (hasAborted.compareAndSet(false, true)) { + mockSpanner.abortNextStatement(); + } + transaction.buffer( + Mutation.newInsertOrUpdateBuilder("my-table") + .set("my-column") + .to(1L) + .build()); + return null; + }); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(ReadRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); + + ReadRequest firstReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(0); + assertTrue(firstReadRequest.hasTransaction()); + assertTrue(firstReadRequest.getTransaction().hasBegin()); + assertTrue(firstReadRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(firstReadRequest.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + + ReadRequest secondReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(1); + assertTrue(secondReadRequest.hasTransaction()); + assertTrue(secondReadRequest.getTransaction().hasBegin()); + assertTrue(secondReadRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(secondReadRequest.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + + for (CommitRequest commitRequest : mockSpanner.getRequestsOfType(CommitRequest.class)) { + assertNotNull(commitRequest.getTransactionId()); + } + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testReadReturnsUnavailable() { + + try (Spanner spanner = createSpanner()) { + for (int i = 0; i < 10; i++) { + mockSpanner.setStreamingReadExecutionTime( + SimulatedExecutionTime.ofException(Status.UNAVAILABLE.asRuntimeException())); + DatabaseClient client = + spanner.getDatabaseClient( + DatabaseId.of("fake-project", "fake-instance", "fake-database")); + client + .readWriteTransaction(Options.tag("some-tag"), Options.excludeTxnFromChangeStreams()) + .run( + transaction -> { + try (ResultSet resultSet = + transaction.read("my-table", KeySet.all(), ImmutableList.of("my-column"))) { + while (resultSet.next()) {} + } + transaction.buffer( + Mutation.newInsertOrUpdateBuilder("my-table") + .set("my-column") + .to(1L) + .build()); + return null; + }); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(ReadRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + ReadRequest firstReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(0); + assertTrue(firstReadRequest.hasTransaction()); + assertTrue(firstReadRequest.getTransaction().hasBegin()); + assertTrue(firstReadRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(firstReadRequest.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + + ReadRequest secondReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(1); + assertTrue(secondReadRequest.hasTransaction()); + assertTrue(secondReadRequest.getTransaction().hasBegin()); + assertTrue(secondReadRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(secondReadRequest.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + + CommitRequest commitRequest = mockSpanner.getRequestsOfType(CommitRequest.class).get(0); + assertNotNull(commitRequest.getTransactionId()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testReadReturnsUnavailableHalfway() { + try (Spanner spanner = createSpanner()) { + for (int i = 0; i < 10; i++) { + mockSpanner.setStreamingReadExecutionTime( + SimulatedExecutionTime.ofStreamException(Status.UNAVAILABLE.asRuntimeException(), 2)); + + DatabaseClient client = + spanner.getDatabaseClient( + DatabaseId.of("fake-project", "fake-instance", "fake-database")); + client + .readWriteTransaction(Options.tag("some-tag"), Options.excludeTxnFromChangeStreams()) + .run( + transaction -> { + try (ResultSet resultSet = + transaction.read("my-table", KeySet.all(), ImmutableList.of("my-column"))) { + while (resultSet.next()) {} + } + transaction.buffer( + Mutation.newInsertOrUpdateBuilder("my-table") + .set("my-column") + .to(1L) + .build()); + return null; + }); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(ReadRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + ReadRequest firstReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(0); + assertTrue(firstReadRequest.hasTransaction()); + assertTrue(firstReadRequest.getTransaction().hasBegin()); + assertTrue(firstReadRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(firstReadRequest.getTransaction().getBegin().getExcludeTxnFromChangeStreams()); + + ReadRequest secondReadRequest = mockSpanner.getRequestsOfType(ReadRequest.class).get(1); + assertTrue(secondReadRequest.hasTransaction()); + assertTrue(secondReadRequest.getTransaction().hasId()); + + CommitRequest commitRequest = mockSpanner.getRequestsOfType(CommitRequest.class).get(0); + assertNotNull(commitRequest.getTransactionId()); + + mockSpanner.clearRequests(); + } + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ExperimentalHostMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ExperimentalHostMockServerTest.java new file mode 100644 index 00000000000..423c3337ab8 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ExperimentalHostMockServerTest.java @@ -0,0 +1,88 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static org.junit.Assert.assertFalse; + +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.protobuf.ListValue; +import com.google.protobuf.Value; +import com.google.spanner.v1.BatchCreateSessionsRequest; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.StructType; +import com.google.spanner.v1.TypeCode; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class ExperimentalHostMockServerTest extends AbstractMockServerTest { + + private static final String SQL_QUERY = "SELECT * FROM Singers"; + + private static final ResultSetMetadata SINGERS_METADATA = + ResultSetMetadata.newBuilder() + .setRowType( + StructType.newBuilder() + .addFields( + StructType.Field.newBuilder() + .setName("FirstName") + .setType( + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.STRING))) + .addFields( + StructType.Field.newBuilder() + .setName("LastName") + .setType( + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.STRING))) + .build()) + .build(); + + private static final com.google.spanner.v1.ResultSet SINGERS_RESULT_SET = + com.google.spanner.v1.ResultSet.newBuilder() + .setMetadata(SINGERS_METADATA) + .addRows( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("Jane")) + .addValues(Value.newBuilder().setStringValue("Doe")) + .build()) + .build(); + + @Test + public void testExperimentalHostPreventsBatchCreateSessions() { + mockSpanner.putStatementResult( + StatementResult.query(Statement.of(SQL_QUERY), SINGERS_RESULT_SET)); + + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("p") + .setCredentials(NoCredentials.getInstance()) + .setExperimentalHost(null) + .setChannelProvider(channelProvider) + .build(); + + try (Spanner spanner = options.getService()) { + DatabaseClient dbClient = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + // Perform an operation to trigger session creation + ResultSet resultSet = dbClient.singleUse().executeQuery(Statement.of(SQL_QUERY)); + while (resultSet.next()) {} + + assertFalse(mockSpanner.getRequestTypes().contains(BatchCreateSessionsRequest.class)); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java index efb012ba8e2..c48c5ec2f42 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java @@ -16,10 +16,12 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.setExperimentalHostSpannerOptions; import static com.google.common.base.Preconditions.checkState; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; -import com.google.auth.oauth2.GoogleCredentials; +import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.spanner.spi.v1.SpannerInterceptorProvider; import io.grpc.CallOptions; import io.grpc.Channel; @@ -46,7 +48,7 @@ public class GceTestEnvConfig implements TestEnvConfig { public static final String GCE_CREDENTIALS_FILE = "spanner.gce.config.credentials_file"; public static final String GCE_STREAM_BROKEN_PROBABILITY = "spanner.gce.config.stream_broken_probability"; - public static final String ATTEMPT_DIRECT_PATH = "spanner.attempt_directpath"; + public static final String ENABLE_DIRECT_ACCESS = "spanner.enable_direct_access"; public static final String DIRECT_PATH_TEST_SCENARIO = "spanner.directpath_test_scenario"; // IP address prefixes allocated for DirectPath backends. @@ -64,7 +66,7 @@ public GceTestEnvConfig() { double errorProbability = Double.parseDouble(System.getProperty(GCE_STREAM_BROKEN_PROBABILITY, "0.0")); checkState(errorProbability <= 1.0); - boolean attemptDirectPath = Boolean.getBoolean(ATTEMPT_DIRECT_PATH); + boolean enableDirectAccess = Boolean.getBoolean(ENABLE_DIRECT_ACCESS); String directPathTestScenario = System.getProperty(DIRECT_PATH_TEST_SCENARIO, ""); SpannerOptions.Builder builder = SpannerOptions.newBuilder() @@ -78,14 +80,15 @@ public GceTestEnvConfig() { } if (!credentialsFile.isEmpty()) { try { - builder.setCredentials(GoogleCredentials.fromStream(new FileInputStream(credentialsFile))); + builder.setCredentials( + ServiceAccountCredentials.fromStream(new FileInputStream(credentialsFile))); } catch (IOException e) { throw new RuntimeException(e); } } SpannerInterceptorProvider interceptorProvider = SpannerInterceptorProvider.createDefault().with(new GrpcErrorInjector(errorProbability)); - if (attemptDirectPath) { + if (enableDirectAccess) { interceptorProvider = interceptorProvider.with(new DirectPathAddressCheckInterceptor(directPathTestScenario)); } @@ -93,7 +96,7 @@ public GceTestEnvConfig() { // DirectPath tests need to set a custom endpoint to the ChannelProvider InstantiatingGrpcChannelProvider.Builder customChannelProviderBuilder = InstantiatingGrpcChannelProvider.newBuilder(); - if (attemptDirectPath) { + if (enableDirectAccess) { customChannelProviderBuilder .setEndpoint(DIRECT_PATH_ENDPOINT) .setAttemptDirectPath(true) @@ -101,6 +104,10 @@ public GceTestEnvConfig() { .setInterceptorProvider(interceptorProvider); builder.setChannelProvider(customChannelProviderBuilder.build()); } + + if (isExperimentalHost()) { + setExperimentalHostSpannerOptions(builder); + } options = builder.build(); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GrpcResultSetTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GrpcResultSetTest.java index 25c01560e92..4007c972c24 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GrpcResultSetTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GrpcResultSetTest.java @@ -19,6 +19,7 @@ import static com.google.common.testing.SerializableTester.reserialize; 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.assertThrows; import static org.junit.Assert.assertTrue; @@ -43,6 +44,7 @@ import com.google.spanner.v1.ResultSetStats; import com.google.spanner.v1.Transaction; import java.math.BigDecimal; +import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.ArrayList; @@ -51,6 +53,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.UUID; import javax.annotation.Nullable; import org.junit.Before; import org.junit.Test; @@ -72,7 +75,8 @@ public void onTransactionMetadata(Transaction transaction, boolean shouldInclude throws SpannerException {} @Override - public SpannerException onError(SpannerException e, boolean withBeginTransaction) { + public SpannerException onError( + SpannerException e, boolean withBeginTransaction, boolean lastStatement) { return e; } @@ -85,7 +89,9 @@ public void onPrecommitToken(MultiplexedSessionPrecommitToken token) {} @Before public void setUp() { - stream = new GrpcStreamIterator(10, /*cancelQueryWhenClientIsClosed=*/ false); + stream = + new GrpcStreamIterator( + /* lastStatement= */ false, 10, /* cancelQueryWhenClientIsClosed= */ false); stream.setCall( new SpannerRpc.StreamingCall() { @Override @@ -552,6 +558,15 @@ public void serialization() { Value.timestamp(null), Value.date(Date.fromYearMonthDay(2017, 4, 17)), Value.date(null), + Value.uuid(UUID.randomUUID()), + Value.uuid(null), + Value.interval( + Interval.builder() + .setMonths(100) + .setDays(10) + .setNanos(BigInteger.valueOf(1000010)) + .build()), + Value.interval(null), Value.stringArray(ImmutableList.of("one", "two")), Value.stringArray(null), Value.boolArray(new boolean[] {true, false}), @@ -574,6 +589,13 @@ public void serialization() { ImmutableList.of( Date.fromYearMonthDay(2017, 4, 17), Date.fromYearMonthDay(2017, 5, 18))), Value.dateArray(null), + Value.uuidArray(ImmutableList.of(UUID.randomUUID(), UUID.randomUUID())), + Value.uuidArray(null), + Value.intervalArray( + ImmutableList.of( + Interval.parseFromString("P0Y"), + Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30000L)))), + Value.intervalArray(null), Value.struct(s(null, 30)), Value.struct(structType, null), Value.structArray(structType, Arrays.asList(s("def", 10), null)), @@ -739,6 +761,35 @@ public void getDate() { assertThat(resultSet.getDate(0)).isEqualTo(Date.fromYearMonthDay(2018, 5, 29)); } + @Test + public void getUuid() { + final UUID uuid = UUID.randomUUID(); + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.uuid())))) + .addValues(Value.uuid(uuid).toProto()) + .build()); + consumer.onCompleted(); + assertThat(resultSet.next()).isTrue(); + assertThat(resultSet.getUuid(0)).isEqualTo(uuid); + } + + @Test + public void getInterval() { + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.interval())))) + .addValues( + Value.interval(Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(12345678))) + .toProto()) + .build()); + consumer.onCompleted(); + + assertThat(resultSet.next()).isTrue(); + assertThat(resultSet.getInterval(0)) + .isEqualTo(Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(12345678))); + } + @Test public void getTimestamp() { consumer.onPartialResultSet( @@ -992,6 +1043,40 @@ public void getDateList() { assertThat(resultSet.getDateList(0)).isEqualTo(dateList); } + @Test + public void getUuidList() { + List uuidList = Arrays.asList(UUID.randomUUID(), UUID.randomUUID()); + + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata( + makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.uuid()))))) + .addValues(Value.uuidArray(uuidList).toProto()) + .build()); + consumer.onCompleted(); + + assertThat(resultSet.next()).isTrue(); + assertThat(resultSet.getUuidList(0)).isEqualTo(uuidList); + } + + @Test + public void getIntervalList() { + List intervalList = new ArrayList<>(); + intervalList.add(Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(100))); + intervalList.add(Interval.fromMonthsDaysNanos(-10, -20, BigInteger.valueOf(134520))); + + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata( + makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.interval()))))) + .addValues(Value.intervalArray(intervalList).toProto()) + .build()); + consumer.onCompleted(); + + assertThat(resultSet.next()).isTrue(); + assertThat(resultSet.getIntervalList(0)).isEqualTo(intervalList); + } + @Test public void getJsonList() { List jsonList = new ArrayList<>(); @@ -1115,4 +1200,58 @@ public void getProtoEnumList() { resultSet.getProtoEnum(0, Genre::forNumber); }); } + + @Test + public void verifyResultSetWithLastTrue() { + long[] longArray = {111, 333, 444, 0, -1, -2234, Long.MAX_VALUE, Long.MIN_VALUE}; + + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata( + makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.int64()))))) + .addValues(Value.int64Array(longArray).toProto()) + .setLast(false) + .build()); + assertTrue(resultSet.next()); + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata( + makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.int64()))))) + .addValues(Value.int64Array(longArray).toProto()) + .setLast(true) + .build()); + assertTrue(resultSet.next()); + assertFalse(resultSet.next()); + consumer.onCompleted(); + } + + @Test + public void shouldThrowDeadlineExceededIfLastTrueIsNotReceived() { + long[] longArray = {111, 333, 444, 0, -1, -2234, Long.MAX_VALUE, Long.MIN_VALUE}; + + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata( + makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.int64()))))) + .addValues(Value.int64Array(longArray).toProto()) + .setLast(false) + .build()); + assertTrue(resultSet.next()); + consumer.onPartialResultSet( + PartialResultSet.newBuilder() + .setMetadata( + makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.int64()))))) + .addValues(Value.int64Array(longArray).toProto()) + .setLast(false) + .build()); + assertTrue(resultSet.next()); + SpannerException spannerException = + assertThrows( + SpannerException.class, + () -> { + assertThat(resultSet.next()).isFalse(); + }); + assertEquals("DEADLINE_EXCEEDED: stream wait timeout", spannerException.getMessage()); + consumer.onCompleted(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITSessionPoolIntegrationTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITSessionPoolIntegrationTest.java deleted file mode 100644 index df29aac9170..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITSessionPoolIntegrationTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; -import io.opencensus.trace.Tracing; -import io.opentelemetry.api.OpenTelemetry; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** - * Integration tests for read and query. - * - *

                                See also {@code it/WriteIntegrationTest}, which provides coverage of writing and reading back - * all Cloud Spanner types. - */ -@Category(SerialIntegrationTest.class) -@RunWith(JUnit4.class) -public class ITSessionPoolIntegrationTest { - @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); - private static final String TABLE_NAME = "TestTable"; - - private static Database db; - private SessionPool pool; - - @BeforeClass - public static void setUpDatabase() { - db = - env.getTestHelper() - .createTestDatabase( - "CREATE TABLE TestTable (" - + " Key STRING(MAX) NOT NULL," - + " StringValue STRING(MAX)," - + ") PRIMARY KEY (Key)", - "CREATE INDEX TestTableByValue ON TestTable(StringValue)"); - - // Includes k0..k14. Note that strings k{10,14} sort between k1 and k2. - List mutations = new ArrayList<>(); - for (int i = 0; i < 15; ++i) { - mutations.add( - Mutation.newInsertOrUpdateBuilder(TABLE_NAME) - .set("Key") - .to("k" + i) - .set("StringValue") - .to("v" + i) - .build()); - } - env.getTestHelper().getDatabaseClient(db).write(mutations); - } - - @Before - public void setUp() { - SessionPoolOptions options = - SessionPoolOptions.newBuilder().setMinSessions(1).setMaxSessions(2).build(); - pool = - SessionPool.createPool( - options, - new ExecutorFactory() { - - @Override - public void release(ScheduledExecutorService executor) { - executor.shutdown(); - } - - @Override - public ScheduledExecutorService get() { - return new ScheduledThreadPoolExecutor(2); - } - }, - ((SpannerImpl) env.getTestHelper().getClient()).getSessionClient(db.getId()), - new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer(""), false), - OpenTelemetry.noop()); - } - - @Test - public void sessionCreation() { - try (PooledSessionFuture session = pool.getSession()) { - assertThat(session.get()).isNotNull(); - } - - try (PooledSessionFuture session = pool.getSession(); - PooledSessionFuture session2 = pool.getSession()) { - assertThat(session.get()).isNotNull(); - assertThat(session2.get()).isNotNull(); - } - } - - @Test - public void poolExhaustion() throws Exception { - Session session1 = pool.getSession().get(); - Session session2 = pool.getSession().get(); - final CountDownLatch latch = new CountDownLatch(1); - new Thread( - () -> { - try (Session session3 = pool.getSession().get()) { - latch.countDown(); - } - }) - .start(); - assertThat(latch.await(5, TimeUnit.SECONDS)).isFalse(); - session1.close(); - session2.close(); - latch.await(); - } - - @Test - public void multipleWaiters() throws Exception { - Session session1 = pool.getSession().get(); - Session session2 = pool.getSession().get(); - int numSessions = 5; - final CountDownLatch latch = new CountDownLatch(numSessions); - for (int i = 0; i < numSessions; i++) { - new Thread( - () -> { - try (Session session = pool.getSession().get()) { - latch.countDown(); - } - }) - .start(); - } - session1.close(); - session2.close(); - // Everyone should get session pretty quickly. - assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue(); - } - - @Test - public void closeQuicklyDoesNotBlockIndefinitely() throws Exception { - pool.closeAsync(new SpannerImpl.ClosedException()).get(); - } - - @Test - public void closeAfterInitialCreateDoesNotBlockIndefinitely() throws Exception { - pool.getSession().close(); - pool.closeAsync(new SpannerImpl.ClosedException()).get(); - } - - @Test - public void closeWhenSessionsActiveFinishes() throws Exception { - pool.getSession().get(); - // This will log a warning that a session has been leaked, as the session that we retrieved in - // the previous statement was never returned to the pool. - pool.closeAsync(new SpannerImpl.ClosedException()).get(); - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITTransactionRetryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITTransactionRetryTest.java new file mode 100644 index 00000000000..e93abc3f8ef --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITTransactionRetryTest.java @@ -0,0 +1,143 @@ +/* + * 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.spanner; + +import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; +import static org.junit.Assume.assumeTrue; + +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@Category(ParallelIntegrationTest.class) +@RunWith(JUnit4.class) +public class ITTransactionRetryTest { + + @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); + + @Test + public void TestRetryInfo() { + assumeFalse("emulator does not support parallel transaction", isUsingEmulator()); + // TODO(sakthivelmani) - Re-enable once b/422916293 is resolved + assumeFalse( + "Skipping the test due to a known bug b/422916293", + env.getTestHelper().getOptions().isEnableDirectAccess()); + assumeFalse("Skipping the test due to a known bug b/422916293", isExperimentalHost()); + + // Creating a database with the table which contains INT64 columns + Database db = + env.getTestHelper() + .createTestDatabase("CREATE TABLE Test(ID INT64, " + "EMPID INT64) PRIMARY KEY (ID)"); + DatabaseClient databaseClient = env.getTestHelper().getClient().getDatabaseClient(db.getId()); + + // Inserting one row + databaseClient + .readWriteTransaction() + .run( + transaction -> { + transaction.buffer( + Mutation.newInsertBuilder("Test").set("ID").to(1).set("EMPID").to(1).build()); + return null; + }); + + int numRetries = 10; + boolean isAbortedWithRetryInfo = false; + while (numRetries-- > 0) { + try (TransactionManager transactionManager1 = databaseClient.transactionManager()) { + try (TransactionManager transactionManager2 = databaseClient.transactionManager()) { + try { + TransactionContext transaction1 = transactionManager1.begin(); + TransactionContext transaction2 = transactionManager2.begin(); + transaction1.executeUpdate( + Statement.of("UPDATE Test SET EMPID = EMPID + 1 WHERE ID = 1")); + transaction2.executeUpdate( + Statement.of("UPDATE Test SET EMPID = EMPID + 1 WHERE ID = 1")); + transactionManager1.commit(); + transactionManager2.commit(); + } catch (AbortedException abortedException) { + assertThat(abortedException.getErrorCode()).isEqualTo(ErrorCode.ABORTED); + if (abortedException.getRetryDelayInMillis() > 0) { + isAbortedWithRetryInfo = true; + break; + } + } + } + } + } + + assertTrue("Transaction is not aborted with the trailers", isAbortedWithRetryInfo); + } + + @Test + public void TestRetryInfoWithDirectPath() { + assumeFalse("emulator does not support parallel transaction", isUsingEmulator()); + // TODO(sakthivelmani) - Re-enable once b/422916293 is resolved + assumeTrue( + "Enabling this test due to bug b/422916293", + env.getTestHelper().getOptions().isEnableDirectAccess()); + + // Creating a database with the table which contains INT64 columns + Database db = + env.getTestHelper() + .createTestDatabase("CREATE TABLE Test(ID INT64, " + "EMPID INT64) PRIMARY KEY (ID)"); + DatabaseClient databaseClient = env.getTestHelper().getClient().getDatabaseClient(db.getId()); + + // Inserting one row + databaseClient + .readWriteTransaction() + .run( + transaction -> { + transaction.buffer( + Mutation.newInsertBuilder("Test").set("ID").to(1).set("EMPID").to(1).build()); + return null; + }); + + int numRetries = 10; + boolean isAbortedWithRetryInfo = false; + while (numRetries-- > 0) { + try (TransactionManager transactionManager1 = databaseClient.transactionManager()) { + try (TransactionManager transactionManager2 = databaseClient.transactionManager()) { + try { + TransactionContext transaction1 = transactionManager1.begin(); + TransactionContext transaction2 = transactionManager2.begin(); + transaction1.executeUpdate( + Statement.of("UPDATE Test SET EMPID = EMPID + 1 WHERE ID = 1")); + transaction2.executeUpdate( + Statement.of("UPDATE Test SET EMPID = EMPID + 1 WHERE ID = 1")); + transactionManager1.commit(); + transactionManager2.commit(); + } catch (AbortedException abortedException) { + assertThat(abortedException.getErrorCode()).isEqualTo(ErrorCode.ABORTED); + if (abortedException.getRetryDelayInMillis() > 0) { + isAbortedWithRetryInfo = true; + break; + } + } + } + } + } + + assertFalse("Transaction is aborted with the trailers", isAbortedWithRetryInfo); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginBenchmark.java index 1448ebbc96a..c3063f4d6c5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginBenchmark.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginBenchmark.java @@ -16,8 +16,6 @@ package com.google.cloud.spanner; -import static com.google.common.truth.Truth.assertThat; - import com.google.api.gax.rpc.TransportChannelProvider; import com.google.cloud.NoCredentials; import com.google.common.base.Stopwatch; @@ -103,8 +101,7 @@ public void setup() throws Exception { spanner.getDatabaseClient(DatabaseId.of(options.getProjectId(), instance, database)); Stopwatch watch = Stopwatch.createStarted(); // Wait until the session pool has initialized. - while (client.pool.getNumberOfSessionsInPool() - < spanner.getOptions().getSessionPoolOptions().getMinSessions()) { + while (client.multiplexedSessionDatabaseClient.getCurrentSessionReference() == null) { Thread.sleep(1L); if (watch.elapsed(TimeUnit.SECONDS) > 10L) { break; @@ -143,9 +140,6 @@ public void teardown() throws Exception { public void burstRead(final BenchmarkState server) throws Exception { int totalQueries = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions() * 8; int parallelThreads = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions() * 2; - SessionPool pool = server.client.pool; - assertThat(pool.totalSessions()) - .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); @@ -173,9 +167,6 @@ public void burstRead(final BenchmarkState server) throws Exception { public void burstWrite(final BenchmarkState server) throws Exception { int totalWrites = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions() * 8; int parallelThreads = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions() * 2; - SessionPool pool = server.client.pool; - assertThat(pool.totalSessions()) - .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); @@ -201,9 +192,6 @@ public void burstReadAndWrite(final BenchmarkState server) throws Exception { int totalWrites = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions() * 4; int totalReads = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions() * 4; int parallelThreads = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions() * 2; - SessionPool pool = server.client.pool; - assertThat(pool.totalSessions()) - .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java index c67c0084674..db1b39ac0a0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java @@ -56,7 +56,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -140,7 +139,7 @@ public class InlineBeginTransactionTest { protected Spanner spanner; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); @@ -191,6 +190,13 @@ public void setUp() { .setChannelProvider(channelProvider) .setCredentials(NoCredentials.getInstance()) .setTrackTransactionStarter() + // The extra BeginTransaction RPC for multiplexed session read-write is causing + // unexpected behavior in tests having a mock on the BeginTransaction RPC. Therefore, + // this is being skipped. + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setSkipVerifyingBeginTransactionForMuxRW(true) + .build()) .build() .getService(); } @@ -583,19 +589,7 @@ public void testInlinedBeginFirstQueryReturnsUnavailable() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); mockSpanner.setExecuteStreamingSqlExecutionTime( SimulatedExecutionTime.ofStreamException(Status.UNAVAILABLE.asRuntimeException(), 0)); - long value = - client - .readWriteTransaction() - .run( - transaction -> { - // The first attempt will return UNAVAILABLE and retry internally. - try (ResultSet rs = transaction.executeQuery(SELECT1)) { - while (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + long value = MockSpannerTestActions.executeSelect1(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(2); @@ -607,20 +601,7 @@ public void testInlinedBeginFirstReadReturnsUnavailable() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); mockSpanner.setStreamingReadExecutionTime( SimulatedExecutionTime.ofStreamException(Status.UNAVAILABLE.asRuntimeException(), 0)); - Long value = - client - .readWriteTransaction() - .run( - transaction -> { - // The first attempt will return UNAVAILABLE and retry internally. - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("ID"))) { - while (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + Long value = MockSpannerTestActions.executeReadFoo(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); assertThat(countRequests(ReadRequest.class)).isEqualTo(2); @@ -634,22 +615,7 @@ public void testInlinedBeginFirstReadReturnsUnavailableRetryReturnsAborted() { SimulatedExecutionTime.ofExceptions( Arrays.asList( Status.UNAVAILABLE.asRuntimeException(), Status.ABORTED.asRuntimeException()))); - Long value = - client - .readWriteTransaction() - .run( - transaction -> { - // The first attempt will return UNAVAILABLE and retry internally. - // The second attempt will return ABORTED and should cause the transaction to - // retry. - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("ID"))) { - if (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + Long value = MockSpannerTestActions.executeReadFoo(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(1); assertThat(countRequests(ReadRequest.class)).isEqualTo(3); @@ -663,21 +629,7 @@ public void testInlinedBeginFirstQueryReturnsUnavailableRetryReturnsAborted() { SimulatedExecutionTime.ofExceptions( Arrays.asList( Status.UNAVAILABLE.asRuntimeException(), Status.ABORTED.asRuntimeException()))); - Long value = - client - .readWriteTransaction() - .run( - transaction -> { - // The first attempt will return UNAVAILABLE and retry internally. - // The second attempt will return ABORTED and should cause the transaction to - // retry. - try (ResultSet rs = transaction.executeQuery(SELECT1)) { - if (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + Long value = MockSpannerTestActions.executeSelect1(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(1); assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(3); @@ -714,24 +666,7 @@ public void testInlinedBeginFirstReadReturnsUnavailableRetryReturnsAborted_WithC SimulatedExecutionTime.ofExceptions( Arrays.asList( Status.UNAVAILABLE.asRuntimeException(), Status.ABORTED.asRuntimeException()))); - Long value = - client - .readWriteTransaction() - .run( - transaction -> { - // The first attempt will return UNAVAILABLE and retry internally. - // The second attempt will return ABORTED and should cause the transaction to - // retry. - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("ID"))) { - if (rs.next()) { - return rs.getLong(0); - } - } catch (AbortedException e) { - // Ignore the AbortedException and let the commit handle it. - } - return 0L; - }); + Long value = MockSpannerTestActions.executeReadFoo(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(1); assertThat(countRequests(ReadRequest.class)).isEqualTo(3); @@ -773,23 +708,7 @@ public void testInlinedBeginFirstDmlReturnsUnavailableRetryReturnsAborted_WithCa SimulatedExecutionTime.ofExceptions( Arrays.asList( Status.UNAVAILABLE.asRuntimeException(), Status.ABORTED.asRuntimeException()))); - Long value = - client - .readWriteTransaction() - .run( - transaction -> { - // The first attempt will return UNAVAILABLE and retry internally. - // The second attempt will return ABORTED and should cause the transaction to - // retry. - try (ResultSet rs = transaction.executeQuery(SELECT1)) { - if (rs.next()) { - return rs.getLong(0); - } - } catch (AbortedException e) { - // Ignore the AbortedException and let the commit handle it. - } - return 0L; - }); + Long value = MockSpannerTestActions.executeSelect1(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(1); assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(3); @@ -952,20 +871,7 @@ public void testInlinedBeginCommitAfterReadReturnsUnavailable() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); mockSpanner.setCommitExecutionTime( SimulatedExecutionTime.ofException(Status.UNAVAILABLE.asRuntimeException())); - Long value = - client - .readWriteTransaction() - .run( - transaction -> { - // The first attempt will return UNAVAILABLE and retry internally. - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("ID"))) { - if (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + Long value = MockSpannerTestActions.executeReadFoo(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); assertThat(countRequests(ReadRequest.class)).isEqualTo(1); @@ -1006,18 +912,7 @@ public void testInlinedBeginFirstReadReturnsUnavailableAndCommitAborts() { public void testInlinedBeginTxWithQuery() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - long updateCount = - client - .readWriteTransaction() - .run( - transaction -> { - try (ResultSet rs = transaction.executeQuery(SELECT1)) { - while (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + long updateCount = MockSpannerTestActions.executeSelect1(client); assertThat(updateCount).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); @@ -1028,19 +923,7 @@ public void testInlinedBeginTxWithQuery() { @Test public void testInlinedBeginTxWithRead() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - long updateCount = - client - .readWriteTransaction() - .run( - transaction -> { - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("ID"))) { - while (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + long updateCount = MockSpannerTestActions.executeReadFoo(client); assertThat(updateCount).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); assertThat(countRequests(ReadRequest.class)).isEqualTo(1); @@ -1784,192 +1667,203 @@ public void testWaitForTransactionTimeoutForCommit() { assertEquals(0, countRequests(CommitRequest.class)); } + static void runWithIgnoreInlineBegin(Runnable runnable) { + // This will cause statements that requests a transaction to not return a transaction id. + mockSpanner.setIgnoreInlineBeginRequest(true); + try { + runnable.run(); + } finally { + mockSpanner.setIgnoreInlineBeginRequest(false); + } + } + @Test public void testQueryWithInlineBeginDidNotReturnTransaction() { - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // This will cause the first statement that requests a transaction to not return a transaction - // id. - mockSpanner.ignoreNextInlineBeginRequest(); - SpannerException e = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run( - transaction -> { - try (ResultSet rs = - transaction.executeQuery(SELECT1_UNION_ALL_SELECT2)) { - while (rs.next()) {} - } - return null; - })); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); - assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); - assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); - assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + runWithIgnoreInlineBegin( + () -> { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + SpannerException e = + assertThrows( + SpannerException.class, + () -> + client + .readWriteTransaction() + .run( + transaction -> { + try (ResultSet rs = + transaction.executeQuery(SELECT1_UNION_ALL_SELECT2)) { + while (rs.next()) {} + } + return null; + })); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); + assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); + assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); + assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + }); } @Test public void testReadWithInlineBeginDidNotReturnTransaction() { - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // This will cause the first statement that requests a transaction to not return a transaction - // id. - mockSpanner.ignoreNextInlineBeginRequest(); - SpannerException e = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run( - transaction -> - transaction.readRow( - "FOO", Key.of(1L), Collections.singletonList("BAR")))); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); - assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); - assertThat(countRequests(ReadRequest.class)).isEqualTo(1); - assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + runWithIgnoreInlineBegin( + () -> { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + SpannerException e = + assertThrows( + SpannerException.class, + () -> + client + .readWriteTransaction() + .run( + transaction -> + transaction.readRow( + "FOO", Key.of(1L), Collections.singletonList("BAR")))); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); + assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); + assertThat(countRequests(ReadRequest.class)).isEqualTo(1); + assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + }); } @Test public void testUpdateWithInlineBeginDidNotReturnTransaction() { - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // This will cause the first statement that requests a transaction to not return a transaction - // id. - mockSpanner.ignoreNextInlineBeginRequest(); - SpannerException e = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT))); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); - assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); - assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); - assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + runWithIgnoreInlineBegin( + () -> { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + SpannerException e = + assertThrows( + SpannerException.class, + () -> + client + .readWriteTransaction() + .run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT))); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); + assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); + assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); + assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + }); } @Test public void testBatchUpdateWithInlineBeginDidNotReturnTransaction() { - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // This will cause the first statement that requests a transaction to not return a transaction - // id. - mockSpanner.ignoreNextInlineBeginRequest(); - SpannerException e = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run( - transaction -> { - transaction.batchUpdate(Collections.singletonList(UPDATE_STATEMENT)); - return null; - })); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); - assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); - assertThat(countRequests(ExecuteBatchDmlRequest.class)).isEqualTo(1); - assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + runWithIgnoreInlineBegin( + () -> { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + SpannerException e = + assertThrows( + SpannerException.class, + () -> + client + .readWriteTransaction() + .run( + transaction -> { + transaction.batchUpdate( + Collections.singletonList(UPDATE_STATEMENT)); + return null; + })); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); + assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); + assertThat(countRequests(ExecuteBatchDmlRequest.class)).isEqualTo(1); + assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + }); } @Test public void testQueryAsyncWithInlineBeginDidNotReturnTransaction() { - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - final ExecutorService executor = Executors.newSingleThreadExecutor(); - // This will cause the first statement that requests a transaction to not return a transaction - // id. - mockSpanner.ignoreNextInlineBeginRequest(); - SpannerException outerException = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run( - transaction -> { - try (AsyncResultSet rs = - transaction.executeQueryAsync(SELECT1_UNION_ALL_SELECT2)) { - return SpannerApiFutures.get( - rs.setCallback( - executor, - resultSet -> { - try { - while (true) { - switch (resultSet.tryNext()) { - case OK: - break; - case DONE: + runWithIgnoreInlineBegin( + () -> { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + final ExecutorService executor = Executors.newSingleThreadExecutor(); + SpannerException outerException = + assertThrows( + SpannerException.class, + () -> + client + .readWriteTransaction() + .run( + transaction -> { + try (AsyncResultSet rs = + transaction.executeQueryAsync(SELECT1_UNION_ALL_SELECT2)) { + return SpannerApiFutures.get( + rs.setCallback( + executor, + resultSet -> { + try { + while (true) { + switch (resultSet.tryNext()) { + case OK: + break; + case DONE: + return CallbackResponse.DONE; + case NOT_READY: + return CallbackResponse.CONTINUE; + } + } + } catch (SpannerException e) { return CallbackResponse.DONE; - case NOT_READY: - return CallbackResponse.CONTINUE; - } - } - } catch (SpannerException e) { - return CallbackResponse.DONE; - } - })); - } - })); - assertEquals(ErrorCode.FAILED_PRECONDITION, outerException.getErrorCode()); - assertThat(outerException.getMessage()) - .contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); - - assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); - assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); - assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + } + })); + } + })); + assertEquals(ErrorCode.FAILED_PRECONDITION, outerException.getErrorCode()); + assertThat(outerException.getMessage()) + .contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); + + assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); + assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); + assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + }); } @Test public void testUpdateAsyncWithInlineBeginDidNotReturnTransaction() { - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // This will cause the first statement that requests a transaction to not return a transaction - // id. - mockSpanner.ignoreNextInlineBeginRequest(); - SpannerException e = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run( - transaction -> - SpannerApiFutures.get( - transaction.executeUpdateAsync(UPDATE_STATEMENT)))); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); - assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); - assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); - assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + runWithIgnoreInlineBegin( + () -> { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + SpannerException e = + assertThrows( + SpannerException.class, + () -> + client + .readWriteTransaction() + .run( + transaction -> + SpannerApiFutures.get( + transaction.executeUpdateAsync(UPDATE_STATEMENT)))); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); + assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); + assertThat(countRequests(ExecuteSqlRequest.class)).isEqualTo(1); + assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + }); } @Test public void testBatchUpdateAsyncWithInlineBeginDidNotReturnTransaction() { - DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // This will cause the first statement that requests a transaction to not return a transaction - // id. - mockSpanner.ignoreNextInlineBeginRequest(); - SpannerException e = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run( - transaction -> - SpannerApiFutures.get( - transaction.batchUpdateAsync( - Collections.singletonList(UPDATE_STATEMENT))))); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); - assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); - assertThat(countRequests(ExecuteBatchDmlRequest.class)).isEqualTo(1); - assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + runWithIgnoreInlineBegin( + () -> { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + SpannerException e = + assertThrows( + SpannerException.class, + () -> + client + .readWriteTransaction() + .run( + transaction -> + SpannerApiFutures.get( + transaction.batchUpdateAsync( + Collections.singletonList(UPDATE_STATEMENT))))); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + assertThat(e.getMessage()).contains(AbstractReadContext.NO_TRANSACTION_RETURNED_MSG); + assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); + assertThat(countRequests(ExecuteBatchDmlRequest.class)).isEqualTo(1); + assertThat(countRequests(CommitRequest.class)).isEqualTo(0); + }); } @Test @@ -1980,7 +1874,8 @@ public void testInlinedBeginTx_withCancelledOnFirstStatement() { statement, Status.CANCELLED .withDescription( - "Read/query was cancelled due to the enclosing transaction being invalidated by a later transaction in the same session.") + "Read/query was cancelled due to the enclosing transaction being invalidated" + + " by a later transaction in the same session.") .asRuntimeException())); DatabaseClient client = @@ -2025,7 +1920,8 @@ public void testInlinedBeginTx_withStickyCancelledOnFirstStatement() { statement, Status.CANCELLED .withDescription( - "Read/query was cancelled due to the enclosing transaction being invalidated by a later transaction in the same session.") + "Read/query was cancelled due to the enclosing transaction being invalidated" + + " by a later transaction in the same session.") .asRuntimeException())); DatabaseClient client = diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java index 558efff7487..a78982e8c35 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java @@ -280,8 +280,7 @@ public void createInstance() throws Exception { when(rpc.createInstance( "projects/" + PROJECT_ID, INSTANCE_ID, - getInstanceProto() - .toBuilder() + getInstanceProto().toBuilder() .setProcessingUnits(0) .setEdition(com.google.spanner.admin.instance.v1.Instance.Edition.ENTERPRISE_PLUS) .build())) @@ -297,6 +296,39 @@ public void createInstance() throws Exception { assertThat(op.get().getId().getName()).isEqualTo(INSTANCE_NAME); } + @Test + public void createInstanceWithOrgNameInProjectId() throws Exception { + String projectIdWithOrg = "my-org:my-project"; + String instanceNameWithOrg = "projects/my-org:my-project/instances/my-instance"; + String configNameWithOrg = "projects/my-org:my-project/instanceConfigs/my-config"; + + InstanceAdminClient universeClient = + new InstanceAdminClientImpl(projectIdWithOrg, rpc, dbClient); + com.google.spanner.admin.instance.v1.Instance instance = + com.google.spanner.admin.instance.v1.Instance.newBuilder() + .setConfig(configNameWithOrg) + .setName(instanceNameWithOrg) + .setNodeCount(1) + .setProcessingUnits(0) + .setEdition(com.google.spanner.admin.instance.v1.Instance.Edition.ENTERPRISE_PLUS) + .build(); + OperationFuture + rawOperationFuture = + OperationFutureUtil.immediateOperationFuture( + "createInstance", instance, CreateInstanceMetadata.getDefaultInstance()); + when(rpc.createInstance("projects/" + projectIdWithOrg, INSTANCE_ID, instance)) + .thenReturn(rawOperationFuture); + OperationFuture op = + universeClient.createInstance( + InstanceInfo.newBuilder(InstanceId.of(projectIdWithOrg, INSTANCE_ID)) + .setInstanceConfigId(InstanceConfigId.of(projectIdWithOrg, CONFIG_ID)) + .setEdition(com.google.spanner.admin.instance.v1.Instance.Edition.ENTERPRISE_PLUS) + .setNodeCount(1) + .build()); + assertThat(op.isDone()).isTrue(); + assertThat(op.get().getId().getName()).isEqualTo(instanceNameWithOrg); + } + @Test public void testCreateInstanceWithProcessingUnits() throws Exception { OperationFuture diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceInfoTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceInfoTest.java index e12bb17382d..645c696e3e9 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceInfoTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceInfoTest.java @@ -89,8 +89,7 @@ public void testBuildInstanceInfo() { assertEquals(Timestamp.ofTimeMicroseconds(46000), info.getCreateTime()); AutoscalingConfig newAutoscalingConfig = - autoscalingConfig - .toBuilder() + autoscalingConfig.toBuilder() .setAutoscalingLimits( AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(10).setMaxNodes(100)) .build(); @@ -172,12 +171,9 @@ public void testEquals() { .build(); AutoscalingConfig autoscalingConfig2 = - autoscalingConfig1 - .toBuilder() + autoscalingConfig1.toBuilder() .setAutoscalingLimits( - autoscalingConfig1 - .getAutoscalingLimits() - .toBuilder() + autoscalingConfig1.getAutoscalingLimits().toBuilder() .setMinNodes(50) .setMaxNodes(100)) .build(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceTest.java index 2dfa08ef366..692d92de896 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceTest.java @@ -86,14 +86,12 @@ public void buildInstance() { assertEquals(Timestamp.ofTimeMicroseconds(46000), instance.getCreateTime()); AutoscalingConfig newAutoscalingConfig = - autoscalingConfig - .toBuilder() + autoscalingConfig.toBuilder() .setAutoscalingLimits( AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(10).setMaxNodes(100)) .build(); instance = - instance - .toBuilder() + instance.toBuilder() .setDisplayName("new test instance") .setAutoscalingConfig(newAutoscalingConfig) .build(); @@ -172,12 +170,9 @@ public void equalityWithAutoscalingConfig() { .build(); AutoscalingConfig autoscalingConfig2 = - autoscalingConfig1 - .toBuilder() + autoscalingConfig1.toBuilder() .setAutoscalingLimits( - autoscalingConfig1 - .getAutoscalingLimits() - .toBuilder() + autoscalingConfig1.getAutoscalingLimits().toBuilder() .setMinNodes(50) .setMaxNodes(100)) .build(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java index 4593c04cc18..ed59601f186 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java @@ -16,20 +16,34 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.base.Preconditions.checkState; import static org.junit.Assume.assumeFalse; import com.google.api.client.util.ExponentialBackOff; import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.Timestamp; +import com.google.cloud.opentelemetry.trace.TraceConfiguration; +import com.google.cloud.opentelemetry.trace.TraceExporter; import com.google.cloud.spanner.DatabaseInfo.DatabaseField; import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.cloud.spanner.testing.RemoteSpannerHelper; import com.google.common.collect.Iterators; import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; +import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; +import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import java.util.Collection; +import java.util.Collections; import java.util.Objects; import java.util.Random; import java.util.concurrent.ExecutionException; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -67,10 +81,22 @@ public class IntegrationTestEnv extends ExternalResource { private final boolean alwaysCreateNewInstance; private RemoteSpannerHelper testHelper; + private Collection testEnvOptions = Collections.emptyList(); + + public enum TestEnvOptions { + USE_END_TO_END_TRACING; + // TODO : Move alwaysCreateNewInstance to TestEnvOptions + } + public IntegrationTestEnv() { this(false); } + public IntegrationTestEnv(Collection testEnvOptions) { + this(false); + this.testEnvOptions = testEnvOptions; + } + public IntegrationTestEnv(final boolean alwaysCreateNewInstance) { this.alwaysCreateNewInstance = alwaysCreateNewInstance; } @@ -105,10 +131,19 @@ boolean isCloudDevel() { protected void before() throws Throwable { this.initializeConfig(); assumeFalse(alwaysCreateNewInstance && isCloudDevel()); + assumeFalse( + "Creating instances is not supported in experimental host", + alwaysCreateNewInstance && isExperimentalHost()); this.config.setUp(); - SpannerOptions options = config.spannerOptions(); + if (testEnvOptions.stream() + .anyMatch(testEnvOption -> TestEnvOptions.USE_END_TO_END_TRACING.equals(testEnvOption))) { + // OpenTelemetry set up for enabling End to End tracing for all integration test env. + // The gRPC stub and connections are created during test env set up using SpannerOptions and + // are reused for executing statements. + options = spannerOptionsWithEndToEndTracing(options); + } String instanceProperty = System.getProperty(TEST_INSTANCE_PROPERTY, ""); InstanceId instanceId; if (!instanceProperty.isEmpty() && !alwaysCreateNewInstance) { @@ -133,6 +168,37 @@ protected void before() throws Throwable { } } + public SpannerOptions spannerOptionsWithEndToEndTracing(SpannerOptions options) { + assumeFalse("This test requires credentials", EmulatorSpannerHelper.isUsingEmulator()); + + TraceConfiguration.Builder traceConfigurationBuilder = TraceConfiguration.builder(); + if (options.getCredentials() != null) { + traceConfigurationBuilder.setCredentials(options.getCredentials()); + } + SpanExporter traceExporter = + TraceExporter.createWithConfiguration( + traceConfigurationBuilder.setProjectId(options.getProjectId()).build()); + + String serviceName = "java-spanner-integration-tests-" + ThreadLocalRandom.current().nextInt(); + SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder() + // Always sample in this test to ensure we know what we get. + .setSampler(Sampler.alwaysOn()) + .setResource(Resource.builder().put("service.name", serviceName).build()) + .addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build()) + .build(); + OpenTelemetrySdk openTelemetry = + OpenTelemetrySdk.builder() + .setTracerProvider(sdkTracerProvider) + .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) + .build(); + SpannerOptions.enableOpenTelemetryTraces(); + return options.toBuilder() + .setOpenTelemetry(openTelemetry) + .setEnableEndToEndTracing(true) + .build(); + } + RemoteSpannerHelper createTestHelper(SpannerOptions options, InstanceId instanceId) throws Throwable { return RemoteSpannerHelper.create(options, instanceId); @@ -220,36 +286,56 @@ static boolean isRetryableResourceExhaustedException(SpannerException exception) return exception .getMessage() .contains( - "Quota exceeded for quota metric 'Instance create requests' and limit 'Instance create requests per minute'") + "Quota exceeded for quota metric 'Instance create requests' and limit 'Instance" + + " create requests per minute'") || exception.getMessage().matches(".*cannot add \\d+ nodes in region.*"); } private void cleanUpOldDatabases(InstanceId instanceId) { - long OLD_DB_THRESHOLD_SECS = TimeUnit.SECONDS.convert(6L, TimeUnit.HOURS); + long OLD_DB_THRESHOLD_SECS = TimeUnit.SECONDS.convert(2L, TimeUnit.HOURS); Timestamp currentTimestamp = Timestamp.now(); int numDropped = 0; String TEST_DB_REGEX = "(testdb_(.*)_(.*))|(mysample-(.*))"; logger.log(Level.INFO, "Dropping old test databases from {0}", instanceId.getName()); - for (Database db : databaseAdminClient.listDatabases(instanceId.getInstance()).iterateAll()) { + while (true) { try { - long timeDiff = currentTimestamp.getSeconds() - db.getCreateTime().getSeconds(); - // Delete all databases which are more than OLD_DB_THRESHOLD_SECS seconds old. - if ((db.getId().getDatabase().matches(TEST_DB_REGEX)) - && (timeDiff > OLD_DB_THRESHOLD_SECS)) { - logger.log(Level.INFO, "Dropping test database {0}", db.getId()); - if (db.isDropProtectionEnabled()) { - Database updatedDatabase = - databaseAdminClient.newDatabaseBuilder(db.getId()).disableDropProtection().build(); - databaseAdminClient - .updateDatabase(updatedDatabase, DatabaseField.DROP_PROTECTION) - .get(); + for (Database db : + databaseAdminClient.listDatabases(instanceId.getInstance()).iterateAll()) { + try { + long timeDiff = currentTimestamp.getSeconds() - db.getCreateTime().getSeconds(); + // Delete all databases which are more than OLD_DB_THRESHOLD_SECS seconds old. + if ((db.getId().getDatabase().matches(TEST_DB_REGEX)) + && (timeDiff > OLD_DB_THRESHOLD_SECS)) { + logger.log(Level.INFO, "Dropping test database {0}", db.getId()); + if (db.isDropProtectionEnabled()) { + Database updatedDatabase = + databaseAdminClient + .newDatabaseBuilder(db.getId()) + .disableDropProtection() + .build(); + databaseAdminClient + .updateDatabase(updatedDatabase, DatabaseField.DROP_PROTECTION) + .get(); + } + db.drop(); + ++numDropped; + } + } catch (SpannerException | ExecutionException | InterruptedException e) { + logger.log(Level.SEVERE, "Failed to drop test database " + db.getId(), e); } - db.drop(); - ++numDropped; } - } catch (SpannerException | ExecutionException | InterruptedException e) { - logger.log(Level.SEVERE, "Failed to drop test database " + db.getId(), e); + break; + } catch (SpannerException exception) { + if (exception.getErrorCode() != ErrorCode.RESOURCE_EXHAUSTED) { + throw exception; + } + // Wait a little and try again. + try { + Thread.sleep(10_000); + } catch (InterruptedException interruptedException) { + throw SpannerExceptionFactory.propagateInterrupt(interruptedException); + } } } logger.log(Level.INFO, "Dropped {0} test database(s)", numDropped); @@ -260,7 +346,7 @@ private void cleanUpInstance() { if (isOwnedInstance) { // Delete the instance, which implicitly drops all databases in it. try { - if (!EmulatorSpannerHelper.isUsingEmulator()) { + if (!EmulatorSpannerHelper.isUsingEmulator() && !isExperimentalHost()) { // Backups must be explicitly deleted before the instance may be deleted. logger.log( Level.FINE, "Deleting backups on test instance {0}", testHelper.getInstanceId()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnvTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnvTest.java index 8aa6d550516..5164c3c8b6b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnvTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnvTest.java @@ -39,16 +39,23 @@ public void testIsRetryableResourceExhaustedException() { isRetryableResourceExhaustedException( SpannerExceptionFactory.newSpannerException( ErrorCode.RESOURCE_EXHAUSTED, - "Operation with name \"projects/my-project/instances/my-instance/operations/32bb3dccf4243afc\" failed with status = GrpcStatusCode{transportCode=RESOURCE_EXHAUSTED} and message = Project 123 cannot add 1 nodes in region ."))); + "Operation with name" + + " \"projects/my-project/instances/my-instance/operations/32bb3dccf4243afc\"" + + " failed with status = GrpcStatusCode{transportCode=RESOURCE_EXHAUSTED} and" + + " message = Project 123 cannot add 1 nodes in region ."))); assertTrue( isRetryableResourceExhaustedException( SpannerExceptionFactory.newSpannerException( ErrorCode.RESOURCE_EXHAUSTED, - "Operation with name \"projects/my-project/instances/my-instance/operations/32bb3dccf4243afc\" failed with status = GrpcStatusCode{transportCode=RESOURCE_EXHAUSTED} and message = Project 123 cannot add 99 nodes in region ."))); + "Operation with name" + + " \"projects/my-project/instances/my-instance/operations/32bb3dccf4243afc\"" + + " failed with status = GrpcStatusCode{transportCode=RESOURCE_EXHAUSTED} and" + + " message = Project 123 cannot add 99 nodes in region ."))); assertTrue( isRetryableResourceExhaustedException( SpannerExceptionFactory.newSpannerException( ErrorCode.RESOURCE_EXHAUSTED, - "Could not create instance. Quota exceeded for quota metric 'Instance create requests' and limit 'Instance create requests per minute'"))); + "Could not create instance. Quota exceeded for quota metric 'Instance create" + + " requests' and limit 'Instance create requests per minute'"))); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestWithClosedSessionsEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestWithClosedSessionsEnv.java deleted file mode 100644 index 72cfe0bfe44..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestWithClosedSessionsEnv.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import com.google.cloud.spanner.SessionPool.PooledSession; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; -import com.google.cloud.spanner.SessionPool.SessionFutureWrapper; -import com.google.cloud.spanner.testing.RemoteSpannerHelper; - -/** - * Subclass of {@link IntegrationTestEnv} that allows the user to specify when the underlying - * session of a {@link PooledSession} should be closed. This can be used to ensure that the - * recreation of sessions that have been invalidated by the server works. - */ -public class IntegrationTestWithClosedSessionsEnv extends IntegrationTestEnv { - private static class RemoteSpannerHelperWithClosedSessions extends RemoteSpannerHelper { - private RemoteSpannerHelperWithClosedSessions( - SpannerOptions options, InstanceId instanceId, Spanner client) { - super(options, instanceId, client); - } - } - - @Override - RemoteSpannerHelper createTestHelper(SpannerOptions options, InstanceId instanceId) { - SpannerWithClosedSessionsImpl spanner = new SpannerWithClosedSessionsImpl(options); - return new RemoteSpannerHelperWithClosedSessions(options, instanceId, spanner); - } - - private static class SpannerWithClosedSessionsImpl extends SpannerImpl { - SpannerWithClosedSessionsImpl(SpannerOptions options) { - super(options); - } - - @Override - DatabaseClientImpl createDatabaseClient( - String clientId, - SessionPool pool, - boolean useMultiplexedSessionBlindWriteIgnore, - MultiplexedSessionDatabaseClient ignore, - boolean useMultiplexedSessionPartitionedOpsIgnore, - boolean useMultiplexedSessionForRWIgnore) { - return new DatabaseClientWithClosedSessionImpl(clientId, pool, tracer); - } - } - - /** - * {@link DatabaseClient} that allows the user to specify when an underlying session of a {@link - * PooledSession} should be closed. - */ - public static class DatabaseClientWithClosedSessionImpl extends DatabaseClientImpl { - private boolean invalidateNextSession = false; - private boolean allowReplacing = true; - - DatabaseClientWithClosedSessionImpl(String clientId, SessionPool pool, TraceWrapper tracer) { - super(clientId, pool, tracer); - } - - /** Invalidate the next session that is checked out from the pool. */ - public void invalidateNextSession() { - invalidateNextSession = true; - } - - /** Sets whether invalidated sessions should be replaced or not. */ - public void setAllowSessionReplacing(boolean allow) { - this.allowReplacing = allow; - } - - @Override - PooledSessionFuture getSession() { - PooledSessionFuture session = super.getSession(); - if (invalidateNextSession) { - session.get().delegate.close(); - session.get().setAllowReplacing(false); - awaitDeleted(session.get().delegate); - session.get().setAllowReplacing(allowReplacing); - invalidateNextSession = false; - } - session.get().setAllowReplacing(allowReplacing); - return session; - } - - @Override - SessionFutureWrapper getMultiplexedSession() { - SessionFutureWrapper session = (SessionFutureWrapper) super.getMultiplexedSession(); - if (invalidateNextSession) { - session.get().get().getDelegate().close(); - session.get().get().setAllowReplacing(false); - awaitDeleted(session.get().get().getDelegate()); - session.get().get().setAllowReplacing(allowReplacing); - invalidateNextSession = false; - } - session.get().get().setAllowReplacing(allowReplacing); - return session; - } - - /** - * Deleting a session server side takes some time. This method checks and waits until the - * session really has been deleted. - */ - private void awaitDeleted(Session session) { - // Wait until the session has actually been deleted. - while (true) { - try (ResultSet rs = session.singleUse().executeQuery(Statement.of("SELECT 1"))) { - while (rs.next()) { - // Do nothing. - } - Thread.sleep(500L); - } catch (SpannerException e) { - if (e.getErrorCode() == ErrorCode.NOT_FOUND - && (e.getMessage().contains("Session not found") - || e.getMessage().contains("Session was concurrently deleted"))) { - break; - } else { - throw e; - } - } catch (InterruptedException e) { - break; - } - } - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntervalTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntervalTest.java new file mode 100644 index 00000000000..97a43eef244 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntervalTest.java @@ -0,0 +1,377 @@ +/* + * 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.spanner; + +import static org.junit.Assert.*; + +import java.math.BigInteger; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link Interval} */ +@RunWith(JUnit4.class) +public class IntervalTest { + + @Test + public void testOfMonths() { + Interval interval = Interval.ofMonths(10); + assertEquals(10, interval.getMonths()); + assertEquals(0, interval.getDays()); + assertEquals(BigInteger.ZERO, interval.getNanos()); + } + + @Test + public void testOfDays() { + Interval interval = Interval.ofDays(10); + assertEquals(0, interval.getMonths()); + assertEquals(10, interval.getDays()); + assertEquals(BigInteger.ZERO, interval.getNanos()); + } + + @Test + public void testOfSeconds() { + Interval interval = Interval.ofSeconds(10); + assertEquals(0, interval.getMonths()); + assertEquals(0, interval.getDays()); + assertEquals(BigInteger.valueOf(10000000000L), interval.getNanos()); + } + + @Test + public void testOfMillis() { + Interval interval = Interval.ofMillis(10); + assertEquals(0, interval.getMonths()); + assertEquals(0, interval.getDays()); + assertEquals(BigInteger.valueOf(10000000L), interval.getNanos()); + } + + @Test + public void testOfMicros() { + Interval interval = Interval.ofMicros(10); + assertEquals(0, interval.getMonths()); + assertEquals(0, interval.getDays()); + assertEquals(BigInteger.valueOf(10000), interval.getNanos()); + } + + @Test + public void testOfNanos() { + Interval interval = Interval.ofNanos(BigInteger.valueOf(10)); + assertEquals(0, interval.getMonths()); + assertEquals(0, interval.getDays()); + assertEquals(10, interval.getNanos().longValueExact()); + } + + @Test + public void testFromMonthsDaysNanoseconds() { + Interval interval = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(1030)); + assertEquals(10, interval.getMonths()); + assertEquals(20, interval.getDays()); + assertEquals(1030, interval.getNanos().longValueExact()); + + Interval interval2 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(-1030)); + assertEquals(10, interval2.getMonths()); + assertEquals(20, interval2.getDays()); + assertEquals(-1030, interval2.getNanos().longValueExact()); + } + + @Test + public void testParseFromString() { + TestCase[] testCases = + new TestCase[] { + // Regular cases + new TestCase("P1Y2M3DT12H12M6.789000123S", 14, 3, 43926789000123L), + new TestCase("P1Y2M3DT13H-48M6S", 14, 3, 43926000000000L), + new TestCase("P1Y2M3D", 14, 3, 0L), + new TestCase("P1Y2M", 14, 0, 0L), + new TestCase("P1Y", 12, 0, 0L), + new TestCase("P2M", 2, 0, 0L), + new TestCase("P3D", 0, 3, 0L), + new TestCase("PT4H25M6.7890001S", 0, 0, 15906789000100L), + new TestCase("PT4H25M6S", 0, 0, 15906000000000L), + new TestCase("PT4H30S", 0, 0, 14430000000000L), + new TestCase("PT4H1M", 0, 0, 14460000000000L), + new TestCase("PT5M", 0, 0, 300000000000L), + new TestCase("PT6.789S", 0, 0, 6789000000L), + new TestCase("PT0.123S", 0, 0, 123000000L), + new TestCase("PT.000000123S", 0, 0, 123L), + new TestCase("P0Y", 0, 0, 0L), + new TestCase("P-1Y-2M-3DT-12H-12M-6.789000123S", -14, -3, -43926789000123L), + new TestCase("P1Y-2M3DT13H-51M6.789S", 10, 3, 43746789000000L), + new TestCase("P-1Y2M-3DT-13H49M-6.789S", -10, -3, -43866789000000L), + new TestCase("P1Y2M3DT-4H25M-6.7890001S", 14, 3, -12906789000100L), + new TestCase("PT100H100M100.5S", 0, 0, 366100500000000L), + new TestCase("P0Y", 0, 0, 0L), // Zero value + new TestCase("PT12H30M1S", 0, 0, 45001000000000L), // Only time components, with seconds + new TestCase("P1Y2M3D", 14, 3, 0L), // Only date components + new TestCase("P1Y2M3DT12H30M", 14, 3, 45000000000000L), // Date and time, no seconds + new TestCase("PT0.123456789S", 0, 0, 123456789L), // Fractional seconds with max digits + new TestCase("PT1H0.5S", 0, 0, 3600500000000L), // Hours and fractional seconds + new TestCase( + "P1Y2M3DT12H30M1.23456789S", 14, 3, 45001234567890L), // Years and months to months + new TestCase( + "P1Y2M3DT12H30M1,23456789S", 14, 3, 45001234567890L), // Comma as decimal point + new TestCase("PT.5S", 0, 0, 500000000L), // Fractional seconds without 0 before decimal + new TestCase("P-1Y2M3DT12H-30M1.234S", -10, 3, 41401234000000L), // Mixed signs + new TestCase("P1Y-2M3DT-12H30M-1.234S", 10, 3, -41401234000000L), // More mixed signs + new TestCase("PT1.234000S", 0, 0, 1234000000L), // Trailing zeros after decimal + new TestCase("PT1.000S", 0, 0, 1000000000L), // All zeros after decimal + + // Large values + new TestCase("PT87840000H", 0, 0, new BigInteger("316224000000000000000")), + new TestCase("PT-87840000H", 0, 0, new BigInteger("-316224000000000000000")), + new TestCase( + "P2Y1M15DT87839999H59M59.999999999S", + 25, + 15, + new BigInteger("316223999999999999999")), + new TestCase( + "P2Y1M15DT-87839999H-59M-59.999999999S", + 25, + 15, + new BigInteger("-316223999999999999999")), + }; + + for (TestCase testCase : testCases) { + Interval interval = Interval.parseFromString(testCase.intervalString); + assertEquals(testCase.months, interval.getMonths()); + assertEquals(testCase.days, interval.getDays()); + assertEquals(testCase.nanoseconds, interval.getNanos()); + } + } + + @Test + public void testParseFromString_InvalidString() { + String[] invalidStrings = + new String[] { + "invalid", + "P", + "PT", + "P1YM", + "P1Y2M3D4H5M6S", // Missing T + "P1Y2M3DT4H5M6.S", // Missing decimal value + "P1Y2M3DT4H5M6.789SS", // Extra S + "P1Y2M3DT4H5M6.", // Missing value after decimal point + "P1Y2M3DT4H5M6.ABC", // Non-digit characters after decimal point + "P1Y2M3", // Missing unit specifier + "P1Y2M3DT", // Missing time components + "P-T1H", // Invalid negative sign position + "PT1H-", // Invalid negative sign position + "P1Y2M3DT4H5M6.789123456789S", // Too many digits after decimal + "P1Y2M3DT4H5M6.123.456S", // Multiple decimal points + "P1Y2M3DT4H5M6.,789S", // Dot and comma both for decimal + }; + + for (String invalidString : invalidStrings) { + assertThrows(SpannerException.class, () -> Interval.parseFromString(invalidString)); + } + } + + @Test + public void testToISO8601() { + TestCase[] testCases = + new TestCase[] { + // Regular cases + new TestCase(14, 3, 43926789000123L, "P1Y2M3DT12H12M6.789000123S"), + new TestCase(14, 3, 14706789000000L, "P1Y2M3DT4H5M6.789S"), + new TestCase(14, 3, 0L, "P1Y2M3D"), + new TestCase(14, 0, 0L, "P1Y2M"), + new TestCase(12, 0, 0L, "P1Y"), + new TestCase(2, 0, 0L, "P2M"), + new TestCase(0, 3, 0L, "P3D"), + new TestCase(0, 0, 15906789000000L, "PT4H25M6.789S"), + new TestCase(0, 0, 14430000000000L, "PT4H30S"), + new TestCase(0, 0, 300000000000L, "PT5M"), + new TestCase(0, 0, 6789000000L, "PT6.789S"), + new TestCase(0, 0, 123000000L, "PT0.123S"), + new TestCase(0, 0, 123L, "PT0.000000123S"), + + // digits after decimal in multiple of 3s + new TestCase(0, 0, 100000000L, "PT0.100S"), + new TestCase(0, 0, 100100000L, "PT0.100100S"), + new TestCase(0, 0, 100100100L, "PT0.100100100S"), + new TestCase(0, 0, 9L, "PT0.000000009S"), + new TestCase(0, 0, 9000L, "PT0.000009S"), + new TestCase(0, 0, 9000000L, "PT0.009S"), + + // Zero value cases + new TestCase(0, 0, 0L, "P0Y"), + new TestCase(0, 0, 0L, "P0Y"), // All zero + new TestCase(1, 0, 0L, "P1M"), // Only month + new TestCase(0, 1, 0L, "P1D"), // Only day + new TestCase(0, 0, 10010L, "PT0.000010010S"), // Only nanoseconds + + // Negative value cases + new TestCase(-14, -3, -43926789000123L, "P-1Y-2M-3DT-12H-12M-6.789000123S"), + new TestCase(10, 3, 43746789100000L, "P10M3DT12H9M6.789100S"), + new TestCase(-10, -3, -43866789010000L, "P-10M-3DT-12H-11M-6.789010S"), + new TestCase(14, 3, -12906662400000L, "P1Y2M3DT-3H-35M-6.662400S"), + + // Fractional seconds cases + new TestCase(0, 0, 500000000L, "PT0.500S"), // Fractional seconds + new TestCase(0, 0, -500000000L, "PT-0.500S"), // Negative fractional seconds + + // Large values + new TestCase(0, 0, new BigInteger("316224000000000000000"), "PT87840000H"), + new TestCase(0, 0, new BigInteger("-316224000000000000000"), "PT-87840000H"), + new TestCase( + 25, + 15, + new BigInteger("316223999999999999999"), + "P2Y1M15DT87839999H59M59.999999999S"), + new TestCase( + 25, + 15, + new BigInteger("-316223999999999999999"), + "P2Y1M15DT-87839999H-59M-59.999999999S"), + new TestCase(13, 0, 0L, "P1Y1M"), // Months normalized to years + new TestCase(0, 0, 86400000000000L, "PT24H"), // 24 hours + new TestCase(0, 31, 0L, "P31D"), // 31 days + new TestCase(-12, 0, 0L, "P-1Y"), // Negative year + }; + + for (TestCase testCase : testCases) { + Interval interval = + Interval.builder() + .setMonths(testCase.months) + .setDays(testCase.days) + .setNanos(testCase.nanoseconds) + .build(); + + assertEquals(testCase.intervalString, interval.toISO8601()); + } + } + + @Test + public void testGetNanoseconds() { + Interval interval1 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30040)); + assertEquals(30040, interval1.getNanos().longValueExact()); + + Interval interval2 = Interval.fromMonthsDaysNanos(0, 0, BigInteger.valueOf(123456789)); + assertEquals(123456789, interval2.getNanos().longValueExact()); + + Interval interval3 = Interval.fromMonthsDaysNanos(-10, -20, BigInteger.valueOf(-123456789)); + assertEquals(-123456789, interval3.getNanos().longValueExact()); + } + + @Test + public void testEquals() { + Interval interval1 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30)); + Interval interval2 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30)); + Interval interval3 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(31)); + Interval interval4 = Interval.fromMonthsDaysNanos(10, 21, BigInteger.valueOf(30)); + Interval interval5 = Interval.fromMonthsDaysNanos(11, 20, BigInteger.valueOf(30)); + Interval interval6 = Interval.fromMonthsDaysNanos(-10, -20, BigInteger.valueOf(-30)); + Interval interval7 = Interval.fromMonthsDaysNanos(-10, -20, BigInteger.valueOf(-30)); + + // Test with identical intervals + assertEquals(interval1, interval2); + assertEquals(interval2, interval1); // Check symmetry + + // Test with different intervals + assertNotEquals(interval1, interval3); + assertNotEquals(interval1, interval4); + assertNotEquals(interval1, interval5); + + // Test with negative values + assertEquals(interval6, interval7); + assertEquals(interval7, interval6); // Check symmetry + + // Test with different values for each field (including negative) + assertNotEquals(interval1, Interval.fromMonthsDaysNanos(1, 2, BigInteger.valueOf(3))); + assertNotEquals(interval1, Interval.fromMonthsDaysNanos(-10, 20, BigInteger.valueOf(30))); + assertNotEquals(interval1, Interval.fromMonthsDaysNanos(10, -20, BigInteger.valueOf(30))); + assertNotEquals(interval1, Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(-30))); + + // Test with null and an object that is not an Interval + assertNotEquals(interval1, null); + assertNotEquals(interval1, new Object()); + } + + @Test + public void testHashCode() { + // Test cases with different combinations of months, days, and nanoseconds + Interval interval1 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30)); + Interval interval2 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30)); + Interval interval3 = Interval.fromMonthsDaysNanos(11, 20, BigInteger.valueOf(30)); + Interval interval4 = Interval.fromMonthsDaysNanos(10, 21, BigInteger.valueOf(30)); + Interval interval5 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(31)); + Interval interval6 = Interval.fromMonthsDaysNanos(-10, -20, BigInteger.valueOf(-30)); + Interval interval7 = Interval.fromMonthsDaysNanos(-10, -20, BigInteger.valueOf(-30)); + Interval interval8 = Interval.fromMonthsDaysNanos(0, 0, BigInteger.ZERO); // Zero values + Interval interval9 = + Interval.fromMonthsDaysNanos(1000, 1000, BigInteger.valueOf(1234567890)); // Large values + + // Test with identical intervals + assertEquals(interval1.hashCode(), interval2.hashCode()); + assertEquals(interval6.hashCode(), interval7.hashCode()); + + // Test with different months + assertNotEquals(interval1.hashCode(), interval3.hashCode()); + + // Test with different days + assertNotEquals(interval1.hashCode(), interval4.hashCode()); + + // Test with different nanoseconds + assertNotEquals(interval1.hashCode(), interval5.hashCode()); + + // Test with zero values + assertNotEquals(interval1.hashCode(), interval8.hashCode()); + + // Test with large values + assertNotEquals(interval1.hashCode(), interval9.hashCode()); + + // Test for collision. + Interval interval10 = Interval.fromMonthsDaysNanos(20, 10, BigInteger.valueOf(50)); + Interval interval11 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(50)); + assertNotEquals(interval10.hashCode(), interval11.hashCode()); + } + + private static class TestCase { + private final String intervalString; + private final int months; + private final int days; + private final BigInteger nanoseconds; + + private TestCase(String intervalString, int months, int days, long nanoseconds) { + this.intervalString = intervalString; + this.months = months; + this.days = days; + this.nanoseconds = BigInteger.valueOf(nanoseconds); + } + + private TestCase(String intervalString, int months, int days, BigInteger nanoseconds) { + this.intervalString = intervalString; + this.months = months; + this.days = days; + this.nanoseconds = nanoseconds; + } + + private TestCase(int months, int days, long nanoseconds, String intervalString) { + this.intervalString = intervalString; + this.months = months; + this.days = days; + this.nanoseconds = BigInteger.valueOf(nanoseconds); + } + + private TestCase(int months, int days, BigInteger nanoseconds, String intervalString) { + this.intervalString = intervalString; + this.months = months; + this.days = days; + this.nanoseconds = nanoseconds; + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IsRetryableInternalErrorTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IsRetryableInternalErrorTest.java index 63039fcd237..514b1e96b7f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IsRetryableInternalErrorTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IsRetryableInternalErrorTest.java @@ -127,6 +127,17 @@ public void rstStreamInternalExceptionIsRetryable() { assertTrue(predicate.apply(e)); } + @Test + public void testAuthenticationBackendInternalServerErrorIsRetryable() { + final StatusRuntimeException exception = + new StatusRuntimeException( + Status.fromCode(Code.INTERNAL) + .withDescription( + "INTERNAL: Authentication backend internal server error. Please retry.")); + + assertTrue(predicate.apply(exception)); + } + @Test public void genericInternalExceptionIsNotRetryable() { final InternalException e = diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeySetTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeySetTest.java index 7ed74283f39..1b1fc0222e5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeySetTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeySetTest.java @@ -90,8 +90,7 @@ public void toBuilder() { assertThat(set.getRanges()).isEmpty(); set = - KeySet.range(KeyRange.closedOpen(Key.of("a"), Key.of("b"))) - .toBuilder() + KeySet.range(KeyRange.closedOpen(Key.of("a"), Key.of("b"))).toBuilder() .addRange(KeyRange.closedOpen(Key.of("c"), Key.of("d"))) .build(); assertThat(set.isAll()).isFalse(); @@ -250,8 +249,7 @@ public void serializationMulti() { @Test public void serializationMultiWithAll() { KeySet keySet = - KeySet.all() - .toBuilder() + KeySet.all().toBuilder() .addKey(Key.of("a", 1)) .addRange(KeyRange.closedOpen(Key.of("m"), Key.of("p"))) .build(); @@ -266,8 +264,7 @@ public void serializationMultiWithAll() { @Test public void javaSerialization() { reserializeAndAssert( - KeySet.all() - .toBuilder() + KeySet.all().toBuilder() .addKey(Key.of("a", 1)) .addRange(KeyRange.closedOpen(Key.of("m"), Key.of("p"))) .build()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeyTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeyTest.java index 47aca8e18ea..afd97d5e2ab 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeyTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/KeyTest.java @@ -26,6 +26,7 @@ import com.google.protobuf.ListValue; import com.google.protobuf.NullValue; import java.math.BigDecimal; +import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -51,6 +52,7 @@ public void of() { String numeric = "3.141592"; String timestamp = "2015-09-15T00:00:00Z"; String date = "2015-09-15"; + String uuid = UUID.randomUUID().toString(); String json = "{\"color\":\"red\",\"value\":\"#f00\"}"; k = Key.of( @@ -65,8 +67,9 @@ public void of() { json, ByteArray.copyFrom("y"), Timestamp.parseTimestamp(timestamp), - Date.parseDate(date)); - assertThat(k.size()).isEqualTo(12); + Date.parseDate(date), + UUID.fromString(uuid)); + assertThat(k.size()).isEqualTo(13); assertThat(k.getParts()) .containsExactly( null, @@ -80,7 +83,8 @@ public void of() { json, ByteArray.copyFrom("y"), Timestamp.parseTimestamp(timestamp), - Date.parseDate(date)) + Date.parseDate(date), + UUID.fromString(uuid)) .inOrder(); // Singleton null key. @@ -94,6 +98,7 @@ public void builder() { String numeric = "3.141592"; String timestamp = "2015-09-15T00:00:00Z"; String date = "2015-09-15"; + String uuid = UUID.randomUUID().toString(); String json = "{\"color\":\"red\",\"value\":\"#f00\"}"; Key k = Key.newBuilder() @@ -109,8 +114,9 @@ public void builder() { .append(ByteArray.copyFrom("y")) .append(Timestamp.parseTimestamp(timestamp)) .append(Date.parseDate(date)) + .append(UUID.fromString(uuid)) .build(); - assertThat(k.size()).isEqualTo(12); + assertThat(k.size()).isEqualTo(13); assertThat(k.getParts()) .containsExactly( null, @@ -124,7 +130,8 @@ public void builder() { json, ByteArray.copyFrom("y"), Timestamp.parseTimestamp(timestamp), - Date.parseDate(date)) + Date.parseDate(date), + UUID.fromString(uuid)) .inOrder(); } @@ -153,6 +160,8 @@ public void testToString() { .isEqualTo("[" + timestamp + "]"); String date = "2015-09-15"; assertThat(Key.of(Date.parseDate(date)).toString()).isEqualTo("[" + date + "]"); + String uuid = UUID.randomUUID().toString(); + assertThat(Key.of(UUID.fromString(uuid)).toString()).isEqualTo("[" + uuid + "]"); assertThat(Key.of(1, 2, 3).toString()).isEqualTo("[1,2,3]"); } @@ -173,6 +182,7 @@ public void equalsAndHashCode() { Key.newBuilder().append((ByteArray) null).build(), Key.newBuilder().append((Timestamp) null).build(), Key.newBuilder().append((Date) null).build(), + Key.newBuilder().append((UUID) null).build(), Key.newBuilder().appendObject(null).build()); tester.addEqualityGroup(Key.of(true), Key.newBuilder().append(true).build()); @@ -197,6 +207,8 @@ public void equalsAndHashCode() { tester.addEqualityGroup(Key.of(t), Key.newBuilder().append(t).build()); Date d = Date.parseDate("2016-09-15"); tester.addEqualityGroup(Key.of(d), Key.newBuilder().append(d).build()); + UUID uuid = UUID.randomUUID(); + tester.addEqualityGroup(Key.of(uuid), Key.newBuilder().append(uuid).build()); tester.addEqualityGroup(Key.of("a", 2, null)); tester.testEquals(); @@ -215,6 +227,7 @@ public void serialization() { reserializeAndAssert(Key.of(ByteArray.copyFrom("xyz"))); reserializeAndAssert(Key.of(Timestamp.parseTimestamp("2015-09-15T00:00:00Z"))); reserializeAndAssert(Key.of(Date.parseDate("2015-09-15"))); + reserializeAndAssert(Key.of(UUID.randomUUID())); reserializeAndAssert(Key.of(1, 2, 3)); } @@ -222,6 +235,7 @@ public void serialization() { public void toProto() { String timestamp = "2015-09-15T00:00:00Z"; String date = "2015-09-15"; + String uuid = UUID.randomUUID().toString(); Key k = Key.newBuilder() .append((Boolean) null) @@ -236,6 +250,7 @@ public void toProto() { .append(ByteArray.copyFrom("y")) .append(Timestamp.parseTimestamp(timestamp)) .append(Date.parseDate(date)) + .append(UUID.fromString(uuid)) .build(); ListValue.Builder builder = ListValue.newBuilder(); builder.addValuesBuilder().setNullValue(NullValue.NULL_VALUE); @@ -250,6 +265,7 @@ public void toProto() { builder.addValuesBuilder().setStringValue("eQ=="); builder.addValuesBuilder().setStringValue(timestamp); builder.addValuesBuilder().setStringValue(date); + builder.addValuesBuilder().setStringValue(uuid); assertThat(k.toProto()).isEqualTo(builder.build()); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/LocationAwareTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/LocationAwareTest.java new file mode 100644 index 00000000000..aa038d512ee --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/LocationAwareTest.java @@ -0,0 +1,270 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.cloud.spanner.SpannerApiFutures.get; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import com.google.api.core.ApiFuture; +import com.google.api.gax.rpc.ApiCallContext; +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.AsyncResultSet.CallbackResponse; +import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.SpannerOptions.CallContextConfigurator; +import com.google.cloud.spanner.connection.AbstractMockServerTest; +import com.google.cloud.spanner.connection.RandomResultSetGenerator; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.SpannerGrpc; +import io.grpc.Context; +import io.grpc.ManagedChannelBuilder; +import io.grpc.MethodDescriptor; +import io.grpc.Status; +import java.time.Duration; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class LocationAwareTest extends AbstractMockServerTest { + private static final Statement SELECT_RANDOM_STATEMENT = Statement.of("select * from random"); + private static final int RANDOM_RESULT_ROW_COUNT = 20; + private static Spanner spanner; + private static DatabaseClient client; + + private static final class TimeoutHolder { + private Duration timeout; + } + + @BeforeClass + public static void enableLocationApiAndSetupClient() { + SpannerOptions.useEnvironment( + new SpannerOptions.SpannerEnvironment() { + @Override + public boolean isEnableLocationApi() { + return true; + } + }); + spanner = + SpannerOptions.newBuilder() + .setProjectId("my-project") + .setHost(String.format("http://localhost:%d", getPort())) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setCredentials(NoCredentials.getInstance()) + .build() + .getService(); + client = spanner.getDatabaseClient(DatabaseId.of("my-project", "my-instance", "my-database")); + + RandomResultSetGenerator generator = new RandomResultSetGenerator(RANDOM_RESULT_ROW_COUNT); + mockSpanner.putStatementResult( + StatementResult.query(SELECT_RANDOM_STATEMENT, generator.generate())); + } + + @AfterClass + public static void cleanup() { + SpannerOptions.useDefaultEnvironment(); + if (spanner != null) { + spanner.close(); + } + } + + @Test + public void testSingleQuery() { + int rowCount = 0; + try (ResultSet resultSet = client.singleUse().executeQuery(SELECT_RANDOM_STATEMENT)) { + while (resultSet.next()) { + rowCount++; + } + } + assertEquals(RANDOM_RESULT_ROW_COUNT, rowCount); + } + + @Test + public void testParallelQueries() throws Exception { + int numThreads = 10; + ListeningExecutorService executor = + MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(numThreads)); + List> results = new ArrayList<>(); + for (int i = 0; i < numThreads; i++) { + results.add( + executor.submit( + () -> { + try (ResultSet resultSet = + client.singleUse().executeQuery(SELECT_RANDOM_STATEMENT)) { + while (resultSet.next()) { + // Randomly stop consuming results somewhere halfway the results (sometimes). + if (ThreadLocalRandom.current().nextInt(RANDOM_RESULT_ROW_COUNT * 2) == 5) { + break; + } + } + } + return null; + })); + } + executor.shutdown(); + Futures.allAsList(results).get(); + } + + @Test + public void testSingleReadWriteTransaction() { + client.readWriteTransaction().run(transaction -> transaction.executeUpdate(INSERT_STATEMENT)); + } + + @Test + public void testParallelReadWriteTransactions() throws Exception { + int numThreads = 10; + ListeningExecutorService executor = + MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(numThreads)); + List> results = new ArrayList<>(); + for (int i = 0; i < numThreads; i++) { + results.add( + executor.submit( + () -> { + client + .readWriteTransaction() + .run(transaction -> transaction.executeUpdate(INSERT_STATEMENT)); + return null; + })); + } + executor.shutdown(); + Futures.allAsList(results).get(); + } + + @Test + public void testExecuteStreamingSqlCallContextTimeout_locationAware() { + final TimeoutHolder timeoutHolder = new TimeoutHolder(); + CallContextConfigurator configurator = + new CallContextConfigurator() { + @Override + public ApiCallContext configure( + ApiCallContext context, ReqT request, MethodDescriptor method) { + if (request instanceof ExecuteSqlRequest + && method.equals(SpannerGrpc.getExecuteStreamingSqlMethod())) { + return context.withTimeoutDuration(timeoutHolder.timeout); + } + return null; + } + }; + + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofMinimumAndRandomTime(10, 0)); + Context context = + Context.current().withValue(SpannerOptions.CALL_CONTEXT_CONFIGURATOR_KEY, configurator); + try { + context.run( + () -> { + timeoutHolder.timeout = Duration.ofNanos(1L); + SpannerException e = + assertThrows( + SpannerException.class, + () -> { + try (ResultSet rs = + client.singleUse().executeQuery(SELECT_RANDOM_STATEMENT)) { + rs.next(); + } + }); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); + + timeoutHolder.timeout = Duration.ofMinutes(1L); + try (ResultSet rs = client.singleUse().executeQuery(SELECT_RANDOM_STATEMENT)) { + assertTrue(rs.next()); + } + }); + } finally { + mockSpanner.removeAllExecutionTimes(); + } + } + + @Test + public void testExecuteStreamingSqlInvalidArgumentPropagates_locationAware() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.INVALID_ARGUMENT.withDescription("invalid request").asRuntimeException())); + try { + SpannerException e = + assertThrows( + SpannerException.class, + () -> { + try (ResultSet rs = client.singleUse().executeQuery(SELECT_RANDOM_STATEMENT)) { + rs.next(); + } + }); + assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); + } finally { + mockSpanner.removeAllExecutionTimes(); + } + } + + @Test + public void testExecuteQueryAsyncCancelReturnsCancelled_locationAware() throws Exception { + final List values = new LinkedList<>(); + final CountDownLatch receivedFirstRow = new CountDownLatch(1); + final CountDownLatch cancelled = new CountDownLatch(1); + final ApiFuture callbackResult; + + ExecutorService executor = Executors.newSingleThreadExecutor(); + try (AsyncResultSet rs = client.singleUse().executeQueryAsync(SELECT_RANDOM_STATEMENT)) { + callbackResult = + rs.setCallback( + executor, + resultSet -> { + try { + while (true) { + switch (resultSet.tryNext()) { + case DONE: + return CallbackResponse.DONE; + case NOT_READY: + return CallbackResponse.CONTINUE; + case OK: + values.add(1); + receivedFirstRow.countDown(); + cancelled.await(); + break; + } + } + } catch (Throwable t) { + return CallbackResponse.DONE; + } + }); + + assertTrue(receivedFirstRow.await(30L, TimeUnit.SECONDS)); + rs.cancel(); + cancelled.countDown(); + SpannerException e = assertThrows(SpannerException.class, () -> get(callbackResult)); + assertEquals(ErrorCode.CANCELLED, e.getErrorCode()); + assertEquals(1, values.size()); + } finally { + executor.shutdownNow(); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/LongRunningSessionsBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/LongRunningSessionsBenchmark.java deleted file mode 100644 index 58eb423a5db..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/LongRunningSessionsBenchmark.java +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.api.gax.rpc.TransportChannelProvider; -import com.google.cloud.NoCredentials; -import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; -import com.google.cloud.spanner.SessionPoolOptions.ActionOnInactiveTransaction; -import com.google.cloud.spanner.SessionPoolOptions.InactiveTransactionRemovalOptions; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningScheduledExecutorService; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.spanner.v1.BatchCreateSessionsRequest; -import java.time.Duration; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import org.openjdk.jmh.annotations.AuxCounters; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.TearDown; -import org.openjdk.jmh.annotations.Warmup; - -/** - * Benchmarks for long-running sessions scenarios. The simulated execution times are based on - * reasonable estimates and are primarily intended to keep the benchmarks comparable with each other - * before and after changes have been made to the pool. The benchmarks are bound to the Maven - * profile `benchmark` and can be executed like this: - * mvn clean test -DskipTests -Pbenchmark -Dbenchmark.name=LongRunningSessionsBenchmark - * - */ -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 1, warmups = 0) -@Measurement(batchSize = 1, iterations = 1, timeUnit = TimeUnit.MILLISECONDS) -@Warmup(batchSize = 0, iterations = 0) -@OutputTimeUnit(TimeUnit.SECONDS) -public class LongRunningSessionsBenchmark { - private static final String TEST_PROJECT = "my-project"; - private static final String TEST_INSTANCE = "my-instance"; - private static final String TEST_DATABASE = "my-database"; - private static final int HOLD_SESSION_TIME = 100; - private static final int LONG_HOLD_SESSION_TIME = 10000; // 10 seconds - private static final int RND_WAIT_TIME_BETWEEN_REQUESTS = 100; - private static final Random RND = new Random(); - - @State(Scope.Thread) - @AuxCounters(org.openjdk.jmh.annotations.AuxCounters.Type.EVENTS) - public static class BenchmarkState { - private StandardBenchmarkMockServer mockServer; - private Spanner spanner; - private DatabaseClientImpl client; - private AtomicInteger longRunningSessions; - - @Param({"100"}) - int minSessions; - - @Param({"400"}) - int maxSessions; - - @Param({"4"}) - int numChannels; - - /** AuxCounter for number of RPCs. */ - public int numBatchCreateSessionsRpcs() { - return mockServer.countRequests(BatchCreateSessionsRequest.class); - } - - /** AuxCounter for number of sessions created. */ - public int sessionsCreated() { - return mockServer.getMockSpanner().numSessionsCreated(); - } - - @Setup(Level.Invocation) - public void setup() throws Exception { - mockServer = new StandardBenchmarkMockServer(); - longRunningSessions = new AtomicInteger(); - TransportChannelProvider channelProvider = mockServer.start(); - - /** - * This ensures that the background thread responsible for cleaning long-running sessions - * executes every 10s. Any transaction for which session has not been used for more than 2s - * will be treated as long-running. - */ - InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions = - InactiveTransactionRemovalOptions.newBuilder() - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.WARN_AND_CLOSE) - .setExecutionFrequency(Duration.ofSeconds(10)) - .setIdleTimeThreshold(Duration.ofSeconds(2)) - .build(); - SpannerOptions options = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) - .setNumChannels(numChannels) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(maxSessions) - .setWaitForMinSessionsDuration(Duration.ofSeconds(5)) - .setInactiveTransactionRemovalOptions(inactiveTransactionRemovalOptions) - .build()) - .build(); - - spanner = options.getService(); - client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - } - - @TearDown(Level.Invocation) - public void teardown() throws Exception { - spanner.close(); - mockServer.shutdown(); - } - } - - /** - * Measures the time needed to execute a burst of read requests. - * - *

                                Some read requests will be long-running and will cause session leaks. Such sessions will be - * removed by the session maintenance background task if SessionPool Option - * ActionOnInactiveTransaction is set as WARN_AND_CLOSE. - * - * @param server - * @throws Exception - */ - @Benchmark - public void burstRead(final BenchmarkState server) throws Exception { - int totalQueries = server.maxSessions * 8; - int parallelThreads = server.maxSessions * 2; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalQueries); - for (int i = 0; i < totalQueries; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - try (ResultSet rs = - client.singleUse().executeQuery(StandardBenchmarkMockServer.SELECT1)) { - while (rs.next()) { - // introduce random sleep times to have long-running sessions - randomWait(server); - } - return null; - } - })); - } - // explicitly run the maintenance cycle to clean up any dangling long-running sessions. - pool.poolMaintainer.maintainPool(); - - Futures.allAsList(futures).get(); - service.shutdown(); - assertNumLeakedSessionsRemoved(server, pool); - } - - /** - * Measures the time needed to execute a burst of write requests (PDML). - * - *

                                Some write requests will be long-running. The test asserts that no sessions are removed by - * the session maintenance background task with SessionPool Option ActionOnInactiveTransaction set - * as WARN_AND_CLOSE. This is because PDML writes are expected to be long-running. - * - * @param server - * @throws Exception - */ - @Benchmark - public void burstWrite(final BenchmarkState server) throws Exception { - int totalWrites = server.maxSessions * 8; - int parallelThreads = server.maxSessions * 2; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalWrites); - for (int i = 0; i < totalWrites; i++) { - futures.add( - service.submit( - () -> { - // introduce random sleep times so that some sessions are long-running sessions - randomWaitForMockServer(server); - client.executePartitionedUpdate(StandardBenchmarkMockServer.UPDATE_STATEMENT); - })); - } - // explicitly run the maintenance cycle to clean up any dangling long-running sessions. - pool.poolMaintainer.maintainPool(); - - Futures.allAsList(futures).get(); - service.shutdown(); - assertThat(pool.numLeakedSessionsRemoved()) - .isEqualTo(0); // no sessions should be cleaned up in case of partitioned updates. - } - - /** - * Measures the time needed to execute a burst of read and write requests. - * - *

                                Some read requests will be long-running and will cause session leaks. Such sessions will be - * removed by the session maintenance background task if SessionPool Option - * ActionOnInactiveTransaction is set as WARN_AND_CLOSE. - * - *

                                Some write requests will be long-running. The test asserts that no sessions are removed by - * the session maintenance background task with SessionPool Option ActionOnInactiveTransaction set - * as WARN_AND_CLOSE. This is because PDML writes are expected to be long-running. - * - * @param server - * @throws Exception - */ - @Benchmark - public void burstReadAndWrite(final BenchmarkState server) throws Exception { - int totalWrites = server.maxSessions * 4; - int totalReads = server.maxSessions * 4; - int parallelThreads = server.maxSessions * 2; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalReads + totalWrites); - for (int i = 0; i < totalWrites; i++) { - futures.add( - service.submit( - () -> { - // introduce random sleep times so that some sessions are long-running sessions - randomWaitForMockServer(server); - client.executePartitionedUpdate(StandardBenchmarkMockServer.UPDATE_STATEMENT); - })); - } - for (int i = 0; i < totalReads; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - try (ResultSet rs = - client.singleUse().executeQuery(StandardBenchmarkMockServer.SELECT1)) { - while (rs.next()) { - // introduce random sleep times to have long-running sessions - randomWait(server); - } - return null; - } - })); - } - // explicitly run the maintenance cycle to clean up any dangling long-running sessions. - pool.poolMaintainer.maintainPool(); - - Futures.allAsList(futures).get(); - service.shutdown(); - assertNumLeakedSessionsRemoved(server, pool); - } - - private void randomWait(final BenchmarkState server) throws InterruptedException { - if (RND.nextBoolean()) { - server.longRunningSessions.incrementAndGet(); - Thread.sleep(LONG_HOLD_SESSION_TIME); - } else { - Thread.sleep(HOLD_SESSION_TIME); - } - } - - private void randomWaitForMockServer(final BenchmarkState server) { - if (RND.nextBoolean()) { - server.longRunningSessions.incrementAndGet(); - server - .mockServer - .getMockSpanner() - .setExecuteStreamingSqlExecutionTime( - SimulatedExecutionTime.ofMinimumAndRandomTime(LONG_HOLD_SESSION_TIME, 0)); - } else { - server - .mockServer - .getMockSpanner() - .setExecuteStreamingSqlExecutionTime( - SimulatedExecutionTime.ofMinimumAndRandomTime(HOLD_SESSION_TIME, 0)); - } - } - - private void assertNumLeakedSessionsRemoved(final BenchmarkState server, final SessionPool pool) { - final SessionPoolOptions sessionPoolOptions = - server.spanner.getOptions().getSessionPoolOptions(); - assertThat(server.longRunningSessions.get()).isNotEqualTo(0); - if (sessionPoolOptions.warnAndCloseInactiveTransactions() - || sessionPoolOptions.closeInactiveTransactions()) { - assertThat(pool.numLeakedSessionsRemoved()).isGreaterThan(0); - } else if (sessionPoolOptions.warnInactiveTransactions()) { - assertThat(pool.numLeakedSessionsRemoved()).isEqualTo(0); - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockDatabaseAdminServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockDatabaseAdminServiceImpl.java index 4165f168d80..8cd784b4f2c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockDatabaseAdminServiceImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockDatabaseAdminServiceImpl.java @@ -233,8 +233,7 @@ public Empty call() throws Exception { } metadata = metadata.toBuilder().addAllCommitTimestamps(commitTimestamps).build(); operations.update( - operation - .toBuilder() + operation.toBuilder() .setMetadata(Any.pack(metadata)) .setDone(true) .setResponse(Any.pack(Empty.getDefaultInstance())) @@ -269,14 +268,12 @@ public Backup call() throws Exception { CreateBackupMetadata metadata = operation.getMetadata().unpack(CreateBackupMetadata.class); metadata = - metadata - .toBuilder() + metadata.toBuilder() .setProgress( metadata.getProgress().toBuilder().setProgressPercent(progress).build()) .build(); operations.update( - operation - .toBuilder() + operation.toBuilder() .setMetadata(Any.pack(metadata)) .setResponse(Any.pack(proto)) .build()); @@ -287,19 +284,15 @@ public Backup call() throws Exception { if (operation != null) { CreateBackupMetadata metadata = operation.getMetadata().unpack(CreateBackupMetadata.class); metadata = - metadata - .toBuilder() + metadata.toBuilder() .setProgress( - metadata - .getProgress() - .toBuilder() + metadata.getProgress().toBuilder() .setProgressPercent(100) .setEndTime(currentTime()) .build()) .build(); operations.update( - operation - .toBuilder() + operation.toBuilder() .setDone(true) .setMetadata(Any.pack(metadata)) .setResponse(Any.pack(proto)) @@ -334,14 +327,12 @@ public Database call() throws Exception { RestoreDatabaseMetadata metadata = operation.getMetadata().unpack(RestoreDatabaseMetadata.class); metadata = - metadata - .toBuilder() + metadata.toBuilder() .setProgress( metadata.getProgress().toBuilder().setProgressPercent(progress).build()) .build(); operations.update( - operation - .toBuilder() + operation.toBuilder() .setMetadata(Any.pack(metadata)) .setResponse(Any.pack(proto)) .build()); @@ -353,19 +344,15 @@ public Database call() throws Exception { RestoreDatabaseMetadata metadata = operation.getMetadata().unpack(RestoreDatabaseMetadata.class); metadata = - metadata - .toBuilder() + metadata.toBuilder() .setProgress( - metadata - .getProgress() - .toBuilder() + metadata.getProgress().toBuilder() .setEndTime(currentTime()) .setProgressPercent(100) .build()) .build(); operations.update( - operation - .toBuilder() + operation.toBuilder() .setDone(true) .setMetadata(Any.pack(metadata)) .setResponse(Any.pack(proto)) @@ -410,8 +397,7 @@ public Database call() throws Exception { if (operation != null) { Database proto = db.toProto(); operations.update( - operation - .toBuilder() + operation.toBuilder() .setDone(true) .setError(fromException(e)) .setResponse(Any.pack(proto)) @@ -615,7 +601,8 @@ private boolean matchesFilter(Object obj, String filter) throws Exception { Operation operation = (Operation) obj; Pattern pattern = Pattern.compile( - "(?:\\(metadata.@type:type.googleapis.com/(.*)\\)) AND (?:\\(metadata.(?:name|database):(.*)\\)|\\(name:(.*)/operations/\\))"); + "(?:\\(metadata.@type:type.googleapis.com/(.*)\\)) AND" + + " (?:\\(metadata.(?:name|database):(.*)\\)|\\(name:(.*)/operations/\\))"); Matcher matcher = pattern.matcher(filter); if (matcher.matches()) { String type = matcher.group(1); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java index 676cb05eb07..782f54d30c2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java @@ -20,7 +20,6 @@ import com.google.cloud.ByteArray; import com.google.cloud.Date; import com.google.cloud.spanner.AbstractResultSet.LazyByteArray; -import com.google.cloud.spanner.SessionPool.SessionPoolTransactionContext; import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; import com.google.common.base.Optional; import com.google.common.base.Preconditions; @@ -62,6 +61,7 @@ import com.google.spanner.v1.PartitionReadRequest; import com.google.spanner.v1.PartitionResponse; import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.ResultSet; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.ResultSetStats; @@ -300,7 +300,7 @@ public static StatementResult exception(Statement statement, StatusRuntimeExcept /** Creates a result for the query that detects the dialect that is used for the database. */ public static StatementResult detectDialectResult(Dialect resultDialect) { return StatementResult.query( - SessionPool.DETERMINE_DIALECT_STATEMENT, + MultiplexedSessionDatabaseClient.DETERMINE_DIALECT_STATEMENT, ResultSet.newBuilder() .setMetadata( ResultSetMetadata.newBuilder() @@ -353,7 +353,8 @@ public static Statement createReadStatement( Preconditions.checkNotNull(columns); Preconditions.checkArgument( isValidKeySet(keySet), - "Currently only KeySet.all() and KeySet.singleKey(Key.of()) are supported for read statements"); + "Currently only KeySet.all() and KeySet.singleKey(Key.of()) are supported for read" + + " statements"); StringBuilder builder = new StringBuilder("SELECT "); boolean first = true; for (String col : columns) { @@ -540,16 +541,16 @@ void simulateExecutionTime( boolean stickyGlobalExceptions, CountDownLatch freezeLock) { Uninterruptibles.awaitUninterruptibly(freezeLock); - checkException(globalExceptions, stickyGlobalExceptions); - if (streamIndices.isEmpty()) { - checkException(this.exceptions, stickyException); - } if (minimumExecutionTime > 0 || randomExecutionTime > 0) { Uninterruptibles.sleepUninterruptibly( (randomExecutionTime == 0 ? 0 : RANDOM.nextInt(randomExecutionTime)) + minimumExecutionTime, TimeUnit.MILLISECONDS); } + checkException(globalExceptions, stickyGlobalExceptions); + if (streamIndices.isEmpty()) { + checkException(this.exceptions, stickyException); + } } private static void checkException(Queue exceptions, boolean keepException) { @@ -577,10 +578,12 @@ private static void checkStreamException( private final Random random = new Random(); private double abortProbability = 0.0010D; + /** - * Flip this switch to true if you want the {@link SessionPool#DETERMINE_DIALECT_STATEMENT} - * statement to be included in the recorded requests on the mock server. It is ignored by default - * to prevent tests that do not expect this request to suddenly start failing. + * Flip this switch to true if you want the {@link + * MultiplexedSessionDatabaseClient#DETERMINE_DIALECT_STATEMENT} statement to be included in the + * recorded requests on the mock server. It is ignored by default to prevent tests that do not + * expect this request to suddenly start failing. */ private boolean includeDetermineDialectStatementInRequests = false; @@ -606,7 +609,7 @@ private static void checkStreamException( private ConcurrentMap commitRetryTransactions = new ConcurrentHashMap<>(); private final AtomicBoolean abortNextTransaction = new AtomicBoolean(); private final AtomicBoolean abortNextStatement = new AtomicBoolean(); - private final AtomicBoolean ignoreNextInlineBeginRequest = new AtomicBoolean(); + private final AtomicBoolean ignoreInlineBeginRequest = new AtomicBoolean(); private ConcurrentMap transactionCounters = new ConcurrentHashMap<>(); private ConcurrentMap> partitionTokens = new ConcurrentHashMap<>(); private ConcurrentMap transactionLastUsed = new ConcurrentHashMap<>(); @@ -727,7 +730,8 @@ private StatementResult getResult(Statement statement) { .withDescription( String.format( "There is no result registered for the statement: %s\n" - + "Call TestSpannerImpl#addStatementResult(StatementResult) before executing the statement.", + + "Call TestSpannerImpl#addStatementResult(StatementResult) before executing" + + " the statement.", statement.toString())) .asRuntimeException(); } @@ -742,9 +746,10 @@ public void setAbortProbability(double probability) { } /** - * Set this to true if you want the {@link SessionPool#DETERMINE_DIALECT_STATEMENT} statement to - * be included in the recorded requests on the mock server. It is ignored by default to prevent - * tests that do not expect this request to suddenly start failing. + * Set this to true if you want the {@link + * MultiplexedSessionDatabaseClient#DETERMINE_DIALECT_STATEMENT} statement to be included in the + * recorded requests on the mock server. It is ignored by default to prevent tests that do not + * expect this request to suddenly start failing. */ public void setIncludeDetermineDialectStatementInRequests(boolean include) { this.includeDetermineDialectStatementInRequests = include; @@ -756,9 +761,6 @@ public void setIncludeDetermineDialectStatementInRequests(boolean include) { */ public void abortTransaction(TransactionContext transactionContext) { Preconditions.checkNotNull(transactionContext); - if (transactionContext instanceof SessionPoolTransactionContext) { - transactionContext = ((SessionPoolTransactionContext) transactionContext).delegate; - } if (transactionContext instanceof TransactionContextImpl) { TransactionContextImpl impl = (TransactionContextImpl) transactionContext; ByteString id = @@ -789,8 +791,8 @@ public void abortAllTransactions() { } } - public void ignoreNextInlineBeginRequest() { - ignoreNextInlineBeginRequest.set(true); + public void setIgnoreInlineBeginRequest(boolean ignore) { + ignoreInlineBeginRequest.set(ignore); } public void freeze() { @@ -1062,7 +1064,7 @@ public void executeSql(ExecuteSqlRequest request, StreamObserver resp .setMetadata( ResultSetMetadata.newBuilder() .setTransaction( - ignoreNextInlineBeginRequest.getAndSet(false) + ignoreInlineBeginRequest.get() ? Transaction.getDefaultInstance() : Transaction.newBuilder().setId(transactionId).build()) .build()); @@ -1092,10 +1094,9 @@ private void returnResultSet( ResultSetMetadata metadata = resultSet.getMetadata(); if (transactionId != null) { metadata = - metadata - .toBuilder() + metadata.toBuilder() .setTransaction( - ignoreNextInlineBeginRequest.getAndSet(false) + ignoreInlineBeginRequest.get() ? Transaction.getDefaultInstance() : Transaction.newBuilder().setId(transactionId).build()) .build(); @@ -1131,7 +1132,8 @@ public void executeBatchDml( if (isPartitionedDmlTransaction(transactionId)) { throw Status.FAILED_PRECONDITION .withDescription( - "This transaction is a partitioned DML transaction and cannot be used for batch DML updates.") + "This transaction is a partitioned DML transaction and cannot be used for batch DML" + + " updates.") .asRuntimeException(); } simulateAbort(session, transactionId); @@ -1196,7 +1198,7 @@ public void executeBatchDml( .setMetadata( ResultSetMetadata.newBuilder() .setTransaction( - ignoreNextInlineBeginRequest.getAndSet(false) + ignoreInlineBeginRequest.get() ? Transaction.getDefaultInstance() : Transaction.newBuilder().setId(transactionId).build()) .build()) @@ -1219,7 +1221,9 @@ public void executeBatchDml( public void executeStreamingSql( ExecuteSqlRequest request, StreamObserver responseObserver) { if (includeDetermineDialectStatementInRequests - || !request.getSql().equals(SessionPool.DETERMINE_DIALECT_STATEMENT.getSql())) { + || !request + .getSql() + .equals(MultiplexedSessionDatabaseClient.DETERMINE_DIALECT_STATEMENT.getSql())) { requests.add(request); } Preconditions.checkNotNull(request.getSession()); @@ -1241,7 +1245,13 @@ public void executeStreamingSql( throw firstRes.getException(); case UPDATE_COUNT: returnPartialResultSet( - session, 0L, !isPartitioned, responseObserver, request.getTransaction(), false); + session, + 0L, + !isPartitioned, + responseObserver, + request.getTransaction(), + transactionId, + false); break; case RESULT_SET: default: @@ -1286,7 +1296,8 @@ public void executeStreamingSql( res.getUpdateCount(), !isPartitioned, responseObserver, - request.getTransaction()); + request.getTransaction(), + transactionId); break; default: throw new IllegalStateException("Unknown result type: " + res.getType()); @@ -1327,6 +1338,12 @@ private Statement buildStatement( case DATE: builder.bind(fieldName).toDateArray(null); break; + case UUID: + builder.bind(fieldName).toUuidArray(null); + break; + case INTERVAL: + builder.bind(fieldName).toIntervalArray(null); + break; case FLOAT32: builder.bind(fieldName).toFloat32Array((Iterable) null); break; @@ -1373,6 +1390,12 @@ private Statement buildStatement( case DATE: builder.bind(fieldName).to((Date) null); break; + case UUID: + builder.bind(fieldName).to((UUID) null); + break; + case INTERVAL: + builder.bind(fieldName).to((Interval) null); + break; case FLOAT32: builder.bind(fieldName).to((Float) null); break; @@ -1441,6 +1464,22 @@ private Statement buildStatement( GrpcStruct.decodeArrayValue( com.google.cloud.spanner.Type.date(), value.getListValue())); break; + case UUID: + builder + .bind(fieldName) + .toUuidArray( + (Iterable) + GrpcStruct.decodeArrayValue( + com.google.cloud.spanner.Type.uuid(), value.getListValue())); + break; + case INTERVAL: + builder + .bind(fieldName) + .toIntervalArray( + (Iterable) + GrpcStruct.decodeArrayValue( + com.google.cloud.spanner.Type.interval(), value.getListValue())); + break; case FLOAT32: builder .bind(fieldName) @@ -1532,6 +1571,12 @@ private Statement buildStatement( case DATE: builder.bind(fieldName).to(Date.parseDate(value.getStringValue())); break; + case UUID: + builder.bind(fieldName).to(UUID.fromString(value.getStringValue())); + break; + case INTERVAL: + builder.bind(fieldName).to(Interval.parseFromString(value.getStringValue())); + break; case FLOAT32: builder.bind(fieldName).to((float) value.getNumberValue()); break; @@ -1726,10 +1771,9 @@ private void returnPartialResultSet( metadata = metadata.toBuilder().setTransaction(transaction).build(); } else { metadata = - metadata - .toBuilder() + metadata.toBuilder() .setTransaction( - ignoreNextInlineBeginRequest.getAndSet(false) + ignoreInlineBeginRequest.get() ? Transaction.getDefaultInstance() : Transaction.newBuilder().setId(transactionId).build()) .build(); @@ -1761,8 +1805,10 @@ private void returnPartialResultSet( Long updateCount, boolean exact, StreamObserver responseObserver, - TransactionSelector transaction) { - returnPartialResultSet(session, updateCount, exact, responseObserver, transaction, true); + TransactionSelector transactionSelector, + ByteString transactionId) { + returnPartialResultSet( + session, updateCount, exact, responseObserver, transactionSelector, transactionId, true); } private void returnPartialResultSet( @@ -1770,23 +1816,19 @@ private void returnPartialResultSet( Long updateCount, boolean exact, StreamObserver responseObserver, - TransactionSelector transaction, + TransactionSelector transactionSelector, + ByteString transactionId, boolean complete) { - Field field = - Field.newBuilder() - .setName("UPDATE_COUNT") - .setType(Type.newBuilder().setCode(TypeCode.INT64).build()) - .build(); if (exact) { responseObserver.onNext( PartialResultSet.newBuilder() .setMetadata( ResultSetMetadata.newBuilder() - .setRowType(StructType.newBuilder().addFields(field).build()) + .setRowType(StructType.newBuilder().build()) .setTransaction( - ignoreNextInlineBeginRequest.getAndSet(false) + ignoreInlineBeginRequest.get() || !transactionSelector.hasBegin() ? Transaction.getDefaultInstance() - : Transaction.newBuilder().setId(transaction.getId()).build()) + : Transaction.newBuilder().setId(transactionId).build()) .build()) .setStats(ResultSetStats.newBuilder().setRowCountExact(updateCount).build()) .build()); @@ -1795,11 +1837,11 @@ private void returnPartialResultSet( PartialResultSet.newBuilder() .setMetadata( ResultSetMetadata.newBuilder() - .setRowType(StructType.newBuilder().addFields(field).build()) + .setRowType(StructType.newBuilder().build()) .setTransaction( - ignoreNextInlineBeginRequest.getAndSet(false) + ignoreInlineBeginRequest.get() || !transactionSelector.hasBegin() ? Transaction.getDefaultInstance() - : Transaction.newBuilder().setId(transaction.getId()).build()) + : Transaction.newBuilder().setId(transactionId).build()) .build()) .setStats(ResultSetStats.newBuilder().setRowCountLowerBound(updateCount).build()) .build()); @@ -1829,7 +1871,7 @@ private ByteString getTransactionId(Session session, TransactionSelector tx) { transactionId = null; break; case BEGIN: - transactionId = beginTransaction(session, tx.getBegin(), null).getId(); + transactionId = beginTransaction(session, tx.getBegin(), null, null).getId(); break; case ID: Transaction transaction = transactions.get(tx.getId()); @@ -1895,7 +1937,8 @@ public void beginTransaction( beginTransactionExecutionTime.simulateExecutionTime( exceptions, stickyGlobalExceptions, freezeLock); Transaction transaction = - beginTransaction(session, request.getOptions(), request.getMutationKey()); + beginTransaction( + session, request.getOptions(), request.getMutationKey(), request.getRequestOptions()); responseObserver.onNext(transaction); responseObserver.onCompleted(); } catch (StatusRuntimeException t) { @@ -1906,7 +1949,10 @@ public void beginTransaction( } private Transaction beginTransaction( - Session session, TransactionOptions options, com.google.spanner.v1.Mutation mutationKey) { + Session session, + TransactionOptions options, + com.google.spanner.v1.Mutation mutationKey, + RequestOptions requestOptions) { ByteString transactionId = generateTransactionName(session.getName()); Transaction.Builder builder = Transaction.newBuilder().setId(transactionId); if (options != null && options.getModeCase() == ModeCase.READ_ONLY) { @@ -1914,18 +1960,24 @@ private Transaction beginTransaction( } if (session.getMultiplexed() && options.getModeCase() == ModeCase.READ_WRITE - && mutationKey != null) { + && mutationKey != null + && mutationKey != com.google.spanner.v1.Mutation.getDefaultInstance()) { // Mutation only case in a read-write transaction. builder.setPrecommitToken(getTransactionPrecommitToken(transactionId)); } Transaction transaction = builder.build(); transactions.put(transaction.getId(), transaction); - transactionsStarted.add(transaction.getId()); + // TODO: remove once UNIMPLEMENTED error is not thrown for read-write mux + // Do not consider the transaction if this request was from background thread + if (requestOptions == null + || !requestOptions.getTransactionTag().equals("multiplexed-rw-background-begin-txn")) { + transactionsStarted.add(transaction.getId()); + if (abortNextTransaction.getAndSet(false)) { + markAbortedTransaction(transaction.getId()); + } + } isPartitionedDmlTransaction.put( transaction.getId(), options.getModeCase() == ModeCase.PARTITIONED_DML); - if (abortNextTransaction.getAndSet(false)) { - markAbortedTransaction(transaction.getId()); - } return transaction; } @@ -1992,7 +2044,9 @@ private void ensureMostRecentTransaction(Session session, ByteString transaction throw Status.FAILED_PRECONDITION .withDescription( String.format( - "This transaction has been invalidated by a later transaction in the same session.\nTransaction id: " + "This transaction has been invalidated by a later transaction in the same" + + " session.\n" + + "Transaction id: " + id + "\nExpected: " + counter.get(), @@ -2025,7 +2079,8 @@ public void commit(CommitRequest request, StreamObserver respons TransactionOptions.newBuilder() .setReadWrite(ReadWrite.getDefaultInstance()) .build(), - null); + null, + request.getRequestOptions()); } else if (request.getTransactionId() != null) { transaction = transactions.get(request.getTransactionId()); Optional aborted = @@ -2290,6 +2345,7 @@ public void waitForRequestsToContain(Class type, long throws InterruptedException, TimeoutException { Stopwatch watch = Stopwatch.createStarted(); while (countRequestsOfType(type) == 0) { + //noinspection BusyWait Thread.sleep(1L); if (watch.elapsed(TimeUnit.MILLISECONDS) > timeoutMillis) { throw new TimeoutException( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerTestActions.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerTestActions.java new file mode 100644 index 00000000000..b7dbacff118 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerTestActions.java @@ -0,0 +1,158 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.cloud.spanner.MockSpannerTestUtil.INVALID_SELECT_STATEMENT; +import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1; +import static com.google.cloud.spanner.MockSpannerTestUtil.UPDATE_STATEMENT; +import static com.google.cloud.spanner.SpannerApiFutures.get; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +import com.google.api.core.ApiFutures; +import com.google.cloud.Timestamp; +import com.google.cloud.spanner.AsyncTransactionManager.TransactionContextFuture; +import com.google.cloud.spanner.Options.TransactionOption; +import java.util.Collections; +import java.util.concurrent.Executor; + +public class MockSpannerTestActions { + + static final Mutation TEST_MUTATION = + Mutation.newInsertBuilder("foo").set("id").to(1L).set("name").to("bar").build(); + + static Timestamp writeInsertMutation(DatabaseClient client) { + return client.write(Collections.singletonList(TEST_MUTATION)); + } + + static void writeInsertMutationWithOptions(DatabaseClient client, TransactionOption... options) { + client.writeWithOptions(Collections.singletonList(TEST_MUTATION), options); + } + + static Timestamp writeAtLeastOnceInsertMutation(DatabaseClient client) { + return client.writeAtLeastOnce(Collections.singletonList(TEST_MUTATION)); + } + + static void writeAtLeastOnceWithOptionsInsertMutation( + DatabaseClient client, TransactionOption... options) { + client.writeAtLeastOnceWithOptions(Collections.singletonList(TEST_MUTATION), options); + } + + static void executeBatchUpdateTransaction(DatabaseClient client, TransactionOption... options) { + client + .readWriteTransaction(options) + .run(transaction -> transaction.batchUpdate(Collections.singletonList(UPDATE_STATEMENT))); + } + + static void executePartitionedUpdate(DatabaseClient client) { + client.executePartitionedUpdate(UPDATE_STATEMENT); + } + + static void commitDeleteTransaction(DatabaseClient client, TransactionOption... options) { + client + .readWriteTransaction(options) + .run( + transaction -> { + transaction.buffer(Mutation.delete("TEST", KeySet.all())); + return null; + }); + } + + static void transactionManagerCommit(DatabaseClient client, TransactionOption... options) { + try (TransactionManager manager = client.transactionManager(options)) { + TransactionContext transaction = manager.begin(); + transaction.buffer(Mutation.delete("TEST", KeySet.all())); + manager.commit(); + } + } + + static void asyncRunnerCommit( + DatabaseClient client, Executor executor, TransactionOption... options) { + AsyncRunner runner = client.runAsync(options); + SpannerApiFutures.get( + runner.runAsync( + txn -> { + txn.buffer(Mutation.delete("TEST", KeySet.all())); + return ApiFutures.immediateFuture(null); + }, + executor)); + } + + static void transactionManagerAsyncCommit( + DatabaseClient client, Executor executor, TransactionOption... options) { + try (AsyncTransactionManager manager = client.transactionManagerAsync(options)) { + TransactionContextFuture transaction = manager.beginAsync(); + get( + transaction + .then( + (txn, input) -> { + txn.buffer(Mutation.delete("TEST", KeySet.all())); + return ApiFutures.immediateFuture(null); + }, + executor) + .commitAsync()); + } + } + + static Long executeSelect1(DatabaseClient client, TransactionOption... options) { + return client + .readWriteTransaction(options) + .run( + transaction -> { + try (ResultSet rs = transaction.executeQuery(SELECT1)) { + while (rs.next()) { + return rs.getLong(0); + } + } catch (AbortedException e) { + + } + return 0L; + }); + } + + static Long executeReadFoo(DatabaseClient client, TransactionOption... options) { + return client + .readWriteTransaction(options) + .run( + transaction -> { + try (ResultSet rs = + transaction.read("FOO", KeySet.all(), Collections.singletonList("ID"))) { + while (rs.next()) { + return rs.getLong(0); + } + } catch (AbortedException e) { + // Ignore the AbortedException and let the commit handle it. + } + return 0L; + }); + } + + static Long executeInvalidAndValidSql(DatabaseClient client, TransactionOption... options) { + return client + .readWriteTransaction(options) + .run( + transaction -> { + // This query carries the BeginTransaction, but fails. The BeginTransaction will + // then be carried by the subsequent statement. + try (ResultSet rs = transaction.executeQuery(INVALID_SELECT_STATEMENT)) { + SpannerException e = assertThrows(SpannerException.class, () -> rs.next()); + assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); + } + return transaction.executeUpdate(UPDATE_STATEMENT); + }); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerTestUtil.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerTestUtil.java index 83bb1728ac0..e2e012f8ae0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerTestUtil.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerTestUtil.java @@ -50,7 +50,8 @@ public class MockSpannerTestUtil { .setMetadata(SELECT1_METADATA) .build(); public static final Statement SELECT1_FROM_TABLE = Statement.of("SELECT 1 FROM FOO WHERE 1=1"); - + static final Statement INVALID_SELECT_STATEMENT = + Statement.of("SELECT * FROM NON_EXISTENT_TABLE"); static final String TEST_PROJECT = "my-project"; static final String TEST_INSTANCE = "my-instance"; static final String TEST_DATABASE = "my-database"; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClientMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClientMockServerTest.java index 3121b868b83..629b5611862 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClientMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClientMockServerTest.java @@ -27,9 +27,11 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; +import com.google.api.gax.rpc.ServerStream; import com.google.cloud.NoCredentials; import com.google.cloud.Timestamp; import com.google.cloud.spanner.AsyncTransactionManager.AsyncTransactionStep; @@ -40,23 +42,16 @@ import com.google.cloud.spanner.Options.RpcPriority; import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; import com.google.cloud.spanner.connection.RandomResultSetGenerator; -import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.util.concurrent.MoreExecutors; import com.google.protobuf.ByteString; -import com.google.spanner.v1.BeginTransactionRequest; -import com.google.spanner.v1.CommitRequest; -import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.*; import com.google.spanner.v1.RequestOptions.Priority; import com.google.spanner.v1.Session; -import com.google.spanner.v1.Transaction; import io.grpc.Status; import java.time.Duration; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -74,6 +69,7 @@ public class MultiplexedSessionDatabaseClientMockServerTest extends AbstractMock @BeforeClass public static void setupResults() { + assumeFalse(TestHelper.isMultiplexSessionDisabled()); mockSpanner.putStatementResults( StatementResult.query(STATEMENT, new RandomResultSetGenerator(1).generate())); mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); @@ -93,7 +89,6 @@ public void createSpannerInstance() { .setSessionPoolOption( SessionPoolOptions.newBuilder() .setUseMultiplexedSession(true) - .setUseMultiplexedSessionBlindWrite(true) .setUseMultiplexedSessionForRW(true) .setUseMultiplexedSessionPartitionedOps(true) // Set the maintainer to loop once every 1ms @@ -106,6 +101,37 @@ public void createSpannerInstance() { .getService(); } + @Test + public void testCreateSessionDeadlineExceeded() { + // Simulate a problem with the CreateSession RPC making it slow. + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofException(Status.DEADLINE_EXCEEDED.asRuntimeException())); + + Spanner testSpanner = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .build() + .getService(); + DatabaseClient client = testSpanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + // The first attempt should lead to a DEADLINE_EXCEEDED error being propagated from the + // CreateSession attempt. + try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { + SpannerException exception = assertThrows(SpannerException.class, resultSet::next); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, exception.getErrorCode()); + } + + // Remove the simulated problem on the mock server. + // The next attempt should then succeed. + mockSpanner.removeAllExecutionTimes(); + try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) {} + } + } + @Test public void testMultiUseReadOnlyTransactionUsesSameSession() { // Execute two queries using the same transaction. Both queries should use the same @@ -215,131 +241,302 @@ public void testMaintainerMaintainsMultipleClients() { } @Test - public void testUnimplementedErrorOnCreation_fallsBackToRegularSessions() { + public void testRetryWithTheSessionCreationWaitTime() { mockSpanner.setCreateSessionExecutionTime( - SimulatedExecutionTime.ofException( - Status.UNIMPLEMENTED - .withDescription("Multiplexed sessions are not implemented") - .asRuntimeException())); + SimulatedExecutionTime.ofExceptions( + Arrays.asList( + Status.DEADLINE_EXCEEDED + .withDescription( + "CallOptions deadline exceeded after 22.986872393s. " + + "Name resolution delay 6.911918521 seconds. [closed=[], " + + "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]") + .asRuntimeException(), + Status.DEADLINE_EXCEEDED + .withDescription( + "CallOptions deadline exceeded after 22.986872393s. " + + "Name resolution delay 6.911918521 seconds. [closed=[], " + + "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]") + .asRuntimeException()))); + + Spanner testSpanner = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setUseMultiplexedSession(true) + .setUseMultiplexedSessionForRW(true) + .setUseMultiplexedSessionPartitionedOps(true) + .setWaitForMinSessionsDuration(Duration.ofSeconds(1)) + .setFailOnSessionLeak() + .build()) + .build() + .getService(); + DatabaseClientImpl client = - (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // Get the current session reference. This will block until the CreateSession RPC has failed. - assertNotNull(client.multiplexedSessionDatabaseClient); - SpannerException spannerException = - assertThrows( - SpannerException.class, - client.multiplexedSessionDatabaseClient::getCurrentSessionReference); - assertEquals(ErrorCode.UNIMPLEMENTED, spannerException.getErrorCode()); + (DatabaseClientImpl) testSpanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { //noinspection StatementWithEmptyBody while (resultSet.next()) { // ignore } } - // Verify that we received one ExecuteSqlRequest, and that it used a regular session. - assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); - Session session = mockSpanner.getSession(requests.get(0).getSession()); - assertNotNull(session); - assertFalse(session.getMultiplexed()); + List createSessionRequests = + mockSpanner.getRequestsOfType(CreateSessionRequest.class); + assertEquals(3, createSessionRequests.size()); + + List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(1, requests.size()); assertNotNull(client.multiplexedSessionDatabaseClient); - assertEquals(0L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); - assertEquals(0L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); + assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + + testSpanner.close(); } @Test - public void - testUnimplementedErrorOnCreation_firstReceivesError_secondFallsBackToRegularSessions() { + public void testRetryWithTheDatabaseNotFoundExceptionWithSessionCreationWaitTime() { mockSpanner.setCreateSessionExecutionTime( - SimulatedExecutionTime.ofException( - Status.UNIMPLEMENTED - .withDescription("Multiplexed sessions are not implemented") - .asRuntimeException())); - // Freeze the mock server to ensure that the CreateSession RPC does not return an error or any - // other result just yet. - mockSpanner.freeze(); - // Get a database client using multiplexed sessions. The CreateSession RPC will be blocked as - // long as the mock server is frozen. + SimulatedExecutionTime.ofExceptions( + Collections.singletonList( + Status.NOT_FOUND.withDescription("Database not found.").asRuntimeException()))); + + Spanner testSpanner = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setUseMultiplexedSession(true) + .setUseMultiplexedSessionForRW(true) + .setUseMultiplexedSessionPartitionedOps(true) + .setWaitForMinSessionsDuration(Duration.ofMillis(200)) + .setFailOnSessionLeak() + .build()) + .build() + .getService(); + + assertThrows( + SpannerException.class, () -> testSpanner.getDatabaseClient(DatabaseId.of("p", "i", "d"))); + + List createSessionRequests = + mockSpanner.getRequestsOfType(CreateSessionRequest.class); + assertEquals(1, createSessionRequests.size()); + + List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(0, requests.size()); + + testSpanner.close(); + } + + @Test + public void testRetryWithNoSessionCreationWaitTime() { + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofExceptions( + Collections.singletonList( + Status.DEADLINE_EXCEEDED + .withDescription( + "CallOptions deadline exceeded after 22.986872393s. " + + "Name resolution delay 6.911918521 seconds. [closed=[], " + + "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]") + .asRuntimeException()))); + + Spanner testSpanner = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setUseMultiplexedSession(true) + .setUseMultiplexedSessionForRW(true) + .setUseMultiplexedSessionPartitionedOps(true) + .setFailOnSessionLeak() + .build()) + .build() + .getService(); + DatabaseClientImpl client = - (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // Try to execute a query. This is all non-blocking until the call to ResultSet#next(). - try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { - // Unfreeze the mock server to get the error from the backend. This query will then fail. - mockSpanner.unfreeze(); - SpannerException spannerException = assertThrows(SpannerException.class, resultSet::next); - assertEquals(ErrorCode.UNIMPLEMENTED, spannerException.getErrorCode()); - } - // The next query will fall back to regular sessions and succeed. + (DatabaseClientImpl) testSpanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + SpannerException spannerException = + assertThrows( + SpannerException.class, + () -> { + try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + }); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, spannerException.getErrorCode()); + + // The CreateSession RPC will be retried, and as the exception is removed by the first call, + // the second attempt will succeed. try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { //noinspection StatementWithEmptyBody while (resultSet.next()) { // ignore } } - // Verify that we received one ExecuteSqlRequest, and that it used a regular session. - assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + + List createSessionRequests = + mockSpanner.getRequestsOfType(CreateSessionRequest.class); + assertEquals(2, createSessionRequests.size()); + List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(1, requests.size()); - Session session = mockSpanner.getSession(requests.get(0).getSession()); - assertNotNull(session); - assertFalse(session.getMultiplexed()); + testSpanner.close(); + } - assertNotNull(client.multiplexedSessionDatabaseClient); - assertEquals(0L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); - assertEquals(0L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + @Test + public void testRetryWithDelayedInResponseExceedsSessionCreationWaitTime() { + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofMinimumAndRandomTimeAndExceptions( + 150, + 0, + Arrays.asList( + Status.DEADLINE_EXCEEDED + .withDescription( + "CallOptions deadline exceeded after 22.986872393s. " + + "Name resolution delay 6.911918521 seconds. [closed=[], " + + "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]") + .asRuntimeException(), + Status.UNAVAILABLE + .withDescription( + "CallOptions deadline exceeded after 22.986872393s. " + + "Name resolution delay 6.911918521 seconds. [closed=[], " + + "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]") + .asRuntimeException()))); + + Spanner testSpanner = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setUseMultiplexedSession(true) + .setUseMultiplexedSessionForRW(true) + .setUseMultiplexedSessionPartitionedOps(true) + .setWaitForMinSessionsDuration(Duration.ofMillis(200)) + .setFailOnSessionLeak() + .build()) + .build() + .getService(); + + SpannerException spannerException = + assertThrows( + SpannerException.class, + () -> { + DatabaseClientImpl client = + (DatabaseClientImpl) testSpanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + }); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, spannerException.getErrorCode()); + + List createSessionRequests = + mockSpanner.getRequestsOfType(CreateSessionRequest.class); + assertEquals(2, createSessionRequests.size()); + + List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(0, requests.size()); + + testSpanner.close(); } @Test - public void testMaintainerInvalidatesMultiplexedSessionClientIfUnimplemented() { + public void testRetryWithDelayInExceptionWithInSessionCreationWaitTime() { + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofMinimumAndRandomTimeAndExceptions( + 50, + 0, + Arrays.asList( + Status.DEADLINE_EXCEEDED + .withDescription( + "CallOptions deadline exceeded after 22.986872393s. " + + "Name resolution delay 6.911918521 seconds. [closed=[], " + + "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]") + .asRuntimeException(), + Status.DEADLINE_EXCEEDED + .withDescription( + "CallOptions deadline exceeded after 22.986872393s. " + + "Name resolution delay 6.911918521 seconds. [closed=[], " + + "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]") + .asRuntimeException()))); + + Spanner testSpanner = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setUseMultiplexedSession(true) + .setUseMultiplexedSessionForRW(true) + .setUseMultiplexedSessionPartitionedOps(true) + .setWaitForMinSessionsDuration(Duration.ofMillis(200)) + .setFailOnSessionLeak() + .build()) + .build() + .getService(); + DatabaseClientImpl client = - (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // The first query should succeed. + (DatabaseClientImpl) testSpanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { //noinspection StatementWithEmptyBody while (resultSet.next()) { // ignore } } - // Now ensure that CreateSession returns UNIMPLEMENTED. This error should be recognized by the - // maintainer and invalidate the MultiplexedSessionDatabaseClient. New queries will fall back to - // regular sessions. + + List createSessionRequests = + mockSpanner.getRequestsOfType(CreateSessionRequest.class); + assertEquals(3, createSessionRequests.size()); + + List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(1, requests.size()); + + testSpanner.close(); + } + + @Test + public void testUnimplementedErrorOnCreationIsPropagated() { mockSpanner.setCreateSessionExecutionTime( SimulatedExecutionTime.ofException( Status.UNIMPLEMENTED .withDescription("Multiplexed sessions are not implemented") .asRuntimeException())); - // Wait until the client sees that MultiplexedSessions are not supported. + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + // Get the current session reference. This will block until the CreateSession RPC has failed. assertNotNull(client.multiplexedSessionDatabaseClient); - Stopwatch stopwatch = Stopwatch.createStarted(); - while (client.multiplexedSessionDatabaseClient.isMultiplexedSessionsSupported() - && stopwatch.elapsed().compareTo(Duration.ofSeconds(5)) < 0) { - Thread.yield(); - } - // Queries should fall back to regular sessions. - try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { - //noinspection StatementWithEmptyBody - while (resultSet.next()) { - // ignore - } - } - // Verify that we received two ExecuteSqlRequests, and that the first one used a multiplexed - // session, and that the second used a regular session. - assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); - - Session session1 = mockSpanner.getSession(requests.get(0).getSession()); - assertNotNull(session1); - assertTrue(session1.getMultiplexed()); + SpannerException spannerException = + assertThrows( + SpannerException.class, + client.multiplexedSessionDatabaseClient::getCurrentSessionReference); + assertEquals(ErrorCode.UNIMPLEMENTED, spannerException.getErrorCode()); - Session session2 = mockSpanner.getSession(requests.get(1).getSession()); - assertNotNull(session2); - assertFalse(session2.getMultiplexed()); + spannerException = + assertThrows(SpannerException.class, () -> client.singleUse().executeQuery(STATEMENT)); + assertEquals(ErrorCode.UNIMPLEMENTED, spannerException.getErrorCode()); - assertNotNull(client.multiplexedSessionDatabaseClient); - assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); - assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + // Verify that we received no ExecuteSqlRequests. + assertEquals(0, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); } @Test @@ -351,10 +548,7 @@ public void testWriteAtLeastOnceAborted() { mockSpanner.setCommitExecutionTime( SimulatedExecutionTime.ofException( mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); - Timestamp timestamp = - client.writeAtLeastOnce( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build())); + Timestamp timestamp = MockSpannerTestActions.writeAtLeastOnceInsertMutation(client); assertNotNull(timestamp); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); @@ -372,10 +566,7 @@ public void testWriteAtLeastOnceAborted() { public void testWriteAtLeastOnce() { DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - Timestamp timestamp = - client.writeAtLeastOnce( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build())); + Timestamp timestamp = MockSpannerTestActions.writeAtLeastOnceInsertMutation(client); assertNotNull(timestamp); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); @@ -425,10 +616,8 @@ public void testWriteAtLeastOnceWithCommitStats() { public void testWriteAtLeastOnceWithOptions() { DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - client.writeAtLeastOnceWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.priority(RpcPriority.LOW)); + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + client, Options.priority(RpcPriority.LOW)); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(commitRequests).hasSize(1); @@ -449,10 +638,8 @@ public void testWriteAtLeastOnceWithOptions() { public void testWriteAtLeastOnceWithTagOptions() { DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - client.writeAtLeastOnceWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.tag("app=spanner,env=test")); + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + client, Options.tag("app=spanner,env=test")); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(commitRequests).hasSize(1); @@ -474,10 +661,8 @@ public void testWriteAtLeastOnceWithTagOptions() { public void testWriteAtLeastOnceWithExcludeTxnFromChangeStreams() { DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - client.writeAtLeastOnceWithOptions( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()), - Options.excludeTxnFromChangeStreams()); + MockSpannerTestActions.writeAtLeastOnceWithOptionsInsertMutation( + client, Options.excludeTxnFromChangeStreams()); List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); assertThat(commitRequests).hasSize(1); @@ -591,10 +776,7 @@ public void testMutationUsingWrite() { mockSpanner.setCommitExecutionTime( SimulatedExecutionTime.ofException( mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); - Timestamp timestamp = - client.write( - Collections.singletonList( - Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build())); + Timestamp timestamp = MockSpannerTestActions.writeInsertMutation(client); assertNotNull(timestamp); List beginTransactionRequests = @@ -1229,15 +1411,7 @@ public void testMutationOnlyUsingAsyncRunner() { // Test verifies mutation-only case within a R/W transaction via AsyncRunner. DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - AsyncRunner runner = client.runAsync(); - get( - runner.runAsync( - txn -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - MoreExecutors.directExecutor())); - + MockSpannerTestActions.asyncRunnerCommit(client, MoreExecutors.directExecutor()); // Verify that the mutation key is set in BeginTransactionRequest List beginTransactions = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); @@ -1261,18 +1435,7 @@ public void testMutationOnlyUsingAsyncTransactionManager() { // Test verifies mutation-only case within a R/W transaction via AsyncTransactionManager. DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - try (AsyncTransactionManager manager = client.transactionManagerAsync()) { - TransactionContextFuture transaction = manager.beginAsync(); - get( - transaction - .then( - (txn, input) -> { - txn.buffer(Mutation.delete("TEST", KeySet.all())); - return ApiFutures.immediateFuture(null); - }, - MoreExecutors.directExecutor()) - .commitAsync()); - } + MockSpannerTestActions.transactionManagerAsyncCommit(client, MoreExecutors.directExecutor()); // Verify that the mutation key is set in BeginTransactionRequest List beginTransactions = @@ -1292,229 +1455,224 @@ public void testMutationOnlyUsingAsyncTransactionManager() { request.getPrecommitToken().getPrecommitToken()); } - // Tests the behavior of the server-side kill switch for read-write multiplexed sessions.. + private Spanner setupSpannerBySkippingBeginTransactionVerificationForMux() { + return SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setUseMultiplexedSession(true) + .setUseMultiplexedSessionForRW(true) + .setSkipVerifyingBeginTransactionForMuxRW(true) + .build()) + .build() + .getService(); + } + + private void verifyMutationKeySetInBeginTransactionRequests( + List beginTransactionRequests) { + assertEquals(2, beginTransactionRequests.size()); + // Verify the requests are executed using multiplexed sessions + for (BeginTransactionRequest request : beginTransactionRequests) { + assertTrue(mockSpanner.getSession(request.getSession()).getMultiplexed()); + assertTrue(request.hasMutationKey()); + assertTrue(request.getMutationKey().hasInsert()); + } + } + + private void verifyPreCommitTokenSetInCommitRequest(List commitRequests) { + assertEquals(1L, commitRequests.size()); + for (CommitRequest request : commitRequests) { + assertTrue(mockSpanner.getSession(request.getSession()).getMultiplexed()); + assertNotNull(request.getPrecommitToken()); + assertEquals( + ByteString.copyFromUtf8("TransactionPrecommitToken"), + request.getPrecommitToken().getPrecommitToken()); + } + } + + // The following 4 tests validate mutation-only cases where the BeginTransaction RPC fails with an + // ABORTED or retryable error @Test - public void testInitialBeginTransactionWithRW_receivesUnimplemented_fallsBackToRegularSession() { + public void testMutationOnlyCaseAbortedDuringBeginTransaction() { + // This test ensures that when a transaction containing only mutations is retried after an + // ABORT error in the BeginTransaction RPC: + // 1. The mutation key is correctly included in the BeginTransaction request. + // 2. The precommit token is properly set in the Commit request. + Spanner spanner = setupSpannerBySkippingBeginTransactionVerificationForMux(); + + // Force the BeginTransaction RPC to return Aborted the first time it is called. The exception + // is cleared after the first call, so the retry should succeed. mockSpanner.setBeginTransactionExecutionTime( SimulatedExecutionTime.ofException( - Status.UNIMPLEMENTED - .withDescription( - "Transaction type read_write not supported with multiplexed sessions") - .asRuntimeException())); + mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); + DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - assertNotNull(client.multiplexedSessionDatabaseClient); - - // Wait until the client sees that MultiplexedSessions are not supported for read-write. - // Get the begin transaction reference. This will block until the BeginTransaction RPC with - // read-write has failed. - SpannerException spannerException = - assertThrows( - SpannerException.class, - client.multiplexedSessionDatabaseClient::getReadWriteBeginTransactionReference); - assertEquals(ErrorCode.UNIMPLEMENTED, spannerException.getErrorCode()); - assertTrue(client.multiplexedSessionDatabaseClient.unimplementedForRW.get()); - - // read-write transaction should fallback to regular sessions client .readWriteTransaction() .run( transaction -> { - try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { - //noinspection StatementWithEmptyBody - while (resultSet.next()) { - // ignore - } - } + Mutation mutation = + Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build(); + transaction.buffer(mutation); return null; }); - // Verify that we received one ExecuteSqlRequest, and it uses a regular session due to fallback. - List executeSqlRequests = - mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); - assertEquals(1, executeSqlRequests.size()); - // Verify the requests are not executed using multiplexed sessions - Session session2 = mockSpanner.getSession(executeSqlRequests.get(0).getSession()); - assertNotNull(session2); - assertFalse(session2.getMultiplexed()); - } - + // Verify that for mutation only case, a mutation key is set in BeginTransactionRequest. + List beginTransactionRequests = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class); + verifyMutationKeySetInBeginTransactionRequests(beginTransactionRequests); + + // Verify that the latest precommit token is set in the CommitRequest + List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); + verifyPreCommitTokenSetInCommitRequest(commitRequests); + + spanner.close(); + } + @Test - public void - testReadWriteUnimplementedErrorDuringInitialBeginTransactionRPC_firstReceivesError_secondFallsBackToRegularSessions() { - // This test simulates the following scenario, - // 1. The server-side flag for RW multiplexed sessions is disabled. - // 2. Application starts. The initial BeginTransaction RPC during client initialization will - // fail with UNIMPLEMENTED error. - // 3. Read-write transaction initialized before the BeginTransaction RPC response will fail with - // UNIMPLEMENTED error. - // 4. Read-write transaction initialized after the BeginTransaction RPC response will fallback - // to regular sessions. + public void testMutationOnlyUsingTransactionManagerAbortedDuringBeginTransaction() { + // This test ensures that when a transaction containing only mutations is retried after an + // ABORT error in the BeginTransaction RPC: + // 1. The mutation key is correctly included in the BeginTransaction request. + // 2. The precommit token is properly set in the Commit request. + Spanner spanner = setupSpannerBySkippingBeginTransactionVerificationForMux(); + + // Force the BeginTransaction RPC to return Aborted the first time it is called. The exception + // is cleared after the first call, so the retry should succeed. mockSpanner.setBeginTransactionExecutionTime( SimulatedExecutionTime.ofException( - Status.UNIMPLEMENTED - .withDescription( - "Transaction type read_write not supported with multiplexed sessions") - .asRuntimeException())); - mockSpanner.setExecuteStreamingSqlExecutionTime( - SimulatedExecutionTime.ofException( - Status.UNIMPLEMENTED - .withDescription( - "Transaction type read_write not supported with multiplexed sessions") - .asRuntimeException())); - // Freeze the mock server to ensure that the BeginTransaction with read-write on multiplexed - // session RPC does not return an error or any - // other result just yet. - mockSpanner.freeze(); - // Get a database client using multiplexed sessions. The BeginTransaction RPC to validation - // read-write on multiplexed session will be blocked as - // long as the mock server is frozen. + mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); + DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // Get the runner so that the read-write transaction is executed via multiplexed session. - TransactionRunner runner = client.readWriteTransaction(); + try (TransactionManager manager = client.transactionManager()) { + TransactionContext transaction = manager.begin(); + while (true) { + try { + Mutation mutation = + Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build(); + transaction.buffer(mutation); + manager.commit(); + assertNotNull(manager.getCommitTimestamp()); + break; + } catch (AbortedException e) { + transaction = manager.resetForRetry(); + } + } + } - // Unfreeze the mock server to get the error from the backend. The above read-write transaction - // will then fail. - mockSpanner.unfreeze(); + // Verify that for mutation only case, a mutation key is set in BeginTransactionRequest. + List beginTransactionRequests = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class); + verifyMutationKeySetInBeginTransactionRequests(beginTransactionRequests); - SpannerException e = - assertThrows( - SpannerException.class, - () -> - runner.run( - transaction -> { - ResultSet resultSet = transaction.executeQuery(STATEMENT); - //noinspection StatementWithEmptyBody - while (resultSet.next()) { - // ignore - } - return null; - })); - assertEquals(ErrorCode.UNIMPLEMENTED, e.getErrorCode()); - - // Wait until the client sees that MultiplexedSessions are not supported for read-write. - assertNotNull(client.multiplexedSessionDatabaseClient); - SpannerException spannerException = - assertThrows( - SpannerException.class, - client.multiplexedSessionDatabaseClient::getReadWriteBeginTransactionReference); - assertEquals(ErrorCode.UNIMPLEMENTED, spannerException.getErrorCode()); - assertTrue(client.multiplexedSessionDatabaseClient.unimplementedForRW.get()); + // Verify that the latest precommit token is set in the CommitRequest + List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); + verifyPreCommitTokenSetInCommitRequest(commitRequests); - // The next read-write transaction will fall back to regular sessions and succeed. - client - .readWriteTransaction() - .run( - transaction -> { - try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { - //noinspection StatementWithEmptyBody - while (resultSet.next()) { - // ignore - } - } - return null; - }); + spanner.close(); + } - // Verify that two ExecuteSqlRequests were received: the first using a multiplexed session and - // the second using a regular session. - assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + @Test + public void testMutationOnlyUsingAsyncRunnerAbortedDuringBeginTransaction() { + // This test ensures that when a transaction containing only mutations is retried after an + // ABORT error in the BeginTransaction RPC: + // 1. The mutation key is correctly included in the BeginTransaction request. + // 2. The precommit token is properly set in the Commit request. - Session session1 = mockSpanner.getSession(requests.get(0).getSession()); - assertNotNull(session1); - assertTrue(session1.getMultiplexed()); + Spanner spanner = setupSpannerBySkippingBeginTransactionVerificationForMux(); - Session session2 = mockSpanner.getSession(requests.get(1).getSession()); - assertNotNull(session2); - assertFalse(session2.getMultiplexed()); + // Force the BeginTransaction RPC to return Aborted the first time it is called. The exception + // is cleared after the first call, so the retry should succeed. + mockSpanner.setBeginTransactionExecutionTime( + SimulatedExecutionTime.ofException( + mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); - assertNotNull(client.multiplexedSessionDatabaseClient); - assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); - assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + AsyncRunner runner = client.runAsync(); + get( + runner.runAsync( + txn -> { + txn.buffer( + Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()); + return ApiFutures.immediateFuture(null); + }, + MoreExecutors.directExecutor())); + + // Verify that for mutation only case, a mutation key is set in BeginTransactionRequest. + List beginTransactionRequests = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class); + verifyMutationKeySetInBeginTransactionRequests(beginTransactionRequests); + + // Verify that the latest precommit token is set in the CommitRequest + List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); + verifyPreCommitTokenSetInCommitRequest(commitRequests); + + spanner.close(); } @Test - public void testReadWriteUnimplemented_firstReceivesError_secondFallsBackToRegularSessions() { - // This test simulates the following scenario, - // 1. The server side flag for read-write multiplexed session is not disabled. When an - // application starts, the initial BeginTransaction RPC with read-write will succeed. - // 2. After time t, the server side flag for read-write multiplexed session is disabled. After - // this a read-write transaction executed with multiplexed sessions should fail with - // UNIMPLEMENTED error. - // 3. All read-write transactions in the application after the initial failure should fallback - // to using regular sessions. - mockSpanner.setExecuteStreamingSqlExecutionTime( + public void testMutationOnlyUsingTransactionManagerAsyncAbortedDuringBeginTransaction() + throws Exception { + // This test verifies that in the case of mutations-only, when a transaction is retried after an + // ABORT in BeginTransaction RPC, the mutation key is correctly set in the BeginTransaction + // request + // and precommit token is set in Commit request. + Spanner spanner = setupSpannerBySkippingBeginTransactionVerificationForMux(); + + // Force the BeginTransaction RPC to return Aborted the first time it is called. The exception + // is cleared after the first call, so the retry should succeed. + mockSpanner.setBeginTransactionExecutionTime( SimulatedExecutionTime.ofException( - Status.UNIMPLEMENTED - .withDescription( - "Transaction type read_write not supported with multiplexed sessions") - .asRuntimeException())); + mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // Wait until the initial BeginTransaction RPC with read-write is complete. - assertNotNull(client.multiplexedSessionDatabaseClient); - Transaction txn = - client.multiplexedSessionDatabaseClient.getReadWriteBeginTransactionReference(); - assertNotNull(txn); - assertNotNull(txn.getId()); - assertFalse(client.multiplexedSessionDatabaseClient.unimplementedForRW.get()); - - SpannerException e = - assertThrows( - SpannerException.class, - () -> - client - .readWriteTransaction() - .run( - transaction -> { - ResultSet resultSet = transaction.executeQuery(STATEMENT); - //noinspection StatementWithEmptyBody - while (resultSet.next()) { - // ignore - } - return null; - })); - assertEquals(ErrorCode.UNIMPLEMENTED, e.getErrorCode()); - - // Verify that the previous failed transaction has marked multiplexed session client to be - // unimplemented for read-write. - assertTrue(client.multiplexedSessionDatabaseClient.unimplementedForRW.get()); - - // The next read-write transaction will fall back to regular sessions and succeed. - client - .readWriteTransaction() - .run( - transaction -> { - try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { - //noinspection StatementWithEmptyBody - while (resultSet.next()) { - // ignore - } - } - return null; - }); - - // Verify that two ExecuteSqlRequests were received: the first using a multiplexed session and - // the second using a regular session. - assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + try (AsyncTransactionManager manager = client.transactionManagerAsync()) { + TransactionContextFuture transaction = manager.beginAsync(); + while (true) { + CommitTimestampFuture commitTimestamp = + transaction + .then( + (txn, input) -> { + txn.buffer( + Mutation.newInsertBuilder("FOO") + .set("ID") + .to(1L) + .set("NAME") + .to("Bar") + .build()); + return ApiFutures.immediateFuture(null); + }, + MoreExecutors.directExecutor()) + .commitAsync(); + try { + assertThat(commitTimestamp.get()).isNotNull(); + break; + } catch (AbortedException e) { + transaction = manager.resetForRetryAsync(); + } + } + } - Session session1 = mockSpanner.getSession(requests.get(0).getSession()); - assertNotNull(session1); - assertTrue(session1.getMultiplexed()); + // Verify that for mutation only case, a mutation key is set in BeginTransactionRequest. + List beginTransactionRequests = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class); + verifyMutationKeySetInBeginTransactionRequests(beginTransactionRequests); - Session session2 = mockSpanner.getSession(requests.get(1).getSession()); - assertNotNull(session2); - assertFalse(session2.getMultiplexed()); + // Verify that the latest precommit token is set in the CommitRequest + List commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class); + verifyPreCommitTokenSetInCommitRequest(commitRequests); - assertNotNull(client.multiplexedSessionDatabaseClient); - assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); - assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + spanner.close(); } @Test @@ -1528,22 +1686,11 @@ public void testOtherUnimplementedError_ReadWriteTransactionStillUsesMultiplexed DatabaseClientImpl client = (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - // Wait until the initial BeginTransaction RPC with read-write is complete. - assertNotNull(client.multiplexedSessionDatabaseClient); - Transaction txn = - client.multiplexedSessionDatabaseClient.getReadWriteBeginTransactionReference(); - assertNotNull(txn); - assertNotNull(txn.getId()); - assertFalse(client.multiplexedSessionDatabaseClient.unimplementedForRW.get()); - // Try to execute a query using single use transaction. try (ResultSet resultSet = client.singleUse().executeQuery(STATEMENT)) { SpannerException spannerException = assertThrows(SpannerException.class, resultSet::next); assertEquals(ErrorCode.UNIMPLEMENTED, spannerException.getErrorCode()); } - // Verify other UNIMPLEMENTED errors does not turn off read-write transactions to use - // multiplexed sessions. - assertFalse(client.multiplexedSessionDatabaseClient.unimplementedForRW.get()); // The read-write transaction should use multiplexed sessions and succeed. client @@ -1636,6 +1783,317 @@ public void testReadWriteTransactionWithCommitRetryProtocolExtensionSet() { assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); } + @Test + public void testBatchWriteAtLeastOnce() { + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + Iterable MUTATION_GROUPS = + ImmutableList.of( + MutationGroup.of( + Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(), + Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build()), + MutationGroup.of( + Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(), + Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build())); + + ServerStream responseStream = client.batchWriteAtLeastOnce(MUTATION_GROUPS); + int idx = 0; + for (BatchWriteResponse response : responseStream) { + assertEquals( + response.getStatus(), + com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build()); + assertEquals(response.getIndexesList(), ImmutableList.of(idx, idx + 1)); + idx += 2; + } + + assertNotNull(responseStream); + List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class); + assertEquals(requests.size(), 1); + BatchWriteRequest request = requests.get(0); + assertTrue(mockSpanner.getSession(request.getSession()).getMultiplexed()); + assertEquals(request.getMutationGroupsCount(), 2); + assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_UNSPECIFIED); + assertFalse(request.getExcludeTxnFromChangeStreams()); + + assertNotNull(client.multiplexedSessionDatabaseClient); + assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); + assertEquals(1L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + } + + @Test + public void + testRWTransactionWithTransactionManager_CommitAborted_SetsTransactionId_AndUsedInNewInstance() { + // The below test verifies the behaviour of begin(AbortedException) method which is used to + // maintain transaction priority if resetForRetry() is not called. + + // This test performs the following steps: + // 1. Simulates an ABORTED exception during commit and verifies that the transaction ID is + // included in the AbortedException. + // 2. Passes the ABORTED exception to the begin(AbortedException) method of a new + // TransactionManager, and verifies that the transaction ID from the failed transaction is sent + // during the inline begin of the first request. + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + // Force the Commit RPC to return Aborted the first time it is called. The exception is cleared + // after the first call, so the retry should succeed. + mockSpanner.setCommitExecutionTime( + SimulatedExecutionTime.ofException( + mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); + + ByteString abortedTransactionID = null; + AbortedException exception = null; + try (TransactionManager manager = client.transactionManager()) { + TransactionContext transaction = manager.begin(); + try { + try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + manager.commit(); + assertNotNull(manager.getCommitTimestamp()); + } catch (AbortedException e) { + // The transactionID of the Aborted transaction should be set in AbortedException class. + assertNotNull(e.getTransactionID()); + abortedTransactionID = e.getTransactionID(); + exception = e; + } + } + // Verify that the transactionID of the aborted transaction is set. + assertNotNull(abortedTransactionID); + assertNotNull(exception); + mockSpanner.clearRequests(); + + // Pass AbortedException while invoking begin on the new manager instance. + try (TransactionManager manager = client.transactionManager()) { + TransactionContext transaction = manager.begin(exception); + while (true) { + try { + try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + manager.commit(); + assertNotNull(manager.getCommitTimestamp()); + break; + } catch (AbortedException e) { + transaction = manager.resetForRetry(); + } + } + } + + // Verify that the ExecuteSqlRequest with the inline begin passes the transactionID of the + // previously aborted transaction. + List executeSqlRequests = + mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(1, executeSqlRequests.size()); + assertTrue(mockSpanner.getSession(executeSqlRequests.get(0).getSession()).getMultiplexed()); + assertNotNull( + executeSqlRequests + .get(0) + .getTransaction() + .getBegin() + .getReadWrite() + .getMultiplexedSessionPreviousTransactionId()); + assertEquals( + executeSqlRequests + .get(0) + .getTransaction() + .getBegin() + .getReadWrite() + .getMultiplexedSessionPreviousTransactionId(), + abortedTransactionID); + + assertNotNull(client.multiplexedSessionDatabaseClient); + assertEquals(2L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); + assertEquals(2L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + } + + @Test + public void + testRWTransactionWithTransactionManager_ExecuteSQLAborted_SetsTransactionId_AndUsedInNewInstance() { + // This test performs the following steps: + // 1. Simulates an ABORTED exception during ExecuteSQL and verifies that the transaction ID is + // included in the AbortedException. + // 2. Passes the ABORTED exception to the begin(AbortedException) method of a new + // TransactionManager, and verifies that the transaction ID from the failed transaction is sent + // during the inline begin of the first request. + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + ByteString abortedTransactionID = null; + AbortedException exception = null; + try (TransactionManager manager = client.transactionManager()) { + TransactionContext transaction = manager.begin(); + try { + try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + + // Simulate an ABORTED in next ExecuteSQL request. + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException( + mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); + + try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + manager.commit(); + assertNotNull(manager.getCommitTimestamp()); + } catch (AbortedException e) { + // The transactionID of the Aborted transaction should be set in AbortedException class. + assertNotNull(e.getTransactionID()); + abortedTransactionID = e.getTransactionID(); + exception = e; + } + } + // Verify that the transactionID of the aborted transaction is set. + assertNotNull(abortedTransactionID); + assertNotNull(exception); + mockSpanner.clearRequests(); + + // Pass AbortedException while invoking begin on the new manager instance. + try (TransactionManager manager = client.transactionManager()) { + TransactionContext transaction = manager.begin(exception); + while (true) { + try { + try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + manager.commit(); + assertNotNull(manager.getCommitTimestamp()); + break; + } catch (AbortedException e) { + transaction = manager.resetForRetry(); + } + } + } + + // Verify that the ExecuteSqlRequest with inline begin includes the transaction ID from the + // previously aborted transaction. + List executeSqlRequests = + mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(1, executeSqlRequests.size()); + assertTrue(mockSpanner.getSession(executeSqlRequests.get(0).getSession()).getMultiplexed()); + assertNotNull( + executeSqlRequests + .get(0) + .getTransaction() + .getBegin() + .getReadWrite() + .getMultiplexedSessionPreviousTransactionId()); + assertEquals( + executeSqlRequests + .get(0) + .getTransaction() + .getBegin() + .getReadWrite() + .getMultiplexedSessionPreviousTransactionId(), + abortedTransactionID); + + assertNotNull(client.multiplexedSessionDatabaseClient); + assertEquals(2L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); + assertEquals(2L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + } + + @Test + public void + testRWTransactionWithAsyncTransactionManager_CommitAborted_SetsTransactionId_AndUsedInNewInstance() + throws Exception { + // This test performs the following steps: + // 1. Simulates an ABORTED exception during ExecuteSQL and verifies that the transaction ID is + // included in the AbortedException. + // 2. Passes the ABORTED exception to the begin(AbortedException) method of a new + // AsyncTransactionManager, and verifies that the transaction ID from the failed transaction is + // sent + // during the inline begin of the first request. + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + // Force the Commit RPC to return Aborted the first time it is called. The exception is cleared + // after the first call, so the retry should succeed. + mockSpanner.setCommitExecutionTime( + SimulatedExecutionTime.ofException( + mockSpanner.createAbortedException(ByteString.copyFromUtf8("test")))); + ByteString abortedTransactionID = null; + AbortedException exception = null; + try (AsyncTransactionManager manager = client.transactionManagerAsync()) { + TransactionContextFuture transactionContextFuture = manager.beginAsync(); + try { + AsyncTransactionStep updateCount = + transactionContextFuture.then( + (transaction, ignored) -> transaction.executeUpdateAsync(UPDATE_STATEMENT), + MoreExecutors.directExecutor()); + CommitTimestampFuture commitTimestamp = updateCount.commitAsync(); + assertEquals(UPDATE_COUNT, updateCount.get().longValue()); + assertNotNull(commitTimestamp.get()); + } catch (AbortedException e) { + assertNotNull(e.getTransactionID()); + exception = e; + abortedTransactionID = e.getTransactionID(); + } + } + + // Verify that the transactionID of the aborted transaction is set. + assertNotNull(abortedTransactionID); + assertNotNull(exception); + mockSpanner.clearRequests(); + + try (AsyncTransactionManager manager = client.transactionManagerAsync()) { + TransactionContextFuture transactionContextFuture = manager.beginAsync(exception); + while (true) { + try { + AsyncTransactionStep updateCount = + transactionContextFuture.then( + (transaction, ignored) -> transaction.executeUpdateAsync(UPDATE_STATEMENT), + MoreExecutors.directExecutor()); + CommitTimestampFuture commitTimestamp = updateCount.commitAsync(); + assertEquals(UPDATE_COUNT, updateCount.get().longValue()); + assertNotNull(commitTimestamp.get()); + break; + } catch (AbortedException e) { + transactionContextFuture = manager.resetForRetryAsync(); + } + } + } + + List executeSqlRequests = + mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(1, executeSqlRequests.size()); + assertTrue(mockSpanner.getSession(executeSqlRequests.get(0).getSession()).getMultiplexed()); + assertNotNull( + executeSqlRequests + .get(0) + .getTransaction() + .getBegin() + .getReadWrite() + .getMultiplexedSessionPreviousTransactionId()); + assertEquals( + executeSqlRequests + .get(0) + .getTransaction() + .getBegin() + .getReadWrite() + .getMultiplexedSessionPreviousTransactionId(), + abortedTransactionID); + + assertNotNull(client.multiplexedSessionDatabaseClient); + assertEquals(2L, client.multiplexedSessionDatabaseClient.getNumSessionsAcquired().get()); + assertEquals(2L, client.multiplexedSessionDatabaseClient.getNumSessionsReleased().get()); + } + private void waitForSessionToBeReplaced(DatabaseClientImpl client) { assertNotNull(client.multiplexedSessionDatabaseClient); SessionReference sessionReference = diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java index c6f7e22f280..f71fdfe37a3 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java @@ -17,7 +17,6 @@ package com.google.cloud.spanner; import static com.google.cloud.spanner.BenchmarkingUtilityScripts.collectResults; -import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -118,9 +117,6 @@ public void teardown() throws Exception { @Benchmark public void burstQueries(final BenchmarkState server) throws Exception { final DatabaseClientImpl client = server.client; - SessionPool pool = client.pool; - assertThat(pool.totalSessions()) - .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(PARALLEL_THREADS)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutableCredentialsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutableCredentialsTest.java new file mode 100644 index 00000000000..dfa6d6695dd --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutableCredentialsTest.java @@ -0,0 +1,196 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.auth.CredentialTypeForMetrics; +import com.google.auth.RequestMetadataCallback; +import com.google.auth.oauth2.ServiceAccountCredentials; +import java.io.IOException; +import java.net.URI; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Executor; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class MutableCredentialsTest { + ServiceAccountCredentials initialCredentials = mock(ServiceAccountCredentials.class); + ServiceAccountCredentials initialScopedCredentials = mock(ServiceAccountCredentials.class); + ServiceAccountCredentials updatedCredentials = mock(ServiceAccountCredentials.class); + ServiceAccountCredentials updatedScopedCredentials = mock(ServiceAccountCredentials.class); + Set scopes = new HashSet<>(Arrays.asList("scope-a", "scope-b")); + Map> initialMetadata = + Collections.singletonMap("Authorization", Collections.singletonList("v1")); + Map> updatedMetadata = + Collections.singletonMap("Authorization", Collections.singletonList("v2")); + String initialAuthType = "auth-1"; + String updatedAuthType = "auth-2"; + String initialUniverseDomain = "googleapis.com"; + String updatedUniverseDomain = "abc.goog"; + CredentialTypeForMetrics initialMetricsCredentialType = + CredentialTypeForMetrics.SERVICE_ACCOUNT_CREDENTIALS_JWT; + CredentialTypeForMetrics updatedMetricsCredentialType = + CredentialTypeForMetrics.SERVICE_ACCOUNT_CREDENTIALS_AT; + + @Test + public void testCreateMutableCredentials() throws IOException { + setupInitialCredentials(); + + MutableCredentials credentials = new MutableCredentials(initialCredentials, scopes); + URI testUri = URI.create("https://spanner.googleapis.com"); + Executor executor = mock(Executor.class); + RequestMetadataCallback callback = mock(RequestMetadataCallback.class); + + validateInitialDelegatedCredentialsAreSet(credentials, testUri); + + credentials.getRequestMetadata(testUri, executor, callback); + + credentials.refresh(); + + verify(initialScopedCredentials, times(1)).getRequestMetadata(testUri, executor, callback); + verify(initialScopedCredentials, times(1)).refresh(); + } + + @Test + public void testCreateMutableCredentialsWithDefaultScopes() throws IOException { + Set defaultScopes = SpannerOptions.SCOPES; + when(initialCredentials.createScoped(defaultScopes)).thenReturn(initialScopedCredentials); + when(initialScopedCredentials.getAuthenticationType()).thenReturn(initialAuthType); + when(initialScopedCredentials.getRequestMetadata(any(URI.class))).thenReturn(initialMetadata); + when(initialScopedCredentials.getUniverseDomain()).thenReturn(initialUniverseDomain); + when(initialScopedCredentials.getMetricsCredentialType()) + .thenReturn(initialMetricsCredentialType); + when(initialScopedCredentials.hasRequestMetadata()).thenReturn(true); + when(initialScopedCredentials.hasRequestMetadataOnly()).thenReturn(true); + + MutableCredentials credentials = new MutableCredentials(initialCredentials); + URI testUri = URI.create("https://spanner.googleapis.com"); + + validateInitialDelegatedCredentialsAreSet(credentials, testUri); + verify(initialCredentials).createScoped(defaultScopes); + } + + @Test + public void testUpdateMutableCredentials() throws IOException { + setupInitialCredentials(); + setupUpdatedCredentials(); + + MutableCredentials credentials = new MutableCredentials(initialCredentials, scopes); + URI testUri = URI.create("https://example.com"); + Executor executor = mock(Executor.class); + RequestMetadataCallback callback = mock(RequestMetadataCallback.class); + + validateInitialDelegatedCredentialsAreSet(credentials, testUri); + + credentials.updateCredentials(updatedCredentials); + + assertEquals(updatedAuthType, credentials.getAuthenticationType()); + assertFalse(credentials.hasRequestMetadata()); + assertFalse(credentials.hasRequestMetadataOnly()); + assertSame(updatedMetadata, credentials.getRequestMetadata(testUri)); + assertEquals(updatedUniverseDomain, credentials.getUniverseDomain()); + assertEquals(updatedMetricsCredentialType, credentials.getMetricsCredentialType()); + + credentials.getRequestMetadata(testUri, executor, callback); + + credentials.refresh(); + + verify(updatedScopedCredentials, times(1)).getRequestMetadata(testUri, executor, callback); + verify(updatedScopedCredentials, times(1)).refresh(); + } + + @Test(expected = IllegalArgumentException.class) + public void testCreateMutableCredentialsEmptyScopesThrowsError() { + new MutableCredentials(initialCredentials, Collections.emptySet()); + } + + @Test + public void testCreateMutableCredentialsNullCredentialsThrowsError() { + NullPointerException exception = + assertThrows(NullPointerException.class, () -> new MutableCredentials(null, scopes)); + assertEquals("credentials must not be null", exception.getMessage()); + } + + @Test + public void testCreateMutableCredentialsNullScopesThrowsError() { + NullPointerException exception = + assertThrows( + NullPointerException.class, () -> new MutableCredentials(initialCredentials, null)); + assertEquals("scopes must not be null", exception.getMessage()); + } + + @Test + public void testUpdateMutableCredentialsNullCredentialsThrowsError() throws IOException { + setupInitialCredentials(); + MutableCredentials credentials = new MutableCredentials(initialCredentials, scopes); + + NullPointerException exception = + assertThrows(NullPointerException.class, () -> credentials.updateCredentials(null)); + assertEquals("credentials must not be null", exception.getMessage()); + } + + private void validateInitialDelegatedCredentialsAreSet( + MutableCredentials credentials, URI testUri) throws IOException { + assertEquals(initialAuthType, credentials.getAuthenticationType()); + assertTrue(credentials.hasRequestMetadata()); + assertTrue(credentials.hasRequestMetadataOnly()); + assertEquals(initialMetadata, credentials.getRequestMetadata(testUri)); + assertEquals(initialUniverseDomain, credentials.getUniverseDomain()); + assertEquals(initialMetricsCredentialType, credentials.getMetricsCredentialType()); + } + + private void setupInitialCredentials() throws IOException { + when(initialCredentials.createScoped(scopes)).thenReturn(initialScopedCredentials); + when(initialCredentials.createScoped(Collections.emptyList())) + .thenReturn(initialScopedCredentials); + when(initialScopedCredentials.getAuthenticationType()).thenReturn(initialAuthType); + when(initialScopedCredentials.getRequestMetadata(any(URI.class))).thenReturn(initialMetadata); + when(initialScopedCredentials.getUniverseDomain()).thenReturn(initialUniverseDomain); + when(initialScopedCredentials.getMetricsCredentialType()) + .thenReturn(initialMetricsCredentialType); + when(initialScopedCredentials.hasRequestMetadata()).thenReturn(true); + when(initialScopedCredentials.hasRequestMetadataOnly()).thenReturn(true); + } + + private void setupUpdatedCredentials() throws IOException { + when(updatedCredentials.createScoped(scopes)).thenReturn(updatedScopedCredentials); + when(updatedScopedCredentials.getAuthenticationType()).thenReturn(updatedAuthType); + when(updatedScopedCredentials.getRequestMetadata(any(URI.class))).thenReturn(updatedMetadata); + when(updatedScopedCredentials.getUniverseDomain()).thenReturn(updatedUniverseDomain); + when(updatedScopedCredentials.getMetricsCredentialType()) + .thenReturn(updatedMetricsCredentialType); + when(updatedScopedCredentials.hasRequestMetadata()).thenReturn(false); + when(updatedScopedCredentials.hasRequestMetadataOnly()).thenReturn(false); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationTest.java index a8ddfe706a8..fbc34a37daf 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationTest.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.testing.EqualsTester; import java.math.BigDecimal; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -185,6 +186,64 @@ public void delete() { assertThat(m.toString()).isEqualTo("delete(T1{[k1]})"); } + @Test + public void send() { + Key key = Key.of(123); + Value payload = Value.bytes(ByteArray.copyFrom("payload")); + Instant deliverAt = Instant.now().plusSeconds(3600); + Mutation m = + Mutation.newSendBuilder("TestQueue") + .setKey(key) + .setPayload(payload) + .setDeliveryTime(deliverAt) + .build(); + assertThat(m.getOperation()).isEqualTo(Mutation.Op.SEND); + assertThat(m.getQueue()).isEqualTo("TestQueue"); + assertThat(m.getKey()).isEqualTo(key); + assertThat(m.getPayload()).isEqualTo(payload); + assertThat(m.getDeliveryTime()).isEqualTo(deliverAt); + assertThat(m.toString()) + .isEqualTo( + "send(TestQueue{key=[123], payload=" + payload + ", deliveryTime=" + deliverAt + "})"); + } + + @Test + public void sendMissingKey() { + IllegalStateException e = + assertThrows( + IllegalStateException.class, + () -> Mutation.newSendBuilder("TestQueue").setPayload(Value.string("payload")).build()); + assertThat(e.getMessage()).contains("Key must be set"); + } + + @Test + public void sendMissingPayload() { + IllegalStateException e = + assertThrows( + IllegalStateException.class, + () -> Mutation.newSendBuilder("TestQueue").setKey(Key.of("k1")).build()); + assertThat(e.getMessage()).contains("Payload must be set"); + } + + @Test + public void ackIgnoreNotFound() { + Key key = Key.of("k1"); + Mutation m = Mutation.newAckBuilder("TestQueue").setKey(key).setIgnoreNotFound(true).build(); + assertThat(m.getOperation()).isEqualTo(Mutation.Op.ACK); + assertThat(m.getQueue()).isEqualTo("TestQueue"); + assertThat(m.getKey()).isEqualTo(key); + assertTrue(m.getIgnoreNotFound()); + assertThat(m.toString()).isEqualTo("ack(TestQueue{key=[k1], ignoreNotFound=true})"); + } + + @Test + public void ackMissingKey() { + IllegalStateException e = + assertThrows( + IllegalStateException.class, () -> Mutation.newAckBuilder("TestQueue").build()); + assertThat(e.getMessage()).contains("Key must be set"); + } + @Test public void equalsAndHashCode() { EqualsTester tester = new EqualsTester(); @@ -305,15 +364,84 @@ public void equalsAndHashCode() { tester.testEquals(); } + @Test + public void equalsAndHashCode_sendAndAck() { + EqualsTester tester = new EqualsTester(); + + Key key1 = Key.of("k1"); + Key key2 = Key.of("k2"); + Value payload1 = Value.string("p1"); + Value payload2 = Value.string("p2"); + Instant time1 = Instant.now(); + Instant time2 = time1.plusSeconds(10); + + // SEND + tester.addEqualityGroup( + Mutation.newSendBuilder("TestQueue").setKey(key1).setPayload(payload1).build(), + Mutation.newSendBuilder("TestQueue").setKey(key1).setPayload(payload1).build()); + // Different key + tester.addEqualityGroup( + Mutation.newSendBuilder("TestQueue").setKey(key2).setPayload(payload1).build()); + // Different payload + tester.addEqualityGroup( + Mutation.newSendBuilder("TestQueue").setKey(key1).setPayload(payload2).build()); + // Different queue + tester.addEqualityGroup( + Mutation.newSendBuilder("TestQueue2").setKey(key1).setPayload(payload1).build()); + // Different time + tester.addEqualityGroup( + Mutation.newSendBuilder("TestQueue") + .setKey(key1) + .setPayload(payload1) + .setDeliveryTime(time1) + .build(), + Mutation.newSendBuilder("TestQueue") + .setKey(key1) + .setPayload(payload1) + .setDeliveryTime(time1) + .build()); + tester.addEqualityGroup( + Mutation.newSendBuilder("TestQueue") + .setKey(key1) + .setPayload(payload1) + .setDeliveryTime(time2) + .build()); + + // ACK + tester.addEqualityGroup( + Mutation.newAckBuilder("TestQueue").setKey(key1).build(), + Mutation.newAckBuilder("TestQueue").setKey(key1).build()); + // Different key + tester.addEqualityGroup(Mutation.newAckBuilder("TestQueue").setKey(key2).build()); + // Different queue + tester.addEqualityGroup(Mutation.newAckBuilder("TestQueue2").setKey(key1).build()); + // Different ignoreNotFound + tester.addEqualityGroup( + Mutation.newAckBuilder("TestQueue").setKey(key1).setIgnoreNotFound(true).build(), + Mutation.newAckBuilder("TestQueue").setKey(key1).setIgnoreNotFound(true).build()); + + // Distinct Op types + tester.addEqualityGroup(Mutation.newInsertBuilder("TestQueue").build()); + + tester.testEquals(); + } + @Test public void serializationBasic() { + Instant time = Instant.now(); List mutations = Arrays.asList( Mutation.newInsertBuilder("T").set("C").to("V").build(), Mutation.newUpdateBuilder("T").set("C").to("V").build(), Mutation.newInsertOrUpdateBuilder("T").set("C").to("V").build(), Mutation.newReplaceBuilder("T").set("C").to("V").build(), - Mutation.delete("T", KeySet.singleKey(Key.of("k")))); + Mutation.delete("T", KeySet.singleKey(Key.of("k"))), + Mutation.newSendBuilder("Q") + .setKey(Key.of("k")) + .setPayload(Value.string("p")) + .setDeliveryTime(time) + .build(), + Mutation.newAckBuilder("Q").setKey(Key.of("k")).setIgnoreNotFound(true).build()); List proto = new ArrayList<>(); @@ -328,7 +456,7 @@ public void serializationBasic() { assertThat(proto.get(0)).isSameInstanceAs(existingProto); proto.remove(0); - assertThat(proto.size()).isEqualTo(5); + assertThat(proto.size()).isEqualTo(7); MatcherAssert.assertThat( proto.get(0), matchesProto("insert { table: 'T' columns: 'C' values { values { string_value: 'V' } } }")); @@ -347,6 +475,18 @@ public void serializationBasic() { MatcherAssert.assertThat( proto.get(4), matchesProto("delete { table: 'T' key_set { keys { values { string_value: 'k' } } } }")); + MatcherAssert.assertThat( + proto.get(5), + matchesProto( + "send { queue: 'Q' key { values { string_value: 'k' } } deliver_time { seconds: " + + time.getEpochSecond() + + " nanos: " + + time.getNano() + + " } payload { string_value: 'p' } }")); + MatcherAssert.assertThat( + proto.get(6), + matchesProto( + "ack { queue: 'Q' key { values { string_value: 'k' } } ignore_not_found: true }")); } @Test diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryApiTracerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryApiTracerTest.java index e4d25f1d9b3..67012ed9622 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryApiTracerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryApiTracerTest.java @@ -27,11 +27,14 @@ import com.google.api.gax.longrunning.OperationTimedPollAlgorithm; import com.google.api.gax.retrying.RetrySettings; import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.AsyncTransactionManager.CommitTimestampFuture; +import com.google.cloud.spanner.AsyncTransactionManager.TransactionContextFuture; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.cloud.spanner.SpannerOptions.SpannerEnvironment; import com.google.cloud.spanner.connection.RandomResultSetGenerator; import com.google.common.collect.ImmutableList; +import com.google.common.util.concurrent.MoreExecutors; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import io.grpc.Status; import io.opentelemetry.api.GlobalOpenTelemetry; @@ -135,6 +138,7 @@ public void createSpannerInstance() { SessionPoolOptions.newBuilder() .setWaitForMinSessionsDuration(Duration.ofSeconds(5L)) .setFailOnSessionLeak() + .setSkipVerifyingBeginTransactionForMuxRW(true) .build()) .setEnableApiTracing(true) .build() @@ -428,6 +432,7 @@ public boolean isEnableApiTracing() { SessionPoolOptions.newBuilder() .setWaitForMinSessionsDuration(Duration.ofSeconds(5L)) .setFailOnSessionLeak() + .setSkipVerifyingBeginTransactionForMuxRW(true) .build()) .build() .getService(); @@ -449,6 +454,58 @@ public boolean isEnableApiTracing() { "CloudSpannerOperation.ExecuteStreamingQuery", "Spanner.ExecuteStreamingSql", spans); } + @Test + public void testAsyncTransactionManagerCommit() throws Exception { + try (AsyncTransactionManager manager = client.transactionManagerAsync()) { + TransactionContextFuture transactionFuture = manager.beginAsync(); + CommitTimestampFuture commitTimestamp = + transactionFuture + .then( + (transaction, __) -> transaction.executeUpdateAsync(UPDATE_RANDOM), + MoreExecutors.directExecutor()) + .commitAsync(); + commitTimestamp.get(); + } + + assertEquals(CompletableResultCode.ofSuccess(), spanExporter.flush()); + List spans = spanExporter.getFinishedSpanItems(); + assertContains("CloudSpanner.ReadWriteTransaction", spans); + assertContains("CloudSpannerOperation.ExecuteUpdate", spans); + assertContains("CloudSpannerOperation.Commit", spans); + assertContains("Spanner.ExecuteSql", spans); + assertContains("Spanner.Commit", spans); + + assertParent("CloudSpanner.ReadWriteTransaction", "CloudSpannerOperation.ExecuteUpdate", spans); + assertParent("CloudSpanner.ReadWriteTransaction", "CloudSpannerOperation.Commit", spans); + assertParent("CloudSpannerOperation.ExecuteUpdate", "Spanner.ExecuteSql", spans); + } + + @Test + public void testAsyncTransactionManagerRollback() throws Exception { + try (AsyncTransactionManager manager = client.transactionManagerAsync()) { + TransactionContextFuture transactionFuture = manager.beginAsync(); + transactionFuture + .then( + (transaction, __) -> transaction.executeUpdateAsync(UPDATE_RANDOM), + MoreExecutors.directExecutor()) + .get(); + manager.rollbackAsync().get(); + } + + assertEquals(CompletableResultCode.ofSuccess(), spanExporter.flush()); + List spans = spanExporter.getFinishedSpanItems(); + assertContains("CloudSpanner.ReadWriteTransaction", spans); + assertContains("CloudSpannerOperation.ExecuteUpdate", spans); + assertContains("Spanner.ExecuteSql", spans); + assertContains("Spanner.Rollback", spans); + + assertParent("CloudSpanner.ReadWriteTransaction", "CloudSpannerOperation.ExecuteUpdate", spans); + assertParent("CloudSpannerOperation.ExecuteUpdate", "Spanner.ExecuteSql", spans); + SpanData transactionSpan = getSpan("CloudSpanner.ReadWriteTransaction", spans); + assertNotNull(transactionSpan); + assertContainsEvent("Transaction rolled back", transactionSpan.getEvents()); + } + void assertContains(String expected, List spans) { assertTrue( "Expected " + spansToString(spans) + " to contain " + expected, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java index 7a14681d525..a3273c2a6aa 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java @@ -18,14 +18,18 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.junit.Assume.assumeFalse; +import com.google.api.gax.core.GaxProperties; import com.google.api.gax.longrunning.OperationTimedPollAlgorithm; import com.google.api.gax.retrying.RetrySettings; import com.google.api.gax.tracing.ApiTracerFactory; -import com.google.api.gax.tracing.MetricsTracerFactory; -import com.google.api.gax.tracing.OpenTelemetryMetricsRecorder; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; @@ -33,22 +37,25 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableList; import com.google.common.collect.Range; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Server; import io.grpc.Status; +import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; +import io.opencensus.trace.Tracing; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; -import io.opentelemetry.sdk.metrics.data.HistogramPointData; import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; +import java.io.IOException; +import java.net.InetSocketAddress; import java.time.Duration; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.junit.After; @@ -58,49 +65,43 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) -public class OpenTelemetryBuiltInMetricsTracerTest extends AbstractMockServerTest { - +public class OpenTelemetryBuiltInMetricsTracerTest extends AbstractNettyMockServerTest { private static final Statement SELECT_RANDOM = Statement.of("SELECT * FROM random"); - private static final Statement UPDATE_RANDOM = Statement.of("UPDATE random SET foo=1 WHERE id=1"); private static InMemoryMetricReader metricReader; - - private static OpenTelemetry openTelemetry; - - private static Map attributes; - - private static Attributes expectedBaseAttributes; - - private static final long MIN_LATENCY = 0; + private static final Map attributes = + BuiltInMetricsProvider.INSTANCE.createClientAttributes(); + private static final Attributes expectedCommonBaseAttributes = + Attributes.builder() + .put(BuiltInMetricsConstant.CLIENT_NAME_KEY, "spanner-java/") + .put(BuiltInMetricsConstant.CLIENT_UID_KEY, attributes.get("client_uid")) + .put(BuiltInMetricsConstant.INSTANCE_ID_KEY, "i") + .put(BuiltInMetricsConstant.DATABASE_KEY, "d") + .put(BuiltInMetricsConstant.DIRECT_PATH_ENABLED_KEY, "false") + .put(BuiltInMetricsConstant.DIRECT_PATH_USED_KEY, "false") + .build(); + private static final double MIN_LATENCY = 0; private DatabaseClient client; - @BeforeClass - public static void setup() { + public ApiTracerFactory createMetricsTracerFactory() { metricReader = InMemoryMetricReader.create(); - BuiltInOpenTelemetryMetricsProvider provider = BuiltInOpenTelemetryMetricsProvider.INSTANCE; - SdkMeterProviderBuilder meterProvider = SdkMeterProvider.builder().registerMetricReader(metricReader); - BuiltInMetricsConstant.getAllViews().forEach(meterProvider::registerView); - - String client_name = "spanner-java/"; - openTelemetry = OpenTelemetrySdk.builder().setMeterProvider(meterProvider.build()).build(); - attributes = provider.createClientAttributes("test-project", client_name); - - expectedBaseAttributes = - Attributes.builder() - .put(BuiltInMetricsConstant.PROJECT_ID_KEY, "test-project") - .put(BuiltInMetricsConstant.INSTANCE_CONFIG_ID_KEY, "unknown") - .put( - BuiltInMetricsConstant.LOCATION_ID_KEY, - BuiltInOpenTelemetryMetricsProvider.detectClientLocation()) - .put(BuiltInMetricsConstant.CLIENT_NAME_KEY, client_name) - .put(BuiltInMetricsConstant.CLIENT_UID_KEY, attributes.get("client_uid")) - .put(BuiltInMetricsConstant.CLIENT_HASH_KEY, attributes.get("client_hash")) - .build(); + OpenTelemetry openTelemetry = + OpenTelemetrySdk.builder().setMeterProvider(meterProvider.build()).build(); + + return new BuiltInMetricsTracerFactory( + new BuiltInMetricsRecorder(openTelemetry, BuiltInMetricsConstant.METER_NAME), + attributes, + new TraceWrapper( + Tracing.getTracer(), + openTelemetry.getTracer( + MetricRegistryConstants.INSTRUMENTATION_SCOPE, + GaxProperties.getLibraryVersion(getClass())), + true)); } @BeforeClass @@ -111,8 +112,9 @@ public static void setupResults() { } @After - public void clearRequests() { + public void clearRequests() throws IOException { mockSpanner.clearRequests(); + metricReader.close(); } @Override @@ -120,9 +122,10 @@ public void createSpannerInstance() { SpannerOptions.Builder builder = SpannerOptions.newBuilder(); ApiTracerFactory metricsTracerFactory = - new MetricsTracerFactory( - new OpenTelemetryMetricsRecorder(openTelemetry, BuiltInMetricsConstant.METER_NAME), - attributes); + new BuiltInMetricsTracerFactory( + new BuiltInMetricsRecorder(OpenTelemetry.noop(), BuiltInMetricsConstant.METER_NAME), + attributes, + new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer(""), true)); // Set a quick polling algorithm to prevent this from slowing down the test unnecessarily. builder .getDatabaseAdminStubSettingsBuilder() @@ -135,20 +138,23 @@ public void createSpannerInstance() { .setRetryDelayMultiplier(1.0) .setTotalTimeoutDuration(Duration.ofMinutes(10L)) .build())); + String endpoint = address.getHostString() + ":" + server.getPort(); spanner = - builder + SpannerOptions.newBuilder() .setProjectId("test-project") - .setChannelProvider(channelProvider) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://" + endpoint) .setCredentials(NoCredentials.getInstance()) .setSessionPoolOption( SessionPoolOptions.newBuilder() .setWaitForMinSessionsDuration(Duration.ofSeconds(5L)) .setFailOnSessionLeak() + .setSkipVerifyingBeginTransactionForMuxRW(true) .build()) // Setting this to false so that Spanner Options does not register Metrics Tracer // factory again. .setBuiltInMetricsEnabled(false) - .setApiTracerFactory(metricsTracerFactory) + .setApiTracerFactory(createMetricsTracerFactory()) .build() .getService(); client = spanner.getDatabaseClient(DatabaseId.of("test-project", "i", "d")); @@ -162,31 +168,53 @@ public void testMetricsSingleUseQuery() { assertFalse(resultSet.next()); } - long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS); + double elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS); Attributes expectedAttributes = - expectedBaseAttributes - .toBuilder() + expectedCommonBaseAttributes.toBuilder() .put(BuiltInMetricsConstant.STATUS_KEY, "OK") .put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.ExecuteStreamingSql") .build(); MetricData operationLatencyMetricData = getMetricData(metricReader, BuiltInMetricsConstant.OPERATION_LATENCIES_NAME); - long operationLatencyValue = getAggregatedValue(operationLatencyMetricData, expectedAttributes); + assertNotNull(operationLatencyMetricData); + double operationLatencyValue = + getAggregatedValue(operationLatencyMetricData, expectedAttributes); assertThat(operationLatencyValue).isIn(Range.closed(MIN_LATENCY, elapsed)); MetricData attemptLatencyMetricData = getMetricData(metricReader, BuiltInMetricsConstant.ATTEMPT_LATENCIES_NAME); - long attemptLatencyValue = getAggregatedValue(attemptLatencyMetricData, expectedAttributes); + assertNotNull(attemptLatencyMetricData); + double attemptLatencyValue = getAggregatedValue(attemptLatencyMetricData, expectedAttributes); assertThat(attemptLatencyValue).isIn(Range.closed(MIN_LATENCY, elapsed)); MetricData operationCountMetricData = getMetricData(metricReader, BuiltInMetricsConstant.OPERATION_COUNT_NAME); + assertNotNull(operationCountMetricData); assertThat(getAggregatedValue(operationCountMetricData, expectedAttributes)).isEqualTo(1); MetricData attemptCountMetricData = getMetricData(metricReader, BuiltInMetricsConstant.ATTEMPT_COUNT_NAME); + assertNotNull(attemptCountMetricData); assertThat(getAggregatedValue(attemptCountMetricData, expectedAttributes)).isEqualTo(1); + + assertFalse( + checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME)); + assertFalse( + checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME)); + // AFE metrics are enabled for DirectPath. + MetricData afeLatencyMetricData = + getMetricData(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME); + double afeLatencyValue = getAggregatedValue(afeLatencyMetricData, expectedAttributes); + assertEquals(fakeAFEServerTiming.get(), afeLatencyValue, 1e-6); + } + + private boolean isJava8() { + return JavaVersionUtil.getJavaMajorVersion() == 8; + } + + private boolean isWindows() { + return System.getProperty("os.name").toLowerCase().contains("windows"); } @Test @@ -203,21 +231,20 @@ public void testMetricsWithGaxRetryUnaryRpc() { stopwatch.elapsed(TimeUnit.MILLISECONDS); Attributes expectedAttributesBeginTransactionOK = - expectedBaseAttributes - .toBuilder() + expectedCommonBaseAttributes.toBuilder() .put(BuiltInMetricsConstant.STATUS_KEY, "OK") .put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.BeginTransaction") .build(); Attributes expectedAttributesBeginTransactionFailed = - expectedBaseAttributes - .toBuilder() + expectedCommonBaseAttributes.toBuilder() .put(BuiltInMetricsConstant.STATUS_KEY, "UNAVAILABLE") .put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.BeginTransaction") .build(); MetricData attemptCountMetricData = getMetricData(metricReader, BuiltInMetricsConstant.ATTEMPT_COUNT_NAME); + assertNotNull(attemptCountMetricData); assertThat(getAggregatedValue(attemptCountMetricData, expectedAttributesBeginTransactionOK)) .isEqualTo(1); // Attempt count should have a failed metric point for Begin Transaction. @@ -226,6 +253,7 @@ public void testMetricsWithGaxRetryUnaryRpc() { MetricData operationCountMetricData = getMetricData(metricReader, BuiltInMetricsConstant.OPERATION_COUNT_NAME); + assertNotNull(operationCountMetricData); assertThat(getAggregatedValue(operationCountMetricData, expectedAttributesBeginTransactionOK)) .isEqualTo(1); // Operation count should not have a failed metric point for Begin Transaction as overall @@ -235,9 +263,141 @@ public void testMetricsWithGaxRetryUnaryRpc() { .isEqualTo(0); } + @Test + public void testNoNetworkConnection() { + assumeFalse(TestHelper.isMultiplexSessionDisabled()); + // Create a Spanner instance that tries to connect to a server that does not exist. + // This simulates a bad network connection. + SpannerOptions.Builder builder = SpannerOptions.newBuilder(); + + // Set up the client to fail fast. + builder + .getSpannerStubSettingsBuilder() + .applyToAllUnaryMethods( + input -> { + // This tells the Spanner client to fail directly if it gets an UNAVAILABLE exception. + // The 10-second deadline is chosen to ensure that: + // 1. The test fails within a reasonable amount of time if retries for whatever reason + // has been re-enabled. + // 2. The timeout is long enough to never be triggered during normal tests. + input.setSimpleTimeoutNoRetriesDuration(Duration.ofSeconds(10L)); + return null; + }); + + Spanner spanner = + builder + .setProjectId("test-project") + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:0") + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setMinSessions(0) + .setUseMultiplexedSession(true) + .setUseMultiplexedSessionForRW(true) + .setSkipVerifyingBeginTransactionForMuxRW(true) + .setFailOnSessionLeak() + .build()) + // Setting this to false so that Spanner Options does not register Metrics Tracer + // factory again. + .setBuiltInMetricsEnabled(false) + .setApiTracerFactory(createMetricsTracerFactory()) + .build() + .getService(); + String instance = "i"; + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("test-project", instance, "d")); + + // Using this client will return UNAVAILABLE, as the server is not reachable and we have + // disabled retries. + SpannerException exception = + assertThrows( + SpannerException.class, () -> client.singleUse().executeQuery(SELECT_RANDOM).next()); + assertEquals(ErrorCode.UNAVAILABLE, exception.getErrorCode()); + + Attributes expectedAttributesCreateSessionOK = + expectedCommonBaseAttributes.toBuilder() + .put(BuiltInMetricsConstant.STATUS_KEY, "OK") + .put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.CreateSession") + // Include the additional attributes that are added by the HeaderInterceptor in the + // filter. Note that the DIRECT_PATH_USED attribute is not added, as the request never + // leaves the client. + .build(); + + Attributes expectedAttributesCreateSessionFailed = + expectedCommonBaseAttributes.toBuilder() + .put(BuiltInMetricsConstant.STATUS_KEY, "UNAVAILABLE") + .put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.CreateSession") + // Include the additional attributes that are added by the HeaderInterceptor in the + // filter. Note that the DIRECT_PATH_USED attribute is not added, as the request never + // leaves the client. + .build(); + + MetricData attemptCountMetricData = + getMetricData(metricReader, BuiltInMetricsConstant.ATTEMPT_COUNT_NAME); + assertNotNull(attemptCountMetricData); + + // Attempt count should have a failed metric point for CreateSession. + assertEquals( + 1, getAggregatedValue(attemptCountMetricData, expectedAttributesCreateSessionFailed), 0); + assertTrue( + checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME)); + assertTrue( + checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME)); + } + + @Test + public void testNoServerTimingHeader() throws IOException, InterruptedException { + // Create Spanner Object without headers + InetSocketAddress addressNoHeader = new InetSocketAddress("localhost", 0); + Server serverNoHeader = + NettyServerBuilder.forAddress(addressNoHeader).addService(mockSpanner).build().start(); + String endpoint = address.getHostString() + ":" + serverNoHeader.getPort(); + Spanner spannerNoHeader = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://" + endpoint) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setWaitForMinSessionsDuration(Duration.ofSeconds(5L)) + .setFailOnSessionLeak() + .setSkipVerifyingBeginTransactionForMuxRW(true) + .build()) + // Setting this to false so that Spanner Options does not register Metrics Tracer + // factory again. + .setBuiltInMetricsEnabled(false) + .setApiTracerFactory(createMetricsTracerFactory()) + .build() + .getService(); + DatabaseClient databaseClientNoHeader = + spannerNoHeader.getDatabaseClient(DatabaseId.of("test-project", "i", "d")); + + databaseClientNoHeader + .readWriteTransaction() + .run(transaction -> transaction.executeUpdate(UPDATE_RANDOM)); + + Attributes expectedAttributes = + expectedCommonBaseAttributes.toBuilder() + .put(BuiltInMetricsConstant.STATUS_KEY, "OK") + .put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.ExecuteSql") + .build(); + + assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME)); + assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME)); + assertTrue( + checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME)); + assertTrue( + checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME)); + + spannerNoHeader.close(); + serverNoHeader.shutdown(); + serverNoHeader.awaitTermination(); + } + private MetricData getMetricData(InMemoryMetricReader reader, String metricName) { String fullMetricName = BuiltInMetricsConstant.METER_NAME + "/" + metricName; - Collection allMetricData = Collections.emptyList(); + Collection allMetricData; // Fetch the MetricData with retries for (int attemptsLeft = 1000; attemptsLeft > 0; attemptsLeft--) { @@ -264,28 +424,44 @@ private MetricData getMetricData(InMemoryMetricReader reader, String metricName) } } - assertTrue(String.format("MetricData is missing for metric {0}", fullMetricName), false); + fail(String.format("MetricData is missing for metric %s", fullMetricName)); return null; } - private long getAggregatedValue(MetricData metricData, Attributes attributes) { + private boolean checkIfMetricExists(InMemoryMetricReader reader, String metricName) { + String fullMetricName = BuiltInMetricsConstant.METER_NAME + "/" + metricName; + + for (int attemptsLeft = 1000; attemptsLeft > 0; attemptsLeft--) { + boolean exists = + reader.collectAllMetrics().stream().anyMatch(md -> md.getName().equals(fullMetricName)); + if (exists) { + return true; + } + try { + Thread.sleep(1); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + } + } + + return false; + } + + private float getAggregatedValue(MetricData metricData, Attributes attributes) { switch (metricData.getType()) { case HISTOGRAM: - Optional hd = - metricData.getHistogramData().getPoints().stream() - .filter(pd -> pd.getAttributes().equals(attributes)) - .collect(Collectors.toList()) - .stream() - .findFirst(); - return hd.isPresent() ? (long) hd.get().getSum() / hd.get().getCount() : 0; + return metricData.getHistogramData().getPoints().stream() + .filter(pd -> pd.getAttributes().equals(attributes)) + .map(data -> (float) data.getSum() / data.getCount()) + .findFirst() + .orElse(0F); case LONG_SUM: - Optional ld = - metricData.getLongSumData().getPoints().stream() - .filter(pd -> pd.getAttributes().equals(attributes)) - .collect(Collectors.toList()) - .stream() - .findFirst(); - return ld.isPresent() ? ld.get().getValue() : 0; + return metricData.getLongSumData().getPoints().stream() + .filter(pd -> pd.getAttributes().equals(attributes)) + .map(LongPointData::getValue) + .findFirst() + .orElse(0L); default: return 0; } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java index f7f547ce357..8ff8827664d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import com.google.api.gax.core.GaxProperties; import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; @@ -38,6 +39,7 @@ import io.grpc.inprocess.InProcessServerBuilder; import io.opencensus.trace.Tracing; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.sdk.OpenTelemetrySdk; @@ -49,6 +51,7 @@ import java.lang.reflect.Modifier; import java.time.Duration; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -113,14 +116,6 @@ public class OpenTelemetrySpanTest { ImmutableList.of("Request for 1 multiplexed session returned 1 session"); private int expectedCreateMultiplexedSessionsRequestEventsCount = 1; - private List expectedBatchCreateSessionsRequestEvents = - ImmutableList.of("Requesting 2 sessions", "Request for 2 sessions returned 2 sessions"); - - private int expectedBatchCreateSessionsRequestEventsCount = 2; - - private List expectedBatchCreateSessionsEvents = ImmutableList.of("Creating 2 sessions"); - - private int expectedBatchCreateSessionsEventsCount = 1; private List expectedExecuteStreamingQueryEvents = ImmutableList.of("Starting/Resuming stream"); @@ -147,7 +142,7 @@ public class OpenTelemetrySpanTest { "Commit Done", "Transaction Attempt Succeeded"); - private int expectedReadWriteTransactionCount = 7; + private int expectedReadWriteTransactionEventsCount = 7; private List expectedReadWriteTransactionErrorWithBeginTransactionEvents = ImmutableList.of( "Acquiring session", @@ -197,6 +192,9 @@ public static void startStaticServer() throws Exception { StatementResult.exception( INVALID_UPDATE_STATEMENT, Status.INVALID_ARGUMENT.withDescription("invalid statement").asRuntimeException())); + mockSpanner.putStatementResult( + StatementResult.read( + "FOO", KeySet.all(), Collections.singletonList("ID"), SELECT1_RESULTSET)); String uniqueName = InProcessServerBuilder.generateName(); server = InProcessServerBuilder.forName(uniqueName).addService(mockSpanner).build().start(); @@ -238,6 +236,7 @@ public void setUp() throws Exception { SessionPoolOptions.newBuilder() .setMinSessions(2) .setWaitForMinSessionsDuration(Duration.ofSeconds(10)) + .setSkipVerifyingBeginTransactionForMuxRW(true) .build()); spanner = builder.build().getService(); @@ -267,18 +266,10 @@ public void singleUse() { List expectedReadOnlyTransactionSingleUseEvents = getExpectedReadOnlyTransactionSingleUseEvents(); List expectedReadOnlyTransactionSpans = - isMultiplexedSessionsEnabled() - ? ImmutableList.of( - "CloudSpannerOperation.CreateMultiplexedSession", - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.ExecuteStreamingQuery", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadOnlyTransaction") - : ImmutableList.of( - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.ExecuteStreamingQuery", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadOnlyTransaction"); + ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.ExecuteStreamingQuery", + "CloudSpanner.ReadOnlyTransaction"); int expectedReadOnlyTransactionSingleUseEventsCount = expectedReadOnlyTransactionSingleUseEvents.size(); @@ -305,18 +296,6 @@ public void singleUse() { expectedCreateMultiplexedSessionsRequestEvents, expectedCreateMultiplexedSessionsRequestEventsCount); break; - case "CloudSpannerOperation.BatchCreateSessionsRequest": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsRequestEvents, - expectedBatchCreateSessionsRequestEventsCount); - break; - case "CloudSpannerOperation.BatchCreateSessions": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsEvents, - expectedBatchCreateSessionsEventsCount); - break; case "CloudSpannerOperation.ExecuteStreamingQuery": verifyRequestEvents( spanItem, @@ -328,6 +307,7 @@ public void singleUse() { spanItem, expectedReadOnlyTransactionSingleUseEvents, expectedReadOnlyTransactionSingleUseEventsCount); + verifyCommonAttributes(spanItem); break; default: assert false; @@ -351,31 +331,12 @@ private List getExpectedReadOnlyTransactionSingleUseEvents() { @Test public void multiUse() { List expectedReadOnlyTransactionSpans = - isMultiplexedSessionsEnabled() - ? ImmutableList.of( - "CloudSpannerOperation.CreateMultiplexedSession", - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.ExecuteStreamingQuery", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadOnlyTransaction") - : ImmutableList.of( - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.ExecuteStreamingQuery", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadOnlyTransaction"); - List expectedReadOnlyTransactionMultiUseEvents; - if (isMultiplexedSessionsEnabled()) { - expectedReadOnlyTransactionMultiUseEvents = - ImmutableList.of("Creating Transaction", "Transaction Creation Done"); - } else { - expectedReadOnlyTransactionMultiUseEvents = - ImmutableList.of( - "Acquiring session", - "Acquired session", - "Using Session", - "Creating Transaction", - "Transaction Creation Done"); - } + ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.ExecuteStreamingQuery", + "CloudSpanner.ReadOnlyTransaction"); + List expectedReadOnlyTransactionMultiUseEvents = + ImmutableList.of("Creating Transaction", "Transaction Creation Done"); int expectedReadOnlyTransactionMultiUseEventsCount = expectedReadOnlyTransactionMultiUseEvents.size(); @@ -401,18 +362,6 @@ public void multiUse() { expectedCreateMultiplexedSessionsRequestEvents, expectedCreateMultiplexedSessionsRequestEventsCount); break; - case "CloudSpannerOperation.BatchCreateSessionsRequest": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsRequestEvents, - expectedBatchCreateSessionsRequestEventsCount); - break; - case "CloudSpannerOperation.BatchCreateSessions": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsEvents, - expectedBatchCreateSessionsEventsCount); - break; case "CloudSpannerOperation.ExecuteStreamingQuery": verifyRequestEvents( spanItem, @@ -424,6 +373,7 @@ public void multiUse() { spanItem, expectedReadOnlyTransactionMultiUseEvents, expectedReadOnlyTransactionMultiUseEventsCount); + verifyCommonAttributes(spanItem); break; default: assert false; @@ -436,28 +386,27 @@ public void multiUse() { @Test public void transactionRunner() { List expectedReadWriteTransactionWithCommitSpans = - isMultiplexedSessionsEnabled() - ? ImmutableList.of( - "CloudSpannerOperation.CreateMultiplexedSession", - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.ExecuteUpdate", - "CloudSpannerOperation.Commit", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadWriteTransaction") - : ImmutableList.of( - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.ExecuteUpdate", - "CloudSpannerOperation.Commit", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadWriteTransaction"); + ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.ExecuteUpdate", + "CloudSpannerOperation.Commit", + "CloudSpanner.ReadWriteTransaction"); + + expectedReadWriteTransactionEvents = + ImmutableList.of( + "Starting Transaction Attempt", + "Starting Commit", + "Commit Done", + "Transaction Attempt Succeeded"); + expectedReadWriteTransactionEventsCount = 4; DatabaseClient client = getClient(); TransactionRunner runner = client.readWriteTransaction(); runner.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT)); - // Wait until the list of spans contains "CloudSpannerOperation.BatchCreateSessions", as this is + // Wait until the list of spans contains "CloudSpannerOperation.CreateSession", as this is // an async operation. Stopwatch stopwatch = Stopwatch.createStarted(); while (spanExporter.getFinishedSpanItems().stream() - .noneMatch(span -> span.getName().equals("CloudSpannerOperation.BatchCreateSessions")) + .noneMatch(span -> span.getName().equals("CloudSpannerOperation.CreateSession")) && stopwatch.elapsed(TimeUnit.MILLISECONDS) < 100) { Thread.yield(); } @@ -474,18 +423,6 @@ public void transactionRunner() { expectedCreateMultiplexedSessionsRequestEvents, expectedCreateMultiplexedSessionsRequestEventsCount); break; - case "CloudSpannerOperation.BatchCreateSessionsRequest": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsRequestEvents, - expectedBatchCreateSessionsRequestEventsCount); - break; - case "CloudSpannerOperation.BatchCreateSessions": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsEvents, - expectedBatchCreateSessionsEventsCount); - break; case "CloudSpannerOperation.Commit": case "CloudSpannerOperation.ExecuteUpdate": assertEquals(0, spanItem.getEvents().size()); @@ -494,7 +431,8 @@ public void transactionRunner() { verifyRequestEvents( spanItem, expectedReadWriteTransactionEvents, - expectedReadWriteTransactionCount); + expectedReadWriteTransactionEventsCount); + verifyCommonAttributes(spanItem); break; default: assert false; @@ -507,18 +445,16 @@ public void transactionRunner() { @Test public void transactionRunnerWithError() { List expectedReadWriteTransactionSpans = - isMultiplexedSessionsEnabled() - ? ImmutableList.of( - "CloudSpannerOperation.CreateMultiplexedSession", - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpannerOperation.ExecuteUpdate", - "CloudSpanner.ReadWriteTransaction") - : ImmutableList.of( - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpannerOperation.ExecuteUpdate", - "CloudSpanner.ReadWriteTransaction"); + ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.ExecuteUpdate", + "CloudSpanner.ReadWriteTransaction"); + expectedReadWriteTransactionErrorEvents = + ImmutableList.of( + "Starting Transaction Attempt", + "Transaction Attempt Failed in user operation", + "exception"); + expectedReadWriteTransactionErrorEventsCount = 3; DatabaseClient client = getClient(); TransactionRunner runner = client.readWriteTransaction(); SpannerException e = @@ -540,23 +476,12 @@ public void transactionRunnerWithError() { expectedCreateMultiplexedSessionsRequestEvents, expectedCreateMultiplexedSessionsRequestEventsCount); break; - case "CloudSpannerOperation.BatchCreateSessionsRequest": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsRequestEvents, - expectedBatchCreateSessionsRequestEventsCount); - break; - case "CloudSpannerOperation.BatchCreateSessions": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsEvents, - expectedBatchCreateSessionsEventsCount); - break; case "CloudSpanner.ReadWriteTransaction": verifyRequestEvents( spanItem, expectedReadWriteTransactionErrorEvents, expectedReadWriteTransactionErrorEventsCount); + verifyCommonAttributes(spanItem); break; case "CloudSpannerOperation.ExecuteUpdate": assertEquals(0, spanItem.getEvents().size()); @@ -574,11 +499,19 @@ public void transactionRunnerWithFailedAndBeginTransaction() { List expectedReadWriteTransactionWithCommitAndBeginTransactionSpans = ImmutableList.of( "CloudSpannerOperation.BeginTransaction", - "CloudSpannerOperation.BatchCreateSessionsRequest", "CloudSpannerOperation.ExecuteUpdate", "CloudSpannerOperation.Commit", - "CloudSpannerOperation.BatchCreateSessions", "CloudSpanner.ReadWriteTransaction"); + expectedReadWriteTransactionErrorWithBeginTransactionEvents = + ImmutableList.of( + "Starting Transaction Attempt", + "Transaction Attempt Aborted in user operation. Retrying", + "Creating Transaction", + "Transaction Creation Done", + "Starting Commit", + "Commit Done", + "Transaction Attempt Succeeded"); + expectedReadWriteTransactionErrorWithBeginTransactionEventsCount = 8; DatabaseClient client = getClient(); assertEquals( Long.valueOf(1L), @@ -598,7 +531,7 @@ public void transactionRunnerWithFailedAndBeginTransaction() { return transaction.executeUpdate(UPDATE_STATEMENT); })); // Wait for all spans to finish. Failing to do so can cause the test to miss the - // BatchCreateSessions span, as that span is executed asynchronously in the SessionClient, and + // CreateSession span, as that span is executed asynchronously in the SessionClient, and // the SessionClient returns the session to the pool before the span has finished fully. Stopwatch stopwatch = Stopwatch.createStarted(); while (spanExporter.getFinishedSpanItems().size() @@ -624,18 +557,6 @@ public void transactionRunnerWithFailedAndBeginTransaction() { expectedCreateMultiplexedSessionsRequestEvents, expectedCreateMultiplexedSessionsRequestEventsCount); break; - case "CloudSpannerOperation.BatchCreateSessionsRequest": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsRequestEvents, - expectedBatchCreateSessionsRequestEventsCount); - break; - case "CloudSpannerOperation.BatchCreateSessions": - verifyRequestEvents( - spanItem, - expectedBatchCreateSessionsEvents, - expectedBatchCreateSessionsEventsCount); - break; case "CloudSpannerOperation.Commit": case "CloudSpannerOperation.BeginTransaction": case "CloudSpannerOperation.ExecuteUpdate": @@ -646,6 +567,7 @@ public void transactionRunnerWithFailedAndBeginTransaction() { spanItem, expectedReadWriteTransactionErrorWithBeginTransactionEvents, expectedReadWriteTransactionErrorWithBeginTransactionEventsCount); + verifyCommonAttributes(spanItem); break; default: assert false; @@ -674,7 +596,7 @@ public void testTransactionRunnerWithRetryOnBeginTransaction() { }); assertEquals(2, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); - int numExpectedSpans = isMultiplexedSessionsEnabled() ? 10 : 8; + int numExpectedSpans = 7; waitForFinishedSpans(numExpectedSpans); List finishedSpans = spanExporter.getFinishedSpanItems(); List finishedSpanNames = @@ -687,13 +609,7 @@ public void testTransactionRunnerWithRetryOnBeginTransaction() { assertTrue( actualSpanNames, finishedSpanNames.contains("CloudSpannerOperation.BeginTransaction")); assertTrue(actualSpanNames, finishedSpanNames.contains("CloudSpannerOperation.Commit")); - assertTrue( - actualSpanNames, finishedSpanNames.contains("CloudSpannerOperation.BatchCreateSessions")); - assertTrue( - actualSpanNames, - finishedSpanNames.contains("CloudSpannerOperation.BatchCreateSessionsRequest")); - assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.BatchCreateSessions")); assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.BeginTransaction")); assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.Commit")); @@ -724,7 +640,7 @@ public void testSingleUseRetryOnExecuteStreamingSql() { } assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - int numExpectedSpans = isMultiplexedSessionsEnabled() ? 9 : 7; + int numExpectedSpans = 6; waitForFinishedSpans(numExpectedSpans); List finishedSpans = spanExporter.getFinishedSpanItems(); List finishedSpanNames = @@ -736,13 +652,7 @@ public void testSingleUseRetryOnExecuteStreamingSql() { assertTrue(actualSpanNames, finishedSpanNames.contains("CloudSpanner.ReadOnlyTransaction")); assertTrue( actualSpanNames, finishedSpanNames.contains("CloudSpannerOperation.ExecuteStreamingQuery")); - assertTrue( - actualSpanNames, finishedSpanNames.contains("CloudSpannerOperation.BatchCreateSessions")); - assertTrue( - actualSpanNames, - finishedSpanNames.contains("CloudSpannerOperation.BatchCreateSessionsRequest")); - assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.BatchCreateSessions")); assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.ExecuteStreamingSql")); // UNAVAILABLE errors on ExecuteStreamingSql are handled manually in the client library, which @@ -773,7 +683,7 @@ public void testRetryOnExecuteSql() { .run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT)); assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - int numExpectedSpans = isMultiplexedSessionsEnabled() ? 10 : 8; + int numExpectedSpans = 7; waitForFinishedSpans(numExpectedSpans); List finishedSpans = spanExporter.getFinishedSpanItems(); List finishedSpanNames = @@ -784,13 +694,6 @@ public void testRetryOnExecuteSql() { assertTrue(actualSpanNames, finishedSpanNames.contains("CloudSpanner.ReadWriteTransaction")); assertTrue(actualSpanNames, finishedSpanNames.contains("CloudSpannerOperation.Commit")); - assertTrue( - actualSpanNames, finishedSpanNames.contains("CloudSpannerOperation.BatchCreateSessions")); - assertTrue( - actualSpanNames, - finishedSpanNames.contains("CloudSpannerOperation.BatchCreateSessionsRequest")); - - assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.BatchCreateSessions")); assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.ExecuteSql")); assertTrue(actualSpanNames, finishedSpanNames.contains("Spanner.Commit")); @@ -805,6 +708,33 @@ public void testRetryOnExecuteSql() { .anyMatch(event -> event.getName().equals("Starting RPC retry 1"))); } + @Test + public void testTableAttributes() { + DatabaseClient client = getClient(); + client + .readWriteTransaction(Options.optimisticLock()) + .run( + transaction -> { + try (ResultSet rs = + transaction.read( + "FOO", + KeySet.all(), + Collections.singletonList("ID"), + Options.tag("test-tag"))) { + while (rs.next()) { + assertEquals(rs.getLong(0), 1); + } + } + return null; + }); + SpanData spanData = + spanExporter.getFinishedSpanItems().stream() + .filter(x -> x.getName().equals("CloudSpannerOperation.ExecuteStreamingRead")) + .findFirst() + .get(); + verifyTableAttributes(spanData); + } + private void waitForFinishedSpans(int numExpectedSpans) { // Wait for all spans to finish. Failing to do so can cause the test to miss the // BatchCreateSessions span, as that span is executed asynchronously in the SessionClient, and @@ -831,10 +761,39 @@ private static void verifySpans(List actualSpanItems, List expec actualSpanItems.stream().distinct().sorted().collect(Collectors.toList())); } + private static void verifyCommonAttributes(SpanData span) { + assertEquals(span.getAttributes().get(AttributeKey.stringKey("instance.name")), "my-instance"); + assertEquals(span.getAttributes().get(AttributeKey.stringKey("db.name")), "my-database"); + assertEquals(span.getAttributes().get(AttributeKey.stringKey("gcp.client.service")), "spanner"); + assertEquals( + span.getAttributes().get(AttributeKey.stringKey("gcp.client.repo")), + "googleapis/java-spanner"); + assertEquals( + span.getAttributes().get(AttributeKey.stringKey("gcp.client.version")), + GaxProperties.getLibraryVersion(TraceWrapper.class)); + assertEquals( + span.getAttributes().get(AttributeKey.stringKey("gcp.resource.name")), + String.format( + "//spanner.googleapis.com/projects/%s/instances/%s/databases/%s", + TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + } + + private static void verifyTableAttributes(SpanData span) { + assertEquals(span.getAttributes().get(AttributeKey.stringKey("statement.tag")), "test-tag"); + assertEquals(span.getAttributes().get(AttributeKey.stringKey("db.table")), "FOO"); + } + private boolean isMultiplexedSessionsEnabled() { if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { return false; } return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); } + + private boolean isMultiplexedSessionsEnabledForRW() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java index 38b7a121731..5bd594e83c1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java @@ -25,13 +25,20 @@ import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import com.google.cloud.spanner.Options.RpcLockHint; import com.google.cloud.spanner.Options.RpcOrderBy; import com.google.cloud.spanner.Options.RpcPriority; +import com.google.cloud.spanner.Options.TransactionOption; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.DirectedReadOptions.IncludeReplicas; import com.google.spanner.v1.DirectedReadOptions.ReplicaSelection; +import com.google.spanner.v1.ReadRequest.LockHint; import com.google.spanner.v1.ReadRequest.OrderBy; +import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.RequestOptions.Priority; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -47,6 +54,32 @@ public class OptionsTest { ReplicaSelection.newBuilder().setLocation("us-west1").build())) .build(); + @Test + public void testToRequestOptionsProto() { + RequestOptions.ClientContext clientContext = + RequestOptions.ClientContext.newBuilder() + .putSecureContext( + "key", com.google.protobuf.Value.newBuilder().setStringValue("value").build()) + .build(); + Options options = + Options.fromQueryOptions( + Options.priority(RpcPriority.HIGH), + Options.tag("tag"), + Options.clientContext(clientContext)); + + RequestOptions protoForStatement = options.toRequestOptionsProto(false); + assertEquals(RequestOptions.Priority.PRIORITY_HIGH, protoForStatement.getPriority()); + assertEquals("tag", protoForStatement.getRequestTag()); + assertEquals("", protoForStatement.getTransactionTag()); + assertEquals(clientContext, protoForStatement.getClientContext()); + + RequestOptions protoForTransaction = options.toRequestOptionsProto(true); + assertEquals(RequestOptions.Priority.PRIORITY_HIGH, protoForTransaction.getPriority()); + assertEquals("", protoForTransaction.getRequestTag()); + assertEquals("tag", protoForTransaction.getTransactionTag()); + assertEquals(clientContext, protoForTransaction.getClientContext()); + } + @Test public void negativeLimitsNotAllowed() { IllegalArgumentException e = @@ -77,13 +110,16 @@ public void zeroPrefetchChunksNotAllowed() { @Test public void allOptionsPresent() { + XGoogSpannerRequestId reqId1 = XGoogSpannerRequestId.of(2, 3, 4, 5); Options options = Options.fromReadOptions( Options.limit(10), Options.prefetchChunks(1), Options.dataBoostEnabled(true), Options.directedRead(DIRECTED_READ_OPTIONS), - Options.orderBy(RpcOrderBy.NO_ORDER)); + Options.orderBy(RpcOrderBy.NO_ORDER), + Options.requestId(reqId1), + Options.lockHint(Options.RpcLockHint.SHARED)); assertThat(options.hasLimit()).isTrue(); assertThat(options.limit()).isEqualTo(10); assertThat(options.hasPrefetchChunks()).isTrue(); @@ -92,7 +128,9 @@ public void allOptionsPresent() { assertTrue(options.dataBoostEnabled()); assertTrue(options.hasDirectedReadOptions()); assertTrue(options.hasOrderBy()); + assertTrue(options.hasLockHint()); assertEquals(DIRECTED_READ_OPTIONS, options.directedReadOptions()); + assertEquals(options.reqId(), reqId1); } @Test @@ -107,12 +145,13 @@ public void allOptionsAbsent() { assertThat(options.hasDataBoostEnabled()).isFalse(); assertThat(options.hasDirectedReadOptions()).isFalse(); assertThat(options.hasOrderBy()).isFalse(); + assertThat(options.hasLockHint()).isFalse(); assertNull(options.withExcludeTxnFromChangeStreams()); assertThat(options.toString()).isEqualTo(""); assertThat(options.equals(options)).isTrue(); assertThat(options.equals(null)).isFalse(); assertThat(options.equals(this)).isFalse(); - + assertNull(options.isolationLevel()); assertThat(options.hashCode()).isEqualTo(31); } @@ -189,7 +228,8 @@ public void readOptionsTest() { Options.tag(tag), Options.dataBoostEnabled(true), Options.directedRead(DIRECTED_READ_OPTIONS), - Options.orderBy(RpcOrderBy.NO_ORDER)); + Options.orderBy(RpcOrderBy.NO_ORDER), + Options.lockHint(RpcLockHint.SHARED)); assertThat(options.toString()) .isEqualTo( @@ -207,11 +247,15 @@ public void readOptionsTest() { + " " + "orderBy: " + RpcOrderBy.NO_ORDER + + " " + + "lockHint: " + + RpcLockHint.SHARED + " "); assertThat(options.tag()).isEqualTo(tag); assertEquals(dataBoost, options.dataBoostEnabled()); assertEquals(DIRECTED_READ_OPTIONS, options.directedReadOptions()); assertEquals(OrderBy.ORDER_BY_NO_ORDER, options.orderBy()); + assertEquals(LockHint.LOCK_HINT_SHARED, options.lockHint()); } @Test @@ -365,6 +409,15 @@ public void testTransactionOptionsPriority() { assertEquals("priority: " + priority + " ", options.toString()); } + @Test + public void testTransactionOptionsIsolationLevel() { + Options options = + Options.fromTransactionOptions(Options.isolationLevel(IsolationLevel.REPEATABLE_READ)); + assertEquals(options.isolationLevel(), IsolationLevel.REPEATABLE_READ); + assertEquals( + "isolationLevel: " + IsolationLevel.REPEATABLE_READ.name() + " ", options.toString()); + } + @Test public void testReadOptionsOrderBy() { RpcOrderBy orderBy = RpcOrderBy.NO_ORDER; @@ -373,6 +426,14 @@ public void testReadOptionsOrderBy() { assertEquals("orderBy: " + orderBy + " ", options.toString()); } + @Test + public void testReadOptionsLockHint() { + RpcLockHint lockHint = RpcLockHint.SHARED; + Options options = Options.fromReadOptions(Options.lockHint(lockHint)); + assertTrue(options.hasLockHint()); + assertEquals("lockHint: " + lockHint + " ", options.toString()); + } + @Test public void testReadOptionsWithOrderByEquality() { Options optionsWithNoOrderBy1 = Options.fromReadOptions(Options.orderBy(RpcOrderBy.NO_ORDER)); @@ -383,6 +444,19 @@ public void testReadOptionsWithOrderByEquality() { assertFalse(optionsWithNoOrderBy1.equals(optionsWithPkOrder)); } + @Test + public void testReadOptionsWithLockHintEquality() { + Options optionsWithSharedLockHint1 = + Options.fromReadOptions(Options.lockHint(RpcLockHint.SHARED)); + Options optionsWithSharedLockHint2 = + Options.fromReadOptions(Options.lockHint(RpcLockHint.SHARED)); + assertEquals(optionsWithSharedLockHint1, optionsWithSharedLockHint2); + + Options optionsWithExclusiveLock = + Options.fromReadOptions(Options.lockHint(RpcLockHint.EXCLUSIVE)); + assertNotEquals(optionsWithSharedLockHint1, optionsWithExclusiveLock); + } + @Test public void testQueryOptionsPriority() { RpcPriority priority = RpcPriority.MEDIUM; @@ -688,6 +762,19 @@ public void optimisticLockEquality() { assertNotEquals(option1, option3); } + @Test + public void readLockModeEquality() { + Options option1 = Options.fromTransactionOptions(Options.readLockMode(ReadLockMode.OPTIMISTIC)); + Options option2 = Options.fromTransactionOptions(Options.readLockMode(ReadLockMode.OPTIMISTIC)); + Options option3 = + Options.fromTransactionOptions(Options.readLockMode(ReadLockMode.PESSIMISTIC)); + Options option4 = Options.fromReadOptions(); + + assertEquals(option1, option2); + assertNotEquals(option1, option3); + assertNotEquals(option1, option4); + } + @Test public void optimisticLockHashCode() { Options option1 = Options.fromTransactionOptions(Options.optimisticLock()); @@ -698,6 +785,19 @@ public void optimisticLockHashCode() { assertNotEquals(option1.hashCode(), option3.hashCode()); } + @Test + public void readLockModeHashCode() { + Options option1 = Options.fromTransactionOptions(Options.readLockMode(ReadLockMode.OPTIMISTIC)); + Options option2 = Options.fromTransactionOptions(Options.readLockMode(ReadLockMode.OPTIMISTIC)); + Options option3 = + Options.fromTransactionOptions(Options.readLockMode(ReadLockMode.PESSIMISTIC)); + Options option4 = Options.fromReadOptions(); + + assertEquals(option1.hashCode(), option2.hashCode()); + assertNotEquals(option1.hashCode(), option3.hashCode()); + assertNotEquals(option1.hashCode(), option4.hashCode()); + } + @Test public void directedReadEquality() { Options option1 = Options.fromReadOptions(Options.directedRead(DIRECTED_READ_OPTIONS)); @@ -741,6 +841,28 @@ public void transactionOptionsExcludeTxnFromChangeStreams() { assertThat(option3.toString()).doesNotContain("withExcludeTxnFromChangeStreams: true"); } + @Test + public void transactionOptionsIsolationLevel() { + Options option1 = + Options.fromTransactionOptions(Options.isolationLevel(IsolationLevel.REPEATABLE_READ)); + Options option2 = + Options.fromTransactionOptions(Options.isolationLevel(IsolationLevel.REPEATABLE_READ)); + Options option3 = Options.fromTransactionOptions(); + + assertEquals(option1, option2); + assertEquals(option1.hashCode(), option2.hashCode()); + assertNotEquals(option1, option3); + assertNotEquals(option1.hashCode(), option3.hashCode()); + + assertEquals(option1.isolationLevel(), IsolationLevel.REPEATABLE_READ); + assertThat(option1.toString()) + .contains("isolationLevel: " + IsolationLevel.REPEATABLE_READ.name()); + + assertNull(option3.isolationLevel()); + assertThat(option3.toString()) + .doesNotContain("isolationLevel: " + IsolationLevel.REPEATABLE_READ.name()); + } + @Test public void updateOptionsExcludeTxnFromChangeStreams() { Options option1 = Options.fromUpdateOptions(Options.excludeTxnFromChangeStreams()); @@ -758,4 +880,104 @@ public void updateOptionsExcludeTxnFromChangeStreams() { assertNull(option3.withExcludeTxnFromChangeStreams()); assertThat(option3.toString()).doesNotContain("withExcludeTxnFromChangeStreams: true"); } + + @Test + public void testLastStatement() { + Options option1 = Options.fromUpdateOptions(Options.lastStatement()); + Options option2 = Options.fromUpdateOptions(Options.lastStatement()); + Options option3 = Options.fromUpdateOptions(); + + assertEquals(option1, option2); + assertEquals(option1.hashCode(), option2.hashCode()); + assertNotEquals(option1, option3); + assertNotEquals(option1.hashCode(), option3.hashCode()); + + assertTrue(option1.isLastStatement()); + assertThat(option1.toString()).contains("lastStatement: true"); + + assertNull(option3.isLastStatement()); + assertThat(option3.toString()).doesNotContain("lastStatement: true"); + } + + @Test + public void testTransactionOptionCombine_WithNoSpannerOptions() { + com.google.spanner.v1.TransactionOptions primaryOptions = + com.google.spanner.v1.TransactionOptions.newBuilder() + .setIsolationLevel(IsolationLevel.SERIALIZABLE) + .setExcludeTxnFromChangeStreams(true) + .setReadWrite(ReadWrite.newBuilder().setReadLockMode(ReadLockMode.PESSIMISTIC)) + .build(); + com.google.spanner.v1.TransactionOptions spannerOptions = + com.google.spanner.v1.TransactionOptions.newBuilder() + .setIsolationLevel(IsolationLevel.REPEATABLE_READ) + .build(); + com.google.spanner.v1.TransactionOptions combinedOptions = + spannerOptions.toBuilder().mergeFrom(primaryOptions).build(); + assertEquals(combinedOptions.getIsolationLevel(), IsolationLevel.SERIALIZABLE); + assertTrue(combinedOptions.getExcludeTxnFromChangeStreams()); + assertEquals( + combinedOptions.getReadWrite(), + ReadWrite.newBuilder().setReadLockMode(ReadLockMode.PESSIMISTIC).build()); + } + + @Test + public void testOptions_WithMultipleDifferentIsolationLevels() { + TransactionOption[] transactionOptions = { + Options.isolationLevel(IsolationLevel.REPEATABLE_READ), + Options.isolationLevel(IsolationLevel.SERIALIZABLE) + }; + Options options = Options.fromTransactionOptions(transactionOptions); + assertEquals(options.isolationLevel(), IsolationLevel.SERIALIZABLE); + } + + @Test + public void testRequestId() { + XGoogSpannerRequestId reqId1 = XGoogSpannerRequestId.of(1, 2, 3, 4); + XGoogSpannerRequestId reqId2 = XGoogSpannerRequestId.of(2, 3, 4, 5); + Options option1 = Options.fromUpdateOptions(Options.requestId(reqId1)); + Options option1Prime = Options.fromUpdateOptions(Options.requestId(reqId1)); + Options option2 = Options.fromUpdateOptions(Options.requestId(reqId2)); + Options option3 = Options.fromUpdateOptions(); + + assertEquals(option1, option1Prime); + assertNotEquals(option1, option2); + assertEquals(option1.hashCode(), option1Prime.hashCode()); + assertNotEquals(option1, option2); + assertNotEquals(option1, option3); + assertNotEquals(option1.hashCode(), option3.hashCode()); + + assertTrue(option1.hasReqId()); + assertThat(option1.toString()).contains("requestId: " + reqId1.toString()); + + assertFalse(option3.hasReqId()); + assertThat(option3.toString()).doesNotContain("requestId"); + } + + @Test + public void testRequestIdOptionEqualsAndHashCode() { + XGoogSpannerRequestId reqId1 = XGoogSpannerRequestId.of(1, 2, 3, 4); + XGoogSpannerRequestId reqId2 = XGoogSpannerRequestId.of(2, 3, 4, 5); + Options.RequestIdOption opt1 = Options.requestId(reqId1); + Options.RequestIdOption opt1Prime = Options.requestId(reqId1); + Options.RequestIdOption opt2 = Options.requestId(reqId2); + + assertTrue(opt1.equals(opt1)); + assertTrue(opt1.equals(opt1Prime)); + assertEquals(opt1.hashCode(), opt1Prime.hashCode()); + assertFalse(opt1.equals(opt2)); + assertNotEquals(opt1, opt2); + assertNotEquals(opt1.hashCode(), opt2.hashCode()); + } + + @Test + public void testOptions_WithMultipleDifferentRequestIds() { + XGoogSpannerRequestId reqId1 = XGoogSpannerRequestId.of(1, 1, 1, 1); + XGoogSpannerRequestId reqId2 = XGoogSpannerRequestId.of(1, 1, 1, 2); + TransactionOption[] transactionOptions = { + Options.requestId(reqId1), Options.requestId(reqId2), + }; + Options options = Options.fromTransactionOptions(transactionOptions); + assertNotEquals(options.reqId(), reqId1); + assertEquals(options.reqId(), reqId2); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OrphanedTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OrphanedTransactionTest.java new file mode 100644 index 00000000000..2e0a72086ed --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OrphanedTransactionTest.java @@ -0,0 +1,147 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static org.junit.Assert.assertNull; + +import com.google.api.core.ApiFuture; +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.AsyncTransactionManager.TransactionContextFuture; +import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.connection.AbstractMockServerTest; +import com.google.cloud.spanner.connection.RandomResultSetGenerator; +import com.google.common.base.Function; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.RollbackRequest; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Status; +import java.util.Objects; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +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 OrphanedTransactionTest extends AbstractMockServerTest { + private static final Statement STATEMENT = Statement.of("SELECT * FROM random"); + + @BeforeClass + public static void setupReadResult() { + com.google.cloud.spanner.connection.RandomResultSetGenerator generator = + new RandomResultSetGenerator(10); + mockSpanner.putStatementResult(StatementResult.query(STATEMENT, generator.generate())); + } + + private Spanner createSpanner() { + return SpannerOptions.newBuilder() + .setProjectId("fake-project") + .setHost("http://localhost:" + getPort()) + .setCredentials(NoCredentials.getInstance()) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setSessionPoolOption( + SessionPoolOptions.newBuilder().setWaitForMinSessions(Duration.ofSeconds(5L)).build()) + .build() + .getService(); + } + + @Test + public void testOrphanedTransaction() throws Exception { + ExecutorService executor = Executors.newCachedThreadPool(); + try (Spanner spanner = createSpanner()) { + DatabaseClient client = + spanner.getDatabaseClient( + DatabaseId.of("fake-project", "fake-instance", "fake-database")); + // Freeze the mock server to ensure that the request lands on the mock server before we + // proceed. + mockSpanner.freeze(); + AsyncTransactionManager manager = client.transactionManagerAsync(); + TransactionContextFuture context = manager.beginAsync(); + context.then( + (txn, input) -> { + try (AsyncResultSet resultSet = txn.executeQueryAsync(STATEMENT)) { + resultSet.toListAsync( + (Function) + row -> Objects.requireNonNull(row).getValue(0).getAsString(), + executor); + } + return null; + }, + executor); + // Wait for the ExecuteSqlRequest to land on the mock server. + mockSpanner.waitForRequestsToContain( + input -> + input instanceof ExecuteSqlRequest + && ((ExecuteSqlRequest) input).getSql().equals(STATEMENT.getSql()), + 5000L); + // Now close the transaction. This should (eventually) trigger a rollback, even though the + // client has not yet received a transaction ID. + manager.closeAsync(); + // Unfreeze the mock server and wait for the Rollback request to be received. + mockSpanner.unfreeze(); + mockSpanner.waitForLastRequestToBe(RollbackRequest.class, 5000L); + } finally { + executor.shutdown(); + } + } + + @Test + public void testOrphanedTransactionWithFailedFirstQuery() throws Exception { + ExecutorService executor = Executors.newCachedThreadPool(); + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.INVALID_ARGUMENT.withDescription("table not found").asRuntimeException())); + try (Spanner spanner = createSpanner()) { + DatabaseClient client = + spanner.getDatabaseClient( + DatabaseId.of("fake-project", "fake-instance", "fake-database")); + // Freeze the mock server to ensure that the request lands on the mock server before we + // proceed. + mockSpanner.freeze(); + AsyncTransactionManager manager = client.transactionManagerAsync(); + TransactionContextFuture context = manager.beginAsync(); + context.then( + (txn, input) -> { + try (AsyncResultSet resultSet = txn.executeQueryAsync(STATEMENT)) { + resultSet.toListAsync( + (Function) + row -> Objects.requireNonNull(row).getValue(0).getAsString(), + executor); + } + return null; + }, + executor); + // Wait for the ExecuteSqlRequest to land on the mock server. + mockSpanner.waitForRequestsToContain( + input -> + input instanceof ExecuteSqlRequest + && ((ExecuteSqlRequest) input).getSql().equals(STATEMENT.getSql()), + 5000L); + // Now close the transaction. This will not trigger a Rollback, as the statement failed. + // The closeResult will be done when the error for the failed statement is returned to the + // client. + ApiFuture closeResult = manager.closeAsync(); + mockSpanner.unfreeze(); + assertNull(closeResult.get()); + } finally { + executor.shutdown(); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PartitionedDmlTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PartitionedDmlTransactionTest.java index 68bfcca6146..c6155f0cbb6 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PartitionedDmlTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PartitionedDmlTransactionTest.java @@ -33,6 +33,7 @@ import com.google.api.gax.rpc.ServerStream; import com.google.api.gax.rpc.UnavailableException; import com.google.cloud.spanner.Options.RpcPriority; +import com.google.cloud.spanner.XGoogSpannerRequestId.NoopRequestIdCreator; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.common.base.Ticker; import com.google.common.collect.ImmutableList; @@ -88,8 +89,7 @@ public class PartitionedDmlTransactionTest { private final ExecuteSqlRequest executeRequestWithResumeToken = executeRequestWithoutResumeToken.toBuilder().setResumeToken(resumeToken).build(); private final ExecuteSqlRequest executeRequestWithRequestOptions = - executeRequestWithoutResumeToken - .toBuilder() + executeRequestWithoutResumeToken.toBuilder() .setRequestOptions(RequestOptions.newBuilder().setRequestTag(tag).build()) .build(); @@ -97,7 +97,9 @@ public class PartitionedDmlTransactionTest { public void setup() { MockitoAnnotations.initMocks(this); when(session.getName()).thenReturn(sessionId); + when(session.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); when(session.getOptions()).thenReturn(Collections.EMPTY_MAP); + when(session.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); when(rpc.beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true))) .thenReturn(Transaction.newBuilder().setId(txId).build()); @@ -112,7 +114,7 @@ public void testExecuteStreamingPartitionedUpdate() { ServerStream stream = mock(ServerStream.class); when(stream.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator()); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream); long count = tx.executeStreamingPartitionedUpdate(Statement.of(sql), Duration.ofMinutes(10)); @@ -121,7 +123,7 @@ public void testExecuteStreamingPartitionedUpdate() { verify(rpc).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -132,7 +134,7 @@ public void testExecuteStreamingPartitionedUpdateWithUpdateOptions() { ServerStream stream = mock(ServerStream.class); when(stream.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator()); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithRequestOptions), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithRequestOptions), anyMap(), any(), any(Duration.class))) .thenReturn(stream); long count = @@ -143,7 +145,7 @@ public void testExecuteStreamingPartitionedUpdateWithUpdateOptions() { verify(rpc).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithRequestOptions), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithRequestOptions), anyMap(), any(), any(Duration.class)); } @Test @@ -163,7 +165,7 @@ public void testExecuteStreamingPartitionedUpdateAborted() { ServerStream stream2 = mock(ServerStream.class); when(stream2.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator()); when(rpc.executeStreamingPartitionedDml( - any(ExecuteSqlRequest.class), anyMap(), any(Duration.class))) + any(ExecuteSqlRequest.class), anyMap(), any(), any(Duration.class))) .thenReturn(stream1, stream2); long count = tx.executeStreamingPartitionedUpdate(Statement.of(sql), Duration.ofMinutes(10)); @@ -172,7 +174,7 @@ public void testExecuteStreamingPartitionedUpdateAborted() { verify(rpc, times(2)).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc, times(2)) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -192,10 +194,10 @@ public void testExecuteStreamingPartitionedUpdateUnavailable() { ServerStream stream2 = mock(ServerStream.class); when(stream2.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator()); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream1); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream2); long count = tx.executeStreamingPartitionedUpdate(Statement.of(sql), Duration.ofMinutes(10)); @@ -204,10 +206,10 @@ public void testExecuteStreamingPartitionedUpdateUnavailable() { verify(rpc).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -223,7 +225,7 @@ public void testExecuteStreamingPartitionedUpdateUnavailableAndThenDeadlineExcee "temporary unavailable", null, GrpcStatusCode.of(Code.UNAVAILABLE), true)); when(stream1.iterator()).thenReturn(iterator); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream1); when(ticker.read()).thenReturn(0L, 1L, TimeUnit.NANOSECONDS.convert(10L, TimeUnit.MINUTES)); @@ -235,7 +237,7 @@ public void testExecuteStreamingPartitionedUpdateUnavailableAndThenDeadlineExcee verify(rpc).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -251,7 +253,7 @@ public void testExecuteStreamingPartitionedUpdateAbortedAndThenDeadlineExceeded( "transaction aborted", null, GrpcStatusCode.of(Code.ABORTED), true)); when(stream1.iterator()).thenReturn(iterator); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream1); when(ticker.read()).thenReturn(0L, 1L, TimeUnit.NANOSECONDS.convert(10L, TimeUnit.MINUTES)); @@ -263,7 +265,7 @@ public void testExecuteStreamingPartitionedUpdateAbortedAndThenDeadlineExceeded( verify(rpc, times(2)).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -279,7 +281,7 @@ public void testExecuteStreamingPartitionedUpdateMultipleAbortsUntilDeadlineExce "transaction aborted", null, GrpcStatusCode.of(Code.ABORTED), true)); when(stream1.iterator()).thenReturn(iterator); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream1); when(ticker.read()) .thenAnswer( @@ -303,7 +305,7 @@ public Long answer(InvocationOnMock invocation) { // means that the execute method is only executed 9 times. verify(rpc, times(9)) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -326,10 +328,10 @@ public void testExecuteStreamingPartitionedUpdateUnexpectedEOS() { ServerStream stream2 = mock(ServerStream.class); when(stream2.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator()); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream1); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream2); PartitionedDmlTransaction tx = new PartitionedDmlTransaction(session, rpc, ticker); @@ -339,10 +341,10 @@ public void testExecuteStreamingPartitionedUpdateUnexpectedEOS() { verify(rpc).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -365,10 +367,10 @@ public void testExecuteStreamingPartitionedUpdateRSTstream() { ServerStream stream2 = mock(ServerStream.class); when(stream2.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator()); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream1); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream2); PartitionedDmlTransaction tx = new PartitionedDmlTransaction(session, rpc, ticker); @@ -378,10 +380,10 @@ public void testExecuteStreamingPartitionedUpdateRSTstream() { verify(rpc).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithResumeToken), anyMap(), any(), any(Duration.class)); } @Test @@ -397,7 +399,7 @@ public void testExecuteStreamingPartitionedUpdateGenericInternalException() { "INTERNAL: Error", null, GrpcStatusCode.of(Code.INTERNAL), false)); when(stream1.iterator()).thenReturn(iterator); when(rpc.executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class))) + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class))) .thenReturn(stream1); PartitionedDmlTransaction tx = new PartitionedDmlTransaction(session, rpc, ticker); @@ -409,7 +411,7 @@ public void testExecuteStreamingPartitionedUpdateGenericInternalException() { verify(rpc).beginTransaction(any(BeginTransactionRequest.class), anyMap(), eq(true)); verify(rpc) .executeStreamingPartitionedDml( - Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(Duration.class)); + Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)); } @Test diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RandomResultSetGenerator.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RandomResultSetGenerator.java index 058429d3ba2..051546352cb 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RandomResultSetGenerator.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RandomResultSetGenerator.java @@ -29,9 +29,12 @@ import com.google.spanner.v1.StructType.Field; import com.google.spanner.v1.Type; import com.google.spanner.v1.TypeCode; +import java.math.BigInteger; import java.util.Random; -/** @deprecated Use {@link com.google.cloud.spanner.connection.RandomResultSetGenerator} instead. */ +/** + * @deprecated Use {@link com.google.cloud.spanner.connection.RandomResultSetGenerator} instead. + */ @Deprecated public class RandomResultSetGenerator { private static final Type[] TYPES = @@ -43,6 +46,7 @@ public class RandomResultSetGenerator { Type.newBuilder().setCode(TypeCode.STRING).build(), Type.newBuilder().setCode(TypeCode.BYTES).build(), Type.newBuilder().setCode(TypeCode.DATE).build(), + Type.newBuilder().setCode(TypeCode.INTERVAL).build(), Type.newBuilder().setCode(TypeCode.TIMESTAMP).build(), Type.newBuilder() .setCode(TypeCode.ARRAY) @@ -72,6 +76,10 @@ public class RandomResultSetGenerator { .setCode(TypeCode.ARRAY) .setArrayElementType(Type.newBuilder().setCode(TypeCode.DATE)) .build(), + Type.newBuilder() + .setCode(TypeCode.ARRAY) + .setArrayElementType(Type.newBuilder().setCode(TypeCode.INTERVAL)) + .build(), Type.newBuilder() .setCode(TypeCode.ARRAY) .setArrayElementType(Type.newBuilder().setCode(TypeCode.TIMESTAMP)) @@ -142,6 +150,15 @@ private void setRandomValue(Value.Builder builder, Type type) { random.nextInt(2019) + 1, random.nextInt(11) + 1, random.nextInt(28) + 1); builder.setStringValue(date.toString()); break; + case INTERVAL: + Interval interval = + Interval.builder() + .setMonths(random.nextInt(100) - 100) + .setDays(random.nextInt(100) - 100) + .setNanos(BigInteger.valueOf(random.nextInt(10000000) - 10000000)) + .build(); + builder.setStringValue(interval.toISO8601()); + break; case FLOAT64: builder.setNumberValue(random.nextDouble()); break; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java index dbef7ce29f6..1251ee270fa 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java @@ -201,9 +201,9 @@ public void invalidDatabase() { } @Test - public void tableNotFound() throws Exception { + public void tableNotFound() { mockSpanner.setStreamingReadExecutionTime( - SimulatedExecutionTime.ofException( + SimulatedExecutionTime.ofStickyException( Status.NOT_FOUND .withDescription("Table not found: BadTableName") .asRuntimeException())); @@ -229,9 +229,6 @@ public void closeTransactionBeforeEndOfAsyncQuery() throws Exception { ApiFuture closed; DatabaseClientImpl clientImpl = (DatabaseClientImpl) client; - // There should currently not be any sessions checked out of the pool. - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); - final CountDownLatch dataReceived = new CountDownLatch(1); try (ReadOnlyTransaction tx = client.readOnlyTransaction()) { try (AsyncResultSet rs = @@ -262,22 +259,6 @@ public void closeTransactionBeforeEndOfAsyncQuery() throws Exception { // Wait until at least one row has been fetched. At that moment there should be one session // checked out. dataReceived.await(); - - if (isMultiplexedSessionsEnabled()) { - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); - } else { - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(1); - } - } - // The read-only transaction is now closed, but the ready callback will continue to receive - // data. As it tries to put the data into a synchronous queue and the underlying buffer can also - // only hold 1 row, the async result set has not yet finished. The read-only transaction will - // release the session back into the pool when all async statements have finished. The number of - // sessions in use is therefore still 1. - if (isMultiplexedSessionsEnabled()) { - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); - } else { - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(1); } List resultList = new ArrayList<>(); do { @@ -285,10 +266,7 @@ public void closeTransactionBeforeEndOfAsyncQuery() throws Exception { } while (!finished.isDone() || results.size() > 0); assertThat(finished.get()).isTrue(); assertThat(resultList).containsExactly("k1", "k2", "k3"); - // The session will be released back into the pool by the asynchronous result set when it has - // returned all rows. As this is done in the background, it could take a couple of milliseconds. closed.get(); - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); } @Test diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadFormatTestRunner.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadFormatTestRunner.java index 2a399e6f486..ff26f774b4b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadFormatTestRunner.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadFormatTestRunner.java @@ -51,7 +51,8 @@ public void onTransactionMetadata(Transaction transaction, boolean shouldInclude throws SpannerException {} @Override - public SpannerException onError(SpannerException e, boolean withBeginTransaction) { + public SpannerException onError( + SpannerException e, boolean withBeginTransaction, boolean lastStatement) { return e; } @@ -118,7 +119,9 @@ private static class TestCaseRunner { } private void run() throws Exception { - stream = new GrpcStreamIterator(10, /*cancelQueryWhenClientIsClosed=*/ false); + stream = + new GrpcStreamIterator( + /* lastStatement= */ false, 10, /* cancelQueryWhenClientIsClosed= */ false); stream.setCall( new SpannerRpc.StreamingCall() { @Override diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java index 225bee86347..492252d486c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java @@ -38,7 +38,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -101,7 +100,7 @@ public class ReadWriteTransactionWithInlineBeginTest { private DatabaseClient client; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); @@ -180,18 +179,7 @@ public void singleBatchUpdate() { @Test public void singleQuery() { - Long value = - client - .readWriteTransaction() - .run( - transaction -> { - try (ResultSet rs = transaction.executeQuery(SELECT1)) { - while (rs.next()) { - return rs.getLong(0); - } - } - return 0L; - }); + Long value = MockSpannerTestActions.executeSelect1(client); assertThat(value).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(0); assertThat(countTransactionsStarted()).isEqualTo(1); @@ -406,17 +394,7 @@ public void failedBatchUpdateAndThenUpdate() { @Test public void executeSqlWithOptimisticConcurrencyControl() { - client - .readWriteTransaction(Options.optimisticLock()) - .run( - transaction -> { - try (ResultSet rs = transaction.executeQuery(SELECT1)) { - while (rs.next()) { - assertEquals(rs.getLong(0), 1); - } - } - return null; - }); + MockSpannerTestActions.executeSelect1(client, Options.optimisticLock()); Collection requests = mockSpanner.getRequests().stream() .filter(msg -> msg.getClass().equals(ExecuteSqlRequest.class)) @@ -428,18 +406,8 @@ public void executeSqlWithOptimisticConcurrencyControl() { @Test public void readWithOptimisticConcurrencyControl() { - client - .readWriteTransaction(Options.optimisticLock()) - .run( - transaction -> { - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("ID"))) { - while (rs.next()) { - assertEquals(rs.getLong(0), 1); - } - } - return null; - }); + Long updateCount = MockSpannerTestActions.executeReadFoo(client, Options.optimisticLock()); + assertThat(updateCount).isEqualTo(1L); Collection requests = mockSpanner.getRequests().stream() .filter(msg -> msg.getClass().equals(ReadRequest.class)) @@ -451,20 +419,7 @@ public void readWithOptimisticConcurrencyControl() { @Test public void beginTransactionWithOptimisticConcurrencyControl() { - client - .readWriteTransaction(Options.optimisticLock()) - .run( - transaction -> { - // Instead of adding the BeginTransaction option to the next statement, the client - // library will force a complete retry of the entire transaction, and use an explicit - // BeginTransaction RPC invocation for that transaction in order to include the failed - // statement in the transaction as well. - try (ResultSet rs = transaction.executeQuery(INVALID_SELECT_STATEMENT)) { - SpannerException e = assertThrows(SpannerException.class, () -> rs.next()); - assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); - } - return transaction.executeUpdate(UPDATE_STATEMENT); - }); + MockSpannerTestActions.executeInvalidAndValidSql(client, Options.optimisticLock()); Collection requests = mockSpanner.getRequests().stream() .filter(msg -> msg.getClass().equals(BeginTransactionRequest.class)) @@ -476,19 +431,7 @@ public void beginTransactionWithOptimisticConcurrencyControl() { @Test public void failedQueryAndThenUpdate() { - Long updateCount = - client - .readWriteTransaction() - .run( - transaction -> { - // This query carries the BeginTransaction, but fails. The BeginTransaction will - // then be carried by the subsequent statement. - try (ResultSet rs = transaction.executeQuery(INVALID_SELECT_STATEMENT)) { - SpannerException e = assertThrows(SpannerException.class, () -> rs.next()); - assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); - } - return transaction.executeUpdate(UPDATE_STATEMENT); - }); + Long updateCount = MockSpannerTestActions.executeInvalidAndValidSql(client); assertThat(updateCount).isEqualTo(1L); assertThat(countRequests(BeginTransactionRequest.class)).isEqualTo(1); assertThat(countTransactionsStarted()).isEqualTo(2); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RequestIdMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RequestIdMockServerTest.java new file mode 100644 index 00000000000..eac63010915 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RequestIdMockServerTest.java @@ -0,0 +1,725 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.connection.RandomResultSetGenerator; +import com.google.common.collect.ImmutableList; +import com.google.protobuf.ByteString; +import com.google.protobuf.ListValue; +import com.google.protobuf.Value; +import com.google.rpc.RetryInfo; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.CreateSessionRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.StructType; +import com.google.spanner.v1.StructType.Field; +import com.google.spanner.v1.Type; +import com.google.spanner.v1.TypeCode; +import io.grpc.Context; +import io.grpc.Contexts; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Metadata; +import io.grpc.Server; +import io.grpc.ServerCall; +import io.grpc.ServerCallHandler; +import io.grpc.ServerInterceptor; +import io.grpc.Status; +import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; +import io.grpc.protobuf.ProtoUtils; +import java.net.InetSocketAddress; +import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.TimeUnit; +import org.junit.AfterClass; +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; + +@SuppressWarnings({"StatementWithEmptyBody", "resource"}) +@RunWith(JUnit4.class) +public class RequestIdMockServerTest { + private static MockSpannerServiceImpl mockSpanner; + private static Server server; + private static Spanner spanner; + + private static final Statement SELECT1 = Statement.of("SELECT 1"); + private static final com.google.spanner.v1.ResultSet SELECT1_RESULT_SET = + com.google.spanner.v1.ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setRowType( + StructType.newBuilder() + .addFields( + Field.newBuilder() + .setName("c") + .setType(Type.newBuilder().setCode(TypeCode.INT64).build()) + .build()) + .build()) + .build()) + .addRows( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("1").build()) + .build()) + .build(); + private static final Statement DML = Statement.of("insert into test_table (id) values (1)"); + + private static final ConcurrentLinkedQueue requestIds = + new ConcurrentLinkedQueue<>(); + + @BeforeClass + public static void setup() throws Exception { + assumeTrue(System.getenv("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS") == null); + assumeTrue(System.getenv("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW") == null); + + mockSpanner = new MockSpannerServiceImpl(); + mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. + + InetSocketAddress address = new InetSocketAddress("localhost", 0); + server = + NettyServerBuilder.forAddress(address) + .addService(mockSpanner) + .intercept( + new ServerInterceptor() { + @Override + public ServerCall.Listener interceptCall( + ServerCall call, + Metadata headers, + ServerCallHandler next) { + try { + String requestId = headers.get(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY); + if (requestId != null) { + requestIds.add(XGoogSpannerRequestId.of(requestId)); + } else { + requestIds.add(XGoogSpannerRequestId.of(0, 0, 0, 0)); + } + } catch (Throwable t) { + // Ignore and continue + } + return Contexts.interceptCall(Context.current(), call, headers, next); + } + }) + .build() + .start(); + spanner = createSpanner(); + + setupResults(); + } + + private static Spanner createSpanner() { + return SpannerOptions.newBuilder() + .setProjectId("test-project") + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setHost("http://localhost:" + server.getPort()) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setFailOnSessionLeak() + .setMinSessions(0) + .setSkipVerifyingBeginTransactionForMuxRW(true) + .setWaitForMinSessions(Duration.ofSeconds(5)) + .build()) + .build() + .getService(); + } + + private static void setupResults() { + mockSpanner.putStatementResult(StatementResult.query(SELECT1, SELECT1_RESULT_SET)); + mockSpanner.putStatementResult(StatementResult.update(DML, 1L)); + } + + static Metadata createMinimalRetryInfo() { + Metadata trailers = new Metadata(); + RetryInfo retryInfo = + RetryInfo.newBuilder() + .setRetryDelay( + com.google.protobuf.Duration.newBuilder() + .setNanos((int) TimeUnit.MILLISECONDS.toNanos(1L)) + .setSeconds(0L)) + .build(); + trailers.put(ProtoUtils.keyForProto(RetryInfo.getDefaultInstance()), retryInfo); + return trailers; + } + + @AfterClass + public static void teardown() throws InterruptedException { + if (spanner != null) { + spanner.close(); + } + if (server != null) { + server.shutdown(); + server.awaitTermination(); + } + } + + @Before + public void prepareTest() { + // Call getClient() to make sure the multiplexed session has been created. + // Then clear all requests that were received as part of that so we don't need to include + // that in the test verifications. + getClient(); + mockSpanner.reset(); + requestIds.clear(); + ((SpannerImpl) spanner).resetRequestIdCounters(); + } + + private DatabaseClient getClient() { + return spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + } + + private long getClientId() { + return ((SpannerImpl) spanner).getRequestIdClientId(); + } + + @Test + public void testSingleUseQuery() { + try (ResultSet resultSet = getClient().singleUse().executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + + assertEquals(ImmutableList.of(ExecuteSqlRequest.class), mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds(ImmutableList.of(XGoogSpannerRequestId.of(getClientId(), -1, 1, 1)), actual); + } + + @Test + public void testQueryError() { + Statement query = Statement.of("select * from invalid_table"); + mockSpanner.putStatementResult( + StatementResult.exception( + query, Status.NOT_FOUND.withDescription("Table not found").asRuntimeException())); + + XGoogSpannerRequestId requestIdFromException; + try (ResultSet resultSet = getClient().singleUse().executeQuery(query)) { + SpannerException exception = assertThrows(SpannerException.class, resultSet::next); + assertEquals(ErrorCode.NOT_FOUND, exception.getErrorCode()); + assertNotNull(exception.getRequestId()); + assertNotEquals("Request ID should not be empty", "", exception.getRequestId()); + requestIdFromException = XGoogSpannerRequestId.of(exception.getRequestId()); + } + + assertEquals(ImmutableList.of(ExecuteSqlRequest.class), mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds(ImmutableList.of(XGoogSpannerRequestId.of(getClientId(), -1, 1, 1)), actual); + assertEquals(actual.get(0), requestIdFromException); + } + + @Test + public void testMultiUseReadOnlyTransaction() { + try (ReadOnlyTransaction transaction = getClient().readOnlyTransaction()) { + for (int i = 0; i < 2; i++) { + try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + } + } + + assertEquals( + ImmutableList.of( + BeginTransactionRequest.class, ExecuteSqlRequest.class, ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 3, 1)), + actual); + verifySameChannelId(actual); + } + + @Test + public void testDml() { + getClient().readWriteTransaction().run(transaction -> transaction.executeUpdate(DML)); + + assertEquals( + ImmutableList.of(ExecuteSqlRequest.class, CommitRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1)), + actual); + verifySameChannelId(actual); + } + + @Test + public void testDmlError() { + Statement invalidDml = Statement.of("insert into invalid_table (id) values (1)"); + mockSpanner.putStatementResult( + StatementResult.exception( + invalidDml, Status.NOT_FOUND.withDescription("Table not found").asRuntimeException())); + + SpannerException exception = + assertThrows( + SpannerException.class, + () -> + getClient() + .readWriteTransaction() + .run(transaction -> transaction.executeUpdate(invalidDml))); + assertEquals(ErrorCode.NOT_FOUND, exception.getErrorCode()); + assertNotNull(exception.getRequestId()); + assertNotEquals("Request ID should not be empty", "", exception.getRequestId()); + XGoogSpannerRequestId requestIdFromException = + XGoogSpannerRequestId.of(exception.getRequestId()); + + assertEquals(ImmutableList.of(ExecuteSqlRequest.class), mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds(ImmutableList.of(XGoogSpannerRequestId.of(getClientId(), -1, 1, 1)), actual); + assertEquals(actual.get(0), requestIdFromException); + } + + @Test + public void testAbortedTransaction() { + mockSpanner.setCommitExecutionTime( + SimulatedExecutionTime.ofException( + Status.ABORTED.asRuntimeException(createMinimalRetryInfo()))); + getClient() + .readWriteTransaction() + .run( + transaction -> { + try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + return transaction.executeUpdate(DML); + }); + + assertEquals( + ImmutableList.of( + ExecuteSqlRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class, + ExecuteSqlRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + int requestId = 0; + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1)), + actual); + verifySameChannelId(actual.subList(0, 3)); + verifySameChannelId(actual.subList(3, 6)); + } + + @Test + public void testMix() { + getClient() + .readWriteTransaction() + .run( + transaction -> { + try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + return transaction.executeUpdate(DML); + }); + try (ReadOnlyTransaction transaction = getClient().readOnlyTransaction()) { + for (int i = 0; i < 2; i++) { + try (ResultSet resultSet = transaction.executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + } + } + try (ResultSet resultSet = getClient().singleUse().executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + mockSpanner.putStatementResult( + StatementResult.query( + Statement.of("SELECT my_column FROM my_table WHERE 1=1"), SELECT1_RESULT_SET)); + try (ResultSet resultSet = + getClient().singleUse().read("my_table", KeySet.all(), ImmutableList.of("my_column"))) { + while (resultSet.next()) {} + } + + assertEquals( + ImmutableList.of( + ExecuteSqlRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class, + BeginTransactionRequest.class, + ExecuteSqlRequest.class, + ExecuteSqlRequest.class, + ExecuteSqlRequest.class, + ReadRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + int requestId = 0; + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1), + XGoogSpannerRequestId.of(getClientId(), -1, ++requestId, 1)), + actual); + verifySameChannelId(actual.subList(0, 3)); + verifySameChannelId(actual.subList(3, 6)); + } + + @Test + public void testUnaryUnavailable() { + mockSpanner.setExecuteSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.UNAVAILABLE.asRuntimeException(createMinimalRetryInfo()))); + + getClient().readWriteTransaction().run(transaction -> transaction.executeUpdate(DML)); + + assertEquals( + ImmutableList.of(ExecuteSqlRequest.class, ExecuteSqlRequest.class, CommitRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 1, 2), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1)), + actual); + verifySameChannelId(actual); + } + + @Test + public void testStreamingQueryUnavailable() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.UNAVAILABLE.asRuntimeException(createMinimalRetryInfo()))); + + try (ResultSet resultSet = getClient().singleUse().executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + + assertEquals( + ImmutableList.of(ExecuteSqlRequest.class, ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 1, 2)), + actual); + } + + @Test + public void testStreamingQueryUnavailableHalfway() { + int numRows = 5; + Statement statement = Statement.of("select * from random"); + mockSpanner.putStatementResult( + StatementResult.query(statement, new RandomResultSetGenerator(numRows).generate())); + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofStreamException( + Status.UNAVAILABLE.asRuntimeException(createMinimalRetryInfo()), 2)); + + try (ResultSet resultSet = getClient().singleUse().executeQuery(statement)) { + while (resultSet.next()) {} + } + + assertEquals( + ImmutableList.of(ExecuteSqlRequest.class, ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 1, 2)), + actual); + List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(ByteString.empty(), requests.get(0).getResumeToken()); + assertNotEquals(ByteString.empty(), requests.get(1).getResumeToken()); + } + + @Test + public void testStreamingReadUnavailable() { + mockSpanner.setStreamingReadExecutionTime( + SimulatedExecutionTime.ofException( + Status.UNAVAILABLE.asRuntimeException(createMinimalRetryInfo()))); + + mockSpanner.putStatementResult( + StatementResult.query( + Statement.of("SELECT my_column FROM my_table WHERE 1=1"), SELECT1_RESULT_SET)); + try (ResultSet resultSet = + getClient().singleUse().read("my_table", KeySet.all(), ImmutableList.of("my_column"))) { + while (resultSet.next()) {} + } + + assertEquals( + ImmutableList.of(ReadRequest.class, ReadRequest.class), mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 1, 2)), + actual); + } + + @Test + public void testStreamingReadUnavailableHalfway() { + int numRows = 5; + Statement statement = Statement.of("SELECT my_column FROM my_table WHERE 1=1"); + mockSpanner.putStatementResult( + StatementResult.query(statement, new RandomResultSetGenerator(numRows).generate())); + mockSpanner.setStreamingReadExecutionTime( + SimulatedExecutionTime.ofStreamException( + Status.UNAVAILABLE.asRuntimeException(createMinimalRetryInfo()), 2)); + + try (ResultSet resultSet = + getClient().singleUse().read("my_table", KeySet.all(), ImmutableList.of("my_column"))) { + while (resultSet.next()) {} + } + + assertEquals( + ImmutableList.of(ReadRequest.class, ReadRequest.class), mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 1, 2)), + actual); + List requests = mockSpanner.getRequestsOfType(ReadRequest.class); + assertEquals(ByteString.empty(), requests.get(0).getResumeToken()); + assertNotEquals(ByteString.empty(), requests.get(1).getResumeToken()); + } + + @Test + public void testPartitionedDml() { + getClient().executePartitionedUpdate(DML); + + assertEquals( + ImmutableList.of(BeginTransactionRequest.class, ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1)), + actual); + verifySameChannelId(actual); + } + + @Test + public void testPartitionedDmlError() { + Statement invalidDml = Statement.of("update invalid_table set col=true where col=false"); + mockSpanner.putStatementResult( + StatementResult.exception( + invalidDml, Status.NOT_FOUND.withDescription("Table not found").asRuntimeException())); + + SpannerException exception = + assertThrows( + SpannerException.class, () -> getClient().executePartitionedUpdate(invalidDml)); + assertEquals(ErrorCode.NOT_FOUND, exception.getErrorCode()); + assertNotNull(exception.getRequestId()); + assertNotEquals("", exception.getRequestId()); + + assertEquals( + ImmutableList.of(BeginTransactionRequest.class, ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1)), + actual); + verifySameChannelId(actual); + assertEquals(XGoogSpannerRequestId.of(exception.getRequestId()), actual.get(1)); + } + + @Test + public void testPartitionedDmlAborted() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.ABORTED.asRuntimeException(createMinimalRetryInfo()))); + + getClient().executePartitionedUpdate(DML); + + assertEquals( + ImmutableList.of( + BeginTransactionRequest.class, + ExecuteSqlRequest.class, + BeginTransactionRequest.class, + ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 3, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 4, 1)), + actual); + verifySameChannelId(actual); + } + + @Test + public void testPartitionedDmlUnavailable() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.UNAVAILABLE.asRuntimeException(createMinimalRetryInfo()))); + + getClient().executePartitionedUpdate(DML); + + assertEquals( + ImmutableList.of( + BeginTransactionRequest.class, + ExecuteSqlRequest.class, + BeginTransactionRequest.class, + ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 3, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 4, 1)), + actual); + verifySameChannelId(actual); + } + + @Test + public void testPartitionedDmlUnavailableWithResumeToken() { + Statement update = Statement.of("UPDATE my_table SET active=true where 1=1"); + mockSpanner.putStatementResult( + StatementResult.query( + update, + com.google.spanner.v1.ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setRowType(StructType.newBuilder().build()) + .build()) + .addRows(ListValue.newBuilder().build()) + .addRows(ListValue.newBuilder().build()) + .addRows(ListValue.newBuilder().build()) + .setStats(ResultSetStats.newBuilder().setRowCountLowerBound(100L).build()) + .build())); + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofStreamException( + Status.UNAVAILABLE.asRuntimeException(createMinimalRetryInfo()), 2L)); + + getClient().executePartitionedUpdate(update); + + assertEquals( + ImmutableList.of( + BeginTransactionRequest.class, ExecuteSqlRequest.class, ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 2)), + actual); + verifySameChannelId(actual); + } + + @Test + public void testOtherClientId() { + // Execute a query with the default client from this test class. + try (ResultSet resultSet = getClient().singleUse().executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + // Create a new client and use that to execute a query. This should use a different client ID. + long otherClientId; + try (Spanner spanner = createSpanner()) { + otherClientId = ((SpannerImpl) spanner).getRequestIdClientId(); + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + try (ResultSet resultSet = client.singleUse().executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + } + // Execute another query with the default client. This should use the original client ID. + try (ResultSet resultSet = getClient().singleUse().executeQuery(SELECT1)) { + while (resultSet.next()) {} + } + assertEquals( + ImmutableList.of( + ExecuteSqlRequest.class, + CreateSessionRequest.class, + ExecuteSqlRequest.class, + ExecuteSqlRequest.class), + mockSpanner.getRequestTypes()); + List actual = ImmutableList.copyOf(requestIds); + verifyRequestIds( + ImmutableList.of( + XGoogSpannerRequestId.of(getClientId(), -1, 1, 1), + // The CreateSession RPC from the initialization of the second client is included in + // the requests that we see. This request does not include a channel hint, hence the + // zero value for the channel number in the request ID. + XGoogSpannerRequestId.of(otherClientId, 0, 1, 1), + XGoogSpannerRequestId.of(otherClientId, -1, 2, 1), + XGoogSpannerRequestId.of(getClientId(), -1, 2, 1)), + actual); + } + + private void verifyRequestIds( + List expectedIds, List actualIds) { + assertEquals(message(expectedIds, actualIds), expectedIds.size(), actualIds.size()); + int i = 0; + for (XGoogSpannerRequestId actual : actualIds) { + XGoogSpannerRequestId expected = expectedIds.get(i); + if (expected.getNthChannelId() > -1) { + assertEquals(expected, actual); + } else { + assertTrue(message(expectedIds, actualIds), equalsIgnoringChannelId(expected, actual)); + assertTrue(message(expectedIds, actualIds), actual.hasChannelId()); + } + i++; + } + } + + private void verifySameChannelId(List requestIds) { + for (int i = 0; i < requestIds.size() - 1; i++) { + XGoogSpannerRequestId requestId = requestIds.get(i); + assertTrue(requestId.hasChannelId()); + assertEquals(requestId.getNthChannelId(), requestIds.get(i + 1).getNthChannelId()); + } + } + + private boolean equalsIgnoringChannelId( + XGoogSpannerRequestId expected, XGoogSpannerRequestId actual) { + return expected.getNthClientId() == actual.getNthClientId() + && expected.getNthRequest() == actual.getNthRequest() + && expected.getAttempt() == actual.getAttempt(); + } + + private String message(List expected, List actual) { + return String.format("\n Got: %s\nWant: %s", actual, expected); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsHelper.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsHelper.java index 404973336ba..4ab506f73bb 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsHelper.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsHelper.java @@ -47,6 +47,11 @@ public boolean isWithBeginTransaction() { return false; } + @Override + public boolean isLastStatement() { + return false; + } + @Override public boolean hasNext() { return first || iterator.hasNext(); @@ -77,7 +82,8 @@ public void onTransactionMetadata(Transaction transaction, boolean shouldInclude throws SpannerException {} @Override - public SpannerException onError(SpannerException e, boolean withBeginTransaction) { + public SpannerException onError( + SpannerException e, boolean withBeginTransaction, boolean isLastStatement) { return e; } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java index 3ca550caa2d..082cf30b8c2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java @@ -40,6 +40,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.UUID; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.atomic.AtomicInteger; @@ -70,6 +71,9 @@ public void resultSetIteration() { int year = 2018; int month = 5; int day = 26; + UUID uuid = UUID.randomUUID(); + Interval interval = Interval.parseFromString("P1Y2M3DT5H7M8.967589762S"); + boolean[] boolArray = {true, false, true, true, false}; long[] longArray = {Long.MAX_VALUE, Long.MIN_VALUE, 0, 1, -1}; double[] doubleArray = {Double.MIN_VALUE, Double.MAX_VALUE, 0, 1, -1, 1.2341}; @@ -92,6 +96,13 @@ public void resultSetIteration() { Date[] dateArray = { Date.fromYearMonthDay(1, 2, 3), Date.fromYearMonthDay(4, 5, 6), Date.fromYearMonthDay(7, 8, 9) }; + + UUID[] uuidArray = {UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()}; + + Interval[] intervalArray = { + Interval.parseFromString("P0Y"), Interval.parseFromString("P1Y2M3DT-5H-7M8.9675S") + }; + String[] stringArray = {"abc", "def", "ghi"}; String[] jsonArray = {"{}", "{\"color\":\"red\",\"value\":\"#f00\"}", "[]"}; AbstractMessage[] protoMessageArray = { @@ -114,6 +125,8 @@ public void resultSetIteration() { Type.StructField.of("byteVal", Type.bytes()), Type.StructField.of("timestamp", Type.timestamp()), Type.StructField.of("date", Type.date()), + Type.StructField.of("uuid", Type.uuid()), + Type.StructField.of("interval", Type.interval()), Type.StructField.of( "protoMessage", Type.proto(protoMessageVal.getDescriptorForType().getFullName())), Type.StructField.of( @@ -126,6 +139,8 @@ public void resultSetIteration() { Type.StructField.of("byteArray", Type.array(Type.bytes())), Type.StructField.of("timestampArray", Type.array(Type.timestamp())), Type.StructField.of("dateArray", Type.array(Type.date())), + Type.StructField.of("uuidArray", Type.array(Type.uuid())), + Type.StructField.of("intervalArray", Type.array(Type.interval())), Type.StructField.of("stringArray", Type.array(Type.string())), Type.StructField.of("jsonArray", Type.array(Type.json())), Type.StructField.of("pgJsonbArray", Type.array(Type.pgJsonb())), @@ -163,6 +178,10 @@ public void resultSetIteration() { .to(Timestamp.ofTimeMicroseconds(usecs)) .set("date") .to(Date.fromYearMonthDay(year, month, day)) + .set("uuid") + .to(uuid) + .set("interval") + .to(interval) .set("protoMessage") .to(protoMessageVal) .set("protoEnum") @@ -183,6 +202,10 @@ public void resultSetIteration() { .to(Value.timestampArray(Arrays.asList(timestampArray))) .set("dateArray") .to(Value.dateArray(Arrays.asList(dateArray))) + .set("uuidArray") + .to(Value.uuidArray(Arrays.asList(uuidArray))) + .set("intervalArray") + .to(Value.intervalArray(Arrays.asList(intervalArray))) .set("stringArray") .to(Value.stringArray(Arrays.asList(stringArray))) .set("jsonArray") @@ -228,6 +251,10 @@ public void resultSetIteration() { .to(Timestamp.ofTimeMicroseconds(usecs)) .set("date") .to(Date.fromYearMonthDay(year, month, day)) + .set("uuid") + .to(uuid) + .set("interval") + .to(Value.interval(interval)) .set("protoMessage") .to(protoMessageVal) .set("protoEnum") @@ -248,6 +275,10 @@ public void resultSetIteration() { .to(Value.timestampArray(Arrays.asList(timestampArray))) .set("dateArray") .to(Value.dateArray(Arrays.asList(dateArray))) + .set("uuidArray") + .to(Value.uuidArray(Arrays.asList(uuidArray))) + .set("intervalArray") + .to(Value.intervalArray(Arrays.asList(intervalArray))) .set("stringArray") .to(Value.stringArray(Arrays.asList(stringArray))) .set("jsonArray") @@ -339,6 +370,18 @@ public void resultSetIteration() { assertThat(rs.getDate("date")).isEqualTo(Date.fromYearMonthDay(year, month, day)); assertThat(rs.getValue("date")).isEqualTo(Value.date(Date.fromYearMonthDay(year, month, day))); + // UUID + assertThat(rs.getUuid(columnIndex)).isEqualTo(uuid); + assertThat(rs.getValue(columnIndex++)).isEqualTo(Value.uuid(uuid)); + assertThat(rs.getUuid("uuid")).isEqualTo(uuid); + assertThat(rs.getValue("uuid")).isEqualTo(Value.uuid(uuid)); + + // INTERVAL + assertThat(rs.getInterval(columnIndex)).isEqualTo(interval); + assertThat(rs.getValue(columnIndex++)).isEqualTo(Value.interval(interval)); + assertThat(rs.getInterval("interval")).isEqualTo(interval); + assertThat(rs.getValue("interval")).isEqualTo(Value.interval(interval)); + assertEquals(protoMessageVal, rs.getProtoMessage(columnIndex, SingerInfo.getDefaultInstance())); assertEquals(Value.protoMessage(protoMessageVal), rs.getValue(columnIndex++)); assertEquals( @@ -400,6 +443,21 @@ public void resultSetIteration() { assertThat(rs.getValue(columnIndex++)).isEqualTo(Value.dateArray(Arrays.asList(dateArray))); assertThat(rs.getDateList("dateArray")).isEqualTo(Arrays.asList(dateArray)); assertThat(rs.getValue("dateArray")).isEqualTo(Value.dateArray(Arrays.asList(dateArray))); + + // UUID Array + assertThat(rs.getUuidList(columnIndex)).isEqualTo(Arrays.asList(uuidArray)); + assertThat(rs.getValue(columnIndex++)).isEqualTo(Value.uuidArray(Arrays.asList(uuidArray))); + assertThat(rs.getUuidList("uuidArray")).isEqualTo(Arrays.asList(uuidArray)); + assertThat(rs.getValue("uuidArray")).isEqualTo(Value.uuidArray(Arrays.asList(uuidArray))); + + // INTERVAL Array + assertThat(rs.getIntervalList(columnIndex)).isEqualTo(Arrays.asList(intervalArray)); + assertThat(rs.getValue(columnIndex++)) + .isEqualTo(Value.intervalArray(Arrays.asList(intervalArray))); + assertThat(rs.getIntervalList("intervalArray")).isEqualTo(Arrays.asList(intervalArray)); + assertThat(rs.getValue("intervalArray")) + .isEqualTo(Value.intervalArray(Arrays.asList(intervalArray))); + assertThat(rs.getStringList(columnIndex)).isEqualTo(Arrays.asList(stringArray)); assertThat(rs.getValue(columnIndex++)).isEqualTo(Value.stringArray(Arrays.asList(stringArray))); assertThat(rs.getStringList("stringArray")).isEqualTo(Arrays.asList(stringArray)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java index ebe86724678..f13c0bb1237 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java @@ -25,6 +25,7 @@ import com.google.api.client.util.BackOff; import com.google.cloud.spanner.ErrorHandler.DefaultErrorHandler; +import com.google.cloud.spanner.XGoogSpannerRequestId.NoopRequestIdCreator; import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import com.google.common.collect.AbstractIterator; import com.google.common.collect.ImmutableList; @@ -140,6 +141,11 @@ public void close(@Nullable String message) { public boolean isWithBeginTransaction() { return false; } + + @Override + public boolean isLastStatement() { + return false; + } } Starter starter = Mockito.mock(Starter.class); @@ -162,11 +168,13 @@ private void initWithLimit(int maxBufferSize) { new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer(""), false), DefaultErrorHandler.INSTANCE, SpannerStubSettings.newBuilder().executeStreamingSqlSettings().getRetrySettings(), - SpannerStubSettings.newBuilder().executeStreamingSqlSettings().getRetryableCodes()) { + SpannerStubSettings.newBuilder().executeStreamingSqlSettings().getRetryableCodes(), + NoopRequestIdCreator.INSTANCE) { @Override AbstractResultSet.CloseableIterator startStream( @Nullable ByteString resumeToken, - AsyncResultSet.StreamMessageListener streamMessageListener) { + AsyncResultSet.StreamMessageListener streamMessageListener, + XGoogSpannerRequestId requestId) { return starter.startStream(resumeToken, null); } }; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelMockServerTest.java index 267c6077add..5f722759229 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnDifferentGrpcChannelMockServerTest.java @@ -16,32 +16,31 @@ package com.google.cloud.spanner; -import static io.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; +import com.google.api.gax.grpc.GrpcInterceptorProvider; import com.google.cloud.NoCredentials; +import com.google.cloud.grpc.GcpManagedChannel; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.connection.AbstractMockServerTest; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableList; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.ExecuteSqlRequest; -import io.grpc.Attributes; +import io.grpc.CallOptions; +import io.grpc.Channel; +import io.grpc.ClientCall; +import io.grpc.ClientInterceptor; import io.grpc.Context; import io.grpc.Deadline; import io.grpc.ManagedChannelBuilder; -import io.grpc.Metadata; -import io.grpc.ServerCall; -import io.grpc.ServerCall.Listener; -import io.grpc.ServerCallHandler; -import io.grpc.ServerInterceptor; +import io.grpc.MethodDescriptor; import io.grpc.Status; -import java.io.IOException; -import java.net.InetSocketAddress; import java.time.Duration; import java.util.HashMap; import java.util.HashSet; @@ -62,12 +61,14 @@ @RunWith(JUnit4.class) public class RetryOnDifferentGrpcChannelMockServerTest extends AbstractMockServerTest { - private static final Map> SERVER_ADDRESSES = new HashMap<>(); + /** Tracks the logical affinity keys before grpc-gcp routes the request. */ + private static final Map> LOGICAL_AFFINITY_KEYS = new HashMap<>(); @BeforeClass - public static void startStaticServer() throws IOException { + public static void setupAndStartServer() throws Exception { System.setProperty("spanner.retry_deadline_exceeded_on_different_channel", "true"); - startStaticServer(createServerInterceptor()); + // Call the parent's startStaticServer to set up the mock server + AbstractMockServerTest.startStaticServer(); } @AfterClass @@ -77,40 +78,36 @@ public static void removeSystemProperty() { @After public void clearRequests() { - SERVER_ADDRESSES.clear(); + LOGICAL_AFFINITY_KEYS.clear(); mockSpanner.clearRequests(); mockSpanner.removeAllExecutionTimes(); } - static ServerInterceptor createServerInterceptor() { - return new ServerInterceptor() { - @Override - public Listener interceptCall( - ServerCall serverCall, - Metadata metadata, - ServerCallHandler serverCallHandler) { - Attributes attributes = serverCall.getAttributes(); - //noinspection unchecked,deprecation - Attributes.Key key = - (Attributes.Key) - attributes.keys().stream() - .filter(k -> k.equals(TRANSPORT_ATTR_REMOTE_ADDR)) - .findFirst() - .orElse(null); - if (key != null) { - InetSocketAddress address = attributes.get(key); - synchronized (SERVER_ADDRESSES) { - Set addresses = - SERVER_ADDRESSES.getOrDefault( - serverCall.getMethodDescriptor().getFullMethodName(), new HashSet<>()); - addresses.add(address); - SERVER_ADDRESSES.putIfAbsent( - serverCall.getMethodDescriptor().getFullMethodName(), addresses); - } - } - return serverCallHandler.startCall(serverCall, metadata); - } - }; + /** + * Creates a client interceptor that captures the logical affinity key before grpc-gcp routes the + * request. This allows us to verify that retry logic uses distinct logical channel hints, even + * when DCP maps them to fewer physical channels. + */ + static GrpcInterceptorProvider createAffinityKeyInterceptorProvider() { + return () -> + ImmutableList.of( + new ClientInterceptor() { + @Override + public ClientCall interceptCall( + MethodDescriptor method, CallOptions callOptions, Channel next) { + // Capture the AFFINITY_KEY before grpc-gcp processes it + String affinityKey = callOptions.getOption(GcpManagedChannel.AFFINITY_KEY); + if (affinityKey != null) { + String methodName = method.getFullMethodName(); + synchronized (LOGICAL_AFFINITY_KEYS) { + Set keys = + LOGICAL_AFFINITY_KEYS.computeIfAbsent(methodName, k -> new HashSet<>()); + keys.add(affinityKey); + } + } + return next.newCall(method, callOptions); + } + }); } SpannerOptions.Builder createSpannerOptionsBuilder() { @@ -118,7 +115,8 @@ SpannerOptions.Builder createSpannerOptionsBuilder() { .setProjectId("my-project") .setHost(String.format("http://localhost:%d", getPort())) .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) - .setCredentials(NoCredentials.getInstance()); + .setCredentials(NoCredentials.getInstance()) + .setInterceptorProvider(createAffinityKeyInterceptorProvider()); } @Test @@ -133,6 +131,10 @@ public void testReadWriteTransaction_retriesOnNewChannel() { AtomicInteger attempts = new AtomicInteger(); try (Spanner spanner = builder.build().getService()) { + assumeFalse( + "RetryOnDifferentGrpcChannel handler is not implemented for read-write with multiplexed" + + " sessions", + isMultiplexedSessionsEnabledForRW(spanner)); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); client .readWriteTransaction() @@ -150,10 +152,11 @@ public void testReadWriteTransaction_retriesOnNewChannel() { List requests = mockSpanner.getRequestsOfType(BeginTransactionRequest.class); assertNotEquals(requests.get(0).getSession(), requests.get(1).getSession()); + // Verify that the retry used 2 distinct logical affinity keys (before grpc-gcp routing). assertEquals( 2, - SERVER_ADDRESSES - .getOrDefault("google.spanner.v1.Spanner/BeginTransaction", ImmutableSet.of()) + LOGICAL_AFFINITY_KEYS + .getOrDefault("google.spanner.v1.Spanner/BeginTransaction", new HashSet<>()) .size()); } @@ -168,6 +171,10 @@ public void testReadWriteTransaction_stopsRetrying() { SimulatedExecutionTime.ofStickyException(Status.DEADLINE_EXCEEDED.asRuntimeException())); try (Spanner spanner = builder.build().getService()) { + assumeFalse( + "RetryOnDifferentGrpcChannel handler is not implemented for read-write with multiplexed" + + " sessions", + isMultiplexedSessionsEnabledForRW(spanner)); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); SpannerException exception = assertThrows( @@ -190,10 +197,12 @@ public void testReadWriteTransaction_stopsRetrying() { Set sessions = requests.stream().map(BeginTransactionRequest::getSession).collect(Collectors.toSet()); assertEquals(numChannels, sessions.size()); + // Verify that the retry logic used distinct logical affinity keys (before grpc-gcp routing). + // This confirms each retry attempt targeted a different logical channel. assertEquals( numChannels, - SERVER_ADDRESSES - .getOrDefault("google.spanner.v1.Spanner/BeginTransaction", ImmutableSet.of()) + LOGICAL_AFFINITY_KEYS + .getOrDefault("google.spanner.v1.Spanner/BeginTransaction", new HashSet<>()) .size()); } } @@ -211,6 +220,10 @@ public void testDenyListedChannelIsCleared() { SimulatedExecutionTime.ofStickyException(Status.DEADLINE_EXCEEDED.asRuntimeException())); try (Spanner spanner = builder.build().getService()) { + assumeFalse( + "RetryOnDifferentGrpcChannel handler is not implemented for read-write with multiplexed" + + " sessions", + isMultiplexedSessionsEnabledForRW(spanner)); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); // Retry until all channels have been deny-listed. @@ -260,10 +273,12 @@ public void testDenyListedChannelIsCleared() { // of the first transaction. That fails, the session is deny-listed, the transaction is // retried on yet another session and succeeds. assertEquals(numChannels + 1, sessions.size()); + // Verify that the retry logic used distinct logical affinity keys (before grpc-gcp routing). + // This confirms each retry attempt targeted a different logical channel. assertEquals( numChannels, - SERVER_ADDRESSES - .getOrDefault("google.spanner.v1.Spanner/BeginTransaction", ImmutableSet.of()) + LOGICAL_AFFINITY_KEYS + .getOrDefault("google.spanner.v1.Spanner/BeginTransaction", new HashSet<>()) .size()); assertEquals(numChannels, mockSpanner.countRequestsOfType(BatchCreateSessionsRequest.class)); } @@ -271,6 +286,7 @@ public void testDenyListedChannelIsCleared() { @Test public void testSingleUseQuery_retriesOnNewChannel() { + assumeFalse(TestHelper.isMultiplexSessionDisabled()); SpannerOptions.Builder builder = createSpannerOptionsBuilder(); builder.setSessionPoolOption( SessionPoolOptions.newBuilder().setUseMultiplexedSession(true).build()); @@ -289,16 +305,17 @@ public void testSingleUseQuery_retriesOnNewChannel() { List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); // The requests use the same multiplexed session. assertEquals(requests.get(0).getSession(), requests.get(1).getSession()); - // The requests use two different gRPC channels. + // Verify that the retry used 2 distinct logical affinity keys (before grpc-gcp routing). assertEquals( 2, - SERVER_ADDRESSES - .getOrDefault("google.spanner.v1.Spanner/ExecuteStreamingSql", ImmutableSet.of()) + LOGICAL_AFFINITY_KEYS + .getOrDefault("google.spanner.v1.Spanner/ExecuteStreamingSql", new HashSet<>()) .size()); } @Test public void testSingleUseQuery_stopsRetrying() { + assumeFalse(TestHelper.isMultiplexSessionDisabled()); SpannerOptions.Builder builder = createSpannerOptionsBuilder(); builder.setSessionPoolOption( SessionPoolOptions.newBuilder().setUseMultiplexedSession(true).build()); @@ -312,19 +329,21 @@ public void testSingleUseQuery_stopsRetrying() { assertEquals(ErrorCode.DEADLINE_EXCEEDED, exception.getErrorCode()); } int numChannels = spanner.getOptions().getNumChannels(); - assertEquals(numChannels, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); // The requests use the same multiplexed session. String session = requests.get(0).getSession(); for (ExecuteSqlRequest request : requests) { assertEquals(session, request.getSession()); } - // The requests use all gRPC channels. - assertEquals( - numChannels, - SERVER_ADDRESSES - .getOrDefault("google.spanner.v1.Spanner/ExecuteStreamingSql", ImmutableSet.of()) - .size()); + // Verify that the retry mechanism is working (made numChannels requests). + int totalRequests = mockSpanner.countRequestsOfType(ExecuteSqlRequest.class); + assertEquals(numChannels, totalRequests); + // Verify each attempt used a distinct logical affinity key (before grpc-gcp routing). + int distinctLogicalKeys = + LOGICAL_AFFINITY_KEYS + .getOrDefault("google.spanner.v1.Spanner/ExecuteStreamingSql", new HashSet<>()) + .size(); + assertEquals(totalRequests, distinctLogicalKeys); } } @@ -339,6 +358,10 @@ public void testReadWriteTransaction_withGrpcContextDeadline_doesNotRetry() { SimulatedExecutionTime.ofMinimumAndRandomTime(500, 500)); try (Spanner spanner = builder.build().getService()) { + assumeFalse( + "RetryOnDifferentGrpcChannel handler is not implemented for read-write with multiplexed" + + " sessions", + isMultiplexedSessionsEnabledForRW(spanner)); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); ScheduledExecutorService service = Executors.newScheduledThreadPool(1); Context context = @@ -365,4 +388,11 @@ public void testReadWriteTransaction_withGrpcContextDeadline_doesNotRetry() { // up. assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); } + + private boolean isMultiplexedSessionsEnabledForRW(Spanner spanner) { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java deleted file mode 100644 index 3032a1cae40..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java +++ /dev/null @@ -1,1618 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static com.google.cloud.spanner.SpannerApiFutures.get; -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.fail; -import static org.junit.Assume.assumeFalse; - -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutures; -import com.google.api.gax.core.NoCredentialsProvider; -import com.google.api.gax.grpc.testing.LocalChannelProvider; -import com.google.cloud.NoCredentials; -import com.google.cloud.spanner.AsyncResultSet.CallbackResponse; -import com.google.cloud.spanner.AsyncTransactionManager.AsyncTransactionStep; -import com.google.cloud.spanner.AsyncTransactionManager.CommitTimestampFuture; -import com.google.cloud.spanner.AsyncTransactionManager.TransactionContextFuture; -import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; -import com.google.cloud.spanner.v1.SpannerClient; -import com.google.cloud.spanner.v1.SpannerClient.ListSessionsPagedResponse; -import com.google.cloud.spanner.v1.SpannerSettings; -import com.google.common.base.Function; -import com.google.common.base.Stopwatch; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.protobuf.ListValue; -import com.google.spanner.v1.ResultSetMetadata; -import com.google.spanner.v1.StructType; -import com.google.spanner.v1.StructType.Field; -import com.google.spanner.v1.TypeCode; -import io.grpc.Server; -import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Supplier; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameter; -import org.junit.runners.Parameterized.Parameters; - -@RunWith(Parameterized.class) -public class RetryOnInvalidatedSessionTest { - private static final class ToLongTransformer implements Function { - @Override - public Long apply(StructReader input) { - return input.getLong(0); - } - } - - private static final ToLongTransformer TO_LONG = new ToLongTransformer(); - - @Parameter(0) - public boolean failOnInvalidatedSession; - - @Parameters(name = "fail on invalidated session = {0}") - public static Collection data() { - List params = new ArrayList<>(); - params.add(new Object[] {false}); - params.add(new Object[] {true}); - return params; - } - - private static final ResultSetMetadata READ_METADATA = - ResultSetMetadata.newBuilder() - .setRowType( - StructType.newBuilder() - .addFields( - Field.newBuilder() - .setName("BAR") - .setType( - com.google.spanner.v1.Type.newBuilder() - .setCode(TypeCode.INT64) - .build()) - .build()) - .build()) - .build(); - private static final com.google.spanner.v1.ResultSet READ_RESULTSET = - com.google.spanner.v1.ResultSet.newBuilder() - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("1").build()) - .build()) - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("2").build()) - .build()) - .setMetadata(READ_METADATA) - .build(); - private static final com.google.spanner.v1.ResultSet READ_ROW_RESULTSET = - com.google.spanner.v1.ResultSet.newBuilder() - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("1").build()) - .build()) - .setMetadata(READ_METADATA) - .build(); - private static final Statement SELECT1AND2 = - Statement.of("SELECT 1 AS COL1 UNION ALL SELECT 2 AS COL1"); - private static final ResultSetMetadata SELECT1AND2_METADATA = - ResultSetMetadata.newBuilder() - .setRowType( - StructType.newBuilder() - .addFields( - Field.newBuilder() - .setName("COL1") - .setType( - com.google.spanner.v1.Type.newBuilder() - .setCode(TypeCode.INT64) - .build()) - .build()) - .build()) - .build(); - private static final com.google.spanner.v1.ResultSet SELECT1_RESULTSET = - com.google.spanner.v1.ResultSet.newBuilder() - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("1").build()) - .build()) - .addRows( - ListValue.newBuilder() - .addValues(com.google.protobuf.Value.newBuilder().setStringValue("2").build()) - .build()) - .setMetadata(SELECT1AND2_METADATA) - .build(); - private static final Statement UPDATE_STATEMENT = - Statement.of("UPDATE FOO SET BAR=1 WHERE BAZ=2"); - private static final long UPDATE_COUNT = 1L; - private static MockSpannerServiceImpl mockSpanner; - private static Server server; - private static LocalChannelProvider channelProvider; - private static SpannerClient spannerClient; - private static Spanner spanner; - private static DatabaseClient client; - private static ExecutorService executor; - - @BeforeClass - public static void startStaticServer() throws IOException { - mockSpanner = new MockSpannerServiceImpl(); - mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. - mockSpanner.putStatementResult( - StatementResult.read( - "FOO", KeySet.all(), Collections.singletonList("BAR"), READ_RESULTSET)); - mockSpanner.putStatementResult( - StatementResult.read( - "FOO", - KeySet.singleKey(Key.of()), - Collections.singletonList("BAR"), - READ_ROW_RESULTSET)); - mockSpanner.putStatementResult(StatementResult.query(SELECT1AND2, SELECT1_RESULTSET)); - mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); - - String uniqueName = InProcessServerBuilder.generateName(); - server = - InProcessServerBuilder.forName(uniqueName) - .directExecutor() - .addService(mockSpanner) - .build() - .start(); - channelProvider = LocalChannelProvider.create(uniqueName); - - SpannerSettings settings = - SpannerSettings.newBuilder() - .setTransportChannelProvider(channelProvider) - .setCredentialsProvider(NoCredentialsProvider.create()) - .build(); - spannerClient = SpannerClient.create(settings); - executor = Executors.newSingleThreadExecutor(); - } - - @AfterClass - public static void stopServer() throws InterruptedException { - spannerClient.close(); - server.shutdown(); - server.awaitTermination(); - executor.shutdown(); - } - - @Before - public void setUp() throws InterruptedException { - mockSpanner.reset(); - if (spanner == null - || spanner.getOptions().getSessionPoolOptions().isFailIfPoolExhausted() - != failOnInvalidatedSession) { - if (spanner != null) { - spanner.close(); - } - SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder().setFailOnSessionLeak(); - if (failOnInvalidatedSession) { - builder.setFailIfSessionNotFound(); - } - // This prevents repeated retries for a large number of sessions in the pool. - builder.setMinSessions(1); - SessionPoolOptions sessionPoolOptions = builder.build(); - spanner = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(sessionPoolOptions) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService(); - client = spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - invalidateSessionPool(client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - } - - private static void invalidateSessionPool(DatabaseClient client, int minSessions) - throws InterruptedException { - // Wait for all sessions to have been created, and then delete them. - Stopwatch watch = Stopwatch.createStarted(); - while (((DatabaseClientImpl) client).pool.totalSessions() < minSessions) { - if (watch.elapsed(TimeUnit.SECONDS) > 5L) { - fail(String.format("Failed to create MinSessions=%d", minSessions)); - } - Thread.sleep(1L); - } - - ListSessionsPagedResponse response = - spannerClient.listSessions("projects/[PROJECT]/instances/[INSTANCE]/databases/[DATABASE]"); - for (com.google.spanner.v1.Session session : response.iterateAll()) { - spannerClient.deleteSession(session.getName()); - } - } - - private T assertThrowsSessionNotFoundIfShouldFail(Supplier supplier) { - if (failOnInvalidatedSession) { - assertThrows(SessionNotFoundException.class, () -> supplier.get()); - return null; - } else { - return supplier.get(); - } - } - - @Test - public void singleUseSelect() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - // This call will receive an invalidated session that will be replaced on the first call to - // rs.next(). - try (ReadContext context = client.singleUse()) { - try (ResultSet rs = context.executeQuery(SELECT1AND2)) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void singleUseSelectAsync() throws Exception { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - ApiFuture> list; - try (AsyncResultSet rs = client.singleUse().executeQueryAsync(SELECT1AND2)) { - list = rs.toListAsync(TO_LONG, executor); - assertThrowsSessionNotFoundIfShouldFail(() -> get(list)); - } - } - - @Test - public void singleUseRead() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUse()) { - try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void singleUseReadUsingIndex() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUse()) { - try (ResultSet rs = - context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void singleUseReadRow() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUse()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void singleUseReadRowUsingIndex() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUse()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> - context.readRowUsingIndex("FOO", "IDX", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void singleUseReadOnlyTransactionSelect() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUseReadOnlyTransaction()) { - try (ResultSet rs = context.executeQuery(SELECT1AND2)) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void singleUseReadOnlyTransactionRead() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUseReadOnlyTransaction()) { - try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void singlUseReadOnlyTransactionReadUsingIndex() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUseReadOnlyTransaction()) { - try (ResultSet rs = - context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void singleUseReadOnlyTransactionReadRow() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUseReadOnlyTransaction()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void singleUseReadOnlyTransactionReadRowUsingIndex() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.singleUseReadOnlyTransaction()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> - context.readRowUsingIndex("FOO", "IDX", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void readOnlyTransactionSelect() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - try (ResultSet rs = context.executeQuery(SELECT1AND2)) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void readOnlyTransactionRead() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void readOnlyTransactionReadUsingIndex() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - try (ResultSet rs = - context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - } - } - - @Test - public void readOnlyTransactionReadRow() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void readOnlyTransactionReadRowUsingIndex() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> - context.readRowUsingIndex("FOO", "IDX", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void readOnlyTransactionSelectNonRecoverable() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - try (ResultSet rs = context.executeQuery(SELECT1AND2)) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - // Invalidate the session pool while in a transaction. This is not recoverable. - invalidateSessionPool(client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - try (ResultSet rs = context.executeQuery(SELECT1AND2)) { - assertThrows(SessionNotFoundException.class, () -> rs.next()); - } - } - } - - @Test - public void readOnlyTransactionReadNonRecoverable() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - invalidateSessionPool(client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrows(SessionNotFoundException.class, () -> rs.next()); - } - } - } - - @Test - public void readOnlyTransactionReadUsingIndexNonRecoverable() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - try (ResultSet rs = - context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - invalidateSessionPool(client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - try (ResultSet rs = - context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrows(SessionNotFoundException.class, () -> rs.next()); - } - } - } - - @Test - public void readOnlyTransactionReadRowNonRecoverable() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); - invalidateSessionPool(client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - assertThrows( - SessionNotFoundException.class, - () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void readOnlyTransactionReadRowUsingIndexNonRecoverable() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - try (ReadContext context = client.readOnlyTransaction()) { - assertThrowsSessionNotFoundIfShouldFail( - () -> - context.readRowUsingIndex("FOO", "IDX", Key.of(), Collections.singletonList("BAR"))); - invalidateSessionPool(client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - assertThrows( - SessionNotFoundException.class, - () -> - context.readRowUsingIndex("FOO", "IDX", Key.of(), Collections.singletonList("BAR"))); - } - } - - @Test - public void readWriteTransactionReadOnlySessionInPool() throws InterruptedException { - SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder(); - if (failOnInvalidatedSession) { - builder.setFailIfSessionNotFound(); - } - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(builder.build()) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - invalidateSessionPool(client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - while (rs.next()) {} - } - return null; - })); - } - } - - @Test - public void readWriteTransactionSelect() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - while (rs.next()) {} - } - return null; - })); - } - - @Test - public void readWriteTransactionRead() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - return null; - })); - } - - @Test - public void readWriteTransactionReadWithOptimisticLock() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(Options.optimisticLock()); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - return null; - })); - } - - @Test - public void readWriteTransactionReadUsingIndex() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - try (ResultSet rs = - transaction.readUsingIndex( - "FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - return null; - })); - } - - @Test - public void readWriteTransactionReadRow() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> - transaction.readRow("FOO", Key.of(), Collections.singletonList("BAR")))); - } - - @Test - public void readWriteTransactionReadRowUsingIndex() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> - transaction.readRowUsingIndex( - "FOO", "IDX", Key.of(), Collections.singletonList("BAR")))); - } - - @Test - public void readWriteTransactionUpdate() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> runner.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT))); - } - - @Test - public void readWriteTransactionBatchUpdate() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> - transaction.batchUpdate(Collections.singletonList(UPDATE_STATEMENT)))); - } - - @Test - public void readWriteTransactionBuffer() throws InterruptedException { - TransactionRunner runner = client.readWriteTransaction(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - transaction.buffer(Mutation.newInsertBuilder("FOO").set("BAR").to(1L).build()); - return null; - })); - } - - @Test - public void readWriteTransactionSelectInvalidatedDuringTransaction() { - TransactionRunner runner = client.readWriteTransaction(); - final AtomicInteger attempt = new AtomicInteger(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - attempt.incrementAndGet(); - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - while (rs.next()) {} - } - if (attempt.get() == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - while (rs.next()) {} - } - assertThat(attempt.get()).isGreaterThan(1); - return null; - })); - } - - @Test - public void readWriteTransactionReadInvalidatedDuringTransaction() { - TransactionRunner runner = client.readWriteTransaction(); - final AtomicInteger attempt = new AtomicInteger(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - attempt.incrementAndGet(); - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - if (attempt.get() == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - assertThat(attempt.get()).isGreaterThan(1); - return null; - })); - } - - @Test - public void readWriteTransactionReadUsingIndexInvalidatedDuringTransaction() { - TransactionRunner runner = client.readWriteTransaction(); - final AtomicInteger attempt = new AtomicInteger(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - attempt.incrementAndGet(); - try (ResultSet rs = - transaction.readUsingIndex( - "FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - if (attempt.get() == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - try (ResultSet rs = - transaction.readUsingIndex( - "FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - assertThat(attempt.get()).isGreaterThan(1); - return null; - })); - } - - @Test - public void readWriteTransactionReadRowInvalidatedDuringTransaction() { - TransactionRunner runner = client.readWriteTransaction(); - final AtomicInteger attempt = new AtomicInteger(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - attempt.incrementAndGet(); - Struct row = - transaction.readRow("FOO", Key.of(), Collections.singletonList("BAR")); - assertThat(row.getLong(0)).isEqualTo(1L); - if (attempt.get() == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - transaction.readRow("FOO", Key.of(), Collections.singletonList("BAR")); - assertThat(attempt.get()).isGreaterThan(1); - return null; - })); - } - - @Test - public void readWriteTransactionReadRowUsingIndexInvalidatedDuringTransaction() { - TransactionRunner runner = client.readWriteTransaction(); - final AtomicInteger attempt = new AtomicInteger(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - runner.run( - transaction -> { - attempt.incrementAndGet(); - Struct row = - transaction.readRowUsingIndex( - "FOO", "IDX", Key.of(), Collections.singletonList("BAR")); - assertThat(row.getLong(0)).isEqualTo(1L); - if (attempt.get() == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - transaction.readRowUsingIndex( - "FOO", "IDX", Key.of(), Collections.singletonList("BAR")); - assertThat(attempt.get()).isGreaterThan(1); - return null; - })); - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerReadOnlySessionInPool() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerSelect() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerRead() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerReadUsingIndex() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - try (ResultSet rs = - transaction.readUsingIndex( - "FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @Test - public void transactionManagerReadRow() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - TransactionContext context = transaction; - assertThrowsSessionNotFoundIfShouldFail( - () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @Test - public void transactionManagerReadRowUsingIndex() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - TransactionContext context = transaction; - assertThrowsSessionNotFoundIfShouldFail( - () -> - context.readRowUsingIndex( - "FOO", "IDX", Key.of(), Collections.singletonList("BAR"))); - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @Test - public void transactionManagerUpdate() throws InterruptedException { - try (TransactionManager manager = client.transactionManager(Options.commitStats())) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - TransactionContext context = transaction; - assertThrowsSessionNotFoundIfShouldFail(() -> context.executeUpdate(UPDATE_STATEMENT)); - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @Test - public void transactionManagerAborted_thenSessionNotFoundOnBeginTransaction() - throws InterruptedException { - int attempt = 0; - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - attempt++; - if (attempt == 1) { - mockSpanner.abortNextStatement(); - } - if (attempt == 2) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - TransactionContext context = transaction; - assertThrowsSessionNotFoundIfShouldFail(() -> context.executeUpdate(UPDATE_STATEMENT)); - manager.commit(); - // The actual number of attempts depends on when the transaction manager will actually get - // a valid session, as we invalidate the entire session pool. - assertThat(attempt).isAtLeast(3); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @Test - public void transactionManagerBatchUpdate() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - try { - TransactionContext context = transaction; - assertThrowsSessionNotFoundIfShouldFail( - () -> context.batchUpdate(Collections.singletonList(UPDATE_STATEMENT))); - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerBuffer() throws InterruptedException { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext transaction = manager.begin(); - while (true) { - transaction.buffer(Mutation.newInsertBuilder("FOO").set("BAR").to(1L).build()); - try { - manager.commit(); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - if (transaction == null) { - break; - } - } - } - assertThat(manager.getCommitTimestamp()).isNotNull(); - assertThat(failOnInvalidatedSession).isFalse(); - } catch (SessionNotFoundException e) { - assertThat(failOnInvalidatedSession).isTrue(); - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerSelectInvalidatedDuringTransaction() throws InterruptedException { - SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder(); - if (failOnInvalidatedSession) { - builder.setFailIfSessionNotFound(); - } - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(builder.build()) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - try (TransactionManager manager = client.transactionManager()) { - int attempts = 0; - TransactionContext transaction = manager.begin(); - while (true) { - attempts++; - try { - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - while (rs.next()) {} - } - if (attempts == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - try (ResultSet rs = transaction.executeQuery(SELECT1AND2)) { - if (assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()) == null) { - break; - } - } - manager.commit(); - assertThat(attempts).isGreaterThan(1); - break; - } catch (AbortedException e) { - transaction = assertThrowsSessionNotFoundIfShouldFail(() -> manager.resetForRetry()); - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerReadInvalidatedDuringTransaction() throws InterruptedException { - SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder(); - if (failOnInvalidatedSession) { - builder.setFailIfSessionNotFound(); - } - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(builder.build()) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - try (TransactionManager manager = client.transactionManager()) { - int attempts = 0; - TransactionContext transaction = manager.begin(); - while (true) { - attempts++; - try { - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - if (attempts == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - try (ResultSet rs = - transaction.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { - if (assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()) == null) { - break; - } - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerReadUsingIndexInvalidatedDuringTransaction() - throws InterruptedException { - SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder(); - if (failOnInvalidatedSession) { - builder.setFailIfSessionNotFound(); - } - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(builder.build()) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - try (TransactionManager manager = client.transactionManager()) { - int attempts = 0; - TransactionContext transaction = manager.begin(); - while (true) { - attempts++; - try { - try (ResultSet rs = - transaction.readUsingIndex( - "FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - while (rs.next()) {} - } - if (attempts == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - try (ResultSet rs = - transaction.readUsingIndex( - "FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { - if (assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()) == null) { - break; - } - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerReadRowInvalidatedDuringTransaction() throws InterruptedException { - SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder(); - if (failOnInvalidatedSession) { - builder.setFailIfSessionNotFound(); - } - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(builder.build()) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - try (TransactionManager manager = client.transactionManager()) { - int attempts = 0; - TransactionContext transaction = manager.begin(); - while (true) { - attempts++; - try { - Struct row = transaction.readRow("FOO", Key.of(), Collections.singletonList("BAR")); - assertThat(row.getLong(0)).isEqualTo(1L); - if (attempts == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - TransactionContext context = transaction; - if (assertThrowsSessionNotFoundIfShouldFail( - () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))) - == null) { - break; - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - } - } - - @SuppressWarnings("resource") - @Test - public void transactionManagerReadRowUsingIndexInvalidatedDuringTransaction() - throws InterruptedException { - SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder(); - if (failOnInvalidatedSession) { - builder.setFailIfSessionNotFound(); - } - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setSessionPoolOption(builder.build()) - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - try (TransactionManager manager = client.transactionManager()) { - int attempts = 0; - TransactionContext transaction = manager.begin(); - while (true) { - attempts++; - try { - Struct row = - transaction.readRowUsingIndex( - "FOO", "IDX", Key.of(), Collections.singletonList("BAR")); - assertThat(row.getLong(0)).isEqualTo(1L); - if (attempts == 1) { - invalidateSessionPool( - client, spanner.getOptions().getSessionPoolOptions().getMinSessions()); - } - TransactionContext context = transaction; - if (assertThrowsSessionNotFoundIfShouldFail( - () -> - context.readRowUsingIndex( - "FOO", "IDX", Key.of(), Collections.singletonList("BAR"))) - == null) { - break; - } - manager.commit(); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetry(); - } - } - } - } - } - - @Test - public void partitionedDml() throws InterruptedException { - assumeFalse( - "Multiplexed session do not throw a SessionNotFound errors. ", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps()); - assertThrowsSessionNotFoundIfShouldFail( - () -> client.executePartitionedUpdate(UPDATE_STATEMENT)); - } - - @Test - public void write() throws InterruptedException { - assertThrowsSessionNotFoundIfShouldFail( - () -> client.write(Collections.singletonList(Mutation.delete("FOO", KeySet.all())))); - } - - @Test - public void writeAtLeastOnce() throws InterruptedException { - assertThrowsSessionNotFoundIfShouldFail( - () -> - client.writeAtLeastOnce( - Collections.singletonList(Mutation.delete("FOO", KeySet.all())))); - } - - @Test - public void asyncRunnerSelect() throws InterruptedException { - asyncRunner_withReadFunction(input -> input.executeQueryAsync(SELECT1AND2)); - } - - @Test - public void asyncRunnerRead() throws InterruptedException { - asyncRunner_withReadFunction( - input -> input.readAsync("FOO", KeySet.all(), Collections.singletonList("BAR"))); - } - - @Test - public void asyncRunnerReadUsingIndex() throws InterruptedException { - asyncRunner_withReadFunction( - input -> - input.readUsingIndexAsync( - "FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))); - } - - private void asyncRunner_withReadFunction( - final Function readFunction) throws InterruptedException { - final ExecutorService queryExecutor = Executors.newSingleThreadExecutor(); - try { - AsyncRunner runner = client.runAsync(); - final AtomicLong counter = new AtomicLong(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - get( - runner.runAsync( - txn -> { - AsyncResultSet rs = readFunction.apply(txn); - ApiFuture fut = - rs.setCallback( - queryExecutor, - resultSet -> { - while (true) { - switch (resultSet.tryNext()) { - case OK: - counter.incrementAndGet(); - break; - case DONE: - return CallbackResponse.DONE; - case NOT_READY: - return CallbackResponse.CONTINUE; - } - } - }); - return ApiFutures.transform( - fut, input -> counter.get(), MoreExecutors.directExecutor()); - }, - executor))); - } finally { - queryExecutor.shutdown(); - } - } - - @Test - public void asyncRunnerReadRow() throws InterruptedException { - AsyncRunner runner = client.runAsync(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - get( - runner.runAsync( - txn -> txn.readRowAsync("FOO", Key.of(), Collections.singletonList("BAR")), - executor))); - } - - @Test - public void asyncRunnerReadRowUsingIndex() throws InterruptedException { - AsyncRunner runner = client.runAsync(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - get( - runner.runAsync( - txn -> - txn.readRowUsingIndexAsync( - "FOO", "IDX", Key.of(), Collections.singletonList("BAR")), - executor))); - } - - @Test - public void asyncRunnerUpdate() throws InterruptedException { - AsyncRunner runner = client.runAsync(); - assertThrowsSessionNotFoundIfShouldFail( - () -> get(runner.runAsync(txn -> txn.executeUpdateAsync(UPDATE_STATEMENT), executor))); - } - - @Test - public void asyncRunnerBatchUpdate() throws InterruptedException { - AsyncRunner runner = client.runAsync(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - get( - runner.runAsync( - txn -> txn.batchUpdateAsync(Arrays.asList(UPDATE_STATEMENT, UPDATE_STATEMENT)), - executor))); - } - - @Test - public void asyncRunnerBuffer() throws InterruptedException { - AsyncRunner runner = client.runAsync(); - assertThrowsSessionNotFoundIfShouldFail( - () -> - get( - runner.runAsync( - txn -> { - txn.buffer(Mutation.newInsertBuilder("FOO").set("BAR").to(1L).build()); - return ApiFutures.immediateFuture(null); - }, - executor))); - } - - @Test - public void asyncTransactionManagerAsyncSelect() throws InterruptedException { - asyncTransactionManager_readAsync(input -> input.executeQueryAsync(SELECT1AND2)); - } - - @Test - public void asyncTransactionManagerAsyncRead() throws InterruptedException { - asyncTransactionManager_readAsync( - input -> input.readAsync("FOO", KeySet.all(), Collections.singletonList("BAR"))); - } - - @Test - public void asyncTransactionManagerAsyncReadUsingIndex() throws InterruptedException { - asyncTransactionManager_readAsync( - input -> - input.readUsingIndexAsync( - "FOO", "idx", KeySet.all(), Collections.singletonList("BAR"))); - } - - private void asyncTransactionManager_readAsync( - final Function fn) throws InterruptedException { - final ExecutorService queryExecutor = Executors.newSingleThreadExecutor(); - try (AsyncTransactionManager manager = client.transactionManagerAsync()) { - TransactionContextFuture context = manager.beginAsync(); - while (true) { - try { - final AtomicLong counter = new AtomicLong(); - AsyncTransactionStep count = - context.then( - (transaction, ignored) -> { - AsyncResultSet rs = fn.apply(transaction); - ApiFuture fut = - rs.setCallback( - queryExecutor, - resultSet -> { - while (true) { - switch (resultSet.tryNext()) { - case OK: - counter.incrementAndGet(); - break; - case DONE: - return CallbackResponse.DONE; - case NOT_READY: - return CallbackResponse.CONTINUE; - } - } - }); - return ApiFutures.transform( - fut, input -> counter.get(), MoreExecutors.directExecutor()); - }, - executor); - CommitTimestampFuture ts = count.commitAsync(); - assertThrowsSessionNotFoundIfShouldFail(() -> get(ts)); - break; - } catch (AbortedException e) { - context = manager.resetForRetryAsync(); - } - } - } finally { - queryExecutor.shutdown(); - } - } - - @Test - public void asyncTransactionManagerSelect() throws InterruptedException { - asyncTransactionManager_readSync(input -> input.executeQuery(SELECT1AND2)); - } - - @Test - public void asyncTransactionManagerRead() throws InterruptedException { - asyncTransactionManager_readSync( - input -> input.read("FOO", KeySet.all(), Collections.singletonList("BAR"))); - } - - @Test - public void asyncTransactionManagerReadUsingIndex() throws InterruptedException { - asyncTransactionManager_readSync( - input -> - input.readUsingIndex("FOO", "idx", KeySet.all(), Collections.singletonList("BAR"))); - } - - private void asyncTransactionManager_readSync(final Function fn) - throws InterruptedException { - final ExecutorService queryExecutor = Executors.newSingleThreadExecutor(); - try (AsyncTransactionManager manager = client.transactionManagerAsync()) { - TransactionContextFuture context = manager.beginAsync(); - while (true) { - try { - AsyncTransactionStep count = - context.then( - (transaction, ignored) -> { - long counter = 0L; - try (ResultSet rs = fn.apply(transaction)) { - while (rs.next()) { - counter++; - } - } - return ApiFutures.immediateFuture(counter); - }, - executor); - CommitTimestampFuture ts = count.commitAsync(); - assertThrowsSessionNotFoundIfShouldFail(() -> get(ts)); - break; - } catch (AbortedException e) { - context = manager.resetForRetryAsync(); - } - } - } finally { - queryExecutor.shutdown(); - } - } - - @Test - public void asyncTransactionManagerReadRow() throws InterruptedException { - asyncTransactionManager_readRowFunction( - input -> - ApiFutures.immediateFuture( - input.readRow("FOO", Key.of("foo"), Collections.singletonList("BAR")))); - } - - @Test - public void asyncTransactionManagerReadRowUsingIndex() throws InterruptedException { - asyncTransactionManager_readRowFunction( - input -> - ApiFutures.immediateFuture( - input.readRowUsingIndex( - "FOO", "idx", Key.of("foo"), Collections.singletonList("BAR")))); - } - - @Test - public void asyncTransactionManagerReadRowAsync() throws InterruptedException { - asyncTransactionManager_readRowFunction( - input -> input.readRowAsync("FOO", Key.of("foo"), Collections.singletonList("BAR"))); - } - - @Test - public void asyncTransactionManagerReadRowUsingIndexAsync() throws InterruptedException { - asyncTransactionManager_readRowFunction( - input -> - input.readRowUsingIndexAsync( - "FOO", "idx", Key.of("foo"), Collections.singletonList("BAR"))); - } - - private void asyncTransactionManager_readRowFunction( - final Function> fn) throws InterruptedException { - final ExecutorService queryExecutor = Executors.newSingleThreadExecutor(); - try (AsyncTransactionManager manager = client.transactionManagerAsync()) { - TransactionContextFuture context = manager.beginAsync(); - while (true) { - try { - AsyncTransactionStep row = - context.then((transaction, ignored) -> fn.apply(transaction), executor); - CommitTimestampFuture ts = row.commitAsync(); - assertThrowsSessionNotFoundIfShouldFail(() -> get(ts)); - break; - } catch (AbortedException e) { - context = manager.resetForRetryAsync(); - } - } - } finally { - queryExecutor.shutdown(); - } - } - - @Test - public void asyncTransactionManagerUpdateAsync() throws InterruptedException { - asyncTransactionManager_updateFunction( - input -> input.executeUpdateAsync(UPDATE_STATEMENT), UPDATE_COUNT); - } - - @Test - public void asyncTransactionManagerUpdate() throws InterruptedException { - asyncTransactionManager_updateFunction( - input -> ApiFutures.immediateFuture(input.executeUpdate(UPDATE_STATEMENT)), UPDATE_COUNT); - } - - @Test - public void asyncTransactionManagerBatchUpdateAsync() throws InterruptedException { - asyncTransactionManager_updateFunction( - input -> input.batchUpdateAsync(Arrays.asList(UPDATE_STATEMENT, UPDATE_STATEMENT)), - new long[] {UPDATE_COUNT, UPDATE_COUNT}); - } - - @Test - public void asyncTransactionManagerBatchUpdate() throws InterruptedException { - asyncTransactionManager_updateFunction( - input -> - ApiFutures.immediateFuture( - input.batchUpdate(Arrays.asList(UPDATE_STATEMENT, UPDATE_STATEMENT))), - new long[] {UPDATE_COUNT, UPDATE_COUNT}); - } - - private void asyncTransactionManager_updateFunction( - final Function> fn, T expected) throws InterruptedException { - try (AsyncTransactionManager manager = client.transactionManagerAsync()) { - TransactionContextFuture transaction = manager.beginAsync(); - while (true) { - try { - AsyncTransactionStep res = - transaction.then((txn, input) -> fn.apply(txn), executor); - CommitTimestampFuture ts = res.commitAsync(); - assertThrowsSessionNotFoundIfShouldFail(() -> get(ts)); - break; - } catch (AbortedException e) { - transaction = manager.resetForRetryAsync(); - } - } - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryableInternalErrorTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryableInternalErrorTest.java new file mode 100644 index 00000000000..2e9d4185cb9 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryableInternalErrorTest.java @@ -0,0 +1,95 @@ +/* + * 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.spanner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; +import com.google.cloud.spanner.connection.AbstractMockServerTest; +import com.google.spanner.v1.CreateSessionRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Status; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.threeten.bp.Duration; + +@RunWith(JUnit4.class) +public class RetryableInternalErrorTest extends AbstractMockServerTest { + @Test + public void testTranslateInternalException() { + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofException( + Status.INTERNAL + .withDescription("Authentication backend internal server error. Please retry.") + .asRuntimeException())); + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.INTERNAL + .withDescription("Authentication backend internal server error. Please retry.") + .asRuntimeException())); + + try (Spanner spanner = + SpannerOptions.newBuilder() + .setProjectId("my-project") + .setHost(String.format("http://localhost:%d", getPort())) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setMinSessions(1) + .setMaxSessions(1) + .setWaitForMinSessions(Duration.ofSeconds(5)) + .build()) + .build() + .getService()) { + + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + // Execute a query. This will block until a BatchCreateSessions call has finished and then + // invoke ExecuteStreamingSql. Both of these RPCs should be retried. + try (ResultSet resultSet = client.singleUse().executeQuery(SELECT1_STATEMENT)) { + assertTrue(resultSet.next()); + assertFalse(resultSet.next()); + } + // Verify that both the CreateSession call and the ExecuteStreamingSql call were + // retried. + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + // Clear the requests before the next test. + mockSpanner.clearRequests(); + + // Execute a DML statement. This uses the ExecuteSql RPC. + assertEquals(0, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + mockSpanner.setExecuteSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.INTERNAL + .withDescription("Authentication backend internal server error. Please retry.") + .asRuntimeException())); + assertEquals( + Long.valueOf(1L), + client + .readWriteTransaction() + .run(transaction -> transaction.executeUpdate(INSERT_STATEMENT))); + // Verify that also this request was retried. + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SelectRandomBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SelectRandomBenchmark.java index e18cddd3bf5..e1f93d334dc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SelectRandomBenchmark.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SelectRandomBenchmark.java @@ -16,8 +16,6 @@ package com.google.cloud.spanner; -import static com.google.common.truth.Truth.assertThat; - import com.google.api.gax.rpc.TransportChannelProvider; import com.google.cloud.NoCredentials; import com.google.common.util.concurrent.Futures; @@ -99,8 +97,7 @@ public void setup() throws Exception { (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); // Wait until the session pool has initialized. - while (client.pool.getNumberOfSessionsInPool() - < spanner.getOptions().getSessionPoolOptions().getMinSessions()) { + while (client.multiplexedSessionDatabaseClient.getCurrentSessionReference() == null) { Thread.sleep(1L); } } @@ -119,8 +116,6 @@ public void burstRead(final BenchmarkState server) throws Exception { int parallelThreads = server.maxSessions * 2; final DatabaseClient client = server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); ListeningScheduledExecutorService service = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java index bcba430c521..07a76970bfd 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java @@ -153,8 +153,16 @@ public void createAndCloseSession() { assertThat(session.getName()).isEqualTo(sessionName); session.close(); + + final ArgumentCaptor> deleteOptionsCaptor = + ArgumentCaptor.forClass(Map.class); + final ArgumentCaptor sessionNameCaptor = ArgumentCaptor.forClass(String.class); + Mockito.verify(rpc).deleteSession(sessionNameCaptor.capture(), deleteOptionsCaptor.capture()); + assertEquals(sessionName, sessionNameCaptor.getValue()); // The same channelHint is passed for deleteSession (contained in "options"). - Mockito.verify(rpc).deleteSession(sessionName, options.getValue()); + assertEquals( + deleteOptionsCaptor.getValue().get(SpannerRpc.Option.CHANNEL_HINT), + options.getValue().get(SpannerRpc.Option.CHANNEL_HINT)); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java index 2a850514d0d..53ab2c333d6 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java @@ -21,6 +21,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyMap; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -33,6 +35,7 @@ import com.google.cloud.Timestamp; import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory; +import com.google.cloud.spanner.XGoogSpannerRequestId.NoopRequestIdCreator; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import com.google.protobuf.ByteString; @@ -44,10 +47,12 @@ import com.google.spanner.v1.CommitResponse; import com.google.spanner.v1.Mutation.Write; import com.google.spanner.v1.PartialResultSet; +import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.RollbackRequest; import com.google.spanner.v1.Session; import com.google.spanner.v1.Transaction; +import com.google.spanner.v1.TransactionOptions; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Scope; @@ -90,6 +95,8 @@ public static void setupOpenTelemetry() { public void setUp() { MockitoAnnotations.initMocks(this); when(spannerOptions.getNumChannels()).thenReturn(4); + when(spannerOptions.getDefaultTransactionOptions()) + .thenReturn(TransactionOptions.getDefaultInstance()); when(spannerOptions.getPrefetchChunks()).thenReturn(1); when(spannerOptions.getDatabaseRole()).thenReturn("role"); when(spannerOptions.getRetrySettings()).thenReturn(RetrySettings.newBuilder().build()); @@ -140,6 +147,7 @@ public void setUp() { SpannerStubSettings.newBuilder().executeStreamingSqlSettings().getRetryableCodes()); when(rpc.getCommitRetrySettings()) .thenReturn(SpannerStubSettings.newBuilder().commitSettings().getRetrySettings()); + when(rpc.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); session = spanner.getSessionClient(db).createSession(); Span oTspan = mock(Span.class); ISpan span = new OpenTelemetrySpan(oTspan); @@ -160,6 +168,42 @@ private void doNestedRwTransaction() { }); } + @Test + public void testBeginTransactionWithClientContext() { + RequestOptions.ClientContext clientContext = + RequestOptions.ClientContext.newBuilder() + .putSecureContext( + "key", com.google.protobuf.Value.newBuilder().setStringValue("value").build()) + .build(); + Mockito.when( + rpc.beginTransactionAsync( + Mockito.any(BeginTransactionRequest.class), anyMap(), eq(true))) + .thenReturn( + ApiFutures.immediateFuture( + Transaction.newBuilder().setId(ByteString.copyFromUtf8("tx")).build())); + + ((SessionImpl) session) + .beginTransactionAsync( + Options.fromTransactionOptions( + Options.priority(Options.RpcPriority.HIGH), + Options.tag("tag"), + Options.clientContext(clientContext)), + true, + Collections.emptyMap(), + null, + null); + + ArgumentCaptor requestCaptor = + ArgumentCaptor.forClass(BeginTransactionRequest.class); + Mockito.verify(rpc).beginTransactionAsync(requestCaptor.capture(), anyMap(), eq(true)); + BeginTransactionRequest request = requestCaptor.getValue(); + RequestOptions requestOptions = request.getRequestOptions(); + assertEquals(RequestOptions.Priority.PRIORITY_HIGH, requestOptions.getPriority()); + // TransactionTag should NOT be set because session is not multiplexed. + assertEquals("", requestOptions.getTransactionTag()); + assertEquals(clientContext, requestOptions.getClientContext()); + } + @Test public void nestedReadWriteTxnThrows() { SpannerException e = assertThrows(SpannerException.class, () -> doNestedRwTransaction()); @@ -216,10 +260,14 @@ public void nestedTxnSucceedsWhenAllowed() { @Test public void writeAtLeastOnce() throws ParseException { String timestampString = "2015-10-01T10:54:20.021Z"; + com.google.protobuf.Timestamp t = Timestamps.parse(timestampString); + Transaction txnMetadata = Transaction.newBuilder().setReadTimestamp(t).build(); + Mockito.when(rpc.beginTransaction(Mockito.any(), Mockito.eq(options), eq(false))) + .thenReturn(txnMetadata); ArgumentCaptor commit = ArgumentCaptor.forClass(CommitRequest.class); CommitResponse response = CommitResponse.newBuilder().setCommitTimestamp(Timestamps.parse(timestampString)).build(); - Mockito.when(rpc.commit(commit.capture(), Mockito.eq(options))).thenReturn(response); + Mockito.when(rpc.commit(commit.capture(), anyMap())).thenReturn(response); Timestamp timestamp = session.writeAtLeastOnce( @@ -251,7 +299,7 @@ public void writeAtLeastOnceWithOptions() throws ParseException { ArgumentCaptor commit = ArgumentCaptor.forClass(CommitRequest.class); CommitResponse response = CommitResponse.newBuilder().setCommitTimestamp(Timestamps.parse(timestampString)).build(); - Mockito.when(rpc.commit(commit.capture(), Mockito.eq(options))).thenReturn(response); + Mockito.when(rpc.commit(commit.capture(), anyMap())).thenReturn(response); session.writeAtLeastOnceWithOptions( Collections.singletonList(Mutation.newInsertBuilder("T").set("C").to("x").build()), Options.tag(tag)); @@ -336,7 +384,7 @@ public void newMultiUseReadOnlyTransactionContextClosesOldSingleUseContext() { public void writeClosesOldSingleUseContext() throws ParseException { ReadContext ctx = session.singleUse(TimestampBound.strong()); - Mockito.when(rpc.commit(Mockito.any(), Mockito.eq(options))) + Mockito.when(rpc.commit(Mockito.any(), anyMap())) .thenReturn( CommitResponse.newBuilder() .setCommitTimestamp(Timestamps.parse("2015-10-01T10:54:20.021Z")) @@ -408,8 +456,7 @@ public void singleUseReadOnlyTransactionReturnsEmptyTransactionMetadata() { PartialResultSet resultSet = PartialResultSet.newBuilder() .setMetadata( - newMetadata(Type.struct(Type.StructField.of("C", Type.string()))) - .toBuilder() + newMetadata(Type.struct(Type.StructField.of("C", Type.string()))).toBuilder() .setTransaction(Transaction.getDefaultInstance())) .build(); mockRead(resultSet); @@ -438,7 +485,7 @@ public void request(int numMessages) {} private void mockRead(final PartialResultSet myResultSet) { final ArgumentCaptor consumer = ArgumentCaptor.forClass(SpannerRpc.ResultStreamConsumer.class); - Mockito.when(rpc.read(Mockito.any(), consumer.capture(), Mockito.eq(options), eq(false))) + Mockito.when(rpc.read(Mockito.any(), consumer.capture(), anyMap(), any(), eq(false))) .then( invocation -> { consumer.getValue().onPartialResultSet(myResultSet); @@ -454,8 +501,7 @@ public void multiUseReadOnlyTransactionReturnsEmptyTransactionMetadata() { PartialResultSet.newBuilder() .setMetadata(newMetadata(Type.struct(Type.StructField.of("C", Type.string())))) .build(); - Mockito.when(rpc.beginTransaction(Mockito.any(), Mockito.eq(options), eq(false))) - .thenReturn(txnMetadata); + Mockito.when(rpc.beginTransaction(Mockito.any(), anyMap(), eq(false))).thenReturn(txnMetadata); mockRead(resultSet); ReadOnlyTransaction txn = session.readOnlyTransaction(TimestampBound.strong()); @@ -473,8 +519,7 @@ public void multiUseReadOnlyTransactionReturnsMissingTimestamp() { PartialResultSet.newBuilder() .setMetadata(newMetadata(Type.struct(Type.StructField.of("C", Type.string())))) .build(); - Mockito.when(rpc.beginTransaction(Mockito.any(), Mockito.eq(options), eq(false))) - .thenReturn(txnMetadata); + Mockito.when(rpc.beginTransaction(Mockito.any(), anyMap(), eq(false))).thenReturn(txnMetadata); mockRead(resultSet); ReadOnlyTransaction txn = session.readOnlyTransaction(TimestampBound.strong()); @@ -493,8 +538,7 @@ public void multiUseReadOnlyTransactionReturnsMissingTransactionId() throws Pars PartialResultSet.newBuilder() .setMetadata(newMetadata(Type.struct(Type.StructField.of("C", Type.string())))) .build(); - Mockito.when(rpc.beginTransaction(Mockito.any(), Mockito.eq(options), eq(false))) - .thenReturn(txnMetadata); + Mockito.when(rpc.beginTransaction(Mockito.any(), anyMap(), eq(false))).thenReturn(txnMetadata); mockRead(resultSet); ReadOnlyTransaction txn = session.readOnlyTransaction(TimestampBound.strong()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolBenchmark.java deleted file mode 100644 index 4415ba7d707..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolBenchmark.java +++ /dev/null @@ -1,265 +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.spanner; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.api.gax.rpc.TransportChannelProvider; -import com.google.cloud.NoCredentials; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningScheduledExecutorService; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.spanner.v1.BatchCreateSessionsRequest; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import org.openjdk.jmh.annotations.AuxCounters; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.TearDown; -import org.openjdk.jmh.annotations.Warmup; - -/** - * Benchmarks for common session pool scenarios. The simulated execution times are based on - * reasonable estimates and are primarily intended to keep the benchmarks comparable with each other - * before and after changes have been made to the pool. The benchmarks are bound to the Maven - * profile `benchmark` and can be executed like this: - * mvn clean test -DskipTests -Pbenchmark -Dbenchmark.name=SessionPoolBenchmark - * - */ -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 1, warmups = 0) -@Measurement(batchSize = 1, iterations = 1, timeUnit = TimeUnit.MILLISECONDS) -@Warmup(batchSize = 0, iterations = 0) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -public class SessionPoolBenchmark { - private static final String TEST_PROJECT = "my-project"; - private static final String TEST_INSTANCE = "my-instance"; - private static final String TEST_DATABASE = "my-database"; - private static final int HOLD_SESSION_TIME = 100; - private static final int RND_WAIT_TIME_BETWEEN_REQUESTS = 10; - private static final Random RND = new Random(); - - @State(Scope.Thread) - @AuxCounters(org.openjdk.jmh.annotations.AuxCounters.Type.EVENTS) - public static class BenchmarkState { - private StandardBenchmarkMockServer mockServer; - private Spanner spanner; - private DatabaseClientImpl client; - - @Param({"100"}) - int minSessions; - - @Param({"400"}) - int maxSessions; - - @Param({"1", "10", "20", "25", "30", "40", "50", "100"}) - int incStep; - - @Param({"4"}) - int numChannels; - - @Param({"0.2"}) - float writeFraction; - - /** AuxCounter for number of RPCs. */ - public int numBatchCreateSessionsRpcs() { - return mockServer.countRequests(BatchCreateSessionsRequest.class); - } - - /** AuxCounter for number of sessions created. */ - public int sessionsCreated() { - return mockServer.getMockSpanner().numSessionsCreated(); - } - - @Setup(Level.Invocation) - public void setup() throws Exception { - mockServer = new StandardBenchmarkMockServer(); - TransportChannelProvider channelProvider = mockServer.start(); - - SpannerOptions options = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) - .setNumChannels(numChannels) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(maxSessions) - .setIncStep(incStep) - .setWriteSessionsFraction(writeFraction) - .build()) - .build(); - - spanner = options.getService(); - client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - // Wait until the session pool has initialized. - while (client.pool.getNumberOfSessionsInPool() - < spanner.getOptions().getSessionPoolOptions().getMinSessions()) { - Thread.sleep(1L); - } - } - - @TearDown(Level.Invocation) - public void teardown() throws Exception { - spanner.close(); - mockServer.shutdown(); - } - - int expectedStepsToMax() { - int remainder = (maxSessions - minSessions) % incStep == 0 ? 0 : 1; - return numChannels + ((maxSessions - minSessions) / incStep) + remainder; - } - } - - /** Measures the time needed to execute a burst of read requests. */ - @Benchmark - public void burstRead(final BenchmarkState server) throws Exception { - int totalQueries = server.maxSessions * 8; - int parallelThreads = server.maxSessions * 2; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalQueries); - for (int i = 0; i < totalQueries; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - try (ResultSet rs = - client.singleUse().executeQuery(StandardBenchmarkMockServer.SELECT1)) { - while (rs.next()) { - Thread.sleep(RND.nextInt(HOLD_SESSION_TIME)); - } - return null; - } - })); - } - Futures.allAsList(futures).get(); - service.shutdown(); - } - - /** Measures the time needed to execute a burst of write requests. */ - @Benchmark - public void burstWrite(final BenchmarkState server) throws Exception { - int totalWrites = server.maxSessions * 8; - int parallelThreads = server.maxSessions * 2; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalWrites); - for (int i = 0; i < totalWrites; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - TransactionRunner runner = client.readWriteTransaction(); - return runner.run( - transaction -> - transaction.executeUpdate(StandardBenchmarkMockServer.UPDATE_STATEMENT)); - })); - } - Futures.allAsList(futures).get(); - service.shutdown(); - } - - /** Measures the time needed to execute a burst of read and write requests. */ - @Benchmark - public void burstReadAndWrite(final BenchmarkState server) throws Exception { - int totalWrites = server.maxSessions * 4; - int totalReads = server.maxSessions * 4; - int parallelThreads = server.maxSessions * 2; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalReads + totalWrites); - for (int i = 0; i < totalWrites; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - TransactionRunner runner = client.readWriteTransaction(); - return runner.run( - transaction -> - transaction.executeUpdate(StandardBenchmarkMockServer.UPDATE_STATEMENT)); - })); - } - for (int i = 0; i < totalReads; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - try (ResultSet rs = - client.singleUse().executeQuery(StandardBenchmarkMockServer.SELECT1)) { - while (rs.next()) { - Thread.sleep(RND.nextInt(HOLD_SESSION_TIME)); - } - return null; - } - })); - } - Futures.allAsList(futures).get(); - service.shutdown(); - } - - /** Measures the time needed to acquire MaxSessions session sequentially. */ - @Benchmark - public void steadyIncrease(BenchmarkState server) { - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(server.minSessions); - - // Checkout maxSessions sessions by starting maxSessions read-only transactions sequentially. - List transactions = new ArrayList<>(server.maxSessions); - for (int i = 0; i < server.maxSessions; i++) { - ReadOnlyTransaction tx = client.readOnlyTransaction(); - tx.executeQuery(StandardBenchmarkMockServer.SELECT1); - transactions.add(tx); - } - for (ReadOnlyTransaction tx : transactions) { - tx.close(); - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java deleted file mode 100644 index 4672f03aeff..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright 2019 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.spanner; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; -import static org.junit.Assume.assumeFalse; - -import com.google.api.gax.grpc.testing.LocalChannelProvider; -import com.google.cloud.NoCredentials; -import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; -import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; -import com.google.cloud.spanner.SessionPool.LeakedSessionException; -import com.google.protobuf.ListValue; -import com.google.protobuf.Value; -import com.google.spanner.v1.ResultSetMetadata; -import com.google.spanner.v1.StructType; -import com.google.spanner.v1.StructType.Field; -import com.google.spanner.v1.Type; -import com.google.spanner.v1.TypeCode; -import io.grpc.Server; -import io.grpc.StatusRuntimeException; -import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; -import java.util.concurrent.ScheduledThreadPoolExecutor; -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; -import org.junit.runners.JUnit4; - -@RunWith(JUnit4.class) -public class SessionPoolLeakTest { - private static final StatusRuntimeException FAILED_PRECONDITION = - io.grpc.Status.FAILED_PRECONDITION - .withDescription("Non-retryable test exception.") - .asRuntimeException(); - private static MockSpannerServiceImpl mockSpanner; - private static Server server; - private static LocalChannelProvider channelProvider; - private Spanner spanner; - private DatabaseClient client; - private SessionPool pool; - - @BeforeClass - public static void startStaticServer() throws IOException { - mockSpanner = new MockSpannerServiceImpl(); - mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. - String uniqueName = InProcessServerBuilder.generateName(); - server = - InProcessServerBuilder.forName(uniqueName) - .scheduledExecutorService(new ScheduledThreadPoolExecutor(1)) - .addService(mockSpanner) - .build() - .start(); - channelProvider = LocalChannelProvider.create(uniqueName); - } - - @AfterClass - public static void stopServer() throws InterruptedException { - server.shutdown(); - server.awaitTermination(); - } - - @Before - public void setUp() { - mockSpanner.reset(); - mockSpanner.removeAllExecutionTimes(); - SpannerOptions.Builder builder = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()); - // Make sure the session pool is empty by default, does not contain any sessions, - // contains at most 2 sessions, and creates sessions in steps of 1. - builder.setSessionPoolOption( - SessionPoolOptions.newBuilder().setMinSessions(0).setMaxSessions(2).setIncStep(1).build()); - spanner = builder.build().getService(); - client = spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - pool = ((DatabaseClientImpl) client).pool; - } - - @After - public void tearDown() { - spanner.close(); - } - - @Test - public void testIgnoreLeakedSession() { - for (boolean trackStackTraceofSessionCheckout : new boolean[] {true, false}) { - SessionPoolOptions sessionPoolOptions = - SessionPoolOptions.newBuilder() - .setMinSessions(0) - .setMaxSessions(2) - .setIncStep(1) - .setFailOnSessionLeak() - .setTrackStackTraceOfSessionCheckout(trackStackTraceofSessionCheckout) - .build(); - assumeFalse( - "Session Leaks do not occur with Multiplexed Sessions", - sessionPoolOptions.getUseMultiplexedSession()); - SpannerOptions.Builder builder = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()); - builder.setSessionPoolOption(sessionPoolOptions); - Spanner spanner = builder.build().getService(); - DatabaseClient client = - spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); - mockSpanner.putStatementResult( - StatementResult.query( - Statement.of("SELECT 1"), - com.google.spanner.v1.ResultSet.newBuilder() - .setMetadata( - ResultSetMetadata.newBuilder() - .setRowType( - StructType.newBuilder() - .addFields( - Field.newBuilder() - .setName("c") - .setType( - Type.newBuilder().setCode(TypeCode.INT64).build()) - .build()) - .build()) - .build()) - .addRows( - ListValue.newBuilder() - .addValues(Value.newBuilder().setStringValue("1").build()) - .build()) - .build())); - - // Start a read-only transaction without closing it before closing the Spanner instance. - // This will cause a session leak. - ReadOnlyTransaction transaction = client.readOnlyTransaction(); - try (ResultSet resultSet = transaction.executeQuery(Statement.of("SELECT 1"))) { - //noinspection StatementWithEmptyBody - while (resultSet.next()) { - // ignore - } - } - LeakedSessionException exception = assertThrows(LeakedSessionException.class, spanner::close); - // The top of the stack trace will be "markCheckedOut" if we keep track of the point where the - // session was checked out, while it will be "closeAsync" if we don't. In the latter case, we - // get the stack trace of the method that tries to close the Spanner instance, while in the - // former the stack trace will contain the method that checked out the session. - assertEquals( - trackStackTraceofSessionCheckout ? "markCheckedOut" : "closeAsync", - exception.getStackTrace()[0].getMethodName()); - } - } - - @Test - public void testReadWriteTransactionExceptionOnCreateSession() { - readWriteTransactionTest( - () -> - mockSpanner.setBatchCreateSessionsExecutionTime( - SimulatedExecutionTime.ofException(FAILED_PRECONDITION)), - 0); - } - - @Test - public void testReadWriteTransactionExceptionOnBegin() { - readWriteTransactionTest( - () -> - mockSpanner.setBeginTransactionExecutionTime( - SimulatedExecutionTime.ofException(FAILED_PRECONDITION)), - 1); - } - - private void readWriteTransactionTest( - Runnable setup, int expectedNumberOfSessionsAfterExecution) { - assertEquals(0, pool.getNumberOfSessionsInPool()); - setup.run(); - SpannerException e = - assertThrows( - SpannerException.class, () -> client.readWriteTransaction().run(transaction -> null)); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - assertEquals(expectedNumberOfSessionsAfterExecution, pool.getNumberOfSessionsInPool()); - } - - @Test - public void testTransactionManagerExceptionOnCreateSession() { - transactionManagerTest( - () -> - mockSpanner.setBatchCreateSessionsExecutionTime( - SimulatedExecutionTime.ofException(FAILED_PRECONDITION)), - 0); - } - - @Test - public void testTransactionManagerExceptionOnBegin() { - assertThat(pool.getNumberOfSessionsInPool(), is(equalTo(0))); - mockSpanner.setBeginTransactionExecutionTime( - SimulatedExecutionTime.ofException(FAILED_PRECONDITION)); - try (TransactionManager txManager = client.transactionManager()) { - // This should not cause an error, as the actual BeginTransaction will be included with the - // first statement of the transaction. - txManager.begin(); - } - assertThat(pool.getNumberOfSessionsInPool(), is(equalTo(1))); - } - - private void transactionManagerTest(Runnable setup, int expectedNumberOfSessionsAfterExecution) { - assertEquals(0, pool.getNumberOfSessionsInPool()); - setup.run(); - try (TransactionManager txManager = client.transactionManager()) { - SpannerException e = assertThrows(SpannerException.class, txManager::begin); - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - } - assertEquals(expectedNumberOfSessionsAfterExecution, pool.getNumberOfSessionsInPool()); - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerBenchmark.java deleted file mode 100644 index 0370f5420e2..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerBenchmark.java +++ /dev/null @@ -1,244 +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.spanner; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.api.gax.rpc.TransportChannelProvider; -import com.google.cloud.NoCredentials; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningScheduledExecutorService; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.spanner.v1.BatchCreateSessionsRequest; -import com.google.spanner.v1.BeginTransactionRequest; -import com.google.spanner.v1.DeleteSessionRequest; -import java.time.Duration; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import org.openjdk.jmh.annotations.AuxCounters; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.TearDown; -import org.openjdk.jmh.annotations.Warmup; - -/** - * Benchmarks for the SessionPoolMaintainer. Run these benchmarks from the command line like this: - * - * mvn clean test -DskipTests -Pbenchmark -Dbenchmark.name=SessionPoolMaintainerBenchmark - * - */ -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 1, warmups = 0) -@Measurement(batchSize = 1, iterations = 1, timeUnit = TimeUnit.MILLISECONDS) -@Warmup(batchSize = 0, iterations = 0) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -public class SessionPoolMaintainerBenchmark { - private static final String TEST_PROJECT = "my-project"; - private static final String TEST_INSTANCE = "my-instance"; - private static final String TEST_DATABASE = "my-database"; - private static final int HOLD_SESSION_TIME = 10; - private static final int RND_WAIT_TIME_BETWEEN_REQUESTS = 100; - private static final Random RND = new Random(); - - @State(Scope.Thread) - @AuxCounters(org.openjdk.jmh.annotations.AuxCounters.Type.EVENTS) - public static class MockServer { - private StandardBenchmarkMockServer mockServer; - private Spanner spanner; - private DatabaseClientImpl client; - - /** - * The tests set the session idle timeout to an extremely low value to force timeouts and - * sessions to be evicted from the pool. This is not intended to replicate a realistic scenario, - * only to detect whether certain changes to the client library might cause the number of RPCs - * or the execution time to change drastically. - */ - @Param({"100"}) - long idleTimeout; - - /** AuxCounter for number of create RPCs. */ - public int numBatchCreateSessionsRpcs() { - return mockServer.countRequests(BatchCreateSessionsRequest.class); - } - - /** AuxCounter for number of delete RPCs. */ - public int numDeleteSessionRpcs() { - return mockServer.countRequests(DeleteSessionRequest.class); - } - - /** AuxCounter for number of begin tx RPCs. */ - public int numBeginTransactionRpcs() { - return mockServer.countRequests(BeginTransactionRequest.class); - } - - @Setup(Level.Invocation) - public void setup() throws Exception { - mockServer = new StandardBenchmarkMockServer(); - TransportChannelProvider channelProvider = mockServer.start(); - - SpannerOptions options = - SpannerOptions.newBuilder() - .setProjectId(TEST_PROJECT) - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - // Set idle timeout and loop frequency to very low values. - .setRemoveInactiveSessionAfterDuration(Duration.ofMillis(idleTimeout)) - .setLoopFrequency(idleTimeout / 10) - .build()) - .build(); - - spanner = options.getService(); - client = - (DatabaseClientImpl) - spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - // Wait until the session pool has initialized. - while (client.pool.getNumberOfSessionsInPool() - < spanner.getOptions().getSessionPoolOptions().getMinSessions()) { - Thread.sleep(1L); - } - } - - @TearDown(Level.Invocation) - public void teardown() throws Exception { - spanner.close(); - mockServer.shutdown(); - } - } - - /** Measures the time and RPCs needed to execute read requests. */ - @Benchmark - public void read(final MockServer server) throws Exception { - int min = server.spanner.getOptions().getSessionPoolOptions().getMinSessions(); - int max = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions(); - int totalQueries = max * 4; - int parallelThreads = min; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(min); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalQueries); - for (int i = 0; i < totalQueries; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - try (ResultSet rs = - client.singleUse().executeQuery(StandardBenchmarkMockServer.SELECT1)) { - while (rs.next()) { - Thread.sleep(RND.nextInt(HOLD_SESSION_TIME)); - } - return null; - } - })); - } - Futures.allAsList(futures).get(); - service.shutdown(); - } - - /** Measures the time and RPCs needed to execute write requests. */ - @Benchmark - public void write(final MockServer server) throws Exception { - int min = server.spanner.getOptions().getSessionPoolOptions().getMinSessions(); - int max = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions(); - int totalWrites = max * 4; - int parallelThreads = max; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(min); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalWrites); - for (int i = 0; i < totalWrites; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - TransactionRunner runner = client.readWriteTransaction(); - return runner.run( - transaction -> - transaction.executeUpdate(StandardBenchmarkMockServer.UPDATE_STATEMENT)); - })); - } - Futures.allAsList(futures).get(); - service.shutdown(); - } - - /** Measures the time and RPCs needed to execute read and write requests. */ - @Benchmark - public void readAndWrite(final MockServer server) throws Exception { - int min = server.spanner.getOptions().getSessionPoolOptions().getMinSessions(); - int max = server.spanner.getOptions().getSessionPoolOptions().getMaxSessions(); - int totalWrites = max * 2; - int totalReads = max * 2; - int parallelThreads = max; - final DatabaseClient client = - server.spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); - SessionPool pool = ((DatabaseClientImpl) client).pool; - assertThat(pool.totalSessions()).isEqualTo(min); - - ListeningScheduledExecutorService service = - MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(parallelThreads)); - List> futures = new ArrayList<>(totalReads + totalWrites); - for (int i = 0; i < totalWrites; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - TransactionRunner runner = client.readWriteTransaction(); - return runner.run( - transaction -> - transaction.executeUpdate(StandardBenchmarkMockServer.UPDATE_STATEMENT)); - })); - } - for (int i = 0; i < totalReads; i++) { - futures.add( - service.submit( - () -> { - Thread.sleep(RND.nextInt(RND_WAIT_TIME_BETWEEN_REQUESTS)); - try (ResultSet rs = - client.singleUse().executeQuery(StandardBenchmarkMockServer.SELECT1)) { - while (rs.next()) { - Thread.sleep(RND.nextInt(HOLD_SESSION_TIME)); - } - return null; - } - })); - } - Futures.allAsList(futures).get(); - service.shutdown(); - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerMockServerTest.java deleted file mode 100644 index 99a773eeb0f..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerMockServerTest.java +++ /dev/null @@ -1,181 +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. - */ - -package com.google.cloud.spanner; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; - -import com.google.cloud.NoCredentials; -import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; -import com.google.common.base.Stopwatch; -import com.google.protobuf.ListValue; -import com.google.protobuf.Value; -import com.google.spanner.v1.BatchCreateSessionsRequest; -import com.google.spanner.v1.ExecuteSqlRequest; -import com.google.spanner.v1.ResultSetMetadata; -import com.google.spanner.v1.StructType; -import com.google.spanner.v1.StructType.Field; -import com.google.spanner.v1.Type; -import com.google.spanner.v1.TypeCode; -import java.time.Duration; -import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -@RunWith(JUnit4.class) -public class SessionPoolMaintainerMockServerTest extends AbstractMockServerTest { - private final FakeClock clock = new FakeClock(); - - @BeforeClass - public static void setupResults() { - mockSpanner.putStatementResult( - StatementResult.query( - Statement.of("SELECT 1"), - com.google.spanner.v1.ResultSet.newBuilder() - .setMetadata( - ResultSetMetadata.newBuilder() - .setRowType( - StructType.newBuilder() - .addFields( - Field.newBuilder() - .setName("C") - .setType(Type.newBuilder().setCode(TypeCode.INT64).build()) - .build()) - .build()) - .build()) - .addRows( - ListValue.newBuilder() - .addValues(Value.newBuilder().setStringValue("1").build()) - .build()) - .build())); - } - - @Before - public void createSpannerInstance() { - clock.currentTimeMillis.set(System.currentTimeMillis()); - spanner = - SpannerOptions.newBuilder() - .setProjectId("p") - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setPoolMaintainerClock(clock) - .setWaitForMinSessionsDuration(Duration.ofSeconds(10L)) - .setFailOnSessionLeak() - .build()) - .build() - .getService(); - } - - @Test - public void testMaintain() { - int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); - DatabaseClientImpl client = - (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - assertEquals(minSessions, mockSpanner.getSessions().size()); - assertEquals(0, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - clock.currentTimeMillis.addAndGet(Duration.ofMinutes(35).toMillis()); - client.pool.poolMaintainer.maintainPool(); - assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - client.pool.poolMaintainer.maintainPool(); - assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - clock.currentTimeMillis.addAndGet(Duration.ofMinutes(21).toMillis()); - - // Most sessions are considered idle and are removed. Freeze the mock Spanner server to prevent - // the replenish action to fill the pool again before we check the number of sessions in the - // pool. - mockSpanner.freeze(); - client.pool.poolMaintainer.maintainPool(); - assertEquals(2, client.pool.totalSessions()); - mockSpanner.unfreeze(); - - // The pool should be replenished. - client.pool.poolMaintainer.maintainPool(); - assertEquals(minSessions, client.pool.getTotalSessionsPlusNumSessionsBeingCreated()); - Stopwatch watch = Stopwatch.createStarted(); - //noinspection StatementWithEmptyBody - while (client.pool.totalSessions() < minSessions - && watch.elapsed(TimeUnit.MILLISECONDS) - < spanner.getOptions().getSessionPoolOptions().getWaitForMinSessions().toMillis()) { - // wait for the pool to be replenished. - } - assertEquals(minSessions, client.pool.totalSessions()); - } - - @Test - public void testSessionNotFoundIsRetried() { - assumeFalse( - "Session not found errors are not relevant for multiplexed sessions", - spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - - int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); - DatabaseClientImpl client = - (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - assertEquals(minSessions, mockSpanner.getSessions().size()); - - // Remove all sessions from the backend. - mockSpanner.getSessions().clear(); - - // Sessions have been removed from the backend, but this will still succeed, as Session not - // found errors are retried by the client. - try (ResultSet resultSet = client.singleUse().executeQuery(Statement.of("SELECT 1"))) { - assertTrue(resultSet.next()); - assertEquals(1L, resultSet.getLong(0)); - assertFalse(resultSet.next()); - } - - int numRequests = mockSpanner.countRequestsOfType(ExecuteSqlRequest.class); - assertTrue( - String.format("Number of requests should be larger than 1, but was %d", numRequests), - numRequests > 1); - } - - @Test - public void testMaintainerReplenishesPoolIfAllAreInvalid() { - int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); - DatabaseClientImpl client = - (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); - assertEquals(minSessions, mockSpanner.getSessions().size()); - - // Remove all sessions from the backend. - mockSpanner.getSessions().clear(); - // Advance the clock of the maintainer to mark all sessions are eligible for maintenance. - clock.currentTimeMillis.addAndGet(Duration.ofMinutes(35).toMillis()); - // Run the maintainer. This will ping one session, which again will cause it to be replaced. - client.pool.poolMaintainer.maintainPool(); - assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - - // The session will be replaced using a single BatchCreateSessions call. - Stopwatch watch = Stopwatch.createStarted(); - //noinspection StatementWithEmptyBody - while (client.pool.totalSessions() < minSessions - && watch.elapsed(TimeUnit.MILLISECONDS) - < spanner.getOptions().getSessionPoolOptions().getWaitForMinSessions().toMillis()) { - // wait for the pool to be replenished. - } - assertEquals(minSessions, client.pool.totalSessions()); - assertEquals( - spanner.getOptions().getNumChannels() + 1, - mockSpanner.countRequestsOfType(BatchCreateSessionsRequest.class)); - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java deleted file mode 100644 index db4e79113fc..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java +++ /dev/null @@ -1,399 +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.spanner; - -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.assertTrue; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -import com.google.cloud.spanner.SessionClient.SessionConsumer; -import com.google.cloud.spanner.SessionPool.PooledSession; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; -import com.google.cloud.spanner.SessionPool.Position; -import com.google.cloud.spanner.SessionPool.SessionConsumerImpl; -import com.google.common.base.Preconditions; -import io.opencensus.trace.Tracing; -import io.opentelemetry.api.OpenTelemetry; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; -import org.mockito.Mock; -import org.mockito.Mockito; - -@RunWith(JUnit4.class) -public class SessionPoolMaintainerTest extends BaseSessionPoolTest { - private ExecutorService executor = Executors.newSingleThreadExecutor(); - private @Mock SpannerImpl client; - private @Mock SessionClient sessionClient; - private @Mock SpannerOptions spannerOptions; - private DatabaseId db = DatabaseId.of("projects/p/instances/i/databases/unused"); - private SessionPoolOptions options; - private FakeClock clock = new FakeClock(); - private List idledSessions = new ArrayList<>(); - private Map pingedSessions = new HashMap<>(); - - @Before - public void setUp() { - initMocks(this); - when(client.getOptions()).thenReturn(spannerOptions); - when(client.getSessionClient(db)).thenReturn(sessionClient); - when(sessionClient.getSpanner()).thenReturn(client); - when(spannerOptions.getNumChannels()).thenReturn(4); - when(spannerOptions.getDatabaseRole()).thenReturn("role"); - setupMockSessionCreation(); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxIdleSessions(1) - .setMaxSessions(5) - .setIncStep(1) - .setKeepAliveIntervalMinutes(2) - .setPoolMaintainerClock(clock) - .build(); - when(spannerOptions.getSessionPoolOptions()).thenReturn(options); - idledSessions.clear(); - pingedSessions.clear(); - } - - private void setupMockSessionCreation() { - doAnswer( - invocation -> { - executor.submit( - () -> { - int sessionCount = invocation.getArgument(0, Integer.class); - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - for (int i = 0; i < sessionCount; i++) { - ReadContext mockContext = mock(ReadContext.class); - consumer.onSessionReady( - setupMockSession(buildMockSession(client, mockContext), mockContext)); - } - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions( - Mockito.anyInt(), Mockito.anyBoolean(), any(SessionConsumer.class)); - } - - private SessionImpl setupMockSession(final SessionImpl session, final ReadContext mockContext) { - final ResultSet mockResult = mock(ResultSet.class); - when(mockContext.executeQuery(any(Statement.class))) - .thenAnswer( - invocation -> { - Integer currentValue = pingedSessions.get(session.getName()); - if (currentValue == null) { - currentValue = 0; - } - pingedSessions.put(session.getName(), ++currentValue); - return mockResult; - }); - when(mockResult.next()).thenReturn(true); - return session; - } - - private SessionPool createPool() throws Exception { - return createPool(this.options); - } - - private SessionPool createPool(SessionPoolOptions options) throws Exception { - // Allow sessions to be added to the head of the pool in all cases in this test, as it is - // otherwise impossible to know which session exactly is getting pinged at what point in time. - SessionPool pool = - SessionPool.createPool( - options, - new TestExecutorFactory(), - client.getSessionClient(db), - clock, - Position.FIRST, - new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer(""), false), - OpenTelemetry.noop()); - pool.idleSessionRemovedListener = - input -> { - idledSessions.add(input); - return null; - }; - // Wait until pool has initialized. - while (pool.totalSessions() < options.getMinSessions()) { - Thread.sleep(1L); - } - return pool; - } - - @Test - public void testKeepAlive() throws Exception { - SessionPool pool = createPool(); - assertThat(pingedSessions).isEmpty(); - // Run one maintenance loop. No sessions should get a keep-alive ping. - runMaintenanceLoop(clock, pool, 1); - assertThat(pingedSessions).isEmpty(); - - // Checkout two sessions and do a maintenance loop. Still no sessions should be getting any - // pings. - Session session1 = pool.getSession(); - Session session2 = pool.getSession(); - runMaintenanceLoop(clock, pool, 1); - assertThat(pingedSessions).isEmpty(); - - // Check the sessions back into the pool and do a maintenance loop. - session2.close(); - session1.close(); - runMaintenanceLoop(clock, pool, 1); - assertThat(pingedSessions).isEmpty(); - - // Now advance the time enough for both sessions in the pool to be idled. Then do one - // maintenance loop. This should cause the last session to have been checked back into the pool - // to get a ping, but not the second session. - clock.currentTimeMillis.addAndGet( - TimeUnit.MINUTES.toMillis(options.getKeepAliveIntervalMinutes()) + 1); - runMaintenanceLoop(clock, pool, 1); - assertThat(pingedSessions).containsExactly(session1.getName(), 1); - // Do another maintenance loop. This should cause the other session to also get a ping. - runMaintenanceLoop(clock, pool, 1); - assertThat(pingedSessions).containsExactly(session1.getName(), 1, session2.getName(), 1); - - // Now check out three sessions so the pool will create an additional session. The pool will - // only keep 2 sessions alive, as that is the setting for MinSessions. - Session session3 = pool.getSession(); - Session session4 = pool.getSession(); - Session session5 = pool.getSession(); - // Pinging a session will put it at the back of the pool. A session that needed a ping to be - // kept alive is not one that should be preferred for use. This means that session2 is the last - // session in the pool, and session1 the second-to-last. - assertEquals(session1.getName(), session3.getName()); - assertEquals(session2.getName(), session4.getName()); - session5.close(); - session4.close(); - session3.close(); - // Advance the clock to force pings for the sessions in the pool and do three maintenance loops. - // This should ping the sessions in the following order: - // 1. session3 (=session1) - // 2. session4 (=session2) - // The pinged sessions already contains: {session1: 1, session2: 1} - // Note that the pool only pings up to MinSessions sessions. - clock.currentTimeMillis.addAndGet( - TimeUnit.MINUTES.toMillis(options.getKeepAliveIntervalMinutes()) + 1); - runMaintenanceLoop(clock, pool, 3); - assertThat(pingedSessions).containsExactly(session1.getName(), 2, session2.getName(), 2); - - // Advance the clock to idle all sessions in the pool again and then check out one session. This - // should cause only one session to get a ping. - clock.currentTimeMillis.addAndGet( - TimeUnit.MINUTES.toMillis(options.getKeepAliveIntervalMinutes()) + 1); - // This will be session1, as all sessions were pinged in the previous 3 maintenance loops, and - // this will have brought session1 back to the front of the pool. - Session session6 = pool.getSession(); - // The session that was first in the pool now is equal to the initial first session as each full - // round of pings will swap the order of the first MinSessions sessions in the pool. - assertThat(session6.getName()).isEqualTo(session1.getName()); - runMaintenanceLoop(clock, pool, 3); - // Running 3 cycles will only ping the 2 sessions in the pool once. - assertThat(pool.totalSessions()).isEqualTo(3); - assertThat(pingedSessions).containsExactly(session1.getName(), 2, session2.getName(), 3); - // Update the last use date and release the session to the pool and do another maintenance - // cycle. This should not ping any sessions. - ((PooledSessionFuture) session6).get().markUsed(); - session6.close(); - runMaintenanceLoop(clock, pool, 3); - assertThat(pingedSessions).containsExactly(session1.getName(), 2, session2.getName(), 3); - - // Now check out 3 sessions again and make sure the 'extra' session is checked in last. That - // will make it eligible for pings. - Session session7 = pool.getSession(); - Session session8 = pool.getSession(); - Session session9 = pool.getSession(); - - assertThat(session7.getName()).isEqualTo(session1.getName()); - assertThat(session8.getName()).isEqualTo(session2.getName()); - assertThat(session9.getName()).isEqualTo(session5.getName()); - - session7.close(); - session8.close(); - session9.close(); - - clock.currentTimeMillis.addAndGet( - TimeUnit.MINUTES.toMillis(options.getKeepAliveIntervalMinutes()) + 1); - runMaintenanceLoop(clock, pool, 3); - // session1 will not get a ping this time, as it was checked in first and is now the last - // session in the pool. - assertThat(pingedSessions) - .containsExactly(session1.getName(), 2, session2.getName(), 4, session5.getName(), 1); - } - - @Test - public void testIdleSessions() throws Exception { - SessionPool pool = createPool(); - long loopsToIdleSessions = - Double.valueOf( - Math.ceil( - (double) options.getRemoveInactiveSessionAfter().toMillis() - / pool.poolMaintainer.loopFrequency)) - .longValue() - + 2L; - assertThat(idledSessions).isEmpty(); - // Run one maintenance loop. No sessions should be removed from the pool. - runMaintenanceLoop(clock, pool, 1); - assertThat(idledSessions).isEmpty(); - - // Checkout two sessions and do a maintenance loop. Still no sessions should be removed. - Session session1 = pool.getSession(); - Session session2 = pool.getSession(); - runMaintenanceLoop(clock, pool, 1); - assertThat(idledSessions).isEmpty(); - - // Check the sessions back into the pool and do a maintenance loop. - session2.close(); - session1.close(); - runMaintenanceLoop(clock, pool, 1); - assertThat(idledSessions).isEmpty(); - - // Now advance the time enough for both sessions in the pool to be idled. Both sessions should - // be kept alive by the maintainer and remain in the pool. - runMaintenanceLoop(clock, pool, loopsToIdleSessions); - assertThat(idledSessions).isEmpty(); - - // Now check out three sessions so the pool will create an additional session. The pool will - // only keep 2 sessions alive, as that is the setting for MinSessions. - Session session3 = pool.getSession().get(); - Session session4 = pool.getSession().get(); - Session session5 = pool.getSession().get(); - // Note that pinging sessions does not change the order of the pool. This means that session2 - // is still the last session in the pool. - assertThat(session3.getName()).isEqualTo(session1.getName()); - assertThat(session4.getName()).isEqualTo(session2.getName()); - session5.close(); - session4.close(); - session3.close(); - // Advance the clock to idle sessions. The pool will keep session4 and session3 alive, session5 - // will be idled and removed. - runMaintenanceLoop(clock, pool, loopsToIdleSessions); - assertThat(idledSessions).containsExactly(session5); - assertThat(pool.totalSessions()).isEqualTo(2); - - // Check out three sessions again and keep one session checked out. - Session session6 = pool.getSession().get(); - Session session7 = pool.getSession().get(); - Session session8 = pool.getSession().get(); - session8.close(); - session7.close(); - // Now advance the clock to idle sessions. This should remove session8 from the pool. - runMaintenanceLoop(clock, pool, loopsToIdleSessions); - assertThat(idledSessions).containsExactly(session5, session8); - assertThat(pool.totalSessions()).isEqualTo(2); - ((PooledSession) session6).markUsed(); - session6.close(); - - // Check out three sessions and keep them all checked out. No sessions should be removed from - // the pool. - Session session9 = pool.getSession().get(); - Session session10 = pool.getSession().get(); - Session session11 = pool.getSession().get(); - runMaintenanceLoop(clock, pool, loopsToIdleSessions); - assertThat(idledSessions).containsExactly(session5, session8); - assertThat(pool.totalSessions()).isEqualTo(3); - // Return the sessions to the pool. As they have not been used, they are all into idle time. - // Running the maintainer will now remove all the sessions from the pool and then start the - // replenish method. - session9.close(); - session10.close(); - session11.close(); - runMaintenanceLoop(clock, pool, 1); - assertThat(idledSessions).containsExactly(session5, session8, session9, session10, session11); - // Check that the pool is replenished. - while (pool.totalSessions() < options.getMinSessions()) { - Thread.sleep(1L); - } - assertThat(pool.totalSessions()).isEqualTo(options.getMinSessions()); - } - - @Test - public void testRandomizeThreshold() throws Exception { - SessionPool pool = - createPool( - this.options - .toBuilder() - .setMaxSessions(400) - .setLoopFrequency(1000L) - .setRandomizePositionQPSThreshold(4) - .build()); - List sessions; - - // Run a maintenance loop. No sessions have been checked out so far, so the TPS should be 0. - runMaintenanceLoop(clock, pool, 1); - assertFalse(pool.shouldRandomize()); - - // Get and return one session. This means TPS == 1. - returnSessions(1, useSessions(1, pool)); - runMaintenanceLoop(clock, pool, 1); - assertFalse(pool.shouldRandomize()); - - // Get and return four sessions. This means TPS == 4, and that no sessions are checked out. - returnSessions(4, useSessions(4, pool)); - runMaintenanceLoop(clock, pool, 1); - assertFalse(pool.shouldRandomize()); - - // Get four sessions without returning them. - // This means TPS == 4 and that they are all still checked out. - sessions = useSessions(4, pool); - runMaintenanceLoop(clock, pool, 1); - assertTrue(pool.shouldRandomize()); - // Returning one of the sessions reduces the number of checked out sessions enough to stop the - // randomizing. - returnSessions(1, sessions); - runMaintenanceLoop(clock, pool, 1); - assertFalse(pool.shouldRandomize()); - - // Get three more session and run the maintenance loop. - // The TPS is then 3, as we've only gotten 3 sessions since the last maintenance run. - // That means that we should not randomize. - sessions.addAll(useSessions(3, pool)); - runMaintenanceLoop(clock, pool, 1); - assertFalse(pool.shouldRandomize()); - - returnSessions(sessions.size(), sessions); - } - - private List useSessions(int numSessions, SessionPool pool) { - List sessions = new ArrayList<>(numSessions); - for (int i = 0; i < numSessions; i++) { - sessions.add(pool.getSession()); - sessions.get(sessions.size() - 1).singleUse().executeQuery(Statement.of("SELECT 1")).next(); - } - return sessions; - } - - private void returnSessions(int numSessions, List sessions) { - Preconditions.checkArgument(numSessions <= sessions.size()); - for (int i = 0; i < numSessions; i++) { - sessions.remove(0).close(); - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java index 9e16b3fb1c8..705783d78c0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java @@ -283,6 +283,7 @@ public void testRandomizePositionQPSThreshold() { @Test public void testUseMultiplexedSession() { + assumeFalse(TestHelper.isMultiplexSessionDisabled()); // skip these tests since this configuration can have dual behaviour in different test-runners assumeFalse(SessionPoolOptions.newBuilder().build().getUseMultiplexedSession()); assertEquals(false, SessionPoolOptions.newBuilder().build().getUseMultiplexedSession()); @@ -304,6 +305,9 @@ public void testUseMultiplexedSession() { @Test public void testUseMultiplexedSessionForRW() { // skip these tests since this configuration can have dual behaviour in different test-runners + assumeFalse(TestHelper.isMultiplexSessionDisabled()); + assumeFalse( + Boolean.parseBoolean(System.getenv("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW"))); assumeFalse(SessionPoolOptions.newBuilder().build().getUseMultiplexedSession()); assumeFalse(SessionPoolOptions.newBuilder().build().getUseMultiplexedSessionForRW()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java deleted file mode 100644 index 33771962828..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutures; -import com.google.cloud.spanner.SessionClient.SessionConsumer; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; -import com.google.cloud.spanner.SessionPool.Position; -import com.google.cloud.spanner.SessionPool.SessionConsumerImpl; -import com.google.cloud.spanner.SessionPoolOptions.ActionOnInactiveTransaction; -import com.google.cloud.spanner.SessionPoolOptions.InactiveTransactionRemovalOptions; -import com.google.cloud.spanner.spi.v1.SpannerRpc.Option; -import com.google.common.util.concurrent.Uninterruptibles; -import com.google.protobuf.Empty; -import io.opencensus.trace.Tracing; -import io.opentelemetry.api.OpenTelemetry; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameter; -import org.junit.runners.Parameterized.Parameters; -import org.mockito.Mockito; - -/** - * Stress test for {@code SessionPool} which does multiple operations on the pool, making some of - * them fail and asserts that all the invariants are maintained. - */ -@RunWith(Parameterized.class) -public class SessionPoolStressTest extends BaseSessionPoolTest { - - @Parameter(0) - public boolean shouldBlock; - - DatabaseId db = DatabaseId.of("projects/p/instances/i/databases/unused"); - SessionPool pool; - ExecutorService createExecutor = Executors.newSingleThreadExecutor(); - final Object lock = new Object(); - Random random = new Random(); - FakeClock clock = new FakeClock(); - final Map sessions = new ConcurrentHashMap<>(); - // Exception keeps track of where the session was closed at. - Map closedSessions = new HashMap<>(); - Set expiredSessions = new HashSet<>(); - SpannerImpl mockSpanner; - SpannerOptions spannerOptions; - int maxAliveSessions; - int minSessionsWhenSessionClosed = Integer.MAX_VALUE; - Exception e; - - @Parameters(name = "should block = {0}") - public static Collection data() { - List params = new ArrayList<>(); - params.add(new Object[] {true}); - params.add(new Object[] {false}); - return params; - } - - private void setupSpanner(DatabaseId db) { - ReadContext context = mock(ReadContext.class); - mockSpanner = mock(SpannerImpl.class); - spannerOptions = mock(SpannerOptions.class); - when(spannerOptions.getNumChannels()).thenReturn(4); - when(spannerOptions.getDatabaseRole()).thenReturn("role"); - SessionClient sessionClient = mock(SessionClient.class); - when(sessionClient.getSpanner()).thenReturn(mockSpanner); - when(mockSpanner.getSessionClient(db)).thenReturn(sessionClient); - when(mockSpanner.getOptions()).thenReturn(spannerOptions); - doAnswer( - invocation -> { - createExecutor.submit( - () -> { - int sessionCount = invocation.getArgument(0, Integer.class); - for (int s = 0; s < sessionCount; s++) { - SessionImpl session; - synchronized (lock) { - session = getMockedSession(mockSpanner, context); - setupSession(session, context); - sessions.put(session.getName(), false); - if (sessions.size() > maxAliveSessions) { - maxAliveSessions = sessions.size(); - } - } - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(session); - } - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions( - Mockito.anyInt(), Mockito.anyBoolean(), Mockito.any(SessionConsumer.class)); - } - - SessionImpl getMockedSession(SpannerImpl spanner, ReadContext context) { - Map options = new HashMap<>(); - options.put(Option.CHANNEL_HINT, channelHint.getAndIncrement()); - final SessionImpl session = - new SessionImpl( - spanner, - new SessionReference( - "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, - options)) { - @Override - public ReadContext singleUse(TimestampBound bound) { - // The below stubs are added so that we can mock keep-alive. - return context; - } - - @Override - public ApiFuture asyncClose() { - synchronized (lock) { - if (expiredSessions.contains(this.getName())) { - return ApiFutures.immediateFailedFuture( - SpannerExceptionFactoryTest.newSessionNotFoundException(this.getName())); - } - if (sessions.remove(this.getName()) == null) { - setFailed(closedSessions.get(this.getName())); - } - closedSessions.put(this.getName(), new Exception("Session closed at:")); - if (sessions.size() < minSessionsWhenSessionClosed) { - minSessionsWhenSessionClosed = sessions.size(); - } - } - return ApiFutures.immediateFuture(Empty.getDefaultInstance()); - } - }; - sessionIndex++; - return session; - } - - private void setupSession(final SessionImpl session, final ReadContext mockContext) { - final ResultSet mockResult = mock(ResultSet.class); - when(mockContext.executeQuery(any(Statement.class))) - .thenAnswer( - invocation -> { - resetTransaction(session); - return mockResult; - }); - when(mockResult.next()).thenReturn(true); - } - - private void resetTransaction(SessionImpl session) { - String name = session.getName(); - synchronized (lock) { - sessions.put(name, false); - } - } - - private void setFailed(Exception cause) { - e = new Exception(cause); - } - - private void setFailed() { - e = new Exception(); - } - - private Exception getFailedError() { - synchronized (lock) { - return e; - } - } - - @Test - public void stressTest() throws Exception { - int concurrentThreads = 10; - final int numOperationsPerThread = 1000; - final CountDownLatch releaseThreads = new CountDownLatch(1); - final CountDownLatch threadsDone = new CountDownLatch(concurrentThreads); - setupSpanner(db); - int minSessions = 2; - int maxSessions = concurrentThreads / 2; - SessionPoolOptions.Builder builder = - SessionPoolOptions.newBuilder() - .setPoolMaintainerClock(clock) - .setMinSessions(minSessions) - .setMaxSessions(maxSessions) - .setInactiveTransactionRemovalOptions( - InactiveTransactionRemovalOptions.newBuilder() - .setActionOnInactiveTransaction(ActionOnInactiveTransaction.CLOSE) - .build()); - if (shouldBlock) { - builder.setBlockIfPoolExhausted(); - } else { - builder.setFailIfPoolExhausted(); - } - SessionPoolOptions sessionPoolOptions = builder.build(); - when(spannerOptions.getSessionPoolOptions()).thenReturn(sessionPoolOptions); - pool = - SessionPool.createPool( - sessionPoolOptions, - new TestExecutorFactory(), - mockSpanner.getSessionClient(db), - clock, - Position.RANDOM, - new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer(""), false), - OpenTelemetry.noop()); - pool.idleSessionRemovedListener = - pooled -> { - String name = pooled.getName(); - // We do not take the test lock here, as we already hold the session pool lock. Taking the - // test lock as well here can cause a deadlock. - sessions.remove(name); - return null; - }; - pool.longRunningSessionRemovedListener = - pooled -> { - String name = pooled.getName(); - // We do not take the test lock here, as we already hold the session pool lock. Taking the - // test lock as well here can cause a deadlock. - sessions.remove(name); - return null; - }; - for (int i = 0; i < concurrentThreads; i++) { - new Thread( - () -> { - Uninterruptibles.awaitUninterruptibly(releaseThreads); - for (int j = 0; j < numOperationsPerThread; j++) { - try { - PooledSessionFuture session = pool.getSession(); - session.get(); - Uninterruptibles.sleepUninterruptibly(random.nextInt(2), TimeUnit.MILLISECONDS); - resetTransaction(session.get().delegate); - session.close(); - } catch (SpannerException e) { - if (e.getErrorCode() != ErrorCode.RESOURCE_EXHAUSTED || shouldBlock) { - setFailed(e); - } - } catch (Exception e) { - setFailed(e); - } - } - threadsDone.countDown(); - }) - .start(); - } - // Start maintenance threads in tight loop - final AtomicBoolean stopMaintenance = new AtomicBoolean(false); - new Thread( - () -> { - while (!stopMaintenance.get()) { - runMaintenanceLoop(clock, pool, 1); - // Sleep 1ms between maintenance loops to prevent the long-running session remover - // from stealing all sessions before they can be used. - Uninterruptibles.sleepUninterruptibly(1L, TimeUnit.MILLISECONDS); - } - }) - .start(); - releaseThreads.countDown(); - threadsDone.await(); - synchronized (lock) { - assertThat(pool.totalSessions()).isAtMost(maxSessions); - } - stopMaintenance.set(true); - pool.closeAsync(new SpannerImpl.ClosedException()).get(); - Exception e = getFailedError(); - if (e != null) { - throw e; - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java deleted file mode 100644 index 0389410064a..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java +++ /dev/null @@ -1,2279 +0,0 @@ -/* - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static com.google.cloud.spanner.MetricRegistryConstants.GET_SESSION_TIMEOUTS; -import static com.google.cloud.spanner.MetricRegistryConstants.IS_MULTIPLEXED_KEY; -import static com.google.cloud.spanner.MetricRegistryConstants.MAX_ALLOWED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.MAX_IN_USE_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.METRIC_PREFIX; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_ACQUIRED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_IN_USE_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_READ_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_RELEASED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_AVAILABLE; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_BEING_PREPARED; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_IN_POOL; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_SESSIONS_IN_USE; -import static com.google.cloud.spanner.MetricRegistryConstants.NUM_WRITE_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_DEFAULT_LABEL_VALUES; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS; -import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_TYPE; -import static com.google.cloud.spanner.SpannerOptionsTest.runWithSystemProperty; -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.assertThrows; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.atMost; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -import com.google.api.core.ApiFutures; -import com.google.cloud.Timestamp; -import com.google.cloud.spanner.ErrorHandler.DefaultErrorHandler; -import com.google.cloud.spanner.MetricRegistryTestUtils.FakeMetricRegistry; -import com.google.cloud.spanner.MetricRegistryTestUtils.MetricsRecord; -import com.google.cloud.spanner.MetricRegistryTestUtils.PointWithFunction; -import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; -import com.google.cloud.spanner.SessionClient.SessionConsumer; -import com.google.cloud.spanner.SessionPool.PooledSession; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; -import com.google.cloud.spanner.SessionPool.Position; -import com.google.cloud.spanner.SessionPool.SessionConsumerImpl; -import com.google.cloud.spanner.SpannerImpl.ClosedException; -import com.google.cloud.spanner.TransactionRunner.TransactionCallable; -import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; -import com.google.cloud.spanner.spi.v1.SpannerRpc; -import com.google.cloud.spanner.spi.v1.SpannerRpc.ResultStreamConsumer; -import com.google.cloud.spanner.v1.stub.SpannerStubSettings; -import com.google.common.base.Stopwatch; -import com.google.common.collect.Lists; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.Uninterruptibles; -import com.google.protobuf.ByteString; -import com.google.protobuf.Empty; -import com.google.spanner.v1.CommitRequest; -import com.google.spanner.v1.CommitResponse; -import com.google.spanner.v1.ExecuteBatchDmlRequest; -import com.google.spanner.v1.ExecuteSqlRequest; -import com.google.spanner.v1.ResultSetStats; -import com.google.spanner.v1.RollbackRequest; -import com.google.spanner.v1.Transaction; -import io.opencensus.metrics.LabelValue; -import io.opencensus.metrics.MetricRegistry; -import io.opencensus.metrics.Metrics; -import io.opencensus.trace.Tracing; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.common.AttributeKey; -import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.api.trace.Span; -import io.opentelemetry.context.Scope; -import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.metrics.SdkMeterProvider; -import io.opentelemetry.sdk.metrics.data.LongPointData; -import io.opentelemetry.sdk.metrics.data.MetricData; -import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.time.Duration; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicLong; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameter; -import org.junit.runners.Parameterized.Parameters; -import org.mockito.Mock; -import org.mockito.Mockito; - -/** Tests for SessionPool that mock out the underlying stub. */ -@RunWith(Parameterized.class) -public class SessionPoolTest extends BaseSessionPoolTest { - private static Level originalLogLevel; - - private final ExecutorService executor = Executors.newSingleThreadExecutor(); - @Parameter public int minSessions; - - @Mock SpannerImpl client; - @Mock SessionClient sessionClient; - @Mock SpannerOptions spannerOptions; - DatabaseId db = DatabaseId.of("projects/p/instances/i/databases/unused"); - SessionPool pool; - SessionPoolOptions options; - private String sessionName = String.format("%s/sessions/s", db.getName()); - private String TEST_DATABASE_ROLE = "my-role"; - - private final TraceWrapper tracer = - new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer(""), false); - - @Parameters(name = "min sessions = {0}") - public static Collection data() { - return Arrays.asList(new Object[][] {{0}, {1}}); - } - - private SessionPool createPool() { - return SessionPool.createPool( - options, - new TestExecutorFactory(), - client.getSessionClient(db), - tracer, - OpenTelemetry.noop()); - } - - private SessionPool createPool(Clock clock) { - return SessionPool.createPool( - options, - new TestExecutorFactory(), - client.getSessionClient(db), - clock, - Position.RANDOM, - tracer, - OpenTelemetry.noop()); - } - - private SessionPool createPool( - Clock clock, MetricRegistry metricRegistry, List labelValues) { - return SessionPool.createPool( - options, - TEST_DATABASE_ROLE, - new TestExecutorFactory(), - client.getSessionClient(db), - clock, - Position.RANDOM, - metricRegistry, - tracer, - labelValues, - OpenTelemetry.noop(), - null, - new AtomicLong(), - new AtomicLong()); - } - - private SessionPool createPool( - Clock clock, - MetricRegistry metricRegistry, - List labelValues, - OpenTelemetry openTelemetry, - Attributes attributes) { - return SessionPool.createPool( - options, - TEST_DATABASE_ROLE, - new TestExecutorFactory(), - client.getSessionClient(db), - clock, - Position.RANDOM, - metricRegistry, - tracer, - labelValues, - openTelemetry, - attributes, - new AtomicLong(), - new AtomicLong()); - } - - @BeforeClass - public static void disableLogging() { - Logger logger = Logger.getLogger(""); - originalLogLevel = logger.getLevel(); - logger.setLevel(Level.OFF); - } - - @AfterClass - public static void resetLogging() { - Logger logger = Logger.getLogger(""); - logger.setLevel(originalLogLevel); - } - - @Before - public void setUp() { - initMocks(this); - SpannerOptions.resetActiveTracingFramework(); - SpannerOptions.enableOpenTelemetryTraces(); - when(client.getOptions()).thenReturn(spannerOptions); - when(client.getSessionClient(db)).thenReturn(sessionClient); - when(sessionClient.getSpanner()).thenReturn(client); - when(spannerOptions.getNumChannels()).thenReturn(4); - when(spannerOptions.getDatabaseRole()).thenReturn("role"); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(2) - .setIncStep(1) - .setBlockIfPoolExhausted() - .build(); - } - - private void setupMockSessionCreation() { - doAnswer( - invocation -> { - executor.submit( - () -> { - int sessionCount = invocation.getArgument(0, Integer.class); - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - for (int i = 0; i < sessionCount; i++) { - consumer.onSessionReady(mockSession()); - } - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions( - Mockito.anyInt(), Mockito.anyBoolean(), any(SessionConsumer.class)); - doAnswer( - invocation -> - executor.submit( - () -> { - SessionConsumer consumer = invocation.getArgument(0, SessionConsumer.class); - consumer.onSessionReady(mockMultiplexedSession()); - })) - .when(sessionClient) - .asyncCreateMultiplexedSession(any(SessionConsumer.class)); - } - - @Test - public void testClosedPoolIncludesClosedException() { - pool = createPool(); - assertTrue(pool.isValid()); - closePoolWithStacktrace(); - IllegalStateException e = assertThrows(IllegalStateException.class, () -> pool.getSession()); - assertThat(e.getCause()).isInstanceOf(ClosedException.class); - StringWriter sw = new StringWriter(); - e.getCause().printStackTrace(new PrintWriter(sw)); - assertThat(sw.toString()).contains("closePoolWithStacktrace"); - } - - private void closePoolWithStacktrace() { - pool.closeAsync(new SpannerImpl.ClosedException()); - } - - @Test - public void sessionCreation() { - setupMockSessionCreation(); - pool = createPool(); - try (Session session = pool.getSession()) { - assertThat(session).isNotNull(); - } - } - - @Test - public void poolLifo() { - setupMockSessionCreation(); - options = - options - .toBuilder() - .setMinSessions(2) - .setWaitForMinSessionsDuration(Duration.ofSeconds(10L)) - .build(); - pool = createPool(); - pool.maybeWaitOnMinSessions(); - Session session1 = pool.getSession().get(); - Session session2 = pool.getSession().get(); - assertThat(session1).isNotEqualTo(session2); - - session2.close(); - session1.close(); - - // Check the session out and back in once more to finalize their positions. - session1 = pool.getSession().get(); - session2 = pool.getSession().get(); - session2.close(); - session1.close(); - - Session session3 = pool.getSession().get(); - Session session4 = pool.getSession().get(); - assertThat(session3).isEqualTo(session1); - assertThat(session4).isEqualTo(session2); - session3.close(); - session4.close(); - } - - @Test - public void poolFifo() throws Exception { - setupMockSessionCreation(); - runWithSystemProperty( - "com.google.cloud.spanner.session_pool_release_to_position", - "LAST", - () -> { - options = - options - .toBuilder() - .setMinSessions(2) - .setWaitForMinSessionsDuration(Duration.ofSeconds(10L)) - .build(); - pool = createPool(); - pool.maybeWaitOnMinSessions(); - Session session1 = pool.getSession().get(); - Session session2 = pool.getSession().get(); - assertNotEquals(session1, session2); - - session2.close(); - session1.close(); - - // Check the session out and back in once more to finalize their positions. - session1 = pool.getSession().get(); - session2 = pool.getSession().get(); - session2.close(); - session1.close(); - - // Verify that we get the sessions in FIFO order, so in this order: - // 1. session2 - // 2. session1 - Session session3 = pool.getSession().get(); - Session session4 = pool.getSession().get(); - assertEquals(session2, session3); - assertEquals(session1, session4); - session3.close(); - session4.close(); - - return null; - }); - } - - @Test - public void poolAllPositions() throws Exception { - int maxAttempts = 100; - setupMockSessionCreation(); - for (Position position : Position.values()) { - runWithSystemProperty( - "com.google.cloud.spanner.session_pool_release_to_position", - position.name(), - () -> { - int attempt = 0; - while (attempt < maxAttempts) { - int numSessions = 5; - options = - options - .toBuilder() - .setMinSessions(numSessions) - .setMaxSessions(numSessions) - .setWaitForMinSessionsDuration(Duration.ofSeconds(10L)) - .build(); - pool = createPool(); - pool.maybeWaitOnMinSessions(); - // First check out and release the sessions twice to the pool, so we know that we have - // finalized the position of them. - for (int n = 0; n < 2; n++) { - checkoutAndReleaseAllSessions(); - } - - // Now verify that if we get all sessions twice, they will be in random order. - List> allSessions = new ArrayList<>(2); - for (int n = 0; n < 2; n++) { - allSessions.add(checkoutAndReleaseAllSessions()); - } - List firstTime = - allSessions.get(0).stream() - .map(PooledSessionFuture::get) - .collect(Collectors.toList()); - List secondTime = - allSessions.get(1).stream() - .map(PooledSessionFuture::get) - .collect(Collectors.toList()); - switch (position) { - case FIRST: - // LIFO: - // First check out all sessions, so we have 1, 2, 3, 4, ..., N - // Then release them all back into the pool in the same order (1, 2, 3, 4, ..., N) - // That will give us the list N, ..., 4, 3, 2, 1 because each session is added at - // the front of the pool. - assertEquals(firstTime, Lists.reverse(secondTime)); - break; - case LAST: - // FIFO: - // First check out all sessions, so we have 1, 2, 3, 4, ..., N - // Then release them all back into the pool in the same order (1, 2, 3, 4, ..., N) - // That will give us the list 1, 2, 3, 4, ..., N because each session is added at - // the end of the pool. - assertEquals(firstTime, secondTime); - break; - case RANDOM: - // Random means that we should not get the same order twice (unless the randomizer - // got lucky, and then we retry). - if (attempt < (maxAttempts - 1)) { - if (Objects.equals(firstTime, secondTime)) { - attempt++; - continue; - } - } - assertNotEquals(firstTime, secondTime); - } - break; - } - return null; - }); - } - } - - private List checkoutAndReleaseAllSessions() { - List sessions = new ArrayList<>(pool.totalSessions()); - for (int i = 0; i < pool.totalSessions(); i++) { - sessions.add(pool.getSession()); - } - for (Session session : sessions) { - session.close(); - } - return sessions; - } - - @Test - public void poolClosure() throws Exception { - setupMockSessionCreation(); - pool = createPool(); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void poolClosureClosesLeakedSessions() throws Exception { - SessionImpl mockSession1 = mockSession(); - SessionImpl mockSession2 = mockSession(); - final LinkedList sessions = - new LinkedList<>(Arrays.asList(mockSession1, mockSession2)); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(sessions.pop()); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - pool = createPool(); - Session session1 = pool.getSession(); - // Leaked sessions - PooledSessionFuture leakedSession = pool.getSession(); - // Clear the leaked exception to suppress logging of expected exceptions. - leakedSession.clearLeakedException(); - session1.close(); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - verify(mockSession1).asyncClose(); - verify(mockSession2).asyncClose(); - } - - @Test - public void poolClosesWhenMaintenanceLoopIsRunning() throws Exception { - setupMockSessionCreation(); - final FakeClock clock = new FakeClock(); - pool = createPool(clock); - final AtomicBoolean stop = new AtomicBoolean(false); - new Thread( - () -> { - // Run in a tight loop. - while (!stop.get()) { - runMaintenanceLoop(clock, pool, 1); - } - }) - .start(); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - stop.set(true); - } - - @Test - public void poolClosureFailsPendingReadWaiters() throws Exception { - final CountDownLatch insideCreation = new CountDownLatch(1); - final CountDownLatch releaseCreation = new CountDownLatch(1); - final SessionImpl session1 = mockSession(); - final SessionImpl session2 = mockSession(); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(session1); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - insideCreation.countDown(); - releaseCreation.await(); - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(session2); - return null; - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - pool = createPool(); - PooledSessionFuture leakedSession = pool.getSession(); - // Suppress expected leakedSession warning. - leakedSession.clearLeakedException(); - AtomicBoolean failed = new AtomicBoolean(false); - CountDownLatch latch = new CountDownLatch(1); - getSessionAsync(latch, failed); - insideCreation.await(); - pool.closeAsync(new SpannerImpl.ClosedException()); - releaseCreation.countDown(); - latch.await(5L, TimeUnit.SECONDS); - assertThat(failed.get()).isTrue(); - } - - @Test - public void poolClosureFailsPendingWriteWaiters() throws Exception { - final CountDownLatch insideCreation = new CountDownLatch(1); - final CountDownLatch releaseCreation = new CountDownLatch(1); - final SessionImpl session1 = mockSession(); - final SessionImpl session2 = mockSession(); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(session1); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - insideCreation.countDown(); - releaseCreation.await(); - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(session2); - return null; - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - pool = createPool(); - PooledSessionFuture leakedSession = pool.getSession(); - // Suppress expected leakedSession warning. - leakedSession.clearLeakedException(); - AtomicBoolean failed = new AtomicBoolean(false); - CountDownLatch latch = new CountDownLatch(1); - getSessionAsync(latch, failed); - insideCreation.await(); - pool.closeAsync(new SpannerImpl.ClosedException()); - releaseCreation.countDown(); - latch.await(); - assertThat(failed.get()).isTrue(); - } - - @Test - public void poolClosesEvenIfCreationFails() throws Exception { - final CountDownLatch insideCreation = new CountDownLatch(1); - final CountDownLatch releaseCreation = new CountDownLatch(1); - doAnswer( - invocation -> { - executor.submit( - () -> { - insideCreation.countDown(); - releaseCreation.await(); - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionCreateFailure( - SpannerExceptionFactory.newSpannerException(new RuntimeException()), 1); - return null; - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - pool = createPool(); - AtomicBoolean failed = new AtomicBoolean(false); - CountDownLatch latch = new CountDownLatch(1); - getSessionAsync(latch, failed); - insideCreation.await(); - ListenableFuture f = pool.closeAsync(new SpannerImpl.ClosedException()); - releaseCreation.countDown(); - f.get(); - assertThat(f.isDone()).isTrue(); - } - - @Test - public void poolClosureFailsNewRequests() { - final SessionImpl session = mockSession(); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(session); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - pool = createPool(); - PooledSessionFuture leakedSession = pool.getSession(); - leakedSession.get(); - // Suppress expected leakedSession warning. - leakedSession.clearLeakedException(); - pool.closeAsync(new SpannerImpl.ClosedException()); - IllegalStateException e = assertThrows(IllegalStateException.class, () -> pool.getSession()); - assertNotNull(e.getMessage()); - } - - @Test - public void atMostMaxSessionsCreated() { - setupMockSessionCreation(); - AtomicBoolean failed = new AtomicBoolean(false); - pool = createPool(); - int numSessions = 10; - final CountDownLatch latch = new CountDownLatch(numSessions); - for (int i = 0; i < numSessions; i++) { - getSessionAsync(latch, failed); - } - Uninterruptibles.awaitUninterruptibly(latch); - verify(sessionClient, atMost(options.getMaxSessions())) - .asyncBatchCreateSessions(eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - assertThat(failed.get()).isFalse(); - } - - @Test - public void creationExceptionPropagatesToReadSession() { - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionCreateFailure( - SpannerExceptionFactory.newSpannerException(ErrorCode.INTERNAL, ""), 1); - return null; - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - pool = createPool(); - SpannerException e = assertThrows(SpannerException.class, () -> pool.getSession().get()); - assertEquals(ErrorCode.INTERNAL, e.getErrorCode()); - } - - @Test - public void failOnPoolExhaustion() { - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(1) - .setFailIfPoolExhausted() - .build(); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(mockSession()); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - pool = createPool(); - Session session1 = pool.getSession(); - SpannerException e = assertThrows(SpannerException.class, () -> pool.getSession()); - assertEquals(ErrorCode.RESOURCE_EXHAUSTED, e.getErrorCode()); - session1.close(); - session1 = pool.getSession(); - assertThat(session1).isNotNull(); - session1.close(); - } - - @Test - public void idleSessionCleanup() throws Exception { - ReadContext context = mock(ReadContext.class); - - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setMaxIdleSessions(0) - .setPoolMaintainerClock(clock) - .build(); - SpannerImpl spanner = mock(SpannerImpl.class); - SpannerOptions spannerOptions = mock(SpannerOptions.class); - when(spanner.getOptions()).thenReturn(spannerOptions); - when(spannerOptions.getSessionPoolOptions()).thenReturn(options); - SessionImpl session1 = buildMockSession(spanner, context); - SessionImpl session2 = buildMockSession(spanner, context); - SessionImpl session3 = buildMockSession(spanner, context); - final LinkedList sessions = - new LinkedList<>(Arrays.asList(session1, session2, session3)); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(sessions.pop()); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - mockKeepAlive(context); - - pool = createPool(clock); - // Make sure pool has been initialized - pool.getSession().close(); - runMaintenanceLoop(clock, pool, pool.poolMaintainer.numClosureCycles); - assertThat(pool.numIdleSessionsRemoved()).isEqualTo(0L); - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - PooledSessionFuture readSession3 = pool.getSession(); - // Wait until the sessions have actually been gotten in order to make sure they are in use in - // parallel. - readSession1.get(); - readSession2.get(); - readSession3.get(); - readSession1.close(); - readSession2.close(); - readSession3.close(); - // Now there are 3 sessions in the pool but since none of them has timed out, they will all be - // kept in the pool. - runMaintenanceLoop(clock, pool, pool.poolMaintainer.numClosureCycles); - assertThat(pool.numIdleSessionsRemoved()).isEqualTo(0L); - // Counters have now been reset - // Use all 3 sessions sequentially - pool.getSession().close(); - pool.getSession().close(); - pool.getSession().close(); - // Advance the time by running the maintainer. This should cause - // one session to be kept alive and two sessions to be removed. - long cycles = - options.getRemoveInactiveSessionAfter().toMillis() / pool.poolMaintainer.loopFrequency; - runMaintenanceLoop(clock, pool, cycles); - // We will still close 2 sessions since at any point in time only 1 session was in use. - assertThat(pool.numIdleSessionsRemoved()).isEqualTo(2L); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void longRunningTransactionsCleanup_whenActionSetToClose_verifyInactiveSessionsClosed() - throws Exception { - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setMaxIdleSessions(0) - .setPoolMaintainerClock(clock) - .setCloseIfInactiveTransactions() // set option to close inactive transactions - .build(); - setupForLongRunningTransactionsCleanup(options); - - pool = createPool(clock); - // Make sure pool has been initialized - pool.getSession().close(); - - // All 3 sessions used. 100% of pool utilised. - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - PooledSessionFuture readSession3 = pool.getSession(); - - // complete the async tasks - readSession1.get().setEligibleForLongRunning(false); - readSession2.get().setEligibleForLongRunning(false); - readSession3.get().setEligibleForLongRunning(true); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - - // ensure that the sessions are in use for > 60 minutes - pool.poolMaintainer.lastExecutionTime = Instant.now(); - when(clock.instant()).thenReturn(Instant.now().plus(61, ChronoUnit.MINUTES)); - - pool.poolMaintainer.maintainPool(); - - // the two session that were un-expectedly long-running were removed from the pool. - // verify that only 1 session that is unexpected to be long-running remains in the pool. - assertEquals(1, pool.totalSessions()); - assertEquals(2, pool.numLeakedSessionsRemoved()); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void longRunningTransactionsCleanup_whenActionSetToWarn_verifyInactiveSessionsOpen() - throws Exception { - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setPoolMaintainerClock(clock) - .setWarnIfInactiveTransactions() // set option to warn (via logs) inactive transactions - .build(); - setupForLongRunningTransactionsCleanup(options); - - pool = createPool(clock); - // Make sure pool has been initialized - pool.getSession().close(); - - // All 3 sessions used. 100% of pool utilised. - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - PooledSessionFuture readSession3 = pool.getSession(); - - // complete the async tasks - readSession1.get().setEligibleForLongRunning(false); - readSession2.get().setEligibleForLongRunning(false); - readSession3.get().setEligibleForLongRunning(true); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - - // ensure that the sessions are in use for > 60 minutes - pool.poolMaintainer.lastExecutionTime = Instant.now(); - when(clock.instant()).thenReturn(Instant.now().plus(61, ChronoUnit.MINUTES)); - - pool.poolMaintainer.maintainPool(); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - assertEquals(0, pool.numLeakedSessionsRemoved()); - - readSession1.close(); - readSession2.close(); - readSession3.close(); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void - longRunningTransactionsCleanup_whenUtilisationBelowThreshold_verifyInactiveSessionsOpen() - throws Exception { - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setMaxIdleSessions(0) - .setPoolMaintainerClock(clock) - .setCloseIfInactiveTransactions() // set option to close inactive transactions - .build(); - setupForLongRunningTransactionsCleanup(options); - - pool = createPool(clock); - pool.getSession().close(); - - // 2/3 sessions are used. Hence utilisation < 95% - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - - // complete the async tasks and mark sessions as checked out - readSession1.get().setEligibleForLongRunning(false); - readSession2.get().setEligibleForLongRunning(false); - - assertEquals(2, pool.totalSessions()); - assertEquals(2, pool.checkedOutSessions.size()); - - // ensure that the sessions are in use for > 60 minutes - pool.poolMaintainer.lastExecutionTime = Instant.now(); - when(clock.instant()).thenReturn(Instant.now().plus(61, ChronoUnit.MINUTES)); - - pool.poolMaintainer.maintainPool(); - - assertEquals(2, pool.totalSessions()); - assertEquals(2, pool.checkedOutSessions.size()); - assertEquals(0, pool.numLeakedSessionsRemoved()); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void - longRunningTransactionsCleanup_whenAllAreExpectedlyLongRunning_verifyInactiveSessionsOpen() - throws Exception { - SessionImpl session1 = mockSession(); - SessionImpl session2 = mockSession(); - SessionImpl session3 = mockSession(); - - final LinkedList sessions = - new LinkedList<>(Arrays.asList(session1, session2, session3)); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(sessions.pop()); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - for (SessionImpl session : sessions) { - mockKeepAlive(session); - } - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setMaxIdleSessions(0) - .setCloseIfInactiveTransactions() // set option to close inactive transactions - .build(); - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); - - pool = createPool(clock); - // Make sure pool has been initialized - pool.getSession().close(); - - // All 3 sessions used. 100% of pool utilised. - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - PooledSessionFuture readSession3 = pool.getSession(); - - // complete the async tasks - readSession1.get().setEligibleForLongRunning(true); - readSession2.get().setEligibleForLongRunning(true); - readSession3.get().setEligibleForLongRunning(true); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - - // ensure that the sessions are in use for > 60 minutes - pool.poolMaintainer.lastExecutionTime = Instant.now(); - when(clock.instant()).thenReturn(Instant.now().plus(61, ChronoUnit.MINUTES)); - - pool.poolMaintainer.maintainPool(); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - assertEquals(0, pool.numLeakedSessionsRemoved()); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void longRunningTransactionsCleanup_whenBelowDurationThreshold_verifyInactiveSessionsOpen() - throws Exception { - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setMaxIdleSessions(0) - .setPoolMaintainerClock(clock) - .setCloseIfInactiveTransactions() // set option to close inactive transactions - .build(); - setupForLongRunningTransactionsCleanup(options); - - pool = createPool(clock); - // Make sure pool has been initialized - pool.getSession().close(); - - // All 3 sessions used. 100% of pool utilised. - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - PooledSessionFuture readSession3 = pool.getSession(); - - // complete the async tasks - readSession1.get().setEligibleForLongRunning(false); - readSession2.get().setEligibleForLongRunning(false); - readSession3.get().setEligibleForLongRunning(true); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - - // ensure that the sessions are in use for < 60 minutes - pool.poolMaintainer.lastExecutionTime = Instant.now(); - when(clock.instant()).thenReturn(Instant.now().plus(50, ChronoUnit.MINUTES)); - - pool.poolMaintainer.maintainPool(); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - assertEquals(0, pool.numLeakedSessionsRemoved()); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void longRunningTransactionsCleanup_whenException_doNothing() throws Exception { - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setMaxIdleSessions(0) - .setPoolMaintainerClock(clock) - .setCloseIfInactiveTransactions() // set option to close inactive transactions - .build(); - setupForLongRunningTransactionsCleanup(options); - - pool = createPool(clock); - // Make sure pool has been initialized - pool.getSession().close(); - - // All 3 sessions used. 100% of pool utilised. - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - PooledSessionFuture readSession3 = pool.getSession(); - - // complete the async tasks - readSession1.get().setEligibleForLongRunning(false); - readSession2.get().setEligibleForLongRunning(false); - readSession3.get().setEligibleForLongRunning(true); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - - when(clock.instant()).thenReturn(Instant.now().plus(50, ChronoUnit.MINUTES)); - - pool.poolMaintainer.lastExecutionTime = null; // setting null to throw exception - pool.poolMaintainer.maintainPool(); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - assertEquals(0, pool.numLeakedSessionsRemoved()); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void - longRunningTransactionsCleanup_whenTaskRecurrenceBelowThreshold_verifyInactiveSessionsOpen() - throws Exception { - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - .setIncStep(1) - .setMaxIdleSessions(0) - .setPoolMaintainerClock(clock) - .setCloseIfInactiveTransactions() // set option to close inactive transactions - .build(); - setupForLongRunningTransactionsCleanup(options); - - pool = createPool(clock); - // Make sure pool has been initialized - pool.getSession().close(); - - // All 3 sessions used. 100% of pool utilised. - PooledSessionFuture readSession1 = pool.getSession(); - PooledSessionFuture readSession2 = pool.getSession(); - PooledSessionFuture readSession3 = pool.getSession(); - - // complete the async tasks - readSession1.get(); - readSession2.get(); - readSession3.get(); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - - pool.poolMaintainer.lastExecutionTime = Instant.now(); - when(clock.instant()).thenReturn(Instant.now().plus(10, ChronoUnit.SECONDS)); - - pool.poolMaintainer.maintainPool(); - - assertEquals(3, pool.totalSessions()); - assertEquals(3, pool.checkedOutSessions.size()); - assertEquals(0, pool.numLeakedSessionsRemoved()); - - readSession1.close(); - readSession2.close(); - readSession3.close(); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - private void setupForLongRunningTransactionsCleanup(SessionPoolOptions sessionPoolOptions) { - ReadContext context = mock(ReadContext.class); - SpannerImpl spanner = mock(SpannerImpl.class); - SpannerOptions options = mock(SpannerOptions.class); - when(spanner.getOptions()).thenReturn(options); - when(options.getSessionPoolOptions()).thenReturn(sessionPoolOptions); - SessionImpl session1 = buildMockSession(spanner, context); - SessionImpl session2 = buildMockSession(spanner, context); - SessionImpl session3 = buildMockSession(spanner, context); - - final LinkedList sessions = - new LinkedList<>(Arrays.asList(session1, session2, session3)); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(sessions.pop()); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - mockKeepAlive(context); - } - - @Test - public void keepAlive() throws Exception { - ReadContext context = mock(ReadContext.class); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(2) - .setMaxSessions(3) - .setPoolMaintainerClock(clock) - .build(); - SpannerImpl spanner = mock(SpannerImpl.class); - SpannerOptions spannerOptions = mock(SpannerOptions.class); - when(spanner.getOptions()).thenReturn(spannerOptions); - when(spannerOptions.getSessionPoolOptions()).thenReturn(options); - final SessionImpl mockSession1 = buildMockSession(spanner, context); - final SessionImpl mockSession2 = buildMockSession(spanner, context); - final SessionImpl mockSession3 = buildMockSession(spanner, context); - final LinkedList sessions = - new LinkedList<>(Arrays.asList(mockSession1, mockSession2, mockSession3)); - - mockKeepAlive(context); - // This is cheating as we are returning the same session each but it makes the verification - // easier. - doAnswer( - invocation -> { - executor.submit( - () -> { - int sessionCount = invocation.getArgument(0, Integer.class); - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - for (int i = 0; i < sessionCount; i++) { - consumer.onSessionReady(sessions.pop()); - } - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(anyInt(), Mockito.anyBoolean(), any(SessionConsumer.class)); - pool = createPool(clock); - PooledSessionFuture session1 = pool.getSession(); - PooledSessionFuture session2 = pool.getSession(); - session1.get(); - session2.get(); - session1.close(); - session2.close(); - runMaintenanceLoop(clock, pool, pool.poolMaintainer.numKeepAliveCycles); - verify(context, never()).executeQuery(any(Statement.class)); - runMaintenanceLoop(clock, pool, pool.poolMaintainer.numKeepAliveCycles); - verify(context, times(2)).executeQuery(Statement.newBuilder("SELECT 1").build()); - clock.currentTimeMillis.addAndGet( - clock.currentTimeMillis.get() + (options.getKeepAliveIntervalMinutes() + 5L) * 60L * 1000L); - session1 = pool.getSession(); - session1.writeAtLeastOnceWithOptions(new ArrayList<>()); - session1.close(); - runMaintenanceLoop(clock, pool, pool.poolMaintainer.numKeepAliveCycles); - // The session pool only keeps MinSessions + MaxIdleSessions alive. - verify(context, times(options.getMinSessions() + options.getMaxIdleSessions())) - .executeQuery(Statement.newBuilder("SELECT 1").build()); - pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); - } - - @Test - public void blockAndTimeoutOnPoolExhaustion() throws Exception { - // Create a session pool with max 1 session and a low timeout for waiting for a session. - options = - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(1) - .setInitialWaitForSessionTimeoutMillis(20L) - .setAcquireSessionTimeout(null) - .build(); - setupMockSessionCreation(); - pool = createPool(); - // Take the only session that can be in the pool. - PooledSessionFuture checkedOutSession = pool.getSession(); - checkedOutSession.get(); - ExecutorService executor = Executors.newFixedThreadPool(1); - final CountDownLatch latch = new CountDownLatch(1); - // Then try asynchronously to take another session. This attempt should time out. - Future fut = - executor.submit( - () -> { - latch.countDown(); - PooledSessionFuture session = pool.getSession(); - session.close(); - return null; - }); - // Wait until the background thread is actually waiting for a session. - latch.await(); - // Wait until the request has timed out. - int waitCount = 0; - while (pool.getNumWaiterTimeouts() == 0L && waitCount < 5000) { - Thread.sleep(1L); - waitCount++; - } - // Return the checked out session to the pool so the async request will get a session and - // finish. - checkedOutSession.close(); - // Verify that the async request also succeeds. - fut.get(10L, TimeUnit.SECONDS); - executor.shutdown(); - - // Verify that the session was returned to the pool and that we can get it again. - Session session = pool.getSession(); - assertThat(session).isNotNull(); - session.close(); - assertThat(pool.getNumWaiterTimeouts()).isAtLeast(1L); - } - - @Test - public void blockAndTimeoutOnPoolExhaustion_withAcquireSessionTimeout() throws Exception { - // Create a session pool with max 1 session and a low timeout for waiting for a session. - options = - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(1) - .setInitialWaitForSessionTimeoutMillis(20L) - .setAcquireSessionTimeout(null) - .build(); - setupMockSessionCreation(); - pool = createPool(); - // Take the only session that can be in the pool. - PooledSessionFuture checkedOutSession = pool.getSession(); - checkedOutSession.get(); - ExecutorService executor = Executors.newFixedThreadPool(1); - final CountDownLatch latch = new CountDownLatch(1); - // Then try asynchronously to take another session. This attempt should time out. - Future fut = - executor.submit( - () -> { - PooledSessionFuture session = pool.getSession(); - latch.countDown(); - session.get(); - session.close(); - return null; - }); - // Wait until the background thread is actually waiting for a session. - latch.await(); - // Wait until the request has timed out. - Stopwatch watch = Stopwatch.createStarted(); - while (pool.getNumWaiterTimeouts() == 0L && watch.elapsed(TimeUnit.MILLISECONDS) < 1000) { - Thread.yield(); - } - // Return the checked out session to the pool so the async request will get a session and - // finish. - checkedOutSession.close(); - // Verify that the async request also succeeds. - fut.get(10L, TimeUnit.SECONDS); - executor.shutdown(); - assertTrue(executor.awaitTermination(10L, TimeUnit.SECONDS)); - - // Verify that the session was returned to the pool and that we can get it again. - PooledSessionFuture session = pool.getSession(); - assertThat(session.get()).isNotNull(); - session.close(); - assertThat(pool.getNumWaiterTimeouts()).isAtLeast(1L); - } - - @Test - public void testSessionNotFoundSingleUse() { - Statement statement = Statement.of("SELECT 1"); - final SessionImpl closedSession = mockSession(); - ReadContext closedContext = mock(ReadContext.class); - ResultSet closedResultSet = mock(ResultSet.class); - when(closedResultSet.next()) - .thenThrow(SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName)); - when(closedContext.executeQuery(statement)).thenReturn(closedResultSet); - when(closedSession.singleUse()).thenReturn(closedContext); - - final SessionImpl openSession = mockSession(); - ReadContext openContext = mock(ReadContext.class); - ResultSet openResultSet = mock(ResultSet.class); - when(openResultSet.next()).thenReturn(true, false); - when(openContext.executeQuery(statement)).thenReturn(openResultSet); - when(openSession.singleUse()).thenReturn(openContext); - - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(closedSession); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(openSession); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - pool = createPool(clock); - ReadContext context = pool.getSession().singleUse(); - ResultSet resultSet = context.executeQuery(statement); - assertThat(resultSet.next()).isTrue(); - } - - @Test - public void testSessionNotFoundReadOnlyTransaction() { - Statement statement = Statement.of("SELECT 1"); - final SessionImpl closedSession = mockSession(); - when(closedSession.readOnlyTransaction()) - .thenThrow(SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName)); - - final SessionImpl openSession = mockSession(); - ReadOnlyTransaction openTransaction = mock(ReadOnlyTransaction.class); - ResultSet openResultSet = mock(ResultSet.class); - when(openResultSet.next()).thenReturn(true, false); - when(openTransaction.executeQuery(statement)).thenReturn(openResultSet); - when(openSession.readOnlyTransaction()).thenReturn(openTransaction); - - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(closedSession); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(openSession); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - pool = createPool(clock); - ReadOnlyTransaction transaction = pool.getSession().readOnlyTransaction(); - ResultSet resultSet = transaction.executeQuery(statement); - assertThat(resultSet.next()).isTrue(); - } - - private enum ReadWriteTransactionTestStatementType { - QUERY, - ANALYZE, - UPDATE, - BATCH_UPDATE, - WRITE, - EXCEPTION - } - - @SuppressWarnings("unchecked") - @Test - public void testSessionNotFoundReadWriteTransaction() { - final Statement queryStatement = Statement.of("SELECT 1"); - final Statement updateStatement = Statement.of("UPDATE FOO SET BAR=1 WHERE ID=2"); - final SpannerException sessionNotFound = - SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName); - for (ReadWriteTransactionTestStatementType statementType : - ReadWriteTransactionTestStatementType.values()) { - final ReadWriteTransactionTestStatementType executeStatementType = statementType; - SpannerRpc.StreamingCall closedStreamingCall = mock(SpannerRpc.StreamingCall.class); - doThrow(sessionNotFound).when(closedStreamingCall).request(Mockito.anyInt()); - SpannerRpc rpc = mock(SpannerRpc.class); - when(rpc.asyncDeleteSession(Mockito.anyString(), Mockito.anyMap())) - .thenReturn(ApiFutures.immediateFuture(Empty.getDefaultInstance())); - when(rpc.executeQuery( - any(ExecuteSqlRequest.class), - any(ResultStreamConsumer.class), - any(Map.class), - eq(true))) - .thenReturn(closedStreamingCall); - when(rpc.executeQuery(any(ExecuteSqlRequest.class), any(Map.class), eq(true))) - .thenThrow(sessionNotFound); - when(rpc.executeBatchDml(any(ExecuteBatchDmlRequest.class), any(Map.class))) - .thenThrow(sessionNotFound); - when(rpc.commitAsync(any(CommitRequest.class), any(Map.class))) - .thenReturn(ApiFutures.immediateFailedFuture(sessionNotFound)); - when(rpc.rollbackAsync(any(RollbackRequest.class), any(Map.class))) - .thenReturn(ApiFutures.immediateFailedFuture(sessionNotFound)); - when(rpc.getReadRetrySettings()) - .thenReturn(SpannerStubSettings.newBuilder().streamingReadSettings().getRetrySettings()); - when(rpc.getReadRetryableCodes()) - .thenReturn(SpannerStubSettings.newBuilder().streamingReadSettings().getRetryableCodes()); - when(rpc.getExecuteQueryRetrySettings()) - .thenReturn( - SpannerStubSettings.newBuilder().executeStreamingSqlSettings().getRetrySettings()); - when(rpc.getExecuteQueryRetryableCodes()) - .thenReturn( - SpannerStubSettings.newBuilder().executeStreamingSqlSettings().getRetryableCodes()); - final SessionImpl closedSession = mock(SessionImpl.class); - when(closedSession.getName()) - .thenReturn("projects/dummy/instances/dummy/database/dummy/sessions/session-closed"); - when(closedSession.getErrorHandler()).thenReturn(DefaultErrorHandler.INSTANCE); - - Span oTspan = mock(Span.class); - ISpan span = new OpenTelemetrySpan(oTspan); - when(oTspan.makeCurrent()).thenReturn(mock(Scope.class)); - - final TransactionContextImpl closedTransactionContext = - TransactionContextImpl.newBuilder() - .setSession(closedSession) - .setOptions(Options.fromTransactionOptions()) - .setRpc(rpc) - .setTracer(tracer) - .setSpan(span) - .build(); - when(closedSession.asyncClose()) - .thenReturn(ApiFutures.immediateFuture(Empty.getDefaultInstance())); - when(closedSession.newTransaction(eq(Options.fromTransactionOptions()), any())) - .thenReturn(closedTransactionContext); - when(closedSession.beginTransactionAsync(any(), eq(true), any(), any(), any())) - .thenThrow(sessionNotFound); - when(closedSession.getTracer()).thenReturn(tracer); - TransactionRunnerImpl closedTransactionRunner = new TransactionRunnerImpl(closedSession); - closedTransactionRunner.setSpan(span); - when(closedSession.readWriteTransaction()).thenReturn(closedTransactionRunner); - - final SessionImpl openSession = mock(SessionImpl.class); - when(openSession.getErrorHandler()).thenReturn(DefaultErrorHandler.INSTANCE); - when(openSession.asyncClose()) - .thenReturn(ApiFutures.immediateFuture(Empty.getDefaultInstance())); - when(openSession.getName()) - .thenReturn("projects/dummy/instances/dummy/database/dummy/sessions/session-open"); - final TransactionContextImpl openTransactionContext = mock(TransactionContextImpl.class); - when(openSession.newTransaction(eq(Options.fromTransactionOptions()), any())) - .thenReturn(openTransactionContext); - Transaction txn = Transaction.newBuilder().setId(ByteString.copyFromUtf8("open-txn")).build(); - when(openSession.beginTransactionAsync(any(), eq(true), any(), any(), any())) - .thenReturn(ApiFutures.immediateFuture(txn)); - when(openSession.getTracer()).thenReturn(tracer); - TransactionRunnerImpl openTransactionRunner = new TransactionRunnerImpl(openSession); - openTransactionRunner.setSpan(span); - when(openSession.readWriteTransaction()).thenReturn(openTransactionRunner); - - ResultSet openResultSet = mock(ResultSet.class); - when(openResultSet.next()).thenReturn(true, false); - ResultSet planResultSet = mock(ResultSet.class); - when(planResultSet.getStats()).thenReturn(ResultSetStats.getDefaultInstance()); - when(openTransactionContext.executeQuery(queryStatement)).thenReturn(openResultSet); - when(openTransactionContext.analyzeQuery(queryStatement, QueryAnalyzeMode.PLAN)) - .thenReturn(planResultSet); - when(openTransactionContext.executeUpdate(updateStatement)).thenReturn(1L); - when(openTransactionContext.batchUpdate(Arrays.asList(updateStatement, updateStatement))) - .thenReturn(new long[] {1L, 1L}); - SpannerImpl spanner = mock(SpannerImpl.class); - SessionClient sessionClient = mock(SessionClient.class); - when(spanner.getSessionClient(db)).thenReturn(sessionClient); - when(sessionClient.getSpanner()).thenReturn(spanner); - - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(closedSession); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(openSession); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions( - Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - SessionPoolOptions options = - SessionPoolOptions.newBuilder() - .setMinSessions(0) // The pool should not auto-create any sessions - .setMaxSessions(2) - .setIncStep(1) - .setBlockIfPoolExhausted() - .build(); - SpannerOptions spannerOptions = mock(SpannerOptions.class); - when(spannerOptions.getSessionPoolOptions()).thenReturn(options); - when(spannerOptions.getNumChannels()).thenReturn(4); - when(spannerOptions.getDatabaseRole()).thenReturn("role"); - when(spanner.getOptions()).thenReturn(spannerOptions); - SessionPool pool = - SessionPool.createPool( - options, - new TestExecutorFactory(), - spanner.getSessionClient(db), - tracer, - OpenTelemetry.noop()); - try (PooledSessionFuture readWriteSession = pool.getSession()) { - TransactionRunner runner = readWriteSession.readWriteTransaction(); - try { - runner.run( - new TransactionCallable() { - private int callNumber = 0; - - @Override - public Integer run(TransactionContext transaction) { - callNumber++; - if (callNumber == 1) { - assertThat(transaction).isEqualTo(closedTransactionContext); - } else { - assertThat(transaction).isEqualTo(openTransactionContext); - } - switch (executeStatementType) { - case QUERY: - ResultSet resultSet = transaction.executeQuery(queryStatement); - assertThat(resultSet.next()).isTrue(); - break; - case ANALYZE: - ResultSet planResultSet = - transaction.analyzeQuery(queryStatement, QueryAnalyzeMode.PLAN); - assertThat(planResultSet.next()).isFalse(); - assertThat(planResultSet.getStats()).isNotNull(); - break; - case UPDATE: - long updateCount = transaction.executeUpdate(updateStatement); - assertThat(updateCount).isEqualTo(1L); - break; - case BATCH_UPDATE: - long[] updateCounts = - transaction.batchUpdate(Arrays.asList(updateStatement, updateStatement)); - assertThat(updateCounts).isEqualTo(new long[] {1L, 1L}); - break; - case WRITE: - transaction.buffer(Mutation.delete("FOO", Key.of(1L))); - break; - case EXCEPTION: - throw new RuntimeException("rollback at call " + callNumber); - default: - fail("Unknown statement type: " + executeStatementType); - } - return callNumber; - } - }); - } catch (Exception e) { - // The rollback will also cause a SessionNotFoundException, but this is caught, logged - // and further ignored by the library, meaning that the session will not be re-created - // for retry. Hence rollback at call 1. - assertThat(executeStatementType) - .isEqualTo(ReadWriteTransactionTestStatementType.EXCEPTION); - assertThat(e.getMessage()).contains("rollback at call 1"); - } - } - pool.closeAsync(new SpannerImpl.ClosedException()); - } - } - - @Test - public void testSessionNotFoundWrite() { - SpannerException sessionNotFound = - SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName); - List mutations = Collections.singletonList(Mutation.newInsertBuilder("FOO").build()); - final SessionImpl closedSession = mockSession(); - when(closedSession.writeWithOptions(mutations)).thenThrow(sessionNotFound); - - final SessionImpl openSession = mockSession(); - com.google.cloud.spanner.CommitResponse response = - mock(com.google.cloud.spanner.CommitResponse.class); - when(response.getCommitTimestamp()).thenReturn(Timestamp.now()); - when(openSession.writeWithOptions(mutations)).thenReturn(response); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(closedSession); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(openSession); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - pool = createPool(clock); - DatabaseClientImpl impl = new DatabaseClientImpl(pool, tracer); - assertThat(impl.write(mutations)).isNotNull(); - } - - @Test - public void testSessionNotFoundWriteAtLeastOnce() { - SpannerException sessionNotFound = - SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName); - List mutations = Collections.singletonList(Mutation.newInsertBuilder("FOO").build()); - final SessionImpl closedSession = mockSession(); - when(closedSession.writeAtLeastOnceWithOptions(mutations)).thenThrow(sessionNotFound); - - final SessionImpl openSession = mockSession(); - com.google.cloud.spanner.CommitResponse response = - mock(com.google.cloud.spanner.CommitResponse.class); - when(response.getCommitTimestamp()).thenReturn(Timestamp.now()); - when(openSession.writeAtLeastOnceWithOptions(mutations)).thenReturn(response); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(closedSession); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(openSession); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - pool = createPool(clock); - DatabaseClientImpl impl = new DatabaseClientImpl(pool, tracer); - assertThat(impl.writeAtLeastOnce(mutations)).isNotNull(); - } - - @Test - public void testSessionNotFoundPartitionedUpdate() { - SpannerException sessionNotFound = - SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName); - Statement statement = Statement.of("UPDATE FOO SET BAR=1 WHERE 1=1"); - final SessionImpl closedSession = mockSession(); - when(closedSession.executePartitionedUpdate(statement)).thenThrow(sessionNotFound); - - final SessionImpl openSession = mockSession(); - when(openSession.executePartitionedUpdate(statement)).thenReturn(1L); - doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(closedSession); - }); - return null; - }) - .doAnswer( - invocation -> { - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(openSession); - }); - return null; - }) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - pool = createPool(clock); - DatabaseClientImpl impl = new DatabaseClientImpl(pool, mock(TraceWrapper.class)); - assertThat(impl.executePartitionedUpdate(statement)).isEqualTo(1L); - } - - @SuppressWarnings("rawtypes") - @Test - public void testOpenCensusSessionMetrics() throws Exception { - // Create a session pool with max 2 session and a low timeout for waiting for a session. - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(2) - .setInitialWaitForSessionTimeoutMillis(50L) - .setAcquireSessionTimeout(null) - .build(); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - FakeMetricRegistry metricRegistry = new FakeMetricRegistry(); - List labelValues = - Arrays.asList( - LabelValue.create("client1"), - LabelValue.create("database1"), - LabelValue.create("instance1"), - LabelValue.create("1.0.0")); - - setupMockSessionCreation(); - pool = createPool(clock, metricRegistry, labelValues); - PooledSessionFuture session1 = pool.getSession(); - PooledSessionFuture session2 = pool.getSession(); - session1.get(); - session2.get(); - - MetricsRecord record = metricRegistry.pollRecord(); - assertThat(record.getMetrics().size()).isEqualTo(6); - - List maxInUseSessions = - record.getMetrics().get(METRIC_PREFIX + MAX_IN_USE_SESSIONS); - assertThat(maxInUseSessions.size()).isEqualTo(1); - assertThat(maxInUseSessions.get(0).value()).isEqualTo(2L); - assertThat(maxInUseSessions.get(0).keys()).isEqualTo(SPANNER_LABEL_KEYS); - assertThat(maxInUseSessions.get(0).values()).isEqualTo(labelValues); - - List getSessionsTimeouts = - record.getMetrics().get(METRIC_PREFIX + GET_SESSION_TIMEOUTS); - assertThat(getSessionsTimeouts.size()).isEqualTo(1); - assertThat(getSessionsTimeouts.get(0).value()).isAtMost(1L); - assertThat(getSessionsTimeouts.get(0).keys()).isEqualTo(SPANNER_LABEL_KEYS); - assertThat(getSessionsTimeouts.get(0).values()).isEqualTo(labelValues); - - List labelValuesWithRegularSessions = new ArrayList<>(labelValues); - labelValuesWithRegularSessions.add(LabelValue.create("false")); - List labelValuesWithMultiplexedSessions = new ArrayList<>(labelValues); - labelValuesWithMultiplexedSessions.add(LabelValue.create("true")); - List numAcquiredSessions = - record.getMetrics().get(METRIC_PREFIX + NUM_ACQUIRED_SESSIONS); - assertThat(numAcquiredSessions.size()).isEqualTo(2); - PointWithFunction regularSessionMetric = - numAcquiredSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("false"))) - .findFirst() - .get(); - PointWithFunction multiplexedSessionMetric = - numAcquiredSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("true"))) - .findFirst() - .get(); - // verify metrics for regular sessions - assertThat(regularSessionMetric.value()).isEqualTo(2L); - assertThat(regularSessionMetric.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); - assertThat(regularSessionMetric.values()).isEqualTo(labelValuesWithRegularSessions); - - // verify metrics for multiplexed sessions - assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); - assertThat(multiplexedSessionMetric.keys()) - .isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); - assertThat(multiplexedSessionMetric.values()).isEqualTo(labelValuesWithMultiplexedSessions); - - List numReleasedSessions = - record.getMetrics().get(METRIC_PREFIX + NUM_RELEASED_SESSIONS); - assertThat(numReleasedSessions.size()).isEqualTo(2); - - regularSessionMetric = - numReleasedSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("false"))) - .findFirst() - .get(); - multiplexedSessionMetric = - numReleasedSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("true"))) - .findFirst() - .get(); - // verify metrics for regular sessions - assertThat(regularSessionMetric.value()).isEqualTo(0L); - assertThat(regularSessionMetric.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); - assertThat(regularSessionMetric.values()).isEqualTo(labelValuesWithRegularSessions); - - // verify metrics for multiplexed sessions - assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); - assertThat(multiplexedSessionMetric.keys()) - .isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); - assertThat(multiplexedSessionMetric.values()).isEqualTo(labelValuesWithMultiplexedSessions); - - List maxAllowedSessions = - record.getMetrics().get(METRIC_PREFIX + MAX_ALLOWED_SESSIONS); - assertThat(maxAllowedSessions.size()).isEqualTo(1); - assertThat(maxAllowedSessions.get(0).value()).isEqualTo(options.getMaxSessions()); - assertThat(maxAllowedSessions.get(0).keys()).isEqualTo(SPANNER_LABEL_KEYS); - assertThat(maxAllowedSessions.get(0).values()).isEqualTo(labelValues); - - List numSessionsInPool = - record.getMetrics().get(METRIC_PREFIX + NUM_SESSIONS_IN_POOL); - assertThat(numSessionsInPool.size()).isEqualTo(4); - PointWithFunction beingPrepared = numSessionsInPool.get(0); - List labelValuesWithBeingPreparedType = new ArrayList<>(labelValues); - labelValuesWithBeingPreparedType.add(NUM_SESSIONS_BEING_PREPARED); - assertThat(beingPrepared.value()).isEqualTo(0L); - assertThat(beingPrepared.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_TYPE); - assertThat(beingPrepared.values()).isEqualTo(labelValuesWithBeingPreparedType); - PointWithFunction numSessionsInUse = numSessionsInPool.get(1); - List labelValuesWithInUseType = new ArrayList<>(labelValues); - labelValuesWithInUseType.add(NUM_IN_USE_SESSIONS); - assertThat(numSessionsInUse.value()).isEqualTo(2L); - assertThat(numSessionsInUse.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_TYPE); - assertThat(numSessionsInUse.values()).isEqualTo(labelValuesWithInUseType); - PointWithFunction readSessions = numSessionsInPool.get(2); - List labelValuesWithReadType = new ArrayList<>(labelValues); - labelValuesWithReadType.add(NUM_READ_SESSIONS); - assertThat(readSessions.value()).isEqualTo(0L); - assertThat(readSessions.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_TYPE); - assertThat(readSessions.values()).isEqualTo(labelValuesWithReadType); - PointWithFunction writePreparedSessions = numSessionsInPool.get(3); - List labelValuesWithWriteType = new ArrayList<>(labelValues); - labelValuesWithWriteType.add(NUM_WRITE_SESSIONS); - assertThat(writePreparedSessions.value()).isEqualTo(0L); - assertThat(writePreparedSessions.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_TYPE); - assertThat(writePreparedSessions.values()).isEqualTo(labelValuesWithWriteType); - - final CountDownLatch latch = new CountDownLatch(1); - // Try asynchronously to take another session. This attempt should time out. - Future fut = - executor.submit( - () -> { - latch.countDown(); - Session session = pool.getSession(); - session.close(); - return null; - }); - // Wait until the background thread is actually waiting for a session. - latch.await(); - // Wait until the request has timed out. - int waitCount = 0; - while (pool.getNumWaiterTimeouts() == 0L && waitCount < 5000) { - //noinspection BusyWait - Thread.sleep(1L); - waitCount++; - } - assertTrue(pool.getNumWaiterTimeouts() > 0L); - // Return the checked out session to the pool so the async request will get a session and - // finish. - session2.close(); - // Verify that the async request also succeeds. - fut.get(10L, TimeUnit.SECONDS); - executor.shutdown(); - - session1.close(); - numAcquiredSessions = record.getMetrics().get(METRIC_PREFIX + NUM_ACQUIRED_SESSIONS); - assertThat(numAcquiredSessions.size()).isEqualTo(2); - regularSessionMetric = - numAcquiredSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("false"))) - .findFirst() - .get(); - multiplexedSessionMetric = - numAcquiredSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("true"))) - .findFirst() - .get(); - assertThat(regularSessionMetric.value()).isEqualTo(3L); - assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); - - numReleasedSessions = record.getMetrics().get(METRIC_PREFIX + NUM_RELEASED_SESSIONS); - assertThat(numReleasedSessions.size()).isEqualTo(2); - regularSessionMetric = - numReleasedSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("false"))) - .findFirst() - .get(); - multiplexedSessionMetric = - numReleasedSessions.stream() - .filter( - x -> - x.keys().contains(IS_MULTIPLEXED_KEY) - && x.values().contains(LabelValue.create("true"))) - .findFirst() - .get(); - assertThat(regularSessionMetric.value()).isEqualTo(3L); - assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); - - maxInUseSessions = record.getMetrics().get(METRIC_PREFIX + MAX_IN_USE_SESSIONS); - assertThat(maxInUseSessions.size()).isEqualTo(1); - assertThat(maxInUseSessions.get(0).value()).isEqualTo(2L); - - numSessionsInPool = record.getMetrics().get(METRIC_PREFIX + NUM_SESSIONS_IN_POOL); - assertThat(numSessionsInPool.size()).isEqualTo(4); - beingPrepared = numSessionsInPool.get(0); - assertThat(beingPrepared.value()).isEqualTo(0L); - numSessionsInUse = numSessionsInPool.get(1); - assertThat(numSessionsInUse.value()).isEqualTo(0L); - readSessions = numSessionsInPool.get(2); - assertThat(readSessions.value()).isEqualTo(2L); - writePreparedSessions = numSessionsInPool.get(3); - assertThat(writePreparedSessions.value()).isEqualTo(0L); - } - - @Test - public void testOpenCensusMetricsDisable() { - SpannerOptions.disableOpenCensusMetrics(); - // Create a session pool with max 2 session and a low timeout for waiting for a session. - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(2) - .setMaxIdleSessions(0) - .setInitialWaitForSessionTimeoutMillis(50L) - .build(); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - FakeMetricRegistry metricRegistry = new FakeMetricRegistry(); - List labelValues = - Arrays.asList( - LabelValue.create("client1"), - LabelValue.create("database1"), - LabelValue.create("instance1"), - LabelValue.create("1.0.0")); - - setupMockSessionCreation(); - pool = createPool(clock, metricRegistry, labelValues); - PooledSessionFuture session1 = pool.getSession(); - PooledSessionFuture session2 = pool.getSession(); - session1.get(); - session2.get(); - - MetricsRecord record = metricRegistry.pollRecord(); - assertThat(record.getMetrics().size()).isEqualTo(0); - SpannerOptions.enableOpenCensusMetrics(); - } - - @Test - public void testOpenTelemetrySessionMetrics() throws Exception { - SpannerOptions.resetActiveTracingFramework(); - SpannerOptions.enableOpenTelemetryMetrics(); - // Create a session pool with max 3 session and a low timeout for waiting for a session. - if (minSessions == 1) { - options = - SessionPoolOptions.newBuilder() - .setMinSessions(1) - .setMaxSessions(3) - // This must be set to null for the setInitialWaitForSessionTimeoutMillis call to have - // any effect. - .setAcquireSessionTimeout(null) - .setInitialWaitForSessionTimeoutMillis(1L) - .build(); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - - InMemoryMetricReader inMemoryMetricReader = InMemoryMetricReader.create(); - SdkMeterProvider sdkMeterProvider = - SdkMeterProvider.builder().registerMetricReader(inMemoryMetricReader).build(); - OpenTelemetry openTelemetry = - OpenTelemetrySdk.builder().setMeterProvider(sdkMeterProvider).build(); - - setupMockSessionCreation(); - - AttributesBuilder attributesBuilder = Attributes.builder(); - attributesBuilder.put("client_id", "testClient"); - attributesBuilder.put("database", "testDb"); - attributesBuilder.put("instance_id", "test_instance"); - attributesBuilder.put("library_version", "test_version"); - - pool = - createPool( - clock, - Metrics.getMetricRegistry(), - SPANNER_DEFAULT_LABEL_VALUES, - openTelemetry, - attributesBuilder.build()); - PooledSessionFuture session1 = pool.getSession(); - PooledSessionFuture session2 = pool.getSession(); - session1.get(); - session2.get(); - - Collection metricDataCollection = inMemoryMetricReader.collectAllMetrics(); - // Acquired sessions are 2. - verifyMetricData(metricDataCollection, NUM_ACQUIRED_SESSIONS, 1, 2L); - // Max in use session are 2. - verifyMetricData(metricDataCollection, MAX_IN_USE_SESSIONS, 1, 2D); - // Max Allowed sessions should be 3 - verifyMetricData(metricDataCollection, MAX_ALLOWED_SESSIONS, 1, 3D); - // Released sessions should be 0 - verifyMetricData(metricDataCollection, NUM_RELEASED_SESSIONS, 1, 0L); - // Num sessions in pool - verifyMetricData(metricDataCollection, NUM_SESSIONS_IN_POOL, 1, NUM_SESSIONS_IN_USE, 2); - - PooledSessionFuture session3 = pool.getSession(); - session3.get(); - - final CountDownLatch latch = new CountDownLatch(1); - // Try asynchronously to take another session. This attempt should time out. - Future fut = - executor.submit( - () -> { - PooledSessionFuture session = pool.getSession(); - latch.countDown(); - session.get(); - session.close(); - return null; - }); - // Wait until the background thread is actually waiting for a session. - latch.await(); - // Wait until the request has timed out. - Stopwatch watch = Stopwatch.createStarted(); - while (pool.getNumWaiterTimeouts() == 0L && watch.elapsed(TimeUnit.MILLISECONDS) < 100) { - Thread.yield(); - } - assertTrue(pool.getNumWaiterTimeouts() > 0); - // Return the checked out session to the pool so the async request will get a session and - // finish. - session2.close(); - // Verify that the async request also succeeds. - fut.get(10L, TimeUnit.SECONDS); - executor.shutdown(); - assertTrue(executor.awaitTermination(10L, TimeUnit.SECONDS)); - - inMemoryMetricReader.forceFlush(); - metricDataCollection = inMemoryMetricReader.collectAllMetrics(); - - // Max Allowed sessions should be 3 - verifyMetricData(metricDataCollection, MAX_ALLOWED_SESSIONS, 1, 3D); - // Session timeouts 1 - // verifyMetricData(metricDataCollection, GET_SESSION_TIMEOUTS, 1, 1L); - // Max in use session are 2. - verifyMetricData(metricDataCollection, MAX_IN_USE_SESSIONS, 1, 3D); - // Session released 2 - verifyMetricData(metricDataCollection, NUM_RELEASED_SESSIONS, 1, 2L); - // Acquired sessions are 4. - verifyMetricData(metricDataCollection, NUM_ACQUIRED_SESSIONS, 1, 4L); - // Num sessions in pool - verifyMetricData(metricDataCollection, NUM_SESSIONS_IN_POOL, 1, NUM_SESSIONS_IN_USE, 2); - verifyMetricData(metricDataCollection, NUM_SESSIONS_IN_POOL, 1, NUM_SESSIONS_AVAILABLE, 1); - } - } - - private static void verifyMetricData( - Collection metricDataCollection, String metricName, int size, long value) { - Collection metricDataFiltered = - metricDataCollection.stream() - .filter(x -> x.getName().equals(metricName)) - .collect(Collectors.toList()); - - assertEquals(metricDataFiltered.size(), size); - MetricData metricData = metricDataFiltered.stream().findFirst().get(); - LongPointData regularSessionMetric = - metricData.getLongSumData().getPoints().stream() - .filter( - x -> - Boolean.FALSE.equals( - x.getAttributes().get(AttributeKey.booleanKey("is_multiplexed")))) - .findFirst() - .get(); - LongPointData multiplexedSessionMetric = - metricData.getLongSumData().getPoints().stream() - .filter( - x -> - Boolean.TRUE.equals( - x.getAttributes().get(AttributeKey.booleanKey("is_multiplexed")))) - .findFirst() - .get(); - assertEquals(value, regularSessionMetric.getValue()); - assertEquals(0, multiplexedSessionMetric.getValue()); - } - - private static void verifyMetricData( - Collection metricDataCollection, String metricName, int size, double value) { - Collection metricDataFiltered = - metricDataCollection.stream() - .filter(x -> x.getName().equals(metricName)) - .collect(Collectors.toList()); - - assertEquals(metricDataFiltered.size(), size); - MetricData metricData = metricDataFiltered.stream().findFirst().get(); - assertEquals( - metricData.getDoubleGaugeData().getPoints().stream().findFirst().get().getValue(), - value, - 0.0); - } - - private static void verifyMetricData( - Collection metricDataCollection, - String metricName, - int size, - String labelName, - long value) { - Collection metricDataFiltered = - metricDataCollection.stream() - .filter(x -> x.getName().equals(metricName)) - .collect(Collectors.toList()); - - assertEquals(metricDataFiltered.size(), size); - - MetricData metricData = metricDataFiltered.stream().findFirst().get(); - - assertEquals( - metricData.getLongSumData().getPoints().stream() - .filter(x -> x.getAttributes().asMap().containsValue(labelName)) - .findFirst() - .get() - .getValue(), - value); - } - - @Test - public void testGetDatabaseRole() throws Exception { - setupMockSessionCreation(); - pool = createPool(new FakeClock(), new FakeMetricRegistry(), SPANNER_DEFAULT_LABEL_VALUES); - assertEquals(TEST_DATABASE_ROLE, pool.getDatabaseRole()); - } - - @Test - public void testWaitOnMinSessionsWhenSessionsAreCreatedBeforeTimeout() { - options = - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(minSessions + 1) - .setWaitForMinSessionsDuration(Duration.ofSeconds(5)) - .build(); - doAnswer( - invocation -> - executor.submit( - () -> { - SessionConsumerImpl consumer = - invocation.getArgument(2, SessionConsumerImpl.class); - consumer.onSessionReady(mockSession()); - })) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - pool = createPool(new FakeClock(), new FakeMetricRegistry(), SPANNER_DEFAULT_LABEL_VALUES); - pool.maybeWaitOnMinSessions(); - assertTrue(pool.getNumberOfSessionsInPool() >= minSessions); - } - - @Test(expected = SpannerException.class) - public void testWaitOnMinSessionsThrowsExceptionWhenTimeoutIsReached() { - // Does not call onSessionReady, so session pool is never populated - doAnswer(invocation -> null) - .when(sessionClient) - .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - - options = - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions + 1) - .setMaxSessions(minSessions + 1) - .setWaitForMinSessionsDuration(Duration.ofMillis(100)) - .build(); - pool = createPool(new FakeClock(), new FakeMetricRegistry(), SPANNER_DEFAULT_LABEL_VALUES); - pool.maybeWaitOnMinSessions(); - } - - private void mockKeepAlive(ReadContext context) { - ResultSet resultSet = mock(ResultSet.class); - when(resultSet.next()).thenReturn(true, false); - when(context.executeQuery(any(Statement.class))).thenReturn(resultSet); - } - - private void mockKeepAlive(Session session) { - ReadContext context = mock(ReadContext.class); - ResultSet resultSet = mock(ResultSet.class); - when(resultSet.next()).thenReturn(true, false); - when(session.singleUse(any(TimestampBound.class))).thenReturn(context); - when(context.executeQuery(any(Statement.class))).thenReturn(resultSet); - } - - private void getSessionAsync(final CountDownLatch latch, final AtomicBoolean failed) { - new Thread( - () -> { - try (PooledSessionFuture future = pool.getSession()) { - PooledSession session = future.get(); - failed.compareAndSet(false, session == null); - Uninterruptibles.sleepUninterruptibly(10, TimeUnit.MILLISECONDS); - } catch (Throwable e) { - failed.compareAndSet(false, true); - } finally { - latch.countDown(); - } - }) - .start(); - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolUnbalancedTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolUnbalancedTest.java deleted file mode 100644 index 5a9365eaed9..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolUnbalancedTest.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner; - -import static com.google.cloud.spanner.SessionPool.isUnbalanced; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.google.cloud.spanner.SessionPool.PooledSession; -import com.google.cloud.spanner.SessionPool.PooledSessionFuture; -import java.util.Arrays; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -@RunWith(JUnit4.class) -public class SessionPoolUnbalancedTest { - - static PooledSession mockedSession(int channel) { - PooledSession session = mock(PooledSession.class); - when(session.getChannel()).thenReturn(channel); - return session; - } - - static List mockedSessions(int... channels) { - return Arrays.stream(channels) - .mapToObj(SessionPoolUnbalancedTest::mockedSession) - .collect(Collectors.toList()); - } - - static PooledSessionFuture mockedCheckedOutSession(int channel) { - PooledSession session = mockedSession(channel); - PooledSessionFuture future = mock(PooledSessionFuture.class); - when(future.get()).thenReturn(session); - when(future.isDone()).thenReturn(true); - return future; - } - - static Set mockedCheckedOutSessions(int... channels) { - return Arrays.stream(channels) - .mapToObj(SessionPoolUnbalancedTest::mockedCheckedOutSession) - .collect(Collectors.toSet()); - } - - @Test - public void testIsUnbalancedBasics() { - // An empty session pool is never unbalanced. - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1), 1)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1), 2)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1), 4)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1, 1), 1)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1, 1), 2)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1, 1), 4)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1, 1, 1), 1)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1, 1, 1), 2)); - assertFalse(isUnbalanced(1, mockedSessions(), mockedCheckedOutSessions(1, 1, 1, 1, 1), 4)); - - // A session pool that has 2 or fewer sessions checked out is never unbalanced. - // This prevents low-QPS scenarios from re-balancing the pool. - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1), mockedCheckedOutSessions(), 1)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1), mockedCheckedOutSessions(), 2)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1), mockedCheckedOutSessions(), 4)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1), mockedCheckedOutSessions(1), 1)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1), mockedCheckedOutSessions(1), 2)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1), mockedCheckedOutSessions(1), 4)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1, 1), mockedCheckedOutSessions(1, 1), 1)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1, 1), mockedCheckedOutSessions(1, 1), 2)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1, 1), mockedCheckedOutSessions(1, 1), 4)); - - // A session pool that uses only 1 channel is never unbalanced. - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1), mockedCheckedOutSessions(), 1)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1), mockedCheckedOutSessions(), 1)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1, 1), mockedCheckedOutSessions(), 1)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1, 1, 1, 1), mockedCheckedOutSessions(), 1)); - assertFalse(isUnbalanced(1, mockedSessions(1, 1, 1), mockedCheckedOutSessions(1, 1, 1), 1)); - assertFalse( - isUnbalanced(1, mockedSessions(1, 1, 1, 1), mockedCheckedOutSessions(1, 1, 1, 1), 1)); - assertFalse( - isUnbalanced(1, mockedSessions(1, 1, 1, 1, 1), mockedCheckedOutSessions(1, 1, 1, 1, 1), 1)); - assertFalse( - isUnbalanced( - 1, mockedSessions(1, 1, 1, 1, 1, 1), mockedCheckedOutSessions(1, 1, 1, 1, 1, 1), 1)); - } - - @Test - public void testIsUnbalanced_returnsFalseForBalancedPool() { - assertFalse( - isUnbalanced(1, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - assertFalse( - isUnbalanced(2, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - assertFalse( - isUnbalanced(3, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - assertFalse( - isUnbalanced(4, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - - assertFalse( - isUnbalanced(1, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(4, 3, 2, 1), 4)); - assertFalse( - isUnbalanced(2, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(4, 3, 2, 1), 4)); - assertFalse( - isUnbalanced(3, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(4, 3, 2, 1), 4)); - assertFalse( - isUnbalanced(4, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(4, 3, 2, 1), 4)); - - assertFalse( - isUnbalanced( - 1, - mockedSessions(1, 2, 3, 4, 1, 2, 3, 4), - mockedCheckedOutSessions(1, 2, 3, 4, 1, 2, 3, 4), - 4)); - - // We only check the first numChannels sessions that are in the pool, so the fact that the end - // of the pool is unbalanced is not a reason to re-balance. - assertFalse( - isUnbalanced( - 1, mockedSessions(1, 2, 3, 4, 1, 1, 1, 1), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - assertFalse( - isUnbalanced(1, mockedSessions(1, 2, 1, 1, 1, 1), mockedCheckedOutSessions(1, 2), 2)); - assertFalse( - isUnbalanced( - 1, - mockedSessions(1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 1, 1), - mockedCheckedOutSessions(1, 2, 3, 4), - 8)); - assertFalse( - isUnbalanced( - 1, - mockedSessions(1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 1, 1), - mockedCheckedOutSessions(1, 2, 3, 4), - 8)); - - // The list of checked out sessions is allowed to contain up to twice the number of sessions - // with a given channel than it should for a perfect distribution (perfect means - // num_sessions_with_a_channel == num_channels). - assertFalse( - isUnbalanced(1, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 1, 2, 3), 4)); - assertFalse( - isUnbalanced( - 1, - mockedSessions(1, 2, 3, 4), - mockedCheckedOutSessions(1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 2, 3, 4, 5, 6), - 8)); - // We're only checking the list of checked out sessions against the channel that is being added - // to the pool. - assertFalse( - isUnbalanced(1, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(2, 2, 2, 2), 4)); - - // We do not consider a pool unbalanced if the list of checked out sessions only contains 2 of - // the same channel, even if that would still be 'more than twice the ideal number'. This - // prevents that a small number of checked out sessions that happen to use the same channel - // causes the pool to be considered unbalanced. - assertFalse( - isUnbalanced( - 1, mockedSessions(1, 2, 3, 4, 5, 6, 7, 8), mockedCheckedOutSessions(1, 1, 2), 8)); - - // A larger number of checked out sessions means that we can also have a 'large' number of the - // same channels in that list, as long as it does not exceed twice the number that it should be - // for an ideal distribution. - assertFalse( - isUnbalanced( - 1, - mockedSessions(1, 2, 3, 4, 5, 6, 7, 8), - mockedCheckedOutSessions(1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 2, 4, 5, 5, 3, 4, 8, 8), - 8)); - } - - @Test - public void testIsUnbalanced_returnsTrueForUnbalancedPool() { - // The pool is considered unbalanced if the first numChannel sessions contain 3 or more of the - // same sessions as the one that is being added. Also; if the pool uses only 2 channels, then it - // is also considered unbalanced if the two first sessions in the pool already use the same - // channel as the one being added. - assertTrue(isUnbalanced(1, mockedSessions(1, 1), mockedCheckedOutSessions(1, 2, 1, 2), 2)); - assertTrue(isUnbalanced(2, mockedSessions(2, 2), mockedCheckedOutSessions(1, 2, 1, 2), 2)); - - assertTrue( - isUnbalanced(1, mockedSessions(1, 1, 1, 4), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - assertTrue( - isUnbalanced(2, mockedSessions(2, 2, 2, 4), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - assertTrue( - isUnbalanced(3, mockedSessions(1, 3, 3, 3), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - assertTrue( - isUnbalanced(4, mockedSessions(1, 4, 4, 4), mockedCheckedOutSessions(1, 2, 3, 4), 4)); - - assertTrue( - isUnbalanced( - 1, mockedSessions(1, 2, 3, 4, 5, 6, 1, 1), mockedCheckedOutSessions(1, 2, 3, 4), 8)); - assertTrue( - isUnbalanced( - 2, mockedSessions(1, 3, 4, 5, 6, 2, 2, 2), mockedCheckedOutSessions(1, 2, 3, 4), 8)); - assertTrue( - isUnbalanced( - 3, mockedSessions(1, 2, 3, 3, 4, 5, 3, 6), mockedCheckedOutSessions(1, 2, 3, 4), 8)); - assertTrue( - isUnbalanced( - 4, mockedSessions(1, 2, 3, 4, 5, 4, 5, 4), mockedCheckedOutSessions(1, 2, 3, 4), 8)); - - // The pool is also considered unbalanced if the list of checked out sessions contain more than - // 2 times as many sessions of the one being returned as it should. - assertTrue( - isUnbalanced(1, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 1, 2, 1), 4)); - assertTrue( - isUnbalanced(2, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(2, 2, 2, 4), 4)); - assertTrue( - isUnbalanced(3, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 3, 3, 3), 4)); - assertTrue( - isUnbalanced(4, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(4, 2, 4, 4), 4)); - assertTrue( - isUnbalanced( - 1, mockedSessions(1, 2, 3, 4), mockedCheckedOutSessions(1, 1, 2, 1, 1, 2, 3, 1), 4)); - - assertTrue( - isUnbalanced( - 1, mockedSessions(1, 2, 3, 4, 5, 6, 7, 8), mockedCheckedOutSessions(1, 1, 1, 3), 8)); - assertTrue( - isUnbalanced( - 1, - mockedSessions(1, 2, 3, 4, 5, 6, 7, 8), - mockedCheckedOutSessions(1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 1, 1), - 8)); - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SingerProto.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SingerProto.java index c409f34177b..a7aaa70ca2d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SingerProto.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SingerProto.java @@ -28,6 +28,7 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLi public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); } + /** Protobuf enum {@code examples.spanner.music.Genre} */ public enum Genre implements com.google.protobuf.ProtocolMessageEnum { /** POP = 0; */ @@ -43,10 +44,13 @@ public enum Genre implements com.google.protobuf.ProtocolMessageEnum { /** POP = 0; */ public static final int POP_VALUE = 0; + /** JAZZ = 1; */ public static final int JAZZ_VALUE = 1; + /** FOLK = 2; */ public static final int FOLK_VALUE = 2; + /** ROCK = 3; */ public static final int ROCK_VALUE = 3; @@ -144,6 +148,7 @@ public interface SingerInfoOrBuilder * @return Whether the singerId field is set. */ boolean hasSingerId(); + /** * optional int64 singer_id = 1; * @@ -157,12 +162,14 @@ public interface SingerInfoOrBuilder * @return Whether the birthDate field is set. */ boolean hasBirthDate(); + /** * optional string birth_date = 2; * * @return The birthDate. */ String getBirthDate(); + /** * optional string birth_date = 2; * @@ -176,12 +183,14 @@ public interface SingerInfoOrBuilder * @return Whether the nationality field is set. */ boolean hasNationality(); + /** * optional string nationality = 3; * * @return The nationality. */ String getNationality(); + /** * optional string nationality = 3; * @@ -195,12 +204,14 @@ public interface SingerInfoOrBuilder * @return Whether the genre field is set. */ boolean hasGenre(); + /** * optional .examples.spanner.music.Genre genre = 4; * * @return The enum numeric value on the wire for genre. */ int getGenreValue(); + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -208,12 +219,14 @@ public interface SingerInfoOrBuilder */ Genre getGenre(); } + /** Protobuf type {@code examples.spanner.music.SingerInfo} */ public static final class SingerInfo extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:examples.spanner.music.SingerInfo) SingerInfoOrBuilder { private static final long serialVersionUID = 0L; + // Use SingerInfo.newBuilder() to construct. private SingerInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -244,6 +257,7 @@ protected FieldAccessorTable internalGetFieldAccessorTable() { private int bitField0_; public static final int SINGER_ID_FIELD_NUMBER = 1; private long singerId_ = 0L; + /** * optional int64 singer_id = 1; * @@ -253,6 +267,7 @@ protected FieldAccessorTable internalGetFieldAccessorTable() { public boolean hasSingerId() { return ((bitField0_ & 0x00000001) != 0); } + /** * optional int64 singer_id = 1; * @@ -267,6 +282,7 @@ public long getSingerId() { @SuppressWarnings("serial") private volatile Object birthDate_ = ""; + /** * optional string birth_date = 2; * @@ -276,6 +292,7 @@ public long getSingerId() { public boolean hasBirthDate() { return ((bitField0_ & 0x00000002) != 0); } + /** * optional string birth_date = 2; * @@ -293,6 +310,7 @@ public String getBirthDate() { return s; } } + /** * optional string birth_date = 2; * @@ -315,6 +333,7 @@ public com.google.protobuf.ByteString getBirthDateBytes() { @SuppressWarnings("serial") private volatile Object nationality_ = ""; + /** * optional string nationality = 3; * @@ -324,6 +343,7 @@ public com.google.protobuf.ByteString getBirthDateBytes() { public boolean hasNationality() { return ((bitField0_ & 0x00000004) != 0); } + /** * optional string nationality = 3; * @@ -341,6 +361,7 @@ public String getNationality() { return s; } } + /** * optional string nationality = 3; * @@ -361,6 +382,7 @@ public com.google.protobuf.ByteString getNationalityBytes() { public static final int GENRE_FIELD_NUMBER = 4; private int genre_ = 0; + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -370,6 +392,7 @@ public com.google.protobuf.ByteString getNationalityBytes() { public boolean hasGenre() { return ((bitField0_ & 0x00000008) != 0); } + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -379,6 +402,7 @@ public boolean hasGenre() { public int getGenreValue() { return genre_; } + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -593,6 +617,7 @@ protected Builder newBuilderForType(BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** Protobuf type {@code examples.spanner.music.SingerInfo} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder @@ -808,6 +833,7 @@ public Builder mergeFrom( private int bitField0_; private long singerId_; + /** * optional int64 singer_id = 1; * @@ -817,6 +843,7 @@ public Builder mergeFrom( public boolean hasSingerId() { return ((bitField0_ & 0x00000001) != 0); } + /** * optional int64 singer_id = 1; * @@ -826,6 +853,7 @@ public boolean hasSingerId() { public long getSingerId() { return singerId_; } + /** * optional int64 singer_id = 1; * @@ -839,6 +867,7 @@ public Builder setSingerId(long value) { onChanged(); return this; } + /** * optional int64 singer_id = 1; * @@ -852,6 +881,7 @@ public Builder clearSingerId() { } private Object birthDate_ = ""; + /** * optional string birth_date = 2; * @@ -860,6 +890,7 @@ public Builder clearSingerId() { public boolean hasBirthDate() { return ((bitField0_ & 0x00000002) != 0); } + /** * optional string birth_date = 2; * @@ -876,6 +907,7 @@ public String getBirthDate() { return (String) ref; } } + /** * optional string birth_date = 2; * @@ -892,6 +924,7 @@ public com.google.protobuf.ByteString getBirthDateBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * optional string birth_date = 2; * @@ -907,6 +940,7 @@ public Builder setBirthDate(String value) { onChanged(); return this; } + /** * optional string birth_date = 2; * @@ -918,6 +952,7 @@ public Builder clearBirthDate() { onChanged(); return this; } + /** * optional string birth_date = 2; * @@ -936,6 +971,7 @@ public Builder setBirthDateBytes(com.google.protobuf.ByteString value) { } private Object nationality_ = ""; + /** * optional string nationality = 3; * @@ -944,6 +980,7 @@ public Builder setBirthDateBytes(com.google.protobuf.ByteString value) { public boolean hasNationality() { return ((bitField0_ & 0x00000004) != 0); } + /** * optional string nationality = 3; * @@ -960,6 +997,7 @@ public String getNationality() { return (String) ref; } } + /** * optional string nationality = 3; * @@ -976,6 +1014,7 @@ public com.google.protobuf.ByteString getNationalityBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * optional string nationality = 3; * @@ -991,6 +1030,7 @@ public Builder setNationality(String value) { onChanged(); return this; } + /** * optional string nationality = 3; * @@ -1002,6 +1042,7 @@ public Builder clearNationality() { onChanged(); return this; } + /** * optional string nationality = 3; * @@ -1020,6 +1061,7 @@ public Builder setNationalityBytes(com.google.protobuf.ByteString value) { } private int genre_ = 0; + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -1029,6 +1071,7 @@ public Builder setNationalityBytes(com.google.protobuf.ByteString value) { public boolean hasGenre() { return ((bitField0_ & 0x00000008) != 0); } + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -1038,6 +1081,7 @@ public boolean hasGenre() { public int getGenreValue() { return genre_; } + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -1050,6 +1094,7 @@ public Builder setGenreValue(int value) { onChanged(); return this; } + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -1060,6 +1105,7 @@ public Genre getGenre() { Genre result = Genre.forNumber(genre_); return result == null ? Genre.UNRECOGNIZED : result; } + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -1075,6 +1121,7 @@ public Builder setGenre(Genre value) { onChanged(); return this; } + /** * optional .examples.spanner.music.Genre genre = 4; * @@ -1164,15 +1211,25 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { String[] descriptorData = { - "\n\014singer.proto\022\026examples.spanner.music\"\301" - + "\001\n\nSingerInfo\022\026\n\tsinger_id\030\001 \001(\003H\000\210\001\001\022\027\n" - + "\nbirth_date\030\002 \001(\tH\001\210\001\001\022\030\n\013nationality\030\003 " - + "\001(\tH\002\210\001\001\0221\n\005genre\030\004 \001(\0162\035.examples.spann" - + "er.music.GenreH\003\210\001\001B\014\n\n_singer_idB\r\n\013_bi" - + "rth_dateB\016\n\014_nationalityB\010\n\006_genre*.\n\005Ge" - + "nre\022\007\n\003POP\020\000\022\010\n\004JAZZ\020\001\022\010\n\004FOLK\020\002\022\010\n\004ROCK" - + "\020\003B)\n\030com.google.cloud.spannerB\013SingerPr" - + "otoP\000b\006proto3" + "\n" + + "\014singer.proto\022\026examples.spanner.music\"\301\001\n\n" + + "SingerInfo\022\026\n" + + "\tsinger_id\030\001 \001(\003H\000\210\001\001\022\027\n" + + "\n" + + "birth_date\030\002 \001(\tH\001\210\001\001\022\030\n" + + "\013nationality\030\003 \001(\tH\002\210\001\001\0221\n" + + "\005genre\030\004" + + " \001(\0162\035.examples.spanner.music.GenreH\003\210\001\001B\014\n\n" + + "_singer_idB\r\n" + + "\013_birth_dateB\016\n" + + "\014_nationalityB\010\n" + + "\006_genre*.\n" + + "\005Genre\022\007\n" + + "\003POP\020\000\022\010\n" + + "\004JAZZ\020\001\022\010\n" + + "\004FOLK\020\002\022\010\n" + + "\004ROCK\020\003B)\n" + + "\030com.google.cloud.spannerB\013SingerProtoP\000b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java index b87b7ba9752..449e78cf612 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java @@ -304,39 +304,16 @@ private void verifySingleUseSpans() { // OpenCensus spans and events verification Map spans = failOnOverkillTraceComponent.getSpans(); assertThat(spans).containsEntry("CloudSpanner.ReadOnlyTransaction", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessions", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessionsRequest", true); assertThat(spans).containsEntry("CloudSpannerOperation.ExecuteStreamingQuery", true); - List expectedAnnotations = - ImmutableList.of( - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", - "Creating 2 sessions", - "Acquiring session", - "Acquired session", - "Using Session", - "Starting/Resuming stream"); List expectedAnnotationsForMultiplexedSession = ImmutableList.of( - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", - "Request for 1 multiplexed session returned 1 session", - "Creating 2 sessions", - "Starting/Resuming stream"); - if (spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()) { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotationsForMultiplexedSession); - } else { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); - } + "Request for 1 multiplexed session returned 1 session", "Starting/Resuming stream"); + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSession); } @Test @@ -357,41 +334,18 @@ public void singleUseWithError() { // OpenCensus spans and events verification Map spans = failOnOverkillTraceComponent.getSpans(); assertThat(spans).containsEntry("CloudSpanner.ReadOnlyTransaction", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessions", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessionsRequest", true); assertThat(spans).containsEntry("CloudSpannerOperation.ExecuteStreamingQuery", true); - List expectedAnnotations = - ImmutableList.of( - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", - "Creating 2 sessions", - "Acquiring session", - "Acquired session", - "Using Session", - "Starting/Resuming stream", - "Stream broken. Not safe to retry"); List expectedAnnotationsForMultiplexedSession = ImmutableList.of( - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", "Request for 1 multiplexed session returned 1 session", - "Creating 2 sessions", "Starting/Resuming stream", "Stream broken. Not safe to retry"); - if (spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()) { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotationsForMultiplexedSession); - } else { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); - } + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSession); } @Test @@ -406,43 +360,19 @@ public void multiUse() { Map spans = failOnOverkillTraceComponent.getSpans(); assertThat(spans).containsEntry("CloudSpanner.ReadOnlyTransaction", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessions", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessionsRequest", true); assertThat(spans).containsEntry("CloudSpannerOperation.ExecuteStreamingQuery", true); - List expectedAnnotations = - ImmutableList.of( - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", - "Creating 2 sessions", - "Acquiring session", - "Acquired session", - "Using Session", - "Starting/Resuming stream", - "Creating Transaction", - "Transaction Creation Done"); List expectedAnnotationsForMultiplexedSession = ImmutableList.of( - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", "Request for 1 multiplexed session returned 1 session", - "Creating 2 sessions", "Starting/Resuming stream", "Creating Transaction", "Transaction Creation Done"); - if (isMultiplexedSessionsEnabled()) { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotationsForMultiplexedSession); - } else { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); - } + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSession); } @Test @@ -451,48 +381,20 @@ public void transactionRunner() { runner.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT)); Map spans = failOnOverkillTraceComponent.getSpans(); assertThat(spans).containsEntry("CloudSpanner.ReadWriteTransaction", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessions", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessionsRequest", true); assertThat(spans).containsEntry("CloudSpannerOperation.Commit", true); - List expectedAnnotations = - ImmutableList.of( - "Acquiring session", - "Acquired session", - "Using Session", - "Starting Transaction Attempt", - "Starting Commit", - "Commit Done", - "Transaction Attempt Succeeded", - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", - "Creating 2 sessions"); - List expectedAnnotationsForMultiplexedSession = + List expectedAnnotationsForMultiplexedSessionsRW = ImmutableList.of( - "Acquiring session", - "Acquired session", - "Using Session", "Starting Transaction Attempt", "Starting Commit", "Commit Done", "Transaction Attempt Succeeded", - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", - "Request for 1 multiplexed session returned 1 session", - "Creating 2 sessions"); - if (isMultiplexedSessionsEnabled()) { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotationsForMultiplexedSession); - } else { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); - } + "Request for 1 multiplexed session returned 1 session"); + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSessionsRW); } @Test @@ -506,51 +408,21 @@ public void transactionRunnerWithError() { Map spans = failOnOverkillTraceComponent.getSpans(); - if (isMultiplexedSessionsEnabled()) { - assertEquals(spans.toString(), 5, spans.size()); - assertThat(spans).containsEntry("CloudSpannerOperation.CreateMultiplexedSession", true); - } else { - assertThat(spans.size()).isEqualTo(4); - } + assertEquals(spans.toString(), 3, spans.size()); + assertThat(spans).containsEntry("CloudSpannerOperation.CreateMultiplexedSession", true); assertThat(spans).containsEntry("CloudSpanner.ReadWriteTransaction", true); assertThat(spans).containsEntry("CloudSpannerOperation.ExecuteUpdate", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessions", true); - assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessionsRequest", true); - List expectedAnnotations = - ImmutableList.of( - "Acquiring session", - "Acquired session", - "Using Session", - "Starting Transaction Attempt", - "Transaction Attempt Failed in user operation", - "Requesting 2 sessions", - "Request for 2 sessions returned 2 sessions", - "Creating 2 sessions"); - List expectedAnnotationsForMultiplexedSession = + List expectedAnnotationsForMultiplexedSessionsRW = ImmutableList.of( - "Acquiring session", - "Acquired session", - "Using Session", "Starting Transaction Attempt", "Transaction Attempt Failed in user operation", - "Requesting 2 sessions", - "Request for 1 multiplexed session returned 1 session", - "Request for 2 sessions returned 2 sessions", - "Creating 2 sessions"); - if (isMultiplexedSessionsEnabled()) { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotationsForMultiplexedSession); - } else { - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); - } + "Request for 1 multiplexed session returned 1 session"); + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSessionsRW); } private void verifyAnnotations(List actualAnnotations, List expectedAnnotations) { @@ -565,4 +437,11 @@ private boolean isMultiplexedSessionsEnabled() { } return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); } + + private boolean isMultiplexedSessionsEnabledForRW() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterTest.java index ab30de1ade0..590d62db7b5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterTest.java @@ -16,7 +16,6 @@ package com.google.cloud.spanner; -import static com.google.cloud.spanner.BuiltInMetricsConstant.ATTEMPT_COUNT_NAME; import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_HASH_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_NAME_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_UID_KEY; @@ -31,6 +30,8 @@ import static com.google.cloud.spanner.BuiltInMetricsConstant.OPERATION_LATENCIES_NAME; import static com.google.cloud.spanner.BuiltInMetricsConstant.PROJECT_ID_KEY; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -39,19 +40,26 @@ import com.google.api.core.ApiFutures; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.monitoring.v3.MetricServiceClient; +import com.google.cloud.monitoring.v3.MetricServiceSettings; import com.google.cloud.monitoring.v3.stub.MetricServiceStub; import com.google.common.collect.ImmutableList; import com.google.monitoring.v3.CreateTimeSeriesRequest; +import com.google.monitoring.v3.DroppedLabels; import com.google.monitoring.v3.TimeSeries; import com.google.protobuf.Empty; +import com.google.protobuf.InvalidProtocolBufferException; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.sdk.common.CompletableResultCode; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.HistogramPointData; import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableDoubleExemplarData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableLongPointData; @@ -59,9 +67,8 @@ import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.resources.Resource; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -78,7 +85,7 @@ public class SpannerCloudMonitoringExporterTest { private static final String instanceId = "fake-instance"; private static final String locationId = "global"; private static final String databaseId = "fake-database"; - private static final String clientName = "spanner-java"; + private static final String clientName = "spanner-java/"; private static final String clientHash = "spanner-test"; private static final String instanceConfigId = "fake-instance-config-id"; @@ -90,28 +97,38 @@ public class SpannerCloudMonitoringExporterTest { private SpannerCloudMonitoringExporter exporter; private Attributes attributes; + + private Attributes resourceAttributes; private Resource resource; private InstrumentationScopeInfo scope; + private String client_uid; + @Before public void setUp() { fakeMetricServiceClient = new FakeMetricServiceClient(mockMetricServiceStub); exporter = new SpannerCloudMonitoringExporter(projectId, fakeMetricServiceClient); + this.client_uid = BuiltInMetricsProvider.INSTANCE.createClientAttributes().get("client_uid"); + attributes = Attributes.builder() - .put(PROJECT_ID_KEY, projectId) .put(INSTANCE_ID_KEY, instanceId) - .put(LOCATION_ID_KEY, locationId) - .put(INSTANCE_CONFIG_ID_KEY, instanceConfigId) .put(DATABASE_KEY, databaseId) .put(CLIENT_NAME_KEY, clientName) - .put(CLIENT_HASH_KEY, clientHash) + .put(CLIENT_UID_KEY, this.client_uid) .put(String.valueOf(DIRECT_PATH_ENABLED_KEY), true) .put(String.valueOf(DIRECT_PATH_USED_KEY), true) .build(); - resource = Resource.create(Attributes.empty()); + resourceAttributes = + Attributes.builder() + .put(PROJECT_ID_KEY, projectId) + .put(LOCATION_ID_KEY, locationId) + .put(CLIENT_HASH_KEY, clientHash) + .put(INSTANCE_CONFIG_ID_KEY, instanceConfigId) + .build(); + resource = Resource.create(resourceAttributes); scope = InstrumentationScopeInfo.create(GAX_METER_NAME); } @@ -146,7 +163,8 @@ public void testExportingSumData() { ImmutableSumData.create( true, AggregationTemporality.CUMULATIVE, ImmutableList.of(longPointData))); - exporter.export(Arrays.asList(longData)); + exporter.export(Collections.singletonList(longData)); + assertFalse(exporter.lastExportSkippedData()); CreateTimeSeriesRequest request = argumentCaptor.getValue(); @@ -173,8 +191,10 @@ public void testExportingSumData() { DIRECT_PATH_ENABLED_KEY.getKey(), "true", DIRECT_PATH_USED_KEY.getKey(), - "true"); - assertThat(timeSeries.getMetric().getLabelsMap()).hasSize(4); + "true", + CLIENT_UID_KEY.getKey(), + this.client_uid); + assertThat(timeSeries.getMetric().getLabelsMap()).hasSize(5); assertThat(timeSeries.getPoints(0).getValue().getInt64Value()).isEqualTo(fakeValue); assertThat(timeSeries.getPoints(0).getInterval().getStartTime().getNanos()) @@ -204,7 +224,7 @@ public void testExportingHistogramData() { 1d, // min true, 2d, // max - Arrays.asList(1.0), + Collections.singletonList(1.0), Arrays.asList(1L, 2L)); MetricData histogramData = @@ -217,7 +237,8 @@ public void testExportingHistogramData() { ImmutableHistogramData.create( AggregationTemporality.CUMULATIVE, ImmutableList.of(histogramPointData))); - exporter.export(Arrays.asList(histogramData)); + exporter.export(Collections.singletonList(histogramData)); + assertFalse(exporter.lastExportSkippedData()); CreateTimeSeriesRequest request = argumentCaptor.getValue(); @@ -234,7 +255,7 @@ public void testExportingHistogramData() { INSTANCE_CONFIG_ID_KEY.getKey(), instanceConfigId, CLIENT_HASH_KEY.getKey(), clientHash); - assertThat(timeSeries.getMetric().getLabelsMap()).hasSize(4); + assertThat(timeSeries.getMetric().getLabelsMap()).hasSize(5); assertThat(timeSeries.getMetric().getLabelsMap()) .containsExactly( DATABASE_KEY.getKey(), @@ -244,7 +265,9 @@ public void testExportingHistogramData() { DIRECT_PATH_ENABLED_KEY.getKey(), "true", DIRECT_PATH_USED_KEY.getKey(), - "true"); + "true", + CLIENT_UID_KEY.getKey(), + this.client_uid); Distribution distribution = timeSeries.getPoints(0).getValue().getDistributionValue(); assertThat(distribution.getCount()).isEqualTo(3); @@ -269,11 +292,7 @@ public void testExportingSumDataInBatches() { Collection toExport = new ArrayList<>(); for (int i = 0; i < 250; i++) { LongPointData longPointData = - ImmutableLongPointData.create( - startEpoch, - endEpoch, - attributes.toBuilder().put(CLIENT_UID_KEY, "client_uid" + i).build(), - i); + ImmutableLongPointData.create(startEpoch, endEpoch, attributes, i); MetricData longData = ImmutableMetricData.createLongSum( @@ -295,6 +314,7 @@ public void testExportingSumDataInBatches() { assertThat(firstRequest.getTimeSeriesList()).hasSize(200); assertThat(secondRequest.getTimeSeriesList()).hasSize(50); + assertFalse(exporter.lastExportSkippedData()); for (int i = 0; i < 250; i++) { TimeSeries timeSeries; @@ -325,7 +345,7 @@ public void testExportingSumDataInBatches() { DIRECT_PATH_USED_KEY.getKey(), "true", CLIENT_UID_KEY.getKey(), - "client_uid" + i); + this.client_uid); assertThat(timeSeries.getPoints(0).getValue().getInt64Value()).isEqualTo(i); assertThat(timeSeries.getPoints(0).getInterval().getStartTime().getNanos()) @@ -335,60 +355,131 @@ public void testExportingSumDataInBatches() { } @Test - public void getAggregationTemporality() throws IOException { - SpannerCloudMonitoringExporter actualExporter = - SpannerCloudMonitoringExporter.create(projectId, null, null); - assertThat(actualExporter.getAggregationTemporality(InstrumentType.COUNTER)) - .isEqualTo(AggregationTemporality.CUMULATIVE); - } - - @Test - public void testSkipExportingDataIfMissingInstanceId() throws IOException { - Attributes attributesWithoutInstanceId = - Attributes.builder().putAll(attributes).remove(INSTANCE_ID_KEY).build(); - - SpannerCloudMonitoringExporter actualExporter = - SpannerCloudMonitoringExporter.create(projectId, null, null); - assertThat(actualExporter.getAggregationTemporality(InstrumentType.COUNTER)) - .isEqualTo(AggregationTemporality.CUMULATIVE); + public void testExportingHistogramDataWithExemplars() { ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(CreateTimeSeriesRequest.class); - UnaryCallable mockCallable = Mockito.mock(UnaryCallable.class); - Mockito.when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable); + UnaryCallable mockCallable = mock(UnaryCallable.class); + when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable); ApiFuture future = ApiFutures.immediateFuture(Empty.getDefaultInstance()); - Mockito.when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future); + when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future); - long fakeValue = 11L; + long startEpoch = 10 * 1_000_000_000L; + long endEpoch = 15 * 1_000_000_000L; + long recordTimeEpoch = 12_123_456_789L; + + DoubleExemplarData exemplar = + ImmutableDoubleExemplarData.create( + Attributes.builder() + .put(XGoogSpannerRequestId.REQUEST_ID_HEADER_NAME, "test") + .put("lang", "java") + .build(), + recordTimeEpoch, + SpanContext.create( + "0123456789abcdef0123456789abcdef", + "0123456789abcdef", + TraceFlags.getSampled(), + TraceState.getDefault()), + 1.5); - long startEpoch = 10; - long endEpoch = 15; - LongPointData longPointData = - ImmutableLongPointData.create(startEpoch, endEpoch, attributesWithoutInstanceId, fakeValue); + HistogramPointData histogramPointData = + ImmutableHistogramPointData.create( + startEpoch, + endEpoch, + attributes, + 3d, + true, + 1d, + true, + 2d, + Collections.singletonList(1.0), + Arrays.asList(1L, 2L), + Collections.singletonList(exemplar) // ← add exemplar + ); - MetricData operationLongData = - ImmutableMetricData.createLongSum( + MetricData histogramData = + ImmutableMetricData.createDoubleHistogram( resource, scope, - "spanner.googleapis.com/internal/client/" + OPERATION_COUNT_NAME, + "spanner.googleapis.com/internal/client/" + OPERATION_LATENCIES_NAME, "description", - "1", - ImmutableSumData.create( - true, AggregationTemporality.CUMULATIVE, ImmutableList.of(longPointData))); + "ms", + ImmutableHistogramData.create( + AggregationTemporality.CUMULATIVE, ImmutableList.of(histogramPointData))); - MetricData attemptLongData = - ImmutableMetricData.createLongSum( - resource, - scope, - "spanner.googleapis.com/internal/client/" + ATTEMPT_COUNT_NAME, - "description", - "1", - ImmutableSumData.create( - true, AggregationTemporality.CUMULATIVE, ImmutableList.of(longPointData))); + exporter.export(Collections.singletonList(histogramData)); + assertFalse(exporter.lastExportSkippedData()); + + CreateTimeSeriesRequest request = argumentCaptor.getValue(); + TimeSeries timeSeries = request.getTimeSeriesList().get(0); + Distribution distribution = timeSeries.getPoints(0).getValue().getDistributionValue(); + + // Assert exemplar exists and has expected value + assertThat(distribution.getExemplarsCount()).isEqualTo(1); + Distribution.Exemplar exportedExemplar = distribution.getExemplars(0); + assertThat(exportedExemplar.getValue()).isEqualTo(1.5); + + // Assert timestamp mapping + assertThat(exportedExemplar.getTimestamp().getSeconds()) + .isEqualTo(recordTimeEpoch / 1_000_000_000L); + assertThat(exportedExemplar.getTimestamp().getNanos()) + .isEqualTo((int) (recordTimeEpoch % 1_000_000_000L)); + + // Assert attachments: SpanContext + boolean hasSpanAttachment = + exportedExemplar.getAttachmentsList().stream() + .anyMatch(any -> any.is(com.google.monitoring.v3.SpanContext.class)); + assertThat(hasSpanAttachment).isTrue(); + + // Assert attachments: DroppedLabels (filtered attributes) + List filterAttributes = + exportedExemplar.getAttachmentsList().stream() + .filter(any -> any.is(DroppedLabels.class)) + .map( + any -> { + try { + return any.unpack(DroppedLabels.class); + } catch (InvalidProtocolBufferException e) { + throw new RuntimeException("Failed to unpack SpanContext", e); + } + }) + .collect(Collectors.toList()); + + // Assert only 1 attachment is there with 1 label for request_id. + assertThat(filterAttributes.size()).isEqualTo(1); + assertThat(filterAttributes.get(0).getLabelCount()).isEqualTo(1); + assertThat(filterAttributes.get(0).containsLabel(XGoogSpannerRequestId.REQUEST_ID_HEADER_NAME)) + .isTrue(); + assertThat( + filterAttributes.get(0).getLabelOrThrow(XGoogSpannerRequestId.REQUEST_ID_HEADER_NAME)) + .isEqualTo("test"); + } + + @Test + public void getAggregationTemporality() throws IOException { + SpannerCloudMonitoringExporter actualExporter = + SpannerCloudMonitoringExporter.create(projectId, null, null, null); + assertThat(actualExporter.getAggregationTemporality(InstrumentType.COUNTER)) + .isEqualTo(AggregationTemporality.CUMULATIVE); + } + + @Test + public void testUniverseDomain() throws IOException { + SpannerCloudMonitoringExporter actualExporter = + SpannerCloudMonitoringExporter.create(projectId, null, null, "abc.goog"); + MetricServiceSettings metricServiceSettings = + actualExporter.getMetricServiceClient().getSettings(); + + assertEquals("abc.goog", metricServiceSettings.getUniverseDomain()); + assertEquals("monitoring.abc.goog:443", metricServiceSettings.getEndpoint()); + + actualExporter = + SpannerCloudMonitoringExporter.create( + projectId, null, "monitoringa.abc.goog:443", "abc.goog"); + metricServiceSettings = actualExporter.getMetricServiceClient().getSettings(); - CompletableResultCode resultCode = - exporter.export(Arrays.asList(operationLongData, attemptLongData)); - assertThat(resultCode).isEqualTo(CompletableResultCode.ofFailure()); + assertEquals("abc.goog", metricServiceSettings.getUniverseDomain()); + assertEquals("monitoringa.abc.goog:443", metricServiceSettings.getEndpoint()); } private static class FakeMetricServiceClient extends MetricServiceClient { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerExceptionFactoryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerExceptionFactoryTest.java index 2c4801bd0d7..55b9523d7db 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerExceptionFactoryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerExceptionFactoryTest.java @@ -225,7 +225,8 @@ public void apiExceptionSessionNotFound() { "NOT_FOUND: Session not found: projects/p/instances/i/databases/d/sessions/s", Status.NOT_FOUND .withDescription( - "NOT_FOUND: Session not found: projects/p/instances/i/databases/d/sessions/s") + "NOT_FOUND: Session not found:" + + " projects/p/instances/i/databases/d/sessions/s") .asRuntimeException( createResourceTypeMetadata( SpannerExceptionFactory.SESSION_RESOURCE_TYPE, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java index 8ce858e77d7..fc25832860a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java @@ -40,7 +40,6 @@ import io.grpc.StatusRuntimeException; import io.grpc.inprocess.InProcessServerBuilder; import io.grpc.protobuf.ProtoUtils; -import java.io.IOException; import java.time.Duration; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -111,7 +110,7 @@ public class SpannerGaxRetryTest { private DatabaseClient clientWithTimeout; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1AND2, SELECT1_RESULTSET)); @@ -151,8 +150,7 @@ public void setUp() throws Exception { // wait time is for multiplexed sessions if (sessionPoolOptions.getUseMultiplexedSession()) { sessionPoolOptions = - sessionPoolOptions - .toBuilder() + sessionPoolOptions.toBuilder() .setWaitForMinSessionsDuration(Duration.ofSeconds(5)) .build(); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java index 3cf13dc58d3..a675605e768 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java @@ -28,7 +28,6 @@ import com.google.cloud.NoCredentials; import com.google.cloud.ServiceRpc; import com.google.cloud.grpc.GrpcTransportOptions; -import com.google.cloud.spanner.SpannerException.DoNotConstructDirectly; import com.google.cloud.spanner.SpannerImpl.ClosedException; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; import com.google.cloud.spanner.admin.database.v1.stub.DatabaseAdminStub; @@ -45,7 +44,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -222,63 +220,6 @@ public void testSpannerClosed() { spanner4.close(); } - @Test - public void testClientId() { - // Create a unique database id to be sure it has not yet been used in the lifetime of this JVM. - String dbName = - String.format("projects/p1/instances/i1/databases/%s", UUID.randomUUID().toString()); - DatabaseId db = DatabaseId.of(dbName); - - Mockito.when(spannerOptions.getTransportOptions()) - .thenReturn(GrpcTransportOptions.newBuilder().build()); - Mockito.when(spannerOptions.getSessionPoolOptions()) - .thenReturn(SessionPoolOptions.newBuilder().setMinSessions(0).build()); - Mockito.when(spannerOptions.getDatabaseRole()).thenReturn("role"); - - DatabaseClientImpl databaseClient = (DatabaseClientImpl) impl.getDatabaseClient(db); - assertThat(databaseClient.clientId).isEqualTo("client-1"); - - // Get same db client again. - DatabaseClientImpl databaseClient1 = (DatabaseClientImpl) impl.getDatabaseClient(db); - assertThat(databaseClient1.clientId).isEqualTo(databaseClient.clientId); - - // Get a db client for a different database. - String dbName2 = - String.format("projects/p1/instances/i1/databases/%s", UUID.randomUUID().toString()); - DatabaseId db2 = DatabaseId.of(dbName2); - DatabaseClientImpl databaseClient2 = (DatabaseClientImpl) impl.getDatabaseClient(db2); - assertThat(databaseClient2.clientId).isEqualTo("client-1"); - - // Getting a new database client for an invalidated database should use the same client id. - databaseClient.pool.setResourceNotFoundException( - new DatabaseNotFoundException(DoNotConstructDirectly.ALLOWED, "not found", null, null)); - DatabaseClientImpl revalidated = (DatabaseClientImpl) impl.getDatabaseClient(db); - assertThat(revalidated).isNotSameInstanceAs(databaseClient); - assertThat(revalidated.clientId).isEqualTo(databaseClient.clientId); - - // Now invalidate the second client and request a new one. - revalidated.pool.setResourceNotFoundException( - new DatabaseNotFoundException(DoNotConstructDirectly.ALLOWED, "not found", null, null)); - DatabaseClientImpl revalidated2 = (DatabaseClientImpl) impl.getDatabaseClient(db); - assertThat(revalidated2).isNotSameInstanceAs(revalidated); - assertThat(revalidated2.clientId).isEqualTo(revalidated.clientId); - - // Create a new Spanner instance. This will generate new database clients with new ids. - try (Spanner spanner = - SpannerOptions.newBuilder() - .setProjectId("p1") - .setCredentials(NoCredentials.getInstance()) - .build() - .getService()) { - - // Get a database client for the same database as the first database. As this goes through a - // different Spanner instance with potentially different options, it will get a different - // client id. - DatabaseClientImpl databaseClient3 = (DatabaseClientImpl) spanner.getDatabaseClient(db); - assertThat(databaseClient3.clientId).isEqualTo("client-2"); - } - } - @Test public void testClosedException() { Spanner spanner = new SpannerImpl(rpc, spannerOptions); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerOptionsTest.java index cdab8e1df8b..759888a6673 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerOptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerOptionsTest.java @@ -37,6 +37,8 @@ import com.google.cloud.NoCredentials; import com.google.cloud.ServiceOptions; import com.google.cloud.TransportOptions; +import com.google.cloud.grpc.GcpManagedChannelOptions.GcpChannelPoolOptions; +import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions; import com.google.cloud.spanner.SpannerOptions.FixedCloseableExecutorProvider; import com.google.cloud.spanner.SpannerOptions.SpannerCallContextTimeoutConfigurator; import com.google.cloud.spanner.admin.database.v1.stub.DatabaseAdminStubSettings; @@ -61,6 +63,7 @@ import com.google.spanner.v1.ReadRequest; import com.google.spanner.v1.RollbackRequest; import com.google.spanner.v1.SpannerGrpc; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.sdk.OpenTelemetrySdk; @@ -738,7 +741,7 @@ public void testLeaderAwareRoutingEnablement() { @Test public void testEndToEndTracingEnablement() { - // Test that end to end tracing is disabled by default. + // Test that end-to-end tracing is disabled by default. assertFalse(SpannerOptions.newBuilder().setProjectId("p").build().isEndToEndTracingEnabled()); assertTrue( SpannerOptions.newBuilder() @@ -755,7 +758,7 @@ public void testEndToEndTracingEnablement() { } @Test - public void testmonitoringHost() { + public void testMonitoringHost() { String metricsEndpoint = "test-endpoint:443"; assertNull(SpannerOptions.newBuilder().setProjectId("p").build().getMonitoringHost()); assertThat( @@ -767,6 +770,24 @@ public void testmonitoringHost() { .isEqualTo(metricsEndpoint); } + @Test + public void testTransactionOptions() { + DefaultReadWriteTransactionOptions transactionOptions = + DefaultReadWriteTransactionOptions.newBuilder() + .setIsolationLevel(IsolationLevel.SERIALIZABLE) + .build(); + assertNotNull( + SpannerOptions.newBuilder().setProjectId("p").build().getDefaultTransactionOptions()); + assertThat( + SpannerOptions.newBuilder() + .setProjectId("p") + .setDefaultTransactionOptions(transactionOptions) + .build() + .getDefaultTransactionOptions() + .getIsolationLevel()) + .isEqualTo(IsolationLevel.SERIALIZABLE); + } + @Test public void testSetDirectedReadOptions() { final DirectedReadOptions directedReadOptions = @@ -1080,6 +1101,7 @@ public void testDefaultNumChannelsWithGrpcGcpExtensionDisabled() { SpannerOptions.newBuilder() .setProjectId("test-project") .setCredentials(NoCredentials.getInstance()) + .disableGrpcGcpExtension() .build(); assertEquals(SpannerOptions.DEFAULT_CHANNELS, options.getNumChannels()); @@ -1115,7 +1137,8 @@ public void testNumChannelsWithGrpcGcpExtensionEnabled() { @Test public void checkCreatedInstanceWhenGrpcGcpExtensionDisabled() { - SpannerOptions options = SpannerOptions.newBuilder().setProjectId("test-project").build(); + SpannerOptions options = + SpannerOptions.newBuilder().setProjectId("test-project").disableGrpcGcpExtension().build(); SpannerOptions options1 = options.toBuilder().build(); assertEquals(false, options.isGrpcGcpExtensionEnabled()); assertEquals(options.isGrpcGcpExtensionEnabled(), options1.isGrpcGcpExtensionEnabled()); @@ -1164,4 +1187,200 @@ public void checkGlobalOpenTelemetryWhenNotInjected() { .build(); assertEquals(GlobalOpenTelemetry.get(), options.getOpenTelemetry()); } + + @Test + public void testExperimentalHostOptions() { + SpannerOptions options = + SpannerOptions.newBuilder() + .setExperimentalHost("localhost:8080") + .setCredentials(NoCredentials.getInstance()) + .build(); + assertEquals("default", options.getProjectId()); + assertEquals(0, options.getSessionPoolOptions().getMinSessions()); + assertEquals(0, options.getSessionPoolOptions().getMaxSessions()); + assertTrue(options.getSessionPoolOptions().getUseMultiplexedSession()); + assertTrue(options.getSessionPoolOptions().getUseMultiplexedSessionForRW()); + assertTrue(options.getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps()); + } + + @Test + public void testDynamicChannelPoolingDisabledByDefault() { + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .build(); + assertFalse(options.isDynamicChannelPoolEnabled()); + } + + @Test + public void testDynamicChannelPoolingEnabledExplicitly() { + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .enableDynamicChannelPool() + .build(); + assertTrue(options.isDynamicChannelPoolEnabled()); + + // Verify Spanner-specific defaults are applied + GcpChannelPoolOptions poolOptions = options.getGcpChannelPoolOptions(); + assertNotNull(poolOptions); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_INITIAL_SIZE, poolOptions.getInitSize()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MAX_CHANNELS, poolOptions.getMaxSize()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MIN_CHANNELS, poolOptions.getMinSize()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MAX_RPC, poolOptions.getMaxRpcPerChannel()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MIN_RPC, poolOptions.getMinRpcPerChannel()); + assertEquals( + SpannerOptions.DEFAULT_DYNAMIC_POOL_SCALE_DOWN_INTERVAL, + poolOptions.getScaleDownInterval()); + } + + @Test + public void testDynamicChannelPoolingDisabledWhenNumChannelsSet() { + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .enableDynamicChannelPool() + .setNumChannels(5) // Explicitly setting numChannels should disable DCP. + .build(); + assertFalse(options.isDynamicChannelPoolEnabled()); + assertEquals(5, options.getNumChannels()); + } + + @Test + public void testDynamicChannelPoolingDisabledExplicitly() { + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .enableDynamicChannelPool() + .disableDynamicChannelPool() + .build(); + assertFalse(options.isDynamicChannelPoolEnabled()); + } + + @Test + public void testDynamicChannelPoolingCustomSettings() { + Duration scaleDownInterval = Duration.ofMinutes(5); + GcpChannelPoolOptions customPoolOptions = + GcpChannelPoolOptions.newBuilder() + .setInitSize(6) + .setMaxSize(15) + .setMinSize(3) + .setDynamicScaling(10, 50, scaleDownInterval) + .build(); + + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .enableDynamicChannelPool() + .setGcpChannelPoolOptions(customPoolOptions) + .build(); + + assertTrue(options.isDynamicChannelPoolEnabled()); + GcpChannelPoolOptions poolOptions = options.getGcpChannelPoolOptions(); + assertEquals(6, poolOptions.getInitSize()); + assertEquals(15, poolOptions.getMaxSize()); + assertEquals(3, poolOptions.getMinSize()); + assertEquals(50, poolOptions.getMaxRpcPerChannel()); + assertEquals(10, poolOptions.getMinRpcPerChannel()); + assertEquals(scaleDownInterval, poolOptions.getScaleDownInterval()); + } + + @Test + public void testAffinityKeySettings() { + Duration affinityKeyLifetime = Duration.ofMinutes(10); + Duration cleanupInterval = Duration.ofMinutes(5); + GcpChannelPoolOptions poolOptions = + GcpChannelPoolOptions.newBuilder() + .setAffinityKeyLifetime(affinityKeyLifetime) + .setCleanupInterval(cleanupInterval) + .build(); + + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .enableGrpcGcpExtension() + .setGcpChannelPoolOptions(poolOptions) + .build(); + + assertEquals(affinityKeyLifetime, options.getGcpChannelPoolOptions().getAffinityKeyLifetime()); + assertEquals(cleanupInterval, options.getGcpChannelPoolOptions().getCleanupInterval()); + } + + @Test + public void testAffinityKeySettingsDefaults() { + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .enableGrpcGcpExtension() + .build(); + + // Verify default affinity key settings from Spanner defaults + GcpChannelPoolOptions poolOptions = options.getGcpChannelPoolOptions(); + assertEquals( + SpannerOptions.DEFAULT_DYNAMIC_POOL_AFFINITY_KEY_LIFETIME, + poolOptions.getAffinityKeyLifetime()); + assertEquals( + SpannerOptions.DEFAULT_DYNAMIC_POOL_CLEANUP_INTERVAL, poolOptions.getCleanupInterval()); + } + + @Test + public void testDynamicChannelPoolingDisabledWhenGrpcGcpDisabled() { + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .disableGrpcGcpExtension() + .build(); + // DCP should be disabled when grpc-gcp is disabled. + assertFalse(options.isDynamicChannelPoolEnabled()); + } + + @Test + public void testCreateDefaultDynamicChannelPoolOptions() { + // Test the static factory method for creating default options + GcpChannelPoolOptions defaults = SpannerOptions.createDefaultDynamicChannelPoolOptions(); + assertNotNull(defaults); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MAX_CHANNELS, defaults.getMaxSize()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MIN_CHANNELS, defaults.getMinSize()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_INITIAL_SIZE, defaults.getInitSize()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MAX_RPC, defaults.getMaxRpcPerChannel()); + assertEquals(SpannerOptions.DEFAULT_DYNAMIC_POOL_MIN_RPC, defaults.getMinRpcPerChannel()); + assertEquals( + SpannerOptions.DEFAULT_DYNAMIC_POOL_SCALE_DOWN_INTERVAL, defaults.getScaleDownInterval()); + assertEquals( + SpannerOptions.DEFAULT_DYNAMIC_POOL_AFFINITY_KEY_LIFETIME, + defaults.getAffinityKeyLifetime()); + assertEquals( + SpannerOptions.DEFAULT_DYNAMIC_POOL_CLEANUP_INTERVAL, defaults.getCleanupInterval()); + } + + @Test + public void testPlainTextOptions() { + SpannerOptions options = + SpannerOptions.newBuilder().setExperimentalHost("localhost:8080").usePlainText().build(); + assertEquals("http://localhost:8080", options.getHost()); + assertEquals(NoCredentials.getInstance(), options.getCredentials()); + options = + SpannerOptions.newBuilder() + .setExperimentalHost("http://localhost:8080") + .usePlainText() + .build(); + assertEquals("http://localhost:8080", options.getHost()); + options = + SpannerOptions.newBuilder().usePlainText().setExperimentalHost("localhost:8080").build(); + assertEquals("http://localhost:8080", options.getHost()); + options = + SpannerOptions.newBuilder() + .usePlainText() + .setExperimentalHost("http://localhost:8080") + .build(); + assertEquals("http://localhost:8080", options.getHost()); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java index 919eedf6071..9b6ffaf19ca 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java @@ -36,7 +36,6 @@ import com.google.spanner.v1.StructType.Field; import io.grpc.*; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.*; import java.util.concurrent.TimeUnit; @@ -88,9 +87,10 @@ public class SpannerThreadsTest { private static InetSocketAddress address; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { assumeTrue( - "Skip tests when emulator is enabled as this test interferes with the check whether the emulator is running", + "Skip tests when emulator is enabled as this test interferes with the check whether the" + + " emulator is running", System.getenv("SPANNER_EMULATOR_HOST") == null); mockSpanner = new MockSpannerServiceImpl(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java index 4fce617a15e..83255fcf3af 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java @@ -31,7 +31,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; /** Standard mock server used for benchmarking. */ class StandardBenchmarkMockServer { @@ -83,7 +82,7 @@ class StandardBenchmarkMockServer { private Server server; private LocalChannelProvider channelProvider; - TransportChannelProvider start() throws IOException { + TransportChannelProvider start() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StatementTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StatementTest.java index d5b5a3ec619..e4a036673bc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StatementTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StatementTest.java @@ -18,6 +18,8 @@ import static com.google.common.testing.SerializableTester.reserializeAndAssert; 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; import static org.junit.Assert.assertThrows; @@ -42,6 +44,17 @@ public void basic() { reserializeAndAssert(stmt); } + @Test + public void basicWithParameters() { + String sql = "SELECT @name"; + Statement stmt = Statement.of(sql, ImmutableMap.of("name", Value.string("hello"))); + assertEquals(sql, stmt.getSql()); + assertFalse(stmt.getParameters().isEmpty()); + assertEquals(Value.string("hello"), stmt.getParameters().get("name")); + assertEquals(sql + " {name: hello}", stmt.toString()); + reserializeAndAssert(stmt); + } + @Test public void serialization() { Statement stmt = diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StructTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StructTest.java index d357a14f9d0..55d066e165e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StructTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StructTest.java @@ -57,6 +57,48 @@ public void builder() { assertThat(struct.getLong(1)).isEqualTo(2); } + @Test + public void getOrNullTests() { + Struct struct = + Struct.newBuilder() + .set("f1") + .to("x") + .set("f2") + .to(2) + .set("f3") + .to(Value.bool(null)) + .build(); + String column1 = struct.getOrNull(0, StructReader::getString); + assertThat(column1).isEqualTo("x"); + + Long column2 = struct.getOrNull(1, StructReader::getLong); + assertThat(column2).isEqualTo(2); + + String column3 = struct.getOrNull("f3", StructReader::getString); + assertThat(column3).isNull(); + } + + @Test + public void getOrDefaultTests() { + Struct struct = + Struct.newBuilder() + .set("f1") + .to("x") + .set("f2") + .to(2) + .set("f3") + .to(Value.bool(null)) + .build(); + String column1 = struct.getOrDefault(0, StructReader::getString, ""); + assertThat(column1).isEqualTo("x"); + + Long column2 = struct.getOrDefault("f2", StructReader::getLong, -1L); + assertThat(column2).isEqualTo(2); + + String column3 = struct.getOrDefault(2, StructReader::getString, ""); + assertThat(column3).isEqualTo(""); + } + @Test public void duplicateFields() { // Duplicate fields are allowed - some SQL queries produce this type of value. diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TestHelper.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TestHelper.java new file mode 100644 index 00000000000..eb72238e8a5 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TestHelper.java @@ -0,0 +1,25 @@ +/* + * 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.spanner; + +class TestHelper { + + static boolean isMultiplexSessionDisabled() { + return System.getenv() + .getOrDefault("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS", "") + .equalsIgnoreCase("false"); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java index bd346c4f18b..cdb0039ccd5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java @@ -20,30 +20,29 @@ import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_RESULTSET; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_STATEMENT; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_TABLE_NAME; -import static io.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import com.google.api.gax.grpc.GrpcInterceptorProvider; import com.google.cloud.NoCredentials; +import com.google.cloud.grpc.GcpManagedChannel; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.cloud.spanner.Options.RpcPriority; import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; +import com.google.common.collect.ImmutableList; import com.google.protobuf.ListValue; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.SpannerGrpc; import com.google.spanner.v1.StructType; import com.google.spanner.v1.StructType.Field; import com.google.spanner.v1.TypeCode; -import io.grpc.Attributes; -import io.grpc.Context; -import io.grpc.Contexts; -import io.grpc.Metadata; +import io.grpc.CallOptions; +import io.grpc.Channel; +import io.grpc.ClientCall; +import io.grpc.ClientInterceptor; +import io.grpc.MethodDescriptor; import io.grpc.Server; -import io.grpc.ServerCall; -import io.grpc.ServerCallHandler; -import io.grpc.ServerInterceptor; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -62,7 +61,8 @@ * transaction, they go via same channel. For regular session, the hint is stored per session. For * multiplexed sessions this hint is stored per transaction. * - *

                                The below tests assert this behavior for both kinds of sessions. + *

                                The below tests assert this behavior by verifying that all operations within a transaction use + * the same channel hint (extracted from the X-Goog-Spanner-Request-Id header). */ @RunWith(JUnit4.class) public class TransactionChannelHintTest { @@ -94,14 +94,15 @@ public class TransactionChannelHintTest { private static MockSpannerServiceImpl mockSpanner; private static Server server; private static InetSocketAddress address; - private static final Set executeSqlLocalIps = ConcurrentHashMap.newKeySet(); - private static final Set beginTransactionLocalIps = - ConcurrentHashMap.newKeySet(); - private static final Set streamingReadLocalIps = ConcurrentHashMap.newKeySet(); + // Track logical affinity keys (before grpc-gcp routing) per RPC method. + // These are captured by a client interceptor to verify channel affinity consistency. + private static final Set executeSqlAffinityKeys = ConcurrentHashMap.newKeySet(); + private static final Set beginTransactionAffinityKeys = ConcurrentHashMap.newKeySet(); + private static final Set streamingReadAffinityKeys = ConcurrentHashMap.newKeySet(); private static Level originalLogLevel; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1, SELECT1_RESULTSET)); @@ -109,44 +110,40 @@ public static void startServer() throws IOException { StatementResult.query(READ_ONE_KEY_VALUE_STATEMENT, READ_ONE_KEY_VALUE_RESULTSET)); address = new InetSocketAddress("localhost", 0); - server = - NettyServerBuilder.forAddress(address) - .addService(mockSpanner) - // Add a server interceptor to register the remote addresses that we are seeing. This - // indicates how many channels are used client side to communicate with the server. - .intercept( - new ServerInterceptor() { - @Override - public ServerCall.Listener interceptCall( - ServerCall call, - Metadata headers, - ServerCallHandler next) { - Attributes attributes = call.getAttributes(); - @SuppressWarnings({"unchecked", "deprecation"}) - Attributes.Key key = - (Attributes.Key) - attributes.keys().stream() - .filter(k -> k.equals(TRANSPORT_ATTR_REMOTE_ADDR)) - .findFirst() - .orElse(null); - if (key != null) { - if (call.getMethodDescriptor() - .equals(SpannerGrpc.getExecuteStreamingSqlMethod())) { - executeSqlLocalIps.add(attributes.get(key)); - } - if (call.getMethodDescriptor().equals(SpannerGrpc.getStreamingReadMethod())) { - streamingReadLocalIps.add(attributes.get(key)); - } - if (call.getMethodDescriptor() - .equals(SpannerGrpc.getBeginTransactionMethod())) { - beginTransactionLocalIps.add(attributes.get(key)); - } - } - return Contexts.interceptCall(Context.current(), call, headers, next); + server = NettyServerBuilder.forAddress(address).addService(mockSpanner).build().start(); + } + + /** + * Creates a client interceptor that captures the logical affinity key before grpc-gcp routes the + * request. This allows us to verify that all operations within a transaction use the same logical + * channel affinity, even though the physical channel ID may vary. + */ + private static GrpcInterceptorProvider createAffinityKeyInterceptorProvider() { + return () -> + ImmutableList.of( + new ClientInterceptor() { + @Override + public ClientCall interceptCall( + MethodDescriptor method, CallOptions callOptions, Channel next) { + // Capture the AFFINITY_KEY before grpc-gcp processes it + String affinityKey = callOptions.getOption(GcpManagedChannel.AFFINITY_KEY); + if (affinityKey != null) { + String methodName = method.getFullMethodName(); + if (methodName.equals( + SpannerGrpc.getExecuteStreamingSqlMethod().getFullMethodName())) { + executeSqlAffinityKeys.add(affinityKey); + } + if (methodName.equals(SpannerGrpc.getStreamingReadMethod().getFullMethodName())) { + streamingReadAffinityKeys.add(affinityKey); + } + if (methodName.equals( + SpannerGrpc.getBeginTransactionMethod().getFullMethodName())) { + beginTransactionAffinityKeys.add(affinityKey); } - }) - .build() - .start(); + } + return next.newCall(method, callOptions); + } + }); } @AfterClass @@ -171,9 +168,9 @@ public static void resetLogging() { @After public void reset() { mockSpanner.reset(); - executeSqlLocalIps.clear(); - streamingReadLocalIps.clear(); - beginTransactionLocalIps.clear(); + executeSqlAffinityKeys.clear(); + streamingReadAffinityKeys.clear(); + beginTransactionAffinityKeys.clear(); } private SpannerOptions createSpannerOptions() { @@ -188,22 +185,26 @@ private SpannerOptions createSpannerOptions() { .setCompressorName("gzip") .setHost("http://" + endpoint) .setCredentials(NoCredentials.getInstance()) + .setInterceptorProvider(createAffinityKeyInterceptorProvider()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder().setSkipVerifyingBeginTransactionForMuxRW(true).build()) .build(); } @Test - public void testSingleUseReadOnlyTransaction_usesSingleChannel() { + public void testSingleUseReadOnlyTransaction_usesSingleChannelHint() { try (Spanner spanner = createSpannerOptions().getService()) { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); try (ResultSet resultSet = client.singleUseReadOnlyTransaction().executeQuery(SELECT1)) { while (resultSet.next()) {} } } - assertEquals(1, executeSqlLocalIps.size()); + // All ExecuteSql calls should use the same logical affinity key + assertEquals(1, executeSqlAffinityKeys.size()); } @Test - public void testSingleUseReadOnlyTransaction_withTimestampBound_usesSingleChannel() { + public void testSingleUseReadOnlyTransaction_withTimestampBound_usesSingleChannelHint() { try (Spanner spanner = createSpannerOptions().getService()) { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); try (ResultSet resultSet = @@ -213,11 +214,12 @@ public void testSingleUseReadOnlyTransaction_withTimestampBound_usesSingleChanne while (resultSet.next()) {} } } - assertEquals(1, executeSqlLocalIps.size()); + // All ExecuteSql calls should use the same logical affinity key + assertEquals(1, executeSqlAffinityKeys.size()); } @Test - public void testReadOnlyTransaction_usesSingleChannel() { + public void testReadOnlyTransaction_usesSingleChannelHint() { try (Spanner spanner = createSpannerOptions().getService()) { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); try (ReadOnlyTransaction transaction = client.readOnlyTransaction()) { @@ -229,13 +231,14 @@ public void testReadOnlyTransaction_usesSingleChannel() { } } } - assertEquals(1, executeSqlLocalIps.size()); - assertEquals(1, beginTransactionLocalIps.size()); - assertEquals(executeSqlLocalIps, beginTransactionLocalIps); + // All ExecuteSql calls within the transaction should use the same logical affinity key + assertEquals(1, executeSqlAffinityKeys.size()); + // BeginTransaction should use a single logical affinity key + assertEquals(1, beginTransactionAffinityKeys.size()); } @Test - public void testReadOnlyTransaction_withTimestampBound_usesSingleChannel() { + public void testReadOnlyTransaction_withTimestampBound_usesSingleChannelHint() { try (Spanner spanner = createSpannerOptions().getService()) { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); try (ReadOnlyTransaction transaction = @@ -248,13 +251,14 @@ public void testReadOnlyTransaction_withTimestampBound_usesSingleChannel() { } } } - assertEquals(1, executeSqlLocalIps.size()); - assertEquals(1, beginTransactionLocalIps.size()); - assertEquals(executeSqlLocalIps, beginTransactionLocalIps); + // All ExecuteSql calls within the transaction should use the same logical affinity key + assertEquals(1, executeSqlAffinityKeys.size()); + // BeginTransaction should use a single logical affinity key + assertEquals(1, beginTransactionAffinityKeys.size()); } @Test - public void testTransactionManager_usesSingleChannel() { + public void testTransactionManager_usesSingleChannelHint() { try (Spanner spanner = createSpannerOptions().getService()) { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); try (TransactionManager manager = client.transactionManager()) { @@ -279,11 +283,12 @@ public void testTransactionManager_usesSingleChannel() { } } } - assertEquals(1, executeSqlLocalIps.size()); + // All ExecuteSql calls within the transaction should use the same logical affinity key + assertEquals(1, executeSqlAffinityKeys.size()); } @Test - public void testTransactionRunner_usesSingleChannel() { + public void testTransactionRunner_usesSingleChannelHint() { try (Spanner spanner = createSpannerOptions().getService()) { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); TransactionRunner runner = client.readWriteTransaction(); @@ -309,6 +314,7 @@ public void testTransactionRunner_usesSingleChannel() { return null; }); } - assertEquals(1, streamingReadLocalIps.size()); + // All StreamingRead calls within the transaction should use the same logical affinity key + assertEquals(1, streamingReadAffinityKeys.size()); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionContextImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionContextImplTest.java index 561bfb89008..49a47364a58 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionContextImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionContextImplTest.java @@ -27,6 +27,7 @@ import com.google.api.core.ApiFutures; import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; +import com.google.cloud.spanner.XGoogSpannerRequestId.NoopRequestIdCreator; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import com.google.protobuf.ByteString; @@ -66,7 +67,13 @@ public void setup() { com.google.spanner.v1.CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().setSeconds(99L).setNanos(10).build()) .build())); + when(rpc.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); when(session.getName()).thenReturn("test"); + when(session.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions spannerOptions = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(spannerOptions); + when(session.getSpanner()).thenReturn(spanner); doNothing().when(span).setStatus(any(Throwable.class)); doNothing().when(span).end(); doNothing().when(span).addAnnotation("Starting Commit"); @@ -210,6 +217,11 @@ public void testReturnCommitStats() { private void batchDml(int status) { SessionImpl session = mock(SessionImpl.class); when(session.getName()).thenReturn("test"); + when(session.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions spannerOptions = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(spannerOptions); + when(session.getSpanner()).thenReturn(spanner); SpannerRpc rpc = mock(SpannerRpc.class); ExecuteBatchDmlResponse response = ExecuteBatchDmlResponse.newBuilder() diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java index a437b41ddb4..ae24eeb7696 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java @@ -35,7 +35,6 @@ import com.google.spanner.v1.TypeCode; import io.grpc.Server; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -127,7 +126,7 @@ public class TransactionManagerAbortedTest { private static Spanner spanner; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerImplTest.java index 10b13125152..547f6b70a22 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerImplTest.java @@ -49,6 +49,7 @@ import com.google.spanner.v1.ResultSetStats; import com.google.spanner.v1.Session; import com.google.spanner.v1.Transaction; +import com.google.spanner.v1.TransactionOptions; import io.opentelemetry.api.OpenTelemetry; import java.util.Collections; import java.util.UUID; @@ -207,6 +208,8 @@ public void commitAfterRollbackFails() { public void usesPreparedTransaction() { SpannerOptions options = mock(SpannerOptions.class); when(options.getNumChannels()).thenReturn(4); + when(options.getDefaultTransactionOptions()) + .thenReturn(TransactionOptions.getDefaultInstance()); GrpcTransportOptions transportOptions = mock(GrpcTransportOptions.class); when(transportOptions.getExecutorFactory()).thenReturn(new TestExecutorFactory()); when(options.getTransportOptions()).thenReturn(transportOptions); @@ -234,6 +237,21 @@ public void usesPreparedTransaction() { com.google.protobuf.Timestamp.newBuilder() .setSeconds(System.currentTimeMillis() * 1000)) .build())); + when(rpc.createSession( + Mockito.anyString(), + Mockito.anyString(), + Mockito.anyMap(), + Mockito.eq(null), + Mockito.eq(true))) + .thenAnswer( + invocation -> + Session.newBuilder() + .setName(invocation.getArguments()[0] + "/sessions/1") + .setMultiplexed(true) + .setCreateTime( + com.google.protobuf.Timestamp.newBuilder() + .setSeconds(System.currentTimeMillis() * 1000)) + .build()); when(rpc.beginTransactionAsync( Mockito.any(BeginTransactionRequest.class), Mockito.anyMap(), eq(true))) .thenAnswer( @@ -273,6 +291,8 @@ public void inlineBegin() { when(options.getNumChannels()).thenReturn(4); GrpcTransportOptions transportOptions = mock(GrpcTransportOptions.class); when(transportOptions.getExecutorFactory()).thenReturn(new TestExecutorFactory()); + when(options.getDefaultTransactionOptions()) + .thenReturn(TransactionOptions.getDefaultInstance()); when(options.getTransportOptions()).thenReturn(transportOptions); SessionPoolOptions sessionPoolOptions = SessionPoolOptions.newBuilder().setMinSessions(0).setIncStep(1).build(); @@ -300,6 +320,21 @@ public void inlineBegin() { com.google.protobuf.Timestamp.newBuilder() .setSeconds(System.currentTimeMillis() * 1000)) .build())); + when(rpc.createSession( + Mockito.anyString(), + Mockito.anyString(), + Mockito.anyMap(), + Mockito.eq(null), + Mockito.eq(true))) + .thenAnswer( + invocation -> + Session.newBuilder() + .setName(invocation.getArguments()[0] + "/sessions/1") + .setMultiplexed(true) + .setCreateTime( + com.google.protobuf.Timestamp.newBuilder() + .setSeconds(System.currentTimeMillis() * 1000)) + .build()); when(rpc.beginTransactionAsync( Mockito.any(BeginTransactionRequest.class), Mockito.anyMap(), eq(true))) .thenAnswer( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java index 1fd6817ea96..1dd2418aa05 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java @@ -23,7 +23,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -36,6 +35,7 @@ import com.google.cloud.spanner.ErrorHandler.DefaultErrorHandler; import com.google.cloud.spanner.SessionClient.SessionId; import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; +import com.google.cloud.spanner.XGoogSpannerRequestId.NoopRequestIdCreator; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import com.google.common.base.Preconditions; @@ -52,12 +52,14 @@ import com.google.spanner.v1.ExecuteBatchDmlResponse; import com.google.spanner.v1.ExecuteSqlRequest; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; +import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.ResultSet; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.ResultSetStats; import com.google.spanner.v1.RollbackRequest; import com.google.spanner.v1.Session; import com.google.spanner.v1.Transaction; +import com.google.spanner.v1.TransactionOptions; import io.grpc.Metadata; import io.grpc.Status; import io.grpc.StatusRuntimeException; @@ -77,6 +79,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @@ -120,6 +123,12 @@ public void setUp() { when(session.getErrorHandler()).thenReturn(DefaultErrorHandler.INSTANCE); when(session.newTransaction(eq(Options.fromTransactionOptions()), any())).thenReturn(txn); when(session.getTracer()).thenReturn(tracer); + when(session.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); + when(rpc.getRequestIdCreator()).thenReturn(NoopRequestIdCreator.INSTANCE); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions spannerOptions = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(spannerOptions); + when(session.getSpanner()).thenReturn(spanner); when(rpc.executeQuery(Mockito.any(ExecuteSqlRequest.class), Mockito.anyMap(), eq(true))) .thenAnswer( invocation -> { @@ -155,11 +164,44 @@ public void setUp() { transactionRunner.setSpan(span); } + @Test + public void testCommitWithClientContext() { + RequestOptions.ClientContext clientContext = + RequestOptions.ClientContext.newBuilder() + .putSecureContext( + "key", com.google.protobuf.Value.newBuilder().setStringValue("value").build()) + .build(); + when(session.getName()).thenReturn("projects/p/instances/i/databases/d/sessions/s"); + when(session.newTransaction(any(Options.class), any())).thenReturn(txn); + Mockito.clearInvocations(session); + transactionRunner = + new TransactionRunnerImpl( + session, + Options.priority(Options.RpcPriority.HIGH), + Options.tag("tag"), + Options.clientContext(clientContext)); + transactionRunner.setSpan(span); + + transactionRunner.run( + transaction -> { + return null; + }); + + ArgumentCaptor optionsCaptor = ArgumentCaptor.forClass(Options.class); + verify(session).newTransaction(optionsCaptor.capture(), any()); + Options capturedOptions = optionsCaptor.getValue(); + assertEquals(RequestOptions.Priority.PRIORITY_HIGH, capturedOptions.priority()); + assertEquals("tag", capturedOptions.tag()); + assertEquals(clientContext, capturedOptions.clientContext()); + } + @SuppressWarnings("unchecked") @Test public void usesPreparedTransaction() { SpannerOptions options = mock(SpannerOptions.class); when(options.getNumChannels()).thenReturn(4); + when(options.getDefaultTransactionOptions()) + .thenReturn(TransactionOptions.getDefaultInstance()); GrpcTransportOptions transportOptions = mock(GrpcTransportOptions.class); when(transportOptions.getExecutorFactory()).thenReturn(new TestExecutorFactory()); when(options.getTransportOptions()).thenReturn(transportOptions); @@ -186,6 +228,21 @@ public void usesPreparedTransaction() { .setCreateTime( Timestamp.newBuilder().setSeconds(System.currentTimeMillis() * 1000)) .build())); + when(rpc.createSession( + Mockito.anyString(), + Mockito.anyString(), + Mockito.anyMap(), + Mockito.eq(null), + Mockito.eq(true))) + .thenAnswer( + invocation -> + Session.newBuilder() + .setName(invocation.getArguments()[0] + "/sessions/1") + .setMultiplexed(true) + .setCreateTime( + com.google.protobuf.Timestamp.newBuilder() + .setSeconds(System.currentTimeMillis() * 1000)) + .build()); when(rpc.beginTransactionAsync( Mockito.any(BeginTransactionRequest.class), Mockito.anyMap(), eq(true))) .thenAnswer( @@ -301,7 +358,8 @@ public void batchDmlFailedPrecondition() { public void inlineBegin() { SpannerImpl spanner = mock(SpannerImpl.class); SpannerOptions options = mock(SpannerOptions.class); - + when(options.getDefaultTransactionOptions()) + .thenReturn(TransactionOptions.getDefaultInstance()); when(spanner.getRpc()).thenReturn(rpc); when(spanner.getDefaultQueryOptions(Mockito.any(DatabaseId.class))) .thenReturn(QueryOptions.getDefaultInstance()); @@ -314,7 +372,7 @@ public void inlineBegin() { new SessionImpl( spanner, new SessionReference( - "projects/p/instances/i/databases/d/sessions/s", Collections.EMPTY_MAP)) {}; + "projects/p/instances/i/databases/d/sessions/s", null, Collections.EMPTY_MAP)) {}; session.setCurrentSpan(new OpenTelemetrySpan(mock(io.opentelemetry.api.trace.Span.class))); TransactionRunnerImpl runner = new TransactionRunnerImpl(session); runner.setSpan(span); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java index aea799aa158..8fc168eae96 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java @@ -240,6 +240,26 @@ Type newType() { }.test(); } + @Test + public void uuid() { + new ScalarTypeTester(Type.Code.UUID, TypeCode.UUID) { + @Override + Type newType() { + return Type.uuid(); + } + }.test(); + } + + @Test + public void interval() { + new ScalarTypeTester(Code.INTERVAL, TypeCode.INTERVAL) { + @Override + Type newType() { + return Type.interval(); + } + }.test(); + } + abstract static class ArrayTypeTester { private final Type.Code expectedElementCode; private final TypeCode expectedElementTypeCode; @@ -428,6 +448,26 @@ Type newElementType() { }.test(); } + @Test + public void uuidArray() { + new ArrayTypeTester(Type.Code.UUID, TypeCode.UUID, true) { + @Override + Type newElementType() { + return Type.uuid(); + } + }.test(); + } + + @Test + public void intervalArray() { + new ArrayTypeTester(Type.Code.INTERVAL, TypeCode.INTERVAL, true) { + @Override + Type newElementType() { + return Type.interval(); + } + }.test(); + } + @Test public void protoArray() { new ArrayTypeTester(Type.Code.PROTO, TypeCode.PROTO, "com.google.temp", false) { @@ -615,6 +655,8 @@ public void testGoogleSQLTypeNames() { assertEquals("STRING", Type.string().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); assertEquals("BYTES", Type.bytes().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); assertEquals("DATE", Type.date().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); + assertEquals("UUID", Type.uuid().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); + assertEquals("INTERVAL", Type.interval().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); assertEquals("TIMESTAMP", Type.timestamp().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); assertEquals("JSON", Type.json().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); assertEquals("NUMERIC", Type.numeric().getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); @@ -632,6 +674,11 @@ public void testGoogleSQLTypeNames() { "ARRAY", Type.array(Type.bytes()).getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); assertEquals( "ARRAY", Type.array(Type.date()).getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); + assertEquals( + "ARRAY", Type.array(Type.uuid()).getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); + assertEquals( + "ARRAY", + Type.array(Type.interval()).getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); assertEquals( "ARRAY", Type.array(Type.timestamp()).getSpannerTypeName(Dialect.GOOGLE_STANDARD_SQL)); @@ -650,6 +697,8 @@ public void testPostgreSQLTypeNames() { assertEquals("character varying", Type.string().getSpannerTypeName(Dialect.POSTGRESQL)); assertEquals("bytea", Type.bytes().getSpannerTypeName(Dialect.POSTGRESQL)); assertEquals("date", Type.date().getSpannerTypeName(Dialect.POSTGRESQL)); + assertEquals("uuid", Type.uuid().getSpannerTypeName(Dialect.POSTGRESQL)); + assertEquals("interval", Type.interval().getSpannerTypeName(Dialect.POSTGRESQL)); assertEquals( "timestamp with time zone", Type.timestamp().getSpannerTypeName(Dialect.POSTGRESQL)); assertEquals("jsonb", Type.pgJsonb().getSpannerTypeName(Dialect.POSTGRESQL)); @@ -663,6 +712,8 @@ public void testPostgreSQLTypeNames() { "character varying[]", Type.array(Type.string()).getSpannerTypeName(Dialect.POSTGRESQL)); assertEquals("bytea[]", Type.array(Type.bytes()).getSpannerTypeName(Dialect.POSTGRESQL)); assertEquals("date[]", Type.array(Type.date()).getSpannerTypeName(Dialect.POSTGRESQL)); + assertEquals("uuid[]", Type.array(Type.uuid()).getSpannerTypeName(Dialect.POSTGRESQL)); + assertEquals("interval[]", Type.array(Type.interval()).getSpannerTypeName(Dialect.POSTGRESQL)); assertEquals( "timestamp with time zone[]", Type.array(Type.timestamp()).getSpannerTypeName(Dialect.POSTGRESQL)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueBinderTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueBinderTest.java index 23128ad52b2..d85f816f147 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueBinderTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueBinderTest.java @@ -36,10 +36,12 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.math.BigDecimal; +import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Base64; import java.util.Collections; +import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -331,6 +333,14 @@ public static Date defaultDate() { return Date.fromYearMonthDay(2016, 9, 15); } + public static UUID defaultUuid() { + return UUID.fromString("db09330e-cc05-472c-a54e-b2784deebac3"); + } + + public static Interval defaultInterval() { + return Interval.parseFromString("P0Y"); + } + public static boolean[] defaultBooleanArray() { return new boolean[] {false, true}; } @@ -388,6 +398,39 @@ public static Iterable defaultDateIterable() { return Arrays.asList(Date.fromYearMonthDay(2016, 9, 15), Date.fromYearMonthDay(2016, 9, 14)); } + public static Iterable defaultUuidIterable() { + return Arrays.asList( + UUID.fromString("8ebe9153-2747-4c92-a462-6da13eb25ebb"), + UUID.fromString("12c154ca-6500-4be0-89c8-160bcfa8c3f6")); + } + + public static Interval[] defaultIntervalArray() { + return new Interval[] { + Interval.builder() + .setMonths(-10) + .setDays(-100) + .setNanos(BigInteger.valueOf(-9999999L)) + .build(), + Interval.parseFromString("P0Y"), + Interval.builder().setMonths(10).setDays(100).setNanos(BigInteger.valueOf(9999999L)).build() + }; + } + + public static Iterable defaultIntervalIterable() { + return Arrays.asList( + Interval.builder() + .setMonths(-10) + .setDays(-100) + .setNanos(BigInteger.valueOf(-9999999L)) + .build(), + Interval.parseFromString("P0Y"), + Interval.builder() + .setMonths(10) + .setDays(100) + .setNanos(BigInteger.valueOf(9999999L)) + .build()); + } + static Object getDefault(java.lang.reflect.Type type) throws InvocationTargetException, IllegalAccessException { for (Method method : DefaultValues.class.getMethods()) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java index 92b63913fdb..17f31434f76 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java @@ -42,15 +42,29 @@ import com.google.common.testing.EqualsTester; import com.google.protobuf.ListValue; import com.google.protobuf.NullValue; +import com.google.protobuf.ProtocolMessageEnum; +import com.google.spanner.v1.PartialResultSet; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import java.io.Serializable; import java.math.BigDecimal; +import java.math.BigInteger; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Random; +import java.util.Set; +import java.util.TimeZone; +import java.util.UUID; import java.util.function.Supplier; import java.util.stream.Collectors; import org.junit.Test; @@ -80,6 +94,8 @@ public void untyped() { assertNull(v.getType()); assertFalse(v.isNull()); assertSame(proto, v.toProto()); + assertNotEquals(0, v.hashCode()); + assertEquals(v, Value.untyped(proto)); assertEquals( v, Value.untyped(com.google.protobuf.Value.newBuilder().setStringValue("test").build())); @@ -552,7 +568,11 @@ public void jsonWithArray() { @Test public void jsonNested() { String json = - "[{\"id\":\"0001\",\"type\":\"donut\",\"name\":\"Cake\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"},{\"id\":\"1003\",\"type\":\"Blueberry\"},{\"id\":\"1004\",\"type\":\"Devil's Food\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5007\",\"type\":\"Powdered Sugar\"},{\"id\":\"5006\",\"type\":\"Chocolate with Sprinkles\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0002\",\"type\":\"donut\",\"name\":\"Raised\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0003\",\"type\":\"donut\",\"name\":\"Old Fashioned\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]}]"; + "[{\"id\":\"0001\",\"type\":\"donut\",\"name\":\"Cake\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"},{\"id\":\"1003\",\"type\":\"Blueberry\"},{\"id\":\"1004\",\"type\":\"Devil's" + + " Food\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5007\",\"type\":\"Powdered" + + " Sugar\"},{\"id\":\"5006\",\"type\":\"Chocolate with" + + " Sprinkles\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0002\",\"type\":\"donut\",\"name\":\"Raised\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0003\",\"type\":\"donut\",\"name\":\"Old" + + " Fashioned\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]}]"; Value v = Value.json(json); assertEquals(json, v.getJson()); assertEquals(json, v.getAsString()); @@ -608,7 +628,11 @@ public void testPgJsonbWithArray() { @Test public void testPgJsonbNested() { String json = - "[{\"id\":\"0001\",\"type\":\"donut\",\"name\":\"Cake\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"},{\"id\":\"1003\",\"type\":\"Blueberry\"},{\"id\":\"1004\",\"type\":\"Devil's Food\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5007\",\"type\":\"Powdered Sugar\"},{\"id\":\"5006\",\"type\":\"Chocolate with Sprinkles\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0002\",\"type\":\"donut\",\"name\":\"Raised\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0003\",\"type\":\"donut\",\"name\":\"Old Fashioned\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]}]"; + "[{\"id\":\"0001\",\"type\":\"donut\",\"name\":\"Cake\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"},{\"id\":\"1003\",\"type\":\"Blueberry\"},{\"id\":\"1004\",\"type\":\"Devil's" + + " Food\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5007\",\"type\":\"Powdered" + + " Sugar\"},{\"id\":\"5006\",\"type\":\"Chocolate with" + + " Sprinkles\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0002\",\"type\":\"donut\",\"name\":\"Raised\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5005\",\"type\":\"Sugar\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]},{\"id\":\"0003\",\"type\":\"donut\",\"name\":\"Old" + + " Fashioned\",\"ppu\":0.55,\"batters\":{\"batter\":[{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\",\"type\":\"Chocolate\"}]},\"topping\":[{\"id\":\"5001\",\"type\":\"None\"},{\"id\":\"5002\",\"type\":\"Glazed\"},{\"id\":\"5003\",\"type\":\"Chocolate\"},{\"id\":\"5004\",\"type\":\"Maple\"}]}]"; Value v = Value.pgJsonb(json); assertEquals(json, v.getPgJsonb()); assertEquals(json, v.getAsString()); @@ -731,6 +755,48 @@ public void dateNull() { assertEquals("NULL", v.getAsString()); } + @Test + public void uuid() { + UUID uuid = UUID.randomUUID(); + Value v = Value.uuid(uuid); + assertThat(v.getType()).isEqualTo(Type.uuid()); + assertThat(v.isNull()).isFalse(); + assertThat(v.getUuid()).isSameInstanceAs(uuid); + assertThat(v.toString()).isEqualTo(uuid.toString()); + assertEquals(uuid.toString(), v.getAsString()); + } + + @Test + public void uuidNull() { + Value v = Value.uuid(null); + assertThat(v.getType()).isEqualTo(Type.uuid()); + assertThat(v.isNull()).isTrue(); + assertThat(v.toString()).isEqualTo(NULL_STRING); + IllegalStateException e = assertThrows(IllegalStateException.class, v::getUuid); + } + + public void interval() { + String interval = "P1Y2M3DT67H45M5.123478678S"; + Interval t = Interval.parseFromString(interval); + Value v = Value.interval(t); + assertThat(v.getType()).isEqualTo(Type.interval()); + assertThat(v.isNull()).isFalse(); + assertThat(v.getInterval()).isSameInstanceAs(t); + assertThat(v.toString()).isEqualTo(interval); + assertEquals(interval, v.getAsString()); + } + + @Test + public void intervalNull() { + Value v = Value.interval(null); + assertThat(v.getType()).isEqualTo(Type.interval()); + assertThat(v.isNull()).isTrue(); + assertThat(v.toString()).isEqualTo(NULL_STRING); + IllegalStateException e = assertThrows(IllegalStateException.class, v::getInterval); + assertThat(e.getMessage()).contains("null value"); + assertEquals("NULL", v.getAsString()); + } + @Test public void protoMessage() { SingerInfo singerInfo = SingerInfo.newBuilder().setSingerId(111).setGenre(Genre.FOLK).build(); @@ -1359,6 +1425,52 @@ public void dateArrayNull() { assertEquals("NULL", v.getAsString()); } + @Test + public void uuidArray() { + UUID uuid1 = UUID.randomUUID(); + UUID uuid2 = UUID.randomUUID(); + + Value v = Value.uuidArray(Arrays.asList(uuid1, null, uuid2)); + assertThat(v.isNull()).isFalse(); + assertThat(v.getUuidArray()).containsExactly(uuid1, null, uuid2).inOrder(); + assertThat(v.toString()).isEqualTo("[" + uuid1.toString() + ",NULL," + uuid2.toString() + "]"); + assertEquals( + String.format("[%s,NULL,%s]", uuid1.toString(), uuid2.toString()), v.getAsString()); + } + + @Test + public void uuidArrayNull() { + Value v = Value.uuidArray(null); + assertThat(v.isNull()).isTrue(); + assertThat(v.toString()).isEqualTo(NULL_STRING); + IllegalStateException e = assertThrows(IllegalStateException.class, v::getUuidArray); + } + + @Test + public void intervalArray() { + Interval interval1 = Interval.parseFromString("P123Y34M678DT478H345M345.76857863S"); + Interval interval2 = Interval.parseFromString("P-123Y-34M678DT-478H-345M-345.76857863S"); + + Value v = Value.intervalArray(Arrays.asList(interval1, null, interval2)); + assertThat(v.isNull()).isFalse(); + assertThat(v.getIntervalArray()).containsExactly(interval1, null, interval2).inOrder(); + assertThat(v.toString()) + .isEqualTo("[" + interval1.toISO8601() + ",NULL," + interval2.toISO8601() + "]"); + assertEquals( + String.format("[%s,NULL,%s]", interval1.toISO8601(), interval2.toISO8601()), + v.getAsString()); + } + + @Test + public void intervalArrayNull() { + Value v = Value.intervalArray(null); + assertThat(v.isNull()).isTrue(); + assertThat(v.toString()).isEqualTo(NULL_STRING); + IllegalStateException e = assertThrows(IllegalStateException.class, v::getIntervalArray); + assertThat(e.getMessage()).contains("null value"); + assertEquals("NULL", v.getAsString()); + } + @Test public void protoMessageArray() { SingerInfo singerInfo1 = SingerInfo.newBuilder().setSingerId(111).setGenre(Genre.FOLK).build(); @@ -1654,6 +1766,23 @@ public void testValueToProto() { com.google.protobuf.Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build(), Value.date(null).toProto()); + assertEquals( + com.google.protobuf.Value.newBuilder() + .setStringValue("e0d8a283-29d8-49ce-8d4c-e1d8cb0ea047") + .build(), + Value.uuid(UUID.fromString("e0d8a283-29d8-49ce-8d4c-e1d8cb0ea047")).toProto()); + assertEquals( + com.google.protobuf.Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build(), + Value.uuid(null).toProto()); + + assertEquals( + com.google.protobuf.Value.newBuilder().setStringValue("P1Y2M3DT5H6M3.624567878S").build(), + Value.interval(Interval.fromMonthsDaysNanos(14, 3, BigInteger.valueOf(18363624567878L))) + .toProto()); + assertEquals( + com.google.protobuf.Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build(), + Value.interval(null).toProto()); + assertEquals( com.google.protobuf.Value.newBuilder() .setStringValue("2012-04-10T15:16:17.123456789Z") @@ -1790,6 +1919,42 @@ public void testValueToProto() { .build()))) .build(), Value.dateArray(Arrays.asList(Date.fromYearMonthDay(2010, 2, 28), null)).toProto()); + + assertEquals( + com.google.protobuf.Value.newBuilder() + .setListValue( + ListValue.newBuilder() + .addAllValues( + Arrays.asList( + com.google.protobuf.Value.newBuilder() + .setStringValue("3fb10ff0-4a9a-428a-bc20-a947181fd76d") + .build(), + com.google.protobuf.Value.newBuilder() + .setNullValue(NullValue.NULL_VALUE) + .build()))) + .build(), + Value.uuidArray( + Arrays.asList(UUID.fromString("3fb10ff0-4a9a-428a-bc20-a947181fd76d"), null)) + .toProto()); + + assertEquals( + com.google.protobuf.Value.newBuilder() + .setListValue( + ListValue.newBuilder() + .addAllValues( + Arrays.asList( + com.google.protobuf.Value.newBuilder() + .setStringValue("P1Y2M3DT5H6M2.456787800S") + .build(), + com.google.protobuf.Value.newBuilder() + .setNullValue(NullValue.NULL_VALUE) + .build()))) + .build(), + Value.intervalArray( + Arrays.asList( + Interval.fromMonthsDaysNanos(14, 3, new BigInteger("18362456787800")), null)) + .toProto()); + assertEquals( com.google.protobuf.Value.newBuilder() .setListValue( @@ -2001,6 +2166,35 @@ public void testValueToProto() { .add(Value.dateArray(Arrays.asList(Date.fromYearMonthDay(2010, 2, 28), null))) .build()) .toProto()); + assertEquals( + com.google.protobuf.Value.newBuilder() + .setListValue( + ListValue.newBuilder() + .addValues( + com.google.protobuf.Value.newBuilder() + .setListValue( + ListValue.newBuilder() + .addAllValues( + Arrays.asList( + com.google.protobuf.Value.newBuilder() + .setStringValue( + "9e2f9eac-8d6f-45c1-ac1d-c589daad8821") + .build(), + com.google.protobuf.Value.newBuilder() + .setNullValue(NullValue.NULL_VALUE) + .build())) + .build()) + .build()) + .build()) + .build(), + Value.struct( + Struct.newBuilder() + .add( + Value.uuidArray( + Arrays.asList( + UUID.fromString("9e2f9eac-8d6f-45c1-ac1d-c589daad8821"), null))) + .build()) + .toProto()); assertEquals( com.google.protobuf.Value.newBuilder() .setListValue( @@ -2132,6 +2326,11 @@ public void testEqualsHashCode() { Value.date(Date.fromYearMonthDay(2018, 2, 26))); tester.addEqualityGroup(Value.date(Date.fromYearMonthDay(2018, 2, 27))); + UUID uuid = UUID.randomUUID(); + tester.addEqualityGroup(Value.uuid(null), Value.uuid(null)); + tester.addEqualityGroup(Value.uuid(uuid), Value.uuid(uuid)); + tester.addEqualityGroup(Value.uuid(UUID.randomUUID())); + Struct structValue1 = Struct.newBuilder().set("f1").to(20).set("f2").to("def").build(); Struct structValue2 = Struct.newBuilder().set("f1").to(20).set("f2").to("def").build(); assertThat(Value.struct(structValue1).equals(Value.struct(structValue2))).isTrue(); @@ -2222,6 +2421,17 @@ public void testEqualsHashCode() { Value.dateArray(Arrays.asList(null, Date.fromYearMonthDay(2018, 2, 26)))); tester.addEqualityGroup(Value.dateArray(null)); + tester.addEqualityGroup( + Value.uuidArray(Arrays.asList(null, uuid)), Value.uuidArray(Arrays.asList(null, uuid))); + tester.addEqualityGroup(Value.uuidArray(null)); + + tester.addEqualityGroup( + Value.intervalArray( + Arrays.asList(null, Interval.fromMonthsDaysNanos(14, 3, BigInteger.valueOf(0)))), + Value.intervalArray( + Arrays.asList(null, Interval.fromMonthsDaysNanos(14, 3, BigInteger.valueOf(0))))); + tester.addEqualityGroup(Value.intervalArray(null)); + tester.addEqualityGroup( Value.structArray(structType1, Arrays.asList(structValue1, null)), Value.structArray(structType1, Arrays.asList(structValue2, null))); @@ -2276,6 +2486,12 @@ public void testGetAsString() { "2023-01-10T18:59:00Z", Value.timestamp(Timestamp.parseTimestamp("2023-01-10T18:59:00Z")).getAsString()); assertEquals("2023-01-10", Value.date(Date.parseDate("2023-01-10")).getAsString()); + assertEquals( + "4ef8ba78-3bb5-4a8f-ae39-bf59a89a491d", + Value.uuid(UUID.fromString("4ef8ba78-3bb5-4a8f-ae39-bf59a89a491d")).getAsString()); + assertEquals( + "P1Y2M3DT4H5M6.789123456S", + Value.interval(Interval.parseFromString("P1Y2M3DT4H5M6.789123456S")).getAsString()); Random random = new Random(); byte[] bytes = new byte[random.nextInt(256)]; @@ -2378,6 +2594,20 @@ public void serialization() { reserializeAndAssert(Value.date(Date.fromYearMonthDay(2018, 2, 26))); reserializeAndAssert(Value.dateArray(Arrays.asList(null, Date.fromYearMonthDay(2018, 2, 26)))); + reserializeAndAssert(Value.uuid(null)); + reserializeAndAssert(Value.uuid(UUID.fromString("20d55f8b-5cd4-46ae-81bc-38f6b53c243b"))); + reserializeAndAssert( + Value.uuidArray( + Arrays.asList(null, UUID.fromString("20d55f8b-5cd4-46ae-81bc-38f6b53c243b")))); + + reserializeAndAssert(Value.interval(null)); + reserializeAndAssert( + Value.interval(Interval.fromMonthsDaysNanos(15, 7, BigInteger.valueOf(1234567891)))); + reserializeAndAssert( + Value.intervalArray( + Arrays.asList( + null, Interval.fromMonthsDaysNanos(15, 7, BigInteger.valueOf(1234567891))))); + BrokenSerializationList of = BrokenSerializationList.of("a", "b"); reserializeAndAssert(Value.stringArray(of)); reserializeAndAssert(Value.stringArray(null)); @@ -2402,6 +2632,316 @@ public void verifyBrokenSerialization() { reserializeAndAssert(BrokenSerializationList.of(1, 2, 3)); } + @Test + public void testToValue() { + Value value = Value.toValue(null); + assertNull(value.getType()); + assertEquals("NULL", value.getAsString()); + + int i = 10; + value = Value.toValue(i); + assertNull(value.getType()); + assertEquals("10", value.getAsString()); + + Integer j = 10; + value = Value.toValue(j); + assertNull(value.getType()); + assertEquals("10", value.getAsString()); + + long k = 10L; + value = Value.toValue(k); + assertNull(value.getType()); + assertEquals("10", value.getAsString()); + + Long l = 10L; + value = Value.toValue(i); + assertNull(value.getType()); + assertEquals("10", value.getAsString()); + + boolean m = true; + value = Value.toValue(m); + assertEquals(Type.bool(), value.getType()); + assertTrue(value.getBool()); + + Boolean n = true; + value = Value.toValue(n); + assertEquals(Type.bool(), value.getType()); + assertTrue(value.getBool()); + + Float o = 0.3f; + value = Value.toValue(o); + assertEquals(Type.float32(), value.getType()); + assertEquals(0.3f, value.getFloat32(), 0); + + float p = 0.3f; + value = Value.toValue(p); + assertEquals(Type.float32(), value.getType()); + assertEquals(0.3f, value.getFloat32(), 0); + + Double q = 0.4d; + value = Value.toValue(q); + assertEquals(Type.float64(), value.getType()); + assertEquals(0.4d, value.getFloat64(), 0); + + double s = 0.5d; + value = Value.toValue(s); + assertEquals(Type.float64(), value.getType()); + assertEquals(0.5d, value.getFloat64(), 0); + + BigDecimal t = BigDecimal.valueOf(0.6d); + value = Value.toValue(t); + assertEquals(Type.numeric(), value.getType()); + assertEquals(t, value.getNumeric()); + + ByteArray bytes = ByteArray.copyFrom("hello"); + value = Value.toValue(bytes); + assertEquals(Type.bytes(), value.getType()); + assertEquals(bytes, value.getBytes()); + + byte[] byteArray = "hello".getBytes(); + value = Value.toValue(byteArray); + assertEquals(Type.bytes(), value.getType()); + assertEquals(bytes, value.getBytes()); + + Date date = Date.fromYearMonthDay(2018, 2, 26); + value = Value.toValue(date); + assertEquals(Type.date(), value.getType()); + assertEquals(date, value.getDate()); + + UUID uuid = UUID.randomUUID(); + value = Value.toValue(uuid); + assertEquals(Type.uuid(), value.getType()); + assertEquals(uuid, value.getUuid()); + + LocalDate localDate = LocalDate.of(2018, 2, 26); + value = Value.toValue(localDate); + assertEquals(Type.date(), value.getType()); + assertEquals(date, value.getDate()); + + TimeZone defaultTimezone = TimeZone.getDefault(); + TimeZone.setDefault(TimeZone.getTimeZone("Europe/Paris")); + LocalDateTime localDateTime = LocalDateTime.of(2018, 2, 26, 11, 30, 10); + value = Value.toValue(localDateTime); + assertNull(value.getType()); + assertEquals("2018-02-26T10:30:10.000Z", value.getAsString()); + TimeZone.setDefault(defaultTimezone); + + OffsetDateTime offsetDateTime = OffsetDateTime.of(localDateTime, ZoneOffset.ofHours(10)); + value = Value.toValue(offsetDateTime); + assertNull(value.getType()); + assertEquals("2018-02-26T01:30:10.000Z", value.getAsString()); + + ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("Asia/Kolkata")); + value = Value.toValue(zonedDateTime); + assertNull(value.getType()); + assertEquals("2018-02-26T06:00:10.000Z", value.getAsString()); + + ProtocolMessageEnum protocolMessageEnum = IsolationLevel.SERIALIZABLE; + value = Value.toValue(protocolMessageEnum); + assertEquals( + Type.protoEnum("google.spanner.v1.TransactionOptions.IsolationLevel"), value.getType()); + assertEquals( + protocolMessageEnum, + value.getProtoEnum( + (val -> { + switch (val) { + case 1: + return IsolationLevel.SERIALIZABLE; + case 2: + return IsolationLevel.REPEATABLE_READ; + default: + return IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED; + } + }))); + + PartialResultSet partialResultSet = + PartialResultSet.newBuilder() + .addValues(com.google.protobuf.Value.newBuilder().setStringValue("hello").build()) + .build(); + value = Value.toValue(partialResultSet); + assertEquals(Type.proto("google.spanner.v1.PartialResultSet"), value.getType()); + assertEquals(partialResultSet, value.getProtoMessage(PartialResultSet.getDefaultInstance())); + + Interval interval = Interval.ofDays(10); + value = Value.toValue(interval); + assertEquals(Type.interval(), value.getType()); + assertEquals(interval, value.getInterval()); + + Struct struct = Struct.newBuilder().set("name").to(10L).build(); + value = Value.toValue(struct); + assertEquals(Type.struct(StructField.of("name", Type.int64())), value.getType()); + assertEquals(struct, value.getStruct()); + + Timestamp timestamp = Timestamp.now(); + value = Value.toValue(timestamp); + assertEquals(Type.timestamp(), value.getType()); + assertEquals(timestamp, value.getTimestamp()); + + List expectedBoolArray = Arrays.asList(true, false); + boolean[] bools1 = {true, false}; + value = Value.toValue(bools1); + assertEquals(Type.array(Type.bool()), value.getType()); + assertEquals(expectedBoolArray, value.getBoolArray()); + + Boolean[] bools2 = {true, false}; + value = Value.toValue(bools2); + assertEquals(Type.array(Type.bool()), value.getType()); + assertEquals(expectedBoolArray, value.getBoolArray()); + + List expectedFloatArray = Arrays.asList(0.1f, 0.2f, 0.3f); + Float[] floats1 = {0.1f, 0.2f, 0.3f}; + value = Value.toValue(floats1); + assertEquals(Type.array(Type.float32()), value.getType()); + assertEquals(expectedFloatArray, value.getFloat32Array()); + + float[] floats2 = {0.1f, 0.2f, 0.3f}; + value = Value.toValue(floats2); + assertEquals(Type.array(Type.float32()), value.getType()); + assertEquals(expectedFloatArray, value.getFloat32Array()); + + List expectedDoubleArray = Arrays.asList(0.1d, 0.2d, 0.3d, 0.4d); + Double[] doubles1 = {0.1d, 0.2d, 0.3d, 0.4d}; + value = Value.toValue(doubles1); + assertEquals(Type.array(Type.float64()), value.getType()); + assertEquals(expectedDoubleArray, value.getFloat64Array()); + + double[] doubles2 = {0.1d, 0.2d, 0.3d, 0.4d}; + value = Value.toValue(doubles2); + assertEquals(Type.array(Type.float64()), value.getType()); + assertEquals(expectedDoubleArray, value.getFloat64Array()); + + List expectedIntLongArray = Arrays.asList("1", "2", "3"); + int[] ints1 = {1, 2, 3}; + value = Value.toValue(ints1); + assertNull(value.getType()); + assertEquals(expectedIntLongArray, value.getAsStringList()); + + Integer[] ints2 = {1, 2, 3}; + value = Value.toValue(ints2); + assertNull(value.getType()); + assertEquals(expectedIntLongArray, value.getAsStringList()); + + Long[] longs1 = {1L, 2L, 3L}; + value = Value.toValue(longs1); + assertNull(value.getType()); + assertEquals(expectedIntLongArray, value.getAsStringList()); + + long[] longs2 = {1L, 2L, 3L}; + value = Value.toValue(longs2); + assertNull(value.getType()); + assertEquals(expectedIntLongArray, value.getAsStringList()); + + String string = "hello"; + value = Value.toValue(string); + assertNull(value.getType()); + assertEquals("hello", value.getAsString()); + } + + @Test + public void testToValueIterable() { + List booleans = Arrays.asList(true, false); + Value value = Value.toValue(booleans); + assertEquals(Type.array(Type.bool()), value.getType()); + assertEquals(booleans, value.getBoolArray()); + + List ints = Arrays.asList(1, 2, 3); + value = Value.toValue(ints); + assertNull(value.getType()); + assertEquals(Arrays.asList("1", "2", "3"), value.getAsStringList()); + + List longs = Arrays.asList(1L, 2L, 3L); + value = Value.toValue(longs); + assertNull(value.getType()); + assertEquals(Arrays.asList("1", "2", "3"), value.getAsStringList()); + + Set floats = new HashSet<>(Arrays.asList(0.1f, 0.2f, 0.3f)); + value = Value.toValue(floats); + assertEquals(Type.array(Type.float32()), value.getType()); + assertEquals(Arrays.asList(0.1f, 0.2f, 0.3f), value.getFloat32Array()); + + List doubles = Arrays.asList(0.1d, 0.2d, 0.3d, 0.4d); + value = Value.toValue(doubles); + assertEquals(Type.array(Type.float64()), value.getType()); + assertEquals(doubles, value.getFloat64Array()); + + List bigDecimals = + Arrays.asList(BigDecimal.valueOf(0.1d), BigDecimal.valueOf(0.2d)); + value = Value.toValue(bigDecimals); + assertEquals(Type.array(Type.numeric()), value.getType()); + assertEquals(bigDecimals, value.getNumericArray()); + + List byteArrays = + Arrays.asList(ByteArray.copyFrom("hello"), ByteArray.copyFrom("world")); + value = Value.toValue(byteArrays); + assertEquals(Type.array(Type.bytes()), value.getType()); + assertEquals(byteArrays, value.getBytesArray()); + + List bytes = Arrays.asList("hello".getBytes(), "world".getBytes()); + value = Value.toValue(bytes); + assertEquals(Type.array(Type.bytes()), value.getType()); + assertEquals(byteArrays, value.getBytesArray()); + + List intervals = Arrays.asList(Interval.ofDays(10), Interval.ofDays(20)); + value = Value.toValue(intervals); + assertEquals(Type.array(Type.interval()), value.getType()); + assertEquals(intervals, value.getIntervalArray()); + + List timestamps = Arrays.asList(Timestamp.now(), Timestamp.now()); + value = Value.toValue(timestamps); + assertEquals(Type.array(Type.timestamp()), value.getType()); + assertEquals(timestamps, value.getTimestampArray()); + + List dates = + Arrays.asList(Date.fromYearMonthDay(2024, 8, 23), Date.fromYearMonthDay(2024, 12, 27)); + value = Value.toValue(dates); + assertEquals(Type.array(Type.date()), value.getType()); + assertEquals(dates, value.getDateArray()); + + List uuids = Arrays.asList(UUID.randomUUID(), UUID.randomUUID()); + value = Value.toValue(uuids); + assertEquals(Type.array(Type.uuid()), value.getType()); + assertEquals(uuids, value.getUuidArray()); + + List localDates = + Arrays.asList(LocalDate.of(2024, 8, 23), LocalDate.of(2024, 12, 27)); + value = Value.toValue(localDates); + assertEquals(Type.array(Type.date()), value.getType()); + assertEquals(dates, value.getDateArray()); + + TimeZone defaultTimezone = TimeZone.getDefault(); + TimeZone.setDefault(TimeZone.getTimeZone("Asia/Kolkata")); + List localDateTimes = + Arrays.asList( + LocalDateTime.of(2024, 8, 23, 1, 49, 52, 10), + LocalDateTime.of(2024, 12, 27, 1, 49, 52, 10)); + value = Value.toValue(localDateTimes); + assertNull(value.getType()); + assertEquals( + Arrays.asList("2024-08-22T20:19:52.000Z", "2024-12-26T20:19:52.000Z"), + value.getAsStringList()); + TimeZone.setDefault(defaultTimezone); + + List offsetDateTimes = + Arrays.asList( + LocalDateTime.of(2024, 8, 23, 1, 49, 52, 10).atOffset(ZoneOffset.ofHours(1)), + LocalDateTime.of(2024, 12, 27, 1, 49, 52, 10).atOffset(ZoneOffset.ofHours(1))); + value = Value.toValue(offsetDateTimes); + assertNull(value.getType()); + assertEquals( + Arrays.asList("2024-08-23T00:49:52.000Z", "2024-12-27T00:49:52.000Z"), + value.getAsStringList()); + + List zonedDateTimes = + Arrays.asList( + LocalDateTime.of(2024, 8, 23, 1, 49, 52, 10).atZone(ZoneId.of("UTC")), + LocalDateTime.of(2024, 12, 27, 1, 49, 52, 10).atZone(ZoneId.of("UTC"))); + value = Value.toValue(zonedDateTimes); + assertNull(value.getType()); + assertEquals( + Arrays.asList("2024-08-23T01:49:52.000Z", "2024-12-27T01:49:52.000Z"), + value.getAsStringList()); + } + private static class BrokenSerializationList extends ForwardingList implements Serializable { private static final long serialVersionUID = 1L; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/XGoogSpannerRequestIdTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/XGoogSpannerRequestIdTest.java new file mode 100644 index 00000000000..32d1ac29d2e --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/XGoogSpannerRequestIdTest.java @@ -0,0 +1,316 @@ +/* + * 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.spanner; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import io.grpc.Metadata; +import io.grpc.MethodDescriptor.MethodType; +import io.grpc.ServerCall; +import io.grpc.ServerCallHandler; +import io.grpc.ServerInterceptor; +import io.grpc.Status; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.regex.Matcher; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class XGoogSpannerRequestIdTest { + public static long NON_DETERMINISTIC = -1; + + @Test + public void testEquals() { + XGoogSpannerRequestId reqID1 = XGoogSpannerRequestId.of(1, 1, 1, 1); + XGoogSpannerRequestId reqID2 = XGoogSpannerRequestId.of(1, 1, 1, 1); + assertEquals(reqID1, reqID2); + assertEquals(reqID1, reqID1); + assertEquals(reqID2, reqID2); + + XGoogSpannerRequestId reqID3 = XGoogSpannerRequestId.of(1, 1, 1, 2); + assertNotEquals(reqID1, reqID3); + assertNotEquals(reqID3, reqID1); + assertEquals(reqID3, reqID3); + } + + @Test + public void testEnsureHexadecimalFormatForRandProcessID() { + String str = XGoogSpannerRequestId.of(1, 2, 3, 4).toString(); + Matcher m = XGoogSpannerRequestId.REGEX.matcher(str); + assertTrue(m.matches()); + } + + public static class ServerHeaderEnforcer implements ServerInterceptor { + private final Map> unaryResults = + new ConcurrentHashMap<>(); + private final Map> streamingResults = + new ConcurrentHashMap<>(); + private final List gotValues = new CopyOnWriteArrayList<>(); + private final Set checkMethods; + + ServerHeaderEnforcer(Set checkMethods) { + this.checkMethods = checkMethods; + } + + @Override + public ServerCall.Listener interceptCall( + ServerCall call, + final Metadata requestHeaders, + ServerCallHandler next) { + boolean isUnary = call.getMethodDescriptor().getType() == MethodType.UNARY; + String methodName = call.getMethodDescriptor().getFullMethodName(); + String gotReqIdStr = requestHeaders.get(XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY); + if (!this.checkMethods.contains(methodName)) { + return next.startCall(call, requestHeaders); + } + + Map> saver = this.streamingResults; + if (isUnary) { + saver = this.unaryResults; + } + + if (Objects.equals(gotReqIdStr, null) || Objects.equals(gotReqIdStr, "")) { + Status status = + Status.fromCode(Status.Code.INVALID_ARGUMENT) + .augmentDescription( + methodName + " lacks " + XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY); + call.close(status, requestHeaders); + return next.startCall(call, requestHeaders); + } + + assertNotNull(gotReqIdStr); + // Firstly assert and validate that at least we've got a requestId. + Matcher m = XGoogSpannerRequestId.REGEX.matcher(gotReqIdStr); + assertTrue(m.matches()); + + XGoogSpannerRequestId reqId = XGoogSpannerRequestId.of(gotReqIdStr); + if (!saver.containsKey(methodName)) { + saver.put(methodName, new CopyOnWriteArrayList()); + } + + saver.get(methodName).add(reqId); + + // Finally proceed with the call. + return next.startCall(call, requestHeaders); + } + + public String[] accumulatedValues() { + return this.gotValues.toArray(new String[0]); + } + + public void assertIntegrity() { + this.unaryResults.forEach(this::assertMonotonicityOfIds); + this.streamingResults.forEach(this::assertMonotonicityOfIds); + } + + private void assertMonotonicityOfIds(String prefix, List reqIds) { + int size = reqIds.size(); + + List violations = new ArrayList<>(); + for (int i = 1; i < size; i++) { + XGoogSpannerRequestId prev = reqIds.get(i - 1); + XGoogSpannerRequestId curr = reqIds.get(i); + if (prev.isGreaterThan(curr)) { + violations.add(String.format("#%d(%s) > #%d(%s)", i - 1, prev, i, curr)); + } + } + + if (violations.isEmpty()) { + return; + } + + throw new IllegalStateException( + prefix + + " monotonicity violation:" + + String.join("\n\t", violations.toArray(new String[0]))); + } + + public MethodAndRequestId[] accumulatedUnaryValues() { + List accumulated = new ArrayList<>(); + this.unaryResults.forEach( + (String method, CopyOnWriteArrayList values) -> { + for (XGoogSpannerRequestId value : values) { + accumulated.add(new MethodAndRequestId(method, value)); + } + }); + return accumulated.toArray(new MethodAndRequestId[0]); + } + + public MethodAndRequestId[] accumulatedStreamingValues() { + List accumulated = new ArrayList<>(); + this.streamingResults.forEach( + (String method, CopyOnWriteArrayList values) -> { + for (XGoogSpannerRequestId value : values) { + accumulated.add(new MethodAndRequestId(method, value)); + } + }); + return accumulated.toArray(new MethodAndRequestId[0]); + } + + public void checkExpectedUnaryXGoogRequestIds(MethodAndRequestId... wantUnaryValues) { + MethodAndRequestId[] gotUnaryValues = this.accumulatedUnaryValues(); + sortValues(gotUnaryValues); + for (int i = 0; i < gotUnaryValues.length && false; i++) { + System.out.println("\033[33misUnary: #" + i + ":: " + gotUnaryValues[i] + "\033[00m"); + } + assertArrayEquals(wantUnaryValues, gotUnaryValues); + } + + public void checkAtLeastHasExpectedUnaryXGoogRequestIds(MethodAndRequestId... wantUnaryValues) { + MethodAndRequestId[] gotUnaryValues = this.accumulatedUnaryValues(); + sortValues(gotUnaryValues); + for (int i = 0; i < gotUnaryValues.length && false; i++) { + System.out.println("\033[33misUnary: #" + i + ":: " + gotUnaryValues[i] + "\033[00m"); + } + if (wantUnaryValues.length < gotUnaryValues.length) { + MethodAndRequestId[] gotSliced = + Arrays.copyOfRange(gotUnaryValues, 0, wantUnaryValues.length); + assertArrayEquals(wantUnaryValues, gotSliced); + } else { + assertArrayEquals(wantUnaryValues, gotUnaryValues); + } + } + + public void checkExpectedUnaryXGoogRequestIdsAsSuffixes(MethodAndRequestId... wantUnaryValues) { + MethodAndRequestId[] gotUnaryValues = this.accumulatedUnaryValues(); + sortValues(gotUnaryValues); + for (int i = 0; i < gotUnaryValues.length && false; i++) { + System.out.println("\033[33misUnary: #" + i + ":: " + gotUnaryValues[i] + "\033[00m"); + } + if (wantUnaryValues.length < gotUnaryValues.length) { + MethodAndRequestId[] gotSliced = + Arrays.copyOfRange( + gotUnaryValues, + gotUnaryValues.length - wantUnaryValues.length, + gotUnaryValues.length); + assertArrayEquals(wantUnaryValues, gotSliced); + } else { + assertArrayEquals(wantUnaryValues, gotUnaryValues); + } + } + + private void sortValues(MethodAndRequestId[] values) { + massageValues(values); + Arrays.sort(values, new MethodAndRequestIdComparator()); + } + + public void checkExpectedStreamingXGoogRequestIds(MethodAndRequestId... wantStreamingValues) { + MethodAndRequestId[] gotStreamingValues = this.accumulatedStreamingValues(); + for (int i = 0; i < gotStreamingValues.length && false; i++) { + System.out.println( + "\033[32misStreaming: #" + i + ":: " + gotStreamingValues[i] + "\033[00m"); + } + sortValues(gotStreamingValues); + assertArrayEquals(wantStreamingValues, gotStreamingValues); + } + + public void reset() { + this.gotValues.clear(); + this.unaryResults.clear(); + this.streamingResults.clear(); + } + } + + public static class MethodAndRequestId { + String method; + XGoogSpannerRequestId requestId; + + public MethodAndRequestId(String method, XGoogSpannerRequestId requestId) { + this.method = method; + this.requestId = requestId; + } + + public String toString() { + return "{" + this.method + ":" + this.requestId.debugToString() + "}"; + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof MethodAndRequestId)) { + return false; + } + MethodAndRequestId other = (MethodAndRequestId) o; + return Objects.equals(this.method, other.method) + && Objects.equals(this.requestId, other.requestId); + } + } + + static class MethodAndRequestIdComparator implements Comparator { + @Override + public int compare(MethodAndRequestId mr1, MethodAndRequestId mr2) { + int cmpMethod = mr1.method.compareTo(mr2.method); + if (cmpMethod != 0) { + return cmpMethod; + } + + if (Objects.equals(mr1.requestId, mr2.requestId)) { + return 0; + } + if (mr1.requestId.isGreaterThan(mr2.requestId)) { + return +1; + } + return -1; + } + } + + static void massageValues(MethodAndRequestId[] mreqs) { + for (int i = 0; i < mreqs.length; i++) { + MethodAndRequestId mreq = mreqs[i]; + // BatchCreateSessions is so hard to control as the round-robin doling out + // hence we might need to be able to scrub the nth_request that won't match + // nth_req in consecutive order of nth_client. + if (mreq.method.compareTo("google.spanner.v1.Spanner/BatchCreateSessions") == 0) { + mreqs[i] = + new MethodAndRequestId( + mreq.method, + mreq.requestId + .withNthRequest(NON_DETERMINISTIC) + .withChannelId(NON_DETERMINISTIC) + .withNthClientId(NON_DETERMINISTIC)); + } else if (mreq.method.compareTo("google.spanner.v1.Spanner/BeginTransaction") == 0 + || mreq.method.compareTo("google.spanner.v1.Spanner/ExecuteStreamingSql") == 0 + || mreq.method.compareTo("google.spanner.v1.Spanner/ExecuteSql") == 0 + || mreq.method.compareTo("google.spanner.v1.Spanner/CreateSession") == 0 + || mreq.method.compareTo("google.spanner.v1.Spanner/Commit") == 0) { + mreqs[i] = + new MethodAndRequestId(mreq.method, mreq.requestId.withNthClientId(NON_DETERMINISTIC)); + } + } + } + + public static MethodAndRequestId ofMethodAndRequestId(String method, String reqId) { + return new MethodAndRequestId(method, XGoogSpannerRequestId.of(reqId)); + } + + public static MethodAndRequestId ofMethodAndRequestId( + String method, XGoogSpannerRequestId reqId) { + return new MethodAndRequestId(method, reqId); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java index b5a045b24a0..f878f2c7e3b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,7 +46,9 @@ import com.google.protobuf.Empty; import com.google.protobuf.FieldMask; import com.google.protobuf.Timestamp; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; +import com.google.spanner.admin.database.v1.BackupInstancePartition; import com.google.spanner.admin.database.v1.BackupName; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.BackupScheduleName; @@ -67,6 +69,7 @@ import com.google.spanner.admin.database.v1.ListDatabaseRolesResponse; import com.google.spanner.admin.database.v1.ListDatabasesResponse; import com.google.spanner.admin.database.v1.RestoreInfo; +import com.google.spanner.admin.database.v1.SplitPoints; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -1097,6 +1100,7 @@ public void createBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1166,6 +1170,7 @@ public void createBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1235,6 +1240,7 @@ public void copyBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1307,6 +1313,7 @@ public void copyBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1379,6 +1386,7 @@ public void copyBackupTest3() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1451,6 +1459,7 @@ public void copyBackupTest4() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1523,6 +1532,7 @@ public void getBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockService.addResponse(expectedResponse); @@ -1583,6 +1593,7 @@ public void getBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockService.addResponse(expectedResponse); @@ -1643,6 +1654,7 @@ public void updateBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockService.addResponse(expectedResponse); @@ -1665,6 +1677,7 @@ public void updateBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); FieldMask updateMask = FieldMask.newBuilder().build(); @@ -1713,6 +1726,7 @@ public void updateBackupExceptionTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); FieldMask updateMask = FieldMask.newBuilder().build(); client.updateBackup(backup, updateMask); @@ -2454,6 +2468,92 @@ public void listDatabaseRolesExceptionTest2() throws Exception { } } + @Test + public void addSplitPointsTest() throws Exception { + AddSplitPointsResponse expectedResponse = AddSplitPointsResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + List splitPoints = new ArrayList<>(); + + AddSplitPointsResponse actualResponse = client.addSplitPoints(database, splitPoints); + 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 addSplitPointsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + List splitPoints = new ArrayList<>(); + client.addSplitPoints(database, splitPoints); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void addSplitPointsTest2() throws Exception { + AddSplitPointsResponse expectedResponse = AddSplitPointsResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String database = "projects/project-3102/instances/instance-3102/databases/database-3102"; + List splitPoints = new ArrayList<>(); + + AddSplitPointsResponse actualResponse = client.addSplitPoints(database, splitPoints); + 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 addSplitPointsExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String database = "projects/project-3102/instances/instance-3102/databases/database-3102"; + List splitPoints = new ArrayList<>(); + client.addSplitPoints(database, splitPoints); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + @Test public void createBackupScheduleTest() throws Exception { BackupSchedule expectedResponse = @@ -2921,4 +3021,10 @@ public void listBackupSchedulesExceptionTest2() throws Exception { // Expected exception. } } + + @Test + public void internalUpdateGraphOperationUnsupportedMethodTest() throws Exception { + // The internalUpdateGraphOperation() method is not supported in REST transport. + // This empty test is generated for technical reasons. + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java index a4de864ee6f..380a0dd4d9b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,7 +48,10 @@ import com.google.protobuf.Empty; import com.google.protobuf.FieldMask; import com.google.protobuf.Timestamp; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; +import com.google.spanner.admin.database.v1.BackupInstancePartition; import com.google.spanner.admin.database.v1.BackupName; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.BackupScheduleName; @@ -73,6 +76,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; import com.google.spanner.admin.database.v1.InstanceName; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -87,6 +92,7 @@ import com.google.spanner.admin.database.v1.ListDatabasesResponse; import com.google.spanner.admin.database.v1.RestoreDatabaseRequest; import com.google.spanner.admin.database.v1.RestoreInfo; +import com.google.spanner.admin.database.v1.SplitPoints; import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; @@ -1010,6 +1016,7 @@ public void createBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1078,6 +1085,7 @@ public void createBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1146,6 +1154,7 @@ public void copyBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1218,6 +1227,7 @@ public void copyBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1290,6 +1300,7 @@ public void copyBackupTest3() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1362,6 +1373,7 @@ public void copyBackupTest4() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1434,6 +1446,7 @@ public void getBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockDatabaseAdmin.addResponse(expectedResponse); @@ -1488,6 +1501,7 @@ public void getBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockDatabaseAdmin.addResponse(expectedResponse); @@ -1542,6 +1556,7 @@ public void updateBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockDatabaseAdmin.addResponse(expectedResponse); @@ -2250,6 +2265,82 @@ public void listDatabaseRolesExceptionTest2() throws Exception { } } + @Test + public void addSplitPointsTest() throws Exception { + AddSplitPointsResponse expectedResponse = AddSplitPointsResponse.newBuilder().build(); + mockDatabaseAdmin.addResponse(expectedResponse); + + DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + List splitPoints = new ArrayList<>(); + + AddSplitPointsResponse actualResponse = client.addSplitPoints(database, splitPoints); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatabaseAdmin.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + AddSplitPointsRequest actualRequest = ((AddSplitPointsRequest) actualRequests.get(0)); + + Assert.assertEquals(database.toString(), actualRequest.getDatabase()); + Assert.assertEquals(splitPoints, actualRequest.getSplitPointsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void addSplitPointsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatabaseAdmin.addException(exception); + + try { + DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + List splitPoints = new ArrayList<>(); + client.addSplitPoints(database, splitPoints); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void addSplitPointsTest2() throws Exception { + AddSplitPointsResponse expectedResponse = AddSplitPointsResponse.newBuilder().build(); + mockDatabaseAdmin.addResponse(expectedResponse); + + String database = "database1789464955"; + List splitPoints = new ArrayList<>(); + + AddSplitPointsResponse actualResponse = client.addSplitPoints(database, splitPoints); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatabaseAdmin.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + AddSplitPointsRequest actualRequest = ((AddSplitPointsRequest) actualRequests.get(0)); + + Assert.assertEquals(database, actualRequest.getDatabase()); + Assert.assertEquals(splitPoints, actualRequest.getSplitPointsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void addSplitPointsExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatabaseAdmin.addException(exception); + + try { + String database = "database1789464955"; + List splitPoints = new ArrayList<>(); + client.addSplitPoints(database, splitPoints); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + @Test public void createBackupScheduleTest() throws Exception { BackupSchedule expectedResponse = @@ -2651,4 +2742,86 @@ public void listBackupSchedulesExceptionTest2() throws Exception { // Expected exception. } } + + @Test + public void internalUpdateGraphOperationTest() throws Exception { + InternalUpdateGraphOperationResponse expectedResponse = + InternalUpdateGraphOperationResponse.newBuilder().build(); + mockDatabaseAdmin.addResponse(expectedResponse); + + DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + String operationId = "operationId129704162"; + + InternalUpdateGraphOperationResponse actualResponse = + client.internalUpdateGraphOperation(database, operationId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatabaseAdmin.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + InternalUpdateGraphOperationRequest actualRequest = + ((InternalUpdateGraphOperationRequest) actualRequests.get(0)); + + Assert.assertEquals(database.toString(), actualRequest.getDatabase()); + Assert.assertEquals(operationId, actualRequest.getOperationId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void internalUpdateGraphOperationExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatabaseAdmin.addException(exception); + + try { + DatabaseName database = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + String operationId = "operationId129704162"; + client.internalUpdateGraphOperation(database, operationId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void internalUpdateGraphOperationTest2() throws Exception { + InternalUpdateGraphOperationResponse expectedResponse = + InternalUpdateGraphOperationResponse.newBuilder().build(); + mockDatabaseAdmin.addResponse(expectedResponse); + + String database = "database1789464955"; + String operationId = "operationId129704162"; + + InternalUpdateGraphOperationResponse actualResponse = + client.internalUpdateGraphOperation(database, operationId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatabaseAdmin.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + InternalUpdateGraphOperationRequest actualRequest = + ((InternalUpdateGraphOperationRequest) actualRequests.get(0)); + + Assert.assertEquals(database, actualRequest.getDatabase()); + Assert.assertEquals(operationId, actualRequest.getOperationId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void internalUpdateGraphOperationExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatabaseAdmin.addException(exception); + + try { + String database = "database1789464955"; + String operationId = "operationId129704162"; + client.internalUpdateGraphOperation(database, operationId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdmin.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdmin.java index c85497197fe..3a689c8cde8 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdmin.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdmin.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java index 9e273ed1550..b262db7d4e0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,8 @@ import com.google.longrunning.Operation; import com.google.protobuf.AbstractMessage; import com.google.protobuf.Empty; +import com.google.spanner.admin.database.v1.AddSplitPointsRequest; +import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.CopyBackupRequest; @@ -41,6 +43,8 @@ import com.google.spanner.admin.database.v1.GetDatabaseDdlRequest; import com.google.spanner.admin.database.v1.GetDatabaseDdlResponse; import com.google.spanner.admin.database.v1.GetDatabaseRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest; +import com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse; import com.google.spanner.admin.database.v1.ListBackupOperationsRequest; import com.google.spanner.admin.database.v1.ListBackupOperationsResponse; import com.google.spanner.admin.database.v1.ListBackupSchedulesRequest; @@ -462,7 +466,8 @@ public void listDatabaseOperations( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method ListDatabaseOperations, expected %s or %s", + "Unrecognized response type %s for method ListDatabaseOperations, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), ListDatabaseOperationsResponse.class.getName(), Exception.class.getName()))); @@ -484,7 +489,8 @@ public void listBackupOperations( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method ListBackupOperations, expected %s or %s", + "Unrecognized response type %s for method ListBackupOperations, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), ListBackupOperationsResponse.class.getName(), Exception.class.getName()))); @@ -513,6 +519,27 @@ public void listDatabaseRoles( } } + @Override + public void addSplitPoints( + AddSplitPointsRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof AddSplitPointsResponse) { + requests.add(request); + responseObserver.onNext(((AddSplitPointsResponse) 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 AddSplitPoints, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + AddSplitPointsResponse.class.getName(), + Exception.class.getName()))); + } + } + @Override public void createBackupSchedule( CreateBackupScheduleRequest request, StreamObserver responseObserver) { @@ -527,7 +554,8 @@ public void createBackupSchedule( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method CreateBackupSchedule, expected %s or %s", + "Unrecognized response type %s for method CreateBackupSchedule, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), BackupSchedule.class.getName(), Exception.class.getName()))); @@ -569,7 +597,8 @@ public void updateBackupSchedule( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method UpdateBackupSchedule, expected %s or %s", + "Unrecognized response type %s for method UpdateBackupSchedule, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), BackupSchedule.class.getName(), Exception.class.getName()))); @@ -590,7 +619,8 @@ public void deleteBackupSchedule( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method DeleteBackupSchedule, expected %s or %s", + "Unrecognized response type %s for method DeleteBackupSchedule, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), Empty.class.getName(), Exception.class.getName()))); @@ -618,4 +648,27 @@ public void listBackupSchedules( Exception.class.getName()))); } } + + @Override + public void internalUpdateGraphOperation( + InternalUpdateGraphOperationRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof InternalUpdateGraphOperationResponse) { + requests.add(request); + responseObserver.onNext(((InternalUpdateGraphOperationResponse) 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 InternalUpdateGraphOperation, expected" + + " %s or %s", + response == null ? "null" : response.getClass().getName(), + InternalUpdateGraphOperationResponse.class.getName(), + Exception.class.getName()))); + } + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientHttpJsonTest.java index 50532826e53..adb7056c08a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientHttpJsonTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientHttpJsonTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,6 +45,7 @@ import com.google.protobuf.FieldMask; import com.google.protobuf.Timestamp; import com.google.spanner.admin.instance.v1.AutoscalingConfig; +import com.google.spanner.admin.instance.v1.FreeInstanceMetadata; import com.google.spanner.admin.instance.v1.Instance; import com.google.spanner.admin.instance.v1.InstanceConfig; import com.google.spanner.admin.instance.v1.InstanceConfigName; @@ -223,6 +224,7 @@ public void getInstanceConfigTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); mockService.addResponse(expectedResponse); @@ -275,6 +277,7 @@ public void getInstanceConfigTest2() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); mockService.addResponse(expectedResponse); @@ -327,6 +330,7 @@ public void createInstanceConfigTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); Operation resultOperation = Operation.newBuilder() @@ -389,6 +393,7 @@ public void createInstanceConfigTest2() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); Operation resultOperation = Operation.newBuilder() @@ -451,6 +456,7 @@ public void updateInstanceConfigTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); Operation resultOperation = Operation.newBuilder() @@ -471,6 +477,7 @@ public void updateInstanceConfigTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); FieldMask updateMask = FieldMask.newBuilder().build(); @@ -512,6 +519,7 @@ public void updateInstanceConfigExceptionTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); FieldMask updateMask = FieldMask.newBuilder().build(); client.updateInstanceConfigAsync(instanceConfig, updateMask).get(); @@ -917,6 +925,7 @@ public void getInstanceTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -971,6 +980,7 @@ public void getInstanceTest2() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -1025,6 +1035,7 @@ public void createInstanceTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1088,6 +1099,7 @@ public void createInstanceTest2() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1151,6 +1163,7 @@ public void updateInstanceTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1173,6 +1186,7 @@ public void updateInstanceTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); FieldMask fieldMask = FieldMask.newBuilder().build(); @@ -1215,6 +1229,7 @@ public void updateInstanceExceptionTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); FieldMask fieldMask = FieldMask.newBuilder().build(); client.updateInstanceAsync(instance, fieldMask).get(); @@ -1592,6 +1607,7 @@ public void getInstancePartitionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1647,6 +1663,7 @@ public void getInstancePartitionTest2() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1702,6 +1719,7 @@ public void createInstancePartitionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1765,6 +1783,7 @@ public void createInstancePartitionTest2() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1912,6 +1931,7 @@ public void updateInstancePartitionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1933,6 +1953,7 @@ public void updateInstancePartitionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1975,6 +1996,7 @@ public void updateInstancePartitionExceptionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientTest.java index 73c6de9b2ca..5181dbe256f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/InstanceAdminClientTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,6 +53,7 @@ import com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest; import com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest; import com.google.spanner.admin.instance.v1.DeleteInstanceRequest; +import com.google.spanner.admin.instance.v1.FreeInstanceMetadata; import com.google.spanner.admin.instance.v1.GetInstanceConfigRequest; import com.google.spanner.admin.instance.v1.GetInstancePartitionRequest; import com.google.spanner.admin.instance.v1.GetInstanceRequest; @@ -235,6 +236,7 @@ public void getInstanceConfigTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); mockInstanceAdmin.addResponse(expectedResponse); @@ -281,6 +283,7 @@ public void getInstanceConfigTest2() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); mockInstanceAdmin.addResponse(expectedResponse); @@ -327,6 +330,7 @@ public void createInstanceConfigTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); Operation resultOperation = Operation.newBuilder() @@ -389,6 +393,7 @@ public void createInstanceConfigTest2() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); Operation resultOperation = Operation.newBuilder() @@ -451,6 +456,7 @@ public void updateInstanceConfigTest() throws Exception { .setEtag("etag3123477") .addAllLeaderOptions(new ArrayList()) .setReconciling(true) + .setStorageLimitPerProcessingUnit(-1769187130) .build(); Operation resultOperation = Operation.newBuilder() @@ -852,6 +858,7 @@ public void getInstanceTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); mockInstanceAdmin.addResponse(expectedResponse); @@ -900,6 +907,7 @@ public void getInstanceTest2() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); mockInstanceAdmin.addResponse(expectedResponse); @@ -948,6 +956,7 @@ public void createInstanceTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1010,6 +1019,7 @@ public void createInstanceTest2() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1072,6 +1082,7 @@ public void updateInstanceTest() throws Exception { .addAllEndpointUris(new ArrayList()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) + .setFreeInstanceMetadata(FreeInstanceMetadata.newBuilder().build()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1441,6 +1452,7 @@ public void getInstancePartitionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1491,6 +1503,7 @@ public void getInstancePartitionTest2() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1539,6 +1552,7 @@ public void createInstancePartitionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1602,6 +1616,7 @@ public void createInstancePartitionTest2() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) @@ -1737,6 +1752,7 @@ public void updateInstancePartitionTest() throws Exception { .toString()) .setConfig(InstanceConfigName.of("[PROJECT]", "[INSTANCE_CONFIG]").toString()) .setDisplayName("displayName1714148973") + .setAutoscalingConfig(AutoscalingConfig.newBuilder().build()) .setCreateTime(Timestamp.newBuilder().build()) .setUpdateTime(Timestamp.newBuilder().build()) .addAllReferencingDatabases(new ArrayList()) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdmin.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdmin.java index 28d934fde81..a5871925a1b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdmin.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdmin.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdminImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdminImpl.java index d8920f79399..b0d4f9a857b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdminImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/instance/v1/MockInstanceAdminImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -148,7 +148,8 @@ public void createInstanceConfig( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method CreateInstanceConfig, expected %s or %s", + "Unrecognized response type %s for method CreateInstanceConfig, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), Operation.class.getName(), Exception.class.getName()))); @@ -169,7 +170,8 @@ public void updateInstanceConfig( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method UpdateInstanceConfig, expected %s or %s", + "Unrecognized response type %s for method UpdateInstanceConfig, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), Operation.class.getName(), Exception.class.getName()))); @@ -190,7 +192,8 @@ public void deleteInstanceConfig( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method DeleteInstanceConfig, expected %s or %s", + "Unrecognized response type %s for method DeleteInstanceConfig, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), Empty.class.getName(), Exception.class.getName()))); @@ -212,7 +215,8 @@ public void listInstanceConfigOperations( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method ListInstanceConfigOperations, expected %s or %s", + "Unrecognized response type %s for method ListInstanceConfigOperations, expected" + + " %s or %s", response == null ? "null" : response.getClass().getName(), ListInstanceConfigOperationsResponse.class.getName(), Exception.class.getName()))); @@ -255,7 +259,8 @@ public void listInstancePartitions( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method ListInstancePartitions, expected %s or %s", + "Unrecognized response type %s for method ListInstancePartitions, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), ListInstancePartitionsResponse.class.getName(), Exception.class.getName()))); @@ -421,7 +426,8 @@ public void getInstancePartition( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method GetInstancePartition, expected %s or %s", + "Unrecognized response type %s for method GetInstancePartition, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), InstancePartition.class.getName(), Exception.class.getName()))); @@ -442,7 +448,8 @@ public void createInstancePartition( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method CreateInstancePartition, expected %s or %s", + "Unrecognized response type %s for method CreateInstancePartition, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), Operation.class.getName(), Exception.class.getName()))); @@ -463,7 +470,8 @@ public void deleteInstancePartition( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method DeleteInstancePartition, expected %s or %s", + "Unrecognized response type %s for method DeleteInstancePartition, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), Empty.class.getName(), Exception.class.getName()))); @@ -484,7 +492,8 @@ public void updateInstancePartition( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method UpdateInstancePartition, expected %s or %s", + "Unrecognized response type %s for method UpdateInstancePartition, expected %s or" + + " %s", response == null ? "null" : response.getClass().getName(), Operation.class.getName(), Exception.class.getName()))); @@ -506,7 +515,8 @@ public void listInstancePartitionOperations( responseObserver.onError( new IllegalArgumentException( String.format( - "Unrecognized response type %s for method ListInstancePartitionOperations, expected %s or %s", + "Unrecognized response type %s for method ListInstancePartitionOperations," + + " expected %s or %s", response == null ? "null" : response.getClass().getName(), ListInstancePartitionOperationsResponse.class.getName(), Exception.class.getName()))); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/BenchmarkValidator.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/BenchmarkValidator.java new file mode 100644 index 00000000000..225197af6c1 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/BenchmarkValidator.java @@ -0,0 +1,156 @@ +/* + * 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.spanner.benchmarking; + +import com.google.cloud.spanner.benchmarking.BenchmarkValidator.BaselineResult.BenchmarkResult; +import com.google.cloud.spanner.benchmarking.BenchmarkValidator.BaselineResult.BenchmarkResult.Percentile; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class BenchmarkValidator { + + private final BaselineResult expectedResults; + private final List actualResults; + + public BenchmarkValidator(String baselineFile, String actualFile) { + Gson gson = new Gson(); + // Load expected result JSON from resource folder + this.expectedResults = gson.fromJson(loadJsonFromResources(baselineFile), BaselineResult.class); + // Load the actual result from current benchmarking run + this.actualResults = + gson.fromJson( + loadJsonFromFile(actualFile), + new TypeToken>() {}.getType()); + } + + void validate() { + // Validating the resultant percentile against expected percentile with allowed threshold + for (ActualBenchmarkResult actualResult : actualResults) { + BenchmarkResult expectResult = expectedResults.benchmarkResultMap.get(actualResult.benchmark); + if (expectResult == null) { + throw new ValidationException( + "Missing expected benchmark configuration for actual benchmarking"); + } + Map actualPercentilesMap = actualResult.primaryMetric.scorePercentiles; + // We will only be comparing the percentiles(p50, p90, p90) which are configured in the + // expected percentiles. This allows some checks to be disabled if required. + for (Percentile expectedPercentile : expectResult.scorePercentiles) { + String percentile = expectedPercentile.percentile; + double difference = + calculatePercentageDifference( + expectedPercentile.baseline, actualPercentilesMap.get(percentile)); + // if an absolute different in percentage is greater than allowed difference + // Then we are throwing validation error + if (Math.abs(Math.ceil(difference)) > expectedPercentile.difference) { + throw new ValidationException( + String.format( + "[%s][%s] Expected percentile %s[+/-%s] but got %s", + actualResult.benchmark, + percentile, + expectedPercentile.baseline, + expectedPercentile.difference, + actualPercentilesMap.get(percentile))); + } + } + } + } + + public static double calculatePercentageDifference(double base, double compareWith) { + if (base == 0) { + return 0.0; + } + return ((compareWith - base) / base) * 100; + } + + private String loadJsonFromFile(String file) { + try { + return new String(Files.readAllBytes(Paths.get(file))); + } catch (IOException e) { + throw new ValidationException("Failed to read file: " + file, e); + } + } + + private String loadJsonFromResources(String baselineFile) { + URL resourceUrl = getClass().getClassLoader().getResource(baselineFile); + if (resourceUrl == null) { + throw new ValidationException("File not found: " + baselineFile); + } + File file = new File(resourceUrl.getFile()); + return loadJsonFromFile(file.getAbsolutePath()); + } + + static class ActualBenchmarkResult { + String benchmark; + PrimaryMetric primaryMetric; + + static class PrimaryMetric { + Map scorePercentiles; + } + } + + static class BaselineResult { + Map benchmarkResultMap; + + static class BenchmarkResult { + List scorePercentiles; + + static class Percentile { + String percentile; + Double baseline; + Double difference; + } + } + } + + static class ValidationException extends RuntimeException { + ValidationException(String message) { + super(message); + } + + ValidationException(String message, Throwable cause) { + super(message, cause); + } + } + + private static String parseCommandLineArgs(String[] args, String key) { + if (args == null) { + return ""; + } + for (String arg : args) { + if (arg.startsWith("--" + key)) { + String[] splits = arg.split("="); + if (splits.length == 2) { + return splits[1].trim(); + } + } + } + return ""; + } + + public static void main(String[] args) { + String actualFile = parseCommandLineArgs(args, "file"); + new BenchmarkValidator("com/google/cloud/spanner/jmh/jmh-baseline.json", actualFile).validate(); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/MonitoringServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/MonitoringServiceImpl.java new file mode 100644 index 00000000000..aaa73876125 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/MonitoringServiceImpl.java @@ -0,0 +1,39 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.benchmarking; + +import com.google.monitoring.v3.CreateTimeSeriesRequest; +import com.google.monitoring.v3.MetricServiceGrpc.MetricServiceImplBase; +import com.google.protobuf.Empty; +import io.grpc.Status; +import io.grpc.stub.StreamObserver; + +class MonitoringServiceImpl extends MetricServiceImplBase { + + @Override + public void createServiceTimeSeries( + CreateTimeSeriesRequest request, StreamObserver responseObserver) { + try { + Thread.sleep(100); + responseObserver.onNext(Empty.getDefaultInstance()); + responseObserver.onCompleted(); + } catch (InterruptedException e) { + responseObserver.onError( + Status.CANCELLED.withCause(e).withDescription(e.getMessage()).asException()); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/ReadBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/ReadBenchmark.java new file mode 100644 index 00000000000..eed461fc897 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/ReadBenchmark.java @@ -0,0 +1,228 @@ +/* + * 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.spanner.benchmarking; + +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Key; +import com.google.cloud.spanner.KeySet; +import com.google.cloud.spanner.MockSpannerServiceImpl; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.ReadContext; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.Statement; +import com.google.protobuf.ListValue; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.StructType; +import com.google.spanner.v1.StructType.Field; +import com.google.spanner.v1.TypeCode; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Server; +import io.grpc.ServerBuilder; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Threads; +import org.openjdk.jmh.annotations.Timeout; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.infra.Blackhole; +import org.openjdk.jmh.results.format.ResultFormatType; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +@BenchmarkMode(Mode.SampleTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@Threads(10) +@Fork(1) +public class ReadBenchmark { + + @State(Scope.Benchmark) + public static class BenchmarkState { + + // Spanner state + Spanner spanner; + DatabaseClient databaseClient; + + // gRPC server + Server gRPCServer; + Server gRPCMonitoringServer; + + // Executors for handling parallel requests by gRPC server + ExecutorService gRPCServerExecutor; + + // Table + List columns = Arrays.asList("id", "name"); + String selectQuery = "SELECT * FROM [TABLE] WHERE ID = 1"; + + @Setup(Level.Trial) + public void setup() throws IOException { + // Enable JMH system property + System.setProperty("jmh.enabled", "true"); + + // Initializing mock spanner service + MockSpannerServiceImpl mockSpannerService = new MockSpannerServiceImpl(); + mockSpannerService.setAbortProbability(0.0D); + + // Initializing mock monitoring service + MonitoringServiceImpl mockMonitoringService = new MonitoringServiceImpl(); + + // Create a thread pool to handle concurrent requests + gRPCServerExecutor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + + // Creating Spanner Inprocess gRPC server + gRPCServer = + ServerBuilder.forPort(0) + .addService(mockSpannerService) + .executor(gRPCServerExecutor) + .build() + .start(); + + registerMocks(mockSpannerService); + + // Creating Monitoring Inprocess gRPC server + gRPCMonitoringServer = + ServerBuilder.forPort(0).addService(mockMonitoringService).build().start(); + + // Set the monitoring host port for exporter to forward requests to local netty gRPC server + System.setProperty( + "jmh.monitoring-server-port", String.valueOf(gRPCMonitoringServer.getPort())); + + spanner = + SpannerOptions.newBuilder() + .setProjectId("[PROJECT]") + .setCredentials(NoCredentials.getInstance()) + .setChannelConfigurator( + managedChannelBuilder -> + ManagedChannelBuilder.forAddress("0.0.0.0", gRPCServer.getPort()) + .usePlaintext()) + .build() + .getService(); + databaseClient = + spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE_ID]", "[DATABASE_ID]")); + } + + private void registerMocks(MockSpannerServiceImpl mockSpannerService) { + ResultSetMetadata selectMetadata = + ResultSetMetadata.newBuilder() + .setRowType( + StructType.newBuilder() + .addFields( + Field.newBuilder() + .setName("id") + .setType( + com.google.spanner.v1.Type.newBuilder() + .setCode(TypeCode.INT64) + .build()) + .build()) + .addFields( + Field.newBuilder() + .setName("name") + .setType( + com.google.spanner.v1.Type.newBuilder() + .setCode(TypeCode.STRING) + .build()) + .build()) + .build()) + .build(); + com.google.spanner.v1.ResultSet selectResultSet = + com.google.spanner.v1.ResultSet.newBuilder() + .addRows( + ListValue.newBuilder() + .addValues(com.google.protobuf.Value.newBuilder().setStringValue("1").build()) + .addValues( + com.google.protobuf.Value.newBuilder().setStringValue("[NAME]").build()) + .build()) + .setMetadata(selectMetadata) + .build(); + mockSpannerService.putStatementResult( + StatementResult.read( + "[TABLE]", KeySet.singleKey(Key.of()), this.columns, selectResultSet)); + mockSpannerService.putStatementResult( + StatementResult.query(Statement.of(this.selectQuery), selectResultSet)); + } + + @TearDown(Level.Trial) + public void tearDown() throws InterruptedException { + spanner.close(); + gRPCServer.shutdown(); + gRPCServerExecutor.shutdown(); + + // awaiting termination for servers and executors + gRPCServer.awaitTermination(10, TimeUnit.SECONDS); + gRPCServerExecutor.awaitTermination(10, TimeUnit.SECONDS); + } + } + + @Benchmark + @Warmup(time = 5, timeUnit = TimeUnit.MINUTES, iterations = 1) + @Measurement(time = 15, timeUnit = TimeUnit.MINUTES, iterations = 1) + @Timeout(time = 30, timeUnit = TimeUnit.MINUTES) + public void readBenchmark(BenchmarkState benchmarkState, Blackhole blackhole) { + try (ReadContext readContext = benchmarkState.databaseClient.singleUse()) { + try (ResultSet resultSet = + readContext.read("[TABLE]", KeySet.singleKey(Key.of("2")), benchmarkState.columns)) { + while (resultSet.next()) { + blackhole.consume(resultSet.getLong("id")); + } + } + } + } + + @Benchmark + @Warmup(time = 5, timeUnit = TimeUnit.MINUTES, iterations = 1) + @Measurement(time = 15, timeUnit = TimeUnit.MINUTES, iterations = 1) + @Timeout(time = 30, timeUnit = TimeUnit.MINUTES) + public void queryBenchmark(BenchmarkState benchmarkState, Blackhole blackhole) { + try (ReadContext readContext = benchmarkState.databaseClient.singleUse()) { + try (ResultSet resultSet = + readContext.executeQuery(Statement.of(benchmarkState.selectQuery))) { + while (resultSet.next()) { + blackhole.consume(resultSet.getLong("id")); + } + } + } + } + + public static void main(String[] args) throws RunnerException { + Options opt = + new OptionsBuilder() + .include(ReadBenchmark.class.getSimpleName()) + .result("jmh-result.json") + .resultFormat(ResultFormatType.JSON) + .build(); + new Runner(opt).run(); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbortedTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbortedTest.java index 00e396c498c..8fec34c267e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbortedTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbortedTest.java @@ -27,6 +27,7 @@ import com.google.cloud.Timestamp; import com.google.cloud.spanner.AbortedDueToConcurrentModificationException; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; import com.google.cloud.spanner.ResultSet; @@ -52,6 +53,7 @@ import io.grpc.StatusRuntimeException; import java.util.Collections; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.LongStream; import org.junit.Test; @@ -72,6 +74,8 @@ public void testCommitAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // verify that the there is no test record try (ResultSet rs = connection.executeQuery(Statement.of("SELECT COUNT(*) AS C FROM TEST WHERE ID=1"))) { @@ -112,6 +116,8 @@ public void testCommitAbortedDuringUpdateWithReturning() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // verify that the there is no test record try (ResultSet rs = connection.executeQuery(Statement.of("SELECT COUNT(*) AS C FROM TEST WHERE ID=1"))) { @@ -579,6 +585,29 @@ public void testAbortedWithBitReversedSequence() { } } + @Test + public void testTimeoutWithRetries() { + // Verifies that even though a single execution of a statement does not exceed the deadline, + // repeated retries of the statement does cause the deadline to be exceeded. + try (ITConnection connection = createConnection()) { + for (boolean autoCommit : new boolean[] {true, false}) { + connection.setAutocommit(autoCommit); + mockSpanner.setAbortProbability(1.0); + mockSpanner.setExecuteSqlExecutionTime(SimulatedExecutionTime.ofMinimumAndRandomTime(1, 0)); + + connection.setStatementTimeout(10, TimeUnit.MILLISECONDS); + SpannerException exception = + assertThrows(SpannerException.class, () -> connection.execute(INSERT_STATEMENT)); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, exception.getErrorCode()); + if (!autoCommit) { + connection.rollback(); + } + } + } finally { + mockSpanner.setAbortProbability(0.0); + } + } + static com.google.spanner.v1.ResultSet createBitReversedSequenceResultSet( long startValue, long endValue) { return com.google.spanner.v1.ResultSet.newBuilder() diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractConnectionImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractConnectionImplTest.java index cb959200425..0ad0588b68b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractConnectionImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractConnectionImplTest.java @@ -276,13 +276,14 @@ public void testSetStatementTimeout() { assertThat(connection.hasStatementTimeout(), is(false)); boolean gotException = false; try { - log("@EXPECT EXCEPTION INVALID_ARGUMENT"); + // log("@EXPECT EXCEPTION INVALID_ARGUMENT"); log(String.format("SET STATEMENT_TIMEOUT='0%s';", getTimeUnitAbbreviation(unit))); - connection.setStatementTimeout(0L, unit); + connection.clearStatementTimeout(); + // connection.setStatementTimeout(0L, unit); } catch (IllegalArgumentException e) { gotException = true; } - assertThat(gotException, is(true)); + assertThat(gotException, is(false)); log( String.format( "@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',%s", diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java index fa3ab00b138..67b4c8e0559 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner.connection; +import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ForceCloseSpannerFunction; import com.google.cloud.spanner.MockSpannerServiceImpl; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; @@ -107,7 +108,7 @@ public abstract class AbstractMockServerTest { .setMetadata(SINGLE_COL_INT64_RESULTSET_METADATA) .build(); public static final com.google.spanner.v1.ResultSet UPDATE_RETURNING_RESULTSET = - com.google.spanner.v1.ResultSet.newBuilder() + ResultSet.newBuilder() .setStats(ResultSetStats.newBuilder().setRowCountExact(1)) .setMetadata( ResultSetMetadata.newBuilder() @@ -118,6 +119,10 @@ public abstract class AbstractMockServerTest { .setName("col") .setType(Type.newBuilder().setCodeValue(TypeCode.INT64_VALUE)) .build()))) + .addRows( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("1").build()) + .build()) .build(); protected static final ResultSet SELECT1_RESULTSET = @@ -155,7 +160,7 @@ public abstract class AbstractMockServerTest { private static boolean clientStreamParentHandlers; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { startStaticServer(createServerInterceptor()); } @@ -198,6 +203,8 @@ public void getOperation( mockSpanner.putStatementResult( StatementResult.query(SELECT_RANDOM_STATEMENT, RANDOM_RESULT_SET)); mockSpanner.putStatementResult(StatementResult.query(SELECT1_STATEMENT, SELECT1_RESULTSET)); + mockSpanner.putStatementResult( + StatementResult.detectDialectResult(Dialect.GOOGLE_STANDARD_SQL)); futureParentHandlers = Logger.getLogger(AbstractFuture.class.getName()).getUseParentHandlers(); exceptionRunnableParentHandlers = @@ -246,6 +253,7 @@ public static void stopServer() { @Before public void setupResults() { mockSpanner.clearRequests(); + mockSpanner.removeAllExecutionTimes(); mockDatabaseAdmin.getRequests().clear(); mockInstanceAdmin.getRequests().clear(); } @@ -303,7 +311,7 @@ protected String getBaseUrl() { server.getPort()); } - protected int getPort() { + protected static int getPort() { return server.getPort(); } @@ -327,4 +335,18 @@ boolean isMultiplexedSessionsEnabled(Spanner spanner) { } return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); } + + boolean isMultiplexedSessionsEnabledForPartitionedOps(Spanner spanner) { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps(); + } + + boolean isMultiplexedSessionsEnabledForRW(Spanner spanner) { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptVerifier.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptVerifier.java index 15d6cf65808..29cc8b73206 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptVerifier.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptVerifier.java @@ -81,14 +81,8 @@ public abstract class AbstractSqlScriptVerifier { private static final Pattern VERIFY_PATTERN = Pattern.compile( - "(?is)\\s*(?:@EXPECT)\\s+" - + "(?NO_RESULT" - + "|RESULT_SET\\s*(?'.*?'(?,.*?)?)?" - + "|UPDATE_COUNT\\s*(?-?\\d{1,19})" - + "|EXCEPTION\\s*(?(?CANCELLED|UNKNOWN|INVALID_ARGUMENT|DEADLINE_EXCEEDED|NOT_FOUND|ALREADY_EXISTS|PERMISSION_DENIED|UNAUTHENTICATED|RESOURCE_EXHAUSTED|FAILED_PRECONDITION|ABORTED|OUT_OF_RANGE|UNIMPLEMENTED|INTERNAL|UNAVAILABLE|DATA_LOSS)(?:\\s*)(?'.*?')?)" - + "|EQUAL\\s+(?'.+?')\\s*,\\s*(?'.+?')" - + ")" - + "(\\n(?.*))?"); + "(?is)\\s*(?:@EXPECT)\\s+(?NO_RESULT|RESULT_SET\\s*(?'.*?'(?,.*?)?)?|UPDATE_COUNT\\s*(?-?\\d{1,19})|EXCEPTION\\s*(?(?CANCELLED|UNKNOWN|INVALID_ARGUMENT|DEADLINE_EXCEEDED|NOT_FOUND|ALREADY_EXISTS|PERMISSION_DENIED|UNAUTHENTICATED|RESOURCE_EXHAUSTED|FAILED_PRECONDITION|ABORTED|OUT_OF_RANGE|UNIMPLEMENTED|INTERNAL|UNAVAILABLE|DATA_LOSS)(?:\\s*)(?'.*?')?)|EQUAL\\s+(?'.+?')\\s*,\\s*(?'.+?'))(\\n" + + "(?.*))?"); private static final String PUT_CONDITION = "@PUT can only be used in combination with a statement that returns a" diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AllTypesMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AllTypesMockServerTest.java index 3313fa53426..1f75885aaa4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AllTypesMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AllTypesMockServerTest.java @@ -40,6 +40,7 @@ import java.util.Base64; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; import java.util.stream.IntStream; import org.junit.After; @@ -76,6 +77,7 @@ public static Object[] data() { public static final long PG_OID_VALUE = 1L; public static final byte[] BYTES_VALUE = "test-bytes".getBytes(StandardCharsets.UTF_8); public static final Date DATE_VALUE = Date.fromYearMonthDay(2024, 3, 2); + public static final UUID UUID_VALUE = UUID.randomUUID(); public static final Timestamp TIMESTAMP_VALUE = Timestamp.parseTimestamp("2024-03-02T07:07:00.20982735Z"); @@ -124,6 +126,9 @@ public static Object[] data() { Date.fromYearMonthDay(2024, 3, 3), Date.fromYearMonthDay(1, 1, 1), Date.fromYearMonthDay(9999, 12, 31)); + + public static final List UUID_ARRAY_VALUE = + Arrays.asList(UUID.randomUUID(), null, UUID.randomUUID()); public static final List TIMESTAMP_ARRAY_VALUE = Arrays.asList( Timestamp.parseTimestamp("2024-03-01T07:07:00.20982735Z"), @@ -157,15 +162,16 @@ private void setupAllTypesResultSet(Dialect dialect) { // COL7: JSON / PG_JSONB // COL8: BYTES // COL9: DATE - // COL10: TIMESTAMP - // COL11: PG_OID (added only for POSTGRESQL dialect) - // COL12-21: ARRAY<..> for the types above. + // COL10: UUID + // COL11: TIMESTAMP + // COL12: PG_OID (added only for POSTGRESQL dialect) + // COL13-22: ARRAY<..> for the types above. // Only for GoogleSQL: - // COL22: PROTO - // COL23: ENUM - // COL24: ARRAY - // COL25: ARRAY - // COL26: ARRAY (added only for POSTGRESQL dialect) + // COL23: PROTO + // COL24: ENUM + // COL25: ARRAY + // COL26: ARRAY + // COL27: ARRAY (added only for POSTGRESQL dialect) ListValue.Builder row1Builder = ListValue.newBuilder() .addValues(Value.newBuilder().setBoolValue(BOOL_VALUE)) @@ -183,6 +189,7 @@ private void setupAllTypesResultSet(Dialect dialect) { .addValues( Value.newBuilder().setStringValue(Base64.getEncoder().encodeToString(BYTES_VALUE))) .addValues(Value.newBuilder().setStringValue(DATE_VALUE.toString())) + .addValues(Value.newBuilder().setStringValue(UUID_VALUE.toString())) .addValues(Value.newBuilder().setStringValue(TIMESTAMP_VALUE.toString())); if (dialect == Dialect.POSTGRESQL) { row1Builder.addValues( @@ -356,6 +363,23 @@ private void setupAllTypesResultSet(Dialect dialect) { .build()) .collect(Collectors.toList())) .build())) + .addValues( + Value.newBuilder() + .setListValue( + ListValue.newBuilder() + .addAllValues( + UUID_ARRAY_VALUE.stream() + .map( + uuid -> + uuid == null + ? Value.newBuilder() + .setNullValue(NullValue.NULL_VALUE) + .build() + : Value.newBuilder() + .setStringValue(uuid.toString()) + .build()) + .collect(Collectors.toList())) + .build())) .addValues( Value.newBuilder() .setListValue( @@ -509,6 +533,8 @@ public static Statement createInsertStatement(Dialect dialect) { .bind("p" + ++param) .to(DATE_VALUE) .bind("p" + ++param) + .to(UUID_VALUE) + .bind("p" + ++param) .to(TIMESTAMP_VALUE); if (dialect == Dialect.POSTGRESQL) { builder.bind("p" + ++param).to(PG_OID_VALUE); @@ -539,6 +565,8 @@ public static Statement createInsertStatement(Dialect dialect) { .bind("p" + ++param) .toDateArray(DATE_ARRAY_VALUE) .bind("p" + ++param) + .toUuidArray(UUID_ARRAY_VALUE) + .bind("p" + ++param) .toTimestampArray(TIMESTAMP_ARRAY_VALUE); if (dialect == Dialect.POSTGRESQL) { builder.bind("p" + ++param).toInt64Array(PG_OID_ARRAY_VALUE); @@ -573,6 +601,7 @@ public void testSelectAllTypes() { dialect == Dialect.POSTGRESQL ? resultSet.getPgJsonb(++col) : resultSet.getJson(++col)); assertArrayEquals(BYTES_VALUE, resultSet.getBytes(++col).toByteArray()); assertEquals(DATE_VALUE, resultSet.getDate(++col)); + assertEquals(UUID_VALUE, resultSet.getUuid(++col)); assertEquals(TIMESTAMP_VALUE, resultSet.getTimestamp(++col)); if (dialect == Dialect.POSTGRESQL) { assertEquals(PG_OID_VALUE, resultSet.getLong(++col)); @@ -595,6 +624,7 @@ public void testSelectAllTypes() { : resultSet.getJsonList(++col)); assertEquals(BYTES_ARRAY_VALUE, resultSet.getBytesList(++col)); assertEquals(DATE_ARRAY_VALUE, resultSet.getDateList(++col)); + assertEquals(UUID_ARRAY_VALUE, resultSet.getUuidList(++col)); assertEquals(TIMESTAMP_ARRAY_VALUE, resultSet.getTimestampList(++col)); if (dialect == Dialect.POSTGRESQL) { assertEquals(PG_OID_ARRAY_VALUE, resultSet.getLongList(++col)); @@ -613,8 +643,8 @@ public void testInsertAllTypes() { ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); Map paramTypes = request.getParamTypesMap(); Map params = request.getParams().getFieldsMap(); - assertEquals(dialect == Dialect.POSTGRESQL ? 22 : 20, paramTypes.size()); - assertEquals(dialect == Dialect.POSTGRESQL ? 22 : 20, params.size()); + assertEquals(dialect == Dialect.POSTGRESQL ? 24 : 22, paramTypes.size()); + assertEquals(dialect == Dialect.POSTGRESQL ? 24 : 22, params.size()); // Verify param types. ImmutableList expectedTypes; @@ -630,6 +660,7 @@ public void testInsertAllTypes() { TypeCode.JSON, TypeCode.BYTES, TypeCode.DATE, + TypeCode.UUID, TypeCode.TIMESTAMP, TypeCode.INT64); } else { @@ -644,6 +675,7 @@ public void testInsertAllTypes() { TypeCode.JSON, TypeCode.BYTES, TypeCode.DATE, + TypeCode.UUID, TypeCode.TIMESTAMP); } for (int col = 0; col < expectedTypes.size(); col++) { @@ -670,6 +702,7 @@ public void testInsertAllTypes() { Base64.getEncoder().encodeToString(BYTES_VALUE), params.get("p" + ++col).getStringValue()); assertEquals(DATE_VALUE.toString(), params.get("p" + ++col).getStringValue()); + assertEquals(UUID_VALUE.toString(), params.get("p" + ++col).getStringValue()); assertEquals(TIMESTAMP_VALUE.toString(), params.get("p" + ++col).getStringValue()); if (dialect == Dialect.POSTGRESQL) { assertEquals(String.valueOf(PG_OID_VALUE), params.get("p" + ++col).getStringValue()); @@ -730,6 +763,11 @@ public void testInsertAllTypes() { params.get("p" + ++col).getListValue().getValuesList().stream() .map(value -> value.hasNullValue() ? null : Date.parseDate(value.getStringValue())) .collect(Collectors.toList())); + assertEquals( + UUID_ARRAY_VALUE, + params.get("p" + ++col).getListValue().getValuesList().stream() + .map(value -> value.hasNullValue() ? null : UUID.fromString(value.getStringValue())) + .collect(Collectors.toList())); assertEquals( TIMESTAMP_ARRAY_VALUE, params.get("p" + ++col).getListValue().getValuesList().stream() diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutoCommitMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutoCommitMockServerTest.java new file mode 100644 index 00000000000..961d90e14d8 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutoCommitMockServerTest.java @@ -0,0 +1,263 @@ +/* + * 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.spanner.connection; + +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.MockSpannerServiceImpl; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.connection.ITAbstractSpannerTest.ITConnection; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.ExecuteBatchDmlRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.RollbackRequest; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; +import io.grpc.Status; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class AutoCommitMockServerTest extends AbstractMockServerTest { + + @Parameter(0) + public IsolationLevel isolationLevel; + + @Parameter(1) + public ReadLockMode readLockMode; + + @Parameters(name = "isolationLevel = {0}, readLockMode = {1}") + public static Collection data() { + List result = new ArrayList<>(); + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + result.add(new Object[] {isolationLevel, readLockMode}); + } + } + return result; + } + + @Override + protected ITConnection createConnection() { + return createConnection( + Collections.emptyList(), + Collections.emptyList(), + String.format( + ";default_isolation_level=%s;read_lock_mode=%s", isolationLevel, readLockMode)); + } + + @Test + public void testQuery() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT1_STATEMENT)) {} + try (ResultSet ignore = + connection.executeQuery(Statement.of("SHOW VARIABLE READ_LOCK_MODE"))) {} + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasSingleUse()); + assertTrue(request.getTransaction().getSingleUse().hasReadOnly()); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, + request.getTransaction().getSingleUse().getIsolationLevel()); + assertFalse(request.getLastStatement()); + } + + @Test + public void testDml() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.executeUpdate(INSERT_STATEMENT); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertTrue(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testDmlFailed() { + Statement invalidInsert = Statement.of("insert into my_table (id, name) values (1, 'test')"); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.exception( + invalidInsert, + Status.ALREADY_EXISTS.withDescription("Row 1 already exists").asRuntimeException())); + + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + SpannerException exception = + assertThrows(SpannerException.class, () -> connection.executeUpdate(invalidInsert)); + assertEquals(ErrorCode.ALREADY_EXISTS, exception.getErrorCode()); + } + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertTrue(request.getLastStatement()); + // There should be no rollback request on the server, as there was no transaction ID returned + // to the client. + assertEquals(0, mockSpanner.countRequestsOfType(RollbackRequest.class)); + } + + @Test + public void testDmlReturning() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(INSERT_RETURNING_STATEMENT)) {} + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertTrue(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testBatchDml() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.startBatchDml(); + connection.executeUpdate(INSERT_STATEMENT); + connection.executeUpdate(INSERT_STATEMENT); + connection.runBatch(); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); + ExecuteBatchDmlRequest request = + mockSpanner.getRequestsOfType(ExecuteBatchDmlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertTrue(request.getLastStatements()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testPartitionedDml() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.setAutocommitDmlMode(AutocommitDmlMode.PARTITIONED_NON_ATOMIC); + connection.executeUpdate(INSERT_STATEMENT); + } + assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + BeginTransactionRequest beginRequest = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class).get(0); + assertTrue(beginRequest.getOptions().hasPartitionedDml()); + assertEquals( + IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED, beginRequest.getOptions().getIsolationLevel()); + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasId()); + assertFalse(request.getLastStatement()); + assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testDmlAborted() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + mockSpanner.abortNextTransaction(); + connection.executeUpdate(INSERT_STATEMENT); + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + for (ExecuteSqlRequest request : mockSpanner.getRequestsOfType(ExecuteSqlRequest.class)) { + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertTrue(request.getLastStatement()); + } + assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testDmlReturningAborted() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + mockSpanner.abortNextTransaction(); + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(INSERT_RETURNING_STATEMENT)) {} + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + for (ExecuteSqlRequest request : mockSpanner.getRequestsOfType(ExecuteSqlRequest.class)) { + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertTrue(request.getLastStatement()); + } + assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testBatchDmlAborted() { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + mockSpanner.abortNextTransaction(); + connection.startBatchDml(); + connection.executeUpdate(INSERT_STATEMENT); + connection.executeUpdate(INSERT_STATEMENT); + connection.runBatch(); + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); + for (ExecuteBatchDmlRequest request : + mockSpanner.getRequestsOfType(ExecuteBatchDmlRequest.class)) { + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertTrue(request.getLastStatements()); + } + assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutoDmlBatchMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutoDmlBatchMockServerTest.java index a7467997c6a..b359bcb60cc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutoDmlBatchMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutoDmlBatchMockServerTest.java @@ -97,6 +97,8 @@ public void testDmlWithReturningAfterDml() { // DML with a THEN RETURN clause cannot be batched. This therefore flushes the batch and // executes the INSERT ... THEN RETURN statement as a separate ExecuteSqlRequest. try (ResultSet resultSet = connection.executeQuery(INSERT_RETURNING_STATEMENT)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); assertFalse(resultSet.next()); } @@ -123,6 +125,8 @@ public void testDmlWithReturningAfterDml_usingExecute() { StatementResult result = connection.execute(INSERT_RETURNING_STATEMENT); assertEquals(ResultType.RESULT_SET, result.getResultType()); try (ResultSet resultSet = result.getResultSet()) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); assertFalse(resultSet.next()); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeTest.java index a66d14a8b76..bb845746e13 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeTest.java @@ -18,6 +18,9 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -28,6 +31,7 @@ import com.google.cloud.spanner.BatchClient; import com.google.cloud.spanner.DatabaseClient; import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.Options; import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.TransactionContext; @@ -82,12 +86,12 @@ public void testAutocommitDmlModeTransactional() { .setCredentials(NoCredentials.getInstance()) .setUri(URI) .build())) { - assertThat(connection.isAutocommit(), is(true)); - assertThat(connection.isReadOnly(), is(false)); - assertThat(connection.getAutocommitDmlMode(), is(AutocommitDmlMode.TRANSACTIONAL)); + assertTrue(connection.isAutocommit()); + assertFalse(connection.isReadOnly()); + assertEquals(AutocommitDmlMode.TRANSACTIONAL, connection.getAutocommitDmlMode()); connection.execute(Statement.of(UPDATE)); - verify(txContext).executeUpdate(Statement.of(UPDATE)); + verify(txContext).executeUpdate(Statement.of(UPDATE), Options.lastStatement()); verify(dbClient, never()).executePartitionedUpdate(Statement.of(UPDATE)); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginPgTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginPgTransactionTest.java index 2d2ef0781f0..068da4385fb 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginPgTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginPgTransactionTest.java @@ -28,6 +28,7 @@ import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType; import com.google.common.collect.ImmutableList; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -43,6 +44,8 @@ public void testBeginWithNoOption() { ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); int index = 1; + int withIsolationLevel = 0; + int withoutIsolationLevel = 0; for (String sql : ImmutableList.of( "begin", @@ -67,7 +70,13 @@ public void testBeginWithNoOption() { assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); - verify(connection, times(index)).beginTransaction(); + if (sql.contains("isolation") && !sql.contains("default")) { + withIsolationLevel++; + verify(connection, times(withIsolationLevel)).beginTransaction(any(IsolationLevel.class)); + } else { + withoutIsolationLevel++; + verify(connection, times(withoutIsolationLevel)).beginTransaction(); + } verify(connection, never()).setTransactionMode(any()); index++; } @@ -104,6 +113,8 @@ public void testBeginReadWrite() { ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); int index = 1; + int withIsolationLevel = 0; + int withoutIsolationLevel = 0; for (String sql : ImmutableList.of( "begin read write", @@ -116,7 +127,13 @@ public void testBeginReadWrite() { assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); - verify(connection, times(index)).beginTransaction(); + if (sql.contains("isolation") && !sql.contains("default")) { + withIsolationLevel++; + verify(connection, times(withIsolationLevel)).beginTransaction(any(IsolationLevel.class)); + } else { + withoutIsolationLevel++; + verify(connection, times(withoutIsolationLevel)).beginTransaction(); + } verify(connection, times(index)).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION); verify(connection, never()).setTransactionMode(TransactionMode.READ_ONLY_TRANSACTION); index++; @@ -129,6 +146,8 @@ public void testBeginReadOnlyWithIsolationLevel() { ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); int index = 1; + int withIsolationLevel = 0; + int withoutIsolationLevel = 0; for (String sql : ImmutableList.of( "begin read only isolation level serializable", @@ -142,7 +161,13 @@ public void testBeginReadOnlyWithIsolationLevel() { assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); - verify(connection, times(index)).beginTransaction(); + if (sql.contains("isolation") && !sql.contains("default")) { + withIsolationLevel++; + verify(connection, times(withIsolationLevel)).beginTransaction(any(IsolationLevel.class)); + } else { + withoutIsolationLevel++; + verify(connection, times(withoutIsolationLevel)).beginTransaction(); + } verify(connection, times(index)).setTransactionMode(TransactionMode.READ_ONLY_TRANSACTION); verify(connection, never()).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION); index++; @@ -155,6 +180,8 @@ public void testBeginWithNotDeferrable() { ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); int index = 1; + int withIsolationLevel = 0; + int withoutIsolationLevel = 0; for (String sql : ImmutableList.of( "begin read only isolation level serializable not deferrable", @@ -175,9 +202,16 @@ public void testBeginWithNotDeferrable() { assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); - verify(connection, times(index)).beginTransaction(); + if (sql.contains("isolation") && !sql.contains("default")) { + withIsolationLevel++; + verify(connection, times(withIsolationLevel)).beginTransaction(any(IsolationLevel.class)); + } else { + withoutIsolationLevel++; + verify(connection, times(withoutIsolationLevel)).beginTransaction(); + } verify(connection, times(index)).setTransactionMode(TransactionMode.READ_ONLY_TRANSACTION); verify(connection, never()).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION); + index++; } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginTransactionTest.java new file mode 100644 index 00000000000..510d97dd83e --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginTransactionTest.java @@ -0,0 +1,129 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; +import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType; +import com.google.common.collect.ImmutableList; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class BeginTransactionTest { + private final AbstractStatementParser parser = + AbstractStatementParser.getInstance(Dialect.GOOGLE_STANDARD_SQL); + + @Test + public void testBeginNoIsolationLevel() { + ConnectionImpl connection = mock(ConnectionImpl.class); + ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); + + int index = 1; + for (String sql : + ImmutableList.of( + "begin", + "begin transaction", + "start", + "start transaction", + "\t\n begin\n \ttransaction \n")) { + ParsedStatement statement = parser.parse(Statement.of(sql)); + assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); + statement.getClientSideStatement().execute(executor, statement); + + verify(connection, times(index)).beginTransaction(); + verify(connection, never()).setTransactionMode(any()); + index++; + } + } + + @Test + public void testBeginRepeatableRead() { + ConnectionImpl connection = mock(ConnectionImpl.class); + ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); + + int index = 1; + for (String sql : + ImmutableList.of( + "begin isolation level repeatable read", + "begin transaction isolation level repeatable read", + "start isolation level repeatable read", + "start transaction isolation level repeatable read", + "start transaction isolation level repeatable read", + "start\n \ttransaction \t\nisolation\n\t level \t \nrepeatable \n \t read")) { + ParsedStatement statement = parser.parse(Statement.of(sql)); + assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); + statement.getClientSideStatement().execute(executor, statement); + + verify(connection, times(index)).beginTransaction(IsolationLevel.REPEATABLE_READ); + verify(connection, never()).setTransactionMode(any()); + index++; + } + } + + @Test + public void testBeginSerializable() { + ConnectionImpl connection = mock(ConnectionImpl.class); + ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); + + int index = 1; + for (String sql : + ImmutableList.of( + "begin isolation level serializable", + "begin transaction isolation level serializable", + "start isolation level serializable", + "start transaction isolation level serializable", + "start transaction isolation level serializable", + "start\n \ttransaction \t\nisolation\n\t level \t \nserializable \n \t ")) { + ParsedStatement statement = parser.parse(Statement.of(sql)); + assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); + statement.getClientSideStatement().execute(executor, statement); + + verify(connection, times(index)).beginTransaction(IsolationLevel.SERIALIZABLE); + verify(connection, never()).setTransactionMode(any()); + index++; + } + } + + @Test + public void testInvalidStatements() { + for (String sql : + ImmutableList.of( + "begin isolation level", + "begin transaction level serializable", + "start isolation serializable", + "start transaction repeatable read", + "begin isolation level read committed", + "begin isloation level serializable", + "begin transaction isolation level repeatable", + "begin transaction isolation level serializable read", + "begin transaction isolation level repeatable_read")) { + ParsedStatement statement = parser.parse(Statement.of(sql)); + assertEquals(sql, StatementType.UNKNOWN, statement.getType()); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CallTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CallTest.java new file mode 100644 index 00000000000..5a46d4cd58f --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CallTest.java @@ -0,0 +1,65 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import com.google.cloud.spanner.MockSpannerServiceImpl; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Statement; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.StructType; +import com.google.spanner.v1.StructType.Field; +import com.google.spanner.v1.Type; +import com.google.spanner.v1.TypeCode; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class CallTest extends AbstractMockServerTest { + + @Test + public void testCancelQuery() { + // 'CALL' should be recognized as a valid query keyword. + Statement statement = Statement.of("call cancel_query('1234')"); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.query( + statement, + com.google.spanner.v1.ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setRowType( + StructType.newBuilder() + .addFields( + Field.newBuilder() + .setName("call_result_tvf") + .setType(Type.newBuilder().setCode(TypeCode.BOOL).build()) + .build()) + .build()) + .build()) + .build())); + + try (Connection connection = createConnection()) { + try (ResultSet resultSet = connection.executeQuery(statement)) { + assertFalse(resultSet.next()); + assertEquals(1, resultSet.getColumnCount()); + } + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ChecksumResultSetTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ChecksumResultSetTest.java index e13cfa91c1f..6201200ec07 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ChecksumResultSetTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ChecksumResultSetTest.java @@ -27,6 +27,7 @@ import com.google.cloud.Timestamp; import com.google.cloud.spanner.AbortedDueToConcurrentModificationException; import com.google.cloud.spanner.AbortedException; +import com.google.cloud.spanner.Interval; import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.ResultSets; import com.google.cloud.spanner.SingerProto.Genre; @@ -42,6 +43,7 @@ import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.util.Arrays; +import java.util.UUID; import java.util.concurrent.Callable; import org.junit.Test; import org.junit.runner.RunWith; @@ -81,6 +83,10 @@ public class ChecksumResultSetTest { .to(Timestamp.parseTimestamp("2022-08-04T11:20:00.123456789Z")) .set("date") .to(Date.fromYearMonthDay(2022, 8, 3)) + .set("uuid") + .to(UUID.randomUUID()) + .set("interval") + .to(Interval.parseFromString("P8Y2M3DT4H5M6.789123456S")) .set("boolArray") .to(Value.boolArray(Arrays.asList(Boolean.FALSE, null, Boolean.TRUE))) .set("longArray") @@ -108,6 +114,15 @@ public class ChecksumResultSetTest { .to( Value.dateArray( Arrays.asList(Date.parseDate("2000-01-01"), null, Date.parseDate("2022-08-03")))) + .set("uuidArray") + .to(Value.uuidArray(Arrays.asList(UUID.randomUUID(), UUID.randomUUID()))) + .set("intervalArray") + .to( + Value.intervalArray( + Arrays.asList( + Interval.parseFromString("P1Y2M-3DT4H5M6.789123456S"), + null, + Interval.parseFromString("P-1Y-2M-3DT-4H-5M-6.789123456S")))) .set("stringArray") .to(Value.stringArray(Arrays.asList("test2", null, "test1"))) .set("jsonArray") @@ -150,6 +165,8 @@ public void testRetry() { Type.StructField.of("byteVal", Type.bytes()), Type.StructField.of("timestamp", Type.timestamp()), Type.StructField.of("date", Type.date()), + Type.StructField.of("uuid", Type.uuid()), + Type.StructField.of("interval", Type.interval()), Type.StructField.of("boolArray", Type.array(Type.bool())), Type.StructField.of("longArray", Type.array(Type.int64())), Type.StructField.of("doubleArray", Type.array(Type.float64())), @@ -159,6 +176,8 @@ public void testRetry() { Type.StructField.of("byteArray", Type.array(Type.bytes())), Type.StructField.of("timestampArray", Type.array(Type.timestamp())), Type.StructField.of("dateArray", Type.array(Type.date())), + Type.StructField.of("uuidArray", Type.array(Type.uuid())), + Type.StructField.of("intervalArray", Type.array(Type.interval())), Type.StructField.of("stringArray", Type.array(Type.string())), Type.StructField.of("jsonArray", Type.array(Type.json())), Type.StructField.of("pgJsonbArray", Type.array(Type.pgJsonb())), @@ -200,6 +219,10 @@ public void testRetry() { .to(Timestamp.parseTimestamp("2022-08-04T10:19:00.123456789Z")) .set("date") .to(Date.fromYearMonthDay(2022, 8, 4)) + .set("uuid") + .to(UUID.randomUUID()) + .set("interval") + .to(Interval.parseFromString("P1Y2M3DT4H5M6.789123456S")) .set("boolArray") .to(Value.boolArray(Arrays.asList(Boolean.TRUE, null, Boolean.FALSE))) .set("longArray") @@ -228,6 +251,15 @@ public void testRetry() { Value.dateArray( Arrays.asList( Date.parseDate("2000-01-01"), null, Date.parseDate("2022-08-04")))) + .set("uuidArray") + .to(Value.uuidArray(Arrays.asList(UUID.randomUUID(), UUID.randomUUID()))) + .set("intervalArray") + .to( + Value.intervalArray( + Arrays.asList( + Interval.parseFromString("P1Y2M3DT4H5M6.789123456S"), + null, + Interval.parseFromString("P-1Y-2M-3DT-4H-5M-6.789123456S")))) .set("stringArray") .to(Value.stringArray(Arrays.asList("test1", null, "test2"))) .set("jsonArray") @@ -282,6 +314,10 @@ public void testRetry() { .to((Timestamp) null) .set("date") .to((Date) null) + .set("uuid") + .to((UUID) null) + .set("interval") + .to((Interval) null) .set("boolArray") .toBoolArray((Iterable) null) .set("longArray") @@ -300,6 +336,10 @@ public void testRetry() { .toTimestampArray(null) .set("dateArray") .toDateArray(null) + .set("uuidArray") + .toUuidArray(null) + .set("intervalArray") + .toIntervalArray(null) .set("stringArray") .toStringArray(null) .set("jsonArray") diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientContextMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientContextMockServerTest.java new file mode 100644 index 00000000000..093af070ea6 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientContextMockServerTest.java @@ -0,0 +1,353 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.MockSpannerServiceImpl; +import com.google.cloud.spanner.Mutation; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.protobuf.Value; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.ExecuteBatchDmlRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.RequestOptions; +import java.util.Collections; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class ClientContextMockServerTest extends AbstractMockServerTest { + + @Parameters(name = "dialect = {0}") + public static Object[] data() { + return Dialect.values(); + } + + @Parameter public Dialect dialect; + + private Dialect currentDialect; + + private static final RequestOptions.ClientContext CLIENT_CONTEXT = + RequestOptions.ClientContext.newBuilder() + .putSecureContext("test-key", Value.newBuilder().setStringValue("test-value").build()) + .build(); + + @Before + public void setupDialect() { + if (currentDialect != dialect) { + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.detectDialectResult(dialect)); + SpannerPool.closeSpannerPool(); + currentDialect = dialect; + } + } + + @After + public void clearRequests() { + mockSpanner.clearRequests(); + } + + @Test + public void testQuery_PropagatesClientContext() { + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getClientContext()); + } + } + + @Test + public void testUpdate_PropagatesClientContext() { + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + connection.executeUpdate(INSERT_STATEMENT); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getClientContext()); + } + } + + @Test + public void testBatchUpdate_PropagatesClientContext() { + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + connection.executeBatchUpdate(Collections.singletonList(INSERT_STATEMENT)); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(ExecuteBatchDmlRequest.class) + .get(0) + .getRequestOptions() + .getClientContext()); + } + } + + @Test + public void testCommit_PropagatesClientContext() { + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + connection.executeUpdate(INSERT_STATEMENT); + connection.commit(); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(CommitRequest.class) + .get(0) + .getRequestOptions() + .getClientContext()); + } + } + + @Test + public void testBeginTransaction_PropagatesClientContextWithLazyStart() { + // The BeginTransaction option is inlined with the first statement. + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + connection.beginTransaction(); + connection.executeUpdate(INSERT_STATEMENT); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertEquals(CLIENT_CONTEXT, request.getRequestOptions().getClientContext()); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + } + } + + @Test + public void testBeginTransaction_PropagatesClientContextWithEagerStartAborted() { + // We can force an explicit BeginTransaction RPC by failing the first statement with an ABORTED + // error. If the statement fails before returning a transaction ID, the retry will use an + // explicit BeginTransaction RPC. + // Note: This relies on triggering a retry logic which is the only way to force explicit + // BeginTransaction in the standard Connection API flow without additional configuration (like + // setting delayTransactionStartUntilFirstWrite=false which is not exposed publicly here). + try (Connection connection = createConnection()) { + // Abort the next statement. This will cause the ExecuteSql request (which carries the + // BeginTransaction option) to fail with an ABORTED error. + // Since the request fails, the client does not receive the transaction ID. + // The retry logic in TransactionRunnerImpl/ReadWriteTransaction will then force an + // explicit BeginTransaction RPC to ensure a transaction is started before retrying the + // statement. + mockSpanner.abortNextStatement(); + + connection.setClientContext(CLIENT_CONTEXT); + connection.beginTransaction(); + connection.executeUpdate(INSERT_STATEMENT); + + // We expect two ExecuteSqlRequests. + // 1. The first one fails with ABORTED. This request includes the BeginTransaction option. + // 2. The retry. + int executeSqlCount = mockSpanner.countRequestsOfType(ExecuteSqlRequest.class); + assertEquals(2, executeSqlCount); + + for (ExecuteSqlRequest req : mockSpanner.getRequestsOfType(ExecuteSqlRequest.class)) { + assertEquals(CLIENT_CONTEXT, req.getRequestOptions().getClientContext()); + } + + // We also expect 1 BeginTransactionRequest because the retry used explicit BeginTransaction. + assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + BeginTransactionRequest beginRequest = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class).get(0); + assertEquals(CLIENT_CONTEXT, beginRequest.getRequestOptions().getClientContext()); + } + } + + @Test + public void testBeginTransaction_PropagatesClientContextWithEagerStartMutations() { + // We can also force an explicit BeginTransaction RPC by constructing a transaction + // that only issues mutations. Mutation RPCs cannot start a transaction, so + // if they are the only RPCs in the transaction, then an explicit BeginTransaction + // must be issued. + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + connection.beginTransaction(); + connection.bufferedWrite(Mutation.newInsertBuilder("my-table").set("my-col").to(1L).build()); + connection.commit(); + + assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + BeginTransactionRequest request = + mockSpanner.getRequestsOfType(BeginTransactionRequest.class).get(0); + assertEquals(CLIENT_CONTEXT, request.getRequestOptions().getClientContext()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + CommitRequest commitRequest = mockSpanner.getRequestsOfType(CommitRequest.class).get(0); + assertEquals(CLIENT_CONTEXT, commitRequest.getRequestOptions().getClientContext()); + } + } + + @Test + public void testDatabaseClient_ClientContextMerging() { + String projectId = "test-project"; + String instanceId = "test-instance"; + String databaseId = "test-database"; + + // 1. Define the default ClientContext in SpannerOptions. + RequestOptions.ClientContext defaultContext = + RequestOptions.ClientContext.newBuilder() + .putSecureContext("key1", Value.newBuilder().setStringValue("default_value1").build()) + .putSecureContext("key2", Value.newBuilder().setStringValue("default_value2").build()) + .build(); + + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId(projectId) + .setHost("http://localhost:" + getPort()) + .usePlainText() + .setDefaultClientContext(defaultContext) + .build(); + + try (Spanner spanner = options.getService()) { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + + // 2. Define the request-specific ClientContext that overrides one key and adds a new one. + RequestOptions.ClientContext requestContext = + RequestOptions.ClientContext.newBuilder() + .putSecureContext("key2", Value.newBuilder().setStringValue("request_value2").build()) + .putSecureContext("key3", Value.newBuilder().setStringValue("request_value3").build()) + .build(); + + // 3. Define the expected merged ClientContext (Union + Overwrite). + RequestOptions.ClientContext expectedContext = + RequestOptions.ClientContext.newBuilder() + .putSecureContext("key1", Value.newBuilder().setStringValue("default_value1").build()) + .putSecureContext("key2", Value.newBuilder().setStringValue("request_value2").build()) + .putSecureContext("key3", Value.newBuilder().setStringValue("request_value3").build()) + .build(); + + // Execute a query with the request context. + try (ResultSet rs = + client + .singleUse() + .executeQuery( + SELECT_COUNT_STATEMENT, + com.google.cloud.spanner.Options.clientContext(requestContext))) { + rs.next(); + } + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + RequestOptions.ClientContext actualContext = + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getClientContext(); + + assertEquals(expectedContext, actualContext); + + // Verify specifically that key2 was overwritten and key1 was preserved. + assertEquals( + "request_value2", actualContext.getSecureContextOrThrow("key2").getStringValue()); + assertEquals( + "default_value1", actualContext.getSecureContextOrThrow("key1").getStringValue()); + } + } + + @Test + public void testPersistence() { + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getClientContext()); + + connection.executeUpdate(INSERT_STATEMENT); + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(1) + .getRequestOptions() + .getClientContext()); + + connection.commit(); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(CommitRequest.class) + .get(0) + .getRequestOptions() + .getClientContext()); + } + } + + @Test + public void testClearClientContext() { + try (Connection connection = createConnection()) { + connection.setClientContext(CLIENT_CONTEXT); + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + + assertEquals( + CLIENT_CONTEXT, + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getClientContext()); + + connection.setClientContext(null); + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertFalse( + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(1) + .getRequestOptions() + .hasClientContext()); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java index fa208e799f9..4055f8e949c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java @@ -18,8 +18,10 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; @@ -64,6 +66,13 @@ private static String getScriptFile(Dialect dialect) { } } + @Test + public void testIsQuery() { + AbstractStatementParser parser = AbstractStatementParser.getInstance(dialect); + ParsedStatement parsedStatement = parser.parse(Statement.of("show/spanner.statement_tag;")); + assertTrue(parsedStatement.isQuery()); + } + @Test public void testExecuteClientSideStatementsScript() throws Exception { SqlScriptVerifier verifier = new SqlScriptVerifier(new TestConnectionProvider(dialect)); @@ -145,6 +154,7 @@ public void testSetStatementTimeout() { new DurationTestData("set statement_timeout = " + resetValue + " ", Duration.ZERO), }) { ConnectionStatementExecutor executor = mock(ConnectionStatementExecutor.class); + when(executor.getDialect()).thenReturn(dialect); ParsedStatement statement = parser.parse(Statement.of(data.sql)); assertEquals( ClientSideStatementType.SET_STATEMENT_TIMEOUT, statement.getClientSideStatementType()); @@ -188,6 +198,7 @@ public void testSetMaxCommitDelay() { new DurationTestData("set " + prefix + "max_commit_delay = null ", Duration.ZERO), }) { ConnectionStatementExecutor executor = mock(ConnectionStatementExecutor.class); + when(executor.getDialect()).thenReturn(dialect); ParsedStatement statement = parser.parse(Statement.of(data.sql)); assertEquals( ClientSideStatementType.SET_MAX_COMMIT_DELAY, statement.getClientSideStatementType()); @@ -293,7 +304,7 @@ private static void generateTestStatements( log( statement.getExamplePrerequisiteStatements(), withInvalidSuffix(sql), - parser.isQuery(withInvalidSuffix(sql)) + parser.parse(Statement.of(withInvalidSuffix(sql))).isQuery() ? ErrorCode.UNIMPLEMENTED : ErrorCode.INVALID_ARGUMENT); } @@ -313,13 +324,13 @@ private static void generateTestStatements( log( statement.getExamplePrerequisiteStatements(), withSuffix(replacement, sql), - parser.isQuery(withSuffix(replacement, sql)) + parser.parse(Statement.of(withSuffix(replacement, sql))).isQuery() ? ErrorCode.UNIMPLEMENTED : ErrorCode.INVALID_ARGUMENT); log( statement.getExamplePrerequisiteStatements(), replaceLastSpaceWith(replacement, sql), - parser.isQuery(replaceLastSpaceWith(replacement, sql)) + parser.parse(Statement.of(replaceLastSpaceWith(replacement, sql))).isQuery() ? ErrorCode.UNIMPLEMENTED : ErrorCode.INVALID_ARGUMENT); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionAsyncApiTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionAsyncApiTest.java index c6777da5b51..a2b176742e1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionAsyncApiTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionAsyncApiTest.java @@ -28,8 +28,10 @@ import com.google.cloud.spanner.AsyncResultSet; import com.google.cloud.spanner.AsyncResultSet.CallbackResponse; import com.google.cloud.spanner.AsyncResultSet.ReadyCallback; +import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.ForceCloseSpannerFunction; +import com.google.cloud.spanner.MockSpannerServiceImpl; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.Mutation; import com.google.cloud.spanner.ResultSet; @@ -48,6 +50,7 @@ import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ExecuteSqlRequest; +import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -336,6 +339,42 @@ public void testAutocommitRunBatch() { } } + @Test + public void testDmlBatchUpdateCount() { + Arrays.asList(Dialect.POSTGRESQL, Dialect.GOOGLE_STANDARD_SQL) + .forEach( + dialect -> { + String prefix = dialect == Dialect.POSTGRESQL ? "spanner." : ""; + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.detectDialectResult(dialect)); + SpannerPool.closeSpannerPool(); + try { + try (Connection connection = createConnection()) { + connection.execute( + Statement.of("set local " + prefix + "batch_dml_update_count = 1")); + connection.execute(Statement.of("START BATCH DML")); + List statements = Arrays.asList(INSERT_STATEMENT, INSERT_STATEMENT); + long[] updateCounts = connection.executeBatchUpdate(statements); + assertThat(updateCounts).asList().containsExactly(1L, 1L); + connection.execute(Statement.of("RUN BATCH")); + connection.commit(); + + connection.execute(Statement.of("START BATCH DML")); + statements = Arrays.asList(INSERT_STATEMENT, INSERT_STATEMENT); + updateCounts = connection.executeBatchUpdate(statements); + assertThat(updateCounts).asList().containsExactly(-1L, -1L); + connection.execute(Statement.of("RUN BATCH")); + connection.commit(); + } + } finally { + SpannerPool.closeSpannerPool(); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.detectDialectResult( + Dialect.GOOGLE_STANDARD_SQL)); + } + }); + } + @Test public void testAutocommitRunBatchAsync() { try (Connection connection = createConnection()) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java index a81005bbb45..c1a5e2873de 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java @@ -46,6 +46,7 @@ import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.NoCredentials; import com.google.cloud.Timestamp; +import com.google.cloud.spanner.AbortedException; import com.google.cloud.spanner.BatchClient; import com.google.cloud.spanner.BatchReadOnlyTransaction; import com.google.cloud.spanner.BatchTransactionId; @@ -120,6 +121,11 @@ public TransactionContext begin() { return txContext; } + @Override + public TransactionContext begin(AbortedException exception) { + return begin(); + } + @Override public void commit() { Timestamp commitTimestamp = Timestamp.now(); @@ -354,7 +360,8 @@ public TransactionRunner answer(InvocationOnMock invocation) { public T run(TransactionCallable callable) { commitResponse = new CommitResponse(Timestamp.ofTimeSecondsAndNanos(1, 1)); TransactionContext transaction = mock(TransactionContext.class); - when(transaction.executeUpdate(Statement.of(UPDATE))).thenReturn(1L); + when(transaction.executeUpdate(Statement.of(UPDATE), Options.lastStatement())) + .thenReturn(1L); try { return callable.run(transaction); } catch (Exception e) { @@ -1941,6 +1948,45 @@ private void assertThrowResultNotAllowed( "Only statements that return a result of one of the following types are allowed")); } + @Test + public void testSetAndGetClientContext() { + try (Connection connection = + createConnection( + ConnectionOptions.newBuilder() + .setUri(URI) + .setCredentials(NoCredentials.getInstance()) + .build())) { + com.google.spanner.v1.RequestOptions.ClientContext context = + com.google.spanner.v1.RequestOptions.ClientContext.newBuilder() + .putSecureContext( + "key", com.google.protobuf.Value.newBuilder().setStringValue("test").build()) + .build(); + connection.setClientContext(context); + assertEquals(context, connection.getClientContext()); + } + } + + @Test + public void testResetClearsClientContext() { + try (Connection connection = + createConnection( + ConnectionOptions.newBuilder() + .setUri(URI) + .setCredentials(NoCredentials.getInstance()) + .build())) { + com.google.spanner.v1.RequestOptions.ClientContext context = + com.google.spanner.v1.RequestOptions.ClientContext.newBuilder() + .putSecureContext( + "key", com.google.protobuf.Value.newBuilder().setStringValue("test").build()) + .build(); + connection.setClientContext(context); + assertEquals(context, connection.getClientContext()); + + connection.reset(); + assertNull(connection.getClientContext()); + } + } + @Test public void testProtoDescriptorsAlwaysAllowed() { ConnectionOptions connectionOptions = mock(ConnectionOptions.class); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java index f826ec08dfc..f745e9ad63e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner.connection; +import static com.google.cloud.spanner.connection.ConnectionOptions.Builder.EXTERNAL_HOST_PATTERN; import static com.google.cloud.spanner.connection.ConnectionOptions.Builder.SPANNER_URI_PATTERN; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENDPOINT; import static com.google.cloud.spanner.connection.ConnectionOptions.determineHost; @@ -25,6 +26,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; import com.google.api.gax.core.CredentialsProvider; import com.google.api.gax.core.NoCredentialsProvider; @@ -35,6 +37,7 @@ import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerOptions; import com.google.common.collect.ImmutableMap; @@ -46,6 +49,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Matcher; import org.junit.Test; import org.junit.function.ThrowingRunnable; @@ -56,7 +60,7 @@ public class ConnectionOptionsTest { private static final String FILE_TEST_PATH = Objects.requireNonNull(ConnectionOptionsTest.class.getResource("test-key.json")).getFile(); - private static final String DEFAULT_HOST = "https://spanner.googleapis.com"; + private static final String DEFAULT_HOST = null; private static final String TEST_PROJECT = "test-project-123"; private static final String TEST_INSTANCE = "test-instance-123"; private static final String TEST_DATABASE = "test-database-123"; @@ -432,6 +436,8 @@ public void testBuilderSetUri() { "cloudspanner://spanner.googleapis.com/projects/test-project-123/instances/test-instance?autocommit=true;readonly=false"); builder.setUri( "cloudspanner://spanner.googleapis.com/projects/test-project-123?autocommit=true;readonly=false"); + builder.setUri( + "cloudspanner://spanner.googleapis.com/projects/test-project-123?statement_timeout='10s';transaction_timeout='60s'"); // set invalid uri's setInvalidUri( @@ -592,7 +598,8 @@ public void testParseOAuthToken() { exception .getMessage() .contains( - "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and OAuth token")); + "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and" + + " OAuth token")); // Now try to use only an OAuth token. builder = @@ -637,7 +644,8 @@ public void testSetOAuthTokenAndCredentials() { exception .getMessage() .contains( - "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and OAuth token")); + "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and" + + " OAuth token")); } @Test @@ -942,7 +950,8 @@ public void testInvalidEncodedCredentials() throws Throwable { assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); assertThat(e.getMessage()) .contains( - "The encoded credentials do not contain a valid Google Cloud credentials JSON string."); + "The encoded credentials do not contain a valid Google Cloud credentials JSON" + + " string."); }); } @@ -999,7 +1008,8 @@ public void testSetCredentialsAndEncodedCredentials() throws Throwable { e.getMessage(), e.getMessage() .contains( - "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and OAuth token")); + "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider" + + " and OAuth token")); }); } @@ -1051,8 +1061,9 @@ public void testValidCredentialsProvider_WithoutEnablingSystemProperty() { SpannerException.class, () -> ConnectionOptions.newBuilder().setUri(uri).build()); assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); assertEquals( - "FAILED_PRECONDITION: credentialsProvider can only be used if the system property ENABLE_CREDENTIALS_PROVIDER has been set to true. " - + "Start the application with the JVM command line option -DENABLE_CREDENTIALS_PROVIDER=true", + "FAILED_PRECONDITION: credentialsProvider can only be used if the system property" + + " ENABLE_CREDENTIALS_PROVIDER has been set to true. Start the application with the" + + " JVM command line option -DENABLE_CREDENTIALS_PROVIDER=true", exception.getMessage()); } @@ -1074,7 +1085,8 @@ public void testSetCredentialsAndCredentialsProvider() throws Throwable { e.getMessage(), e.getMessage() .contains( - "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider and OAuth token")); + "Specify only one of credentialsUrl, encodedCredentials, credentialsProvider" + + " and OAuth token")); }); } @@ -1211,4 +1223,308 @@ public void testEnableApiTracing() { .build() .isEnableApiTracing()); } + + @Test + public void testExternalHostPatterns() { + Matcher matcherWithoutInstance = + EXTERNAL_HOST_PATTERN.matcher("cloudspanner://localhost:15000/databases/test-db"); + assertTrue(matcherWithoutInstance.matches()); + assertNull(matcherWithoutInstance.group("INSTANCEGROUP")); + assertEquals("test-db", matcherWithoutInstance.group("DATABASEGROUP")); + Matcher matcherWithProperty = + EXTERNAL_HOST_PATTERN.matcher( + "cloudspanner://localhost:15000/instances/default/databases/singers-db?usePlainText=true"); + assertTrue(matcherWithProperty.matches()); + assertEquals("default", matcherWithProperty.group("INSTANCEGROUP")); + assertEquals("singers-db", matcherWithProperty.group("DATABASEGROUP")); + Matcher matcherWithoutPort = + EXTERNAL_HOST_PATTERN.matcher( + "cloudspanner://localhost/instances/default/databases/test-db"); + assertTrue(matcherWithoutPort.matches()); + assertEquals("default", matcherWithoutPort.group("INSTANCEGROUP")); + assertEquals("test-db", matcherWithoutPort.group("DATABASEGROUP")); + assertEquals( + "http://localhost:15000", + determineHost( + matcherWithoutPort, + DEFAULT_ENDPOINT, + /* autoConfigEmulator= */ true, + /* usePlainText= */ true, + ImmutableMap.of())); + Matcher matcherWithProject = + EXTERNAL_HOST_PATTERN.matcher( + "cloudspanner://localhost:15000/projects/default/instances/default/databases/singers-db"); + assertFalse(matcherWithProject.matches()); + Matcher matcherWithoutHost = + EXTERNAL_HOST_PATTERN.matcher("cloudspanner:/instances/default/databases/singers-db"); + assertFalse(matcherWithoutHost.matches()); + Matcher matcherWithPrefixSpanner = + EXTERNAL_HOST_PATTERN.matcher("spanner://localhost:15000/databases/test-db"); + assertTrue(matcherWithPrefixSpanner.matches()); + assertNull(matcherWithPrefixSpanner.group("INSTANCEGROUP")); + assertEquals("test-db", matcherWithPrefixSpanner.group("DATABASEGROUP")); + } + + @Test + public void testBuildWithValidURIWithPrefixSpanner() { + ConnectionOptions.Builder builder = ConnectionOptions.newBuilder(); + builder.setUri( + "spanner:/projects/test-project-123/instances/test-instance-123/databases/test-database-123?autocommit=false;readonly=true"); + builder.setCredentialsUrl(FILE_TEST_PATH); + ConnectionOptions options = builder.build(); + assertThat(options.getHost()).isEqualTo(DEFAULT_HOST); + assertThat(options.getProjectId()).isEqualTo("test-project-123"); + assertThat(options.getInstanceId()).isEqualTo("test-instance-123"); + assertThat(options.getDatabaseName()).isEqualTo("test-database-123"); + assertThat(options.getCredentials()) + .isEqualTo(new CredentialsService().createCredentials(FILE_TEST_PATH)); + assertThat(options.isAutocommit()).isEqualTo(false); + assertThat(options.isReadOnly()).isEqualTo(true); + } + + @Test + public void testExperimentalHost() { + ConnectionOptions.Builder builderWithoutExperimentalHostParam = ConnectionOptions.newBuilder(); + builderWithoutExperimentalHostParam.setUri( + "spanner://localhost:15000/instances/default/databases/singers-db;usePlainText=true"); + ConnectionOptions optionsWithoutExperimentalHostParam = + builderWithoutExperimentalHostParam.build(); + assertFalse(optionsWithoutExperimentalHostParam.isExperimentalHost()); + assertEquals(0, optionsWithoutExperimentalHostParam.getSessionPoolOptions().getMinSessions()); + assertTrue( + optionsWithoutExperimentalHostParam.getSessionPoolOptions().getUseMultiplexedSession()); + assertTrue( + optionsWithoutExperimentalHostParam + .getSessionPoolOptions() + .getUseMultiplexedSessionForRW()); + assertTrue( + optionsWithoutExperimentalHostParam + .getSessionPoolOptions() + .getUseMultiplexedSessionPartitionedOps()); + + ConnectionOptions.Builder builderWithExperimentalHostParam = ConnectionOptions.newBuilder(); + builderWithExperimentalHostParam.setUri( + "spanner://localhost:15000/projects/default/instances/default/databases/singers-db;usePlainText=true;isExperimentalHost=true"); + ConnectionOptions optionsWithExperimentalHostParam = builderWithExperimentalHostParam.build(); + assertTrue(optionsWithExperimentalHostParam.isExperimentalHost()); + assertEquals(0, optionsWithExperimentalHostParam.getSessionPoolOptions().getMinSessions()); + assertTrue(optionsWithExperimentalHostParam.getSessionPoolOptions().getUseMultiplexedSession()); + assertTrue( + optionsWithExperimentalHostParam.getSessionPoolOptions().getUseMultiplexedSessionForRW()); + assertTrue( + optionsWithExperimentalHostParam + .getSessionPoolOptions() + .getUseMultiplexedSessionPartitionedOps()); + } + + @Test + public void testEnableDirectAccess() { + ConnectionOptions.Builder builderWithoutDirectPathParam = ConnectionOptions.newBuilder(); + builderWithoutDirectPathParam.setUri( + "spanner://localhost:15000/instances/default/databases/singers-db;usePlainText=true"); + assertNull(builderWithoutDirectPathParam.build().isEnableDirectAccess()); + + ConnectionOptions.Builder builderWithDirectPathParamFalse = ConnectionOptions.newBuilder(); + builderWithDirectPathParamFalse.setUri( + "spanner://localhost:15000/instances/default/databases/singers-db;usePlainText=true;enableDirectAccess=false"); + assertFalse(builderWithDirectPathParamFalse.build().isEnableDirectAccess()); + + ConnectionOptions.Builder builderWithDirectPathParam = ConnectionOptions.newBuilder(); + builderWithDirectPathParam.setUri( + "spanner://localhost:15000/projects/default/instances/default/databases/singers-db;usePlainText=true;enableDirectAccess=true"); + assertTrue(builderWithDirectPathParam.build().isEnableDirectAccess()); + } + + @Test + public void testUniverseDomain() { + ConnectionImpl connection = mock(ConnectionImpl.class); + + // No universeDomain + AtomicBoolean executedConfigurator = new AtomicBoolean(false); + ConnectionOptions optionsWithNoUniverseDomainParam = + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/default/instances/default/databases/singers-db?usePlainText=true") + .setConfigurator( + optionsBuilder -> { + executedConfigurator.set(true); + SpannerOptions spannerOptions = optionsBuilder.build(); + assertEquals("googleapis.com", spannerOptions.getUniverseDomain()); + assertEquals("https://spanner.googleapis.com", spannerOptions.getHost()); + }) + .build(); + Spanner spanner = SpannerPool.INSTANCE.getSpanner(optionsWithNoUniverseDomainParam, connection); + spanner.close(); + SpannerPool.INSTANCE.removeConnection(optionsWithNoUniverseDomainParam, connection); + assertTrue(executedConfigurator.get()); + + // only configuring universal domain + executedConfigurator.set(false); + ConnectionOptions optionsWithUniverseDomainParam = + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/default/instances/default/databases/singers-db;universeDomain=abc.goog;usePlainText=true") + .setConfigurator( + optionsBuilder -> { + executedConfigurator.set(true); + SpannerOptions spannerOptions = optionsBuilder.build(); + assertEquals("abc.goog", spannerOptions.getUniverseDomain()); + assertEquals("https://spanner.abc.goog", spannerOptions.getHost()); + }) + .build(); + spanner = SpannerPool.INSTANCE.getSpanner(optionsWithUniverseDomainParam, connection); + spanner.close(); + SpannerPool.INSTANCE.removeConnection(optionsWithUniverseDomainParam, connection); + assertTrue(executedConfigurator.get()); + + // configuring both universal domain and host + executedConfigurator.set(false); + ConnectionOptions optionsWithHostAndUniverseDomainParam = + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner://spanner.abc.goog/projects/default/instances/default/databases/singers-db;universeDomain=abc.goog;usePlainText=true") + .setConfigurator( + optionsBuilder -> { + executedConfigurator.set(true); + SpannerOptions spannerOptions = optionsBuilder.build(); + assertEquals("abc.goog", spannerOptions.getUniverseDomain()); + assertEquals("http://spanner.abc.goog", spannerOptions.getHost()); + }) + .build(); + spanner = SpannerPool.INSTANCE.getSpanner(optionsWithHostAndUniverseDomainParam, connection); + spanner.close(); + SpannerPool.INSTANCE.removeConnection(optionsWithHostAndUniverseDomainParam, connection); + assertTrue(executedConfigurator.get()); + + // configuring both universal domain and host(localhost) + executedConfigurator.set(false); + ConnectionOptions optionsWithLocalHostAndUniverseDomainParam = + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner://localhost:15000/projects/default/instances/default/databases/singers-db;usePlainText=true;universeDomain=abc.goog") + .setConfigurator( + optionsBuilder -> { + executedConfigurator.set(true); + SpannerOptions spannerOptions = optionsBuilder.build(); + assertEquals("abc.goog", spannerOptions.getUniverseDomain()); + assertEquals("http://localhost:15000", spannerOptions.getHost()); + }) + .build(); + spanner = + SpannerPool.INSTANCE.getSpanner(optionsWithLocalHostAndUniverseDomainParam, connection); + spanner.close(); + SpannerPool.INSTANCE.removeConnection(optionsWithLocalHostAndUniverseDomainParam, connection); + assertTrue(executedConfigurator.get()); + + connection.close(); + } + + @Test + public void testEnableDynamicChannelPool() { + // Default value + assertNull( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database") + .setCredentials(NoCredentials.getInstance()) + .build() + .isEnableDynamicChannelPool()); + // Enabled + assertTrue( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database?enableDynamicChannelPool=true") + .setCredentials(NoCredentials.getInstance()) + .build() + .isEnableDynamicChannelPool()); + } + + @Test + public void testDisableDynamicChannelPool() { + assertFalse( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database?enableDynamicChannelPool=false") + .setCredentials(NoCredentials.getInstance()) + .build() + .isEnableDynamicChannelPool()); + } + + @Test + public void testDcpMinChannels() { + // Default value + assertNull( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database") + .setCredentials(NoCredentials.getInstance()) + .build() + .getDcpMinChannels()); + // Custom value + assertEquals( + Integer.valueOf(3), + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database?dcpMinChannels=3") + .setCredentials(NoCredentials.getInstance()) + .build() + .getDcpMinChannels()); + } + + @Test + public void testDcpMaxChannels() { + // Default value + assertNull( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database") + .setCredentials(NoCredentials.getInstance()) + .build() + .getDcpMaxChannels()); + // Custom value + assertEquals( + Integer.valueOf(15), + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database?dcpMaxChannels=15") + .setCredentials(NoCredentials.getInstance()) + .build() + .getDcpMaxChannels()); + } + + @Test + public void testDcpInitialChannels() { + // Default value + assertNull( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database") + .setCredentials(NoCredentials.getInstance()) + .build() + .getDcpInitialChannels()); + // Custom value + assertEquals( + Integer.valueOf(5), + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database?dcpInitialChannels=5") + .setCredentials(NoCredentials.getInstance()) + .build() + .getDcpInitialChannels()); + } + + @Test + public void testDcpWithAllOptions() { + ConnectionOptions options = + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/test-project-123/instances/test-instance/databases/test-database" + + "?enableDynamicChannelPool=true;dcpMinChannels=3;dcpMaxChannels=15;dcpInitialChannels=5") + .setCredentials(NoCredentials.getInstance()) + .build(); + assertTrue(options.isEnableDynamicChannelPool()); + assertEquals(Integer.valueOf(3), options.getDcpMinChannels()); + assertEquals(Integer.valueOf(15), options.getDcpMaxChannels()); + assertEquals(Integer.valueOf(5), options.getDcpInitialChannels()); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyTest.java index 0888f61cf90..f86809ce13f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyTest.java @@ -37,15 +37,15 @@ public class ConnectionPropertyTest { @Test public void testCreateKey() { - assertEquals("my_property", createKey(/* extension = */ null, "my_property")); - assertEquals("my_property", createKey(/* extension = */ null, "My_Property")); - assertEquals("my_property", createKey(/* extension = */ null, "MY_PROPERTY")); + assertEquals("my_property", createKey(/* extension= */ null, "my_property")); + assertEquals("my_property", createKey(/* extension= */ null, "My_Property")); + assertEquals("my_property", createKey(/* extension= */ null, "MY_PROPERTY")); assertEquals("my_extension.my_property", createKey("my_extension", "my_property")); assertEquals("my_extension.my_property", createKey("My_Extension", "My_Property")); assertEquals("my_extension.my_property", createKey("MY_EXTENSION", "MY_PROPERTY")); //noinspection DataFlowIssue - assertThrows(SpannerException.class, () -> createKey("my_extension", /* name = */ null)); + assertThrows(SpannerException.class, () -> createKey("my_extension", /* name= */ null)); assertThrows(SpannerException.class, () -> createKey("my_extension", "")); } @@ -86,7 +86,7 @@ public void testCreate() { public void testEquals() { ConnectionProperty property1 = new ConnectionProperty<>( - /* extension = */ null, + /* extension= */ null, "my_property", "Description of property1", "default_value_1", @@ -95,7 +95,7 @@ public void testEquals() { Context.STARTUP); ConnectionProperty property2 = new ConnectionProperty<>( - /* extension = */ null, + /* extension= */ null, "my_property", "Description of property2", "default_value_2", @@ -122,7 +122,7 @@ public void testEquals() { Context.USER); ConnectionProperty property5 = new ConnectionProperty<>( - /* extension = */ null, + /* extension= */ null, "my_other_property", "Description of property5", "default_value_5", @@ -140,7 +140,7 @@ public void testEquals() { Context.STARTUP); ConnectionProperty property7 = new ConnectionProperty<>( - /* extension = */ null, + /* extension= */ null, "MY_PROPERTY", "Description of property7", "default_value_7", diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyValueTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyValueTest.java index d4f795185e4..39cc47552a1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyValueTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionPropertyValueTest.java @@ -86,9 +86,9 @@ public void testSetValue() { public void testCopy() { ConnectionPropertyValue value = new ConnectionPropertyValue<>( - /* property = */ AUTOCOMMIT_DML_MODE, - /* resetValue = */ AutocommitDmlMode.PARTITIONED_NON_ATOMIC, - /* value = */ AutocommitDmlMode.TRANSACTIONAL); + /* property= */ AUTOCOMMIT_DML_MODE, + /* resetValue= */ AutocommitDmlMode.PARTITIONED_NON_ATOMIC, + /* value= */ AutocommitDmlMode.TRANSACTIONAL); ConnectionPropertyValue copy = value.copy(); assertEquals(value, copy); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java index 4c9397a6714..2b48c64d2e0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java @@ -223,7 +223,7 @@ public void testLocalChangeIsLostAfterTransaction() { connection.beginTransaction(); // Change the value and read it back in the same transaction. - connection.setReturnCommitStats(true, /* local = */ true); + connection.setReturnCommitStats(true, /* local= */ true); assertTrue(connection.isReturnCommitStats()); // Both rolling back and committing will undo the connection state change. if (commit) { @@ -291,4 +291,13 @@ public void testSetLocalInvalidValue() { assertTrue(connection.isRetryAbortsInternally()); } } + + @Test + public void testGetConnectionProperty() { + try (Connection connection = createConnection()) { + ConnectionProperty unknownLength = ConnectionProperties.UNKNOWN_LENGTH; + assertEquals( + unknownLength.getDefaultValue(), connection.getConnectionPropertyValue(unknownLength)); + } + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateTest.java index 7d613a3eef9..cac113ea51d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateTest.java @@ -78,7 +78,7 @@ public void testSetOutsideTransaction() { assertEquals(connectionStateType, state.getType()); assertEquals(false, state.getValue(READONLY).getValue()); - state.setValue(READONLY, true, Context.USER, /* inTransaction = */ false); + state.setValue(READONLY, true, Context.USER, /* inTransaction= */ false); assertEquals(true, state.getValue(READONLY).getValue()); } @@ -86,7 +86,7 @@ public void testSetOutsideTransaction() { public void testSetToNullOutsideTransaction() { ConnectionState state = getConnectionState(); assertEquals(AutocommitDmlMode.TRANSACTIONAL, state.getValue(AUTOCOMMIT_DML_MODE).getValue()); - state.setValue(AUTOCOMMIT_DML_MODE, null, Context.USER, /* inTransaction = */ false); + state.setValue(AUTOCOMMIT_DML_MODE, null, Context.USER, /* inTransaction= */ false); assertNull(state.getValue(AUTOCOMMIT_DML_MODE).getValue()); } @@ -94,7 +94,7 @@ public void testSetToNullOutsideTransaction() { public void testSetInTransactionCommit() { ConnectionState state = getConnectionState(); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); - state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction = */ true); + state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction= */ true); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); // Verify that the change is persisted if the transaction is committed. @@ -106,7 +106,7 @@ public void testSetInTransactionCommit() { public void testSetInTransactionRollback() { ConnectionState state = getConnectionState(); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); - state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction = */ true); + state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction= */ true); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); // Verify that the change is rolled back if the transaction is rolled back and the connection @@ -122,12 +122,12 @@ public void testSetInTransactionRollback() { public void testResetInTransactionCommit() { ConnectionState state = getConnectionState(); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); - state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction = */ true); + state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction= */ true); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); state.commit(); // Reset the value to the default (true). - state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction = */ true); + state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction= */ true); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); // Verify that the change is persisted if the transaction is committed. @@ -139,12 +139,12 @@ public void testResetInTransactionCommit() { public void testResetInTransactionRollback() { ConnectionState state = getConnectionState(); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); - state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction = */ true); + state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction= */ true); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); state.commit(); // Reset the value to the default (true). - state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction = */ true); + state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction= */ true); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); // Verify that the change is rolled back if the transaction is rolled back and the connection @@ -190,7 +190,7 @@ public void testSetInTransactionForStartupProperty() { CONNECTION_STATE_TYPE, Type.TRANSACTIONAL, Context.USER, - /* inTransaction = */ true)); + /* inTransaction= */ true)); assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); } @@ -205,7 +205,7 @@ public void testSetStartupOnlyProperty() { CONNECTION_STATE_TYPE, Type.TRANSACTIONAL, Context.USER, - /* inTransaction = */ false)); + /* inTransaction= */ false)); assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); } @@ -214,11 +214,11 @@ public void testReset() { ConnectionState state = getConnectionState(); // The default should be true. assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); - state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction = */ false); + state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction= */ false); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); // Resetting the property should reset it to the default value. - state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction = */ false); + state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction= */ false); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); } @@ -227,12 +227,12 @@ public void testResetInTransaction() { ConnectionState state = getConnectionState(); // The default should be true. assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); - state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction = */ true); + state.setValue(RETRY_ABORTS_INTERNALLY, false, Context.USER, /* inTransaction= */ true); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); state.commit(); // Resetting the property should reset it to the default value. - state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction = */ true); + state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction= */ true); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); } @@ -243,7 +243,7 @@ public void testResetStartupOnlyProperty() { assertThrows( SpannerException.class, () -> - state.resetValue(CONNECTION_STATE_TYPE, Context.USER, /* inTransaction = */ false)); + state.resetValue(CONNECTION_STATE_TYPE, Context.USER, /* inTransaction= */ false)); assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); } @@ -257,11 +257,11 @@ public void testInitialValueInConnectionUrl() { ConnectionState state = new ConnectionState(options.getInitialConnectionPropertyValues()); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); - state.setValue(RETRY_ABORTS_INTERNALLY, true, Context.USER, /* inTransaction = */ false); + state.setValue(RETRY_ABORTS_INTERNALLY, true, Context.USER, /* inTransaction= */ false); assertEquals(true, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); // Resetting the property should reset it to the value that was set in the connection URL. - state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction = */ false); + state.resetValue(RETRY_ABORTS_INTERNALLY, Context.USER, /* inTransaction= */ false); assertEquals(false, state.getValue(RETRY_ABORTS_INTERNALLY).getValue()); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java index 3a5aa1e6d82..3d386e7569d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java @@ -68,7 +68,7 @@ public void testGetConnection() { @Test public void testStatementBeginTransaction() { - subject.statementBeginTransaction(); + subject.statementBeginTransaction(null); verify(connection).beginTransaction(); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java index 4ea7bfc93de..7e6376d671b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.connection; import static com.google.cloud.spanner.connection.DialectNamespaceMapper.getNamespace; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -27,6 +28,7 @@ import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.TimestampBound; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; @@ -181,7 +183,11 @@ public void testExecuteBegin() { ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); subject.getClientSideStatement().execute(executor, parse(statement)); - verify(connection, times(1)).beginTransaction(); + if (statement.contains("isolation") && !statement.contains("default")) { + verify(connection, times(1)).beginTransaction(any(IsolationLevel.class)); + } else { + verify(connection, times(1)).beginTransaction(); + } } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java index 72a8e64ae4c..0c86da54de1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java @@ -64,6 +64,7 @@ public void testExecuteSetAutocommit() { ParsedStatement subject = parser.parse(Statement.of("set autocommit = true")); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); when(executor.statementSetAutocommit(any(Boolean.class))).thenCallRealMethod(); for (Boolean mode : new Boolean[] {Boolean.FALSE, Boolean.TRUE}) { @@ -80,6 +81,7 @@ public void testExecuteSetReadOnly() { parser.parse(Statement.of(String.format("set %sreadonly = true", getNamespace(dialect)))); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); when(executor.statementSetReadOnly(any(Boolean.class))).thenCallRealMethod(); for (Boolean mode : new Boolean[] {Boolean.FALSE, Boolean.TRUE}) { @@ -98,6 +100,7 @@ public void testExecuteSetReadOnlyTo() { parser.parse(Statement.of(String.format("set %sreadonly to true", getNamespace(dialect)))); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); when(executor.statementSetReadOnly(any(Boolean.class))).thenCallRealMethod(); for (Boolean mode : new Boolean[] {Boolean.FALSE, Boolean.TRUE}) { @@ -116,6 +119,7 @@ public void testExecuteSetAutocommitDmlMode() { Statement.of(String.format("set %sautocommit_dml_mode='foo'", getNamespace(dialect)))); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); when(executor.statementSetAutocommitDmlMode(any(AutocommitDmlMode.class))).thenCallRealMethod(); for (AutocommitDmlMode mode : AutocommitDmlMode.values()) { @@ -135,6 +139,7 @@ public void testExecuteSetStatementTimeout() { ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); when(executor.statementSetStatementTimeout(any(Duration.class))).thenCallRealMethod(); ConnectionImpl connection = mock(ConnectionImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); for (TimeUnit unit : ReadOnlyStalenessUtil.SUPPORTED_UNITS) { for (Long val : new Long[] {1L, 100L, 999L}) { @@ -173,6 +178,7 @@ public void testExecuteSetReadOnlyStaleness() { Statement.of(String.format("set %sread_only_staleness='foo'", getNamespace(dialect)))); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); when(executor.statementSetReadOnlyStaleness(any(TimestampBound.class))).thenCallRealMethod(); for (TimestampBound val : @@ -219,6 +225,7 @@ public void testExecuteSetOptimizerVersion() { Statement.of(String.format("set %soptimizer_version='foo'", getNamespace(dialect)))); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); when(executor.statementSetOptimizerVersion(any(String.class))).thenCallRealMethod(); for (String version : new String[] {"1", "200", "", "LATEST"}) { @@ -239,6 +246,7 @@ public void testExecuteSetOptimizerStatisticsPackage() { String.format("set %soptimizer_statistics_package='foo'", getNamespace(dialect)))); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class); + when(executor.getDialect()).thenReturn(dialect); when(executor.getConnection()).thenReturn(connection); when(executor.statementSetOptimizerStatisticsPackage(any(String.class))).thenCallRealMethod(); for (String statisticsPackage : new String[] {"custom-package", ""}) { @@ -259,6 +267,7 @@ public void testExecuteSetTransaction() { ParsedStatement subject = parser.parse(Statement.of("set transaction read_only")); ConnectionImpl connection = mock(ConnectionImpl.class); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); + when(executor.getDialect()).thenReturn(dialect); for (TransactionMode mode : TransactionMode.values()) { subject .getClientSideStatement() diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java index 9ae174bd403..c8469ae08a9 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java @@ -23,8 +23,6 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutures; import com.google.cloud.spanner.AbortedException; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; @@ -36,10 +34,7 @@ import com.google.cloud.spanner.SpannerOptions; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.TimestampBound; -import com.google.cloud.spanner.connection.ConnectionOptions.Builder; -import com.google.cloud.spanner.connection.StatementExecutor.StatementExecutorType; import com.google.common.collect.ImmutableList; -import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas; @@ -50,11 +45,8 @@ import com.google.spanner.v1.RequestOptions; import java.nio.charset.StandardCharsets; import java.time.Duration; -import java.util.Arrays; import java.util.Collections; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.function.Consumer; import java.util.function.Supplier; import javax.annotation.Nonnull; @@ -385,82 +377,6 @@ private void assertResetProperty( } } - public static class ConnectionMinSessionsTest extends AbstractMockServerTest { - - @AfterClass - public static void reset() { - mockSpanner.reset(); - } - - protected String getBaseUrl() { - return super.getBaseUrl() + ";minSessions=1"; - } - - @Test - public void testMinSessions() throws InterruptedException, TimeoutException { - try (Connection connection = createConnection()) { - mockSpanner.waitForRequestsToContain( - input -> - input instanceof BatchCreateSessionsRequest - && ((BatchCreateSessionsRequest) input).getSessionCount() == 1, - 5000L); - } - } - } - - public static class ConnectionMaxSessionsTest extends AbstractMockServerTest { - - @AfterClass - public static void reset() { - mockSpanner.reset(); - } - - protected String getBaseUrl() { - return super.getBaseUrl() + ";maxSessions=1"; - } - - @Override - protected Builder configureConnectionOptions(Builder builder) { - return builder.setStatementExecutorType(StatementExecutorType.PLATFORM_THREAD); - } - - @Test - public void testMaxSessions() - throws InterruptedException, TimeoutException, ExecutionException { - try (Connection connection1 = createConnection(); - Connection connection2 = createConnection()) { - connection1.beginTransactionAsync(); - connection2.beginTransactionAsync(); - - ApiFuture count1 = connection1.executeUpdateAsync(INSERT_STATEMENT); - ApiFuture count2 = connection2.executeUpdateAsync(INSERT_STATEMENT); - - // Commit the transactions. Both should be able to finish, but both used the same session. - ApiFuture commit1 = connection1.commitAsync(); - ApiFuture commit2 = connection2.commitAsync(); - - // At least one transaction must wait until the other has finished before it can get a - // session. - assertThat(count1.isDone() && count2.isDone()).isFalse(); - assertThat(commit1.isDone() && commit2.isDone()).isFalse(); - - // Wait until both finishes. - ApiFutures.allAsList(Arrays.asList(commit1, commit2)).get(5L, TimeUnit.SECONDS); - - assertThat(count1.isDone()).isTrue(); - assertThat(count2.isDone()).isTrue(); - if (isMultiplexedSessionsEnabled(connection1.getSpanner())) { - // We don't use the multiplexed session, so we don't know whether the server had time to - // create it or not. That means that we have between 1 and 2 sessions on the server. - assertThat(mockSpanner.numSessionsCreated()).isAtLeast(1); - assertThat(mockSpanner.numSessionsCreated()).isAtMost(2); - } else { - assertThat(mockSpanner.numSessionsCreated()).isEqualTo(1); - } - } - } - } - public static class ConnectionRPCPriorityTest extends AbstractMockServerTest { @AfterClass @@ -674,6 +590,8 @@ public void testPostgreSQLGetDialect() { public void testGetDialect_DatabaseNotFound() throws Exception { mockSpanner.setBatchCreateSessionsExecutionTime( SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); try (Connection connection = createConnection()) { SpannerException exception = assertThrows(SpannerException.class, connection::getDialect); assertEquals(ErrorCode.NOT_FOUND, exception.getErrorCode()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsProviderTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsProviderTest.java index 9e2979e1aaf..f082fa7042a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsProviderTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsProviderTest.java @@ -93,7 +93,7 @@ public void testCredentialsProvider() throws Throwable { .setConfigurator( spannerOptions -> { spannerOptions.setChannelConfigurator(ManagedChannelBuilder::usePlaintext); - spannerOptions.disableDirectPath(); + spannerOptions.setEnableDirectAccess(false); }) .build(); @@ -135,7 +135,7 @@ public void testCredentialsProvider() throws Throwable { .setConfigurator( spannerOptions -> { spannerOptions.setChannelConfigurator(ManagedChannelBuilder::usePlaintext); - spannerOptions.disableDirectPath(); + spannerOptions.setEnableDirectAccess(false); }) .build(); try (Connection connection = options.getConnection()) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsServiceTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsServiceTest.java index e8dc7a4f875..7b7c41817e4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsServiceTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/CredentialsServiceTest.java @@ -25,8 +25,9 @@ import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.SpannerException; -import java.io.FileInputStream; +import java.io.File; import java.io.IOException; +import java.nio.file.Files; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -35,9 +36,9 @@ @RunWith(JUnit4.class) public class CredentialsServiceTest { private static final String FILE_TEST_PATH = - CredentialsServiceTest.class.getResource("test-key.json").getFile(); - private static final String APP_DEFAULT_FILE_TEST_PATH = - CredentialsServiceTest.class.getResource("test-key-app-default.json").getFile(); + CredentialsServiceTest.class.getResource("test-key.json").getPath(); + private static final String SA_APP_DEFAULT_FILE_TEST_PATH = + CredentialsServiceTest.class.getResource("test-key-app-default.json").getPath(); private static final String TEST_PROJECT_ID = "test-project"; private static final String APP_DEFAULT_PROJECT_ID = "app-default-test-project"; @@ -49,7 +50,11 @@ public class CredentialsServiceTest { GoogleCredentials internalGetApplicationDefault() throws IOException { // Read application default credentials directly from a specific file instead of actually // fetching the default from the environment. - return GoogleCredentials.fromStream(new FileInputStream(APP_DEFAULT_FILE_TEST_PATH)); + return ServiceAccountCredentials.fromStream( + // Calling `getResource().getPath()` on Windows returns a string that might start with + // something like `/C:/...`. Paths.get() interprets the leading / as part of the path + // and would be invalid. Use `new File().toPath()` to read from these files. + Files.newInputStream(new File(SA_APP_DEFAULT_FILE_TEST_PATH).toPath())); } }; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlBatchTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlBatchTest.java index 93ae60891fb..e500851b275 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlBatchTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlBatchTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.anyList; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.argThat; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -59,6 +60,7 @@ import java.io.InputStream; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; @@ -115,6 +117,9 @@ private DdlClient createDefaultMockDdlClient( when(operation.getMetadata()).thenReturn(metadataFuture); when(ddlClient.executeDdl(anyString(), any())).thenReturn(operation); when(ddlClient.executeDdl(anyList(), any())).thenReturn(operation); + doCallRealMethod() + .when(ddlClient) + .runWithRetryForMissingDefaultSequenceKind(any(), any(), any(), any()); return ddlClient; } catch (Exception e) { throw new RuntimeException(e); @@ -130,11 +135,13 @@ private DdlBatch createSubject(DdlClient ddlClient) { } private DdlBatch createSubject(DdlClient ddlClient, DatabaseClient dbClient) { + when(dbClient.getDialect()).thenReturn(Dialect.GOOGLE_STANDARD_SQL); return DdlBatch.newBuilder() .setDdlClient(ddlClient) .setDatabaseClient(dbClient) .withStatementExecutor(new StatementExecutor()) .setSpan(Span.getInvalid()) + .setConnectionState(new ConnectionState(new HashMap<>())) .build(); } @@ -256,15 +263,18 @@ public void testGetStateAndIsActive() { assertThat(batch.isActive(), is(false)); DdlClient client = mock(DdlClient.class); - SpannerException exception = mock(SpannerException.class); - when(exception.getErrorCode()).thenReturn(ErrorCode.FAILED_PRECONDITION); + SpannerException exception = + SpannerExceptionFactory.newSpannerException(ErrorCode.FAILED_PRECONDITION, "test"); doThrow(exception).when(client).executeDdl(anyList(), isNull()); + doCallRealMethod() + .when(client) + .runWithRetryForMissingDefaultSequenceKind(any(), any(), any(), any()); batch = createSubject(client); assertThat(batch.getState(), is(UnitOfWorkState.STARTED)); assertThat(batch.isActive(), is(true)); ParsedStatement statement = mock(ParsedStatement.class); when(statement.getStatement()).thenReturn(Statement.of("CREATE TABLE FOO")); - when(statement.getSqlWithoutComments()).thenReturn("CREATE TABLE FOO"); + when(statement.getSql()).thenReturn("CREATE TABLE FOO"); when(statement.getType()).thenReturn(StatementType.DDL); batch.executeDdlAsync(CallType.SYNC, statement); try { @@ -310,7 +320,7 @@ public void testRunBatch() { ParsedStatement statement = mock(ParsedStatement.class); when(statement.getType()).thenReturn(StatementType.DDL); when(statement.getStatement()).thenReturn(Statement.of("CREATE TABLE FOO")); - when(statement.getSqlWithoutComments()).thenReturn("CREATE TABLE FOO"); + when(statement.getSql()).thenReturn("CREATE TABLE FOO"); client = createDefaultMockDdlClient(); batch = createSubject(client); @@ -373,13 +383,16 @@ public void testRunBatch() { // verify when protoDescriptors is null client = createDefaultMockDdlClient(); + DatabaseClient dbClient = mock(DatabaseClient.class); + when(dbClient.getDialect()).thenReturn(Dialect.GOOGLE_STANDARD_SQL); batch = DdlBatch.newBuilder() .setDdlClient(client) - .setDatabaseClient(mock(DatabaseClient.class)) + .setDatabaseClient(dbClient) .withStatementExecutor(new StatementExecutor()) .setSpan(Span.getInvalid()) .setProtoDescriptors(null) + .setConnectionState(new ConnectionState(new HashMap<>())) .build(); batch.executeDdlAsync(CallType.SYNC, statement); batch.executeDdlAsync(CallType.SYNC, statement); @@ -402,10 +415,11 @@ public void testRunBatch() { batch = DdlBatch.newBuilder() .setDdlClient(client) - .setDatabaseClient(mock(DatabaseClient.class)) + .setDatabaseClient(dbClient) .withStatementExecutor(new StatementExecutor()) .setSpan(Span.getInvalid()) .setProtoDescriptors(protoDescriptors) + .setConnectionState(new ConnectionState(new HashMap<>())) .build(); batch.executeDdlAsync(CallType.SYNC, statement); batch.executeDdlAsync(CallType.SYNC, statement); @@ -431,12 +445,15 @@ public void testUpdateCount() throws InterruptedException, ExecutionException { when(operationFuture.getMetadata()).thenReturn(metadataFuture); when(client.executeDdl(argThat(isListOfStringsWithSize(2)), isNull())) .thenReturn(operationFuture); + DatabaseClient dbClient = mock(DatabaseClient.class); + when(dbClient.getDialect()).thenReturn(Dialect.GOOGLE_STANDARD_SQL); DdlBatch batch = DdlBatch.newBuilder() .withStatementExecutor(new StatementExecutor()) .setDdlClient(client) - .setDatabaseClient(mock(DatabaseClient.class)) + .setDatabaseClient(dbClient) .setSpan(Span.getInvalid()) + .setConnectionState(new ConnectionState(new HashMap<>())) .build(); batch.executeDdlAsync( CallType.SYNC, @@ -469,14 +486,20 @@ public void testFailedUpdateCount() throws InterruptedException, ExecutionExcept new ExecutionException( "ddl statement failed", Status.INVALID_ARGUMENT.asRuntimeException())); when(operationFuture.getMetadata()).thenReturn(metadataFuture); + doCallRealMethod() + .when(client) + .runWithRetryForMissingDefaultSequenceKind(any(), any(), any(), any()); when(client.executeDdl(argThat(isListOfStringsWithSize(2)), isNull())) .thenReturn(operationFuture); + DatabaseClient dbClient = mock(DatabaseClient.class); + when(dbClient.getDialect()).thenReturn(Dialect.GOOGLE_STANDARD_SQL); DdlBatch batch = DdlBatch.newBuilder() .withStatementExecutor(new StatementExecutor()) .setDdlClient(client) - .setDatabaseClient(mock(DatabaseClient.class)) + .setDatabaseClient(dbClient) .setSpan(Span.getInvalid()) + .setConnectionState(new ConnectionState(new HashMap<>())) .build(); batch.executeDdlAsync( CallType.SYNC, @@ -499,6 +522,9 @@ public void testFailedUpdateCount() throws InterruptedException, ExecutionExcept @Test public void testFailedAfterFirstStatement() throws InterruptedException, ExecutionException { DdlClient client = mock(DdlClient.class); + doCallRealMethod() + .when(client) + .runWithRetryForMissingDefaultSequenceKind(any(), any(), any(), any()); UpdateDatabaseDdlMetadata metadata = UpdateDatabaseDdlMetadata.newBuilder() .addCommitTimestamps( @@ -515,12 +541,15 @@ public void testFailedAfterFirstStatement() throws InterruptedException, Executi when(operationFuture.getMetadata()).thenReturn(metadataFuture); when(client.executeDdl(argThat(isListOfStringsWithSize(2)), isNull())) .thenReturn(operationFuture); + DatabaseClient dbClient = mock(DatabaseClient.class); + when(dbClient.getDialect()).thenReturn(Dialect.GOOGLE_STANDARD_SQL); DdlBatch batch = DdlBatch.newBuilder() .withStatementExecutor(new StatementExecutor()) .setDdlClient(client) - .setDatabaseClient(mock(DatabaseClient.class)) + .setDatabaseClient(dbClient) .setSpan(Span.getInvalid()) + .setConnectionState(new ConnectionState(new HashMap<>())) .build(); batch.executeDdlAsync( CallType.SYNC, @@ -552,7 +581,7 @@ public void testAbort() { ParsedStatement statement = mock(ParsedStatement.class); when(statement.getType()).thenReturn(StatementType.DDL); when(statement.getStatement()).thenReturn(Statement.of("CREATE TABLE FOO")); - when(statement.getSqlWithoutComments()).thenReturn("CREATE TABLE FOO"); + when(statement.getSql()).thenReturn("CREATE TABLE FOO"); client = createDefaultMockDdlClient(); batch = createSubject(client); @@ -591,7 +620,7 @@ public void testCancel() { ParsedStatement statement = mock(ParsedStatement.class); when(statement.getType()).thenReturn(StatementType.DDL); when(statement.getStatement()).thenReturn(Statement.of("CREATE TABLE FOO")); - when(statement.getSqlWithoutComments()).thenReturn("CREATE TABLE FOO"); + when(statement.getSql()).thenReturn("CREATE TABLE FOO"); DdlClient client = createDefaultMockDdlClient(10000L); final DdlBatch batch = createSubject(client); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlClientTests.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlClientTests.java index c61635fce23..3a25437354f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlClientTests.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlClientTests.java @@ -32,7 +32,9 @@ import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseAdminClient; import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.common.base.Suppliers; import com.google.common.io.ByteStreams; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import java.io.InputStream; @@ -53,6 +55,7 @@ public class DdlClientTests { private DdlClient createSubject(DatabaseAdminClient client) { return DdlClient.newBuilder() + .setDialectSupplier(Suppliers.ofInstance(Dialect.GOOGLE_STANDARD_SQL)) .setProjectId(projectId) .setInstanceId(instanceId) .setDatabaseName(databaseId) @@ -108,20 +111,22 @@ public void testExecuteDdl() throws InterruptedException, ExecutionException { @Test public void testIsCreateDatabase() { - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE DATABASE foo")); - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE DATABASE \"foo\"")); - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE DATABASE `foo`")); - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE DATABASE\tfoo")); - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE DATABASE\n foo")); - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE DATABASE\t\n foo")); - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE DATABASE")); - assertTrue(DdlClient.isCreateDatabaseStatement("CREATE\t \n DATABASE foo")); - assertTrue(DdlClient.isCreateDatabaseStatement("create\t \n DATABASE foo")); - assertTrue(DdlClient.isCreateDatabaseStatement("create database foo")); + for (Dialect dialect : Dialect.values()) { + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASE foo")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASE \"foo\"")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASE `foo`")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASE\tfoo")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASE\n foo")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASE\t\n foo")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASE")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "CREATE\t \n DATABASE foo")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "create\t \n DATABASE foo")); + assertTrue(DdlClient.isCreateDatabaseStatement(dialect, "create database foo")); - assertFalse(DdlClient.isCreateDatabaseStatement("CREATE VIEW foo")); - assertFalse(DdlClient.isCreateDatabaseStatement("CREATE DATABAS foo")); - assertFalse(DdlClient.isCreateDatabaseStatement("CREATE DATABASEfoo")); - assertFalse(DdlClient.isCreateDatabaseStatement("CREATE foo")); + assertFalse(DdlClient.isCreateDatabaseStatement(dialect, "CREATE VIEW foo")); + assertFalse(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABAS foo")); + assertFalse(DdlClient.isCreateDatabaseStatement(dialect, "CREATE DATABASEfoo")); + assertFalse(DdlClient.isCreateDatabaseStatement(dialect, "CREATE foo")); + } } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlTest.java index 44a2f4d9ff7..3585421e32c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DdlTest.java @@ -17,15 +17,20 @@ package com.google.cloud.spanner.connection; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.MissingDefaultSequenceKindException; +import com.google.cloud.spanner.SpannerBatchUpdateException; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.connection.StatementResult.ResultType; import com.google.longrunning.Operation; +import com.google.protobuf.AbstractMessage; import com.google.protobuf.Any; import com.google.protobuf.Empty; +import com.google.rpc.Code; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; import com.google.spanner.v1.CommitRequest; @@ -65,6 +70,21 @@ private void addUpdateDdlResponse() { .build()); } + private void addUpdateDdlResponse(com.google.rpc.Status error) { + mockDatabaseAdmin.addResponse( + Operation.newBuilder() + .setMetadata( + Any.pack( + UpdateDatabaseDdlMetadata.newBuilder() + .setDatabase("projects/proj/instances/inst/databases/db") + .build())) + .setName("projects/proj/instances/inst/databases/db/operations/1") + .setDone(true) + // .setResponse(Any.pack(Empty.getDefaultInstance())) + .setError(error) + .build()); + } + @Test public void testSingleAnalyzeStatement() { addUpdateDdlResponse(); @@ -230,4 +250,161 @@ public void testDdlBatchInTransaction() { } } } + + @Test + public void testMissingDefaultSequenceKindException() { + addUpdateDdlResponse( + com.google.rpc.Status.newBuilder() + .setCode(Code.INVALID_ARGUMENT_VALUE) + .setMessage( + "The sequence kind of an identity column id2 is not specified. Please specify the" + + " sequence kind explicitly or set the database option" + + " `default_sequence_kind`.") + .build()); + try (Connection connection = createConnection()) { + assertNull(connection.getDefaultSequenceKind()); + assertThrows( + MissingDefaultSequenceKindException.class, + () -> + connection.execute( + Statement.of("create table foo (id2 int64 auto_increment primary key"))); + } + // The request should not be retried. + assertEquals(1, mockDatabaseAdmin.getRequests().size()); + } + + @Test + public void testSetsDefaultSequenceKindAndRetriesStatement() { + addUpdateDdlResponse( + com.google.rpc.Status.newBuilder() + .setCode(Code.INVALID_ARGUMENT_VALUE) + .setMessage( + "The sequence kind of an identity column id2 is not specified. Please specify the" + + " sequence kind explicitly or set the database option" + + " `default_sequence_kind`.") + .build()); + // This will be the response for the 'alter database' statement. + addUpdateDdlResponse(); + // This will be the response for the 'create table' statement after the retry. + addUpdateDdlResponse(); + try (Connection connection = createConnection()) { + connection.setDefaultSequenceKind("bit_reversed_positive"); + connection.execute(Statement.of("create table foo (id2 int64 auto_increment primary key")); + } + List requests = mockDatabaseAdmin.getRequests(); + assertEquals(3, requests.size()); + assertEquals( + "create table foo (id2 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) requests.get(0)).getStatements(0)); + assertEquals( + "alter database `db` set options (default_sequence_kind='bit_reversed_positive')", + ((UpdateDatabaseDdlRequest) requests.get(1)).getStatements(0)); + assertEquals( + "create table foo (id2 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) requests.get(2)).getStatements(0)); + } + + @Test + public void testMissingDefaultSequenceKindExceptionInBatch() { + addUpdateDdlResponse( + com.google.rpc.Status.newBuilder() + .setCode(Code.INVALID_ARGUMENT_VALUE) + .setMessage( + "The sequence kind of an identity column id2 is not specified. Please specify the" + + " sequence kind explicitly or set the database option" + + " `default_sequence_kind`.") + .build()); + try (Connection connection = createConnection()) { + assertNull(connection.getDefaultSequenceKind()); + connection.startBatchDdl(); + connection.execute(Statement.of("create table foo (id2 int64 auto_increment primary key")); + SpannerBatchUpdateException exception = + assertThrows(SpannerBatchUpdateException.class, connection::runBatch); + } + // The request should not be retried. + assertEquals(1, mockDatabaseAdmin.getRequests().size()); + } + + @Test + public void testSetsDefaultSequenceKindAndRetriesBatch() { + addUpdateDdlResponse( + com.google.rpc.Status.newBuilder() + .setCode(Code.INVALID_ARGUMENT_VALUE) + .setMessage( + "The sequence kind of an identity column id2 is not specified. Please specify the" + + " sequence kind explicitly or set the database option" + + " `default_sequence_kind`.") + .build()); + // This will be the response for the 'alter database' statement. + addUpdateDdlResponse(); + // This will be the response for the 'create table' statements after the retry. + addUpdateDdlResponse(); + try (Connection connection = createConnection()) { + connection.setDefaultSequenceKind("bit_reversed_positive"); + connection.startBatchDdl(); + connection.execute(Statement.of("create table foo (id1 int64 auto_increment primary key")); + connection.execute(Statement.of("create table bar (id2 int64 auto_increment primary key")); + connection.runBatch(); + } + List requests = mockDatabaseAdmin.getRequests(); + assertEquals(3, requests.size()); + assertEquals( + "create table foo (id1 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) requests.get(0)).getStatements(0)); + assertEquals( + "create table bar (id2 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) requests.get(0)).getStatements(1)); + assertEquals( + "alter database `db` set options (default_sequence_kind='bit_reversed_positive')", + ((UpdateDatabaseDdlRequest) requests.get(1)).getStatements(0)); + assertEquals( + "create table foo (id1 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) requests.get(0)).getStatements(0)); + assertEquals( + "create table bar (id2 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) requests.get(0)).getStatements(1)); + } + + @Test + public void testStripTrailingSemicolon() { + addUpdateDdlResponse(); + addUpdateDdlResponse(); + addUpdateDdlResponse(); + addUpdateDdlResponse(); + try (Connection connection = createConnection()) { + connection.execute(Statement.of("drop table foo;")); + connection.execute(Statement.of("drop table foo \n\t;\n\t ")); + connection.execute(Statement.of("drop table foo")); + + connection.startBatchDdl(); + connection.execute(Statement.of("create table foo (id1 int64 auto_increment primary key;")); + connection.execute( + Statement.of("create table foo (id1 int64 auto_increment primary key \n\t;\n\t ")); + connection.execute(Statement.of("create table foo (id2 int64 auto_increment primary key")); + connection.runBatch(); + } + assertEquals(4, mockDatabaseAdmin.getRequests().size()); + assertEquals( + "drop table foo", + ((UpdateDatabaseDdlRequest) mockDatabaseAdmin.getRequests().get(0)).getStatements(0)); + assertEquals( + "drop table foo \n\t", + ((UpdateDatabaseDdlRequest) mockDatabaseAdmin.getRequests().get(1)).getStatements(0)); + assertEquals( + "drop table foo", + ((UpdateDatabaseDdlRequest) mockDatabaseAdmin.getRequests().get(2)).getStatements(0)); + + assertEquals( + 3, + ((UpdateDatabaseDdlRequest) mockDatabaseAdmin.getRequests().get(3)).getStatementsCount()); + assertEquals( + "create table foo (id1 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) mockDatabaseAdmin.getRequests().get(3)).getStatements(0)); + assertEquals( + "create table foo (id1 int64 auto_increment primary key \n\t", + ((UpdateDatabaseDdlRequest) mockDatabaseAdmin.getRequests().get(3)).getStatements(1)); + assertEquals( + "create table foo (id2 int64 auto_increment primary key", + ((UpdateDatabaseDdlRequest) mockDatabaseAdmin.getRequests().get(3)).getStatements(2)); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DecodeModeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DecodeModeTest.java index b64a05b2ef4..b187b5d601e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DecodeModeTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DecodeModeTest.java @@ -155,7 +155,8 @@ public void testDecodeModeDirect_failsInReadWriteTransaction() { exception .getMessage() .contains( - "Executing queries with DecodeMode#DIRECT is not supported in read/write transactions.")); + "Executing queries with DecodeMode#DIRECT is not supported in read/write" + + " transactions.")); } } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadTest.java index 099c5d10478..9c784913e5d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadTest.java @@ -88,15 +88,13 @@ public static void setupQueryResults() { mockSpanner.putStatementResult( MockSpannerServiceImpl.StatementResult.query( GOOGLESQL_DML_STATEMENT, - resultSet - .toBuilder() + resultSet.toBuilder() .setStats(ResultSetStats.newBuilder().setRowCountExact(1L).build()) .build())); mockSpanner.putStatementResult( MockSpannerServiceImpl.StatementResult.query( POSTGRESQL_DML_STATEMENT, - resultSet - .toBuilder() + resultSet.toBuilder() .setStats(ResultSetStats.newBuilder().setRowCountExact(1L).build()) .build())); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DmlBatchTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DmlBatchTest.java index 629ae41daf4..ab04bb61a54 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DmlBatchTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DmlBatchTest.java @@ -177,7 +177,7 @@ public void testGetStateAndIsActive() { assertThat(batch.isActive(), is(true)); ParsedStatement statement = mock(ParsedStatement.class); when(statement.getStatement()).thenReturn(Statement.of("UPDATE TEST SET COL1=2")); - when(statement.getSqlWithoutComments()).thenReturn("UPDATE TEST SET COL1=2"); + when(statement.getSql()).thenReturn("UPDATE TEST SET COL1=2"); when(statement.getType()).thenReturn(StatementType.UPDATE); get(batch.executeUpdateAsync(CallType.SYNC, statement)); boolean exception = false; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java index 9e3c23cf5ce..e494f9df8b1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java @@ -42,7 +42,7 @@ public void testConvert() throws CompileException { DurationConverter converter = new DurationConverter(allowedValues); assertThat(converter.convert("'100ms'"), is(equalTo(Duration.ofMillis(100L)))); assertThat(converter.convert("100"), is(equalTo(Duration.ofMillis(100)))); - assertThat(converter.convert("'0ms'"), is(nullValue())); + assertThat(converter.convert("'0ms'"), is(Duration.ZERO)); assertThat(converter.convert("'-100ms'"), is(nullValue())); assertThat( converter.convert("'315576000000000ms'"), is(equalTo(Duration.ofSeconds(315576000000L)))); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ExplainTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ExplainTest.java index a78684b2b4d..1aeb394cd9e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ExplainTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ExplainTest.java @@ -120,7 +120,8 @@ private void testExplain(String statement) { while (resultSet.next()) { if (count == 1) { fail( - "The resultset was expected t contains exactly 1 row but it contains more than 1 row"); + "The resultset was expected t contains exactly 1 row but it contains more than 1" + + " row"); } ++count; @@ -153,7 +154,8 @@ private void testExplainAnalyze(String statement) { while (resultSet.next()) { if (count == 1) { fail( - "The resultset was expected t contains exactly 1 row but it contains more than 1 row"); + "The resultset was expected t contains exactly 1 row but it contains more than 1" + + " row"); } ++count; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/GrpcInterceptorProviderTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/GrpcInterceptorProviderTest.java new file mode 100644 index 00000000000..0845d1d9c36 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/GrpcInterceptorProviderTest.java @@ -0,0 +1,117 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import com.google.api.gax.grpc.GrpcInterceptorProvider; +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SpannerException; +import com.google.common.collect.ImmutableList; +import io.grpc.CallOptions; +import io.grpc.Channel; +import io.grpc.ClientCall; +import io.grpc.ClientInterceptor; +import io.grpc.MethodDescriptor; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class GrpcInterceptorProviderTest extends AbstractMockServerTest { + private static final AtomicBoolean INTERCEPTOR_CALLED = new AtomicBoolean(false); + + public static final class TestGrpcInterceptorProvider implements GrpcInterceptorProvider { + @Override + public List getInterceptors() { + return ImmutableList.of( + new ClientInterceptor() { + @Override + public ClientCall interceptCall( + MethodDescriptor method, CallOptions callOptions, Channel next) { + INTERCEPTOR_CALLED.set(true); + return next.newCall(method, callOptions); + } + }); + } + } + + @Before + public void clearInterceptorUsedFlag() { + INTERCEPTOR_CALLED.set(false); + } + + @Test + public void testGrpcInterceptorProviderIsNotUsedByDefault() { + assertFalse(INTERCEPTOR_CALLED.get()); + try (Connection connection = createConnection()) { + try (ResultSet resultSet = connection.executeQuery(SELECT1_STATEMENT)) { + while (resultSet.next()) { + // ignore + } + } + } + assertFalse(INTERCEPTOR_CALLED.get()); + } + + @Test + public void testGrpcInterceptorProviderIsUsedWhenConfigured() { + System.setProperty("ENABLE_GRPC_INTERCEPTOR_PROVIDER", "true"); + assertFalse(INTERCEPTOR_CALLED.get()); + try (Connection connection = + createConnection( + ";grpc_interceptor_provider=" + TestGrpcInterceptorProvider.class.getName())) { + try (ResultSet resultSet = connection.executeQuery(SELECT1_STATEMENT)) { + while (resultSet.next()) { + // ignore + } + } + } finally { + System.clearProperty("ENABLE_GRPC_INTERCEPTOR_PROVIDER"); + } + assertTrue(INTERCEPTOR_CALLED.get()); + } + + @Test + public void testGrpcInterceptorProviderRequiresSystemProperty() { + assertFalse(INTERCEPTOR_CALLED.get()); + SpannerException exception = + assertThrows( + SpannerException.class, + () -> + createConnection( + ";grpc_interceptor_provider=" + TestGrpcInterceptorProvider.class.getName())); + assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); + assertTrue( + exception.getMessage(), + exception + .getMessage() + .contains( + "grpc_interceptor_provider can only be used if the system property" + + " ENABLE_GRPC_INTERCEPTOR_PROVIDER has been set to true. Start the" + + " application with the JVM command line option" + + " -DENABLE_GRPC_INTERCEPTOR_PROVIDER=true")); + assertFalse(INTERCEPTOR_CALLED.get()); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITAbstractSpannerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITAbstractSpannerTest.java index 5f2d88ac930..5194d64eef6 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITAbstractSpannerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITAbstractSpannerTest.java @@ -16,12 +16,16 @@ package com.google.cloud.spanner.connection; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.appendExperimentalHost; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; + import com.google.cloud.NoCredentials; import com.google.cloud.spanner.Database; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.GceTestEnvConfig; import com.google.cloud.spanner.IntegrationTestEnv; import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.SpannerOptions; import com.google.cloud.spanner.Statement; @@ -64,7 +68,7 @@ public GenericConnection getConnection() { } } - protected interface ITConnection extends Connection {} + public interface ITConnection extends Connection {} private ITConnection createITConnection(ConnectionOptions options) { return new ITConnectionImpl(options); @@ -95,6 +99,8 @@ static ExecutionStep of(StatementExecutionStep step) { private boolean onlyInjectOnce = false; private final Random random = new Random(); + private boolean usingMultiplexedsession = false; + public AbortInterceptor(double probability) { Preconditions.checkArgument(probability >= 0.0D && probability <= 1.0D); this.probability = probability; @@ -110,6 +116,14 @@ public void setOnlyInjectOnce(boolean value) { this.onlyInjectOnce = value; } + /** + * Set this value to true if a multiplexed session is being used. Determining this directly from + * TransactionManagerImpl is challenging as it is a private class. + */ + public void setUsingMultiplexedSession(boolean value) { + this.usingMultiplexedsession = value; + } + protected boolean shouldAbort(String statement, ExecutionStep step) { return probability > random.nextDouble(); } @@ -117,7 +131,7 @@ protected boolean shouldAbort(String statement, ExecutionStep step) { @Override public void intercept( ParsedStatement statement, StatementExecutionStep step, UnitOfWork transaction) { - if (shouldAbort(statement.getSqlWithoutComments(), ExecutionStep.of(step))) { + if (shouldAbort(statement.getSql(), ExecutionStep.of(step))) { // ugly hack warning: inject the aborted state into the transaction manager to simulate an // abort if (transaction instanceof ReadWriteTransaction) { @@ -133,27 +147,38 @@ public void intercept( return; } Class cls = Class.forName("com.google.cloud.spanner.TransactionManagerImpl"); - Class cls2 = - Class.forName("com.google.cloud.spanner.SessionPool$AutoClosingTransactionManager"); - Field delegateField = cls2.getDeclaredField("delegate"); - delegateField.setAccessible(true); - watch = watch.reset().start(); - while (delegateField.get(tx) == null && watch.elapsed(TimeUnit.MILLISECONDS) < 100) { - Thread.sleep(1L); + if (usingMultiplexedsession) { + Field stateField = cls.getDeclaredField("txnState"); + stateField.setAccessible(true); + if (tx.getState() == null) { + return; + } + tx.rollback(); + stateField.set(tx, TransactionState.ABORTED); + } else { + Class cls2 = + Class.forName( + "com.google.cloud.spanner.SessionPool$AutoClosingTransactionManager"); + Field delegateField = cls2.getDeclaredField("delegate"); + delegateField.setAccessible(true); + watch = watch.reset().start(); + while (delegateField.get(tx) == null && watch.elapsed(TimeUnit.MILLISECONDS) < 100) { + Thread.sleep(1L); + } + TransactionManager delegate = (TransactionManager) delegateField.get(tx); + if (delegate == null) { + return; + } + Field stateField = cls.getDeclaredField("txnState"); + stateField.setAccessible(true); + + // First rollback the delegate, and then pretend it aborted. + // We should call rollback on the delegate and not the wrapping + // AutoClosingTransactionManager, as the latter would cause the session to be returned + // to the session pool. + delegate.rollback(); + stateField.set(delegate, TransactionState.ABORTED); } - TransactionManager delegate = (TransactionManager) delegateField.get(tx); - if (delegate == null) { - return; - } - Field stateField = cls.getDeclaredField("txnState"); - stateField.setAccessible(true); - - // First rollback the delegate, and then pretend it aborted. - // We should call rollback on the delegate and not the wrapping - // AutoClosingTransactionManager, as the latter would cause the session to be returned - // to the session pool. - delegate.rollback(); - stateField.set(delegate, TransactionState.ABORTED); } catch (Exception e) { throw new RuntimeException(e); } @@ -214,6 +239,9 @@ public static StringBuilder extractConnectionUrl(SpannerOptions options, Databas if (options.getCredentials() == NoCredentials.getInstance()) { url.append(";usePlainText=true"); } + if (isExperimentalHost()) { + appendExperimentalHost(url); + } return url; } @@ -310,7 +338,8 @@ public void createTestTable() { connection.startBatchDdl(); connection.execute( Statement.of( - "CREATE TABLE TEST (ID INT64 NOT NULL, NAME STRING(100) NOT NULL) PRIMARY KEY (ID)")); + "CREATE TABLE TEST (ID INT64 NOT NULL, NAME STRING(100) NOT NULL) PRIMARY KEY" + + " (ID)")); connection.runBatch(); } } @@ -323,7 +352,8 @@ protected boolean tableExists(Connection connection, String table) { connection.executeQuery( Statement.newBuilder( String.format( - "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE UPPER(TABLE_NAME)=UPPER(\'%s\')", + "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE" + + " UPPER(TABLE_NAME)=UPPER(\'%s\')", table)) .build())) { while (rs.next()) { @@ -338,7 +368,8 @@ protected boolean indexExists(Connection connection, String table, String index) try (ResultSet rs = connection.executeQuery( Statement.newBuilder( - "SELECT INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES WHERE UPPER(TABLE_NAME)=@table_name AND UPPER(INDEX_NAME)=@index_name") + "SELECT INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES WHERE" + + " UPPER(TABLE_NAME)=@table_name AND UPPER(INDEX_NAME)=@index_name") .bind("table_name") .to(table) .bind("index_name") @@ -350,4 +381,11 @@ protected boolean indexExists(Connection connection, String table, String index) } return false; } + + protected boolean isMultiplexedSessionsEnabledForRW(Spanner spanner) { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITConnectionImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITConnectionImpl.java index cff154769b3..343b24a1015 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITConnectionImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITConnectionImpl.java @@ -18,7 +18,7 @@ import com.google.cloud.spanner.connection.ITAbstractSpannerTest.ITConnection; /** Implementation of {@link ITConnection} for Spanner generic (not JDBC) connections. */ -class ITConnectionImpl extends ConnectionImpl implements ITConnection { +public class ITConnectionImpl extends ConnectionImpl implements ITConnection { ITConnectionImpl(ConnectionOptions options) { super(options); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MaxCommitDelayTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MaxCommitDelayTest.java index 1e22986cce2..ca7fa18e97a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MaxCommitDelayTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MaxCommitDelayTest.java @@ -83,7 +83,20 @@ public void testNoMaxCommitDelayByDefault() { for (boolean autocommit : new boolean[] {true, false}) { connection.setAutocommit(autocommit); executeCommit(connection); - assertMaxCommitDelay(Duration.getDefaultInstance()); + assertMaxCommitDelay(Duration.getDefaultInstance(), false); + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testZeroMaxCommitDelay() { + try (Connection connection = createConnection()) { + for (boolean autocommit : new boolean[] {true, false}) { + connection.setAutocommit(autocommit); + connection.setMaxCommitDelay(java.time.Duration.ZERO); + executeCommit(connection); + assertMaxCommitDelay(Duration.getDefaultInstance(), true); mockSpanner.clearRequests(); } } @@ -95,7 +108,19 @@ public void testMaxCommitDelayInConnectionString() { for (boolean autocommit : new boolean[] {true, false}) { connection.setAutocommit(autocommit); executeCommit(connection); - assertMaxCommitDelay(Duration.newBuilder().setSeconds(1).build()); + assertMaxCommitDelay(Duration.newBuilder().setSeconds(1).build(), true); + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testZeroMaxCommitDelayInConnectionString() { + try (Connection connection = createConnection(";maxCommitDelay=0")) { + for (boolean autocommit : new boolean[] {true, false}) { + connection.setAutocommit(autocommit); + executeCommit(connection); + assertMaxCommitDelay(Duration.getDefaultInstance(), true); mockSpanner.clearRequests(); } } @@ -121,20 +146,31 @@ public void testSetMaxCommitDelay() { () -> { executeCommit(connection); assertMaxCommitDelay( - Duration.newBuilder() - .setNanos((int) TimeUnit.MILLISECONDS.toNanos(40)) - .build()); + Duration.newBuilder().setNanos((int) TimeUnit.MILLISECONDS.toNanos(40)).build(), + true); mockSpanner.clearRequests(); }); if (useSql) { + // This is translated to Duration.ZERO. connection.execute( Statement.of(String.format("set %smax_commit_delay=null", getVariablePrefix()))); } else { connection.setMaxCommitDelay(null); } executeCommit(connection); - assertMaxCommitDelay(Duration.getDefaultInstance()); + // The SQL statement set max_commit_delay=null is translated to Duration.ZERO. + assertMaxCommitDelay(Duration.getDefaultInstance(), useSql); + mockSpanner.clearRequests(); + + if (useSql) { + connection.execute( + Statement.of(String.format("set %smax_commit_delay=0", getVariablePrefix()))); + } else { + connection.setMaxCommitDelay(java.time.Duration.ZERO); + } + executeCommit(connection); + assertMaxCommitDelay(Duration.getDefaultInstance(), true); mockSpanner.clearRequests(); } } @@ -150,10 +186,11 @@ void executeCommit(Connection connection) { } } - private void assertMaxCommitDelay(Duration expected) { + private void assertMaxCommitDelay(Duration expected, boolean hasMaxCommitDelay) { List requests = mockSpanner.getRequestsOfType(CommitRequest.class); assertEquals(1, requests.size()); CommitRequest request = requests.get(0); assertEquals(expected, request.getMaxCommitDelay()); + assertEquals(hasMaxCommitDelay, request.hasMaxCommitDelay()); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java index 8a309115c71..6d3950efbc3 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java @@ -32,6 +32,8 @@ import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.Struct; import com.google.cloud.spanner.Type; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.StructType; import java.util.ArrayList; import java.util.BitSet; import java.util.Collection; @@ -103,7 +105,7 @@ public static Collection parameters() { return params; } - private MockedResults setupResults(boolean withErrors) { + private MockedResults setupResults(boolean withErrors, boolean withEmptyResults) { Random random = new Random(); Connection connection = mock(Connection.class); List partitions = new ArrayList<>(); @@ -122,10 +124,22 @@ private MockedResults setupResults(boolean withErrors) { when(connection.runPartition(partition)) .thenReturn(new ResultSetWithError(ResultSetsHelper.fromProto(proto), errorIndex)); } else { - when(connection.runPartition(partition)).thenReturn(ResultSetsHelper.fromProto(proto)); - try (ResultSet resultSet = ResultSetsHelper.fromProto(proto)) { - while (resultSet.next()) { - allRows.add(resultSet.getCurrentRowAsStruct()); + if (withEmptyResults && numPartitions > 1 && index == 0) { + when(connection.runPartition(partition)) + .thenReturn( + ResultSetsHelper.fromProto( + com.google.spanner.v1.ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setRowType(StructType.newBuilder().build()) + .build()) + .build())); + } else { + when(connection.runPartition(partition)).thenReturn(ResultSetsHelper.fromProto(proto)); + try (ResultSet resultSet = ResultSetsHelper.fromProto(proto)) { + while (resultSet.next()) { + allRows.add(resultSet.getCurrentRowAsStruct()); + } } } } @@ -135,7 +149,7 @@ private MockedResults setupResults(boolean withErrors) { @Test public void testAllResultsAreReturned() { - MockedResults results = setupResults(false); + MockedResults results = setupResults(/* withErrors= */ false, /* withEmptyResults= */ false); BitSet rowsFound = new BitSet(results.allRows.size()); try (MergedResultSet resultSet = new MergedResultSet(results.connection, results.partitions, maxParallelism)) { @@ -150,7 +164,7 @@ public void testAllResultsAreReturned() { if (numPartitions == 0) { assertEquals(0, resultSet.getColumnCount()); } else { - assertEquals(24, resultSet.getColumnCount()); + assertEquals(26, resultSet.getColumnCount()); assertEquals(Type.bool(), resultSet.getColumnType(0)); assertEquals(Type.bool(), resultSet.getColumnType("COL0")); assertEquals(10, resultSet.getColumnIndex("COL10")); @@ -170,7 +184,7 @@ public void testAllResultsAreReturned() { @Test public void testResultSetStopsAfterFirstError() { - MockedResults results = setupResults(true); + MockedResults results = setupResults(/* withErrors= */ true, /* withEmptyResults= */ false); try (MergedResultSet resultSet = new MergedResultSet(results.connection, results.partitions, maxParallelism)) { if (numPartitions > 0) { @@ -194,6 +208,40 @@ public void testResultSetStopsAfterFirstError() { } } + @Test + public void testResultSetReturnsNonEmptyMetadata() { + MockedResults results = setupResults(/* withErrors= */ false, /* withEmptyResults= */ true); + BitSet rowsFound = new BitSet(results.allRows.size()); + try (MergedResultSet resultSet = + new MergedResultSet(results.connection, results.partitions, maxParallelism)) { + if (numPartitions > 0) { + assertNotNull(resultSet.getMetadata()); + assertEquals(26, resultSet.getMetadata().getRowType().getFieldsCount()); + } + while (resultSet.next()) { + assertRowExists(results.allRows, resultSet.getCurrentRowAsStruct(), rowsFound); + } + if (numPartitions == 0) { + assertEquals(0, resultSet.getColumnCount()); + } else { + assertEquals(26, resultSet.getColumnCount()); + assertEquals(Type.bool(), resultSet.getColumnType(0)); + assertEquals(Type.bool(), resultSet.getColumnType("COL0")); + assertEquals(10, resultSet.getColumnIndex("COL10")); + } + // Check that all rows were found. + assertEquals(results.allRows.size(), rowsFound.nextClearBit(0)); + // Check extended metadata. + assertEquals(numPartitions, resultSet.getNumPartitions()); + if (maxParallelism > 0) { + assertEquals(Math.min(numPartitions, maxParallelism), resultSet.getParallelism()); + } else { + int processors = Runtime.getRuntime().availableProcessors(); + assertEquals(Math.min(numPartitions, processors), resultSet.getParallelism()); + } + } + } + private void assertRowExists(List expectedRows, Struct row, BitSet rowsFound) { for (int i = 0; i < expectedRows.size(); i++) { if (row.equals(expectedRows.get(i))) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java index 655ca0de586..d3fb5181247 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java @@ -93,7 +93,9 @@ public void testPartitionQuery() { assertFalse(resultSet.next()); } } - if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + if (isMultiplexedSessionsEnabledForPartitionedOps(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else if (isMultiplexedSessionsEnabled(connection.getSpanner())) { assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } else { assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); @@ -155,7 +157,9 @@ public void testMixNormalAndPartitionQueryInReadOnlyTransaction() { readTimestamps.add(connection.getReadTimestamp()); connection.commit(); } - if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + if (isMultiplexedSessionsEnabledForPartitionedOps(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else if (isMultiplexedSessionsEnabled(connection.getSpanner())) { assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } else { assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); @@ -228,6 +232,10 @@ public void testRunPartition() { if (createSessionRequestCounts == expectedCreateSessionsRPC + 1) { isMultiplexedSessionCreated = true; } + } else if (isMultiplexedSessionsEnabledForPartitionedOps(connection.getSpanner()) + && isMultiplexedSessionCreated) { + // When multiplexed session will be reused for each iteration. + assertEquals(0, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } else { assertEquals( expectedCreateSessionsRPC, @@ -261,6 +269,7 @@ public void testRunPartitionUsingSql() { String prefix = dialect == Dialect.POSTGRESQL ? "spanner." : ""; int maxPartitions = 5; + boolean isMultiplexedSessionCreated = false; try (Connection connection = createConnection()) { connection.execute(Statement.of("set autocommit=true")); assertTrue(connection.isAutocommit()); @@ -284,7 +293,6 @@ public void testRunPartitionUsingSql() { assertFalse(resultSet.next()); } - boolean isMultiplexedSessionCreated = false; for (boolean useLiteral : new boolean[] {true, false}) { try (ResultSet partitions = connection.executeQuery( @@ -328,6 +336,10 @@ public void testRunPartitionUsingSql() { if (createSessionRequestCounts == expectedCreateSessionsRPC + 1) { isMultiplexedSessionCreated = true; } + } else if (isMultiplexedSessionsEnabledForPartitionedOps(connection.getSpanner()) + && isMultiplexedSessionCreated) { + // When multiplexed session will be reused for each iteration. + assertEquals(0, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } else { assertEquals( expectedCreateSessionsRPC, @@ -403,9 +415,9 @@ public void testRunEmptyPartitionedQuery() { statement, PartitionOptions.newBuilder().setMaxPartitions(maxPartitions).build())) { assertFalse(resultSet.next()); assertNotNull(resultSet.getMetadata()); - assertEquals(24, resultSet.getMetadata().getRowType().getFieldsCount()); + assertEquals(26, resultSet.getMetadata().getRowType().getFieldsCount()); assertNotNull(resultSet.getType()); - assertEquals(24, resultSet.getType().getStructFields().size()); + assertEquals(26, resultSet.getType().getStructFields().size()); } if (isMultiplexedSessionsEnabled(connection.getSpanner())) { assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); @@ -435,15 +447,15 @@ public void testGetMetadataWithoutNextCall() { connection.runPartitionedQuery( statement, PartitionOptions.newBuilder().setMaxPartitions(maxPartitions).build())) { assertNotNull(resultSet.getMetadata()); - assertEquals(24, resultSet.getMetadata().getRowType().getFieldsCount()); + assertEquals(26, resultSet.getMetadata().getRowType().getFieldsCount()); assertNotNull(resultSet.getType()); - assertEquals(24, resultSet.getType().getStructFields().size()); + assertEquals(26, resultSet.getType().getStructFields().size()); assertTrue(resultSet.next()); assertNotNull(resultSet.getMetadata()); - assertEquals(24, resultSet.getMetadata().getRowType().getFieldsCount()); + assertEquals(26, resultSet.getMetadata().getRowType().getFieldsCount()); assertNotNull(resultSet.getType()); - assertEquals(24, resultSet.getType().getStructFields().size()); + assertEquals(26, resultSet.getType().getStructFields().size()); assertFalse(resultSet.next()); } @@ -470,9 +482,9 @@ public void testGetMetadataWithoutNextCallOnEmptyResultSet() { connection.runPartitionedQuery( statement, PartitionOptions.newBuilder().setMaxPartitions(maxPartitions).build())) { assertNotNull(resultSet.getMetadata()); - assertEquals(24, resultSet.getMetadata().getRowType().getFieldsCount()); + assertEquals(26, resultSet.getMetadata().getRowType().getFieldsCount()); assertNotNull(resultSet.getType()); - assertEquals(24, resultSet.getType().getStructFields().size()); + assertEquals(26, resultSet.getType().getStructFields().size()); assertFalse(resultSet.next()); } @@ -556,7 +568,8 @@ public void testRunPartitionedQueryUsingSql() { try (ResultSet resultSet = connection.executeQuery( Statement.newBuilder( - "run\tpartitioned query\n select * from random_table where active=@active") + "run\tpartitioned query\n" + + " select * from random_table where active=@active") .bind("active") .to(true) .build())) { @@ -570,7 +583,9 @@ public void testRunPartitionedQueryUsingSql() { assertEquals(maxPartitions * generatedRowCount, rowCount); } } - if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + if (isMultiplexedSessionsEnabledForPartitionedOps(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else if (isMultiplexedSessionsEnabled(connection.getSpanner())) { assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } else { assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); @@ -628,7 +643,8 @@ public void testRunPartitionedQueryWithError() { // only one of the partition executors will see it. assertTrue( String.format( - "rowCount (%d) should be <= maxPartitions (%d) * generatedRowCount (%d) - (generatedRowCount (%d) - errorIndex (%d))", + "rowCount (%d) should be <= maxPartitions (%d) * generatedRowCount (%d) -" + + " (generatedRowCount (%d) - errorIndex (%d))", rowCount, maxPartitions, generatedRowCount, generatedRowCount, errorIndex), rowCount <= (maxPartitions * generatedRowCount - (generatedRowCount - errorIndex))); } @@ -679,7 +695,9 @@ public void testRunPartitionedQueryWithMaxParallelism() { assertEquals(maxPartitions * generatedRowCount, rowCount); } } - if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + if (isMultiplexedSessionsEnabledForPartitionedOps(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else if (isMultiplexedSessionsEnabled(connection.getSpanner())) { assertEquals(6, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } else { assertEquals(5, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); @@ -758,7 +776,10 @@ public void testAutoPartitionMode() { exception .getMessage() .contains("Partition query is not supported for read/write transaction")); - if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + + if (isMultiplexedSessionsEnabledForPartitionedOps(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else if (isMultiplexedSessionsEnabled(connection.getSpanner())) { assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } else { assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgDurationConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgDurationConverterTest.java index 95bd97962a8..ca0ae403e50 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgDurationConverterTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgDurationConverterTest.java @@ -45,7 +45,7 @@ public void testConvert() throws CompileException { assertEquals( Duration.ofNanos((int) TimeUnit.MILLISECONDS.toNanos(100L)), converter.convert("'100ms'")); - assertNull(converter.convert("'0ms'")); + assertEquals(Duration.ZERO, converter.convert("'0ms'")); assertNull(converter.convert("'-100ms'")); assertEquals(Duration.ofSeconds(315576000000L), converter.convert("'315576000000000ms'")); assertEquals(Duration.ofSeconds(1L), converter.convert("'1s'")); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgTransactionModeConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgTransactionModeConverterTest.java index 8fbe0d85867..f65628def7a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgTransactionModeConverterTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgTransactionModeConverterTest.java @@ -19,6 +19,7 @@ import static com.google.cloud.spanner.connection.PgTransactionMode.AccessMode.READ_ONLY_TRANSACTION; import static com.google.cloud.spanner.connection.PgTransactionMode.AccessMode.READ_WRITE_TRANSACTION; import static com.google.cloud.spanner.connection.PgTransactionMode.IsolationLevel.ISOLATION_LEVEL_DEFAULT; +import static com.google.cloud.spanner.connection.PgTransactionMode.IsolationLevel.ISOLATION_LEVEL_REPEATABLE_READ; import static com.google.cloud.spanner.connection.PgTransactionMode.IsolationLevel.ISOLATION_LEVEL_SERIALIZABLE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -51,6 +52,7 @@ static PgTransactionMode create(AccessMode accessMode, IsolationLevel isolationL return mode; } + @SuppressWarnings("ClassEscapesDefinedScope") @Test public void testConvert() throws CompileException { String allowedValues = @@ -95,6 +97,25 @@ public void testConvert() throws CompileException { assertEquals( create(ISOLATION_LEVEL_SERIALIZABLE), converter.convert("Isolation\tLevel\tSerializable")); + assertEquals( + create(ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("isolation level repeatable read")); + assertEquals( + create(ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("ISOLATION LEVEL REPEATABLE READ")); + assertEquals( + create(ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("Isolation Level Repeatable Read")); + assertEquals( + create(ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("isolation level repeatable read")); + assertEquals( + create(ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("ISOLATION\nLEVEL\nREPEATABLE\nREAD")); + assertEquals( + create(ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("Isolation\tLevel\tRepeatable\tRead")); + assertEquals(new PgTransactionMode(), converter.convert("")); assertEquals(new PgTransactionMode(), converter.convert(" ")); assertNull(converter.convert("random string")); @@ -143,6 +164,9 @@ public void testConvert() throws CompileException { assertEquals( create(READ_ONLY_TRANSACTION, ISOLATION_LEVEL_SERIALIZABLE), converter.convert("read only isolation level serializable")); + assertEquals( + create(READ_ONLY_TRANSACTION, ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("read only isolation level repeatable read")); assertNull(converter.convert("isolation level default, read-only")); assertNull(converter.convert("isolation level default, read")); @@ -156,8 +180,11 @@ public void testConvert() throws CompileException { create(READ_ONLY_TRANSACTION, ISOLATION_LEVEL_SERIALIZABLE), converter.convert("isolation level default, read only, isolation level serializable")); assertEquals( - create(READ_ONLY_TRANSACTION, ISOLATION_LEVEL_SERIALIZABLE), + create(READ_ONLY_TRANSACTION, ISOLATION_LEVEL_REPEATABLE_READ), + converter.convert("isolation level default, read only, isolation level repeatable read")); + assertEquals( + create(READ_ONLY_TRANSACTION, ISOLATION_LEVEL_REPEATABLE_READ), converter.convert( - "read write, isolation level default, read only isolation level serializable")); + "read write, isolation level default, read only isolation level repeatable read")); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RandomResultSetGenerator.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RandomResultSetGenerator.java index da4b87200c3..e21e0020f6e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RandomResultSetGenerator.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RandomResultSetGenerator.java @@ -39,6 +39,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; +import java.util.UUID; /** * Utility class for generating {@link ResultSet}s containing columns with all possible data types @@ -68,6 +69,7 @@ public static Type[] generateAllTypes(Dialect dialect) { : Type.newBuilder().setCode(TypeCode.JSON).build(), Type.newBuilder().setCode(TypeCode.BYTES).build(), Type.newBuilder().setCode(TypeCode.DATE).build(), + Type.newBuilder().setCode(TypeCode.UUID).build(), Type.newBuilder().setCode(TypeCode.TIMESTAMP).build())); if (dialect == Dialect.POSTGRESQL) { types.add( @@ -124,6 +126,10 @@ public static Type[] generateAllTypes(Dialect dialect) { .setCode(TypeCode.ARRAY) .setArrayElementType(Type.newBuilder().setCode(TypeCode.DATE)) .build(), + Type.newBuilder() + .setCode(TypeCode.ARRAY) + .setArrayElementType(Type.newBuilder().setCode(TypeCode.UUID)) + .build(), Type.newBuilder() .setCode(TypeCode.ARRAY) .setArrayElementType(Type.newBuilder().setCode(TypeCode.TIMESTAMP)) @@ -255,6 +261,10 @@ private void setRandomValue(Value.Builder builder, Type type) { random.nextInt(2019) + 1, random.nextInt(11) + 1, random.nextInt(28) + 1); builder.setStringValue(date.toString()); break; + case UUID: + UUID uuid = UUID.randomUUID(); + builder.setStringValue(uuid.toString()); + break; case FLOAT32: if (randomNaN()) { builder.setNumberValue(Float.NaN); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyTransactionTest.java index e243fbd620a..0c592d85804 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyTransactionTest.java @@ -287,7 +287,7 @@ public void testExecuteQuery() { when(parsedStatement.isQuery()).thenReturn(true); Statement statement = Statement.of("SELECT * FROM FOO"); when(parsedStatement.getStatement()).thenReturn(statement); - when(parsedStatement.getSqlWithoutComments()).thenReturn(statement.getSql()); + when(parsedStatement.getSql()).thenReturn(statement.getSql()); ReadOnlyTransaction transaction = createSubject(staleness); ResultSet rs = @@ -306,7 +306,7 @@ public void testExecuteQueryWithOptionsTest() { when(parsedStatement.isQuery()).thenReturn(true); Statement statement = Statement.of(sql); when(parsedStatement.getStatement()).thenReturn(statement); - when(parsedStatement.getSqlWithoutComments()).thenReturn(statement.getSql()); + when(parsedStatement.getSql()).thenReturn(statement.getSql()); DatabaseClient client = mock(DatabaseClient.class); com.google.cloud.spanner.ReadOnlyTransaction tx = mock(com.google.cloud.spanner.ReadOnlyTransaction.class); @@ -344,7 +344,7 @@ public void testPlanQuery() { when(parsedStatement.isQuery()).thenReturn(true); Statement statement = Statement.of("SELECT * FROM FOO"); when(parsedStatement.getStatement()).thenReturn(statement); - when(parsedStatement.getSqlWithoutComments()).thenReturn(statement.getSql()); + when(parsedStatement.getSql()).thenReturn(statement.getSql()); ReadOnlyTransaction transaction = createSubject(staleness); ResultSet rs = @@ -366,7 +366,7 @@ public void testProfileQuery() { when(parsedStatement.isQuery()).thenReturn(true); Statement statement = Statement.of("SELECT * FROM FOO"); when(parsedStatement.getStatement()).thenReturn(statement); - when(parsedStatement.getSqlWithoutComments()).thenReturn(statement.getSql()); + when(parsedStatement.getSql()).thenReturn(statement.getSql()); ReadOnlyTransaction transaction = createSubject(staleness); ResultSet rs = @@ -388,7 +388,7 @@ public void testGetReadTimestamp() { when(parsedStatement.isQuery()).thenReturn(true); Statement statement = Statement.of("SELECT * FROM FOO"); when(parsedStatement.getStatement()).thenReturn(statement); - when(parsedStatement.getSqlWithoutComments()).thenReturn(statement.getSql()); + when(parsedStatement.getSql()).thenReturn(statement.getSql()); ReadOnlyTransaction transaction = createSubject(staleness); boolean expectedException = false; @@ -423,7 +423,7 @@ public void testState() { when(parsedStatement.isQuery()).thenReturn(true); Statement statement = Statement.of("SELECT * FROM FOO"); when(parsedStatement.getStatement()).thenReturn(statement); - when(parsedStatement.getSqlWithoutComments()).thenReturn(statement.getSql()); + when(parsedStatement.getSql()).thenReturn(statement.getSql()); ReadOnlyTransaction transaction = createSubject(); assertThat( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadWriteTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadWriteTransactionTest.java index 9fbb5b5bf16..7d0fa94c9b0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadWriteTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadWriteTransactionTest.java @@ -59,6 +59,7 @@ import com.google.protobuf.ProtocolMessageEnum; import com.google.rpc.RetryInfo; import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import io.grpc.Metadata; import io.grpc.StatusRuntimeException; import io.grpc.protobuf.ProtoUtils; @@ -96,6 +97,11 @@ public TransactionContext begin() { return txContext; } + @Override + public TransactionContext begin(AbortedException exception) { + return begin(); + } + @Override public void commit() { switch (commitBehavior) { @@ -174,6 +180,7 @@ private ReadWriteTransaction createSubject( return ReadWriteTransaction.newBuilder() .setDatabaseClient(client) .setRetryAbortsInternally(withRetry) + .setIsolationLevel(IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED) .setSavepointSupport(SavepointSupport.FAIL_AFTER_ROLLBACK) .setTransactionRetryListeners(Collections.emptyList()) .withStatementExecutor(new StatementExecutor()) @@ -280,6 +287,21 @@ public void testExecuteUpdate() { assertThat(get(transaction.executeUpdateAsync(CallType.SYNC, parsedStatement)), is(1L)); } + @Test + public void testExecuteQueryWithDmlReturningWithoutRetry() { + ParsedStatement parsedStatement = mock(ParsedStatement.class); + when(parsedStatement.getType()).thenReturn(StatementType.UPDATE); + when(parsedStatement.isUpdate()).thenReturn(true); + when(parsedStatement.hasReturningClause()).thenReturn(true); + Statement statement = Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'x') THEN RETURN *"); + when(parsedStatement.getStatement()).thenReturn(statement); + + ReadWriteTransaction transaction = createSubject(/* commitBehavior= */ CommitBehavior.SUCCEED); + ResultSet rs = + get(transaction.executeQueryAsync(CallType.SYNC, parsedStatement, AnalyzeMode.NONE)); + assertThat(rs, is(notNullValue())); + } + @Test public void testGetCommitTimestampBeforeCommit() { ParsedStatement parsedStatement = mock(ParsedStatement.class); @@ -473,6 +495,7 @@ public void testRetry() { ReadWriteTransaction subject = ReadWriteTransaction.newBuilder() .setRetryAbortsInternally(true) + .setIsolationLevel(IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED) .setSavepointSupport(SavepointSupport.FAIL_AFTER_ROLLBACK) .setTransactionRetryListeners(Collections.emptyList()) .setDatabaseClient(client) @@ -502,6 +525,7 @@ public void testChecksumResultSet() { ReadWriteTransaction transaction = ReadWriteTransaction.newBuilder() .setRetryAbortsInternally(true) + .setIsolationLevel(IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED) .setSavepointSupport(SavepointSupport.FAIL_AFTER_ROLLBACK) .setTransactionRetryListeners(Collections.emptyList()) .setDatabaseClient(client) @@ -737,6 +761,7 @@ public void testChecksumResultSetWithArray() { ReadWriteTransaction transaction = ReadWriteTransaction.newBuilder() .setRetryAbortsInternally(true) + .setIsolationLevel(IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED) .setSavepointSupport(SavepointSupport.FAIL_AFTER_ROLLBACK) .setTransactionRetryListeners(Collections.emptyList()) .setDatabaseClient(client) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RetryDmlAsPartitionedDmlMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RetryDmlAsPartitionedDmlMockServerTest.java index 022c9a92f1f..d5e44fdcefc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RetryDmlAsPartitionedDmlMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RetryDmlAsPartitionedDmlMockServerTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; @@ -26,6 +27,7 @@ import com.google.cloud.spanner.MockSpannerServiceImpl; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SpannerBatchUpdateException; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.TransactionMutationLimitExceededException; @@ -34,16 +36,44 @@ import com.google.rpc.Help.Link; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ExecuteSqlRequest; import io.grpc.Metadata; import io.grpc.Status; import io.grpc.StatusRuntimeException; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; -@RunWith(JUnit4.class) +@RunWith(Parameterized.class) public class RetryDmlAsPartitionedDmlMockServerTest extends AbstractMockServerTest { + private enum ExceptionType { + MutationLimitExceeded { + @Override + StatusRuntimeException createException() { + return createTransactionMutationLimitExceededException(); + } + }, + ResourceLimitExceeded { + @Override + StatusRuntimeException createException() { + return createTransactionResourceLimitExceededException(); + } + }; + + abstract StatusRuntimeException createException(); + } + + @Parameters(name = "exception = {0}") + public static Object[] data() { + return ExceptionType.values(); + } + + @SuppressWarnings("ClassEscapesDefinedScope") + @Parameter + public ExceptionType exceptionType; static StatusRuntimeException createTransactionMutationLimitExceededException() { Metadata.Key key = @@ -67,10 +97,16 @@ static StatusRuntimeException createTransactionMutationLimitExceededException() .asRuntimeException(trailers); } + static StatusRuntimeException createTransactionResourceLimitExceededException() { + return Status.INVALID_ARGUMENT + .withDescription("Transaction resource limits exceeded") + .asRuntimeException(); + } + @Test public void testTransactionMutationLimitExceeded_isNotRetriedByDefault() { mockSpanner.setExecuteSqlExecutionTime( - SimulatedExecutionTime.ofException(createTransactionMutationLimitExceededException())); + SimulatedExecutionTime.ofException(exceptionType.createException())); try (Connection connection = createConnection()) { connection.setAutocommit(true); @@ -83,6 +119,8 @@ public void testTransactionMutationLimitExceeded_isNotRetriedByDefault() { assertEquals(0, exception.getSuppressed().length); } assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getLastStatement()); assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -90,7 +128,7 @@ public void testTransactionMutationLimitExceeded_isNotRetriedByDefault() { public void testTransactionMutationLimitExceeded_canBeRetriedAsPDML() { Statement statement = Statement.of("update test set value=1 where true"); mockSpanner.setExecuteSqlExecutionTime( - SimulatedExecutionTime.ofException(createTransactionMutationLimitExceededException())); + SimulatedExecutionTime.ofException(exceptionType.createException())); mockSpanner.putStatementResult( MockSpannerServiceImpl.StatementResult.update(statement, 100000L)); @@ -108,6 +146,7 @@ public void testTransactionMutationLimitExceeded_canBeRetriedAsPDML() { ExecuteSqlRequest transactionalRequest = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); assertTrue(transactionalRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(transactionalRequest.getLastStatement()); // Partitioned DML uses an explicit BeginTransaction RPC. assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); @@ -117,6 +156,7 @@ public void testTransactionMutationLimitExceeded_canBeRetriedAsPDML() { ExecuteSqlRequest partitionedDmlRequest = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(1); assertTrue(partitionedDmlRequest.getTransaction().hasId()); + assertFalse(partitionedDmlRequest.getLastStatement()); // Partitioned DML transactions are not committed. assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); @@ -127,7 +167,7 @@ public void testTransactionMutationLimitExceeded_retryAsPDMLFails() { Statement statement = Statement.of("insert into test (id, value) select -id, value from test"); // The transactional update statement uses ExecuteSql(..). mockSpanner.setExecuteSqlExecutionTime( - SimulatedExecutionTime.ofException(createTransactionMutationLimitExceededException())); + SimulatedExecutionTime.ofException(exceptionType.createException())); mockSpanner.putStatementResult( MockSpannerServiceImpl.StatementResult.exception( statement, @@ -163,6 +203,7 @@ public void testTransactionMutationLimitExceeded_retryAsPDMLFails() { ExecuteSqlRequest transactionalRequest = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); assertTrue(transactionalRequest.getTransaction().getBegin().hasReadWrite()); + assertTrue(transactionalRequest.getLastStatement()); // Partitioned DML uses an explicit BeginTransaction RPC. assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); @@ -172,6 +213,7 @@ public void testTransactionMutationLimitExceeded_retryAsPDMLFails() { ExecuteSqlRequest partitionedDmlRequest = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(1); assertTrue(partitionedDmlRequest.getTransaction().hasId()); + assertFalse(partitionedDmlRequest.getLastStatement()); // Partitioned DML transactions are not committed. assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); @@ -199,7 +241,8 @@ public void testSqlStatements() { connection.execute( Statement.of( String.format( - "set %sautocommit_dml_mode = 'transactional_with_fallback_to_partitioned_non_atomic'", + "set %sautocommit_dml_mode =" + + " 'transactional_with_fallback_to_partitioned_non_atomic'", prefix))); try (ResultSet resultSet = connection.executeQuery( @@ -213,4 +256,29 @@ public void testSqlStatements() { } } } + + @Test + public void testTransactionMutationLimitExceeded_isWrappedAsCauseOfBatchUpdateException() { + String sql = "update test set value=1 where true"; + Statement statement = Statement.of(sql); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.exception( + statement, exceptionType.createException())); + + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + assertEquals(AutocommitDmlMode.TRANSACTIONAL, connection.getAutocommitDmlMode()); + + connection.startBatchDml(); + connection.execute(statement); + SpannerBatchUpdateException batchUpdateException = + assertThrows(SpannerBatchUpdateException.class, connection::runBatch); + assertNotNull(batchUpdateException.getCause()); + assertEquals( + TransactionMutationLimitExceededException.class, + batchUpdateException.getCause().getClass()); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RunTransactionMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RunTransactionMockServerTest.java new file mode 100644 index 00000000000..d4af5dd4e7e --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RunTransactionMockServerTest.java @@ -0,0 +1,282 @@ +/* + * 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.spanner.connection; + +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SpannerException; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.RollbackRequest; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; +import io.grpc.Status; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class RunTransactionMockServerTest extends AbstractMockServerTest { + + @Test + public void testRunTransaction() { + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + try (Connection connection = createConnection()) { + connection.setDefaultIsolationLevel(isolationLevel); + connection.setReadLockMode(readLockMode); + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + return null; + }); + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + TransactionOptions transactionOptions = + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getTransaction() + .getBegin(); + assertEquals(isolationLevel, transactionOptions.getIsolationLevel()); + assertEquals(readLockMode, transactionOptions.getReadWrite().getReadLockMode()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testRunTransactionInAutoCommit() { + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.setDefaultIsolationLevel(isolationLevel); + connection.setReadLockMode(readLockMode); + + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + return null; + }); + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + TransactionOptions transactionOptions = + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getTransaction() + .getBegin(); + assertEquals(isolationLevel, transactionOptions.getIsolationLevel()); + assertEquals(readLockMode, transactionOptions.getReadWrite().getReadLockMode()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testRunTransactionInReadOnly() { + try (Connection connection = createConnection()) { + connection.setReadOnly(true); + connection.setAutocommit(false); + + assertEquals( + RANDOM_RESULT_SET_ROW_COUNT, + connection + .runTransaction( + transaction -> { + int rows = 0; + try (ResultSet resultSet = transaction.executeQuery(SELECT_RANDOM_STATEMENT)) { + while (resultSet.next()) { + rows++; + } + } + return rows; + }) + .intValue()); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(RollbackRequest.class)); + } + + @Test + public void testRunTransaction_rollbacksAfterException() { + try (Connection connection = createConnection()) { + SpannerException exception = + assertThrows( + SpannerException.class, + () -> + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + mockSpanner.setExecuteSqlExecutionTime( + SimulatedExecutionTime.ofException( + Status.INVALID_ARGUMENT + .withDescription("invalid statement") + .asRuntimeException())); + // This statement will fail. + transaction.executeUpdate(INSERT_STATEMENT); + return null; + })); + assertEquals(ErrorCode.INVALID_ARGUMENT, exception.getErrorCode()); + assertTrue(exception.getMessage(), exception.getMessage().contains("invalid statement")); + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(RollbackRequest.class)); + } + + @Test + public void testRunTransactionCommitAborted() { + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + final AtomicInteger attempts = new AtomicInteger(); + try (Connection connection = createConnection()) { + connection.setDefaultIsolationLevel(isolationLevel); + connection.setReadLockMode(readLockMode); + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + if (attempts.incrementAndGet() == 1) { + mockSpanner.abortNextStatement(); + } + return null; + }); + } + assertEquals(2, attempts.get()); + assertEquals(4, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + + for (int i : new int[] {0, 2}) { + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(i); + assertTrue(request.hasTransaction()); + assertTrue(request.getTransaction().hasBegin()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + } + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testRunTransactionDmlAborted() { + final AtomicInteger attempts = new AtomicInteger(); + try (Connection connection = createConnection()) { + assertTrue(connection.isRetryAbortsInternally()); + connection.runTransaction( + transaction -> { + assertFalse(transaction.isRetryAbortsInternally()); + if (attempts.incrementAndGet() == 1) { + mockSpanner.abortNextStatement(); + } + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + return null; + }); + assertTrue(connection.isRetryAbortsInternally()); + } + assertEquals(2, attempts.get()); + assertEquals(3, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testRunTransactionQueryAborted() { + final AtomicInteger attempts = new AtomicInteger(); + try (Connection connection = createConnection()) { + int rowCount = + connection.runTransaction( + transaction -> { + if (attempts.incrementAndGet() == 1) { + mockSpanner.abortNextStatement(); + } + int rows = 0; + try (ResultSet resultSet = transaction.executeQuery(SELECT_RANDOM_STATEMENT)) { + while (resultSet.next()) { + rows++; + } + } + return rows; + }); + assertEquals(RANDOM_RESULT_SET_ROW_COUNT, rowCount); + } + assertEquals(2, attempts.get()); + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testCommitInRunTransaction() { + try (Connection connection = createConnection()) { + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + SpannerException exception = assertThrows(SpannerException.class, transaction::commit); + assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); + assertEquals( + "FAILED_PRECONDITION: Cannot call commit when a transaction runner is active", + exception.getMessage()); + return null; + }); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testRollbackInRunTransaction() { + try (Connection connection = createConnection()) { + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + SpannerException exception = + assertThrows(SpannerException.class, transaction::rollback); + assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); + assertEquals( + "FAILED_PRECONDITION: Cannot call rollback when a transaction runner is active", + exception.getMessage()); + return null; + }); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(RollbackRequest.class)); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java index 31972481629..7e7fde96c1e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java @@ -90,6 +90,7 @@ public void clearRequests() { mockSpanner.clearRequests(); } + @SuppressWarnings("ClassEscapesDefinedScope") @Override public ITConnection createConnection() { return createConnection( @@ -698,9 +699,10 @@ public void testKeepAlive() throws InterruptedException, TimeoutException { connection.savepoint("s1"); connection.execute(INSERT_STATEMENT); connection.rollbackToSavepoint("s1"); - mockSpanner.waitForRequestsToContain(RollbackRequest.class, 1000L); String keepAliveTagAfterRollback = "test_keep_alive_tag_after_rollback"; System.setProperty("spanner.connection.keep_alive_query_tag", keepAliveTagAfterRollback); + mockSpanner.waitForRequestsToContain(RollbackRequest.class, 1000L); + mockSpanner.clearRequests(); // Verify that we don't get any new keep-alive requests from this point. Thread.sleep(2L); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetPgSessionCharacteristicsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetPgSessionCharacteristicsTest.java index 97394f67d0a..fc509b42a1f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetPgSessionCharacteristicsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetPgSessionCharacteristicsTest.java @@ -17,16 +17,19 @@ package com.google.cloud.spanner.connection; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -39,6 +42,7 @@ public class SetPgSessionCharacteristicsTest { @Test public void testSetIsolationLevelDefault() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String sql = "set session characteristics as transaction isolation level default"; @@ -47,11 +51,13 @@ public void testSetIsolationLevelDefault() { statement.getClientSideStatement().execute(executor, statement); verify(connection, never()).setReadOnly(anyBoolean()); + verify(connection).setDefaultIsolationLevel(IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED); } @Test public void testSetIsolationLevelSerializable() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String sql = "set session characteristics as transaction isolation level serializable"; @@ -60,11 +66,28 @@ public void testSetIsolationLevelSerializable() { statement.getClientSideStatement().execute(executor, statement); verify(connection, never()).setReadOnly(anyBoolean()); + verify(connection).setDefaultIsolationLevel(IsolationLevel.SERIALIZABLE); + } + + @Test + public void testSetIsolationLevelRepeatableRead() { + ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); + ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); + + String sql = "set session characteristics as transaction isolation level repeatable read"; + ParsedStatement statement = parser.parse(Statement.of(sql)); + assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); + statement.getClientSideStatement().execute(executor, statement); + + verify(connection, never()).setReadOnly(anyBoolean()); + verify(connection).setDefaultIsolationLevel(IsolationLevel.REPEATABLE_READ); } @Test public void testSetIsolationLevelReadOnly() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String sql = "set\tsession\ncharacteristics as transaction read only"; @@ -74,11 +97,13 @@ public void testSetIsolationLevelReadOnly() { verify(connection).setReadOnly(true); verify(connection, never()).setReadOnly(false); + verify(connection, never()).setDefaultIsolationLevel(any(IsolationLevel.class)); } @Test public void testSetIsolationLevelReadWrite() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String sql = "set session characteristics as transaction read write"; @@ -88,57 +113,69 @@ public void testSetIsolationLevelReadWrite() { verify(connection).setReadOnly(false); verify(connection, never()).setReadOnly(true); + verify(connection, never()).setDefaultIsolationLevel(any(IsolationLevel.class)); } @Test public void testSetIsolationLevelSerializableReadWrite() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String sql = - "set session characteristics as transaction isolation level serializable read write"; + "set session characteristics as transaction isolation level serializable read" + + " write"; ParsedStatement statement = parser.parse(Statement.of(sql)); assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); verify(connection).setReadOnly(false); verify(connection, never()).setReadOnly(true); + verify(connection).setDefaultIsolationLevel(IsolationLevel.SERIALIZABLE); } @Test public void testSetIsolationLevelSerializableReadOnly() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String sql = - "set session characteristics as transaction isolation level serializable read only"; + "set session characteristics as transaction isolation level serializable read" + + " only"; ParsedStatement statement = parser.parse(Statement.of(sql)); assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); verify(connection).setReadOnly(true); + verify(connection).setDefaultIsolationLevel(IsolationLevel.SERIALIZABLE); } @Test public void testSetMultipleTransactionModes() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String sql = - "set session characteristics as transaction isolation level default, read only, isolation level serializable, read write"; + "set session characteristics as transaction isolation level default, read only, isolation" + + " level serializable, read write"; ParsedStatement statement = parser.parse(Statement.of(sql)); assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); verify(connection).setReadOnly(false); verify(connection, never()).setReadOnly(true); + verify(connection).setDefaultIsolationLevel(IsolationLevel.SERIALIZABLE); } @Test public void testDefaultTransactionIsolation() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); + int count = 0; for (String sql : new String[] { "set default_transaction_isolation = serializable", @@ -155,15 +192,17 @@ public void testDefaultTransactionIsolation() { ParsedStatement statement = parser.parse(Statement.of(sql)); assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType()); statement.getClientSideStatement().execute(executor, statement); + count++; } - // Setting the isolation level is a no-op. verify(connection, never()).setReadOnly(anyBoolean()); + verify(connection, times(count)).setDefaultIsolationLevel(any(IsolationLevel.class)); } @Test public void testDefaultTransactionReadOnlyTrue() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String[] statements = new String[] { @@ -198,6 +237,7 @@ public void testDefaultTransactionReadOnlyTrue() { @Test public void testDefaultTransactionReadOnlyFalse() { ConnectionImpl connection = mock(ConnectionImpl.class); + when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL); ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection); String[] statements = new String[] { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SimpleParserTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SimpleParserTest.java index 2f51e7d0443..4747af2093f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SimpleParserTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SimpleParserTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; import com.google.cloud.spanner.Dialect; import org.junit.Test; @@ -221,4 +222,29 @@ public void testEatSingleQuotedStringAdvancesPosition() { assertEquals(NOT_FOUND, parser.eatSingleQuotedString()); assertEquals(parser.getSql().length(), parser.getPos()); } + + @Test + public void testSkipHint() { + assumeTrue("Hints in PostgreSQL are comments", dialect == Dialect.GOOGLE_STANDARD_SQL); + + assertEquals("SELECT 1", skipHint("SELECT 1")); + assertEquals("SELECT 1", skipHint("@{rpc_priority=HIGH}SELECT 1")); + assertEquals("SELECT 1", skipHint("@{statement_tag='test'}SELECT 1")); + assertEquals(" \nSELECT 1", skipHint(" @{statement_tag = 'test'} \nSELECT 1")); + assertEquals( + " /* comment after */ SELECT 1", + skipHint("/* comment before */ @{statement_tag='test'} /* comment after */ SELECT 1")); + assertEquals( + " -- comment after\nSELECT 1", + skipHint("-- comment before\n @{statement_tag='test'} -- comment after\nSELECT 1")); + assertEquals( + "-- comment @{statement_tag='test'}\n -- also a comment\nSELECT 1", + skipHint("-- comment @{statement_tag='test'}\n -- also a comment\nSELECT 1")); + } + + static String skipHint(String sql) { + SimpleParser parser = new SimpleParser(Dialect.GOOGLE_STANDARD_SQL, sql); + parser.skipHint(); + return parser.getSql().substring(parser.getPos()); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SingleUseTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SingleUseTransactionTest.java index 6edf46b5623..bf4d8655d09 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SingleUseTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SingleUseTransactionTest.java @@ -17,6 +17,9 @@ package com.google.cloud.spanner.connection; import static com.google.cloud.spanner.SpannerApiFutures.get; +import static com.google.cloud.spanner.connection.ConnectionProperties.AUTOCOMMIT_DML_MODE; +import static com.google.cloud.spanner.connection.ConnectionProperties.READONLY; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_ONLY_STALENESS; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -25,6 +28,7 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyList; import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -32,6 +36,7 @@ import com.google.api.core.ApiFuture; import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.Timestamp; +import com.google.cloud.spanner.AbortedException; import com.google.cloud.spanner.AsyncResultSet; import com.google.cloud.spanner.BatchClient; import com.google.cloud.spanner.CommitResponse; @@ -55,6 +60,7 @@ import com.google.cloud.spanner.TransactionRunner; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType; +import com.google.cloud.spanner.connection.ConnectionProperty.Context; import com.google.cloud.spanner.connection.StatementExecutor.StatementTimeout; import com.google.cloud.spanner.connection.UnitOfWork.CallType; import com.google.common.base.Preconditions; @@ -66,6 +72,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Test; @@ -124,6 +131,11 @@ public TransactionContext begin() { return txContext; } + @Override + public TransactionContext begin(AbortedException exception) { + return begin(); + } + @Override public void commit() { switch (commitBehavior) { @@ -306,6 +318,9 @@ private DdlClient createDefaultMockDdlClient() { when(operation.get()).thenReturn(null); when(ddlClient.executeDdl(anyString(), any())).thenCallRealMethod(); when(ddlClient.executeDdl(anyList(), any())).thenReturn(operation); + doCallRealMethod() + .when(ddlClient) + .runWithRetryForMissingDefaultSequenceKind(any(), any(), any(), any()); return ddlClient; } catch (Exception e) { throw new RuntimeException(e); @@ -395,6 +410,8 @@ private SingleUseTransaction createSubject( final TransactionContext txContext = mock(TransactionContext.class); when(txContext.executeUpdate(Statement.of(VALID_UPDATE))).thenReturn(VALID_UPDATE_COUNT); + when(txContext.executeUpdate(Statement.of(VALID_UPDATE), Options.lastStatement())) + .thenReturn(VALID_UPDATE_COUNT); when(txContext.executeUpdate(Statement.of(SLOW_UPDATE))) .thenAnswer( invocation -> { @@ -404,6 +421,9 @@ private SingleUseTransaction createSubject( when(txContext.executeUpdate(Statement.of(INVALID_UPDATE))) .thenThrow( SpannerExceptionFactory.newSpannerException(ErrorCode.UNKNOWN, "invalid update")); + when(txContext.executeUpdate(Statement.of(INVALID_UPDATE), Options.lastStatement())) + .thenThrow( + SpannerExceptionFactory.newSpannerException(ErrorCode.UNKNOWN, "invalid update")); SimpleTransactionManager txManager = new SimpleTransactionManager(txContext, commitBehavior); when(dbClient.transactionManager()).thenReturn(txManager); @@ -413,6 +433,11 @@ private SingleUseTransaction createSubject( .thenThrow( SpannerExceptionFactory.newSpannerException(ErrorCode.UNKNOWN, "invalid update")); + ConnectionState connectionState = new ConnectionState(new HashMap<>()); + connectionState.setValue(AUTOCOMMIT_DML_MODE, dmlMode, Context.STARTUP, false); + connectionState.setValue(READONLY, readOnly, Context.STARTUP, false); + connectionState.setValue(READ_ONLY_STALENESS, staleness, Context.STARTUP, false); + when(dbClient.readWriteTransaction()) .thenAnswer( new Answer() { @@ -468,9 +493,7 @@ public TransactionRunner allowNestedTransaction() { .setDatabaseClient(dbClient) .setBatchClient(mock(BatchClient.class)) .setDdlClient(ddlClient) - .setAutocommitDmlMode(dmlMode) - .setReadOnly(readOnly) - .setReadOnlyStaleness(staleness) + .setConnectionState(connectionState) .setStatementTimeout( timeout == 0L ? nullTimeout() : timeout(timeout, TimeUnit.MILLISECONDS)) .withStatementExecutor(executor) @@ -483,7 +506,7 @@ private ParsedStatement createParsedDdl(String sql) { ParsedStatement statement = mock(ParsedStatement.class); when(statement.getType()).thenReturn(StatementType.DDL); when(statement.getStatement()).thenReturn(Statement.of(sql)); - when(statement.getSqlWithoutComments()).thenReturn(sql); + when(statement.getSql()).thenReturn(sql); return statement; } @@ -659,14 +682,18 @@ public void testExecuteQueryWithOptionsTest() { when(tx.executeQuery(Statement.of(sql), option)).thenReturn(mock(ResultSet.class)); when(client.singleUseReadOnlyTransaction(TimestampBound.strong())).thenReturn(tx); + ConnectionState connectionState = new ConnectionState(new HashMap<>()); + connectionState.setValue( + AUTOCOMMIT_DML_MODE, AutocommitDmlMode.TRANSACTIONAL, Context.STARTUP, false); + connectionState.setValue(READ_ONLY_STALENESS, TimestampBound.strong(), Context.STARTUP, false); + SingleUseTransaction transaction = SingleUseTransaction.newBuilder() .setDatabaseClient(client) .setBatchClient(mock(BatchClient.class)) .setDdlClient(mock(DdlClient.class)) - .setAutocommitDmlMode(AutocommitDmlMode.TRANSACTIONAL) + .setConnectionState(connectionState) .withStatementExecutor(executor) - .setReadOnlyStaleness(TimestampBound.strong()) .setSpan(Span.getInvalid()) .build(); assertThat( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java index fea0b8aa6cf..b03288354b2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java @@ -44,6 +44,7 @@ import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.concurrent.TimeUnit; +import java.util.logging.ConsoleHandler; import java.util.logging.Handler; import java.util.logging.Logger; import java.util.logging.StreamHandler; @@ -211,7 +212,8 @@ private void attachLogCapturer() { currentLogger = currentLogger.getParent(); } if (handlers.length == 0) { - throw new IllegalStateException("no handlers found for logger"); + handlers = new Handler[1]; + handlers[0] = new ConsoleHandler(); } customLogHandler = new StreamHandler(logCapturingStream, handlers[0].getFormatter()); useParentHandlers = log.getUseParentHandlers(); @@ -267,6 +269,7 @@ public void testRemoveConnectionConnectionAlreadyRemoved() { @Test public void testCloseSpanner() { + attachLogCapturer(); SpannerPool pool = createSubjectAndMocks(); Spanner spanner = pool.getSpanner(options1, connection1); // verify that closing is not possible until all connections have been removed @@ -284,7 +287,8 @@ public void testCloseSpanner() { verify(spanner).close(); final String expectedLogPart = - "WARNING: There is/are 1 connection(s) still open. Close all connections before stopping the application"; + "WARNING: There is/are 1 connection(s) still open. Close all connections before stopping" + + " the application"; Spanner spanner2 = pool.getSpanner(options1, connection1); pool.checkAndCloseSpanners(CheckAndCloseSpannersMode.WARN); String capturedLog = getTestCapturedLog(); @@ -631,4 +635,140 @@ public void testOpenTelemetry() { spanner2 = pool.getSpanner(optionsOpenTelemetry3, connection2); assertNotEquals(spanner1, spanner2); } + + @Test + public void testDynamicChannelPoolSettings() { + SpannerPoolKey keyWithoutDcp = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithDcpEnabled = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=true") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithDcpDisabled = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=false") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithDcpAndMinChannels = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=true;dcpMinChannels=3") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithDcpAndMaxChannels = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=true;dcpMaxChannels=15") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithDcpAndInitialChannels = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=true;dcpInitialChannels=5") + .setCredentials(NoCredentials.getInstance()) + .build()); + + // DCP settings should affect the SpannerPoolKey + assertNotEquals(keyWithoutDcp, keyWithDcpEnabled); + assertNotEquals(keyWithoutDcp, keyWithDcpDisabled); + assertNotEquals(keyWithDcpEnabled, keyWithDcpDisabled); + + // Different channel settings should create different keys + assertNotEquals(keyWithDcpEnabled, keyWithDcpAndMinChannels); + assertNotEquals(keyWithDcpEnabled, keyWithDcpAndMaxChannels); + assertNotEquals(keyWithDcpEnabled, keyWithDcpAndInitialChannels); + + // Same configuration should create equal keys + assertEquals( + keyWithDcpEnabled, + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=true") + .setCredentials(NoCredentials.getInstance()) + .build())); + assertEquals( + keyWithDcpAndMinChannels, + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=true;dcpMinChannels=3") + .setCredentials(NoCredentials.getInstance()) + .build())); + } + + @Test + public void testDynamicChannelPoolWithAllSettings() { + SpannerPoolKey keyWithAllDcpSettings = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d" + + "?enableDynamicChannelPool=true;dcpMinChannels=3;dcpMaxChannels=15;dcpInitialChannels=5") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithDifferentMaxChannels = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d" + + "?enableDynamicChannelPool=true;dcpMinChannels=3;dcpMaxChannels=20;dcpInitialChannels=5") + .setCredentials(NoCredentials.getInstance()) + .build()); + + assertNotEquals(keyWithAllDcpSettings, keyWithDifferentMaxChannels); + + // Same configuration should be equal + assertEquals( + keyWithAllDcpSettings, + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d" + + "?enableDynamicChannelPool=true;dcpMinChannels=3;dcpMaxChannels=15;dcpInitialChannels=5") + .setCredentials(NoCredentials.getInstance()) + .build())); + } + + @Test + public void testExplicitlyDisabledDynamicChannelPool() { + SpannerPoolKey keyWithoutDcpSetting = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithDcpExplicitlyDisabled = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=false") + .setCredentials(NoCredentials.getInstance()) + .build()); + + // Keys should be different because one has explicit false and one has null (default) + assertNotEquals(keyWithoutDcpSetting, keyWithDcpExplicitlyDisabled); + + // Verify the explicit false setting is preserved + assertEquals( + keyWithDcpExplicitlyDisabled, + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableDynamicChannelPool=false") + .setCredentials(NoCredentials.getInstance()) + .build())); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerStatementParserTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerStatementParserTest.java index 5cec5d838d1..048f95ed778 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerStatementParserTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerStatementParserTest.java @@ -16,10 +16,16 @@ package com.google.cloud.spanner.connection; +import static com.google.cloud.spanner.ErrorCode.INVALID_ARGUMENT; import static com.google.cloud.spanner.connection.StatementParserTest.assertUnclosedLiteral; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.connection.StatementParserTest.CommentInjector; import org.junit.Test; import org.junit.runner.RunWith; @@ -39,6 +45,55 @@ static String skip(String sql, int currentIndex) { return sql.substring(currentIndex, position); } + @Test + public void testRemoveCommentsAndTrim() { + AbstractStatementParser parser = + AbstractStatementParser.getInstance(Dialect.GOOGLE_STANDARD_SQL); + + // Statements that should parse correctly + String[] validStatements = + new String[] { + "SELECT '\\\\'", // SELECT '\\' (escaped backslash, followed by quote) + "SELECT '\\''", // SELECT '\'' (escaped quote, followed by an actual closing quote) + "SELECT '\\\\\\\\'" // SELECT '\\\\' (two escaped backslashes) + }; + for (String sql : validStatements) { + assertEquals(sql, parser.removeCommentsAndTrim(sql)); + } + + // Statements that contain an unclosed literal because the final quote is + // escaped + String[] invalidStatements = + new String[] { + "SELECT '\\'" // SELECT '\' (escaped closing quote) + }; + + for (String sql : invalidStatements) { + try { + parser.removeCommentsAndTrim(sql); + fail("Expected SpannerException for unclosed literal: " + sql); + } catch (SpannerException e) { + assertEquals(INVALID_ARGUMENT, e.getErrorCode()); + } + } + } + + @Test + public void testReturningClauseWithBackslashes() { + AbstractStatementParser parser = + AbstractStatementParser.getInstance(Dialect.GOOGLE_STANDARD_SQL); + + // Valid returning clause, double backslash in string literal should be handled + // correctly. + String sqlWithReturning = "INSERT INTO my_table (value) VALUES ('foo \\\\ bar') THEN RETURN id"; + assertTrue(parser.parse(Statement.of(sqlWithReturning)).hasReturningClause()); + + // No returning clause, `then return` is inside a string literal with a double + // backslash. + String sqlWithoutReturning = "INSERT INTO my_table (value) VALUES ('then \\\\ return')"; + assertFalse(parser.parse(Statement.of(sqlWithoutReturning)).hasReturningClause()); + } + @Test public void testSkip() { assertEquals("", skip("")); @@ -54,6 +109,7 @@ public void testSkip() { assertEquals("'foo\"bar\"'", skip("'foo\"bar\"' ", 0)); assertEquals("\"foo'bar'\"", skip("\"foo'bar'\" ", 0)); assertEquals("`foo'bar'`", skip("`foo'bar'` ", 0)); + assertEquals("'test\\\\'", skip("'test\\\\'", 0)); assertEquals("'''foo'bar'''", skip("'''foo'bar''' ", 0)); assertEquals("'''foo\\'bar'''", skip("'''foo\\'bar''' ", 0)); @@ -163,12 +219,15 @@ public void testConvertPositionalParametersToNamedParameters() { assertEquals( injector.inject( - "select 1, @p1, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=@p2 and col2='test' and col3=@p3 and col4='?' and col5=\"?\" and col6='?''?''?'", + "select 1, @p1, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=@p2 and" + + " col2='test' and col3=@p3 and col4='?' and col5=\"?\" and col6='?''?''?'", comment), parser.convertPositionalParametersToNamedParameters( '?', injector.inject( - "select 1, ?, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=? and col2='test' and col3=? and col4='?' and col5=\"?\" and col6='?''?''?'", + "select 1, ?, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=?" + + " and col2='test' and col3=? and col4='?' and col5=\"?\" and" + + " col6='?''?''?'", comment)) .sqlWithNamedParameters); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserBenchmark.java new file mode 100644 index 00000000000..e028f8027cf --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserBenchmark.java @@ -0,0 +1,81 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; +import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Warmup; + +@Fork(value = 1, warmups = 0) +@Warmup(iterations = 1, time = 5) +@Measurement(iterations = 5, time = 5) +public class StatementParserBenchmark { + private static final Dialect dialect = Dialect.POSTGRESQL; + private static final AbstractStatementParser PARSER = + AbstractStatementParser.getInstance(dialect); + + private static final String LONG_QUERY_TEXT = + generateLongStatement("SELECT * FROM foo WHERE 1", 100 * 1024); // 100kb + + private static final String LONG_DML_TEXT = + generateLongStatement("update foo set bar=1 WHERE 1", 100 * 1024); // 100kb + + /** Generates a long SQL-looking string. */ + private static String generateLongStatement(String prefix, int length) { + StringBuilder sb = new StringBuilder(length + 50); + sb.append(prefix); + while (sb.length() < length) { + sb.append(" OR abcdefghijklmnopqrstuvwxyz='abcdefghijklmnopqrstuvwxyz'"); + } + return sb.toString(); + } + + @Benchmark + public ParsedStatement isQueryTest() { + return PARSER.internalParse( + Statement.of("CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)"), + QueryOptions.getDefaultInstance()); + } + + @Benchmark + public ParsedStatement longQueryTest() { + return PARSER.internalParse(Statement.of(LONG_QUERY_TEXT), QueryOptions.getDefaultInstance()); + } + + @Benchmark + public ParsedStatement longDmlTest() { + return PARSER.internalParse(Statement.of(LONG_DML_TEXT), QueryOptions.getDefaultInstance()); + } + + public static void main(String[] args) throws Exception { + for (int i = 0; i < 100000; i++) { + if (PARSER.internalParse(Statement.of(LONG_QUERY_TEXT), QueryOptions.getDefaultInstance()) + == null) { + throw new AssertionError(); + } + if (PARSER.internalParse(Statement.of(LONG_DML_TEXT), QueryOptions.getDefaultInstance()) + == null) { + throw new AssertionError(); + } + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java index 57758886738..300517faaf0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java @@ -17,7 +17,6 @@ package com.google.cloud.spanner.connection; import static com.google.common.truth.Truth.assertThat; -import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; @@ -326,7 +325,8 @@ public void testPostgreSQLDialectSupportsEmbeddedComments() { assumeTrue(dialect == Dialect.POSTGRESQL); final String sql = - "/* This is a comment /* This is an embedded comment */ This is after the embedded comment */ SELECT 1"; + "/* This is a comment /* This is an embedded comment */ This is after the embedded comment" + + " */ SELECT 1"; assertEquals("SELECT 1", parser.removeCommentsAndTrim(sql)); } @@ -335,7 +335,8 @@ public void testGoogleStandardSQLDialectDoesNotSupportEmbeddedComments() { assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); final String sql = - "/* This is a comment /* This is an embedded comment */ This is after the embedded comment */ SELECT 1"; + "/* This is a comment /* This is an embedded comment */ This is after the embedded comment" + + " */ SELECT 1"; assertEquals( "This is after the embedded comment */ SELECT 1", parser.removeCommentsAndTrim(sql)); } @@ -460,7 +461,8 @@ public void testIsDdlStatement() { parser .parse( Statement.of( - "\t\tCREATE\n\t TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) + "\t\tCREATE\n" + + "\t TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) .isDdl()) .isTrue(); assertThat( @@ -474,42 +476,56 @@ public void testIsDdlStatement() { parser .parse( Statement.of( - "-- this is a comment\nCREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) + "-- this is a comment\n" + + "CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) .isDdl()) .isTrue(); assertThat( parser .parse( Statement.of( - "/* multi line comment\n* with more information on the next line\n*/\nCREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) + "/* multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) .isDdl()) .isTrue(); assertThat( parser .parse( Statement.of( - "/** java doc comment\n* with more information on the next line\n*/\nCREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) + "/** java doc comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) .isDdl()) .isTrue(); assertThat( parser .parse( Statement.of( - "-- SELECT in a single line comment \nCREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) + "-- SELECT in a single line comment \n" + + "CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) .isDdl()) .isTrue(); assertThat( parser .parse( Statement.of( - "/* SELECT in a multi line comment\n* with more information on the next line\n*/\nCREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) + "/* SELECT in a multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) .isDdl()) .isTrue(); assertThat( parser .parse( Statement.of( - "/** SELECT in a java doc comment\n* with more information on the next line\n*/\nCREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) + "/** SELECT in a java doc comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) .isDdl()) .isTrue(); @@ -531,25 +547,32 @@ public void testIsDdlStatement() { parser .parse( Statement.of( - "/* this is a comment */ create view SingerNames as select FullName from Singers")) + "/* this is a comment */ create view SingerNames as select FullName from" + + " Singers")) .isDdl()); assertTrue( parser .parse( Statement.of( - "create /* this is a comment */ view SingerNames as select FullName from Singers")) + "create /* this is a comment */ view SingerNames as select FullName from" + + " Singers")) .isDdl()); assertTrue( parser .parse( Statement.of( - "create \n -- This is a comment \n view SingerNames as select FullName from Singers")) + "create \n" + + " -- This is a comment \n" + + " view SingerNames as select FullName from Singers")) .isDdl()); assertTrue( parser .parse( Statement.of( - " \t \n create \n \t view \n \t SingerNames as select FullName from Singers")) + " \t \n" + + " create \n" + + " \t view \n" + + " \t SingerNames as select FullName from Singers")) .isDdl()); assertTrue(parser.parse(Statement.of("DROP VIEW SingerNames")).isDdl()); assertTrue( @@ -585,87 +608,125 @@ public void testIsDdlStatement() { @Test public void testIsQuery() { - assertThat(parser.isQuery("")).isFalse(); - assertThat(parser.isQuery("random text")).isFalse(); - assertThat(parser.isQuery("SELECT1")).isFalse(); - assertThat(parser.isQuery("SSELECT 1")).isFalse(); + assertFalse(parser.isQuery("")); + assertFalse(parser.isQuery("random text")); + assertFalse(parser.isQuery("SELECT1")); + assertFalse(parser.isQuery("SSELECT 1")); - assertThat(parser.isQuery("SELECT 1")).isTrue(); - assertThat(parser.isQuery("select 1")).isTrue(); - assertThat(parser.isQuery("SELECT foo FROM bar WHERE id=@id")).isTrue(); + assertTrue(parser.isQuery("SELECT 1")); + assertTrue(parser.isQuery("select 1")); + assertTrue(parser.isQuery("SELECT foo FROM bar WHERE id=@id")); - assertThat(parser.isQuery("INSERT INTO FOO (ID, NAME) VALUES (1, 'NAME')")).isFalse(); - assertThat(parser.isQuery("UPDATE FOO SET NAME='NAME' WHERE ID=1")).isFalse(); - assertThat(parser.isQuery("DELETE FROM FOO")).isFalse(); - assertThat(parser.isQuery("CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")) - .isFalse(); - assertThat(parser.isQuery("alter table foo add Description string(100)")).isFalse(); - assertThat(parser.isQuery("drop table foo")).isFalse(); - assertThat(parser.isQuery("Create index BAR on foo (name)")).isFalse(); + assertFalse(parser.isQuery("INSERT INTO FOO (ID, NAME) VALUES (1, 'NAME')")); + assertFalse(parser.isQuery("UPDATE FOO SET NAME='NAME' WHERE ID=1")); + assertFalse(parser.isQuery("DELETE FROM FOO")); + assertFalse(parser.isQuery("CREATE TABLE FOO (ID INT64, NAME STRING(100)) PRIMARY KEY (ID)")); + assertFalse(parser.isQuery("alter table foo add Description string(100)")); + assertFalse(parser.isQuery("drop table foo")); + assertFalse(parser.isQuery("Create index BAR on foo (name)")); - assertThat(parser.isQuery("select * from foo")).isTrue(); + assertTrue(parser.isQuery("select * from foo")); - assertThat(parser.isQuery("INSERT INTO FOO (ID, NAME) SELECT ID+1, NAME FROM FOO")).isFalse(); + assertFalse(parser.isQuery("INSERT INTO FOO (ID, NAME) SELECT ID+1, NAME FROM FOO")); - assertThat( - parser.isQuery( - "WITH subQ1 AS (SELECT SchoolID FROM Roster),\n" - + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" - + "SELECT * FROM subQ1\n" - + "UNION ALL\n" - + "SELECT * FROM subQ2")) - .isTrue(); - assertThat( - parser.isQuery( - "with subQ1 AS (SELECT SchoolID FROM Roster),\n" - + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" - + "select * FROM subQ1\n" - + "UNION ALL\n" - + "SELECT * FROM subQ2")) - .isTrue(); - assertThat( - parser - .parse( - Statement.of( - "-- this is a comment\nwith foo as (select * from bar)\nselect * from foo")) - .isQuery()) - .isTrue(); + assertTrue( + parser.isQuery( + "WITH subQ1 AS (SELECT SchoolID FROM Roster),\n" + + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" + + "SELECT * FROM subQ1\n" + + "UNION ALL\n" + + "SELECT * FROM subQ2")); + assertTrue( + parser.isQuery( + "with subQ1 AS (SELECT SchoolID FROM Roster),\n" + + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" + + "select * FROM subQ1\n" + + "UNION ALL\n" + + "SELECT * FROM subQ2")); + assertTrue( + parser + .parse( + Statement.of( + "-- this is a comment\nwith foo as (select * from bar)\nselect * from foo")) + .isQuery()); - assertThat(parser.parse(Statement.of("-- this is a comment\nselect * from foo")).isQuery()) - .isTrue(); - assertThat( - parser - .parse( - Statement.of( - "/* multi line comment\n* with more information on the next line\n*/\nSELECT ID, NAME\nFROM\tTEST\n\tWHERE ID=1")) - .isQuery()) - .isTrue(); - assertThat( - parser - .parse( - Statement.of( - "/** java doc comment\n* with more information on the next line\n*/\nselect max(id) from test")) - .isQuery()) - .isTrue(); - assertThat( - parser - .parse(Statement.of("-- INSERT in a single line comment \n select 1")) - .isQuery()) - .isTrue(); - assertThat( - parser - .parse( - Statement.of( - "/* UPDATE in a multi line comment\n* with more information on the next line\n*/\nSELECT 1")) - .isQuery()) - .isTrue(); - assertThat( - parser - .parse( - Statement.of( - "/** DELETE in a java doc comment\n* with more information on the next line\n*/\n\n\n\n -- UPDATE test\nSELECT 1")) - .isQuery()) - .isTrue(); + assertTrue(parser.parse(Statement.of("-- this is a comment\nselect * from foo")).isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "/* multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "SELECT ID, NAME\n" + + "FROM\tTEST\n" + + "\tWHERE ID=1")) + .isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "/** java doc comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "select max(id) from test")) + .isQuery()); + assertTrue( + parser.parse(Statement.of("-- INSERT in a single line comment \n select 1")).isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "/* UPDATE in a multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "SELECT 1")) + .isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "/** DELETE in a java doc comment\n" + + "* with more information on the next line\n" + + "*/\n\n\n\n" + + " -- UPDATE test\n" + + "SELECT 1")) + .isQuery()); + + assertTrue( + parser + .parse( + Statement.of( + "GRAPH FinGraph\n" + "MATCH (n)\n" + "RETURN LABELS(n) AS label, n.id")) + .isQuery()); + assertTrue( + parser.parse(Statement.of("FROM Produce\n" + "|> WHERE item != 'bananas'")).isQuery()); + + assertTrue( + parser + .parse( + Statement.of( + "(\n" + + " SELECT * FROM Foo\n" + + " EXCEPT ALL\n" + + " SELECT 1\n" + + ")\n" + + "EXCEPT ALL\n" + + "SELECT 2")) + .isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "(\n" + + " (SELECT * FROM Foo)\n" + + " EXCEPT ALL\n" + + " SELECT 1\n" + + ")\n" + + "EXCEPT ALL\n" + + "SELECT 2")) + .isQuery()); + assertFalse(parser.parse(Statement.of("(show variable autocommit;\n")).isQuery()); } @Test @@ -674,46 +735,97 @@ public void testGoogleStandardSQLDialectIsQuery_QueryHints() { // Supports query hints, PostgreSQL dialect does NOT // Valid query hints. - assertTrue(parser.isQuery("@{JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")); - assertTrue(parser.isQuery("@ {JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")); - assertTrue(parser.isQuery("@{ JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")); - assertTrue(parser.isQuery("@{JOIN_METHOD=HASH_JOIN } SELECT * FROM PersonsTable")); - assertTrue(parser.isQuery("@{JOIN_METHOD=HASH_JOIN}\nSELECT * FROM PersonsTable")); - assertTrue(parser.isQuery("@{\nJOIN_METHOD = HASH_JOIN \t}\n\t SELECT * FROM PersonsTable")); assertTrue( - parser.isQuery( - "@{JOIN_METHOD=HASH_JOIN}\n -- Single line comment\nSELECT * FROM PersonsTable")); + parser + .parse(Statement.of("@{JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")) + .isQuery()); assertTrue( - parser.isQuery( - "@{JOIN_METHOD=HASH_JOIN}\n /* Multi line comment\n with more comments\n */SELECT * FROM PersonsTable")); + parser + .parse(Statement.of("@ {JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")) + .isQuery()); assertTrue( - parser.isQuery( - "@{JOIN_METHOD=HASH_JOIN} WITH subQ1 AS (SELECT SchoolID FROM Roster),\n" - + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" - + "SELECT * FROM subQ1\n" - + "UNION ALL\n" - + "SELECT * FROM subQ2")); + parser + .parse(Statement.of("@{ JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")) + .isQuery()); + assertTrue( + parser + .parse(Statement.of("@{JOIN_METHOD=HASH_JOIN } SELECT * FROM PersonsTable")) + .isQuery()); + assertTrue( + parser + .parse(Statement.of("@{JOIN_METHOD=HASH_JOIN}\nSELECT * FROM PersonsTable")) + .isQuery()); + assertTrue( + parser + .parse( + Statement.of("@{\nJOIN_METHOD = HASH_JOIN \t}\n\t SELECT * FROM PersonsTable")) + .isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "@{JOIN_METHOD=HASH_JOIN}\n" + + " -- Single line comment\n" + + "SELECT * FROM PersonsTable")) + .isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "@{JOIN_METHOD=HASH_JOIN}\n" + + " /* Multi line comment\n" + + " with more comments\n" + + " */SELECT * FROM PersonsTable")) + .isQuery()); + assertTrue( + parser + .parse( + Statement.of( + "@{JOIN_METHOD=HASH_JOIN} WITH subQ1 AS (SELECT SchoolID FROM Roster),\n" + + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" + + "SELECT * FROM subQ1\n" + + "UNION ALL\n" + + "SELECT * FROM subQ2")) + .isQuery()); // Multiple query hints. assertTrue( - parser.isQuery("@{FORCE_INDEX=index_name} @{JOIN_METHOD=HASH_JOIN} SELECT * FROM tbl")); + parser + .parse( + Statement.of("@{FORCE_INDEX=index_name, JOIN_METHOD=HASH_JOIN} SELECT * FROM tbl")) + .isQuery()); assertTrue( - parser.isQuery("@{FORCE_INDEX=index_name} @{JOIN_METHOD=HASH_JOIN} Select * FROM tbl")); + parser + .parse( + Statement.of("@{FORCE_INDEX=index_name, JOIN_METHOD=HASH_JOIN} Select * FROM tbl")) + .isQuery()); assertTrue( - parser.isQuery( - "@{FORCE_INDEX=index_name}\n@{JOIN_METHOD=HASH_JOIN}\nWITH subQ1 AS (SELECT SchoolID FROM Roster),\n" - + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" - + "SELECT * FROM subQ1\n" - + "UNION ALL\n" - + "SELECT * FROM subQ2")); + parser + .parse( + Statement.of( + "@{FORCE_INDEX=index_name,\n" + + "JOIN_METHOD=HASH_JOIN}\n" + + "WITH subQ1 AS (SELECT SchoolID FROM Roster),\n" + + " subQ2 AS (SELECT OpponentID FROM PlayerStats)\n" + + "SELECT * FROM subQ1\n" + + "UNION ALL\n" + + "SELECT * FROM subQ2")) + .isQuery()); // Invalid query hints. - assertFalse(parser.isQuery("@{JOIN_METHOD=HASH_JOIN SELECT * FROM PersonsTable")); - assertFalse(parser.isQuery("@JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")); - assertFalse(parser.isQuery("@JOIN_METHOD=HASH_JOIN SELECT * FROM PersonsTable")); assertFalse( - parser.isQuery( - "@{FORCE_INDEX=index_name} @{JOIN_METHOD=HASH_JOIN} UPDATE tbl set FOO=1 WHERE ID=2")); + parser.parse(Statement.of("@{JOIN_METHOD=HASH_JOIN SELECT * FROM PersonsTable")).isQuery()); + assertFalse( + parser.parse(Statement.of("@JOIN_METHOD=HASH_JOIN} SELECT * FROM PersonsTable")).isQuery()); + assertFalse( + parser.parse(Statement.of("@JOIN_METHOD=HASH_JOIN SELECT * FROM PersonsTable")).isQuery()); + assertFalse( + parser + .parse( + Statement.of( + "@{FORCE_INDEX=index_name} @{JOIN_METHOD=HASH_JOIN} UPDATE tbl set FOO=1 WHERE" + + " ID=2")) + .isQuery()); } @Test @@ -742,15 +854,21 @@ public void testIsUpdate_QueryHints() { "@{\nLOCK_SCANNED_RANGES = exclusive \t}\n\t UPDATE FOO SET NAME='foo' WHERE ID=1")); assertTrue( parser.isUpdateStatement( - "@{LOCK_SCANNED_RANGES=exclusive}\n -- Single line comment\nUPDATE FOO SET NAME='foo' WHERE ID=1")); + "@{LOCK_SCANNED_RANGES=exclusive}\n" + + " -- Single line comment\n" + + "UPDATE FOO SET NAME='foo' WHERE ID=1")); assertTrue( parser.isUpdateStatement( - "@{LOCK_SCANNED_RANGES=exclusive}\n /* Multi line comment\n with more comments\n */UPDATE FOO SET NAME='foo' WHERE ID=1")); + "@{LOCK_SCANNED_RANGES=exclusive}\n" + + " /* Multi line comment\n" + + " with more comments\n" + + " */UPDATE FOO SET NAME='foo' WHERE ID=1")); // Multiple query hints. assertTrue( parser.isUpdateStatement( - "@{LOCK_SCANNED_RANGES=exclusive} @{USE_ADDITIONAL_PARALLELISM=TRUE} UPDATE FOO SET NAME='foo' WHERE ID=1")); + "@{LOCK_SCANNED_RANGES=exclusive} @{USE_ADDITIONAL_PARALLELISM=TRUE} UPDATE FOO SET" + + " NAME='foo' WHERE ID=1")); // Invalid query hints. assertFalse( @@ -790,13 +908,21 @@ public void testIsUpdate_InsertStatements() { parser .parse( Statement.of( - "/* multi line comment\n* with more information on the next line\n*/\nINSERT INTO FOO\n(ID)\tVALUES\n\t(1)")) + "/* multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "INSERT INTO FOO\n" + + "(ID)\tVALUES\n" + + "\t(1)")) .isUpdate()); assertTrue( parser .parse( Statement.of( - "/** java doc comment\n* with more information on the next line\n*/\nInsert intO foo (id) select 1")) + "/** java doc comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "Insert intO foo (id) select 1")) .isUpdate()); assertTrue( parser @@ -808,13 +934,20 @@ public void testIsUpdate_InsertStatements() { parser .parse( Statement.of( - "/* CREATE in a multi line comment\n* with more information on the next line\n*/\nINSERT INTO FOO (ID) VALUES (1)")) + "/* CREATE in a multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "INSERT INTO FOO (ID) VALUES (1)")) .isUpdate()); assertTrue( parser .parse( Statement.of( - "/** DROP in a java doc comment\n* with more information on the next line\n*/\n\n\n\n -- SELECT test\ninsert into foo (id) values (1)")) + "/** DROP in a java doc comment\n" + + "* with more information on the next line\n" + + "*/\n\n\n\n" + + " -- SELECT test\n" + + "insert into foo (id) values (1)")) .isUpdate()); } @@ -848,13 +981,21 @@ public void testIsUpdate_UpdateStatements() { parser .parse( Statement.of( - "/* multi line comment\n* with more information on the next line\n*/\nUPDATE FOO\nSET NAME=\t'foo'\n\tWHERE ID=1")) + "/* multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "UPDATE FOO\n" + + "SET NAME=\t'foo'\n" + + "\tWHERE ID=1")) .isUpdate()); assertTrue( parser .parse( Statement.of( - "/** java doc comment\n* with more information on the next line\n*/\nUPDATE FOO SET NAME=(select 'bar')")) + "/** java doc comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "UPDATE FOO SET NAME=(select 'bar')")) .isUpdate()); assertTrue( parser @@ -865,13 +1006,20 @@ public void testIsUpdate_UpdateStatements() { parser .parse( Statement.of( - "/* CREATE in a multi line comment\n* with more information on the next line\n*/\nUPDATE FOO SET NAME='BAR'")) + "/* CREATE in a multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "UPDATE FOO SET NAME='BAR'")) .isUpdate()); assertTrue( parser .parse( Statement.of( - "/** DROP in a java doc comment\n* with more information on the next line\n*/\n\n\n\n -- SELECT test\nupdate foo set bar='foo'")) + "/** DROP in a java doc comment\n" + + "* with more information on the next line\n" + + "*/\n\n\n\n" + + " -- SELECT test\n" + + "update foo set bar='foo'")) .isUpdate()); } @@ -906,13 +1054,20 @@ public void testIsUpdate_DeleteStatements() { parser .parse( Statement.of( - "/* multi line comment\n* with more information on the next line\n*/\nDELETE FROM FOO\n\n\tWHERE ID=1")) + "/* multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "DELETE FROM FOO\n\n" + + "\tWHERE ID=1")) .isUpdate()); assertTrue( parser .parse( Statement.of( - "/** java doc comment\n* with more information on the next line\n*/\nDELETE FROM FOO WHERE NAME=(select 'bar')")) + "/** java doc comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "DELETE FROM FOO WHERE NAME=(select 'bar')")) .isUpdate()); assertTrue( parser @@ -924,13 +1079,20 @@ public void testIsUpdate_DeleteStatements() { parser .parse( Statement.of( - "/* CREATE in a multi line comment\n* with more information on the next line\n*/\nDELETE FROM FOO WHERE NAME='BAR'")) + "/* CREATE in a multi line comment\n" + + "* with more information on the next line\n" + + "*/\n" + + "DELETE FROM FOO WHERE NAME='BAR'")) .isUpdate()); assertTrue( parser .parse( Statement.of( - "/** DROP in a java doc comment\n* with more information on the next line\n*/\n\n\n\n -- SELECT test\ndelete from foo where bar='foo'")) + "/** DROP in a java doc comment\n" + + "* with more information on the next line\n" + + "*/\n\n\n\n" + + " -- SELECT test\n" + + "delete from foo where bar='foo'")) .isUpdate()); } @@ -1106,16 +1268,22 @@ public void testGoogleStandardSQLDialectConvertPositionalParametersToNamedParame "@p1'''?it\\'?s \n ?it\\'?s'''@p2", parser.convertPositionalParametersToNamedParameters('?', "?'''?it\\'?s \n ?it\\'?s'''?") .sqlWithNamedParameters); + assertEquals( + "@p1'?test?\\\\'@p2", + parser.convertPositionalParametersToNamedParameters('?', "?'?test?\\\\'?") + .sqlWithNamedParameters); assertUnclosedLiteral(parser, "?'?it\\'?s \n ?it\\'?s'?"); assertUnclosedLiteral(parser, "?'?it\\'?s \n ?it\\'?s?"); assertUnclosedLiteral(parser, "?'''?it\\'?s \n ?it\\'?s'?"); assertEquals( - "select 1, @p1, 'test?test', \"test?test\", foo.* from `foo` where col1=@p2 and col2='test' and col3=@p3 and col4='?' and col5=\"?\" and col6='?''?''?'", + "select 1, @p1, 'test?test', \"test?test\", foo.* from `foo` where col1=@p2 and col2='test'" + + " and col3=@p3 and col4='?' and col5=\"?\" and col6='?''?''?'", parser.convertPositionalParametersToNamedParameters( '?', - "select 1, ?, 'test?test', \"test?test\", foo.* from `foo` where col1=? and col2='test' and col3=? and col4='?' and col5=\"?\" and col6='?''?''?'") + "select 1, ?, 'test?test', \"test?test\", foo.* from `foo` where col1=? and" + + " col2='test' and col3=? and col4='?' and col5=\"?\" and col6='?''?''?'") .sqlWithNamedParameters); assertEquals( @@ -1268,12 +1436,15 @@ public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParame assertEquals( injector.inject( - "select 1, $1, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=$2 and col2='test' and col3=$3 and col4='?' and col5=\"?\" and col6='?''?''?'", + "select 1, $1, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=$2 and" + + " col2='test' and col3=$3 and col4='?' and col5=\"?\" and col6='?''?''?'", comment), parser.convertPositionalParametersToNamedParameters( '?', injector.inject( - "select 1, ?, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=? and col2='test' and col3=? and col4='?' and col5=\"?\" and col6='?''?''?'", + "select 1, ?, 'test?test', \"test?test\", %sfoo.* from `foo` where col1=?" + + " and col2='test' and col3=? and col4='?' and col5=\"?\" and" + + " col6='?''?''?'", comment)) .sqlWithNamedParameters); @@ -1362,8 +1533,9 @@ public void testPostgreSQLGetQueryParameters() { assertEquals( ImmutableSet.of("$1"), parser.getQueryParameters( - "/* @lock_scanned_ranges = exclusive */ select -- random comment\n '$2' " - + "from foo /* comment /* with nested comment */ outside of nested comment */ where bar=$1 and baz=$foo")); + "/* @lock_scanned_ranges = exclusive */ select -- random comment\n" + + " '$2' from foo /* comment /* with nested comment */ outside of nested comment */" + + " where bar=$1 and baz=$foo")); } @Test @@ -1424,7 +1596,8 @@ public void testGoogleSQLReturningClause() { parser .parse( Statement.of( - "insert into x (a,b) values (1,2)/*comment*/then/*comment*/return/*comment*/(a)")) + "insert into x (a,b) values" + + " (1,2)/*comment*/then/*comment*/return/*comment*/(a)")) .hasReturningClause()); assertTrue( parser @@ -1691,6 +1864,16 @@ public void testStatementCache_ParameterizedStatement() { assertEquals(1, stats.hitCount()); } + @Test + public void testClientSideStatementWithComment() { + String sql = "-- Null (no timeout)\n" + "SET STATEMENT_TIMEOUT=null"; + ParsedStatement parsedStatement = parser.parse(Statement.of(sql)); + assertEquals(StatementType.CLIENT_SIDE, parsedStatement.getType()); + assertEquals( + ClientSideStatementType.SET_STATEMENT_TIMEOUT, + parsedStatement.getClientSideStatementType()); + } + static void assertUnclosedLiteral(AbstractStatementParser parser, String sql) { SpannerException exception = assertThrows( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementTimeoutTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementTimeoutTest.java index a50fb98f1e3..e854b3d9d90 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementTimeoutTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementTimeoutTest.java @@ -16,29 +16,29 @@ package com.google.cloud.spanner.connection; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeFalse; +import static org.junit.Assume.assumeTrue; import com.google.api.core.SettableApiFuture; import com.google.api.gax.longrunning.OperationTimedPollAlgorithm; import com.google.api.gax.retrying.RetrySettings; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.ForceCloseSpannerFunction; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SessionPoolOptions; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.connection.AbstractConnectionImplTest.ConnectionConsumer; import com.google.cloud.spanner.connection.ITAbstractSpannerTest.ITConnection; +import com.google.cloud.spanner.connection.SpannerPool.CheckAndCloseSpannersMode; import com.google.cloud.spanner.connection.StatementExecutor.StatementExecutorType; import com.google.common.base.Stopwatch; -import com.google.common.collect.Collections2; import com.google.longrunning.Operation; import com.google.protobuf.AbstractMessage; import com.google.protobuf.Any; @@ -49,6 +49,9 @@ import com.google.spanner.v1.ExecuteSqlRequest; import io.grpc.Status; import java.time.Duration; +import java.util.ArrayList; +import java.util.ConcurrentModificationException; +import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -58,7 +61,9 @@ import java.util.concurrent.TimeoutException; import org.junit.After; 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.junit.runners.Parameterized.Parameter; @@ -75,6 +80,7 @@ public class StatementTimeoutTest extends AbstractMockServerTest { /** Execution time for statements that have been defined as slow. */ private static final int EXECUTION_TIME_SLOW_STATEMENT = 10_000; + /** * This timeout should be high enough that it will never be exceeded, even on a slow build * environment, but still significantly lower than the expected execution time of the slow @@ -89,35 +95,52 @@ public class StatementTimeoutTest extends AbstractMockServerTest { */ private static final int TIMEOUT_FOR_SLOW_STATEMENTS = 50; + // Set a global timeout to ensure that tests that freeze the mock serer fail within a reasonable + // amount of time if they misbehave. + @Rule public Timeout globalTimeout = Timeout.seconds(10); + @Parameters(name = "statementExecutorType = {0}") public static Object[] parameters() { return StatementExecutorType.values(); } - @Parameter public StatementExecutorType statementExecutorType; + @SuppressWarnings("ClassEscapesDefinedScope") + @Parameter + public StatementExecutorType statementExecutorType; - protected ITConnection createConnection() { + protected ITConnection createConnection(String additionalUrlOptions) { + String urlSuffix = + ";trackSessionLeaks=false" + (additionalUrlOptions == null ? "" : additionalUrlOptions); ConnectionOptions options = ConnectionOptions.newBuilder() - .setUri(getBaseUrl() + ";trackSessionLeaks=false") + .setUri(getBaseUrl() + urlSuffix) .setStatementExecutorType(statementExecutorType) .setConfigurator( - optionsConfigurator -> - optionsConfigurator - .getDatabaseAdminStubSettingsBuilder() - .updateDatabaseDdlOperationSettings() - .setPollingAlgorithm( - OperationTimedPollAlgorithm.create( - RetrySettings.newBuilder() - .setInitialRetryDelayDuration(Duration.ofMillis(1L)) - .setMaxRetryDelayDuration(Duration.ofMillis(1L)) - .setRetryDelayMultiplier(1.0) - .setTotalTimeoutDuration(Duration.ofMinutes(10L)) - .build()))) + optionsConfigurator -> { + optionsConfigurator + .getDatabaseAdminStubSettingsBuilder() + .updateDatabaseDdlOperationSettings() + .setPollingAlgorithm( + OperationTimedPollAlgorithm.create( + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(1L)) + .setMaxRetryDelayDuration(Duration.ofMillis(1L)) + .setRetryDelayMultiplier(1.0) + .setTotalTimeoutDuration(Duration.ofMinutes(10L)) + .build())); + optionsConfigurator.setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setWaitForMinSessionsDuration(Duration.ofSeconds(5L)) + .build()); + }) .build(); return createITConnection(options); } + protected ITConnection createConnection() { + return createConnection(""); + } + @Before public void setup() { // Set up a connection and get the dialect to ensure that the auto-detect-dialect query has @@ -132,6 +155,8 @@ public void setup() { @After public void clearExecutionTimes() { mockSpanner.removeAllExecutionTimes(); + SpannerPool.INSTANCE.checkAndCloseSpanners( + CheckAndCloseSpannersMode.ERROR, new ForceCloseSpannerFunction(5L, TimeUnit.MILLISECONDS)); } @Test @@ -150,6 +175,22 @@ public void testTimeoutExceptionReadOnlyAutocommit() { } } + @Test + public void testUrlTimeoutExceptionReadOnlyAutocommit() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofMinimumAndRandomTime(EXECUTION_TIME_SLOW_STATEMENT, 0)); + + try (Connection connection = + createConnection(";statement_timeout='" + TIMEOUT_FOR_SLOW_STATEMENTS + "ms'")) { + connection.setAutocommit(true); + connection.setReadOnly(true); + SpannerException e = + assertThrows( + SpannerException.class, () -> connection.executeQuery(SELECT_RANDOM_STATEMENT)); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); + } + } + @Test public void testTimeoutExceptionReadOnlyAutocommitMultipleStatements() { mockSpanner.setExecuteStreamingSqlExecutionTime( @@ -258,6 +299,30 @@ public void testTimeoutExceptionReadWriteAutocommitMultipleStatements() { } } + @Test + public void testUrlStatementTimeoutOverrideToSucceed() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofMinimumAndRandomTime(EXECUTION_TIME_SLOW_STATEMENT, 0)); + + try (Connection connection = + createConnection(";statement_timeout='" + TIMEOUT_FOR_SLOW_STATEMENTS + "ms'")) { + connection.setAutocommit(true); + for (int i = 0; i < 2; i++) { + SpannerException e = + assertThrows( + SpannerException.class, () -> connection.executeQuery(SELECT_RANDOM_STATEMENT)); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); + } + + // Remove slow behavior and verify a fast query succeeds after overriding the timeout. + mockSpanner.removeAllExecutionTimes(); + connection.setStatementTimeout(TIMEOUT_FOR_FAST_STATEMENTS, TimeUnit.MILLISECONDS); + try (ResultSet rs = connection.executeQuery(SELECT_RANDOM_STATEMENT)) { + assertNotNull(rs); + } + } + } + @Test public void testTimeoutExceptionReadWriteAutocommitSlowUpdate() { mockSpanner.setExecuteSqlExecutionTime( @@ -422,7 +487,7 @@ public void testTimeoutExceptionReadWriteTransactionalSlowCommit() { } connection.setStatementTimeout(TIMEOUT_FOR_SLOW_STATEMENTS, TimeUnit.MILLISECONDS); - SpannerException e = assertThrows(SpannerException.class, () -> connection.commit()); + SpannerException e = assertThrows(SpannerException.class, connection::commit); assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); } } @@ -611,20 +676,20 @@ static void waitForRequestsToContain(Class request) { private void waitForDdlRequestOnServer() { try { Stopwatch watch = Stopwatch.createStarted(); - while (Collections2.filter( - mockDatabaseAdmin.getRequests(), - input -> input.getClass().equals(UpdateDatabaseDdlRequest.class)) - .size() - == 0) { - Thread.sleep(1L); - if (watch.elapsed(TimeUnit.MILLISECONDS) > EXECUTION_TIME_SLOW_STATEMENT) { - throw new TimeoutException("Timeout while waiting for DDL request"); + while (watch.elapsed(TimeUnit.MILLISECONDS) < EXECUTION_TIME_SLOW_STATEMENT) { + try { + List requests = new ArrayList<>(mockDatabaseAdmin.getRequests()); + if (requests.stream().anyMatch(request -> request instanceof UpdateDatabaseDdlRequest)) { + break; + } + } catch (ConcurrentModificationException ignore) { + // Just ignore and retry. } + //noinspection BusyWait + Thread.sleep(1L); } } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); - } catch (TimeoutException e) { - throw SpannerExceptionFactory.propagateTimeout(e); } } @@ -662,6 +727,8 @@ public void testCancelReadOnlyAutocommitMultipleStatements() { assumeFalse( "Direct executor does not yet support cancelling statements", statementExecutorType == StatementExecutorType.DIRECT_EXECUTOR); + // TODO: Look into this for multiplexed sessions. + assumeTrue(System.getenv("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS") == null); mockSpanner.setExecuteStreamingSqlExecutionTime( SimulatedExecutionTime.ofMinimumAndRandomTime(EXECUTION_TIME_SLOW_STATEMENT, 0)); @@ -677,10 +744,10 @@ public void testCancelReadOnlyAutocommitMultipleStatements() { connection.cancel(); }); - SpannerException e = + SpannerException exception = assertThrows( SpannerException.class, () -> connection.executeQuery(SELECT_RANDOM_STATEMENT)); - assertThat(e.getErrorCode(), is(equalTo(ErrorCode.CANCELLED))); + assertEquals(ErrorCode.CANCELLED, exception.getErrorCode()); mockSpanner.removeAllExecutionTimes(); connection.setStatementTimeout(TIMEOUT_FOR_FAST_STATEMENTS, TimeUnit.MILLISECONDS); @@ -997,11 +1064,12 @@ public void testCancelDdlBatch() { waitForDdlRequestOnServer(); connection.cancel(); }); - SpannerException e = assertThrows(SpannerException.class, () -> connection.runBatch()); + SpannerException e = assertThrows(SpannerException.class, connection::runBatch); assertEquals(ErrorCode.CANCELLED, e.getErrorCode()); } finally { executor.shutdownNow(); } + connection.closeAsync(); } } @@ -1028,6 +1096,7 @@ public void testCancelDdlAutocommit() { } finally { executor.shutdownNow(); } + connection.closeAsync(); } } @@ -1041,6 +1110,8 @@ public void testTimeoutExceptionDdlAutocommit() { SpannerException e = assertThrows(SpannerException.class, () -> connection.execute(Statement.of(SLOW_DDL))); assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); + + connection.closeAsync(); } } @@ -1075,10 +1146,10 @@ public void testTimeoutExceptionDdlBatch() { connection.startBatchDdl(); connection.setStatementTimeout(TIMEOUT_FOR_SLOW_STATEMENTS, TimeUnit.MILLISECONDS); - // the following statement will NOT timeout as the statement is only buffered locally + // the following statement will NOT time out as the statement is only buffered locally connection.execute(Statement.of(SLOW_DDL)); - // the runBatch() statement sends the statement to the server and should timeout - SpannerException e = assertThrows(SpannerException.class, () -> connection.runBatch()); + // the runBatch() statement sends the statement to the server and should time out + SpannerException e = assertThrows(SpannerException.class, connection::runBatch); assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); } } @@ -1095,7 +1166,7 @@ public void testTimeoutExceptionDdlBatchMultipleStatements() { for (int i = 0; i < 2; i++) { connection.startBatchDdl(); connection.execute(Statement.of(SLOW_DDL)); - SpannerException e = assertThrows(SpannerException.class, () -> connection.runBatch()); + SpannerException e = assertThrows(SpannerException.class, connection::runBatch); assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); } // try to do a new DDL statement that is fast. diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionMockServerTest.java new file mode 100644 index 00000000000..45f68b11a5b --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionMockServerTest.java @@ -0,0 +1,402 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.MockSpannerServiceImpl; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.connection.ITAbstractSpannerTest.ITConnection; +import com.google.cloud.spanner.connection.StatementResult.ResultType; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.ExecuteBatchDmlRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; +import io.grpc.Deadline.Ticker; +import io.grpc.Status; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class TransactionMockServerTest extends AbstractMockServerTest { + + @Parameter(0) + public IsolationLevel isolationLevel; + + @Parameter(1) + public ReadLockMode readLockMode; + + @Parameters(name = "isolationLevel = {0}, readLockMode = {1}") + public static Collection data() { + List result = new ArrayList<>(); + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + result.add(new Object[] {isolationLevel, readLockMode}); + } + } + return result; + } + + @Override + protected ITConnection createConnection() { + return createConnection( + Collections.emptyList(), + Collections.emptyList(), + String.format( + ";default_isolation_level=%s;read_lock_mode=%s", isolationLevel, readLockMode)); + } + + @Test + public void testQuery() { + try (Connection connection = createConnection()) { + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT1_STATEMENT)) {} + connection.commit(); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testDml() { + try (Connection connection = createConnection()) { + connection.executeUpdate(INSERT_STATEMENT); + connection.commit(); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testFailedFirstDml() { + Statement invalidInsert = Statement.of("insert into my_table (id, name) values (1, 'test')"); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.exception( + invalidInsert, + Status.ALREADY_EXISTS.withDescription("Row 1 already exists").asRuntimeException())); + + try (Connection connection = createConnection()) { + SpannerException exception = + assertThrows(SpannerException.class, () -> connection.executeUpdate(invalidInsert)); + assertEquals(ErrorCode.ALREADY_EXISTS, exception.getErrorCode()); + connection.commit(); + } + // The transaction should be internally retried with an explicit BeginTransaction request, as + // the first statement in the transaction failed. + assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testFailedFirstAndLastDml() { + Statement invalidInsert = + Statement.of("insert into my_table (id, name) values (1, 'test') then return id"); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.exception( + invalidInsert, + Status.ALREADY_EXISTS.withDescription("Row 1 already exists").asRuntimeException())); + + try (Connection connection = createConnection()) { + SpannerException exception = + assertThrows( + SpannerException.class, + () -> connection.executeQuery(invalidInsert, Options.lastStatement())); + assertEquals(ErrorCode.ALREADY_EXISTS, exception.getErrorCode()); + + // The same error should be repeated for the commit. + exception = assertThrows(SpannerException.class, connection::commit); + assertEquals(ErrorCode.ALREADY_EXISTS, exception.getErrorCode()); + } + // The transaction should be not be retried, as the last_statement flag was set. + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + // There is no CommitRequest, because the statement never returned a transaction ID. + assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testDmlReturning() { + try (Connection connection = createConnection()) { + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(INSERT_RETURNING_STATEMENT)) {} + connection.commit(); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testBatchDml() { + try (Connection connection = createConnection()) { + connection.startBatchDml(); + connection.executeUpdate(INSERT_STATEMENT); + connection.executeUpdate(INSERT_STATEMENT); + connection.runBatch(); + connection.commit(); + } + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); + ExecuteBatchDmlRequest request = + mockSpanner.getRequestsOfType(ExecuteBatchDmlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatements()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + } + + @Test + public void testBeginTransactionIsolationLevel() { + SpannerPool.closeSpannerPool(); + for (Dialect dialect : new Dialect[] {Dialect.POSTGRESQL, Dialect.GOOGLE_STANDARD_SQL}) { + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.detectDialectResult(dialect)); + + try (Connection connection = super.createConnection()) { + for (IsolationLevel isolationLevel : + new IsolationLevel[] {IsolationLevel.REPEATABLE_READ, IsolationLevel.SERIALIZABLE}) { + for (ReadLockMode readLockMode : + new ReadLockMode[] {ReadLockMode.PESSIMISTIC, ReadLockMode.OPTIMISTIC}) { + for (boolean useSql : new boolean[] {true, false}) { + if (useSql) { + connection.execute( + Statement.of( + "begin transaction isolation level " + + isolationLevel.name().replace("_", " "))); + } else { + connection.beginTransaction(isolationLevel); + } + if (dialect == Dialect.POSTGRESQL) { + connection.execute( + Statement.of("set spanner.read_lock_mode = '" + readLockMode.name() + "'")); + } else { + connection.execute( + Statement.of("set read_lock_mode = '" + readLockMode.name() + "'")); + } + connection.executeUpdate(INSERT_STATEMENT); + connection.commit(); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = + mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, + request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + mockSpanner.clearRequests(); + } + } + } + } + SpannerPool.closeSpannerPool(); + } + } + + @Test + public void testSetTransactionIsolationLevel() { + SpannerPool.closeSpannerPool(); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.detectDialectResult(Dialect.POSTGRESQL)); + + try (Connection connection = super.createConnection()) { + for (boolean autocommit : new boolean[] {true, false}) { + connection.setAutocommit(autocommit); + + for (IsolationLevel isolationLevel : + new IsolationLevel[] {IsolationLevel.REPEATABLE_READ, IsolationLevel.SERIALIZABLE}) { + for (ReadLockMode readLockMode : + new ReadLockMode[] {ReadLockMode.OPTIMISTIC, ReadLockMode.PESSIMISTIC}) { + // Manually start a transaction if autocommit is enabled. + if (autocommit) { + connection.execute(Statement.of("begin")); + } + connection.execute( + Statement.of( + "set transaction isolation level " + isolationLevel.name().replace("_", " "))); + connection.execute( + Statement.of("set spanner.read_lock_mode = '" + readLockMode.name() + "'")); + connection.executeUpdate(INSERT_STATEMENT); + connection.commit(); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = + mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + mockSpanner.clearRequests(); + } + } + } + } + SpannerPool.closeSpannerPool(); + } + + @Test + public void testTransactionTimeout() { + // Use a fake ticker to be able to advance the clock without having to sleep for X ms. + AtomicLong nanos = new AtomicLong(); + Ticker ticker = + new Ticker() { + @Override + public long nanoTime() { + return nanos.get(); + } + }; + ConnectionOptions options = + ConnectionOptions.newBuilder().setUri(getBaseUrl()).setTicker(ticker).build(); + + try (Connection connection = options.getConnection()) { + // Set the transaction timeout to 500 milliseconds. + connection.setTransactionTimeout(Duration.ofMillis(500)); + + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT1_STATEMENT)) {} + // Advance the time by 100ms. + nanos.addAndGet(TimeUnit.MILLISECONDS.toNanos(100)); + // Execute another statement. This should still succeed. + connection.execute(INSERT_STATEMENT); + + // Advance the time by 401ms. The deadline has now been exceeded and the commit should fail. + nanos.addAndGet(TimeUnit.MILLISECONDS.toNanos(401)); + SpannerException exception = assertThrows(SpannerException.class, connection::commit); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, exception.getErrorCode()); + } + // Verify that a transaction timeout does not apply to statements in auto-commit. + // Create a connection without a fake ticker. + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + // Set the transaction timeout so low that it will always be exceeded. + connection.setTransactionTimeout(Duration.ofNanos(1)); + + // This statement should succeed, as it does not use a transaction. + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT1_STATEMENT)) {} + + // This statement also succeeds, because it uses a read-only transaction. + connection.setAutocommit(false); + connection.setReadOnly(true); + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT1_STATEMENT)) {} + connection.commit(); + + // This statement fails, because it uses a read/write transaction. + connection.setReadOnly(false); + SpannerException exception = + assertThrows(SpannerException.class, () -> connection.executeQuery(SELECT1_STATEMENT)); + assertEquals(ErrorCode.DEADLINE_EXCEEDED, exception.getErrorCode()); + } + } + + @Test + public void testCanUseAllMethodsWithInternalRetriesDisabled() { + // Verify that all query/update methods work as expected when internal retries have been + // disabled. + try (Connection connection = createConnection()) { + connection.setAutocommit(false); + connection.setRetryAbortsInternally(false); + + try (ResultSet result = connection.executeQuery(SELECT1_STATEMENT)) { + assertTrue(result.next()); + assertEquals(1L, result.getLong(0)); + assertFalse(result.next()); + } + assertEquals(1, connection.executeUpdate(INSERT_STATEMENT)); + try (ResultSet result = connection.executeQuery(INSERT_RETURNING_STATEMENT)) { + assertTrue(result.next()); + assertEquals(1L, result.getLong(0)); + assertFalse(result.next()); + } + + StatementResult statementResult = connection.execute(SELECT1_STATEMENT); + assertEquals(ResultType.RESULT_SET, statementResult.getResultType()); + try (ResultSet result = statementResult.getResultSet()) { + assertTrue(result.next()); + assertEquals(1L, result.getLong(0)); + assertFalse(result.next()); + } + + statementResult = connection.execute(INSERT_STATEMENT); + assertEquals(ResultType.UPDATE_COUNT, statementResult.getResultType()); + assertEquals(1L, statementResult.getUpdateCount().longValue()); + + statementResult = connection.execute(INSERT_RETURNING_STATEMENT); + assertEquals(ResultType.RESULT_SET, statementResult.getResultType()); + try (ResultSet result = statementResult.getResultSet()) { + assertTrue(result.next()); + assertEquals(1L, result.getLong(0)); + assertFalse(result.next()); + } + connection.commit(); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java index 744d7042df4..e25e376ca22 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java @@ -221,6 +221,8 @@ public void testCommitAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); ApiFuture count = getTestRecordCountAsync(connection); // do an insert ApiFuture updateCount = @@ -253,6 +255,8 @@ public void testInsertAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); ApiFuture count = getTestRecordCountAsync(connection); // indicate that the next statement should abort interceptor.setProbability(1.0); @@ -276,6 +280,8 @@ public void testUpdateAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); ApiFuture count = getTestRecordCountAsync(connection); // insert a test record connection.executeUpdateAsync( @@ -309,6 +315,8 @@ public void testQueryAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert a test record connection.executeUpdateAsync( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test aborted')")); @@ -359,6 +367,8 @@ public void testNextCallAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert two test records connection.executeUpdateAsync( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test 1')")); @@ -392,6 +402,8 @@ public void testMultipleAborts() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); ApiFuture count = getTestRecordCountAsync(connection); // do three inserts which all will abort and retry interceptor.setProbability(1.0); @@ -428,6 +440,8 @@ public void testAbortAfterSelect() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); ApiFuture count = getTestRecordCountAsync(connection); // insert a test record connection.executeUpdateAsync( @@ -504,6 +518,8 @@ public void testAbortWithResultSetHalfway() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert two test records connection.executeUpdateAsync( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test 1')")); @@ -539,6 +555,8 @@ public void testAbortWithResultSetFullyConsumed() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert two test records connection.executeUpdateAsync( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test 1')")); @@ -581,6 +599,8 @@ public void testAbortWithConcurrentInsert() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert two test records connection.executeUpdateAsync( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test 1')")); @@ -632,6 +652,8 @@ public void testAbortWithConcurrentDelete() { AbortInterceptor interceptor = new AbortInterceptor(0); // first insert two test records try (ITConnection connection = createConnection()) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); connection.executeUpdateAsync( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test 1')")); connection.executeUpdateAsync( @@ -641,6 +663,8 @@ public void testAbortWithConcurrentDelete() { // open a new connection and select the two test records try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // select the test records and consume the entire result set try (AsyncResultSet rs = connection.executeQueryAsync(Statement.of("SELECT * FROM TEST ORDER BY ID"))) { @@ -694,6 +718,8 @@ public void testAbortWithConcurrentUpdate() { // open a new connection and select the two test records try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // select the test records and consume the entire result set try (AsyncResultSet rs = connection.executeQueryAsync(Statement.of("SELECT * FROM TEST ORDER BY ID"))) { @@ -744,6 +770,8 @@ public void testAbortWithUnseenConcurrentInsert() throws InterruptedException { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert three test records connection.executeUpdateAsync( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test 1')")); @@ -833,6 +861,8 @@ public void testRetryLargeResultSet() { final long UPDATED_RECORDS = 1000L; AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection()) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert test records for (int i = 0; i < NUMBER_OF_TEST_RECORDS; i++) { connection.bufferedWrite( @@ -845,6 +875,8 @@ public void testRetryLargeResultSet() { } try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // select the test records and iterate over them try (AsyncResultSet rs = connection.executeQueryAsync(Statement.of("SELECT * FROM TEST ORDER BY ID"))) { @@ -867,6 +899,8 @@ public void testRetryLargeResultSet() { // Wait until the entire result set has been consumed. get(finished); } + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // Do an update that will abort and retry. interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); @@ -898,6 +932,8 @@ public void testRetryHighAbortRate() { AbortInterceptor interceptor = new AbortInterceptor(0.25D); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert test records for (int i = 0; i < NUMBER_OF_TEST_RECORDS; i++) { connection.bufferedWrite( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITDdlTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITDdlTest.java index 7a9c5aa9262..affc7ad2a18 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITDdlTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITDdlTest.java @@ -16,16 +16,31 @@ package com.google.cloud.spanner.connection.it; +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.assertThrows; +import static org.junit.Assert.assertTrue; +import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseAdminClient; import com.google.cloud.spanner.DatabaseNotFoundException; +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.MissingDefaultSequenceKindException; import com.google.cloud.spanner.ParallelIntegrationTest; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SpannerBatchUpdateException; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.connection.Connection; +import com.google.cloud.spanner.connection.ConnectionOptions; import com.google.cloud.spanner.connection.ITAbstractSpannerTest; import com.google.cloud.spanner.connection.SqlScriptVerifier; +import com.google.cloud.spanner.testing.EmulatorSpannerHelper; +import java.util.Arrays; +import java.util.Collections; +import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; @@ -35,6 +50,16 @@ @Category(ParallelIntegrationTest.class) @RunWith(JUnit4.class) public class ITDdlTest extends ITAbstractSpannerTest { + @BeforeClass + public static void setup() { + // This overrides the default behavior that creates a single database for the test class. This + // test needs a separate database per method. + } + + @Before + public void createTestDatabase() { + database = env.getTestHelper().createTestDatabase(); + } @Test public void testSqlScript() throws Exception { @@ -57,4 +82,131 @@ public void testCreateDatabase() { client.dropDatabase(instance, name); } } + + @Test + public void testDefaultSequenceKind() { + try (Connection connection = createConnection()) { + Statement statement = + Statement.of( + "create table test (id int64 auto_increment primary key, value string(max))"); + + // Creating a table with an auto_increment column fails if no default sequence kind has been + // set. + assertNull(connection.getDefaultSequenceKind()); + assertThrows(MissingDefaultSequenceKindException.class, () -> connection.execute(statement)); + + // Setting a default sequence kind on the connection should make the statement succeed. + connection.setDefaultSequenceKind("bit_reversed_positive"); + connection.execute(statement); + + assertEquals( + 1L, connection.executeUpdate(Statement.of("insert into test (value) values ('One')"))); + try (ResultSet resultSet = connection.executeQuery(Statement.of("select * from test"))) { + assertTrue(resultSet.next()); + assertEquals("One", resultSet.getString(1)); + assertFalse(resultSet.next()); + } + } + } + + @Test + public void testDefaultSequenceKind_PostgreSQL() throws Exception { + DatabaseAdminClient client = getTestEnv().getTestHelper().getClient().getDatabaseAdminClient(); + String instance = getTestEnv().getTestHelper().getInstanceId().getInstance(); + String name = getTestEnv().getTestHelper().getUniqueDatabaseId(); + + Database database = + client + .createDatabase( + instance, + "create database \"" + name + "\"", + Dialect.POSTGRESQL, + Collections.emptyList()) + .get(); + + StringBuilder url = extractConnectionUrl(getTestEnv().getTestHelper().getOptions(), database); + ConnectionOptions.Builder builder = ConnectionOptions.newBuilder().setUri(url.toString()); + if (hasValidKeyFile()) { + builder.setCredentialsUrl(getKeyFile()); + } + ConnectionOptions options = builder.build(); + + try (Connection connection = options.getConnection()) { + Statement statement = + Statement.of("create table test (id serial primary key, value varchar)"); + + // Creating a table with an auto_increment column fails if no default sequence kind has been + // set. + assertNull(connection.getDefaultSequenceKind()); + assertThrows(MissingDefaultSequenceKindException.class, () -> connection.execute(statement)); + + // Setting a default sequence kind on the connection should make the statement succeed. + connection.setDefaultSequenceKind("bit_reversed_positive"); + connection.execute(statement); + + assertEquals( + 1L, connection.executeUpdate(Statement.of("insert into test (value) values ('One')"))); + try (ResultSet resultSet = connection.executeQuery(Statement.of("select * from test"))) { + assertTrue(resultSet.next()); + assertEquals("One", resultSet.getString(1)); + assertFalse(resultSet.next()); + } + } finally { + client.dropDatabase(instance, name); + } + } + + @Test + public void testDefaultSequenceKindInBatch() { + try (Connection connection = createConnection()) { + Statement statement1 = + Statement.of("create table testseq1 (id1 int64 primary key, value string(max))"); + Statement statement2 = + Statement.of( + "create table testseq2 (id2 int64 auto_increment primary key, value string(max))"); + + // Creating a table with an auto_increment column fails if no default sequence kind has been + // set. + assertNull(connection.getDefaultSequenceKind()); + connection.startBatchDdl(); + connection.execute(statement1); + connection.execute(statement2); + SpannerBatchUpdateException exception = + assertThrows(SpannerBatchUpdateException.class, connection::runBatch); + long updateCount = Arrays.stream(exception.getUpdateCounts()).sum(); + // The emulator refuses the entire batch. Spanner executes the first statement and fails on + // the second statement. + if (EmulatorSpannerHelper.isUsingEmulator()) { + assertEquals(0, updateCount); + } else { + assertEquals(1, updateCount); + } + + // Setting a default sequence kind on the connection should make the statement succeed. + connection.setDefaultSequenceKind("bit_reversed_positive"); + connection.startBatchDdl(); + if (updateCount == 0) { + connection.execute(statement1); + } + connection.execute(statement2); + connection.runBatch(); + } + } + + @Test + public void testDefaultSequenceKindRetriesBatchCorrectly() { + try (Connection connection = createConnection()) { + Statement statement1 = + Statement.of("create table testseq1 (id1 int64 primary key, value string(max))"); + Statement statement2 = + Statement.of( + "create table testseq2 (id2 int64 auto_increment primary key, value string(max))"); + + connection.setDefaultSequenceKind("bit_reversed_positive"); + connection.startBatchDdl(); + connection.execute(statement1); + connection.execute(statement2); + connection.runBatch(); + } + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITReadOnlySpannerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITReadOnlySpannerTest.java index 5e626d50ebf..c86b8ec34e1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITReadOnlySpannerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITReadOnlySpannerTest.java @@ -113,7 +113,8 @@ public void testStatementTimeoutTransactional() { try (ResultSet rs = connection.executeQuery( Statement.of( - "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS PRIME_NUMBER_RATIO"))) { + "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS" + + " PRIME_NUMBER_RATIO"))) { fail("Expected exception"); } // should never be reached @@ -132,7 +133,8 @@ public void testStatementTimeoutTransactionalMultipleStatements() { try (ResultSet rs = connection.executeQuery( Statement.of( - "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS PRIME_NUMBER_RATIO"))) { + "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS" + + " PRIME_NUMBER_RATIO"))) { fail("Missing expected exception"); } catch (SpannerException e) { assertThat(e.getErrorCode(), is(ErrorCode.DEADLINE_EXCEEDED)); @@ -150,7 +152,8 @@ public void testStatementTimeoutAutocommit() { try (ResultSet rs = connection.executeQuery( Statement.of( - "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS PRIME_NUMBER_RATIO"))) { + "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS" + + " PRIME_NUMBER_RATIO"))) { fail("Expected exception"); } catch (SpannerException ex) { assertEquals(ErrorCode.DEADLINE_EXCEEDED, ex.getErrorCode()); @@ -166,7 +169,8 @@ public void testAnalyzeQuery() { try (ResultSet rs = connection.analyzeQuery( Statement.of( - "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS PRIME_NUMBER_RATIO"), + "SELECT (SELECT COUNT(*) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS" + + " PRIME_NUMBER_RATIO"), mode)) { // next has not yet returned false assertThat(rs.getStats(), is(nullValue())); @@ -185,7 +189,8 @@ public void testQueryWithOptions() { try (ResultSet rs = connection.executeQuery( Statement.of( - "SELECT (SELECT CAST(COUNT(*) AS FLOAT64) FROM PRIME_NUMBERS)/(SELECT COUNT(*) FROM NUMBERS) AS PRIME_NUMBER_RATIO"), + "SELECT (SELECT CAST(COUNT(*) AS FLOAT64) FROM PRIME_NUMBERS)/(SELECT COUNT(*)" + + " FROM NUMBERS) AS PRIME_NUMBER_RATIO"), Options.prefetchChunks(100000))) { assertThat(rs.next(), is(true)); assertThat(rs.getDouble(0), is(notNullValue())); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITRetryDmlAsPartitionedDmlTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITRetryDmlAsPartitionedDmlTest.java index 4a7c2ce26c1..d09bcf9b64d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITRetryDmlAsPartitionedDmlTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITRetryDmlAsPartitionedDmlTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.connection.it; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThrows; @@ -54,6 +55,7 @@ public class ITRetryDmlAsPartitionedDmlTest extends ITAbstractSpannerTest { public static void setup() { // This shadows the setup() method in the super class and prevents it from being executed. // That allows us to have a custom setup method in this class. + assumeFalse("Skipping the test due to a known bug b/422916293", isExperimentalHost()); } @BeforeClass @@ -63,7 +65,8 @@ public static void setupTestData() { database = env.getTestHelper() .createTestDatabase( - "CREATE TABLE TEST (ID INT64 NOT NULL, NAME STRING(100) NOT NULL) PRIMARY KEY (ID)"); + "CREATE TABLE TEST (ID INT64 NOT NULL, NAME STRING(100) NOT NULL) PRIMARY KEY" + + " (ID)"); DatabaseClient client = env.getTestHelper().getClient().getDatabaseClient(database.getId()); int rowsCreated = 0; int batchSize = 5000; @@ -85,6 +88,10 @@ public static void setupTestData() { @Test public void testDmlFailsIfMutationLimitExceeded() { + // TODO(sakthivelmani) - Re-enable once b/422916293 is resolved + assumeFalse( + "Skipping the test due to a known bug b/422916293", + env.getTestHelper().getOptions().isEnableDirectAccess()); try (Connection connection = createConnection()) { connection.setAutocommit(true); assertThrows( @@ -97,6 +104,10 @@ public void testDmlFailsIfMutationLimitExceeded() { @Test public void testRetryDmlAsPartitionedDml() throws Exception { + // TODO(sakthivelmani) - Re-enable once b/422916293 is resolved + assumeFalse( + "Skipping the test due to a known bug b/422916293", + env.getTestHelper().getOptions().isEnableDirectAccess()); try (Connection connection = createConnection()) { connection.setAutocommit(true); connection.setAutocommitDmlMode( @@ -137,6 +148,10 @@ public void retryDmlAsPartitionedDmlFinished( @Test public void testRetryDmlAsPartitionedDml_failsForLargeInserts() throws Exception { + // TODO(sakthivelmani) - Re-enable once b/422916293 is resolved + assumeFalse( + "Skipping the test due to a known bug b/422916293", + env.getTestHelper().getOptions().isEnableDirectAccess()); try (Connection connection = createConnection()) { connection.setAutocommit(true); connection.setAutocommitDmlMode( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITSqlMusicScriptTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITSqlMusicScriptTest.java index e7afe957705..9d9a9d9310a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITSqlMusicScriptTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITSqlMusicScriptTest.java @@ -71,6 +71,8 @@ public void test02_RunAbortedTest() { long numberOfSongs = 0L; AbortInterceptor interceptor = new AbortInterceptor(0.0D); try (ITConnection connection = createConnection(interceptor)) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); connection.setAutocommit(false); connection.setRetryAbortsInternally(true); // Read all data from the different music tables in the transaction @@ -134,7 +136,8 @@ public void test02_RunAbortedTest() { try (ResultSet rs = connection2.executeQuery( Statement.newBuilder( - "SELECT TicketPrices FROM Concerts WHERE SingerId=@singer AND VenueId=@venue") + "SELECT TicketPrices FROM Concerts WHERE SingerId=@singer AND" + + " VenueId=@venue") .bind("singer") .to(SINGER_ID) .bind("venue") @@ -147,7 +150,8 @@ public void test02_RunAbortedTest() { newPrices.set(1, originalPrices.get(1) + 1); connection2.executeUpdate( Statement.newBuilder( - "UPDATE Concerts SET TicketPrices=@prices WHERE SingerId=@singer AND VenueId=@venue") + "UPDATE Concerts SET TicketPrices=@prices WHERE SingerId=@singer AND" + + " VenueId=@venue") .bind("prices") .toInt64Array(newPrices) .bind("singer") diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITTransactionRetryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITTransactionRetryTest.java index 0cf3abda6bf..54f714a13aa 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITTransactionRetryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITTransactionRetryTest.java @@ -172,6 +172,8 @@ public void testCommitAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // verify that the there is no test record try (ResultSet rs = connection.executeQuery(Statement.of("SELECT COUNT(*) AS C FROM TEST WHERE ID=1"))) { @@ -216,6 +218,8 @@ public void testInsertAborted() { assertThat(rs.getLong("C"), is(equalTo(0L))); assertThat(rs.next(), is(false)); } + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // indicate that the next statement should abort interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); @@ -241,6 +245,8 @@ public void testUpdateAborted() { AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // verify that the there is no test record try (ResultSet rs = connection.executeQuery(Statement.of("SELECT COUNT(*) AS C FROM TEST WHERE ID=1"))) { @@ -284,6 +290,8 @@ public void testQueryAborted() { assertThat(rs.getLong("C"), is(equalTo(0L))); assertThat(rs.next(), is(false)); } + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert a test record connection.executeUpdate( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test aborted')")); @@ -321,6 +329,8 @@ public void testNextCallAborted() { connection.executeUpdate(Statement.of("INSERT INTO TEST (ID, NAME) VALUES (2, 'test 2')")); // do a query try (ResultSet rs = connection.executeQuery(Statement.of("SELECT * FROM TEST ORDER BY ID"))) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // the first record should be accessible without any problems assertThat(rs.next(), is(true)); assertThat(rs.getLong("ID"), is(equalTo(1L))); @@ -358,6 +368,8 @@ public void testMultipleAborts() { assertThat(rs.getLong("C"), is(equalTo(0L))); assertThat(rs.next(), is(false)); } + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // do three inserts which all will abort and retry interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); @@ -405,6 +417,8 @@ public void testAbortAfterSelect() { assertThat(rs.getString("NAME"), is(equalTo("test 1"))); assertThat(rs.next(), is(false)); } + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // do another insert that will abort and retry interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); @@ -439,6 +453,8 @@ public void testAbortWithResultSetHalfway() { // iterate one step assertThat(rs.next(), is(true)); assertThat(rs.getLong("ID"), is(equalTo(1L))); + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // do another insert that will abort and retry interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); @@ -475,6 +491,8 @@ public void testAbortWithResultSetFullyConsumed() { // do nothing, just consume the result set } } + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // do another insert that will abort and retry interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); @@ -512,6 +530,8 @@ public void testAbortWithConcurrentInsert() { } // now try to do an insert that will abort. The retry should now fail as there has been a // concurrent modification + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); boolean expectedException = false; @@ -551,6 +571,8 @@ public void testAbortWithConcurrentDelete() { } // now try to do an insert that will abort. The retry should now fail as there has been a // concurrent modification + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); boolean expectedException = false; @@ -590,6 +612,8 @@ public void testAbortWithConcurrentUpdate() { } // now try to do an insert that will abort. The retry should now fail as there has been a // concurrent modification + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); boolean expectedException = false; @@ -629,6 +653,8 @@ public void testAbortWithUnseenConcurrentInsert() { connection2.commit(); } // now try to do an insert that will abort. The retry should still succeed. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); int currentRetryCount = RETRY_STATISTICS.totalRetryAttemptsStarted; @@ -714,6 +740,8 @@ private int testAbortWithUnseenConcurrentInsertAbortOnNext(int callsToNext) // First verify that the transaction has not yet retried. int currentRetryCount = RETRY_STATISTICS.totalRetryAttemptsStarted; + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); @@ -760,6 +788,8 @@ public void testAbortWithConcurrentInsertAndContinue() { } // Now try to do an insert that will abort. The retry should now fail as there has been a // concurrent modification. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); boolean expectedException = false; @@ -807,6 +837,8 @@ protected boolean shouldAbort(String statement, ExecutionStep step) { }; try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); connection.executeUpdate( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test aborted')")); connection.commit(); @@ -852,6 +884,8 @@ protected boolean shouldAbort(String statement, ExecutionStep step) { }; try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); connection.executeUpdate( Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test aborted')")); connection.commit(); @@ -906,6 +940,8 @@ protected boolean shouldAbort(String statement, ExecutionStep step) { }; try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // Insert two test records. connection.executeUpdate(Statement.of("INSERT INTO TEST (ID, NAME) VALUES (1, 'test 1')")); connection.executeUpdate(Statement.of("INSERT INTO TEST (ID, NAME) VALUES (2, 'test 2')")); @@ -986,6 +1022,8 @@ protected boolean shouldAbort(String statement, ExecutionStep step) { } // Now try to do an insert that will abort. The retry should now fail as there has been a // concurrent modification. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); boolean expectedException = false; @@ -1034,6 +1072,8 @@ public void testAbortWithDifferentUpdateCount() { } // Now try to do an insert that will abort. The retry should now fail as there has been a // concurrent modification. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); boolean expectedException = false; @@ -1089,6 +1129,8 @@ public void testAbortWithExceptionOnSelect() { } } // now try to do an insert that will abort. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); connection.executeUpdate(Statement.of("INSERT INTO TEST (ID, NAME) VALUES (3, 'test 3')")); @@ -1147,6 +1189,8 @@ public void testAbortWithExceptionOnSelectAndConcurrentModification() { } // Now try to do an insert that will abort. The subsequent retry will fail as the SELECT * // FROM FOO now returns a result. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); try { @@ -1213,6 +1257,8 @@ public void testAbortWithExceptionOnInsertAndConcurrentModification() { } // Now try to do an insert that will abort. The subsequent retry will fail as the INSERT INTO // FOO now succeeds. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); try { @@ -1281,6 +1327,8 @@ public void testAbortWithDroppedTableConcurrentModification() { } // Now try to do an insert that will abort. The subsequent retry will fail as the SELECT * // FROM FOO now fails. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); try { @@ -1341,6 +1389,8 @@ public void testAbortWithInsertOnDroppedTableConcurrentModification() { } // Now try to do an insert that will abort. The subsequent retry will fail as the INSERT INTO // FOO now fails. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); try { @@ -1402,6 +1452,8 @@ public void testAbortWithCursorHalfwayDroppedTableConcurrentModification() { connection2.execute(Statement.of("DROP TABLE FOO")); } // try to continue to consume the result set, but this will now abort. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); try { @@ -1443,6 +1495,8 @@ public void testRetryLargeResultSet() { } } // Do an update that will abort and retry. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); connection.executeUpdate( @@ -1467,12 +1521,18 @@ public void testRetryLargeResultSet() { /** Test the successful retry of a transaction with a high chance of multiple aborts */ @Test public void testRetryHighAbortRate() { + // TODO(sriharshach): Remove this skip once backend support empty transactions to commit. + assumeFalse( + "Skipping for multiplexed sessions since it does not allow empty transactions to commit", + env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW()); final int NUMBER_OF_TEST_RECORDS = 10000; final long UPDATED_RECORDS = 1000L; // abort on 25% of all statements AbortInterceptor interceptor = new AbortInterceptor(0.25D); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); // insert test records for (int i = 0; i < NUMBER_OF_TEST_RECORDS; i++) { connection.bufferedWrite( @@ -1539,6 +1599,8 @@ public void testAbortWithConcurrentInsertOnEmptyTable() { } // Now try to consume the result set, but the call to next() will throw an AbortedException. // The retry should still succeed. + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); int currentSuccessfulRetryCount = RETRY_STATISTICS.totalSuccessfulRetries; @@ -1563,6 +1625,8 @@ public void testAbortWithConcurrentInsertOnEmptyTable() { connection2.commit(); } // this time the abort will occur on the call to commit() + interceptor.setUsingMultiplexedSession( + isMultiplexedSessionsEnabledForRW(connection.getSpanner())); interceptor.setProbability(1.0); interceptor.setOnlyInjectOnce(true); boolean expectedException = false; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAsyncExamplesTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAsyncExamplesTest.java index dc5abd77afd..82493bfdbe2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAsyncExamplesTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAsyncExamplesTest.java @@ -253,6 +253,12 @@ public void runAsync() throws Exception { }, executor); assertThat(insertCount.get()).isEqualTo(1L); + if (env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW()) { + // The runAsync() method should only be called once on the runner. + // However, due to a bug in regular sessions, it can be executed multiple times on the same + // runner. + runner = client.runAsync(); + } ApiFuture deleteCount = runner.runAsync( txn -> @@ -299,6 +305,12 @@ public void runAsyncBatchUpdate() throws Exception { }, executor); assertThat(insertCount.get()).asList().containsExactly(1L, 1L, 1L); + if (env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW()) { + // The runAsync() method should only be called once on the runner. + // However, due to a bug in regular sessions, it can be executed multiple times on the same + // runner. + runner = client.runAsync(); + } ApiFuture deleteCount = runner.runAsync( txn -> @@ -361,10 +373,12 @@ public void readOnlyTransaction() throws Exception { public void pauseResume() throws Exception { Statement unevenStatement = Statement.of( - "SELECT * FROM TestTable WHERE MOD(CAST(SUBSTR(Key, 2) AS INT64), 2) = 1 ORDER BY CAST(SUBSTR(Key, 2) AS INT64)"); + "SELECT * FROM TestTable WHERE MOD(CAST(SUBSTR(Key, 2) AS INT64), 2) = 1 ORDER BY" + + " CAST(SUBSTR(Key, 2) AS INT64)"); Statement evenStatement = Statement.of( - "SELECT * FROM TestTable WHERE MOD(CAST(SUBSTR(Key, 2) AS INT64), 2) = 0 ORDER BY CAST(SUBSTR(Key, 2) AS INT64)"); + "SELECT * FROM TestTable WHERE MOD(CAST(SUBSTR(Key, 2) AS INT64), 2) = 0 ORDER BY" + + " CAST(SUBSTR(Key, 2) AS INT64)"); final Object lock = new Object(); final SettableApiFuture evenFinished = SettableApiFuture.create(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAutogeneratedAdminClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAutogeneratedAdminClientTest.java index de5597da4f9..7489f3f9a47 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAutogeneratedAdminClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAutogeneratedAdminClientTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.it; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.*; import static org.junit.Assume.assumeFalse; @@ -84,6 +85,7 @@ public static List data() { @BeforeClass public static void setUp() { + assumeFalse("Experimental Host does not support database roles", isExperimentalHost()); assumeFalse("Emulator does not support database roles", isUsingEmulator()); testHelper = env.getTestHelper(); dbAdminClient = testHelper.getClient().createDatabaseAdminClient(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchDmlTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchDmlTest.java index b11e4f613ce..2decef6158e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchDmlTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchDmlTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.it; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assume.assumeFalse; import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.Database; @@ -84,6 +85,10 @@ public void dropTable() throws Exception { @Test public void noStatementsInRequest() { + // TODO(sriharshach): Remove this skip once backend support empty transactions to commit. + assumeFalse( + "Skipping for multiplexed sessions since it does not allow empty transactions to commit", + isUsingMultiplexedSessionsForRW()); final TransactionCallable callable = transaction -> { List stmts = new ArrayList<>(); @@ -252,4 +257,8 @@ public void largeBatchDml_withNonParameterisedStatements() { assertThat(actualRowCounts.length).isEqualTo(80); assertThat(expectedRowCounts).isEqualTo(actualRowCounts); } + + boolean isUsingMultiplexedSessionsForRW() { + return env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java index f028fbc2b15..d18239cf283 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java @@ -19,9 +19,11 @@ import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.extractConnectionUrl; import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.getKeyFile; import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.hasValidKeyFile; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; import com.google.cloud.ByteArray; import com.google.cloud.Timestamp; @@ -181,7 +183,9 @@ public static void setUpDatabase() throws Exception { totalSize = 0; } } - dbClient.write(mutations); + if (!mutations.isEmpty()) { + dbClient.write(mutations); + } } // Our read/queries are executed with some staleness. Thread.sleep(2 * STALENESS_MILLISEC); @@ -245,6 +249,7 @@ public void readUsingIndex() { @Test public void dataBoostRead() { + assumeFalse("data boost is not supported on experimental host yet", isExperimentalHost()); BitSet seenRows = new BitSet(numRows); TimestampBound bound = getRandomBound(); PartitionOptions partitionParams = getRandomPartitionOptions(); @@ -297,6 +302,7 @@ private PartitionOptions getRandomPartitionOptions() { @Test public void dataBoostQuery() { + assumeFalse("data boost is not supported on experimental host yet", isExperimentalHost()); BitSet seenRows = new BitSet(numRows); TimestampBound bound = getRandomBound(); PartitionOptions partitionParams = getRandomPartitionOptions(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBuiltInMetricsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBuiltInMetricsTest.java index 258c1230709..f0e1cf20861 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBuiltInMetricsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBuiltInMetricsTest.java @@ -16,14 +16,13 @@ package com.google.cloud.spanner.it; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertWithMessage; +import static org.junit.Assume.assumeFalse; import com.google.cloud.monitoring.v3.MetricServiceClient; -import com.google.cloud.spanner.Database; -import com.google.cloud.spanner.DatabaseClient; -import com.google.cloud.spanner.IntegrationTestEnv; -import com.google.cloud.spanner.ParallelIntegrationTest; -import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.*; +import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.common.base.Stopwatch; import com.google.monitoring.v3.ListTimeSeriesRequest; import com.google.monitoring.v3.ListTimeSeriesResponse; @@ -34,9 +33,9 @@ import java.time.Duration; import java.time.Instant; import java.util.concurrent.TimeUnit; +import org.junit.After; import org.junit.BeforeClass; import org.junit.ClassRule; -import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; @@ -44,7 +43,6 @@ @Category(ParallelIntegrationTest.class) @RunWith(JUnit4.class) -@Ignore("Built-in Metrics are not GA'ed yet. Enable this test once the metrics are released") public class ITBuiltInMetricsTest { private static Database db; @@ -54,12 +52,35 @@ public class ITBuiltInMetricsTest { private static MetricServiceClient metricClient; + private static java.util.List METRICS = + new java.util.ArrayList() { + { + add("operation_latencies"); + add("attempt_latencies"); + add("operation_count"); + add("attempt_count"); + add("afe_latencies"); + } + }; + @BeforeClass public static void setUp() throws IOException { + assumeFalse("not applicable for experimental host", isExperimentalHost()); + assumeFalse("This test requires credentials", EmulatorSpannerHelper.isUsingEmulator()); metricClient = MetricServiceClient.create(); // Enable BuiltinMetrics when the metrics are GA'ed db = env.getTestHelper().createTestDatabase(); client = env.getTestHelper().getDatabaseClient(db); + if (!env.getTestHelper().getOptions().isEnableDirectAccess()) { + METRICS.add("gfe_latencies"); + } + } + + @After + public void tearDown() { + if (metricClient != null) { + metricClient.close(); + } } @Test @@ -80,32 +101,36 @@ public void testBuiltinMetricsWithDefaultOTEL() throws Exception { .readWriteTransaction() .run(transaction -> transaction.executeQuery(Statement.of("Select 1"))); - String metricFilter = - String.format( - "metric.type=\"spanner.googleapis.com/client/%s\" " - + "AND resource.labels.instance=\"%s\" AND metric.labels.method=\"Spanner.ExecuteStreamingSql\"" - + " AND metric.labels.database=\"%s\"", - "operation_latencies", env.getTestHelper().getInstanceId(), db.getId()); - - ListTimeSeriesRequest.Builder requestBuilder = - ListTimeSeriesRequest.newBuilder() - .setName(name.toString()) - .setFilter(metricFilter) - .setInterval(interval) - .setView(ListTimeSeriesRequest.TimeSeriesView.FULL); - - ListTimeSeriesRequest request = requestBuilder.build(); - - ListTimeSeriesResponse response = metricClient.listTimeSeriesCallable().call(request); - while (response.getTimeSeriesCount() == 0 - && metricsPollingStopwatch.elapsed(TimeUnit.MINUTES) < 3) { - // Call listTimeSeries every minute - Thread.sleep(Duration.ofMinutes(1).toMillis()); - response = metricClient.listTimeSeriesCallable().call(request); + for (String metric : METRICS) { + String metricFilter = + String.format( + "metric.type=\"spanner.googleapis.com/client/%s\"" + + " AND resource.type=\"spanner_instance\"" + + " AND metric.labels.method=\"Spanner.Commit\"" + + " AND resource.labels.instance_id=\"%s\"" + + " AND metric.labels.database=\"%s\"", + metric, db.getId().getInstanceId().getInstance(), db.getId().getDatabase()); + + ListTimeSeriesRequest.Builder requestBuilder = + ListTimeSeriesRequest.newBuilder() + .setName(name.toString()) + .setFilter(metricFilter) + .setInterval(interval) + .setView(ListTimeSeriesRequest.TimeSeriesView.FULL); + + ListTimeSeriesRequest request = requestBuilder.build(); + + ListTimeSeriesResponse response = metricClient.listTimeSeriesCallable().call(request); + while (response.getTimeSeriesCount() == 0 + && metricsPollingStopwatch.elapsed(TimeUnit.MINUTES) < 3) { + // Call listTimeSeries every minute + Thread.sleep(Duration.ofMinutes(1).toMillis()); + response = metricClient.listTimeSeriesCallable().call(request); + } + + assertWithMessage("Metric " + metric + " didn't return any data.") + .that(response.getTimeSeriesCount()) + .isGreaterThan(0); } - - assertWithMessage("View operation_latencies didn't return any data.") - .that(response.getTimeSeriesCount()) - .isGreaterThan(0); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java deleted file mode 100644 index 6ffb0e1ca68..00000000000 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.spanner.it; - -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; -import static org.junit.Assume.assumeFalse; - -import com.google.cloud.spanner.AbortedException; -import com.google.cloud.spanner.Database; -import com.google.cloud.spanner.IntegrationTestWithClosedSessionsEnv; -import com.google.cloud.spanner.IntegrationTestWithClosedSessionsEnv.DatabaseClientWithClosedSessionImpl; -import com.google.cloud.spanner.ParallelIntegrationTest; -import com.google.cloud.spanner.ReadOnlyTransaction; -import com.google.cloud.spanner.ResultSet; -import com.google.cloud.spanner.SessionNotFoundException; -import com.google.cloud.spanner.Statement; -import com.google.cloud.spanner.TimestampBound; -import com.google.cloud.spanner.TransactionContext; -import com.google.cloud.spanner.TransactionManager; -import com.google.cloud.spanner.TransactionRunner; -import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** Test the automatic re-creation of sessions that have been invalidated by the server. */ -@Category(ParallelIntegrationTest.class) -@RunWith(JUnit4.class) -public class ITClosedSessionTest { - // Run each test case twice to ensure that a retried session does not affect subsequent - // transactions. - private static final int RUNS_PER_TEST_CASE = 2; - - @ClassRule - public static IntegrationTestWithClosedSessionsEnv env = - new IntegrationTestWithClosedSessionsEnv(); - - private static Database db; - private static DatabaseClientWithClosedSessionImpl client; - - @BeforeClass - public static void setUpDatabase() { - // For multiplexed sessions, it will never be invalidated by the server and hence the client - // will never receive an exception with code NOT_FOUND and the text 'Session not found'. - assumeFalse( - env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSession()); - - // Empty database. - db = env.getTestHelper().createTestDatabase(); - client = (DatabaseClientWithClosedSessionImpl) env.getTestHelper().getDatabaseClient(db); - } - - @Before - public void setup() { - client.setAllowSessionReplacing(true); - } - - @Test - public void testSingleUse() { - // This should trigger an exception with code NOT_FOUND and the text 'Session not found'. - client.invalidateNextSession(); - for (int run = 0; run < RUNS_PER_TEST_CASE; run++) { - try (ResultSet rs = Statement.of("SELECT 1").executeQuery(client.singleUse())) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - } - } - - @Test - public void testSingleUseNoRecreation() { - // This should trigger an exception with code NOT_FOUND and the text 'Session not found'. - client.setAllowSessionReplacing(false); - client.invalidateNextSession(); - try (ResultSet rs = Statement.of("SELECT 1").executeQuery(client.singleUse())) { - rs.next(); - fail("Expected exception"); - } catch (SessionNotFoundException ex) { - assertNotNull(ex.getMessage()); - } - } - - @Test - public void testSingleUseBound() { - // This should trigger an exception with code NOT_FOUND and the text 'Session not found'. - client.invalidateNextSession(); - for (int run = 0; run < RUNS_PER_TEST_CASE; run++) { - try (ResultSet rs = - Statement.of("SELECT 1") - .executeQuery( - client.singleUse(TimestampBound.ofExactStaleness(10L, TimeUnit.SECONDS)))) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - } - } - - @Test - public void testSingleUseReadOnlyTransaction() { - client.invalidateNextSession(); - for (int run = 0; run < RUNS_PER_TEST_CASE; run++) { - try (ReadOnlyTransaction txn = client.singleUseReadOnlyTransaction()) { - try (ResultSet rs = txn.executeQuery(Statement.of("SELECT 1"))) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - assertThat(txn.getReadTimestamp()).isNotNull(); - } - } - } - - @Test - public void testSingleUseReadOnlyTransactionBound() { - client.invalidateNextSession(); - for (int run = 0; run < RUNS_PER_TEST_CASE; run++) { - try (ReadOnlyTransaction txn = - client.singleUseReadOnlyTransaction( - TimestampBound.ofMaxStaleness(10L, TimeUnit.SECONDS))) { - try (ResultSet rs = txn.executeQuery(Statement.of("SELECT 1"))) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - assertThat(txn.getReadTimestamp()).isNotNull(); - } - } - } - - @Test - public void testReadOnlyTransaction() { - client.invalidateNextSession(); - for (int run = 0; run < RUNS_PER_TEST_CASE; run++) { - try (ReadOnlyTransaction txn = client.readOnlyTransaction()) { - for (int i = 0; i < 2; i++) { - try (ResultSet rs = txn.executeQuery(Statement.of("SELECT 1"))) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - } - assertThat(txn.getReadTimestamp()).isNotNull(); - } - } - } - - @Test - public void testReadOnlyTransactionNoRecreation() { - client.setAllowSessionReplacing(false); - client.invalidateNextSession(); - try (ReadOnlyTransaction txn = client.readOnlyTransaction()) { - try (ResultSet rs = txn.executeQuery(Statement.of("SELECT 1"))) { - rs.next(); - fail("Expected exception"); - } - fail("Expected exception"); - } catch (SessionNotFoundException ex) { - assertNotNull(ex.getMessage()); - } - } - - @Test - public void testReadOnlyTransactionBound() { - client.invalidateNextSession(); - for (int run = 0; run < RUNS_PER_TEST_CASE; run++) { - try (ReadOnlyTransaction txn = - client.readOnlyTransaction(TimestampBound.ofExactStaleness(10L, TimeUnit.SECONDS))) { - for (int i = 0; i < 2; i++) { - try (ResultSet rs = txn.executeQuery(Statement.of("SELECT 1"))) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - } - assertThat(txn.getReadTimestamp()).isNotNull(); - } - } - } - - @Test - public void testReadWriteTransaction() { - client.invalidateNextSession(); - for (int run = 0; run < RUNS_PER_TEST_CASE; run++) { - TransactionRunner txn = client.readWriteTransaction(); - txn.run( - transaction -> { - for (int i = 0; i < 2; i++) { - try (ResultSet rs = transaction.executeQuery(Statement.of("SELECT 1"))) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - } - return null; - }); - } - } - - @Test - public void testReadWriteTransactionNoRecreation() { - client.setAllowSessionReplacing(false); - client.invalidateNextSession(); - try { - TransactionRunner txn = client.readWriteTransaction(); - txn.run( - transaction -> { - try (ResultSet rs = transaction.executeQuery(Statement.of("SELECT 1"))) { - rs.next(); - fail("Expected exception"); - } - return null; - }); - fail("Expected exception"); - } catch (SessionNotFoundException ex) { - assertNotNull(ex.getMessage()); - } - } - - @Test - public void testTransactionManager() throws InterruptedException { - client.invalidateNextSession(); - for (int run = 0; run < 2; run++) { - try (TransactionManager manager = client.transactionManager()) { - TransactionContext txn = manager.begin(); - try { - while (true) { - for (int i = 0; i < 2; i++) { - try (ResultSet rs = txn.executeQuery(Statement.of("SELECT 1"))) { - assertThat(rs.next()).isTrue(); - assertThat(rs.getLong(0)).isEqualTo(1L); - assertThat(rs.next()).isFalse(); - } - } - manager.commit(); - break; - } - } catch (AbortedException e) { - long retryDelayInMillis = e.getRetryDelayInMillis(); - if (retryDelayInMillis > 0) { - Thread.sleep(retryDelayInMillis); - } - txn = manager.resetForRetry(); - } - } - } - } - - @Test - public void testTransactionManagerNoRecreation() { - client.setAllowSessionReplacing(false); - client.invalidateNextSession(); - try (TransactionManager manager = client.transactionManager()) { - TransactionContext txn = manager.begin(); - while (true) { - try (ResultSet rs = txn.executeQuery(Statement.of("SELECT 1"))) { - rs.next(); - fail("Expected exception"); - } - } - } catch (SessionNotFoundException ex) { - assertNotNull(ex.getMessage()); - } - } -} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITCommitTimestampTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITCommitTimestampTest.java index 70c9cb3757a..d10375c4fc2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITCommitTimestampTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITCommitTimestampTest.java @@ -16,8 +16,10 @@ package com.google.cloud.spanner.it; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeFalse; import com.google.cloud.Timestamp; import com.google.cloud.spanner.Database; @@ -227,6 +229,9 @@ public void invalidColumnOptionValue() throws Exception { @Test public void invalidColumnType() throws Exception { + assumeFalse( + "Validation currently not available in experimental host mode - tracked via b/442339325", + isExperimentalHost()); // error_catalog error OptionErrorList String statement = "ALTER TABLE T ADD COLUMN T4 INT64 OPTIONS (allow_commit_timestamp=true)"; try { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java index ab3c8e24a8c..3bc87577e8a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java @@ -63,6 +63,7 @@ public final class ITDMLTest { @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); private static DatabaseClient googleStandardSQLClient; private static DatabaseClient postgreSQLClient; + /** Sequence for assigning unique keys to test cases. */ private static int seq; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java index 4d3ed820c18..c986e7b8df1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.it; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -194,6 +195,7 @@ public void listPagination() { @Test public void createAndListDatabaseRoles() throws Exception { + assumeFalse("Experimental Host does not support database roles", isExperimentalHost()); assumeFalse("Emulator does not support create & list database roles", isUsingEmulator()); List dbRoles = ImmutableList.of( @@ -274,6 +276,7 @@ public void updateDatabaseInvalidFieldsToUpdate() { @Test public void dropDatabaseWithProtectionEnabled() throws Exception { + assumeFalse("Tracking the failure via b/441255724", isExperimentalHost()); assumeFalse("Emulator does not drop database protection", isUsingEmulator()); String instanceId = testHelper.getInstanceId().getInstance(); Database database = testHelper.createTestDatabase(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java index 4a4a7cefd70..4947401992b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.it; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.*; import static org.junit.Assume.assumeFalse; @@ -73,6 +74,7 @@ public static List data() { @BeforeClass public static void setUp() { + assumeFalse("Experimental Host does not support database roles", isExperimentalHost()); assumeFalse("Emulator does not support database roles", isUsingEmulator()); testHelper = env.getTestHelper(); dbAdminClient = testHelper.getClient().getDatabaseAdminClient(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java index b9813d512fd..ed8f67379e4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java @@ -17,9 +17,11 @@ package com.google.cloud.spanner.it; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeFalse; import com.google.api.client.util.ExponentialBackOff; import com.google.api.gax.longrunning.OperationFuture; @@ -150,7 +152,9 @@ public void databaseDeletedTest() throws Exception { } } } - assertThat(notFoundException).isNotNull(); + if (!isUsingEmulator()) { + assertThat(notFoundException).isNotNull(); + } // Now get a new DatabaseClient for the database. This should now result in a valid // DatabaseClient. @@ -164,6 +168,8 @@ public void databaseDeletedTest() throws Exception { @Test public void instanceNotFound() { + assumeFalse( + "experimental hosts only support pre-created default instance", isExperimentalHost()); InstanceId testId = env.getTestHelper().getInstanceId(); InstanceId nonExistingInstanceId = InstanceId.of(testId.getProject(), testId.getInstance() + "-na"); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDirectPathFallback.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDirectPathFallback.java index ae2c99b3e1a..bf6c1450973 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDirectPathFallback.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDirectPathFallback.java @@ -100,7 +100,7 @@ public class ITDirectPathFallback { // TODO(mohanli): Remove this temporary endpoint once DirectPath goes to public beta. private static final String DIRECT_PATH_ENDPOINT = "aa423245250f2bbf.sandbox.googleapis.com:443"; - private static final String ATTEMPT_DIRECT_PATH = "spanner.attempt_directpath"; + private static final String ENABLE_DIRECT_ACCESS = "spanner.enable_direct_access"; public ITDirectPathFallback() { // Create a transport channel provider that can intercept ipv6 packets. @@ -112,7 +112,7 @@ public ITDirectPathFallback() { public void setup() { assume() .withMessage("DirectPath integration tests can only run against DirectPathEnv") - .that(Boolean.getBoolean(ATTEMPT_DIRECT_PATH)) + .that(Boolean.getBoolean(ENABLE_DIRECT_ACCESS)) .isTrue(); // Get default spanner options for Ingetration test SpannerOptions.Builder builder = env.getTestHelper().getOptions().toBuilder(); @@ -233,7 +233,9 @@ private void injectNettyChannelHandler(ManagedChannelBuilder channelBuilder) } } - /** @see com.google.cloud.bigtable.data.v2.it.DirectPathFallbackIT.MyChannelHandler */ + /** + * @see com.google.cloud.bigtable.data.v2.it.DirectPathFallbackIT.MyChannelHandler + */ private class MyChannelFactory implements ChannelFactory { @Override public NioSocketChannel newChannel() { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java index f54365ba84d..d96e148432f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java @@ -124,9 +124,11 @@ public static List data() { private String getInsertDmlReturningTemplate() { if (dialect.dialect == Dialect.POSTGRESQL) { - return "INSERT INTO T (\"K\", \"V\") VALUES ('%d-boo1', 1), ('%d-boo2', 2), ('%d-boo3', 3), ('%d-boo4', 4) RETURNING *"; + return "INSERT INTO T (\"K\", \"V\") VALUES ('%d-boo1', 1), ('%d-boo2', 2), ('%d-boo3', 3)," + + " ('%d-boo4', 4) RETURNING *"; } - return "INSERT INTO T (K, V) VALUES ('%d-boo1', 1), ('%d-boo2', 2), ('%d-boo3', 3), ('%d-boo4', 4) THEN RETURN *"; + return "INSERT INTO T (K, V) VALUES ('%d-boo1', 1), ('%d-boo2', 2), ('%d-boo3', 3), ('%d-boo4'," + + " 4) THEN RETURN *"; } private String getUpdateDmlReturningTemplate() { @@ -272,6 +274,8 @@ private List executeQuery(long expectedCount, String stmt) { List rows = new ArrayList<>(); final TransactionCallable callable = transaction -> { + // Make sure we start with an empty list if the transaction is aborted and retried. + rows.clear(); ResultSet resultSet = transaction.executeQuery(Statement.of(stmt)); // resultSet.next() returns false, when no more row exists. // So, number of times resultSet.next() returns true, is the number of rows @@ -335,6 +339,7 @@ private List executeQueryAsync(long expectedCount, String stmt) { List rows = new ArrayList<>(); final TransactionCallable callable = transaction -> { + rows.clear(); AsyncResultSet rs = transaction.executeQueryAsync(Statement.of(stmt)); rs.setCallback( Executors.newSingleThreadExecutor(), diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITEndToEndTracingTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITEndToEndTracingTest.java new file mode 100644 index 00000000000..52d1bc94629 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITEndToEndTracingTest.java @@ -0,0 +1,161 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.it; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ResourceExhaustedException; +import com.google.api.gax.rpc.StatusCode; +import com.google.cloud.spanner.Database; +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.IntegrationTestEnv; +import com.google.cloud.spanner.IntegrationTestEnv.TestEnvOptions; +import com.google.cloud.spanner.ParallelIntegrationTest; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.SpannerOptionsHelper; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.Struct; +import com.google.cloud.spanner.Type; +import com.google.cloud.spanner.Type.StructField; +import com.google.cloud.spanner.connection.ConnectionOptions; +import com.google.cloud.trace.v1.TraceServiceClient; +import com.google.cloud.trace.v1.TraceServiceSettings; +import com.google.common.base.Stopwatch; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Scope; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.concurrent.TimeUnit; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Integration tests for End to End Tracing. */ +@Category(ParallelIntegrationTest.class) +@RunWith(JUnit4.class) +public class ITEndToEndTracingTest { + public static Collection testEnvOptions = + Arrays.asList(TestEnvOptions.USE_END_TO_END_TRACING); + @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(testEnvOptions); + private static DatabaseClient googleStandardSQLClient; + + static { + SpannerOptionsHelper.resetActiveTracingFramework(); + SpannerOptions.enableOpenTelemetryTraces(); + } + + private static String selectValueQuery = "SELECT @p1 + @p1"; + + @BeforeClass + public static void setUp() { + setUpDatabase(); + } + + public static void setUpDatabase() { + // Empty database. + Database googleStandardSQLDatabase = env.getTestHelper().createTestDatabase(); + googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); + } + + @AfterClass + public static void teardown() { + ConnectionOptions.closeSpanner(); + } + + private void assertTrace(String traceId) throws IOException, InterruptedException { + TraceServiceSettings settings = + env.getTestHelper().getOptions().getCredentials() == null + ? TraceServiceSettings.newBuilder().build() + : TraceServiceSettings.newBuilder() + .setCredentialsProvider( + FixedCredentialsProvider.create( + env.getTestHelper().getOptions().getCredentials())) + .build(); + try (TraceServiceClient client = TraceServiceClient.create(settings)) { + boolean foundTrace = false; + Stopwatch metricsPollingStopwatch = Stopwatch.createStarted(); + while (!foundTrace && metricsPollingStopwatch.elapsed(TimeUnit.SECONDS) < 30) { + // Try every 5 seconds + Thread.sleep(5000); + try { + foundTrace = + client + .getTrace(env.getTestHelper().getInstanceId().getProject(), traceId) + .getSpansList() + .stream() + .anyMatch(span -> "Spanner.ExecuteStreamingSql".equals(span.getName())); + } catch (ApiException apiException) { + assumeTrue( + apiException.getStatusCode() != null + && StatusCode.Code.NOT_FOUND.equals(apiException.getStatusCode().getCode())); + System.out.println("Trace NOT_FOUND error ignored"); + } + } + assertTrue(foundTrace); + } catch (ResourceExhaustedException resourceExhaustedException) { + if (resourceExhaustedException + .getMessage() + .contains("Quota exceeded for quota metric 'Read requests (free)'")) { + // Ignore and allow the test to succeed. + System.out.println("RESOURCE_EXHAUSTED error ignored"); + } else { + throw resourceExhaustedException; + } + } + } + + private Struct executeWithRowResultType(Statement statement, Type expectedRowType) { + ResultSet resultSet = statement.executeQuery(googleStandardSQLClient.singleUse()); + assertThat(resultSet.next()).isTrue(); + assertThat(resultSet.getType()).isEqualTo(expectedRowType); + Struct row = resultSet.getCurrentRowAsStruct(); + assertThat(resultSet.next()).isFalse(); + return row; + } + + @Test + public void simpleSelect() throws IOException, InterruptedException { + assumeTrue("Temporarily disabling test because it is failing", false); + Tracer tracer = + env.getTestHelper() + .getOptions() + .getOpenTelemetry() + .getTracer(ITEndToEndTracingTest.class.getName()); + Span span = tracer.spanBuilder("simpleSelect").startSpan(); + Scope scope = span.makeCurrent(); + Type rowType = Type.struct(StructField.of("", Type.int64())); + Struct row = + executeWithRowResultType( + Statement.newBuilder(selectValueQuery).bind("p1").to(1234).build(), rowType); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getLong(0)).isEqualTo(2468); + scope.close(); + span.end(); + assertTrace(span.getSpanContext().getTraceId()); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java index 1536912f686..6a973f1c4ae 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java @@ -217,18 +217,18 @@ private String getInsertStatementWithLiterals() { if (dialect.dialect == Dialect.POSTGRESQL) { statement += - "('dml1', 3.14::float8, array[1.1]::float4[]), " - + "('dml2', '3.14'::float4, array[3.14::float4, 3.14::float8]::float4[]), " - + "('dml3', 'nan'::real, array['inf'::real, (3.14::float8)::float4, 1.2, '-inf']::float4[]), " - + "('dml4', 1.175494e-38::real, array[1.175494e-38, 3.4028234e38, -3.4028234e38]::real[]), " - + "('dml5', null, null)"; + "('dml1', 3.14::float8, array[1.1]::float4[]), ('dml2', '3.14'::float4," + + " array[3.14::float4, 3.14::float8]::float4[]), ('dml3', 'nan'::real," + + " array['inf'::real, (3.14::float8)::float4, 1.2, '-inf']::float4[]), ('dml4'," + + " 1.175494e-38::real, array[1.175494e-38, 3.4028234e38, -3.4028234e38]::real[])," + + " ('dml5', null, null)"; } else { statement += - "('dml1', 3.14, [CAST(1.1 AS FLOAT32)]), " - + "('dml2', CAST('3.14' AS FLOAT32), array[CAST(3.14 AS FLOAT32), 3.14]), " - + "('dml3', CAST('nan' AS FLOAT32), array[CAST('inf' AS FLOAT32), CAST(CAST(3.14 AS FLOAT64) AS FLOAT32), 1.2, CAST('-inf' AS FLOAT32)]), " - + "('dml4', 1.175494e-38, [CAST(1.175494e-38 AS FLOAT32), 3.4028234e38, -3.4028234e38]), " - + "('dml5', null, null)"; + "('dml1', 3.14, [CAST(1.1 AS FLOAT32)]), ('dml2', CAST('3.14' AS FLOAT32)," + + " array[CAST(3.14 AS FLOAT32), 3.14]), ('dml3', CAST('nan' AS FLOAT32)," + + " array[CAST('inf' AS FLOAT32), CAST(CAST(3.14 AS FLOAT64) AS FLOAT32), 1.2," + + " CAST('-inf' AS FLOAT32)]), ('dml4', 1.175494e-38, [CAST(1.175494e-38 AS FLOAT32)," + + " 3.4028234e38, -3.4028234e38]), ('dml5', null, null)"; } return statement; } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java index 448aab85114..3600422669c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java @@ -85,7 +85,8 @@ public static void setUpDatabase() { "CREATE TABLE Concert (\n" + " venue_id INT64 NOT NULL,\n" + " singer_id INT64 NOT NULL,\n" - + " CONSTRAINT Fk_Concert_Singer FOREIGN KEY (singer_id) REFERENCES Singer (singer_id) ON DELETE CASCADE\n" + + " CONSTRAINT Fk_Concert_Singer FOREIGN KEY (singer_id) REFERENCES Singer" + + " (singer_id) ON DELETE CASCADE\n" + ") PRIMARY KEY(venue_id, singer_id)")); POSTGRESQL_DATABASE = env.getTestHelper() @@ -100,7 +101,8 @@ public static void setUpDatabase() { + " venue_id BIGINT NOT NULL,\n" + " singer_id BIGINT NOT NULL,\n" + " PRIMARY KEY (venue_id, singer_id),\n" - + " CONSTRAINT \"Fk_Concert_Singer\" FOREIGN KEY (singer_id) REFERENCES Singer (singer_id) ON DELETE CASCADE\n" + + " CONSTRAINT \"Fk_Concert_Singer\" FOREIGN KEY (singer_id)" + + " REFERENCES Singer (singer_id) ON DELETE CASCADE\n" + " )")); dbs.add(GOOGLE_STANDARD_SQL_DATABASE); @@ -152,9 +154,8 @@ public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() thro + " singer_id BIGINT NOT NULL,\n" + " PRIMARY KEY (venue_id, singer_id)\n" + " )", - "ALTER TABLE ConcertV2 " - + "ADD CONSTRAINT \"Fk_Concert_Singer_V2\" FOREIGN KEY(singer_id) REFERENCES Singer(singer_id) " - + "ON DELETE CASCADE"); + "ALTER TABLE ConcertV2 ADD CONSTRAINT \"Fk_Concert_Singer_V2\" FOREIGN KEY(singer_id)" + + " REFERENCES Singer(singer_id) ON DELETE CASCADE"); } else { createStatements = ImmutableList.of( @@ -166,9 +167,8 @@ public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() thro + " venue_id INT64 NOT NULL,\n" + " singer_id INT64 NOT NULL,\n" + ") PRIMARY KEY(venue_id, singer_id)", - "ALTER TABLE ConcertV2 " - + "ADD CONSTRAINT Fk_Concert_Singer_V2 FOREIGN KEY(singer_id) REFERENCES Singer(singer_id) " - + "ON DELETE CASCADE"); + "ALTER TABLE ConcertV2 ADD CONSTRAINT Fk_Concert_Singer_V2 FOREIGN KEY(singer_id)" + + " REFERENCES Singer(singer_id) ON DELETE CASCADE"); } final Database createdDatabase = env.getTestHelper().createTestDatabase(dialect.dialect, createStatements); @@ -199,8 +199,8 @@ public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() thro createdDatabase.getId().getDatabase(), ImmutableList.of( "ALTER TABLE ConcertV2\n" + "DROP CONSTRAINT Fk_Concert_Singer_V2", - "ALTER TABLE ConcertV2 " - + "ADD CONSTRAINT Fk_Concert_Singer_V2 FOREIGN KEY(singer_id) REFERENCES Singer(singer_id) "), + "ALTER TABLE ConcertV2 ADD CONSTRAINT Fk_Concert_Singer_V2 FOREIGN KEY(singer_id)" + + " REFERENCES Singer(singer_id) "), null) .get(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITInstanceAdminTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITInstanceAdminTest.java index f21441f30a8..4e6a87bebf9 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITInstanceAdminTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITInstanceAdminTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.it; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assume.assumeFalse; @@ -52,6 +53,9 @@ public class ITInstanceAdminTest { @BeforeClass public static void setUp() { + assumeFalse( + "instance / instanceConfig operations are not supported on experimental host", + isExperimentalHost()); instanceClient = env.getTestHelper().getClient().getInstanceAdminClient(); } @@ -177,8 +181,7 @@ public void updateInstanceViaEntity() throws Exception { String rand = new Random().nextInt() + ""; String newDisplayName = "instance test" + rand; Instance toUpdate = - instance - .toBuilder() + instance.toBuilder() .setDisplayName(newDisplayName) .setNodeCount(instance.getNodeCount() + 1) .build(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITIntervalTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITIntervalTest.java new file mode 100644 index 00000000000..3af1464612e --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITIntervalTest.java @@ -0,0 +1,265 @@ +/* + * 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.spanner.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.Timestamp; +import com.google.cloud.spanner.*; +import com.google.cloud.spanner.connection.ConnectionOptions; +import java.math.BigInteger; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@Category(ParallelIntegrationTest.class) +@RunWith(Parameterized.class) +public class ITIntervalTest { + + @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); + + @Parameterized.Parameters(name = "Dialect = {0}") + public static List data() { + return Arrays.asList( + new DialectTestParameter(Dialect.GOOGLE_STANDARD_SQL), + new DialectTestParameter(Dialect.POSTGRESQL)); + } + + @Parameterized.Parameter() public DialectTestParameter dialect; + + private static DatabaseClient googleStandardSQLClient; + private static DatabaseClient postgreSQLClient; + + private static final String[] GOOGLE_STANDARD_SQL_SCHEMA = + new String[] { + "CREATE TABLE IntervalTable (\n" + + " key STRING(MAX),\n" + + " create_time TIMESTAMP,\n" + + " expiry_time TIMESTAMP,\n" + + " expiry_within_month bool AS (expiry_time - create_time < INTERVAL 30 DAY),\n" + + " interval_array_len INT64 AS (ARRAY_LENGTH(ARRAY[INTERVAL '1-2 3 4:5:6'" + + " YEAR TO SECOND]))\n" + + ") PRIMARY KEY (key)" + }; + + private static final String[] POSTGRESQL_SCHEMA = + new String[] { + "CREATE TABLE IntervalTable (\n" + + " key text primary key,\n" + + " create_time timestamptz,\n" + + " expiry_time timestamptz,\n" + + " expiry_within_month bool GENERATED ALWAYS AS (expiry_time - create_time < INTERVAL" + + " '30' DAY) STORED,\n" + + " interval_array_len bigint GENERATED ALWAYS AS (ARRAY_LENGTH(ARRAY[INTERVAL '1-2 3" + + " 4:5:6'], 1)) STORED\n" + + ")" + }; + + private static DatabaseClient client; + + @BeforeClass + public static void setUpDatabase() + throws ExecutionException, InterruptedException, TimeoutException { + Database googleStandardSQLDatabase = + env.getTestHelper().createTestDatabase(GOOGLE_STANDARD_SQL_SCHEMA); + googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); + Database postgreSQLDatabase = + env.getTestHelper() + .createTestDatabase(Dialect.POSTGRESQL, Arrays.asList(POSTGRESQL_SCHEMA)); + postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); + } + + @Before + public void before() { + client = + dialect.dialect == Dialect.GOOGLE_STANDARD_SQL ? googleStandardSQLClient : postgreSQLClient; + } + + @AfterClass + public static void tearDown() throws Exception { + ConnectionOptions.closeSpanner(); + } + + /** Sequence used to generate unique keys. */ + private static int seq; + + private static String uniqueString() { + return String.format("k%04d", seq++); + } + + private String lastKey; + + private Timestamp write(Mutation m) { + return client.write(Collections.singletonList(m)); + } + + private Mutation.WriteBuilder baseInsert() { + return Mutation.newInsertOrUpdateBuilder("IntervalTable") + .set("Key") + .to(lastKey = uniqueString()); + } + + @Test + public void writeToTableWithIntervalExpressions() { + write( + baseInsert() + .set("create_time") + .to(Timestamp.parseTimestamp("2004-11-30T04:53:54Z")) + .set("expiry_time") + .to(Timestamp.parseTimestamp("2004-12-15T04:53:54Z")) + .build()); + try (ResultSet resultSet = + client + .singleUse() + .executeQuery( + Statement.of( + "SELECT expiry_within_month, interval_array_len FROM IntervalTable WHERE key='" + + lastKey + + "'"))) { + assertTrue(resultSet.next()); + assertTrue(resultSet.getBoolean(0)); + assertEquals(1, resultSet.getLong(1)); + } + } + + @Test + public void queryInterval() { + try (ResultSet resultSet = + client + .singleUse() + .executeQuery(Statement.of("SELECT INTERVAL '1' DAY + INTERVAL '1' MONTH AS Col1"))) { + assertTrue(resultSet.next()); + assertEquals(resultSet.getInterval(0), Interval.fromMonthsDaysNanos(1, 1, BigInteger.ZERO)); + } + } + + @Test + public void queryWithIntervalParam() { + write( + baseInsert() + .set("create_time") + .to(Timestamp.parseTimestamp("2004-08-30T04:53:54Z")) + .set("expiry_time") + .to(Timestamp.parseTimestamp("2004-12-15T04:53:54Z")) + .build()); + + String query; + if (dialect.dialect == Dialect.POSTGRESQL) { + query = + "SELECT COUNT(*) FROM IntervalTable WHERE create_time < TIMESTAMPTZ" + + " '2004-11-30T10:23:54+0530' - $1"; + } else { + query = + "SELECT COUNT(*) FROM IntervalTable WHERE create_time <" + + " TIMESTAMP('2004-11-30T10:23:54+0530') - @p1"; + } + + try (ResultSet resultSet = + client + .singleUse() + .executeQuery( + Statement.newBuilder(query) + .bind("p1") + .to(Value.interval(Interval.ofDays(30))) + .build())) { + assertTrue(resultSet.next()); + assertEquals(resultSet.getLong(0), 1L); + } + } + + @Test + public void queryWithIntervalArrayParam() { + String query; + if (dialect.dialect == Dialect.POSTGRESQL) { + query = "SELECT $1"; + } else { + query = "SELECT @p1"; + } + + List intervalList = + Arrays.asList( + Interval.parseFromString("P1Y2M3DT4H5M6.789123S"), + null, + Interval.parseFromString("P-1Y-2M-3DT-4H-5M-6.789123S"), + null); + + try (ResultSet resultSet = + client + .singleUse() + .executeQuery( + Statement.newBuilder(query) + .bind("p1") + .to(Value.intervalArray(intervalList)) + .build())) { + assertTrue(resultSet.next()); + assertEquals(resultSet.getIntervalList(0), intervalList); + } + } + + @Test + public void queryWithUntypedIntervalParam() { + String query; + if (dialect.dialect == Dialect.POSTGRESQL) { + query = "SELECT (INTERVAL '1' DAY > $1) AS Col1"; + } else { + query = "SELECT (INTERVAL '1' DAY > @p1) AS Col1"; + } + + try (ResultSet resultSet = + client + .singleUse() + .executeQuery( + Statement.newBuilder(query) + .bind("p1") + .to( + Value.untyped( + com.google.protobuf.Value.newBuilder() + .setStringValue("PT1.5S") + .build())) + .build())) { + assertTrue(resultSet.next()); + assertTrue(resultSet.getBoolean(0)); + } + } + + @Test + public void queryIntervalArray() { + String query = + "SELECT ARRAY[CAST('P1Y2M3DT4H5M6.789123S' AS INTERVAL), null," + + " CAST('P-1Y-2M-3DT-4H-5M-6.789123S' AS INTERVAL)] AS Col1"; + try (ResultSet resultSet = client.singleUse().executeQuery(Statement.of(query))) { + assertTrue(resultSet.next()); + assertEquals( + Arrays.asList( + Interval.parseFromString("P1Y2M3DT4H5M6.789123S"), + null, + Interval.parseFromString("P-1Y-2M-3DT-4H-5M-6.789123S")), + resultSet.getIntervalList(0)); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java index e355eaa07a3..abaf4f07d27 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java @@ -16,8 +16,10 @@ package com.google.cloud.spanner.it; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; +import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseClient; @@ -110,6 +112,7 @@ public void testWriteValidJsonValues() throws IOException { @Test public void testWriteAndReadInvalidJsonValues() throws IOException { + assumeFalse("Tracking the failure via b/441255097 for experimental host", isExperimentalHost()); List resources = getJsonFilePaths(RESOURCES_DIR + File.separator + INVALID_JSON_DIR); AtomicLong id = new AtomicLong(100); @@ -132,7 +135,14 @@ public void testWriteAndReadInvalidJsonValues() throws IOException { .to(Value.json(jsonStr)) .build()))); - assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); + if (env.getTestHelper() + .getOptions() + .getSessionPoolOptions() + .getUseMultiplexedSessionForRW()) { + assertEquals(ErrorCode.INVALID_ARGUMENT, exception.getErrorCode()); + } else { + assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); + } } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITMutableCredentialsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITMutableCredentialsTest.java new file mode 100644 index 00000000000..c136305bcdd --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITMutableCredentialsTest.java @@ -0,0 +1,106 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.it; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; + +import com.google.auth.oauth2.GoogleCredentials; +import com.google.auth.oauth2.ServiceAccountCredentials; +import com.google.cloud.spanner.IntegrationTestEnv; +import com.google.cloud.spanner.MutableCredentials; +import com.google.cloud.spanner.SerialIntegrationTest; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import com.google.spanner.admin.instance.v1.ProjectName; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@Category(SerialIntegrationTest.class) +@RunWith(JUnit4.class) +public class ITMutableCredentialsTest { + + private static final String INVALID_CERT_PATH = + "/com/google/cloud/spanner/connection/test-key.json"; + + @ClassRule public static final IntegrationTestEnv env = new IntegrationTestEnv(); + + @Test + public void testMutableCredentialsUpdateAuthorizationForRunningClient() throws IOException { + GoogleCredentials validCredentials = null; + + // accept cert path overridden by environment variable for local testing + if (System.getenv("GOOGLE_ACCOUNT_CREDENTIALS") != null) { + try (InputStream stream = + Files.newInputStream(Paths.get(System.getenv("GOOGLE_ACCOUNT_CREDENTIALS")))) { + validCredentials = GoogleCredentials.fromStream(stream); + } + } else { + try { + validCredentials = GoogleCredentials.getApplicationDefault(); + } catch (IOException e) { + } + } + + // credentials must be ServiceAccountCredentials + assumeTrue(validCredentials instanceof ServiceAccountCredentials); + + ServiceAccountCredentials invalidCredentials; + try (InputStream stream = + ITMutableCredentialsTest.class.getResourceAsStream(INVALID_CERT_PATH)) { + invalidCredentials = ServiceAccountCredentials.fromStream(stream); + } + + // create MutableCredentials first with valid credentials + MutableCredentials mutableCredentials = + new MutableCredentials((ServiceAccountCredentials) validCredentials); + + SpannerOptions options = + env.getTestHelper().getOptions().toBuilder() + // this setting is required in the scenario SPANNER_EMULATOR_HOST is set otherwise + // SpannerOptions overrides credentials to NoCredentials + .setEmulatorHost(null) + .setCredentials(mutableCredentials) + .build(); + + ProjectName projectName = ProjectName.of(options.getProjectId()); + try (Spanner spanner = options.getService(); + InstanceAdminClient instanceAdminClient = spanner.createInstanceAdminClient()) { + instanceAdminClient.listInstances(projectName); + + // update mutableCredentials now to use an invalid credentials + mutableCredentials.updateCredentials(invalidCredentials); + + try { + // this call should now fail with new invalid credentials + instanceAdminClient.listInstances(projectName); + fail("Expected UNAUTHENTICATED after switching to invalid credentials"); + } catch (Exception e) { + assertTrue(e.getMessage().contains("UNAUTHENTICATED")); + } + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITProtoColumnTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITProtoColumnTest.java index 7e525ebaa15..a2693f6a6d5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITProtoColumnTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITProtoColumnTest.java @@ -115,8 +115,8 @@ public static void createDatabase() throws Exception { + " ProtoMessageArray ARRAY," + " ProtoEnumArray ARRAY," + " ) PRIMARY KEY (RowID)", - "CREATE INDEX SingerByNationalityAndGenre ON Singers(SingerNationality, SingerGenre)" - + " STORING (SingerId, FirstName, LastName)")) + "CREATE INDEX SingerByNationalityAndGenre ON Singers(SingerNationality," + + " SingerGenre) STORING (SingerId, FirstName, LastName)")) .get(5, TimeUnit.MINUTES); assertEquals(databaseID.getDatabase(), createdDatabase.getId().getDatabase()); @@ -283,7 +283,9 @@ public void testProtoColumnsDMLParameterizedQueriesPKAndIndexes() { transaction -> { Statement statement1 = Statement.newBuilder( - "INSERT INTO Singers (SingerId, FirstName, LastName, SingerInfo, SingerGenre) VALUES (1, \"FirstName1\", \"LastName1\", @singerInfo, @singerGenre)") + "INSERT INTO Singers (SingerId, FirstName, LastName, SingerInfo," + + " SingerGenre) VALUES (1, \"FirstName1\", \"LastName1\"," + + " @singerInfo, @singerGenre)") .bind("singerInfo") .to(singerInfo1) .bind("singerGenre") @@ -292,7 +294,9 @@ public void testProtoColumnsDMLParameterizedQueriesPKAndIndexes() { Statement statement2 = Statement.newBuilder( - "INSERT INTO Singers (SingerId, FirstName, LastName, SingerInfo, SingerGenre) VALUES (2, \"FirstName2\", \"LastName2\", @singerInfo, @singerGenre)") + "INSERT INTO Singers (SingerId, FirstName, LastName, SingerInfo," + + " SingerGenre) VALUES (2, \"FirstName2\", \"LastName2\"," + + " @singerInfo, @singerGenre)") .bind("singerInfo") .to(singerInfo2) .bind("singerGenre") @@ -353,8 +357,8 @@ public void testProtoColumnsDMLParameterizedQueriesPKAndIndexes() { .singleUse() .executeQuery( Statement.newBuilder( - "SELECT SingerId, SingerInfo, SingerGenre FROM " - + "Singers WHERE SingerInfo.Nationality=@country AND SingerGenre=@genre") + "SELECT SingerId, SingerInfo, SingerGenre FROM Singers WHERE" + + " SingerInfo.Nationality=@country AND SingerGenre=@genre") .bind("country") .to("Country2") .bind("genre") diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryOptionsTest.java index 57aa77e6a7c..baa8235cd56 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryOptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryOptionsTest.java @@ -185,9 +185,7 @@ public void spannerOptions() { // Version '1' should work. // Statistics package 'custom-package' should work. try (Spanner spanner = - env.getTestHelper() - .getOptions() - .toBuilder() + env.getTestHelper().getOptions().toBuilder() .setDefaultQueryOptions( db.getId(), QueryOptions.newBuilder() @@ -205,9 +203,7 @@ public void spannerOptions() { } // Version 'latest' should also work. try (Spanner spanner = - env.getTestHelper() - .getOptions() - .toBuilder() + env.getTestHelper().getOptions().toBuilder() .setDefaultQueryOptions( db.getId(), QueryOptions.newBuilder().setOptimizerVersion("latest").build()) .build() @@ -221,9 +217,7 @@ public void spannerOptions() { } // Version '100000' should not work. try (Spanner spanner = - env.getTestHelper() - .getOptions() - .toBuilder() + env.getTestHelper().getOptions().toBuilder() .setDefaultQueryOptions( db.getId(), QueryOptions.newBuilder().setOptimizerVersion("100000").build()) .build() diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryTest.java index 18044c452b5..eb3f1b00edd 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueryTest.java @@ -17,11 +17,13 @@ package com.google.cloud.spanner.it; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.truth.Truth.assertThat; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeFalse; @@ -35,6 +37,7 @@ import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.IntegrationTestEnv; +import com.google.cloud.spanner.Interval; import com.google.cloud.spanner.Mutation; import com.google.cloud.spanner.ParallelIntegrationTest; import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; @@ -56,6 +59,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.UUID; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -129,16 +133,24 @@ public void simple() { @Test public void badQuery() { - try { - execute(Statement.of("SELECT Apples AND Oranges"), Type.int64()); - fail("Expected exception"); - } catch (SpannerException ex) { - assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.INVALID_ARGUMENT); - if (dialect.dialect == Dialect.POSTGRESQL) { - assertThat(ex.getMessage()).contains("column \"apples\" does not exist"); - } else { - assertThat(ex.getMessage()).contains("Unrecognized name: Apples"); - } + SpannerException exception = + assertThrows( + SpannerException.class, + () -> execute(Statement.of("SELECT Apples AND Oranges"), Type.int64())); + assertEquals(ErrorCode.INVALID_ARGUMENT, exception.getErrorCode()); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertTrue( + exception.getMessage(), + exception.getMessage().contains("column \"apples\" does not exist")); + // See https://www.postgresql.org/docs/current/errcodes-appendix.html + // '42703' == undefined_column + assumeFalse( + "Skipping PGErrorCode check on experimental host due to b/473270453", + isExperimentalHost()); + assertEquals("42703", exception.getPostgreSQLErrorCode()); + } else { + assertTrue( + exception.getMessage(), exception.getMessage().contains("Unrecognized name: Apples")); } } @@ -266,9 +278,6 @@ private static boolean isUsingCloudDevel() { @Test public void bindFloat32() { - assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator()); - assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel()); - Struct row = execute(Statement.newBuilder(selectValueQuery).bind("p1").to(2.0f), Type.float32()); assertThat(row.isNull(0)).isFalse(); @@ -277,9 +286,6 @@ public void bindFloat32() { @Test public void bindFloat32Null() { - assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator()); - assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel()); - Struct row = execute(Statement.newBuilder(selectValueQuery).bind("p1").to((Float) null), Type.float32()); assertThat(row.isNull(0)).isTrue(); @@ -341,7 +347,6 @@ public void bindStringNull() { @Test public void bindJson() { assumeFalse("JSON are not supported on POSTGRESQL", dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery) @@ -355,7 +360,6 @@ public void bindJson() { @Test public void bindJsonEmpty() { assumeFalse("JSON are not supported on POSTGRESQL", dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery).bind("p1").to(Value.json("{}")), Type.json()); @@ -366,7 +370,6 @@ public void bindJsonEmpty() { @Test public void bindJsonNull() { assumeFalse("JSON is not supported on POSTGRESQL", dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery).bind("p1").to(Value.json(null)), Type.json()); @@ -423,9 +426,39 @@ public void bindDateNull() { assertThat(row.isNull(0)).isTrue(); } + @Test + public void bindUuid() { + UUID uuid = UUID.randomUUID(); + Struct row = execute(Statement.newBuilder(selectValueQuery).bind("p1").to(uuid), Type.uuid()); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getUuid(0)).isEqualTo(uuid); + } + + @Test + public void bindUuidNull() { + Struct row = + execute(Statement.newBuilder(selectValueQuery).bind("p1").to((UUID) null), Type.uuid()); + assertThat(row.isNull(0)).isTrue(); + } + + @Test + public void bindInterval() { + Interval d = Interval.parseFromString("P1Y2M3DT4H5M6.789123S"); + Struct row = execute(Statement.newBuilder(selectValueQuery).bind("p1").to(d), Type.interval()); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getInterval(0)).isEqualTo(d); + } + + @Test + public void bindIntervalNull() { + Struct row = + execute( + Statement.newBuilder(selectValueQuery).bind("p1").to((Interval) null), Type.interval()); + assertThat(row.isNull(0)).isTrue(); + } + @Test public void bindNumeric() { - assumeFalse("Emulator does not yet support NUMERIC", EmulatorSpannerHelper.isUsingEmulator()); BigDecimal b = new BigDecimal("1.1"); Statement.Builder statement = Statement.newBuilder(selectValueQuery); Type expectedType = Type.numeric(); @@ -450,7 +483,6 @@ public void bindNumeric() { @Test public void bindNumericNull() { - assumeFalse("Emulator does not yet support NUMERIC", EmulatorSpannerHelper.isUsingEmulator()); Statement.Builder statement = Statement.newBuilder(selectValueQuery); Type expectedType = Type.numeric(); if (dialect.dialect == Dialect.POSTGRESQL) { @@ -465,7 +497,6 @@ public void bindNumericNull() { @Test public void bindNumeric_doesNotPreservePrecision() { - assumeFalse("Emulator does not yet support NUMERIC", EmulatorSpannerHelper.isUsingEmulator()); BigDecimal b = new BigDecimal("1.10"); Statement.Builder statement = Statement.newBuilder(selectValueQuery); Type expectedType = Type.numeric(); @@ -553,9 +584,6 @@ public void bindInt64ArrayNull() { @Test public void bindFloat32Array() { - assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator()); - assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel()); - Struct row = execute( Statement.newBuilder(selectValueQuery) @@ -578,9 +606,6 @@ public void bindFloat32Array() { @Test public void bindFloat32ArrayEmpty() { - assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator()); - assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel()); - Struct row = execute( Statement.newBuilder(selectValueQuery) @@ -593,9 +618,6 @@ public void bindFloat32ArrayEmpty() { @Test public void bindFloat32ArrayNull() { - assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator()); - assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel()); - Struct row = execute( Statement.newBuilder(selectValueQuery).bind("p1").toFloat32Array((float[]) null), @@ -681,7 +703,6 @@ public void bindStringArrayNull() { public void bindJsonArray() { assumeFalse( "array JSON binding is not supported on POSTGRESQL", dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery) @@ -697,7 +718,6 @@ public void bindJsonArray() { @Test public void bindJsonArrayEmpty() { assumeFalse("JSON is not supported on POSTGRESQL", dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery).bind("p1").toJsonArray(Collections.emptyList()), @@ -709,7 +729,6 @@ public void bindJsonArrayEmpty() { @Test public void bindJsonArrayNull() { assumeFalse("JSON is not supported on POSTGRESQL", dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery).bind("p1").toJsonArray(null), @@ -817,10 +836,74 @@ public void bindDateArrayNull() { assertThat(row.isNull(0)).isTrue(); } + @Test + public void bindUuidArray() { + UUID u1 = UUID.randomUUID(); + UUID u2 = UUID.randomUUID(); + + Struct row = + execute( + Statement.newBuilder(selectValueQuery).bind("p1").toUuidArray(asList(u1, u2, null)), + Type.array(Type.uuid())); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getUuidList(0)).containsExactly(u1, u2, null).inOrder(); + } + + @Test + public void bindUuidArrayEmpty() { + Struct row = + execute( + Statement.newBuilder(selectValueQuery).bind("p1").toUuidArray(Collections.emptyList()), + Type.array(Type.uuid())); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getUuidList(0)).containsExactly(); + } + + @Test + public void bindUuidArrayNull() { + Struct row = + execute( + Statement.newBuilder(selectValueQuery).bind("p1").toUuidArray(null), + Type.array(Type.uuid())); + assertThat(row.isNull(0)).isTrue(); + } + + @Test + public void bindIntervalArray() { + Interval d1 = Interval.parseFromString("P-1Y-2M-3DT4H5M6.789123S"); + Interval d2 = Interval.parseFromString("P1Y2M3DT-4H-5M-6.789123S"); + Struct row = + execute( + Statement.newBuilder(selectValueQuery).bind("p1").toIntervalArray(asList(d1, d2, null)), + Type.array(Type.interval())); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getIntervalList(0)).containsExactly(d1, d2, null).inOrder(); + } + + @Test + public void bindIntervalArrayEmpty() { + Struct row = + execute( + Statement.newBuilder(selectValueQuery) + .bind("p1") + .toIntervalArray(Collections.emptyList()), + Type.array(Type.interval())); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getIntervalList(0)).containsExactly(); + } + + @Test + public void bindIntervalArrayNull() { + Struct row = + execute( + Statement.newBuilder(selectValueQuery).bind("p1").toIntervalArray(null), + Type.array(Type.interval())); + assertThat(row.isNull(0)).isTrue(); + } + @Test public void bindNumericArrayGoogleStandardSQL() { assumeTrue(dialect.dialect == Dialect.GOOGLE_STANDARD_SQL); - assumeFalse("Emulator does not yet support NUMERIC", EmulatorSpannerHelper.isUsingEmulator()); BigDecimal b1 = new BigDecimal("3.14"); BigDecimal b2 = new BigDecimal("6.626"); @@ -835,7 +918,6 @@ public void bindNumericArrayGoogleStandardSQL() { @Test public void bindNumericArrayPostgreSQL() { assumeTrue(dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support NUMERIC", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery) @@ -849,7 +931,6 @@ public void bindNumericArrayPostgreSQL() { @Test public void bindNumericArrayEmptyGoogleStandardSQL() { assumeTrue(dialect.dialect == Dialect.GOOGLE_STANDARD_SQL); - assumeFalse("Emulator does not yet support NUMERIC", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery) @@ -863,7 +944,6 @@ public void bindNumericArrayEmptyGoogleStandardSQL() { @Test public void bindNumericArrayEmptyPostgreSQL() { assumeTrue(dialect.dialect == Dialect.POSTGRESQL); - assumeFalse("Emulator does not yet support NUMERIC", EmulatorSpannerHelper.isUsingEmulator()); Struct row = execute( Statement.newBuilder(selectValueQuery) @@ -968,6 +1048,7 @@ public void invalidAmbiguousFieldAccess() { } private Struct structValue() { + // TODO: Add test for interval once interval is supported in emulator. return Struct.newBuilder() .set("f_int") .to(10) @@ -989,6 +1070,7 @@ private Struct structValue() { @Test public void bindStruct() { assumeFalse("structs are not supported on POSTGRESQL", dialect.dialect == Dialect.POSTGRESQL); + // TODO: Add test for interval once interval is supported in emulator. Struct p = structValue(); String query = "SELECT " diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueueTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueueTest.java new file mode 100644 index 00000000000..eba3fb2865b --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITQueueTest.java @@ -0,0 +1,163 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.it; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; +import static org.junit.Assume.assumeTrue; + +import com.google.cloud.ByteArray; +import com.google.cloud.spanner.*; +import com.google.cloud.spanner.connection.ConnectionOptions; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.junit.*; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +/** Integration test for Cloud Spanner Queue. */ +@Category(ParallelIntegrationTest.class) +@RunWith(Parameterized.class) +public class ITQueueTest { + @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); + + @Parameterized.Parameters(name = "Dialect = {0}") + public static List data() { + List params = new ArrayList<>(); + params.add(new DialectTestParameter(Dialect.GOOGLE_STANDARD_SQL)); + return params; + } + + @Parameterized.Parameter() public DialectTestParameter dialect; + + private static DatabaseClient googleStandardSQLClient; + + private static final String[] GOOGLE_STANDARD_SQL_SCHEMA = + new String[] { + "CREATE Queue Q1 (" + + " Id INT64 NOT NULL," + + " Payload BYTES(MAX) NOT NULL," + + ") PRIMARY KEY (Id), " + + "OPTIONS (receive_mode = 'PULL')", + "CREATE TABLE T1 (" + + " K1 INT64 NOT NULL," + + " K INT64 NOT NULL," + + ") PRIMARY KEY (K1)" + }; + + private static DatabaseClient client; + + private Struct readRow(String queue, Key key, String... columns) { + return client.singleUse(TimestampBound.strong()).readRow(queue, key, Arrays.asList(columns)); + } + + @BeforeClass + public static void setUpTestSuite() { + // TODO: remove once the feature is fully enabled in prod + assumeTrue("Queue tests are temporarily disabled", false); + Database googleStandardSQLDatabase = + env.getTestHelper().createTestDatabase(GOOGLE_STANDARD_SQL_SCHEMA); + googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); + System.out.println("Database created"); + } + + @Before + public void setUp() { + // TODO: add postgres schema & client after feature is enabled + client = googleStandardSQLClient; + } + + @AfterClass + public static void teardown() { + ConnectionOptions.closeSpanner(); + } + + @Test + public void testSendAndAckMutation() { + client.write( + Arrays.asList( + Mutation.newSendBuilder("Q1") + .setKey(Key.of(1)) + .setPayload(Value.bytes(ByteArray.copyFrom("payload1"))) + .build(), + Mutation.newSendBuilder("Q1") + .setKey(Key.of(2)) + .setPayload(Value.bytes(ByteArray.copyFrom("payload2"))) + .build(), + Mutation.newSendBuilder("Q1") + .setKey(Key.of(3)) + .setPayload(Value.bytes(ByteArray.copyFrom("payload3"))) + .setDeliveryTime(Instant.now()) + .build())); + + // Verifying messages are in the queue. + Struct row = readRow("Q1", Key.of(1), "Payload"); + assertThat(row == null).isFalse(); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getBytes(0)).isEqualTo(ByteArray.copyFrom("payload1")); + + row = readRow("Q1", Key.of(2), "Payload"); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getBytes(0)).isEqualTo(ByteArray.copyFrom("payload2")); + + row = readRow("Q1", Key.of(3), "Payload"); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getBytes(0)).isEqualTo(ByteArray.copyFrom("payload3")); + + // Ack-ing the first two messages. + client.write( + Arrays.asList( + Mutation.newAckBuilder("Q1").setKey(Key.of(1)).build(), + Mutation.newAckBuilder("Q1").setKey(Key.of(2)).build())); + + // Verifying the first 2 messages are acked and remvoed from the queue + row = readRow("Q1", Key.of(1), "Payload"); + assertThat(row == null).isTrue(); + row = readRow("Q1", Key.of(2), "Payload"); + assertThat(row == null).isTrue(); + row = readRow("Q1", Key.of(3), "Payload"); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getBytes(0)).isEqualTo(ByteArray.copyFrom("payload3")); + } + + @Test + public void testAckNotFound() { + // Enable IgnoreNotFound. + client.write( + Collections.singletonList( + Mutation.newAckBuilder("Q1").setKey(Key.of(1)).setIgnoreNotFound(true).build())); + Struct row = readRow("Q1", Key.of(1), "Payload"); + assertThat(row == null).isTrue(); + + // Disable IgnoreNotFound. + SpannerException thrown = + assertThrows( + SpannerException.class, + () -> + client.write( + Collections.singletonList( + Mutation.newAckBuilder("Q1") + .setKey(Key.of(1)) + .setIgnoreNotFound(false) + .build()))); + assertThat(thrown).hasMessageThat().contains("NOT_FOUND: Message not found"); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java index 68aeb2a0e99..894d46a8090 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java @@ -583,37 +583,28 @@ public void testReadNonFloat64LiteralsGoogleStandardSQL() { .singleUse() .executeQuery( Statement.of( - "SELECT " - + "TRUE AS bool," - + "1 AS int64," - + "CAST('100' AS NUMERIC) AS numeric," - + "'stringValue' AS string," - + "CAST('bytesValue' AS BYTES) AS bytes," - + "CAST('1970-01-01T00:00:01Z' AS TIMESTAMP) AS timestamp," - + "CAST('2021-02-03' AS DATE) AS date," - + "[false, true] AS boolArray," - + "[1, 2] AS int64Array," - + "[CAST('100' AS NUMERIC), CAST('200' AS NUMERIC)] AS numericArray," - + "['string1', 'string2'] AS stringArray," - + "[CAST('bytes1' AS BYTES), CAST('bytes2' AS BYTES)] AS bytesArray," - + "[CAST('1970-01-01T00:00:01.000000002Z' AS TIMESTAMP), CAST('1970-01-01T00:00:02.000000003Z' AS TIMESTAMP)] AS timestampArray," - + "[CAST('2020-01-02' AS DATE), CAST('2021-02-03' AS DATE)] AS dateArray," - + "ARRAY(SELECT STRUCT(" - + " TRUE AS structBool," - + " 1 AS structInt64," - + " CAST('100' AS NUMERIC) AS structNumeric," - + " 'stringValue' AS structString," - + " CAST('bytesValue' AS BYTES) AS structBytes," - + " CAST('1970-01-01T00:00:01Z' AS TIMESTAMP) AS structTimestamp," - + " CAST('2020-01-02' AS DATE) AS structDate," - + " [false, true] AS structBoolArray," - + " [1, 2] AS structInt64Array," - + " [CAST('100' AS NUMERIC), CAST('200' AS NUMERIC)] AS structNumericArray," - + " ['string1', 'string2'] AS structStringArray," - + " [CAST('bytes1' AS BYTES), CAST('bytes2' AS BYTES)] AS structBytesArray," - + " [CAST('1970-01-01T00:00:01.000000002Z' AS TIMESTAMP), CAST('1970-01-01T00:00:02.000000003Z' AS TIMESTAMP)] AS structTimestampArray," - + " [CAST('2020-01-02' AS DATE), CAST('2021-02-03' AS DATE)] AS structDateArray" - + ")) AS structArray"))) { + "SELECT TRUE AS bool,1 AS int64,CAST('100' AS NUMERIC) AS numeric,'stringValue'" + + " AS string,CAST('bytesValue' AS BYTES) AS" + + " bytes,CAST('1970-01-01T00:00:01Z' AS TIMESTAMP) AS" + + " timestamp,CAST('2021-02-03' AS DATE) AS date,[false, true] AS" + + " boolArray,[1, 2] AS int64Array,[CAST('100' AS NUMERIC), CAST('200' AS" + + " NUMERIC)] AS numericArray,['string1', 'string2'] AS" + + " stringArray,[CAST('bytes1' AS BYTES), CAST('bytes2' AS BYTES)] AS" + + " bytesArray,[CAST('1970-01-01T00:00:01.000000002Z' AS TIMESTAMP)," + + " CAST('1970-01-01T00:00:02.000000003Z' AS TIMESTAMP)] AS" + + " timestampArray,[CAST('2020-01-02' AS DATE), CAST('2021-02-03' AS DATE)]" + + " AS dateArray,ARRAY(SELECT STRUCT( TRUE AS structBool, 1 AS" + + " structInt64, CAST('100' AS NUMERIC) AS structNumeric, 'stringValue'" + + " AS structString, CAST('bytesValue' AS BYTES) AS structBytes, " + + " CAST('1970-01-01T00:00:01Z' AS TIMESTAMP) AS structTimestamp, " + + " CAST('2020-01-02' AS DATE) AS structDate, [false, true] AS" + + " structBoolArray, [1, 2] AS structInt64Array, [CAST('100' AS NUMERIC)," + + " CAST('200' AS NUMERIC)] AS structNumericArray, ['string1', 'string2']" + + " AS structStringArray, [CAST('bytes1' AS BYTES), CAST('bytes2' AS" + + " BYTES)] AS structBytesArray, [CAST('1970-01-01T00:00:01.000000002Z' AS" + + " TIMESTAMP), CAST('1970-01-01T00:00:02.000000003Z' AS TIMESTAMP)] AS" + + " structTimestampArray, [CAST('2020-01-02' AS DATE), CAST('2021-02-03'" + + " AS DATE)] AS structDateArray)) AS structArray"))) { resultSet.next(); assertEquals(Value.bool(true), resultSet.getValue("bool")); @@ -711,21 +702,17 @@ public void testReadNonFloat64LiteralsPostgreSQL() { .singleUse() .executeQuery( Statement.of( - "SELECT " - + "TRUE AS bool," - + "1 AS int64," - + "CAST('100' AS numeric) AS numeric," - + "'stringValue' AS string," - + "CAST('bytesValue' AS BYTEA) AS bytes," - + "CAST('1970-01-01T00:00:01 UTC' AS TIMESTAMPTZ) AS timestamp," - + "CAST('2021-02-03' AS DATE) AS date," - + "ARRAY[false, true] AS boolArray," - + "ARRAY[1, 2] AS int64Array," - + "ARRAY[CAST('100' AS NUMERIC), CAST('200' AS NUMERIC)] AS numericArray," - + "ARRAY['string1', 'string2'] AS stringArray," - + "ARRAY[CAST('bytes1' AS BYTEA), CAST('bytes2' AS BYTEA)] AS bytesArray," - + "ARRAY[CAST('1970-01-01T00:00:01 UTC' AS TIMESTAMPTZ), CAST('1970-01-01T00:00:02 UTC' AS TIMESTAMPTZ)] AS timestampArray," - + "ARRAY[CAST('2020-01-02' AS DATE), CAST('2021-02-03' AS DATE)] AS dateArray"))) { + "SELECT TRUE AS bool,1 AS int64,CAST('100' AS numeric) AS numeric,'stringValue'" + + " AS string,CAST('bytesValue' AS BYTEA) AS" + + " bytes,CAST('1970-01-01T00:00:01 UTC' AS TIMESTAMPTZ) AS" + + " timestamp,CAST('2021-02-03' AS DATE) AS date,ARRAY[false, true] AS" + + " boolArray,ARRAY[1, 2] AS int64Array,ARRAY[CAST('100' AS NUMERIC)," + + " CAST('200' AS NUMERIC)] AS numericArray,ARRAY['string1', 'string2'] AS" + + " stringArray,ARRAY[CAST('bytes1' AS BYTEA), CAST('bytes2' AS BYTEA)] AS" + + " bytesArray,ARRAY[CAST('1970-01-01T00:00:01 UTC' AS TIMESTAMPTZ)," + + " CAST('1970-01-01T00:00:02 UTC' AS TIMESTAMPTZ)] AS" + + " timestampArray,ARRAY[CAST('2020-01-02' AS DATE), CAST('2021-02-03' AS" + + " DATE)] AS dateArray"))) { resultSet.next(); assertEquals(Value.bool(true), resultSet.getValue("bool")); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionManagerAsyncTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionManagerAsyncTest.java index c1e8a903ea5..31e338476bc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionManagerAsyncTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionManagerAsyncTest.java @@ -161,7 +161,16 @@ public void testInvalidInsert() throws InterruptedException { } catch (ExecutionException e) { assertThat(e.getCause()).isInstanceOf(SpannerException.class); SpannerException se = (SpannerException) e.getCause(); - assertThat(se.getErrorCode()).isEqualTo(ErrorCode.NOT_FOUND); + if (env.getTestHelper() + .getOptions() + .getSessionPoolOptions() + .getUseMultiplexedSessionForRW()) { + // Backend currently returns INVALID_ARGUMENT, however this will be changed to NOT_FOUND + // in future. + assertThat(se.getErrorCode()).isAnyOf(ErrorCode.NOT_FOUND, ErrorCode.INVALID_ARGUMENT); + } else { + assertThat(se.getErrorCode()).isEqualTo(ErrorCode.NOT_FOUND); + } // expected break; } @@ -210,7 +219,8 @@ public void testRollback() throws InterruptedException { } @Ignore( - "Cloud Spanner now seems to return CANCELLED instead of ABORTED when a transaction is invalidated by a later transaction in the same session") + "Cloud Spanner now seems to return CANCELLED instead of ABORTED when a transaction is" + + " invalidated by a later transaction in the same session") @Test public void testAbortAndRetry() throws InterruptedException, ExecutionException { assumeFalse( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionTest.java index ea60b9fb649..da55d1d5367 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionTest.java @@ -41,7 +41,10 @@ import com.google.cloud.spanner.ReadContext; import com.google.cloud.spanner.ReadOnlyTransaction; import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.Struct; import com.google.cloud.spanner.TimestampBound; @@ -52,10 +55,13 @@ import com.google.common.collect.Sets; import com.google.common.util.concurrent.SettableFuture; import com.google.common.util.concurrent.Uninterruptibles; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Random; import java.util.Vector; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -74,6 +80,9 @@ public class ITTransactionTest { @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); private static Database db; private static DatabaseClient client; + private static Database largeMessageDb; + private static DatabaseClient largeMessageClient; + /** Sequence for assigning unique keys to test cases. */ private static int seq; @@ -87,11 +96,31 @@ public static void setUpDatabase() { + " V INT64," + ") PRIMARY KEY (K)"); client = env.getTestHelper().getDatabaseClient(db); + + largeMessageDb = + env.getTestHelper() + .createTestDatabase( + "CREATE TABLE T (" + + " K STRING(MAX) NOT NULL," + + " col0 BYTES(MAX)," + + " col1 BYTES(MAX)," + + " col2 BYTES(MAX)," + + " col3 BYTES(MAX)," + + " col4 BYTES(MAX)," + + " col5 BYTES(MAX)," + + " col6 BYTES(MAX)," + + " col7 BYTES(MAX)," + + " col8 BYTES(MAX)," + + " col9 BYTES(MAX)," + + ") PRIMARY KEY (K)"); + largeMessageClient = env.getTestHelper().getDatabaseClient(largeMessageDb); } @Before public void removeTestData() { client.writeAtLeastOnce(Collections.singletonList(Mutation.delete("T", KeySet.all()))); + largeMessageClient.writeAtLeastOnce( + Collections.singletonList(Mutation.delete("T", KeySet.all()))); } private static String uniqueKey() { @@ -189,6 +218,54 @@ public void basicsUsingQuery() throws InterruptedException { }); } + @Test + public void isolationLevelAndReadLockModeSetAtClientLevelTest() { + SpannerOptions options = + env.getTestHelper().getOptions().toBuilder() + .setDefaultTransactionOptions( + DefaultReadWriteTransactionOptions.newBuilder() + .setIsolationLevel(IsolationLevel.REPEATABLE_READ) + .setReadLockMode(ReadLockMode.OPTIMISTIC) + .build()) + .build(); + try (Spanner spanner = options.getService()) { + DatabaseClient client = spanner.getDatabaseClient(db.getId()); + Long updatedRows = + client + .readWriteTransaction() + .run( + transaction -> + transaction.executeUpdate( + Statement.of("INSERT INTO T (K, V) VALUES ('test1', 2)"))); + assertThat(updatedRows).isEqualTo(1L); + } + } + + @Test + public void isolationLevelAndReadLockModeSetAtClientAndTxnLevelTest() { + SpannerOptions options = + env.getTestHelper().getOptions().toBuilder() + .setDefaultTransactionOptions( + DefaultReadWriteTransactionOptions.newBuilder() + .setIsolationLevel(IsolationLevel.REPEATABLE_READ) + .setReadLockMode(ReadLockMode.OPTIMISTIC) + .build()) + .build(); + try (Spanner spanner = options.getService()) { + DatabaseClient client = spanner.getDatabaseClient(db.getId()); + Long updatedRows = + client + .readWriteTransaction( + Options.isolationLevel(IsolationLevel.SERIALIZABLE), + Options.readLockMode(ReadLockMode.PESSIMISTIC)) + .run( + transaction -> + transaction.executeUpdate( + Statement.of("INSERT INTO T (K, V) VALUES ('test1', 2)"))); + assertThat(updatedRows).isEqualTo(1L); + } + } + @Test public void userExceptionPreventsCommit() { class UserException extends Exception { @@ -464,7 +541,10 @@ public void nestedSingleUseReadTxnThrows() { @Test public void nestedTxnSucceedsWhenAllowed() { assumeFalse("Emulator does not support multiple parallel transactions", isUsingEmulator()); - + // TODO(sriharshach): Remove this skip once backend support empty transactions to commit. + assumeFalse( + "Skipping for multiplexed sessions since it does not allow empty transactions to commit", + isUsingMultiplexedSessionsForRW()); client .readWriteTransaction() .allowNestedTransaction() @@ -557,6 +637,25 @@ public void testTxWithUncaughtError() { } } + @Test + public void testTxWithLargeMessageSize() { + int bytesPerColumn = 10000000; // 10MB + String key = uniqueKey(); + Random random = new Random(); + List mutations = new ArrayList(); + Mutation.WriteBuilder builder = Mutation.newInsertOrUpdateBuilder("T").set("K").to(key); + for (int j = 0; j < 7; j++) { + byte[] data = new byte[bytesPerColumn]; + random.nextBytes(data); + builder + .set("col" + j) + .to(com.google.cloud.spanner.Value.bytes(com.google.cloud.ByteArray.copyFrom(data))); + } + mutations.add(builder.build()); + // This large message is under the 100MB limit. + largeMessageClient.write(mutations); + } + @Test public void testTxWithUncaughtErrorAfterSuccessfulBegin() { try { @@ -588,4 +687,8 @@ public void testTransactionRunnerReturnsCommitStats() { // MutationCount = 2 (2 columns). assertEquals(2L, runner.getCommitResponse().getCommitStats().getMutationCount()); } + + boolean isUsingMultiplexedSessionsForRW() { + return env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITUuidTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITUuidTest.java new file mode 100644 index 00000000000..7bec70930c7 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITUuidTest.java @@ -0,0 +1,443 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.Timestamp; +import com.google.cloud.spanner.Database; +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.IntegrationTestEnv; +import com.google.cloud.spanner.Key; +import com.google.cloud.spanner.KeySet; +import com.google.cloud.spanner.Mutation; +import com.google.cloud.spanner.ParallelIntegrationTest; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.Struct; +import com.google.cloud.spanner.TimestampBound; +import com.google.cloud.spanner.Value; +import com.google.cloud.spanner.connection.ConnectionOptions; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +/** + * Class for running integration tests for UUID data type. It tests read and write operations + * involving UUID as key and non-key columns. + */ +@Category(ParallelIntegrationTest.class) +@RunWith(Parameterized.class) +public class ITUuidTest { + + @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); + + @Parameterized.Parameters(name = "Dialect = {0}") + public static List data() { + return Arrays.asList( + new DialectTestParameter(Dialect.GOOGLE_STANDARD_SQL), + new DialectTestParameter(Dialect.POSTGRESQL)); + } + + @Parameterized.Parameter() public DialectTestParameter dialect; + + private static DatabaseClient googleStandardSQLClient; + private static DatabaseClient postgreSQLClient; + + private static final String[] GOOGLE_STANDARD_SQL_SCHEMA = + new String[] { + "CREATE TABLE T (" + + " Key STRING(MAX) NOT NULL," + + " UuidValue UUID," + + " UuidArrayValue ARRAY," + + ") PRIMARY KEY (Key)", + "CREATE TABLE UK (" + " Key UUID NOT NULL," + ") PRIMARY KEY (Key)", + }; + + private static final String[] POSTGRESQL_SCHEMA = + new String[] { + "CREATE TABLE T (" + + " Key VARCHAR PRIMARY KEY," + + " UuidValue UUID," + + " UuidArrayValue UUID[]" + + ")", + "CREATE TABLE UK (" + " Key UUID PRIMARY KEY" + ")", + }; + + private static DatabaseClient client; + + private UUID uuid1 = UUID.fromString("aac68fbe-6847-48b1-8373-110950aeaf3a"); + ; + private UUID uuid2 = UUID.fromString("f5868be9-7983-4cfa-adf3-2e9f13f2019d"); + + @BeforeClass + public static void setUpDatabase() + throws ExecutionException, InterruptedException, TimeoutException { + Database googleStandardSQLDatabase = + env.getTestHelper().createTestDatabase(GOOGLE_STANDARD_SQL_SCHEMA); + + googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); + + Database postgreSQLDatabase = + env.getTestHelper() + .createTestDatabase(Dialect.POSTGRESQL, Arrays.asList(POSTGRESQL_SCHEMA)); + postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); + } + + @Before + public void before() { + client = + dialect.dialect == Dialect.GOOGLE_STANDARD_SQL ? googleStandardSQLClient : postgreSQLClient; + } + + @AfterClass + public static void tearDown() throws Exception { + ConnectionOptions.closeSpanner(); + } + + /** Sequence used to generate unique keys. */ + private static int seq; + + private static String uniqueString() { + return String.format("k%04d", seq++); + } + + private String lastKey; + + private Timestamp write(Mutation m) { + return client.write(Collections.singletonList(m)); + } + + private Mutation.WriteBuilder baseInsert() { + return Mutation.newInsertOrUpdateBuilder("T").set("Key").to(lastKey = uniqueString()); + } + + private Struct readRow(String table, String key, String... columns) { + return client + .singleUse(TimestampBound.strong()) + .readRow(table, Key.of(key), Arrays.asList(columns)); + } + + private Struct readLastRow(String... columns) { + return readRow("T", lastKey, columns); + } + + private Timestamp deleteAllRows(String table) { + return write(Mutation.delete(table, KeySet.all())); + } + + @Test + public void writeUuid() { + UUID uuid = UUID.randomUUID(); + write(baseInsert().set("UuidValue").to(uuid).build()); + Struct row = readLastRow("UuidValue"); + assertFalse(row.isNull(0)); + assertEquals(uuid, row.getUuid(0)); + } + + @Test + public void writeUuidNull() { + write(baseInsert().set("UuidValue").to((UUID) null).build()); + Struct row = readLastRow("UuidValue"); + assertTrue(row.isNull(0)); + } + + @Test + public void writeUuidArrayNull() { + write(baseInsert().set("UuidArrayValue").toUuidArray(null).build()); + Struct row = readLastRow("UuidArrayValue"); + assertTrue(row.isNull(0)); + } + + @Test + public void writeUuidArrayEmpty() { + write(baseInsert().set("UuidArrayValue").toUuidArray(Collections.emptyList()).build()); + Struct row = readLastRow("UuidArrayValue"); + assertFalse(row.isNull(0)); + assertTrue(row.getUuidList(0).isEmpty()); + } + + @Test + public void writeUuidArray() { + UUID uuid1 = UUID.randomUUID(); + UUID uuid2 = UUID.randomUUID(); + + write( + baseInsert().set("UuidArrayValue").toUuidArray(Arrays.asList(null, uuid1, uuid2)).build()); + Struct row = readLastRow("UuidArrayValue"); + assertFalse(row.isNull(0)); + assertEquals(row.getUuidList(0), Arrays.asList(null, uuid1, uuid2)); + } + + @Test + public void writeUuidArrayNoNulls() { + UUID uuid1 = UUID.randomUUID(); + UUID uuid2 = UUID.randomUUID(); + + write(baseInsert().set("UuidArrayValue").toUuidArray(Arrays.asList(uuid1, uuid2)).build()); + Struct row = readLastRow("UuidArrayValue"); + assertFalse(row.isNull(0)); + assertEquals(2, row.getUuidList(0).size()); + assertEquals(uuid1, row.getUuidList(0).get(0)); + assertEquals(uuid2, row.getUuidList(0).get(1)); + } + + private String getInsertStatementWithLiterals() { + String statement = "INSERT INTO T (Key, UuidValue, UuidArrayValue) VALUES "; + + if (dialect.dialect == Dialect.POSTGRESQL) { + statement += + "('dml1', 'aac68fbe-6847-48b1-8373-110950aeaf3a'," + + " array['aac68fbe-6847-48b1-8373-110950aeaf3a'::uuid]), ('dml2'," + + " 'aac68fbe-6847-48b1-8373-110950aeaf3a'::uuid," + + " array['aac68fbe-6847-48b1-8373-110950aeaf3a'::uuid]),('dml3', null, null)," + + " ('dml4', 'aac68fbe-6847-48b1-8373-110950aeaf3a'::uuid," + + " array['aac68fbe-6847-48b1-8373-110950aeaf3a'::uuid," + + " 'f5868be9-7983-4cfa-adf3-2e9f13f2019d'::uuid, null])"; + } else { + statement += + "('dml1', 'aac68fbe-6847-48b1-8373-110950aeaf3a'," + + " [CAST('aac68fbe-6847-48b1-8373-110950aeaf3a' AS UUID)]), ('dml2'," + + " CAST('aac68fbe-6847-48b1-8373-110950aeaf3a' AS UUID)," + + " [CAST('aac68fbe-6847-48b1-8373-110950aeaf3a' AS UUID)]), ('dml3', null, null)," + + " ('dml4', 'aac68fbe-6847-48b1-8373-110950aeaf3a'," + + " [CAST('aac68fbe-6847-48b1-8373-110950aeaf3a' AS UUID)," + + " CAST('f5868be9-7983-4cfa-adf3-2e9f13f2019d' AS UUID), null])"; + } + return statement; + } + + @Test + public void uuidLiterals() { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate(Statement.of(getInsertStatementWithLiterals())); + return null; + }); + + verifyNonKeyContents("dml"); + } + + private String getInsertStatementWithParameters() { + String statement = + "INSERT INTO T (Key, UuidValue, UuidArrayValue) VALUES " + + "('param1', $1, $2), " + + "('param2', $3, $4), " + + "('param3', $5, $6), " + + "('param4', $7, $8)"; + + return (dialect.dialect == Dialect.POSTGRESQL) ? statement : statement.replace("$", "@p"); + } + + @Test + public void uuidParameter() { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.newBuilder(getInsertStatementWithParameters()) + .bind("p1") + .to(Value.uuid(uuid1)) + .bind("p2") + .to(Value.uuidArray(Collections.singletonList(uuid1))) + .bind("p3") + .to(Value.uuid(uuid1)) + .bind("p4") + .to(Value.uuidArray(Collections.singletonList(uuid1))) + .bind("p5") + .to(Value.uuid(null)) + .bind("p6") + .to(Value.uuidArray(null)) + .bind("p7") + .to(Value.uuid(uuid1)) + .bind("p8") + .to(Value.uuidArray(Arrays.asList(uuid1, uuid2, null))) + .build()); + return null; + }); + + verifyNonKeyContents("param"); + } + + private String getInsertStatementForUntypedParameters() { + if (dialect.dialect == Dialect.POSTGRESQL) { + return "INSERT INTO T (key, uuidValue, uuidArrayValue) VALUES " + + "('untyped1', ($1)::uuid, ($2)::uuid[])"; + } + return "INSERT INTO T (Key, UuidValue, UuidArrayValue) VALUES " + + "('untyped1', CAST(@p1 AS UUID), CAST(@p2 AS ARRAY))"; + } + + @Test + public void uuidUntypedParameter() { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.newBuilder(getInsertStatementForUntypedParameters()) + .bind("p1") + .to( + Value.untyped( + com.google.protobuf.Value.newBuilder() + .setStringValue("aac68fbe-6847-48b1-8373-110950aeaf3a") + .build())) + .bind("p2") + .to( + Value.untyped( + com.google.protobuf.Value.newBuilder() + .setListValue( + com.google.protobuf.ListValue.newBuilder() + .addValues( + com.google.protobuf.Value.newBuilder() + .setStringValue( + "aac68fbe-6847-48b1-8373-110950aeaf3a"))) + .build())) + .build()); + return null; + }); + + Struct row = readRow("T", "untyped1", "UuidValue", "UuidArrayValue"); + assertEquals(UUID.fromString("aac68fbe-6847-48b1-8373-110950aeaf3a"), row.getUuid(0)); + assertEquals( + Collections.singletonList(UUID.fromString("aac68fbe-6847-48b1-8373-110950aeaf3a")), + row.getUuidList(1)); + } + + private String getInsertStatementWithKeyLiterals(UUID uuid1, UUID uuid2) { + String statement = "INSERT INTO UK (Key) VALUES "; + if (dialect.dialect == Dialect.POSTGRESQL) { + statement += "('" + uuid1.toString() + "')," + "('" + uuid2.toString() + "'::uuid)"; + } else { + statement += "('" + uuid1.toString() + "')," + "(CAST('" + uuid2.toString() + "' AS UUID))"; + } + return statement; + } + + @Test + public void uuidAsKeyLiteral() { + deleteAllRows("UK"); + + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.of(getInsertStatementWithKeyLiterals(uuid1, uuid2))); + return null; + }); + + verifyKeyContents(Arrays.asList(uuid1, uuid2)); + } + + private String getInsertStatementWithKeyParameters() { + String statement = "INSERT INTO UK (Key) VALUES " + "($1)," + "($2)"; + return (dialect.dialect == Dialect.POSTGRESQL) ? statement : statement.replace("$", "@p"); + } + + @Test + public void uuidAsKeyParameter() { + deleteAllRows("UK"); + UUID uuid1 = UUID.fromString("fb907080-48a4-4615-b2c4-c8ccb5bb66a4"); + UUID uuid2 = UUID.fromString("faee3a78-cc54-42fc-baa2-53197fb89e8a"); + + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.newBuilder(getInsertStatementWithKeyParameters()) + .bind("p1") + .to(Value.uuid(uuid1)) + .bind("p2") + .to(Value.uuid(uuid2)) + .build()); + return null; + }); + + verifyKeyContents(Arrays.asList(uuid2, uuid1)); + } + + private void verifyKeyContents(List uuids) { + try (ResultSet resultSet = + client.singleUse().executeQuery(Statement.of("SELECT Key AS key FROM UK ORDER BY key"))) { + + for (UUID uuid : uuids) { + assertTrue(resultSet.next()); + assertEquals(uuid, resultSet.getUuid("key")); + assertEquals(Value.uuid(uuid), resultSet.getValue("key")); + } + } + } + + private void verifyNonKeyContents(String keyPrefix) { + try (ResultSet resultSet = + client + .singleUse() + .executeQuery( + Statement.of( + "SELECT Key AS key, UuidValue AS uuidvalue, UuidArrayValue AS uuidarrayvalue FROM T WHERE Key LIKE '{keyPrefix}%' ORDER BY key" + .replace("{keyPrefix}", keyPrefix)))) { + + // Row 1 + assertTrue(resultSet.next()); + assertEquals(uuid1, resultSet.getUuid("uuidvalue")); + assertEquals(Value.uuid(uuid1), resultSet.getValue("uuidvalue")); + assertEquals(Collections.singletonList(uuid1), resultSet.getUuidList("uuidarrayvalue")); + assertEquals( + Value.uuidArray(Collections.singletonList(uuid1)), resultSet.getValue("uuidarrayvalue")); + + // Row 2 + assertTrue(resultSet.next()); + assertEquals(uuid1, resultSet.getUuid("uuidvalue")); + assertEquals(Value.uuid(uuid1), resultSet.getValue("uuidvalue")); + assertEquals(Collections.singletonList(uuid1), resultSet.getUuidList("uuidarrayvalue")); + assertEquals( + Value.uuidArray(Collections.singletonList(uuid1)), resultSet.getValue("uuidarrayvalue")); + + // Row 3 + assertTrue(resultSet.next()); + assertTrue(resultSet.isNull("uuidvalue")); + assertTrue(resultSet.isNull("uuidarrayvalue")); + + // Row 4 + assertTrue(resultSet.next()); + assertEquals(uuid1, resultSet.getUuid("uuidvalue")); + assertEquals(Value.uuid(uuid1), resultSet.getValue("uuidvalue")); + assertEquals(Arrays.asList(uuid1, uuid2, null), resultSet.getUuidList("uuidarrayvalue")); + assertEquals( + Value.uuidArray(Arrays.asList(uuid1, uuid2, null)), resultSet.getValue("uuidarrayvalue")); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITVPCNegativeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITVPCNegativeTest.java index 01d2dc1ad37..0a0e53a887f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITVPCNegativeTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITVPCNegativeTest.java @@ -16,10 +16,12 @@ package com.google.cloud.spanner.it; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; 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.fail; +import static org.junit.Assume.assumeFalse; import static org.junit.Assume.assumeTrue; import com.google.api.gax.core.FixedCredentialsProvider; @@ -46,7 +48,6 @@ import com.google.common.base.Strings; import com.google.longrunning.OperationsClient; import com.google.longrunning.OperationsSettings; -import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -79,6 +80,7 @@ public class ITVPCNegativeTest { @BeforeClass public static void setUpClass() { + assumeFalse("Not applicable for experimental host", isExperimentalHost()); assumeTrue( "To run tests, GOOGLE_CLOUD_TESTS_IN_VPCSC environment variable needs to be set to True", IN_VPCSC_TEST != null && IN_VPCSC_TEST.equalsIgnoreCase("true")); @@ -349,9 +351,7 @@ public void deniedListBackupOperations() throws IOException { .setTransportChannelProvider(InstantiatingGrpcChannelProvider.newBuilder().build()) .setEndpoint("spanner.googleapis.com:443") .setCredentialsProvider( - FixedCredentialsProvider.create( - GoogleCredentials.fromStream( - new FileInputStream(System.getenv("GOOGLE_APPLICATION_CREDENTIALS"))))) + FixedCredentialsProvider.create(GoogleCredentials.getApplicationDefault())) .build())) { client.listOperations(backupId.getName() + "/operations", ""); fail("Expected PermissionDeniedException"); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java index 17f5f8e0ec9..5dde683bcb8 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java @@ -19,6 +19,7 @@ import static com.google.cloud.spanner.SpannerMatchers.isSpannerException; import static com.google.cloud.spanner.Type.array; import static com.google.cloud.spanner.Type.json; +import static com.google.cloud.spanner.Type.pgJsonb; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertArrayEquals; @@ -54,7 +55,6 @@ import com.google.cloud.spanner.Type; import com.google.cloud.spanner.Value; import com.google.cloud.spanner.connection.ConnectionOptions; -import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.common.collect.ImmutableList; import com.google.protobuf.NullValue; import com.google.rpc.Code; @@ -98,9 +98,7 @@ public class ITWriteTest { public static List data() { List params = new ArrayList<>(); params.add(new DialectTestParameter(Dialect.GOOGLE_STANDARD_SQL)); - if (!EmulatorSpannerHelper.isUsingEmulator()) { - params.add(new DialectTestParameter(Dialect.POSTGRESQL)); - } + params.add(new DialectTestParameter(Dialect.POSTGRESQL)); return params; } @@ -149,7 +147,7 @@ public static List data() { + " StringValue VARCHAR," + " JsonValue JSONB," + " BytesValue BYTEA," - + " TimestampValue TIMESTAMPTZ," + + " TimestampValue SPANNER.COMMIT_TIMESTAMP," + " DateValue DATE," + " NumericValue NUMERIC," + " BoolArrayValue BOOL[]," @@ -181,12 +179,10 @@ public static void setUpDatabase() env.getTestHelper().createTestDatabase(GOOGLE_STANDARD_SQL_SCHEMA); googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); - if (!EmulatorSpannerHelper.isUsingEmulator()) { - Database postgreSQLDatabase = - env.getTestHelper() - .createTestDatabase(Dialect.POSTGRESQL, Arrays.asList(POSTGRESQL_SCHEMA)); - postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); - } + Database postgreSQLDatabase = + env.getTestHelper() + .createTestDatabase(Dialect.POSTGRESQL, Arrays.asList(POSTGRESQL_SCHEMA)); + postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); } @Before @@ -481,31 +477,42 @@ public void writeStringNull() { @Test public void writeJson() { - assumeFalse("PostgreSQL does not yet support JSON", dialect.dialect == Dialect.POSTGRESQL); write(baseInsert().set("JsonValue").to(Value.json("{\"rating\":9,\"open\":true}")).build()); Struct row = readLastRow("JsonValue"); assertThat(row.isNull(0)).isFalse(); - assertThat(row.getColumnType("JsonValue")).isEqualTo(json()); - assertThat(row.getJson(0)).isEqualTo("{\"open\":true,\"rating\":9}"); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertThat(row.getColumnType("jsonvalue")).isEqualTo(pgJsonb()); + assertThat(row.getPgJsonb(0)).isEqualTo("{\"open\": true, \"rating\": 9}"); + } else { + assertThat(row.getColumnType("JsonValue")).isEqualTo(json()); + assertThat(row.getJson(0)).isEqualTo("{\"open\":true,\"rating\":9}"); + } } @Test public void writeJsonEmpty() { - assumeFalse("PostgreSQL does not yet support JSON", dialect.dialect == Dialect.POSTGRESQL); write(baseInsert().set("JsonValue").to(Value.json("{}")).build()); Struct row = readLastRow("JsonValue"); assertThat(row.isNull(0)).isFalse(); - assertThat(row.getColumnType("JsonValue")).isEqualTo(json()); - assertThat(row.getJson(0)).isEqualTo("{}"); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertThat(row.getColumnType("jsonvalue")).isEqualTo(pgJsonb()); + assertThat(row.getPgJsonb(0)).isEqualTo("{}"); + } else { + assertThat(row.getColumnType("JsonValue")).isEqualTo(json()); + assertThat(row.getJson(0)).isEqualTo("{}"); + } } @Test public void writeJsonNull() { - assumeFalse("PostgreSQL does not yet support JSON", dialect.dialect == Dialect.POSTGRESQL); write(baseInsert().set("JsonValue").to(Value.json(null)).build()); Struct row = readLastRow("JsonValue"); assertThat(row.isNull(0)).isTrue(); - assertThat(row.getColumnType("JsonValue")).isEqualTo(json()); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertThat(row.getColumnType("jsonvalue")).isEqualTo(pgJsonb()); + } else { + assertThat(row.getColumnType("JsonValue")).isEqualTo(json()); + } } @Test @@ -626,8 +633,6 @@ public void writeBytesNull() { @Test public void writeTimestamp() { - assumeFalse( - "PostgresSQL does not yet support Timestamp", dialect.dialect == Dialect.POSTGRESQL); Timestamp timestamp = Timestamp.parseTimestamp("2016-09-15T00:00:00.111111Z"); write(baseInsert().set("TimestampValue").to(timestamp).build()); Struct row = readLastRow("TimestampValue"); @@ -644,8 +649,6 @@ public void writeTimestampNull() { @Test public void writeCommitTimestamp() { - assumeFalse( - "PostgreSQL does not yet support Commit Timestamp", dialect.dialect == Dialect.POSTGRESQL); Timestamp commitTimestamp = write(baseInsert().set("TimestampValue").to(Value.COMMIT_TIMESTAMP).build()); Struct row = readLastRow("TimestampValue"); @@ -830,36 +833,46 @@ public void writeStringArray() { @Test public void writeJsonArrayNull() { - assumeFalse("PostgreSQL does not yet support Array", dialect.dialect == Dialect.POSTGRESQL); write(baseInsert().set("JsonArrayValue").toJsonArray(null).build()); Struct row = readLastRow("JsonArrayValue"); assertThat(row.isNull(0)).isTrue(); - assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertThat(row.getColumnType("jsonarrayvalue")).isEqualTo(array(pgJsonb())); + } else { + assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); + } } @Test public void writeJsonArrayEmpty() { - assumeFalse("PostgreSQL does not yet support Array", dialect.dialect == Dialect.POSTGRESQL); write(baseInsert().set("JsonArrayValue").toJsonArray(Collections.emptyList()).build()); Struct row = readLastRow("JsonArrayValue"); assertThat(row.isNull(0)).isFalse(); - assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); - assertThat(row.getJsonList(0)).containsExactly(); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertThat(row.getColumnType("jsonarrayvalue")).isEqualTo(array(pgJsonb())); + assertThat(row.getPgJsonbList(0)).containsExactly(); + } else { + assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); + assertThat(row.getJsonList(0)).containsExactly(); + } } @Test public void writeJsonArray() { - assumeFalse("PostgreSQL does not yet support Array", dialect.dialect == Dialect.POSTGRESQL); write(baseInsert().set("JsonArrayValue").toJsonArray(Arrays.asList("[]", null, "{}")).build()); Struct row = readLastRow("JsonArrayValue"); assertThat(row.isNull(0)).isFalse(); - assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); - assertThat(row.getJsonList(0)).containsExactly("[]", null, "{}").inOrder(); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertThat(row.getColumnType("jsonarrayvalue")).isEqualTo(array(pgJsonb())); + assertThat(row.getPgJsonbList(0)).containsExactly("[]", null, "{}").inOrder(); + } else { + assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); + assertThat(row.getJsonList(0)).containsExactly("[]", null, "{}").inOrder(); + } } @Test public void writeJsonArrayNoNulls() { - assumeFalse("PostgreSQL does not yet support Array", dialect.dialect == Dialect.POSTGRESQL); write( baseInsert() .set("JsonArrayValue") @@ -867,10 +880,17 @@ public void writeJsonArrayNoNulls() { .build()); Struct row = readLastRow("JsonArrayValue"); assertThat(row.isNull(0)).isFalse(); - assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); - assertThat(row.getJsonList(0)) - .containsExactly("[]", "{\"color\":\"red\",\"value\":\"#f00\"}", "{}") - .inOrder(); + if (dialect.dialect == Dialect.POSTGRESQL) { + assertThat(row.getColumnType("jsonarrayvalue")).isEqualTo(array(pgJsonb())); + assertThat(row.getPgJsonbList(0)) + .containsExactly("[]", "{\"color\": \"red\", \"value\": \"#f00\"}", "{}") + .inOrder(); + } else { + assertThat(row.getColumnType("JsonArrayValue")).isEqualTo(array(json())); + assertThat(row.getJsonList(0)) + .containsExactly("[]", "{\"color\":\"red\",\"value\":\"#f00\"}", "{}") + .inOrder(); + } } @Test @@ -1023,7 +1043,16 @@ public void tableNotFound() { .build()); fail("Expected exception"); } catch (SpannerException ex) { - assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.NOT_FOUND); + if (env.getTestHelper() + .getOptions() + .getSessionPoolOptions() + .getUseMultiplexedSessionForRW()) { + // Backend currently returns INVALID_ARGUMENT, however this will be changed to NOT_FOUND in + // future. + assertThat(ex.getErrorCode()).isAnyOf(ErrorCode.NOT_FOUND, ErrorCode.INVALID_ARGUMENT); + } else { + assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.NOT_FOUND); + } } } @@ -1033,7 +1062,16 @@ public void columnNotFound() { write(baseInsert().set("ColumnThatDoesNotExist").to("V1").build()); fail("Expected exception"); } catch (SpannerException ex) { - assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.NOT_FOUND); + if (env.getTestHelper() + .getOptions() + .getSessionPoolOptions() + .getUseMultiplexedSessionForRW()) { + // Backend currently returns INVALID_ARGUMENT, however this will be changed to NOT_FOUND in + // future. + assertThat(ex.getErrorCode()).isAnyOf(ErrorCode.NOT_FOUND, ErrorCode.INVALID_ARGUMENT); + } else { + assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.NOT_FOUND); + } } } @@ -1043,8 +1081,15 @@ public void incorrectType() { write(baseInsert().set("StringValue").to(1.234).build()); fail("Expected exception"); } catch (SpannerException ex) { - assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.FAILED_PRECONDITION); - assertThat(ex.getMessage()).contains("STRING"); + if (env.getTestHelper() + .getOptions() + .getSessionPoolOptions() + .getUseMultiplexedSessionForRW()) { + assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.INVALID_ARGUMENT); + } else { + assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.FAILED_PRECONDITION); + assertThat(ex.getMessage()).contains("STRING"); + } } } @@ -1101,28 +1146,15 @@ public void testWriteUntypedNullValuesGoogleSQL() { transaction -> transaction.executeUpdate( Statement.newBuilder( - "insert into T (" - + "K," - + "BoolValue," - + "Int64Value," - + "Float64Value," - + "StringValue," - + "JsonValue," - + "BytesValue," - + "TimestampValue," - + "DateValue," - + "NumericValue," - + "BoolArrayValue," - + "Int64ArrayValue," - + "Float64ArrayValue," - + "StringArrayValue," - + "JsonArrayValue," - + "BytesArrayValue," - + "TimestampArrayValue," - + "DateArrayValue," - + "NumericArrayValue" - + ") values (@k, @bool, @int64, @float64, @string, @json, @bytes, @timestamp, @date, @numeric, " - + "@boolArray, @int64Array, @float64Array, @stringArray, @jsonArray, @bytesArray, @timestampArray, @dateArray, @numericArray)") + "insert into T (K,BoolValue,Int64Value,Float64Value,StringValue," + + "JsonValue,BytesValue,TimestampValue,DateValue,NumericValue," + + "BoolArrayValue,Int64ArrayValue,Float64ArrayValue," + + "StringArrayValue,JsonArrayValue,BytesArrayValue," + + "TimestampArrayValue,DateArrayValue,NumericArrayValue) values" + + " (@k, @bool, @int64, @float64, @string, @json, @bytes," + + " @timestamp, @date, @numeric, @boolArray, @int64Array," + + " @float64Array, @stringArray, @jsonArray, @bytesArray," + + " @timestampArray, @dateArray, @numericArray)") .bind("k") .to(uniqueString()) .bind("bool") @@ -1430,9 +1462,7 @@ public void testTypeNamesPostgreSQL() { assertTrue(resultSet.next()); assertEquals("timestampvalue", resultSet.getString("column_name")); - assertEquals( - Type.timestamp().getSpannerTypeName(dialect.dialect), - resultSet.getString("spanner_type")); + assertEquals("spanner.commit_timestamp", resultSet.getString("spanner_type")); assertTrue(resultSet.next()); assertEquals("datevalue", resultSet.getString("column_name")); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/slow/ITBackupTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/slow/ITBackupTest.java index 1359046aee0..bc03637fe3c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/slow/ITBackupTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/slow/ITBackupTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.it.slow; import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost; import static com.google.cloud.spanner.testing.TimestampHelper.afterDays; import static com.google.cloud.spanner.testing.TimestampHelper.afterMinutes; import static com.google.cloud.spanner.testing.TimestampHelper.daysAgo; @@ -129,11 +130,13 @@ public class ITBackupTest { @BeforeClass public static void setup() { + assumeFalse("backups are not supported on experimental host yet", isExperimentalHost()); assumeFalse("backups are not supported on the emulator", isUsingEmulator()); keyName = System.getProperty(KMS_KEY_NAME_PROPERTY); Preconditions.checkNotNull( keyName, - "Key name is null, please set a key to be used for this test. The necessary permissions should be grant to the spanner service account according to the CMEK user guide."); + "Key name is null, please set a key to be used for this test. The necessary permissions" + + " should be grant to the spanner service account according to the CMEK user guide."); logger.info("Setting up tests"); testHelper = env.getTestHelper(); @@ -443,9 +446,7 @@ public void test02_RetryNonIdempotentRpcsReturningLongRunningOperations() throws InjectErrorInterceptorProvider restoreBackupInterceptor = new InjectErrorInterceptorProvider("RestoreDatabase"); options = - testHelper - .getOptions() - .toBuilder() + testHelper.getOptions().toBuilder() .setInterceptorProvider(restoreBackupInterceptor) .build(); try (Spanner spanner = options.getService()) { @@ -779,13 +780,15 @@ private void testRestore(Backup backup, Timestamp versionTime, String expectedKe attempts++; if (attempts == 10) { logger.info( - "Restore operation failed 10 times because of other pending restores. Skipping restore test."); + "Restore operation failed 10 times because of other pending restores. Skipping" + + " restore test."); return; } // wait and then retry. logger.info( String.format( - "Restoring backup %s to database %s must wait because of other pending restore operation", + "Restoring backup %s to database %s must wait because of other pending restore" + + " operation", backup.getId().getBackup(), restoredDb)); //noinspection BusyWait Thread.sleep(60_000L); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/ChannelFinderGoldenTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/ChannelFinderGoldenTest.java new file mode 100644 index 00000000000..525313f1ab4 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/ChannelFinderGoldenTest.java @@ -0,0 +1,203 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import com.google.protobuf.TextFormat; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.RoutingHint; +import io.grpc.CallOptions; +import io.grpc.ClientCall; +import io.grpc.ManagedChannel; +import io.grpc.MethodDescriptor; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import spanner.cloud.location.FinderTestCase; +import spanner.cloud.location.FinderTestCases; + +@RunWith(JUnit4.class) +public class ChannelFinderGoldenTest { + + @Test + public void goldenTest() throws Exception { + FinderTestCases.Builder builder = FinderTestCases.newBuilder(); + try (InputStream inputStream = + getClass().getClassLoader().getResourceAsStream("finder_test.textproto"); + InputStreamReader reader = + new InputStreamReader(Objects.requireNonNull(inputStream), StandardCharsets.UTF_8)) { + TextFormat.merge(reader, builder); + } + + FinderTestCases testCases = builder.build(); + + for (FinderTestCase testCase : testCases.getTestCaseList()) { + FakeEndpointCache endpointCache = new FakeEndpointCache(); + ChannelFinder finder = new ChannelFinder(endpointCache); + finder.useDeterministicRandom(); + + for (FinderTestCase.Event event : testCase.getEventList()) { + if (event.hasCacheUpdate()) { + finder.update(event.getCacheUpdate()); + } + + if (!event.getUnhealthyServersList().isEmpty()) { + endpointCache.setUnhealthyServers(new HashSet<>(event.getUnhealthyServersList())); + } else { + endpointCache.setUnhealthyServers(Collections.emptySet()); + } + + switch (event.getRequestCase()) { + case READ: + ReadRequest.Builder readBuilder = event.getRead().toBuilder(); + ChannelEndpoint readEndpoint = finder.findServer(readBuilder); + assertHintAndServer( + testCase.getName(), event, readBuilder.getRoutingHint(), readEndpoint); + break; + case SQL: + ExecuteSqlRequest.Builder sqlBuilder = event.getSql().toBuilder(); + ChannelEndpoint sqlEndpoint = finder.findServer(sqlBuilder); + assertHintAndServer( + testCase.getName(), event, sqlBuilder.getRoutingHint(), sqlEndpoint); + break; + case REQUEST_NOT_SET: + default: + break; + } + } + } + } + + private static void assertHintAndServer( + String testCaseName, + FinderTestCase.Event event, + RoutingHint actualHint, + ChannelEndpoint endpoint) { + assertEquals( + "RoutingHint mismatch for test case: " + testCaseName, event.getHint(), actualHint); + String expectedServer = event.getServer(); + if (!expectedServer.isEmpty()) { + assertNotNull("Expected server for test case: " + testCaseName, endpoint); + assertEquals(expectedServer, endpoint.getAddress()); + } else { + assertNull("Expected no server for test case: " + testCaseName, endpoint); + } + } + + private static final class FakeEndpointCache implements ChannelEndpointCache { + private final Map endpoints = new HashMap<>(); + private final FakeEndpoint defaultEndpoint = new FakeEndpoint("default"); + private volatile Set unhealthyServers = Collections.emptySet(); + + void setUnhealthyServers(Set unhealthyServers) { + this.unhealthyServers = unhealthyServers; + } + + @Override + public ChannelEndpoint defaultChannel() { + return defaultEndpoint; + } + + @Override + public ChannelEndpoint get(String address) { + return endpoints.computeIfAbsent(address, FakeEndpoint::new); + } + + @Override + public void evict(String address) { + endpoints.remove(address); + } + + @Override + public void shutdown() { + endpoints.clear(); + } + + private final class FakeEndpoint implements ChannelEndpoint { + private final String address; + + private FakeEndpoint(String address) { + this.address = address; + } + + @Override + public String getAddress() { + return address; + } + + @Override + public boolean isHealthy() { + return !unhealthyServers.contains(address); + } + + @Override + public ManagedChannel getChannel() { + return new ManagedChannel() { + @Override + public ManagedChannel shutdown() { + return this; + } + + @Override + public ManagedChannel shutdownNow() { + return this; + } + + @Override + public boolean isShutdown() { + return false; + } + + @Override + public boolean isTerminated() { + return false; + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) { + return true; + } + + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + throw new UnsupportedOperationException(); + } + + @Override + public String authority() { + return address; + } + }; + } + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java index a0f236b0fd7..7a6a9f78d4b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java @@ -26,14 +26,24 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; +import com.google.api.core.ApiFunction; import com.google.api.gax.core.GaxProperties; import com.google.api.gax.grpc.GrpcCallContext; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.HeaderProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.auth.Credentials; import com.google.auth.oauth2.AccessToken; import com.google.auth.oauth2.OAuth2Credentials; +import com.google.cloud.NoCredentials; import com.google.cloud.ServiceOptions; +import com.google.cloud.grpc.GcpManagedChannelOptions; +import com.google.cloud.grpc.GcpManagedChannelOptions.GcpMetricsOptions; +import com.google.cloud.grpc.fallback.GcpFallbackChannelOptions; +import com.google.cloud.grpc.fallback.GcpFallbackOpenTelemetry; import com.google.cloud.spanner.DatabaseClient; import com.google.cloud.spanner.DatabaseId; import com.google.cloud.spanner.Dialect; @@ -75,21 +85,29 @@ import io.grpc.ServerInterceptor; import io.grpc.Status; import io.grpc.auth.MoreCallCredentials; +import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; import io.grpc.protobuf.lite.ProtoLiteUtils; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.samplers.Sampler; import java.io.IOException; import java.net.InetSocketAddress; import java.time.Duration; +import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -166,13 +184,14 @@ public static Object[] data() { } @Before - public void startServer() throws IOException { + public void startServer() throws Exception { // Enable OpenTelemetry tracing. SpannerOptionsHelper.resetActiveTracingFramework(); SpannerOptions.enableOpenTelemetryTraces(); assumeTrue( - "Skip tests when emulator is enabled as this test interferes with the check whether the emulator is running", + "Skip tests when emulator is enabled as this test interferes with the check whether the" + + " emulator is running", System.getenv("SPANNER_EMULATOR_HOST") == null); defaultUserAgent = "spanner-java/" + GaxProperties.getLibraryVersion(GapicSpannerRpc.class); @@ -646,8 +665,7 @@ public void testTraceContextHeaderWithOpenTelemetryAndEndToEndTracingEnabled() { .build(); final SpannerOptions options = - createSpannerOptions() - .toBuilder() + createSpannerOptions().toBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(true) .build(); @@ -672,8 +690,7 @@ public void testTraceContextHeaderWithOpenTelemetryAndEndToEndTracingDisabled() .build(); final SpannerOptions options = - createSpannerOptions() - .toBuilder() + createSpannerOptions().toBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(false) .build(); @@ -874,13 +891,237 @@ public void testCreateSession_whenMultiplexedSessionIsFalse_assertSessionProto() rpc.shutdown(); } + @Test + public void testChannelEndpointCacheFactoryUsedWhenLocationApiEnabled() { + AtomicBoolean factoryCalled = new AtomicBoolean(false); + ChannelEndpointCacheFactory factory = + baseProvider -> { + factoryCalled.set(true); + return new GrpcChannelEndpointCache(baseProvider); + }; + + try { + SpannerOptions.useEnvironment( + new SpannerOptions.SpannerEnvironment() { + @Override + public boolean isEnableLocationApi() { + return true; + } + }); + SpannerOptions options = + createSpannerOptions().toBuilder().setChannelEndpointCacheFactory(factory).build(); + GapicSpannerRpc rpc = new GapicSpannerRpc(options, true); + rpc.shutdown(); + assertTrue(factoryCalled.get()); + } finally { + SpannerOptions.useDefaultEnvironment(); + } + } + + @Test + public void testLocationApiDoesNotOverrideExplicitChannelProvider() { + AtomicBoolean factoryCalled = new AtomicBoolean(false); + ChannelEndpointCacheFactory factory = + baseProvider -> { + factoryCalled.set(true); + return new GrpcChannelEndpointCache(baseProvider); + }; + + AtomicBoolean providerUsed = new AtomicBoolean(false); + TransportChannelProvider channelProvider = + new RecordingTransportChannelProvider( + address.getHostString(), server.getPort(), providerUsed); + + try { + SpannerOptions.useEnvironment( + new SpannerOptions.SpannerEnvironment() { + @Override + public boolean isEnableLocationApi() { + return true; + } + }); + SpannerOptions options = + createSpannerOptions().toBuilder() + .setChannelProvider(channelProvider) + .setChannelEndpointCacheFactory(factory) + .build(); + GapicSpannerRpc rpc = new GapicSpannerRpc(options, true); + rpc.shutdown(); + assertTrue(providerUsed.get()); + assertFalse(factoryCalled.get()); + } finally { + SpannerOptions.useDefaultEnvironment(); + } + } + + @Test + public void testLocationApiDisabledInOptionsDoesNotCreateKeyAwareChannelProvider() { + AtomicBoolean factoryCalled = new AtomicBoolean(false); + ChannelEndpointCacheFactory factory = + baseProvider -> { + factoryCalled.set(true); + return new GrpcChannelEndpointCache(baseProvider); + }; + + try { + SpannerOptions.useEnvironment( + new SpannerOptions.SpannerEnvironment() { + @Override + public boolean isEnableLocationApi() { + return false; + } + }); + SpannerOptions options = + createSpannerOptions().toBuilder().setChannelEndpointCacheFactory(factory).build(); + GapicSpannerRpc rpc = new GapicSpannerRpc(options, true); + rpc.shutdown(); + assertFalse(factoryCalled.get()); + } finally { + SpannerOptions.useDefaultEnvironment(); + } + } + + @Test + public void testGrpcGcpExtensionPreservesChannelConfigurator() throws Exception { + InstantiatingGrpcChannelProvider.Builder channelProviderBuilder = + InstantiatingGrpcChannelProvider.newBuilder(); + AtomicBoolean baseConfiguratorCalled = new AtomicBoolean(false); + channelProviderBuilder.setChannelConfigurator( + builder -> { + baseConfiguratorCalled.set(true); + return builder; + }); + + SpannerOptions options = + SpannerOptions.newBuilder().setProjectId("[PROJECT]").enableGrpcGcpExtension().build(); + + java.lang.reflect.Method method = + GapicSpannerRpc.class.getDeclaredMethod( + "maybeEnableGrpcGcpExtension", + InstantiatingGrpcChannelProvider.Builder.class, + SpannerOptions.class); + method.setAccessible(true); + method.invoke(null, channelProviderBuilder, options); + + ApiFunction chainedConfigurator = + channelProviderBuilder.getChannelConfigurator(); + chainedConfigurator.apply(NettyChannelBuilder.forAddress("localhost", 1)); + + assertTrue(baseConfiguratorCalled.get()); + } + + @Test + public void testGrpcGcpOtelMetricsDisabledSkipsMeterInjection() throws Exception { + SpannerOptions options = + SpannerOptions.newBuilder() + .setProjectId("[PROJECT]") + .setGrpcGcpOtelMetricsEnabled(false) + .build(); + + java.lang.reflect.Method method = + GapicSpannerRpc.class.getDeclaredMethod( + "grpcGcpOptionsWithMetricsAndDcp", SpannerOptions.class); + method.setAccessible(true); + GcpManagedChannelOptions grpcGcpOptions = + (GcpManagedChannelOptions) method.invoke(null, options); + GcpMetricsOptions metricsOptions = grpcGcpOptions.getMetricsOptions(); + + assertNotNull(metricsOptions); + assertNull(metricsOptions.getOpenTelemetryMeter()); + } + + private static final class RecordingTransportChannelProvider implements TransportChannelProvider { + private final String host; + private final int port; + private final AtomicBoolean used; + + private RecordingTransportChannelProvider(String host, int port, AtomicBoolean used) { + this.host = host; + this.port = port; + this.used = used; + } + + @Override + public GrpcTransportChannel getTransportChannel() throws IOException { + used.set(true); + return GrpcTransportChannel.newBuilder() + .setManagedChannel(ManagedChannelBuilder.forAddress(host, port).usePlaintext().build()) + .build(); + } + + @Override + public String getTransportName() { + return GrpcTransportChannel.getGrpcTransportName(); + } + + @Override + public boolean needsEndpoint() { + return false; + } + + @Override + public boolean needsCredentials() { + return false; + } + + @Override + public boolean needsExecutor() { + return false; + } + + @Override + public boolean needsHeaders() { + return false; + } + + @Override + public boolean shouldAutoClose() { + return true; + } + + @Override + public TransportChannelProvider withEndpoint(String endpoint) { + return this; + } + + @Override + public TransportChannelProvider withCredentials(Credentials credentials) { + return this; + } + + @Override + public TransportChannelProvider withHeaders(Map headers) { + return this; + } + + @Override + public TransportChannelProvider withPoolSize(int poolSize) { + return this; + } + + @Override + public TransportChannelProvider withExecutor(ScheduledExecutorService executor) { + return this; + } + + @Override + public TransportChannelProvider withExecutor(Executor executor) { + return this; + } + + @Override + public boolean acceptsPoolSize() { + return false; + } + } + private SpannerOptions createSpannerOptions() { String endpoint = address.getHostString() + ":" + server.getPort(); return SpannerOptions.newBuilder() .setProjectId("[PROJECT]") // Set a custom channel configurator to allow http instead of https. .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) - .disableDirectPath() + .setEnableDirectAccess(false) .setHost("http://" + endpoint) // Set static credentials that will return the static OAuth test token. .setCredentials(STATIC_CREDENTIALS) @@ -889,4 +1130,193 @@ private SpannerOptions createSpannerOptions() { .setCallCredentialsProvider(() -> MoreCallCredentials.from(VARIABLE_CREDENTIALS)) .build(); } + + static class TestableGapicSpannerRpc extends GapicSpannerRpc { + public TestableGapicSpannerRpc(SpannerOptions options) { + super(options); + } + + @Override + OpenTelemetry getFallbackOpenTelemetry(SpannerOptions options) { + return options.getOpenTelemetry(); + } + + @Override + GcpFallbackChannelOptions createFallbackChannelOptions( + GcpFallbackOpenTelemetry fallbackTelemetry, int minFailedCalls) { + // Override default 1-minute period to 10ms for instant testing + return GcpFallbackChannelOptions.newBuilder() + .setPrimaryChannelName("directpath") + .setFallbackChannelName("cloudpath") + .setMinFailedCalls(10) + .setPeriod(Duration.ofMillis(5)) + .setGcpFallbackOpenTelemetry(fallbackTelemetry) + .build(); + } + } + + @Test + public void testFallbackIntegration_doesNotSwitchWhenThresholdNotMet() throws Exception { + // Setup OpenTelemetry to capture metrics + InMemoryMetricReader metricReader = InMemoryMetricReader.create(); + SdkMeterProvider meterProvider = + SdkMeterProvider.builder().registerMetricReader(metricReader).build(); + OpenTelemetrySdk openTelemetry = + OpenTelemetrySdk.builder().setMeterProvider(meterProvider).build(); + + SpannerOptions.useEnvironment( + new SpannerOptions.SpannerEnvironment() { + @Override + public boolean isEnableGcpFallback() { + return true; + } + }); + try { + SpannerOptions.Builder builder = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setEnableDirectAccess(true) + .setHost("http://localhost:1") // Closed port + .setCredentials(NoCredentials.getInstance()) + .setOpenTelemetry(openTelemetry); + // Make sure the ExecuteBatchDml RPC fails quickly to keep the test fast. + // Note that the timeout is actually not used. It is the fact that it does not retry that + // makes it fail fast. + builder + .getSpannerStubSettingsBuilder() + .executeBatchDmlSettings() + .setSimpleTimeoutNoRetriesDuration(Duration.ofSeconds(10)); + // Setup Options with invalid host to force error + SpannerOptions options = builder.build(); + + TestableGapicSpannerRpc rpc = new TestableGapicSpannerRpc(options); + try { + // Make a call that is expected to fail + SpannerException exception = + assertThrows( + SpannerException.class, + () -> + rpc.executeBatchDml( + com.google.spanner.v1.ExecuteBatchDmlRequest.newBuilder() + .setSession("projects/p/instances/i/databases/d/sessions/s") + .build(), + null)); + assertEquals(ErrorCode.UNAVAILABLE, exception.getErrorCode()); + + // Wait briefly for the 10ms period to trigger the fallback check + Thread.sleep(10); + + // Verify Fallback via Metrics + Collection metrics = metricReader.collectAllMetrics(); + boolean fallbackOccurred = + metrics.stream() + .anyMatch(md -> md.getName().contains("fallback_count") && hasValue(md)); + + assertFalse("Fallback metric should not be present", fallbackOccurred); + + } finally { + rpc.shutdown(); + } + } finally { + SpannerOptions.useDefaultEnvironment(); + } + } + + static class TestableGapicSpannerRpcWithLowerMinFailedCalls extends GapicSpannerRpc { + public TestableGapicSpannerRpcWithLowerMinFailedCalls(SpannerOptions options) { + super(options); + } + + @Override + OpenTelemetry getFallbackOpenTelemetry(SpannerOptions options) { + return options.getOpenTelemetry(); + } + + @Override + GcpFallbackChannelOptions createFallbackChannelOptions( + GcpFallbackOpenTelemetry fallbackTelemetry, int minFailedCalls) { + // Override default 1-minute period to 10ms for instant testing + return GcpFallbackChannelOptions.newBuilder() + .setPrimaryChannelName("directpath") + .setFallbackChannelName("cloudpath") + .setMinFailedCalls(1) + .setPeriod(Duration.ofMillis(5)) + .setGcpFallbackOpenTelemetry(fallbackTelemetry) + .build(); + } + } + + @Test + public void testFallbackIntegration_switchesToFallbackOnFailure() throws Exception { + // Setup OpenTelemetry to capture metrics + InMemoryMetricReader metricReader = InMemoryMetricReader.create(); + SdkMeterProvider meterProvider = + SdkMeterProvider.builder().registerMetricReader(metricReader).build(); + OpenTelemetrySdk openTelemetry = + OpenTelemetrySdk.builder().setMeterProvider(meterProvider).build(); + + SpannerOptions.useEnvironment( + new SpannerOptions.SpannerEnvironment() { + @Override + public boolean isEnableGcpFallback() { + return true; + } + }); + try { + SpannerOptions.Builder builder = + SpannerOptions.newBuilder() + .setProjectId("test-project") + .setEnableDirectAccess(true) + .setHost("http://localhost:1") // Closed port + .setCredentials(NoCredentials.getInstance()) + .setOpenTelemetry(openTelemetry); + // Make sure the ExecuteBatchDml RPC fails quickly to keep the test fast. + // Note that the timeout is actually not used. It is the fact that it does not retry that + // makes it fail fast. + builder + .getSpannerStubSettingsBuilder() + .executeBatchDmlSettings() + .setSimpleTimeoutNoRetriesDuration(Duration.ofSeconds(10)); + // Setup Options with invalid host to force error + SpannerOptions options = builder.build(); + + TestableGapicSpannerRpcWithLowerMinFailedCalls rpc = + new TestableGapicSpannerRpcWithLowerMinFailedCalls(options); + try { + // Make a call that is expected to fail + SpannerException exception = + assertThrows( + SpannerException.class, + () -> + rpc.executeBatchDml( + com.google.spanner.v1.ExecuteBatchDmlRequest.newBuilder() + .setSession("projects/p/instances/i/databases/d/sessions/s") + .build(), + null)); + assertEquals(ErrorCode.UNAVAILABLE, exception.getErrorCode()); + + // Wait briefly for the 10ms period to trigger the fallback check + Thread.sleep(10); + + // Verify Fallback via Metrics + Collection metrics = metricReader.collectAllMetrics(); + boolean fallbackOccurred = + metrics.stream() + .anyMatch(md -> md.getName().contains("fallback_count") && hasValue(md)); + + assertTrue( + "Fallback metric should be present, indicating GcpFallbackChannel is active", + fallbackOccurred); + + } finally { + rpc.shutdown(); + } + } finally { + SpannerOptions.useDefaultEnvironment(); + } + } + + private boolean hasValue(MetricData metricData) { + return metricData.getLongSumData().getPoints().stream().anyMatch(point -> point.getValue() > 0); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java index 908a4ad5573..bcded26d685 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java @@ -16,8 +16,7 @@ package com.google.cloud.spanner.spi.v1; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; import com.google.auth.oauth2.AccessToken; import com.google.auth.oauth2.OAuth2Credentials; @@ -48,17 +47,13 @@ import io.opencensus.stats.ViewData; import io.opencensus.tags.TagKey; import io.opencensus.tags.TagValue; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.*; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -132,7 +127,7 @@ public class GfeLatencyTest { Statement.of("UPDATE FOO SET BAR=1 WHERE BAZ=2"); @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { //noinspection deprecation SpannerRpcViews.registerGfeLatencyAndHeaderMissingCountViews(); @@ -258,7 +253,7 @@ public void testGfeMissingHeaderCountExecuteStreamingSql() throws InterruptedExc SpannerRpcViews.SPANNER_GFE_HEADER_MISSING_COUNT_VIEW, "google.spanner.v1.Spanner/ExecuteStreamingSql", true); - assertEquals(1, count1); + assertTrue(count1 >= 1); } @Test @@ -269,7 +264,7 @@ public void testGfeMissingHeaderExecuteSql() throws InterruptedException { long count = getMetric( SpannerRpcViews.SPANNER_GFE_HEADER_MISSING_COUNT_VIEW, - "google.spanner.v1.Spanner/ExecuteSql", + "google.spanner.v1.Spanner/Commit", false); assertEquals(0, count); @@ -279,7 +274,7 @@ public void testGfeMissingHeaderExecuteSql() throws InterruptedException { long count1 = getMetric( SpannerRpcViews.SPANNER_GFE_HEADER_MISSING_COUNT_VIEW, - "google.spanner.v1.Spanner/ExecuteSql", + "google.spanner.v1.Spanner/Commit", true); assertEquals(1, count1); } @@ -290,7 +285,7 @@ private static SpannerOptions createSpannerOptions(InetSocketAddress address, Se .setProjectId("[PROJECT]") // Set a custom channel configurator to allow http instead of https. .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) - .disableDirectPath() + .setEnableDirectAccess(false) .setHost("http://" + endpoint) // Set static credentials that will return the static OAuth test token. .setCredentials(STATIC_CREDENTIALS) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GrpcChannelEndpointCacheTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GrpcChannelEndpointCacheTest.java new file mode 100644 index 00000000000..56e6d3cfc2b --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GrpcChannelEndpointCacheTest.java @@ -0,0 +1,125 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; + +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.cloud.spanner.SpannerException; +import io.grpc.ManagedChannelBuilder; +import org.junit.Test; + +public class GrpcChannelEndpointCacheTest { + + private static InstantiatingGrpcChannelProvider createProvider(String endpoint) { + return InstantiatingGrpcChannelProvider.newBuilder() + .setEndpoint(endpoint) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .build(); + } + + @Test + public void defaultChannelIsCached() throws Exception { + GrpcChannelEndpointCache cache = new GrpcChannelEndpointCache(createProvider("localhost:1234")); + try { + ChannelEndpoint defaultChannel = cache.defaultChannel(); + ChannelEndpoint server = cache.get(defaultChannel.getAddress()); + assertThat(server).isSameInstanceAs(defaultChannel); + } finally { + cache.shutdown(); + } + } + + @Test + public void getCachesPerAddress() throws Exception { + GrpcChannelEndpointCache cache = new GrpcChannelEndpointCache(createProvider("localhost:1234")); + try { + ChannelEndpoint first = cache.get("localhost:1111"); + ChannelEndpoint second = cache.get("localhost:1111"); + ChannelEndpoint third = cache.get("localhost:2222"); + + assertThat(second).isSameInstanceAs(first); + assertThat(third).isNotSameInstanceAs(first); + } finally { + cache.shutdown(); + } + } + + @Test + public void routedChannelsReuseDefaultAuthority() throws Exception { + GrpcChannelEndpointCache cache = new GrpcChannelEndpointCache(createProvider("localhost:1234")); + try { + ChannelEndpoint routed = cache.get("localhost:1111"); + + assertThat(routed.getChannel().authority()).isEqualTo("localhost:1234"); + } finally { + cache.shutdown(); + } + } + + @Test + public void evictRemovesNonDefaultServer() throws Exception { + GrpcChannelEndpointCache cache = new GrpcChannelEndpointCache(createProvider("localhost:1234")); + try { + ChannelEndpoint first = cache.get("localhost:1111"); + cache.evict("localhost:1111"); + ChannelEndpoint second = cache.get("localhost:1111"); + + assertThat(second).isNotSameInstanceAs(first); + } finally { + cache.shutdown(); + } + } + + @Test + public void evictIgnoresDefaultChannel() throws Exception { + GrpcChannelEndpointCache cache = new GrpcChannelEndpointCache(createProvider("localhost:1234")); + try { + ChannelEndpoint defaultChannel = cache.defaultChannel(); + cache.evict(defaultChannel.getAddress()); + ChannelEndpoint server = cache.get(defaultChannel.getAddress()); + + assertThat(server).isSameInstanceAs(defaultChannel); + } finally { + cache.shutdown(); + } + } + + @Test + public void shutdownPreventsNewServers() throws Exception { + GrpcChannelEndpointCache cache = new GrpcChannelEndpointCache(createProvider("localhost:1234")); + cache.shutdown(); + + assertThrows(SpannerException.class, () -> cache.get("localhost:1111")); + assertThat(cache.defaultChannel().getChannel().isShutdown()).isTrue(); + } + + @Test + public void healthReflectsChannelShutdown() throws Exception { + GrpcChannelEndpointCache cache = new GrpcChannelEndpointCache(createProvider("localhost:1234")); + try { + ChannelEndpoint server = cache.get("localhost:1111"); + assertThat(server.isHealthy()).isTrue(); + + server.getChannel().shutdownNow(); + assertThat(server.isHealthy()).isFalse(); + } finally { + cache.shutdown(); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyAwareChannelTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyAwareChannelTest.java new file mode 100644 index 00000000000..a4919389a85 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyAwareChannelTest.java @@ -0,0 +1,1253 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +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; +import static org.junit.Assert.assertThrows; + +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.protobuf.ByteString; +import com.google.protobuf.Empty; +import com.google.protobuf.ListValue; +import com.google.protobuf.TextFormat; +import com.google.protobuf.Value; +import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CacheUpdate; +import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.CommitResponse; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.Group; +import com.google.spanner.v1.Mutation; +import com.google.spanner.v1.PartialResultSet; +import com.google.spanner.v1.Range; +import com.google.spanner.v1.ReadRequest; +import com.google.spanner.v1.RecipeList; +import com.google.spanner.v1.ResultSet; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.RollbackRequest; +import com.google.spanner.v1.RoutingHint; +import com.google.spanner.v1.SpannerGrpc; +import com.google.spanner.v1.Tablet; +import com.google.spanner.v1.Transaction; +import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionSelector; +import io.grpc.CallOptions; +import io.grpc.ClientCall; +import io.grpc.ManagedChannel; +import io.grpc.Metadata; +import io.grpc.MethodDescriptor; +import io.grpc.Status; +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.Nullable; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class KeyAwareChannelTest { + private static final String DEFAULT_ADDRESS = "default:1234"; + private static final String SESSION = + "projects/p/instances/i/databases/d/sessions/test-session-id"; + + @Test + public void cancelBeforeStartPreservesTrailersAndSkipsDelegateCreation() throws Exception { + TestHarness harness = createHarness(); + ClientCall call = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + + Metadata causeTrailers = new Metadata(); + Metadata.Key key = Metadata.Key.of("debug", Metadata.ASCII_STRING_MARSHALLER); + causeTrailers.put(key, "timeout"); + RuntimeException cause = + Status.DEADLINE_EXCEEDED + .withDescription("server timeout") + .asRuntimeException(causeTrailers); + + call.cancel("cancelled by client", cause); + CapturingListener listener = new CapturingListener<>(); + call.start(listener, new Metadata()); + + assertThat(harness.defaultManagedChannel.callCount()).isEqualTo(0); + assertThat(listener.closeCount).isEqualTo(1); + assertThat(listener.closedStatus.getCode()).isEqualTo(Status.Code.CANCELLED); + assertThat(listener.closedStatus.getDescription()).isEqualTo("cancelled by client"); + assertThat(listener.closedTrailers.get(key)).isEqualTo("timeout"); + } + + @Test + public void cancelAfterStartBeforeSendSkipsDelegateCreation() throws Exception { + TestHarness harness = createHarness(); + ClientCall call = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + + CapturingListener listener = new CapturingListener<>(); + call.start(listener, new Metadata()); + call.cancel("cancel", null); + call.sendMessage(ExecuteSqlRequest.newBuilder().setSession(SESSION).build()); + + assertThat(harness.defaultManagedChannel.callCount()).isEqualTo(0); + assertThat(listener.closeCount).isEqualTo(1); + assertThat(listener.closedStatus.getCode()).isEqualTo(Status.Code.CANCELLED); + } + + @Test + public void cancelAfterDelegateCreationDelegatesToUnderlyingCall() throws Exception { + TestHarness harness = createHarness(); + ClientCall call = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + + CapturingListener listener = new CapturingListener<>(); + call.start(listener, new Metadata()); + call.sendMessage(ExecuteSqlRequest.newBuilder().setSession(SESSION).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall delegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + RuntimeException cause = new RuntimeException("boom"); + call.cancel("cancel now", cause); + + assertThat(delegate.cancelCalled).isTrue(); + assertThat(delegate.cancelMessage).isEqualTo("cancel now"); + assertThat(delegate.cancelCause).isSameInstanceAs(cause); + assertThat(listener.closeCount).isEqualTo(0); + } + + @Test + public void sendMessageBeforeStartThrows() throws Exception { + TestHarness harness = createHarness(); + ClientCall call = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + + assertThrows( + IllegalStateException.class, + () -> call.sendMessage(ExecuteSqlRequest.newBuilder().setSession(SESSION).build())); + } + + @Test + public void deadlineExceededFromDelegateIsForwardedToListener() throws Exception { + TestHarness harness = createHarness(); + ClientCall call = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + CapturingListener listener = new CapturingListener<>(); + + call.start(listener, new Metadata()); + call.sendMessage(ExecuteSqlRequest.newBuilder().setSession(SESSION).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall delegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + Metadata trailers = new Metadata(); + Metadata.Key key = Metadata.Key.of("timeout", Metadata.ASCII_STRING_MARSHALLER); + trailers.put(key, "true"); + Status status = Status.DEADLINE_EXCEEDED.withDescription("rpc timeout"); + delegate.emitOnClose(status, trailers); + + assertThat(listener.closeCount).isEqualTo(1); + assertThat(listener.closedStatus).isEqualTo(status); + assertThat(listener.closedTrailers.get(key)).isEqualTo("true"); + } + + @Test + public void timeoutOnCommitClearsTransactionAffinity() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("tx-1"); + + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + beginCall.start(new CapturingListener(), new Metadata()); + beginCall.sendMessage(BeginTransactionRequest.newBuilder().setSession(SESSION).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + beginDelegate.emitOnMessage(Transaction.newBuilder().setId(transactionId).build()); + beginDelegate.emitOnClose(Status.OK, new Metadata()); + + ClientCall commitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + commitCall.start(new CapturingListener(), new Metadata()); + commitCall.sendMessage( + CommitRequest.newBuilder().setSession(SESSION).setTransactionId(transactionId).build()); + + assertThat(harness.endpointCache.getCount(DEFAULT_ADDRESS)).isEqualTo(1); + + @SuppressWarnings("unchecked") + RecordingClientCall commitDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + commitDelegate.emitOnClose(Status.DEADLINE_EXCEEDED, new Metadata()); + + ClientCall rollbackCall = + harness.channel.newCall(SpannerGrpc.getRollbackMethod(), CallOptions.DEFAULT); + rollbackCall.start(new CapturingListener(), new Metadata()); + rollbackCall.sendMessage( + RollbackRequest.newBuilder().setSession(SESSION).setTransactionId(transactionId).build()); + + assertThat(harness.endpointCache.getCount(DEFAULT_ADDRESS)).isEqualTo(1); + } + + @Test + public void requestAfterCancelBeforeSendIsIgnored() throws Exception { + TestHarness harness = createHarness(); + ClientCall call = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + + CapturingListener listener = new CapturingListener<>(); + call.start(listener, new Metadata()); + call.cancel("cancel", null); + call.request(10); + call.sendMessage(ExecuteSqlRequest.newBuilder().setSession(SESSION).build()); + + assertThat(harness.defaultManagedChannel.callCount()).isEqualTo(0); + assertThat(listener.closeCount).isEqualTo(1); + assertThat(listener.closedStatus.getCode()).isEqualTo(Status.Code.CANCELLED); + } + + @Test + public void resultSetCacheUpdateRoutesSubsequentRequest() throws Exception { + TestHarness harness = createHarness(); + ExecuteSqlRequest request = + ExecuteSqlRequest.newBuilder() + .setSession(SESSION) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("a")).build()) + .build(); + + ClientCall firstCall = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + firstCall.start(new CapturingListener(), new Metadata()); + firstCall.sendMessage(request); + + @SuppressWarnings("unchecked") + RecordingClientCall firstDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + CacheUpdate cacheUpdate = + CacheUpdate.newBuilder() + .setDatabaseId(7L) + .addRange( + Range.newBuilder() + .setStartKey(bytes("a")) + .setLimitKey(bytes("z")) + .setGroupUid(9L) + .setSplitId(1L) + .setGeneration(bytes("1"))) + .addGroup( + Group.newBuilder() + .setGroupUid(9L) + .setGeneration(bytes("1")) + .addTablets( + Tablet.newBuilder() + .setTabletUid(3L) + .setServerAddress("routed:1234") + .setIncarnation(bytes("1")) + .setDistance(0))) + .build(); + + firstDelegate.emitOnMessage(ResultSet.newBuilder().setCacheUpdate(cacheUpdate).build()); + + ClientCall secondCall = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + secondCall.start(new CapturingListener(), new Metadata()); + secondCall.sendMessage(request); + + assertThat(harness.endpointCache.callCountForAddress(DEFAULT_ADDRESS)).isEqualTo(1); + assertThat(harness.endpointCache.callCountForAddress("routed:1234")).isEqualTo(1); + } + + @Test + public void beginTransactionWithMutationKeyAddsRoutingHint() throws Exception { + TestHarness harness = createHarness(); + seedCache(harness, createMutationRoutingCacheUpdate()); + + Mutation mutation = createInsertMutation("b"); + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + beginCall.start(new CapturingListener(), new Metadata()); + beginCall.sendMessage( + BeginTransactionRequest.newBuilder().setSession(SESSION).setMutationKey(mutation).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + assertNotNull(beginDelegate.lastMessage); + assertEquals(7L, beginDelegate.lastMessage.getRoutingHint().getDatabaseId()); + assertEquals( + "1", beginDelegate.lastMessage.getRoutingHint().getSchemaGeneration().toStringUtf8()); + assertFalse(beginDelegate.lastMessage.getRoutingHint().getKey().isEmpty()); + } + + @Test + public void transactionCacheUpdateEnablesCommitRoutingHint() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("tx-with-cache-update"); + + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + beginCall.start(new CapturingListener(), new Metadata()); + beginCall.sendMessage(BeginTransactionRequest.newBuilder().setSession(SESSION).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + beginDelegate.emitOnMessage( + Transaction.newBuilder() + .setId(transactionId) + .setCacheUpdate(createMutationRoutingCacheUpdate()) + .build()); + beginDelegate.emitOnClose(Status.OK, new Metadata()); + + ClientCall commitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + commitCall.start(new CapturingListener(), new Metadata()); + commitCall.sendMessage( + CommitRequest.newBuilder() + .setSession(SESSION) + .setTransactionId(transactionId) + .addMutations(createInsertMutation("b")) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall commitDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + assertNotNull(commitDelegate.lastMessage); + assertEquals(7L, commitDelegate.lastMessage.getRoutingHint().getDatabaseId()); + assertEquals( + "1", commitDelegate.lastMessage.getRoutingHint().getSchemaGeneration().toStringUtf8()); + assertFalse(commitDelegate.lastMessage.getRoutingHint().getKey().isEmpty()); + } + + @Test + public void singleUseCommitWithMutationsRoutesUsingRoutingHint() throws Exception { + TestHarness harness = createHarness(); + seedCache(harness, createMutationRecipeCacheUpdate()); + + ClientCall firstCommitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + firstCommitCall.start(new CapturingListener(), new Metadata()); + firstCommitCall.sendMessage( + CommitRequest.newBuilder() + .setSession(SESSION) + .setSingleUseTransaction( + TransactionOptions.newBuilder() + .setReadWrite(TransactionOptions.ReadWrite.getDefaultInstance())) + .addMutations(createInsertMutation("b")) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall firstCommitDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + assertNotNull(firstCommitDelegate.lastMessage); + RoutingHint routingHint = firstCommitDelegate.lastMessage.getRoutingHint(); + assertFalse(routingHint.getKey().isEmpty()); + + seedCache(harness, createRangeCacheUpdateForHint(routingHint)); + + ClientCall secondCommitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + secondCommitCall.start(new CapturingListener(), new Metadata()); + secondCommitCall.sendMessage( + CommitRequest.newBuilder() + .setSession(SESSION) + .setSingleUseTransaction( + TransactionOptions.newBuilder() + .setReadWrite(TransactionOptions.ReadWrite.getDefaultInstance())) + .addMutations(createInsertMutation("b")) + .build()); + + assertThat(harness.endpointCache.callCountForAddress(DEFAULT_ADDRESS)).isEqualTo(3); + assertThat(harness.endpointCache.callCountForAddress("server-a:1234")).isEqualTo(1); + + @SuppressWarnings("unchecked") + RecordingClientCall commitDelegate = + (RecordingClientCall) + harness.endpointCache.latestCallForAddress("server-a:1234"); + + assertNotNull(commitDelegate.lastMessage); + assertEquals(7L, commitDelegate.lastMessage.getRoutingHint().getDatabaseId()); + assertEquals( + "1", commitDelegate.lastMessage.getRoutingHint().getSchemaGeneration().toStringUtf8()); + assertFalse(commitDelegate.lastMessage.getRoutingHint().getKey().isEmpty()); + } + + @Test + public void singleUseCommitUsesSameMutationSelectionHeuristicAsBeginTransaction() + throws Exception { + TestHarness harness = createHarness(); + seedCache(harness, createMutationRecipeCacheUpdate()); + + Mutation deleteMutation = createDeleteMutation("b"); + + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + beginCall.start(new CapturingListener(), new Metadata()); + beginCall.sendMessage( + BeginTransactionRequest.newBuilder() + .setSession(SESSION) + .setMutationKey(deleteMutation) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + assertNotNull(beginDelegate.lastMessage); + RoutingHint expectedRoutingHint = beginDelegate.lastMessage.getRoutingHint(); + + ClientCall commitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + commitCall.start(new CapturingListener(), new Metadata()); + commitCall.sendMessage( + CommitRequest.newBuilder() + .setSession(SESSION) + .setSingleUseTransaction( + TransactionOptions.newBuilder() + .setReadWrite(TransactionOptions.ReadWrite.getDefaultInstance())) + .addMutations(createInsertMutation("a")) + .addMutations(deleteMutation) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall commitDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + assertNotNull(commitDelegate.lastMessage); + assertEquals(expectedRoutingHint, commitDelegate.lastMessage.getRoutingHint()); + } + + @Test + public void commitWithTransactionIdRoutesUsingRoutingHintWhenAffinityMissing() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("tx-without-affinity"); + seedCache(harness, createMutationRecipeCacheUpdate()); + + ClientCall firstCommitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + firstCommitCall.start(new CapturingListener(), new Metadata()); + firstCommitCall.sendMessage( + CommitRequest.newBuilder() + .setSession(SESSION) + .setTransactionId(transactionId) + .addMutations(createInsertMutation("b")) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall firstCommitDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + assertNotNull(firstCommitDelegate.lastMessage); + RoutingHint routingHint = firstCommitDelegate.lastMessage.getRoutingHint(); + assertFalse(routingHint.getKey().isEmpty()); + + seedCache(harness, createRangeCacheUpdateForHint(routingHint)); + + ClientCall secondCommitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + secondCommitCall.start(new CapturingListener(), new Metadata()); + secondCommitCall.sendMessage( + CommitRequest.newBuilder() + .setSession(SESSION) + .setTransactionId(transactionId) + .addMutations(createInsertMutation("b")) + .build()); + + assertThat(harness.endpointCache.callCountForAddress(DEFAULT_ADDRESS)).isEqualTo(3); + assertThat(harness.endpointCache.callCountForAddress("server-a:1234")).isEqualTo(1); + + @SuppressWarnings("unchecked") + RecordingClientCall commitDelegate = + (RecordingClientCall) + harness.endpointCache.latestCallForAddress("server-a:1234"); + + assertNotNull(commitDelegate.lastMessage); + assertEquals(7L, commitDelegate.lastMessage.getRoutingHint().getDatabaseId()); + assertEquals( + "1", commitDelegate.lastMessage.getRoutingHint().getSchemaGeneration().toStringUtf8()); + assertFalse(commitDelegate.lastMessage.getRoutingHint().getKey().isEmpty()); + } + + @Test + public void commitResponseCacheUpdateEnablesSubsequentBeginRoutingHint() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("tx-before-commit-cache-update"); + + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + beginCall.start(new CapturingListener(), new Metadata()); + beginCall.sendMessage(BeginTransactionRequest.newBuilder().setSession(SESSION).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + beginDelegate.emitOnMessage(Transaction.newBuilder().setId(transactionId).build()); + beginDelegate.emitOnClose(Status.OK, new Metadata()); + + ClientCall commitCall = + harness.channel.newCall(SpannerGrpc.getCommitMethod(), CallOptions.DEFAULT); + commitCall.start(new CapturingListener(), new Metadata()); + commitCall.sendMessage( + CommitRequest.newBuilder().setSession(SESSION).setTransactionId(transactionId).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall commitDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + commitDelegate.emitOnMessage( + CommitResponse.newBuilder().setCacheUpdate(createMutationRoutingCacheUpdate()).build()); + commitDelegate.emitOnClose(Status.OK, new Metadata()); + + Mutation mutation = createInsertMutation("b"); + ClientCall secondBeginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + secondBeginCall.start(new CapturingListener(), new Metadata()); + secondBeginCall.sendMessage( + BeginTransactionRequest.newBuilder().setSession(SESSION).setMutationKey(mutation).build()); + + @SuppressWarnings("unchecked") + RecordingClientCall routedBeginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + + assertNotNull(routedBeginDelegate.lastMessage); + assertEquals(7L, routedBeginDelegate.lastMessage.getRoutingHint().getDatabaseId()); + assertEquals( + "1", routedBeginDelegate.lastMessage.getRoutingHint().getSchemaGeneration().toStringUtf8()); + assertFalse(routedBeginDelegate.lastMessage.getRoutingHint().getKey().isEmpty()); + } + + @Test + public void readOnlyTransactionRoutesEachReadIndependently() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("ro-tx-1"); + + // 1. Begin a read-only transaction (stale read). + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + CapturingListener beginListener = new CapturingListener<>(); + beginCall.start(beginListener, new Metadata()); + beginCall.sendMessage( + BeginTransactionRequest.newBuilder() + .setSession(SESSION) + .setOptions( + TransactionOptions.newBuilder() + .setReadOnly( + TransactionOptions.ReadOnly.newBuilder() + .setReturnReadTimestamp(true) + .build())) + .build()); + + // BeginTransaction goes to default channel. + assertThat(harness.defaultManagedChannel.callCount()).isEqualTo(1); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + beginDelegate.emitOnMessage(Transaction.newBuilder().setId(transactionId).build()); + beginDelegate.emitOnClose(Status.OK, new Metadata()); + + // 2. Populate cache with routing data for two different key ranges. + CacheUpdate cacheUpdate = + CacheUpdate.newBuilder() + .setDatabaseId(7L) + .addRange( + Range.newBuilder() + .setStartKey(bytes("a")) + .setLimitKey(bytes("m")) + .setGroupUid(1L) + .setSplitId(1L) + .setGeneration(bytes("1"))) + .addRange( + Range.newBuilder() + .setStartKey(bytes("m")) + .setLimitKey(bytes("z")) + .setGroupUid(2L) + .setSplitId(2L) + .setGeneration(bytes("1"))) + .addGroup( + Group.newBuilder() + .setGroupUid(1L) + .setGeneration(bytes("1")) + .addTablets( + Tablet.newBuilder() + .setTabletUid(1L) + .setServerAddress("server-a:1234") + .setIncarnation(bytes("1")) + .setDistance(0))) + .addGroup( + Group.newBuilder() + .setGroupUid(2L) + .setGeneration(bytes("1")) + .addTablets( + Tablet.newBuilder() + .setTabletUid(2L) + .setServerAddress("server-b:1234") + .setIncarnation(bytes("1")) + .setDistance(0))) + .build(); + + // Seed the cache via a dummy query response with cache update. + ClientCall seedCall = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + seedCall.start(new CapturingListener(), new Metadata()); + seedCall.sendMessage( + ExecuteSqlRequest.newBuilder() + .setSession(SESSION) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("a")).build()) + .build()); + @SuppressWarnings("unchecked") + RecordingClientCall seedDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + seedDelegate.emitOnMessage(ResultSet.newBuilder().setCacheUpdate(cacheUpdate).build()); + + // 3. Send a streaming read with key in range [a, m) → should go to server-a. + ClientCall readCallA = + harness.channel.newCall(SpannerGrpc.getStreamingReadMethod(), CallOptions.DEFAULT); + readCallA.start(new CapturingListener(), new Metadata()); + readCallA.sendMessage( + ReadRequest.newBuilder() + .setSession(SESSION) + .setTransaction(TransactionSelector.newBuilder().setId(transactionId)) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("b")).build()) + .build()); + + assertThat(harness.endpointCache.callCountForAddress("server-a:1234")).isEqualTo(1); + + // 4. Send an ExecuteStreamingSql with key in range [m, z) → should go to server-b. + ClientCall queryCallB = + harness.channel.newCall(SpannerGrpc.getExecuteStreamingSqlMethod(), CallOptions.DEFAULT); + queryCallB.start(new CapturingListener(), new Metadata()); + queryCallB.sendMessage( + ExecuteSqlRequest.newBuilder() + .setSession(SESSION) + .setTransaction(TransactionSelector.newBuilder().setId(transactionId)) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("n")).build()) + .build()); + + assertThat(harness.endpointCache.callCountForAddress("server-b:1234")).isEqualTo(1); + + // Neither read was pinned to the default host (besides the initial begin + seed). + // default had: 1 begin + 1 seed = 2 calls + assertThat(harness.defaultManagedChannel.callCount()).isEqualTo(2); + } + + @Test + public void readOnlyInlinedBeginExecuteSqlRoutesSubsequentRequestsIndependently() + throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("ro-inline-sql"); + + seedCache(harness, createTwoRangeCacheUpdate()); + + // First query begins a read-only transaction inline and routes to server-a. + ClientCall firstCall = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + firstCall.start(new CapturingListener(), new Metadata()); + firstCall.sendMessage( + ExecuteSqlRequest.newBuilder() + .setSession(SESSION) + .setTransaction( + TransactionSelector.newBuilder() + .setBegin( + TransactionOptions.newBuilder() + .setReadOnly( + TransactionOptions.ReadOnly.newBuilder() + .setReturnReadTimestamp(true) + .build()) + .build())) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("b")).build()) + .build()); + + assertThat(harness.endpointCache.callCountForAddress("server-a:1234")).isEqualTo(1); + + @SuppressWarnings("unchecked") + RecordingClientCall firstDelegate = + (RecordingClientCall) + harness.endpointCache.latestCallForAddress("server-a:1234"); + firstDelegate.emitOnMessage( + ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setTransaction(Transaction.newBuilder().setId(transactionId))) + .build()); + + // Second query in same txn should route by key to server-b, not affinity-pin to server-a. + ClientCall secondCall = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + secondCall.start(new CapturingListener(), new Metadata()); + secondCall.sendMessage( + ExecuteSqlRequest.newBuilder() + .setSession(SESSION) + .setTransaction(TransactionSelector.newBuilder().setId(transactionId)) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("n")).build()) + .build()); + + assertThat(harness.endpointCache.callCountForAddress("server-a:1234")).isEqualTo(1); + assertThat(harness.endpointCache.callCountForAddress("server-b:1234")).isEqualTo(1); + assertThat(harness.defaultManagedChannel.callCount()).isEqualTo(1); + } + + @Test + public void readOnlyInlinedBeginReadRoutesSubsequentRequestsIndependently() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("ro-inline-read"); + + seedCache(harness, createTwoRangeCacheUpdate()); + + // First read begins a read-only transaction inline and routes to server-a. + ClientCall firstCall = + harness.channel.newCall(SpannerGrpc.getStreamingReadMethod(), CallOptions.DEFAULT); + firstCall.start(new CapturingListener(), new Metadata()); + firstCall.sendMessage( + ReadRequest.newBuilder() + .setSession(SESSION) + .setTransaction( + TransactionSelector.newBuilder() + .setBegin( + TransactionOptions.newBuilder() + .setReadOnly( + TransactionOptions.ReadOnly.newBuilder() + .setReturnReadTimestamp(true) + .build()) + .build())) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("b")).build()) + .build()); + + assertThat(harness.endpointCache.callCountForAddress("server-a:1234")).isEqualTo(1); + + @SuppressWarnings("unchecked") + RecordingClientCall firstDelegate = + (RecordingClientCall) + harness.endpointCache.latestCallForAddress("server-a:1234"); + firstDelegate.emitOnMessage( + PartialResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setTransaction(Transaction.newBuilder().setId(transactionId))) + .build()); + + // Second read in same txn should route by key to server-b, not affinity-pin to server-a. + ClientCall secondCall = + harness.channel.newCall(SpannerGrpc.getStreamingReadMethod(), CallOptions.DEFAULT); + secondCall.start(new CapturingListener(), new Metadata()); + secondCall.sendMessage( + ReadRequest.newBuilder() + .setSession(SESSION) + .setTransaction(TransactionSelector.newBuilder().setId(transactionId)) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("n")).build()) + .build()); + + assertThat(harness.endpointCache.callCountForAddress("server-a:1234")).isEqualTo(1); + assertThat(harness.endpointCache.callCountForAddress("server-b:1234")).isEqualTo(1); + assertThat(harness.defaultManagedChannel.callCount()).isEqualTo(1); + } + + @Test + public void readOnlyTransactionDoesNotRecordAffinity() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("ro-tx-2"); + + // Begin a read-only transaction. + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + beginCall.start(new CapturingListener(), new Metadata()); + beginCall.sendMessage( + BeginTransactionRequest.newBuilder() + .setSession(SESSION) + .setOptions( + TransactionOptions.newBuilder() + .setReadOnly( + TransactionOptions.ReadOnly.newBuilder() + .setReturnReadTimestamp(true) + .build())) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + beginDelegate.emitOnMessage(Transaction.newBuilder().setId(transactionId).build()); + beginDelegate.emitOnClose(Status.OK, new Metadata()); + + // No affinity should be recorded for the default endpoint. + // Verify by checking that the endpoint cache was never queried for affinity lookup. + // The default endpoint getCount tracks affinity lookups. + assertThat(harness.endpointCache.getCount(DEFAULT_ADDRESS)).isEqualTo(0); + + // Send a read using the transaction ID (no cache populated, so falls back to default). + ClientCall readCall = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + readCall.start(new CapturingListener(), new Metadata()); + readCall.sendMessage( + ExecuteSqlRequest.newBuilder() + .setSession(SESSION) + .setTransaction(TransactionSelector.newBuilder().setId(transactionId)) + .build()); + + // The read goes to default (no cache data), but NOT because of affinity. + // No affinity lookup should have been performed for the read-only txn. + assertThat(harness.endpointCache.getCount(DEFAULT_ADDRESS)).isEqualTo(0); + + // Now receive a response with the transaction ID — should NOT record affinity. + @SuppressWarnings("unchecked") + RecordingClientCall readDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + readDelegate.emitOnMessage( + ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setTransaction(Transaction.newBuilder().setId(transactionId))) + .build()); + + // Still no affinity recorded. + assertThat(harness.endpointCache.getCount(DEFAULT_ADDRESS)).isEqualTo(0); + } + + @Test + public void readOnlyTransactionCleanupOnClose() throws Exception { + TestHarness harness = createHarness(); + ByteString transactionId = ByteString.copyFromUtf8("ro-tx-3"); + + // Begin a read-only transaction. + ClientCall beginCall = + harness.channel.newCall(SpannerGrpc.getBeginTransactionMethod(), CallOptions.DEFAULT); + beginCall.start(new CapturingListener(), new Metadata()); + beginCall.sendMessage( + BeginTransactionRequest.newBuilder() + .setSession(SESSION) + .setOptions( + TransactionOptions.newBuilder() + .setReadOnly( + TransactionOptions.ReadOnly.newBuilder() + .setReturnReadTimestamp(true) + .build())) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall beginDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + beginDelegate.emitOnMessage(Transaction.newBuilder().setId(transactionId).build()); + beginDelegate.emitOnClose(Status.OK, new Metadata()); + + // Clear transaction affinity (simulates MultiUseReadOnlyTransaction.close()). + harness.channel.clearTransactionAffinity(transactionId); + } + + private static CacheUpdate createTwoRangeCacheUpdate() { + return CacheUpdate.newBuilder() + .setDatabaseId(7L) + .addRange( + Range.newBuilder() + .setStartKey(bytes("a")) + .setLimitKey(bytes("m")) + .setGroupUid(1L) + .setSplitId(1L) + .setGeneration(bytes("1"))) + .addRange( + Range.newBuilder() + .setStartKey(bytes("m")) + .setLimitKey(bytes("z")) + .setGroupUid(2L) + .setSplitId(2L) + .setGeneration(bytes("1"))) + .addGroup( + Group.newBuilder() + .setGroupUid(1L) + .setGeneration(bytes("1")) + .addTablets( + Tablet.newBuilder() + .setTabletUid(1L) + .setServerAddress("server-a:1234") + .setIncarnation(bytes("1")) + .setDistance(0))) + .addGroup( + Group.newBuilder() + .setGroupUid(2L) + .setGeneration(bytes("1")) + .addTablets( + Tablet.newBuilder() + .setTabletUid(2L) + .setServerAddress("server-b:1234") + .setIncarnation(bytes("1")) + .setDistance(0))) + .build(); + } + + private static CacheUpdate createMutationRoutingCacheUpdate() throws TextFormat.ParseException { + return createMutationRecipeCacheUpdate().toBuilder() + .mergeFrom( + createRangeCacheUpdateForHint(RoutingHint.newBuilder().setKey(bytes("a")).build())) + .build(); + } + + private static CacheUpdate createMutationRecipeCacheUpdate() throws TextFormat.ParseException { + RecipeList keyRecipes = + parseRecipeList( + "schema_generation: \"1\"\n" + + "recipe {\n" + + " table_name: \"T\"\n" + + " part { tag: 1 }\n" + + " part {\n" + + " order: ASCENDING\n" + + " null_order: NULLS_FIRST\n" + + " type { code: STRING }\n" + + " identifier: \"k\"\n" + + " }\n" + + "}\n"); + return CacheUpdate.newBuilder().setDatabaseId(7L).setKeyRecipes(keyRecipes).build(); + } + + private static CacheUpdate createRangeCacheUpdateForHint(RoutingHint hint) { + ByteString key = hint.getKey(); + ByteString limitKey = + hint.getLimitKey().isEmpty() + ? key.concat(ByteString.copyFrom(new byte[] {0})) + : hint.getLimitKey(); + return CacheUpdate.newBuilder() + .setDatabaseId(7L) + .addRange( + Range.newBuilder() + .setStartKey(key) + .setLimitKey(limitKey) + .setGroupUid(1L) + .setSplitId(1L) + .setGeneration(bytes("1"))) + .addGroup( + Group.newBuilder() + .setGroupUid(1L) + .setGeneration(bytes("1")) + .addTablets( + Tablet.newBuilder() + .setTabletUid(1L) + .setServerAddress("server-a:1234") + .setIncarnation(bytes("1")) + .setDistance(0))) + .build(); + } + + private static void seedCache(TestHarness harness, CacheUpdate cacheUpdate) { + ClientCall seedCall = + harness.channel.newCall(SpannerGrpc.getExecuteSqlMethod(), CallOptions.DEFAULT); + seedCall.start(new CapturingListener(), new Metadata()); + seedCall.sendMessage( + ExecuteSqlRequest.newBuilder() + .setSession(SESSION) + .setRoutingHint(RoutingHint.newBuilder().setKey(bytes("a")).build()) + .build()); + + @SuppressWarnings("unchecked") + RecordingClientCall seedDelegate = + (RecordingClientCall) + harness.defaultManagedChannel.latestCall(); + seedDelegate.emitOnMessage(ResultSet.newBuilder().setCacheUpdate(cacheUpdate).build()); + } + + private static Mutation createInsertMutation(String keyValue) { + return Mutation.newBuilder() + .setInsert( + Mutation.Write.newBuilder() + .setTable("T") + .addColumns("k") + .addValues( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue(keyValue).build()) + .build())) + .build(); + } + + private static Mutation createDeleteMutation(String keyValue) { + return Mutation.newBuilder() + .setDelete( + Mutation.Delete.newBuilder() + .setTable("T") + .setKeySet( + com.google.spanner.v1.KeySet.newBuilder() + .addKeys( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue(keyValue).build()) + .build()) + .build())) + .build(); + } + + private static RecipeList parseRecipeList(String text) throws TextFormat.ParseException { + RecipeList.Builder builder = RecipeList.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } + + private static TestHarness createHarness() throws IOException { + FakeEndpointCache endpointCache = new FakeEndpointCache(DEFAULT_ADDRESS); + InstantiatingGrpcChannelProvider provider = + InstantiatingGrpcChannelProvider.newBuilder().setEndpoint("localhost:9999").build(); + KeyAwareChannel channel = KeyAwareChannel.create(provider, baseProvider -> endpointCache); + return new TestHarness(channel, endpointCache, endpointCache.defaultManagedChannel()); + } + + private static final class TestHarness { + private final KeyAwareChannel channel; + private final FakeEndpointCache endpointCache; + private final FakeManagedChannel defaultManagedChannel; + + private TestHarness( + KeyAwareChannel channel, + FakeEndpointCache endpointCache, + FakeManagedChannel defaultManagedChannel) { + this.channel = channel; + this.endpointCache = endpointCache; + this.defaultManagedChannel = defaultManagedChannel; + } + } + + private static final class CapturingListener extends ClientCall.Listener { + private int closeCount; + @Nullable private Status closedStatus; + @Nullable private Metadata closedTrailers; + + @Override + public void onClose(Status status, Metadata trailers) { + this.closeCount++; + this.closedStatus = status; + this.closedTrailers = trailers; + } + } + + private static final class FakeEndpointCache implements ChannelEndpointCache { + private final String defaultAddress; + private final FakeEndpoint defaultEndpoint; + private final Map endpoints = new HashMap<>(); + private final Map getCount = new HashMap<>(); + + private FakeEndpointCache(String defaultAddress) { + this.defaultAddress = defaultAddress; + this.defaultEndpoint = new FakeEndpoint(defaultAddress); + } + + @Override + public ChannelEndpoint defaultChannel() { + return defaultEndpoint; + } + + @Override + public ChannelEndpoint get(String address) { + getCount.put(address, getCount.getOrDefault(address, 0) + 1); + if (defaultAddress.equals(address)) { + return defaultEndpoint; + } + return endpoints.computeIfAbsent(address, FakeEndpoint::new); + } + + @Override + public void evict(String address) { + endpoints.remove(address); + } + + @Override + public void shutdown() { + defaultEndpoint.channel.shutdown(); + for (FakeEndpoint endpoint : endpoints.values()) { + endpoint.channel.shutdown(); + } + endpoints.clear(); + } + + int getCount(String address) { + return getCount.getOrDefault(address, 0); + } + + FakeManagedChannel defaultManagedChannel() { + return defaultEndpoint.channel; + } + + int callCountForAddress(String address) { + if (defaultAddress.equals(address)) { + return defaultEndpoint.channel.callCount(); + } + FakeEndpoint endpoint = endpoints.get(address); + return endpoint == null ? 0 : endpoint.channel.callCount(); + } + + RecordingClientCall latestCallForAddress(String address) { + if (defaultAddress.equals(address)) { + return defaultEndpoint.channel.latestCall(); + } + FakeEndpoint endpoint = endpoints.get(address); + if (endpoint == null) { + throw new IllegalStateException("No endpoint for address: " + address); + } + return endpoint.channel.latestCall(); + } + } + + private static final class FakeEndpoint implements ChannelEndpoint { + private final String address; + private final FakeManagedChannel channel; + + private FakeEndpoint(String address) { + this.address = address; + this.channel = new FakeManagedChannel(address); + } + + @Override + public String getAddress() { + return address; + } + + @Override + public boolean isHealthy() { + return true; + } + + @Override + public ManagedChannel getChannel() { + return channel; + } + } + + private static final class FakeManagedChannel extends ManagedChannel { + private final String authority; + private final List> calls = new ArrayList<>(); + private boolean shutdown; + + private FakeManagedChannel(String authority) { + this.authority = authority; + } + + @Override + public ManagedChannel shutdown() { + shutdown = true; + return this; + } + + @Override + public ManagedChannel shutdownNow() { + shutdown = true; + return this; + } + + @Override + public boolean isShutdown() { + return shutdown; + } + + @Override + public boolean isTerminated() { + return shutdown; + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) { + return shutdown; + } + + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + RecordingClientCall call = new RecordingClientCall<>(); + calls.add(call); + return call; + } + + @Override + public String authority() { + return authority; + } + + int callCount() { + return calls.size(); + } + + RecordingClientCall latestCall() { + return calls.get(calls.size() - 1); + } + } + + private static final class RecordingClientCall + extends ClientCall { + @Nullable private ClientCall.Listener listener; + @Nullable private RequestT lastMessage; + private boolean cancelCalled; + @Nullable private String cancelMessage; + @Nullable private Throwable cancelCause; + + @Override + public void start(ClientCall.Listener responseListener, Metadata headers) { + this.listener = responseListener; + } + + @Override + public void request(int numMessages) {} + + @Override + public void cancel(@Nullable String message, @Nullable Throwable cause) { + this.cancelCalled = true; + this.cancelMessage = message; + this.cancelCause = cause; + } + + @Override + public void halfClose() {} + + @Override + public void sendMessage(RequestT message) { + this.lastMessage = message; + } + + void emitOnMessage(ResponseT response) { + if (listener != null) { + listener.onMessage(response); + } + } + + void emitOnClose(Status status, Metadata trailers) { + if (listener != null) { + listener.onClose(status, trailers); + } + } + } + + private static ByteString bytes(String value) { + return ByteString.copyFromUtf8(value); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRangeCacheGoldenTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRangeCacheGoldenTest.java new file mode 100644 index 00000000000..763a36dbfd6 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRangeCacheGoldenTest.java @@ -0,0 +1,204 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import com.google.protobuf.TextFormat; +import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.RoutingHint; +import io.grpc.CallOptions; +import io.grpc.ClientCall; +import io.grpc.ManagedChannel; +import io.grpc.MethodDescriptor; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeUnit; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import spanner.cloud.location.RangeCacheTestCase; +import spanner.cloud.location.RangeCacheTestCases; + +@RunWith(JUnit4.class) +public class KeyRangeCacheGoldenTest { + + private static final int DEFAULT_MIN_ENTRIES_FOR_RANDOM_PICK = 1000; + + @Test + public void goldenTest() throws Exception { + RangeCacheTestCases.Builder builder = RangeCacheTestCases.newBuilder(); + try (InputStream inputStream = + getClass().getClassLoader().getResourceAsStream("range_cache_test.textproto"); + InputStreamReader reader = + new InputStreamReader(Objects.requireNonNull(inputStream), StandardCharsets.UTF_8)) { + TextFormat.merge(reader, builder); + } + + RangeCacheTestCases testCases = builder.build(); + + for (RangeCacheTestCase testCase : testCases.getTestCaseList()) { + FakeEndpointCache endpointCache = new FakeEndpointCache(); + KeyRangeCache cache = new KeyRangeCache(endpointCache); + cache.useDeterministicRandom(); + + for (RangeCacheTestCase.Step step : testCase.getStepList()) { + if (step.hasUpdate()) { + cache.addRanges(step.getUpdate()); + } + for (RangeCacheTestCase.Step.Test test : step.getTestList()) { + cache.setMinCacheEntriesForRandomPick(DEFAULT_MIN_ENTRIES_FOR_RANDOM_PICK); + int minEntries = test.getMinCacheEntriesForRandomPick(); + if (minEntries != 0) { + cache.setMinCacheEntriesForRandomPick(minEntries); + } + + RoutingHint.Builder hintBuilder = RoutingHint.newBuilder(); + if (!test.getKey().isEmpty()) { + hintBuilder.setKey(test.getKey()); + } + if (!test.getLimitKey().isEmpty()) { + hintBuilder.setLimitKey(test.getLimitKey()); + } + + DirectedReadOptions directedReadOptions = + test.hasDirectedReadOptions() + ? test.getDirectedReadOptions() + : DirectedReadOptions.getDefaultInstance(); + + KeyRangeCache.RangeMode rangeMode = + test.getRangeMode() == RangeCacheTestCase.Step.Test.RangeMode.PICK_RANDOM + ? KeyRangeCache.RangeMode.PICK_RANDOM + : KeyRangeCache.RangeMode.COVERING_SPLIT; + + ChannelEndpoint server = + cache.fillRoutingHint(test.getLeader(), rangeMode, directedReadOptions, hintBuilder); + + assertEquals( + "RoutingHint mismatch for test case: " + testCase.getName(), + test.getResult(), + hintBuilder.build()); + if (!test.getServer().isEmpty()) { + assertNotNull("Expected server for test case: " + testCase.getName(), server); + assertEquals(test.getServer(), server.getAddress()); + } else { + assertNull("Expected no server for test case: " + testCase.getName(), server); + } + } + } + + cache.clear(); + } + } + + private static final class FakeEndpointCache implements ChannelEndpointCache { + private final Map endpoints = new HashMap<>(); + private final FakeEndpoint defaultEndpoint = new FakeEndpoint("default"); + + @Override + public ChannelEndpoint defaultChannel() { + return defaultEndpoint; + } + + @Override + public ChannelEndpoint get(String address) { + return endpoints.computeIfAbsent(address, FakeEndpoint::new); + } + + @Override + public void evict(String address) { + endpoints.remove(address); + } + + @Override + public void shutdown() { + endpoints.clear(); + } + } + + private static final class FakeEndpoint implements ChannelEndpoint { + private final String address; + private final ManagedChannel channel = new FakeManagedChannel(); + + FakeEndpoint(String address) { + this.address = address; + } + + @Override + public String getAddress() { + return address; + } + + @Override + public boolean isHealthy() { + return true; + } + + @Override + public ManagedChannel getChannel() { + return channel; + } + } + + private static final class FakeManagedChannel extends ManagedChannel { + private boolean shutdown = false; + + @Override + public ManagedChannel shutdown() { + shutdown = true; + return this; + } + + @Override + public boolean isShutdown() { + return shutdown; + } + + @Override + public boolean isTerminated() { + return shutdown; + } + + @Override + public ManagedChannel shutdownNow() { + shutdown = true; + return this; + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) { + return shutdown; + } + + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + throw new UnsupportedOperationException(); + } + + @Override + public String authority() { + return "fake"; + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRangeCacheTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRangeCacheTest.java new file mode 100644 index 00000000000..2405aa7a062 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRangeCacheTest.java @@ -0,0 +1,271 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import com.google.protobuf.ByteString; +import com.google.spanner.v1.CacheUpdate; +import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.Group; +import com.google.spanner.v1.Range; +import com.google.spanner.v1.RoutingHint; +import com.google.spanner.v1.Tablet; +import io.grpc.CallOptions; +import io.grpc.ClientCall; +import io.grpc.ManagedChannel; +import io.grpc.MethodDescriptor; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class KeyRangeCacheTest { + + @Test + public void skipsUnhealthyTabletAfterItIsCached() { + FakeEndpointCache endpointCache = new FakeEndpointCache(); + KeyRangeCache cache = new KeyRangeCache(endpointCache); + + cache.addRanges( + CacheUpdate.newBuilder() + .addRange( + Range.newBuilder() + .setStartKey(bytes("a")) + .setLimitKey(bytes("z")) + .setGroupUid(5) + .setSplitId(1) + .setGeneration(bytes("1"))) + .addGroup( + Group.newBuilder() + .setGroupUid(5) + .setGeneration(bytes("1")) + .setLeaderIndex(0) + .addTablets( + Tablet.newBuilder() + .setTabletUid(1) + .setServerAddress("server1") + .setIncarnation(bytes("1")) + .setDistance(0)) + .addTablets( + Tablet.newBuilder() + .setTabletUid(2) + .setServerAddress("server2") + .setIncarnation(bytes("1")) + .setDistance(0))) + .build()); + + RoutingHint.Builder initialHint = RoutingHint.newBuilder().setKey(bytes("a")); + ChannelEndpoint initialServer = + cache.fillRoutingHint( + /* preferLeader= */ false, + KeyRangeCache.RangeMode.COVERING_SPLIT, + DirectedReadOptions.getDefaultInstance(), + initialHint); + assertNotNull(initialServer); + + endpointCache.setHealthy("server1", false); + + RoutingHint.Builder hint = RoutingHint.newBuilder().setKey(bytes("a")); + ChannelEndpoint server = + cache.fillRoutingHint( + /* preferLeader= */ false, + KeyRangeCache.RangeMode.COVERING_SPLIT, + DirectedReadOptions.getDefaultInstance(), + hint); + + assertNotNull(server); + assertEquals("server2", server.getAddress()); + assertEquals(1, hint.getSkippedTabletUidCount()); + assertEquals(1L, hint.getSkippedTabletUid(0).getTabletUid()); + } + + @Test + public void shrinkToEvictsRanges() { + FakeEndpointCache endpointCache = new FakeEndpointCache(); + KeyRangeCache cache = new KeyRangeCache(endpointCache); + + final int numRanges = 100; + for (int i = 0; i < numRanges; i++) { + CacheUpdate update = + CacheUpdate.newBuilder() + .addRange( + Range.newBuilder() + .setStartKey(bytes(String.format("%04d", i))) + .setLimitKey(bytes(String.format("%04d", i + 1))) + .setGroupUid(i) + .setSplitId(i) + .setGeneration(bytes("1"))) + .addGroup( + Group.newBuilder() + .setGroupUid(i) + .setGeneration(bytes("1")) + .addTablets( + Tablet.newBuilder() + .setTabletUid(i) + .setServerAddress("server" + i) + .setIncarnation(bytes("1")))) + .build(); + cache.addRanges(update); + } + + checkContents(cache, numRanges, numRanges); + + int shrinkTo = numRanges - numRanges / 4; + cache.shrinkTo(shrinkTo); + checkContents(cache, shrinkTo, 3 * numRanges / 4); + + cache.shrinkTo(numRanges / 8); + checkContents(cache, numRanges / 8, 7 * numRanges / 8); + + cache.shrinkTo(0); + checkContents(cache, 0, numRanges); + } + + private static void checkContents(KeyRangeCache cache, int expectedSize, int mustBeInCache) { + assertEquals(expectedSize, cache.size()); + int hitCount = 0; + for (int i = 0; i < 100; i++) { + RoutingHint.Builder hint = RoutingHint.newBuilder().setKey(bytes(String.format("%04d", i))); + ChannelEndpoint server = + cache.fillRoutingHint( + /* preferLeader= */ false, + KeyRangeCache.RangeMode.COVERING_SPLIT, + DirectedReadOptions.getDefaultInstance(), + hint); + if (i > mustBeInCache) { + assertNotNull(server); + } + if (server != null) { + hitCount++; + assertEquals("server" + i, server.getAddress()); + } + } + assertEquals(expectedSize, hitCount); + } + + private static ByteString bytes(String value) { + return ByteString.copyFromUtf8(value); + } + + private static final class FakeEndpointCache implements ChannelEndpointCache { + private final Map endpoints = new HashMap<>(); + private final FakeEndpoint defaultEndpoint = new FakeEndpoint("default"); + + @Override + public ChannelEndpoint defaultChannel() { + return defaultEndpoint; + } + + @Override + public ChannelEndpoint get(String address) { + return endpoints.computeIfAbsent(address, FakeEndpoint::new); + } + + @Override + public void evict(String address) { + endpoints.remove(address); + } + + @Override + public void shutdown() { + endpoints.clear(); + } + + void setHealthy(String address, boolean healthy) { + FakeEndpoint endpoint = endpoints.get(address); + if (endpoint != null) { + endpoint.setHealthy(healthy); + } + } + } + + private static final class FakeEndpoint implements ChannelEndpoint { + private final String address; + private final ManagedChannel channel = new FakeManagedChannel(); + private boolean healthy = true; + + FakeEndpoint(String address) { + this.address = address; + } + + @Override + public String getAddress() { + return address; + } + + @Override + public boolean isHealthy() { + return healthy; + } + + @Override + public ManagedChannel getChannel() { + return channel; + } + + void setHealthy(boolean healthy) { + this.healthy = healthy; + } + } + + private static final class FakeManagedChannel extends ManagedChannel { + private boolean shutdown = false; + + @Override + public ManagedChannel shutdown() { + shutdown = true; + return this; + } + + @Override + public boolean isShutdown() { + return shutdown; + } + + @Override + public boolean isTerminated() { + return shutdown; + } + + @Override + public ManagedChannel shutdownNow() { + shutdown = true; + return this; + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) { + return shutdown; + } + + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + throw new UnsupportedOperationException(); + } + + @Override + public String authority() { + return "fake"; + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRecipeCacheTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRecipeCacheTest.java new file mode 100644 index 00000000000..bcf89e529aa --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRecipeCacheTest.java @@ -0,0 +1,201 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import com.google.protobuf.TextFormat; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ReadRequest; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class KeyRecipeCacheTest { + + @Test + public void fingerprintReadUsesShape() throws Exception { + ReadRequest req = + parseRead( + "table: \"T\"\n" + + "columns: \"c1\"\n" + + "columns: \"c2\"\n" + + "key_set { keys { values { string_value: \"foo\" } } }\n"); + + long fp = KeyRecipeCache.fingerprint(req); + assertNotEquals(0, fp); + assertEquals(fp, KeyRecipeCache.fingerprint(req)); + + ReadRequest diffTable = ReadRequest.newBuilder(req).setTable("U").build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(diffTable)); + + ReadRequest diffIndex = ReadRequest.newBuilder(req).setIndex("I").build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(diffIndex)); + + ReadRequest diffColumn = ReadRequest.newBuilder(req).setColumns(0, "c3").build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(diffColumn)); + + ReadRequest extraColumn = ReadRequest.newBuilder(req).addColumns("c4").build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(extraColumn)); + + ReadRequest removeColumn = ReadRequest.newBuilder(req).clearColumns().addColumns("c1").build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(removeColumn)); + + ReadRequest sameShape = + ReadRequest.newBuilder(req) + .clearKeySet() + .setKeySet(req.getKeySet().toBuilder().build()) + .build(); + assertEquals(fp, KeyRecipeCache.fingerprint(sameShape)); + + ReadRequest.Builder diffKeyValueBuilder = ReadRequest.newBuilder(req); + diffKeyValueBuilder + .getKeySetBuilder() + .getKeysBuilder(0) + .getValuesBuilder(0) + .setStringValue("bar"); + ReadRequest diffKeyValue = diffKeyValueBuilder.build(); + assertEquals(fp, KeyRecipeCache.fingerprint(diffKeyValue)); + } + + @Test + public void fingerprintExecuteSqlUsesParamShape() throws Exception { + ExecuteSqlRequest req = + parseExecuteSql( + "sql: \"SELECT * FROM T WHERE p1 = @p1 AND p2 = @p2\"\n" + + "params {\n" + + " fields { key: \"p1\" value { string_value: \"foo\" } }\n" + + " fields { key: \"p2\" value { string_value: \"99\" } }\n" + + "}\n" + + "param_types { key: \"p2\" value { code: INT64 } }\n" + + "query_options {\n" + + " optimizer_version: \"1\"\n" + + " optimizer_statistics_package: \"stats\"\n" + + "}\n"); + + long fp = KeyRecipeCache.fingerprint(req); + assertNotEquals(0, fp); + assertEquals(fp, KeyRecipeCache.fingerprint(req)); + + ExecuteSqlRequest diffSql = ExecuteSqlRequest.newBuilder(req).setSql("SELECT * FROM U").build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(diffSql)); + + ExecuteSqlRequest.Builder removeParamBuilder = ExecuteSqlRequest.newBuilder(req); + removeParamBuilder.getParamsBuilder().removeFields("p1"); + ExecuteSqlRequest removeParam = removeParamBuilder.build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(removeParam)); + + ExecuteSqlRequest.Builder addParamBuilder = ExecuteSqlRequest.newBuilder(req); + addParamBuilder.getParamsBuilder().putFields("p3", parseValue("string_value: \"foo\"")); + ExecuteSqlRequest addParam = addParamBuilder.build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(addParam)); + + ExecuteSqlRequest changeType = + ExecuteSqlRequest.newBuilder(req).putParamTypes("p1", parseType("code: BYTES")).build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(changeType)); + + ExecuteSqlRequest.Builder changeParamValueBuilder = ExecuteSqlRequest.newBuilder(req); + changeParamValueBuilder.getParamsBuilder().putFields("p1", parseValue("string_value: \"bar\"")); + ExecuteSqlRequest changeParamValue = changeParamValueBuilder.build(); + assertEquals(fp, KeyRecipeCache.fingerprint(changeParamValue)); + + ExecuteSqlRequest.Builder changeKindBuilder = ExecuteSqlRequest.newBuilder(req); + changeKindBuilder.getParamsBuilder().putFields("p1", parseValue("bool_value: true")); + ExecuteSqlRequest changeKind = changeKindBuilder.build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(changeKind)); + + ExecuteSqlRequest.Builder changeOptionsBuilder = ExecuteSqlRequest.newBuilder(req); + changeOptionsBuilder.getQueryOptionsBuilder().setOptimizerStatisticsPackage("stats_v2"); + ExecuteSqlRequest changeOptions = changeOptionsBuilder.build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(changeOptions)); + + ExecuteSqlRequest.Builder changeOptimizerBuilder = ExecuteSqlRequest.newBuilder(req); + changeOptimizerBuilder.getQueryOptionsBuilder().setOptimizerVersion("2"); + ExecuteSqlRequest changeOptimizer = changeOptimizerBuilder.build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(changeOptimizer)); + + ExecuteSqlRequest clearOptions = ExecuteSqlRequest.newBuilder(req).clearQueryOptions().build(); + assertNotEquals(fp, KeyRecipeCache.fingerprint(clearOptions)); + } + + @Test + public void computeKeysSetsRoutingHint() throws Exception { + KeyRecipeCache cache = new KeyRecipeCache(); + cache.addRecipes( + parseRecipeList( + "schema_generation: \"1\"\n" + + "recipe {\n" + + " table_name: \"T\"\n" + + " part { tag: 1 }\n" + + " part {\n" + + " order: ASCENDING\n" + + " null_order: NULLS_FIRST\n" + + " type { code: STRING }\n" + + " identifier: \"k\"\n" + + " }\n" + + "}\n")); + + ReadRequest.Builder request = + parseRead( + "table: \"T\"\n" + + "columns: \"c1\"\n" + + "key_set { keys { values { string_value: \"foo\" } } }\n") + .toBuilder(); + + cache.computeKeys(request); + assertTrue(request.getRoutingHint().getOperationUid() > 0); + assertEquals("1", request.getRoutingHint().getSchemaGeneration().toStringUtf8()); + assertTrue(request.getRoutingHint().getKey().size() > 0); + } + + private static ReadRequest parseRead(String text) throws TextFormat.ParseException { + ReadRequest.Builder builder = ReadRequest.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } + + private static ExecuteSqlRequest parseExecuteSql(String text) throws TextFormat.ParseException { + ExecuteSqlRequest.Builder builder = ExecuteSqlRequest.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } + + private static com.google.protobuf.Value parseValue(String text) + throws TextFormat.ParseException { + com.google.protobuf.Value.Builder builder = com.google.protobuf.Value.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } + + private static com.google.spanner.v1.Type parseType(String text) + throws TextFormat.ParseException { + com.google.spanner.v1.Type.Builder builder = com.google.spanner.v1.Type.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } + + private static com.google.spanner.v1.RecipeList parseRecipeList(String text) + throws TextFormat.ParseException { + com.google.spanner.v1.RecipeList.Builder builder = + com.google.spanner.v1.RecipeList.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRecipeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRecipeTest.java new file mode 100644 index 00000000000..3e946f10dc4 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/KeyRecipeTest.java @@ -0,0 +1,181 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.protobuf.ByteString; +import com.google.protobuf.Struct; +import com.google.protobuf.TextFormat; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class KeyRecipeTest { + + @Test + public void queryParamsUsesStructIdentifiers() throws Exception { + com.google.spanner.v1.KeyRecipe recipeProto = + createRecipe( + "part { tag: 1 }\n" + + "part {\n" + + " order: ASCENDING\n" + + " null_order: NULLS_FIRST\n" + + " type { code: STRING }\n" + + " identifier: \"p0\"\n" + + " struct_identifiers: 1\n" + + "}\n"); + + Struct params = + parseStruct( + "fields {\n" + + " key: \"p0\"\n" + + " value {\n" + + " list_value { values { string_value: \"a\" } values { string_value: \"b\" }" + + " }\n" + + " }\n" + + "}\n"); + + KeyRecipe recipe = KeyRecipe.create(recipeProto); + TargetRange target = recipe.queryParamsToTargetRange(params); + assertEquals(expectedKey("b"), target.start); + assertTrue(target.limit.isEmpty()); + } + + @Test + public void queryParamsUsesConstantValue() throws Exception { + com.google.spanner.v1.KeyRecipe recipeProto = + createRecipe( + "part { tag: 1 }\n" + + "part {\n" + + " order: ASCENDING\n" + + " null_order: NULLS_FIRST\n" + + " type { code: STRING }\n" + + " value { string_value: \"const\" }\n" + + "}\n"); + + KeyRecipe recipe = KeyRecipe.create(recipeProto); + TargetRange target = recipe.queryParamsToTargetRange(Struct.getDefaultInstance()); + assertEquals(expectedKey("const"), target.start); + assertTrue(target.limit.isEmpty()); + } + + @Test + public void queryParamsCaseInsensitiveFallback() throws Exception { + com.google.spanner.v1.KeyRecipe recipeProto = + createRecipe( + "part { tag: 1 }\n" + + "part {\n" + + " order: ASCENDING\n" + + " null_order: NULLS_FIRST\n" + + " type { code: STRING }\n" + + " identifier: \"id\"\n" + + "}\n"); + + Struct params = + parseStruct( + "fields {\n" + " key: \"Id\"\n" + " value { string_value: \"foo\" }\n" + "}\n"); + + KeyRecipe recipe = KeyRecipe.create(recipeProto); + TargetRange target = recipe.queryParamsToTargetRange(params); + assertEquals(expectedKey("foo"), target.start); + assertTrue(target.limit.isEmpty()); + } + + @Test + public void queryParamsCaseInsensitiveDuplicateUsesLastValue() throws Exception { + com.google.spanner.v1.KeyRecipe recipeProto = + createRecipe( + "part { tag: 1 }\n" + + "part {\n" + + " order: ASCENDING\n" + + " null_order: NULLS_FIRST\n" + + " type { code: STRING }\n" + + " identifier: \"ID\"\n" + + "}\n"); + + // Both "Id" and "id" normalize to "id"; the last one ("id"→"bar") wins. + Struct params = + parseStruct( + "fields {\n" + + " key: \"Id\"\n" + + " value { string_value: \"foo\" }\n" + + "}\n" + + "fields {\n" + + " key: \"id\"\n" + + " value { string_value: \"bar\" }\n" + + "}\n"); + + KeyRecipe recipe = KeyRecipe.create(recipeProto); + TargetRange target = recipe.queryParamsToTargetRange(params); + assertEquals(expectedKey("bar"), target.start); + assertFalse(target.approximate); + assertTrue(target.limit.isEmpty()); + } + + @Test + public void queryParamsCaseInsensitiveSafeForTurkishDotI() throws Exception { + // Turkish upper-case İ (U+0130) lower-cases to two characters under Locale.ROOT + // (i + combining dot above), so "SİCİL".length() != "SİCİL".toLowerCase(ROOT).length() + // and "SİCİL".equalsIgnoreCase("SİCİL".toLowerCase(ROOT)) is false. + // This is still safe because both the recipe identifier (server-sent) and the user's + // bound parameter name go through the same Locale.ROOT lower-casing before the + // HashMap lookup, so they produce the same string on both sides and the match succeeds. + com.google.spanner.v1.KeyRecipe recipeProto = + createRecipe( + "part { tag: 1 }\n" + + "part {\n" + + " order: ASCENDING\n" + + " null_order: NULLS_FIRST\n" + + " type { code: STRING }\n" + + " identifier: \"SİCİL\"\n" + + "}\n"); + + Struct params = + parseStruct( + "fields {\n" + " key: \"SİCİL\"\n" + " value { string_value: \"test\" }\n" + "}\n"); + + KeyRecipe recipe = KeyRecipe.create(recipeProto); + TargetRange target = recipe.queryParamsToTargetRange(params); + assertEquals(expectedKey("test"), target.start); + assertTrue(target.limit.isEmpty()); + } + + private static com.google.spanner.v1.KeyRecipe createRecipe(String text) + throws TextFormat.ParseException { + com.google.spanner.v1.KeyRecipe.Builder builder = com.google.spanner.v1.KeyRecipe.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } + + private static Struct parseStruct(String text) throws TextFormat.ParseException { + Struct.Builder builder = Struct.newBuilder(); + TextFormat.merge(text, builder); + return builder.build(); + } + + private static ByteString expectedKey(String value) { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendCompositeTag(out, 1); + SsFormat.appendNotNullMarkerNullOrderedFirst(out); + SsFormat.appendStringIncreasing(out, value); + return ByteString.copyFrom(out.toByteArray()); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/RecipeGoldenTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/RecipeGoldenTest.java new file mode 100644 index 00000000000..dc1fde01f0c --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/RecipeGoldenTest.java @@ -0,0 +1,128 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertEquals; + +import com.google.protobuf.TextFormat; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import spanner.cloud.location.RecipeTestCase; +import spanner.cloud.location.RecipeTestCases; + +@RunWith(JUnit4.class) +public class RecipeGoldenTest { + + // Pattern to match unknown TypeCode enum values (e.g., TOKENLIST) and replace with + // TYPE_CODE_UNSPECIFIED. This handles cases where the textproto contains enum values + // not yet available in the public API. + private static final Pattern UNKNOWN_TYPE_CODE_PATTERN = Pattern.compile("code:\\s*TOKENLIST"); + + @Test + public void goldenTest() throws Exception { + String content; + try (InputStream inputStream = + getClass().getClassLoader().getResourceAsStream("recipe_test.textproto"); + BufferedReader reader = + new BufferedReader( + new InputStreamReader( + Objects.requireNonNull(inputStream), StandardCharsets.UTF_8))) { + content = reader.lines().collect(Collectors.joining("\n")); + } + + // Replace unknown enum values with TYPE_CODE_UNSPECIFIED so parsing succeeds. + // Test cases with unrecognized types will produce invalid recipes that get skipped. + content = UNKNOWN_TYPE_CODE_PATTERN.matcher(content).replaceAll("code: TYPE_CODE_UNSPECIFIED"); + + RecipeTestCases.Builder builder = RecipeTestCases.newBuilder(); + TextFormat.merge(content, builder); + + RecipeTestCases testCases = builder.build(); + + for (RecipeTestCase testCase : testCases.getTestCaseList()) { + if (testCase.getName().contains("Random")) { + continue; + } + + if (testCase.getRecipes().getRecipeCount() == 0) { + continue; + } + + KeyRecipe recipe; + try { + recipe = KeyRecipe.create(testCase.getRecipes().getRecipe(0)); + } catch (IllegalArgumentException e) { + for (RecipeTestCase.Test test : testCase.getTestList()) { + assertEquals( + "Invalid recipe should result in approximate=true in test case: " + + testCase.getName(), + true, + test.getApproximate()); + } + continue; + } + + int testNum = 0; + for (RecipeTestCase.Test test : testCase.getTestList()) { + testNum++; + + TargetRange target; + switch (test.getOperationCase()) { + case KEY: + target = recipe.keyToTargetRange(test.getKey()); + break; + case KEY_RANGE: + target = recipe.keyRangeToTargetRange(test.getKeyRange()); + break; + case KEY_SET: + target = recipe.keySetToTargetRange(test.getKeySet()); + break; + case MUTATION: + target = recipe.mutationToTargetRange(test.getMutation()); + break; + case QUERY_PARAMS: + target = recipe.queryParamsToTargetRange(test.getQueryParams()); + break; + case OPERATION_NOT_SET: + default: + throw new UnsupportedOperationException("Unsupported operation in test case"); + } + + assertEquals( + "Start mismatch in test case: " + testCase.getName() + " test #" + testNum, + test.getStart(), + target.start); + assertEquals( + "Limit mismatch in test case: " + testCase.getName() + " test #" + testNum, + test.getLimit(), + target.limit); + assertEquals( + "Approximate mismatch in test case: " + testCase.getName() + " test #" + testNum, + test.getApproximate(), + target.approximate); + } + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/RequestIdInterceptorTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/RequestIdInterceptorTest.java new file mode 100644 index 00000000000..266a90a3aa5 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/RequestIdInterceptorTest.java @@ -0,0 +1,326 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static com.google.cloud.spanner.XGoogSpannerRequestId.REQUEST_ID_CALL_OPTIONS_KEY; +import static com.google.cloud.spanner.XGoogSpannerRequestId.REQUEST_ID_HEADER_KEY; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.grpc.GcpManagedChannel; +import com.google.cloud.spanner.XGoogSpannerRequestId; +import io.grpc.CallOptions; +import io.grpc.Channel; +import io.grpc.ClientCall; +import io.grpc.Metadata; +import io.grpc.MethodDescriptor; +import io.grpc.MethodDescriptor.Marshaller; +import java.io.InputStream; +import java.util.concurrent.atomic.AtomicReference; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Unit tests for {@link RequestIdInterceptor}. */ +@RunWith(JUnit4.class) +public class RequestIdInterceptorTest { + + // Pattern to parse request ID: version.randProcessId.clientId.channelId.requestId.attempt + private static final Pattern REQUEST_ID_PATTERN = + Pattern.compile("^(\\d)\\.([0-9a-z]{16})\\.(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$"); + + @Test + public void testInterceptorSetsRequestIdHeader() { + RequestIdInterceptor interceptor = new RequestIdInterceptor(); + XGoogSpannerRequestId requestId = XGoogSpannerRequestId.of(1, 2, 3, 0); + CallOptions callOptions = + CallOptions.DEFAULT.withOption(REQUEST_ID_CALL_OPTIONS_KEY, requestId); + + AtomicReference capturedHeaders = new AtomicReference<>(); + + Channel fakeChannel = + new FakeChannel() { + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + return new FakeClientCall() { + @Override + public void start(Listener responseListener, Metadata headers) { + capturedHeaders.set(headers); + } + }; + } + }; + + MethodDescriptor methodDescriptor = createMethodDescriptor(); + ClientCall call = + interceptor.interceptCall(methodDescriptor, callOptions, fakeChannel); + call.start(new NoOpListener<>(), new Metadata()); + + assertNotNull(capturedHeaders.get()); + String headerValue = capturedHeaders.get().get(REQUEST_ID_HEADER_KEY); + assertNotNull(headerValue); + + // Verify the header matches the expected pattern with attempt incremented to 1. + Matcher matcher = REQUEST_ID_PATTERN.matcher(headerValue); + assertTrue("Header value should match request ID pattern", matcher.matches()); + // Attempt should be 1 (incremented from 0). + assertTrue("Attempt should be 1", headerValue.endsWith(".1")); + } + + @Test + public void testInterceptorUpdatesChannelIdFromGrpcGcp() { + RequestIdInterceptor interceptor = new RequestIdInterceptor(); + + // Start with channel ID 0 (placeholder when DCP is enabled). + XGoogSpannerRequestId requestId = XGoogSpannerRequestId.of(1, 0, 3, 0); + + // Simulate grpc-gcp setting the actual channel ID (0-based) in CallOptions. + int gcpChannelId = 5; // grpc-gcp channel IDs are 0-based. + CallOptions callOptions = + CallOptions.DEFAULT + .withOption(REQUEST_ID_CALL_OPTIONS_KEY, requestId) + .withOption(GcpManagedChannel.CHANNEL_ID_KEY, gcpChannelId); + + AtomicReference capturedHeaders = new AtomicReference<>(); + + Channel fakeChannel = + new FakeChannel() { + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + return new FakeClientCall() { + @Override + public void start(Listener responseListener, Metadata headers) { + capturedHeaders.set(headers); + } + }; + } + }; + + MethodDescriptor methodDescriptor = createMethodDescriptor(); + ClientCall call = + interceptor.interceptCall(methodDescriptor, callOptions, fakeChannel); + call.start(new NoOpListener<>(), new Metadata()); + + assertNotNull(capturedHeaders.get()); + String headerValue = capturedHeaders.get().get(REQUEST_ID_HEADER_KEY); + assertNotNull(headerValue); + + // Parse the header and verify the channel ID was updated. + // Expected channel ID in header is gcpChannelId + 1 = 6. + Matcher matcher = REQUEST_ID_PATTERN.matcher(headerValue); + assertTrue("Header value should match request ID pattern", matcher.matches()); + String channelIdStr = matcher.group(4); + // Channel ID should be gcpChannelId + 1 = 6. + assertTrue( + "Channel ID should be " + (gcpChannelId + 1), + channelIdStr.equals(String.valueOf(gcpChannelId + 1))); + } + + @Test + public void testInterceptorDoesNotUpdateChannelIdWhenNotProvided() { + RequestIdInterceptor interceptor = new RequestIdInterceptor(); + + // Start with a specific channel ID. + long originalChannelId = 3; + XGoogSpannerRequestId requestId = XGoogSpannerRequestId.of(1, originalChannelId, 5, 0); + + // No CHANNEL_ID_KEY set in CallOptions (grpc-gcp not used or not available). + CallOptions callOptions = + CallOptions.DEFAULT.withOption(REQUEST_ID_CALL_OPTIONS_KEY, requestId); + + AtomicReference capturedHeaders = new AtomicReference<>(); + + Channel fakeChannel = + new FakeChannel() { + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + return new FakeClientCall() { + @Override + public void start(Listener responseListener, Metadata headers) { + capturedHeaders.set(headers); + } + }; + } + }; + + MethodDescriptor methodDescriptor = createMethodDescriptor(); + ClientCall call = + interceptor.interceptCall(methodDescriptor, callOptions, fakeChannel); + call.start(new NoOpListener<>(), new Metadata()); + + assertNotNull(capturedHeaders.get()); + String headerValue = capturedHeaders.get().get(REQUEST_ID_HEADER_KEY); + assertNotNull(headerValue); + + // Parse the header and verify the channel ID remained unchanged. + Matcher matcher = REQUEST_ID_PATTERN.matcher(headerValue); + assertTrue("Header value should match request ID pattern", matcher.matches()); + String channelIdStr = matcher.group(4); + // Channel ID should remain 3. + assertTrue( + "Channel ID should remain " + originalChannelId, + channelIdStr.equals(String.valueOf(originalChannelId))); + } + + @Test + public void testInterceptorOverridesChannelIdWhenGrpcGcpProvides() { + RequestIdInterceptor interceptor = new RequestIdInterceptor(); + + // Start with a non-zero channel ID. + long originalChannelId = 3; + XGoogSpannerRequestId requestId = XGoogSpannerRequestId.of(1, originalChannelId, 5, 0); + + // Simulate grpc-gcp setting a different channel ID. + int gcpChannelId = 7; + CallOptions callOptions = + CallOptions.DEFAULT + .withOption(REQUEST_ID_CALL_OPTIONS_KEY, requestId) + .withOption(GcpManagedChannel.CHANNEL_ID_KEY, gcpChannelId); + + AtomicReference capturedHeaders = new AtomicReference<>(); + + Channel fakeChannel = + new FakeChannel() { + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + return new FakeClientCall() { + @Override + public void start(Listener responseListener, Metadata headers) { + capturedHeaders.set(headers); + } + }; + } + }; + + MethodDescriptor methodDescriptor = createMethodDescriptor(); + ClientCall call = + interceptor.interceptCall(methodDescriptor, callOptions, fakeChannel); + call.start(new NoOpListener<>(), new Metadata()); + + assertNotNull(capturedHeaders.get()); + String headerValue = capturedHeaders.get().get(REQUEST_ID_HEADER_KEY); + assertNotNull(headerValue); + + // Parse the header and verify the channel ID WAS updated to grpc-gcp's value. + Matcher matcher = REQUEST_ID_PATTERN.matcher(headerValue); + assertTrue("Header value should match request ID pattern", matcher.matches()); + String channelIdStr = matcher.group(4); + // Channel ID should be gcpChannelId + 1 = 8 (grpc-gcp's channel ID overrides the original). + assertTrue( + "Channel ID should be " + (gcpChannelId + 1) + " but was " + channelIdStr, + channelIdStr.equals(String.valueOf(gcpChannelId + 1))); + } + + @Test + public void testInterceptorWithNoRequestId() { + RequestIdInterceptor interceptor = new RequestIdInterceptor(); + + // No request ID in CallOptions. + CallOptions callOptions = CallOptions.DEFAULT; + + AtomicReference capturedHeaders = new AtomicReference<>(); + + Channel fakeChannel = + new FakeChannel() { + @Override + public ClientCall newCall( + MethodDescriptor methodDescriptor, CallOptions callOptions) { + return new FakeClientCall() { + @Override + public void start(Listener responseListener, Metadata headers) { + capturedHeaders.set(headers); + } + }; + } + }; + + MethodDescriptor methodDescriptor = createMethodDescriptor(); + ClientCall call = + interceptor.interceptCall(methodDescriptor, callOptions, fakeChannel); + call.start(new NoOpListener<>(), new Metadata()); + + assertNotNull(capturedHeaders.get()); + // No request ID header should be set. + assertNull(capturedHeaders.get().get(REQUEST_ID_HEADER_KEY)); + } + + private static MethodDescriptor createMethodDescriptor() { + return MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("test/method") + .setRequestMarshaller(new FakeMarshaller<>()) + .setResponseMarshaller(new FakeMarshaller<>()) + .build(); + } + + private static class FakeMarshaller implements Marshaller { + @Override + public InputStream stream(T value) { + return null; + } + + @Override + public T parse(InputStream stream) { + return null; + } + } + + private abstract static class FakeChannel extends Channel { + @Override + public String authority() { + return "fake-authority"; + } + } + + private abstract static class FakeClientCall extends ClientCall { + @Override + public void start(Listener responseListener, Metadata headers) {} + + @Override + public void request(int numMessages) {} + + @Override + public void cancel(String message, Throwable cause) {} + + @Override + public void halfClose() {} + + @Override + public void sendMessage(ReqT message) {} + } + + private static class NoOpListener extends ClientCall.Listener { + @Override + public void onMessage(T message) {} + + @Override + public void onHeaders(Metadata headers) {} + + @Override + public void onClose(io.grpc.Status status, Metadata trailers) {} + + @Override + public void onReady() {} + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java index c4fdd6200af..8073b11735e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java @@ -105,6 +105,17 @@ public void testNewEndToEndTracingHeader() { assertTrue(Maps.difference(extraHeaders, expectedHeaders).areEqual()); } + @Test + public void testNewAfeServerTimingHeader() { + SpannerMetadataProvider metadataProvider = + SpannerMetadataProvider.create(ImmutableMap.of(), "header1"); + Map> extraHeaders = metadataProvider.newAfeServerTimingHeader(); + Map> expectedHeaders = + ImmutableMap.>of( + "x-goog-spanner-enable-afe-server-timing", ImmutableList.of("true")); + assertTrue(Maps.difference(extraHeaders, expectedHeaders).areEqual()); + } + private String getResourceHeaderValue( SpannerMetadataProvider headerProvider, String resourceTokenTemplate) { Metadata metadata = headerProvider.newMetadata(resourceTokenTemplate, "projects/p"); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java index 049ce0d1960..c6095dde7d2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java @@ -42,7 +42,6 @@ import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.Collection; import java.util.HashMap; @@ -50,10 +49,7 @@ import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.*; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -73,6 +69,7 @@ public class SpannerRpcMetricsTest { private static DatabaseClient databaseClientNoHeader; private static String instanceId = "fake-instance"; private static String databaseId = "fake-database"; + private static String noHeaderdatabaseId = "fake-database-1"; private static String projectId = "fake-project"; private static AtomicInteger fakeServerTiming = new AtomicInteger(new Random().nextInt(1000) + 1); private static final Statement SELECT1AND2 = @@ -111,7 +108,7 @@ public class SpannerRpcMetricsTest { private static InMemoryMetricReader inMemoryMetricReaderInjected; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { SpannerOptions.enableOpenTelemetryMetrics(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. @@ -182,7 +179,7 @@ public void sendHeaders(Metadata headers) { createSpannerOptions(addressNoHeader, serverNoHeader).getService(); databaseClientNoHeader = spannerNoHeaderNoOpenTelemetry.getDatabaseClient( - DatabaseId.of(projectId, instanceId, databaseId)); + DatabaseId.of(projectId, instanceId, noHeaderdatabaseId)); } @AfterClass @@ -227,7 +224,8 @@ public void testGfeMissingHeaderExecuteSqlWithGlobalOpenTelemetry() throws Inter long count = getHeaderLatencyMetric( getMetricData("spanner/gfe_header_missing_count", inMemoryMetricReaderInjected), - "google.spanner.v1.Spanner/ExecuteSql"); + "google.spanner.v1.Spanner/Commit", + databaseId); assertEquals(0, count); databaseClientNoHeader @@ -236,7 +234,8 @@ public void testGfeMissingHeaderExecuteSqlWithGlobalOpenTelemetry() throws Inter long count1 = getHeaderLatencyMetric( getMetricData("spanner/gfe_header_missing_count", inMemoryMetricReader), - "google.spanner.v1.Spanner/ExecuteSql"); + "google.spanner.v1.Spanner/Commit", + noHeaderdatabaseId); assertEquals(1, count1); } @@ -272,9 +271,12 @@ private static SpannerOptions createSpannerOptions(InetSocketAddress address, Se .build(); } - private long getHeaderLatencyMetric(MetricData metricData, String methodName) { + private long getHeaderLatencyMetric(MetricData metricData, String methodName, String databaseId) { return metricData.getLongSumData().getPoints().stream() - .filter(x -> x.getAttributes().asMap().containsValue(methodName)) + .filter( + x -> + x.getAttributes().asMap().containsValue(methodName) + && x.getAttributes().asMap().containsValue(databaseId)) .findFirst() .get() .getValue(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SsFormatTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SsFormatTest.java new file mode 100644 index 00000000000..da8a833db43 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SsFormatTest.java @@ -0,0 +1,902 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import com.google.protobuf.ByteString; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.TreeSet; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Unit tests for {@link SsFormat}. */ +@RunWith(JUnit4.class) +public class SsFormatTest { + + private static List signedIntTestValues; + private static List unsignedIntTestValues; + private static List doubleTestValues; + + /** Comparator for unsigned lexicographic comparison of byte arrays. */ + private static final Comparator UNSIGNED_BYTE_COMPARATOR = + (a, b) -> + ByteString.unsignedLexicographicalComparator() + .compare(ByteString.copyFrom(a), ByteString.copyFrom(b)); + + @BeforeClass + public static void setUpTestData() { + signedIntTestValues = buildSignedIntTestValues(); + unsignedIntTestValues = buildUnsignedIntTestValues(); + doubleTestValues = buildDoubleTestValues(); + } + + private static List buildSignedIntTestValues() { + TreeSet values = new TreeSet<>(); + + // Range of small values + for (int i = -300; i < 300; i++) { + values.add((long) i); + } + + // Powers of 2 and boundaries + for (int i = 0; i < 63; i++) { + long powerOf2 = 1L << i; + values.add(powerOf2); + values.add(powerOf2 - 1); + values.add(powerOf2 + 1); + values.add(-powerOf2); + values.add(-powerOf2 - 1); + values.add(-powerOf2 + 1); + } + + // Edge cases + values.add(Long.MIN_VALUE); + values.add(Long.MAX_VALUE); + + return new ArrayList<>(values); + } + + private static List buildUnsignedIntTestValues() { + TreeSet values = new TreeSet<>(Long::compareUnsigned); + + // Range of small values + for (int i = 0; i < 600; i++) { + values.add((long) i); + } + + // Powers of 2 and boundaries (treating as unsigned) + for (int i = 0; i < 64; i++) { + long powerOf2 = 1L << i; + values.add(powerOf2); + if (powerOf2 > 0) { + values.add(powerOf2 - 1); + } + values.add(powerOf2 + 1); + } + + // Max unsigned value (all bits set) + values.add(-1L); // 0xFFFFFFFFFFFFFFFF as unsigned + + return new ArrayList<>(values); + } + + private static List buildDoubleTestValues() { + TreeSet values = + new TreeSet<>( + (a, b) -> { + // Handle NaN specially - put at end + if (Double.isNaN(a) && Double.isNaN(b)) return 0; + if (Double.isNaN(a)) return 1; + if (Double.isNaN(b)) return -1; + return Double.compare(a, b); + }); + + // Basic values + values.add(0.0); + values.add(-0.0); + values.add(Double.POSITIVE_INFINITY); + values.add(Double.NEGATIVE_INFINITY); + values.add(Double.MIN_VALUE); + values.add(Double.MAX_VALUE); + values.add(-Double.MIN_VALUE); + values.add(-Double.MAX_VALUE); + + // Powers of 10 + double value = 1.0; + for (int i = 0; i < 10; i++) { + values.add(value); + values.add(-value); + value /= 10; + } + + long[] signs = {0, 1}; + long[] exponents = { + 0, 1, 2, 100, 200, 512, 1000, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 2000, 2045, 2046, 2047 + }; + long[] fractions = { + 0, + 1, + 2, + 10, + 16, + 255, + 256, + 32767, + 32768, + 65535, + 65536, + 1000000, + 0x7ffffffeL, + 0x7fffffffL, + 0x80000000L, + 0x80000001L, + 0x80000002L, + 0x0003456789abcdefL, + 0x0007fffffffffffeL, + 0x0007ffffffffffffL, + 0x0008000000000000L, + 0x0008000000000001L, + 0x000cba9876543210L, + 0x000fffffffff0000L, + 0x000ffffffffff000L, + 0x000fffffffffff00L, + 0x000ffffffffffff0L, + 0x000ffffffffffff8L, + 0x000ffffffffffffcL, + 0x000ffffffffffffeL, + 0x000fffffffffffffL + }; + + for (long sign : signs) { + for (long exponent : exponents) { + for (long fraction : fractions) { + long bits = (sign << 63) | (exponent << 52) | fraction; + values.add(Double.longBitsToDouble(bits)); + } + } + } + + return new ArrayList<>(values); + } + + // ==================== Prefix Successor Tests ==================== + + @Test + public void makePrefixSuccessor_emptyInput_returnsEmpty() { + assertEquals(ByteString.EMPTY, SsFormat.makePrefixSuccessor(ByteString.EMPTY)); + assertEquals(ByteString.EMPTY, SsFormat.makePrefixSuccessor(null)); + } + + @Test + public void makePrefixSuccessor_singleByte_setsLsb() { + ByteString input = ByteString.copyFrom(new byte[] {0x00}); + ByteString result = SsFormat.makePrefixSuccessor(input); + + assertEquals(1, result.size()); + assertEquals(0x01, result.byteAt(0) & 0xFF); + } + + @Test + public void makePrefixSuccessor_multipleBytes_onlyModifiesLastByte() { + ByteString input = ByteString.copyFrom(new byte[] {0x12, 0x34, 0x00}); + ByteString result = SsFormat.makePrefixSuccessor(input); + + assertEquals(3, result.size()); + assertEquals(0x12, result.byteAt(0) & 0xFF); + assertEquals(0x34, result.byteAt(1) & 0xFF); + assertEquals(0x01, result.byteAt(2) & 0xFF); + } + + @Test + public void makePrefixSuccessor_resultIsGreaterThanOriginal() { + byte[] original = new byte[] {0x10, 0x20, 0x30}; + ByteString successor = SsFormat.makePrefixSuccessor(ByteString.copyFrom(original)); + + assertTrue( + ByteString.unsignedLexicographicalComparator() + .compare(ByteString.copyFrom(original), successor) + < 0); + } + + // ==================== Composite Tag Tests ==================== + + @Test + public void appendCompositeTag_shortTag_encodesInOneByte() { + // Tags 1-15 should fit in 1 byte + for (int tag = 1; tag <= 15; tag++) { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendCompositeTag(out, tag); + byte[] result = out.toByteArray(); + + assertEquals("Tag " + tag + " should encode to 1 byte", 1, result.length); + assertEquals("Tag " + tag + " should encode as tag << 1", tag << 1, result[0] & 0xFF); + } + } + + @Test + public void appendCompositeTag_mediumTag_encodesInTwoBytes() { + // Tags 16-4095 should fit in 2 bytes + int[] testTags = {16, 100, 1000, 4095}; + for (int tag : testTags) { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendCompositeTag(out, tag); + byte[] result = out.toByteArray(); + + assertEquals("Tag " + tag + " should encode to 2 bytes", 2, result.length); + } + } + + @Test + public void appendCompositeTag_largeTag_encodesInThreeBytes() { + // Tags 4096-65535 should fit in 3 bytes + int[] testTags = {4096, 10000, 65535}; + for (int tag : testTags) { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendCompositeTag(out, tag); + byte[] result = out.toByteArray(); + + assertEquals("Tag " + tag + " should encode to 3 bytes", 3, result.length); + } + } + + @Test + public void appendCompositeTag_invalidTag_throws() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + assertThrows(IllegalArgumentException.class, () -> SsFormat.appendCompositeTag(out, 0)); + assertThrows(IllegalArgumentException.class, () -> SsFormat.appendCompositeTag(out, -1)); + assertThrows(IllegalArgumentException.class, () -> SsFormat.appendCompositeTag(out, 65536)); + } + + @Test + public void appendCompositeTag_preservesOrdering() { + // Verify smaller tags encode to lexicographically smaller byte sequences + for (int tag1 = 1; tag1 <= 100; tag1++) { + for (int tag2 = tag1 + 1; tag2 <= 101 && tag2 <= tag1 + 10; tag2++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendCompositeTag(out1, tag1); + SsFormat.appendCompositeTag(out2, tag2); + + assertTrue( + "Tag " + tag1 + " should encode smaller than tag " + tag2, + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + } + } + + // ==================== Signed Integer Tests ==================== + + @Test + public void appendInt64Increasing_preservesOrdering() { + // Verify that encoded integers maintain their natural ordering + for (int i = 0; i < signedIntTestValues.size() - 1; i++) { + long v1 = signedIntTestValues.get(i); + long v2 = signedIntTestValues.get(i + 1); + + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendInt64Increasing(out1, v1); + SsFormat.appendInt64Increasing(out2, v2); + + assertTrue( + "Encoded " + v1 + " should be less than encoded " + v2, + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + } + + @Test + public void appendInt64Decreasing_reversesOrdering() { + // Verify that decreasing encoding reverses the ordering + for (int i = 0; i < signedIntTestValues.size() - 1; i++) { + long v1 = signedIntTestValues.get(i); + long v2 = signedIntTestValues.get(i + 1); + + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendInt64Decreasing(out1, v1); + SsFormat.appendInt64Decreasing(out2, v2); + + assertTrue( + "Decreasing encoded " + v1 + " should be greater than encoded " + v2, + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) > 0); + } + } + + @Test + public void appendInt64Increasing_hasIsKeyBitSet() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendInt64Increasing(out, 42); + byte[] result = out.toByteArray(); + + assertTrue("IS_KEY bit (0x80) should be set", (result[0] & 0x80) != 0); + } + + @Test + public void appendInt64Increasing_edgeCases() { + long[] edgeCases = {Long.MIN_VALUE, -1, 0, 1, Long.MAX_VALUE}; + + for (long value : edgeCases) { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendInt64Increasing(out, value); + byte[] result = out.toByteArray(); + + assertTrue("Result should have at least 2 bytes for value " + value, result.length >= 2); + assertTrue("IS_KEY bit should be set for value " + value, (result[0] & 0x80) != 0); + } + } + + // ==================== Boolean Tests ==================== + + @Test + public void appendBoolIncreasing_preservesOrdering() { + UnsynchronizedByteArrayOutputStream outFalse = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream outTrue = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendBoolIncreasing(outFalse, false); + SsFormat.appendBoolIncreasing(outTrue, true); + + assertTrue( + "Encoded false should be less than encoded true", + UNSIGNED_BYTE_COMPARATOR.compare(outFalse.toByteArray(), outTrue.toByteArray()) < 0); + } + + @Test + public void appendBoolIncreasing_encodesCorrectly() { + UnsynchronizedByteArrayOutputStream outFalse = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream outTrue = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendBoolIncreasing(outFalse, false); + SsFormat.appendBoolIncreasing(outTrue, true); + + // false=0: header 0x80 (IS_KEY | TYPE_UINT_1), payload 0x00 + assertArrayEquals(new byte[] {(byte) 0x80, 0x00}, outFalse.toByteArray()); + // true=1: header 0x80, payload 0x02 (1 << 1) + assertArrayEquals(new byte[] {(byte) 0x80, 0x02}, outTrue.toByteArray()); + } + + @Test + public void appendBoolDecreasing_reversesOrdering() { + UnsynchronizedByteArrayOutputStream outFalse = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream outTrue = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendBoolDecreasing(outFalse, false); + SsFormat.appendBoolDecreasing(outTrue, true); + + assertTrue( + "Decreasing encoded false should be greater than encoded true", + UNSIGNED_BYTE_COMPARATOR.compare(outFalse.toByteArray(), outTrue.toByteArray()) > 0); + } + + @Test + public void appendBoolDecreasing_encodesCorrectly() { + UnsynchronizedByteArrayOutputStream outFalse = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream outTrue = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendBoolDecreasing(outFalse, false); + SsFormat.appendBoolDecreasing(outTrue, true); + + // false=0 inverted: header 0xA8 (IS_KEY | TYPE_DECREASING_UINT_1), payload 0xFE (~0 & 0x7F) << + // 1 + assertArrayEquals(new byte[] {(byte) 0xA8, (byte) 0xFE}, outFalse.toByteArray()); + // true=1 inverted: header 0xA8, payload 0xFC (~1 & 0x7F) << 1 + assertArrayEquals(new byte[] {(byte) 0xA8, (byte) 0xFC}, outTrue.toByteArray()); + } + + // ==================== String Tests ==================== + + @Test + public void appendStringIncreasing_preservesOrdering() { + String[] strings = {"", "a", "aa", "ab", "b", "hello", "world", "\u00ff"}; + Arrays.sort(strings); + + for (int i = 0; i < strings.length - 1; i++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendStringIncreasing(out1, strings[i]); + SsFormat.appendStringIncreasing(out2, strings[i + 1]); + + assertTrue( + "Encoded '" + strings[i] + "' should be less than '" + strings[i + 1] + "'", + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + } + + @Test + public void appendStringDecreasing_reversesOrdering() { + String[] strings = {"", "a", "b", "hello"}; + + for (int i = 0; i < strings.length - 1; i++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendStringDecreasing(out1, strings[i]); + SsFormat.appendStringDecreasing(out2, strings[i + 1]); + + assertTrue( + "Decreasing encoded '" + strings[i] + "' should be greater than '" + strings[i + 1] + "'", + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) > 0); + } + } + + @Test + public void appendStringIncreasing_escapesSpecialBytes() { + // Test that 0x00 and 0xFF bytes are properly escaped + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendBytesIncreasing(out, new byte[] {0x00, (byte) 0xFF, 0x42}); + byte[] result = out.toByteArray(); + + // Result should be longer due to escaping: + // header (1) + escaped 0x00 (2) + escaped 0xFF (2) + 0x42 (1) + terminator (2) = 8 + assertTrue("Result should include escape sequences", result.length > 5); + } + + @Test + public void appendStringIncreasing_emptyString() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendStringIncreasing(out, ""); + byte[] result = out.toByteArray(); + + // Empty string should still have header + terminator + assertTrue("Empty string encoding should have at least 3 bytes", result.length >= 3); + assertTrue("IS_KEY bit should be set", (result[0] & 0x80) != 0); + } + + // ==================== Bytes Tests ==================== + + @Test + public void appendBytesIncreasing_preservesOrdering() { + byte[][] testBytes = { + new byte[] {}, + new byte[] {0x00}, + new byte[] {0x01}, + new byte[] {0x01, 0x02}, + new byte[] {(byte) 0xFF} + }; + + for (int i = 0; i < testBytes.length - 1; i++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendBytesIncreasing(out1, testBytes[i]); + SsFormat.appendBytesIncreasing(out2, testBytes[i + 1]); + + assertTrue( + "Encoded bytes should maintain lexicographic order", + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + } + + @Test + public void appendBytesDecreasing_reversesOrdering() { + byte[][] testBytes = { + new byte[] {}, + new byte[] {0x00}, + new byte[] {0x01}, + new byte[] {0x01, 0x02}, + new byte[] {(byte) 0xFF} + }; + + for (int i = 0; i < testBytes.length - 1; i++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendBytesDecreasing(out1, testBytes[i]); + SsFormat.appendBytesDecreasing(out2, testBytes[i + 1]); + + assertTrue( + "Decreasing encoded bytes should reverse lexicographic order", + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) > 0); + } + } + + @Test + public void appendBytesDecreasing_escapesSpecialBytes() { + // Test that 0x00 and 0xFF bytes are properly escaped in decreasing mode + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendBytesDecreasing(out, new byte[] {0x00, (byte) 0xFF, 0x42}); + byte[] result = out.toByteArray(); + + // Result should be longer due to escaping + // In decreasing mode: bytes are inverted, then escaped + // Original 0x00 -> inverted to 0xFF -> needs escape (0xFF, 0x10) + // Original 0xFF -> inverted to 0x00 -> needs escape (0x00, 0xF0) + // Original 0x42 -> inverted to 0xBD -> no escape needed + assertTrue("Result should include escape sequences", result.length > 5); + } + + @Test + public void appendBytesDecreasing_emptyArray() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendBytesDecreasing(out, new byte[] {}); + byte[] result = out.toByteArray(); + + // Empty bytes should still have header + terminator + assertTrue("Empty bytes encoding should have at least 3 bytes", result.length >= 3); + assertTrue("IS_KEY bit should be set", (result[0] & 0x80) != 0); + } + + @Test + public void appendBytesIncreasing_vs_Decreasing_sameInput_differentOutput() { + byte[] input = new byte[] {0x01, 0x02, 0x03}; + + UnsynchronizedByteArrayOutputStream outInc = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream outDec = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendBytesIncreasing(outInc, input); + SsFormat.appendBytesDecreasing(outDec, input); + + // The outputs should be different (different header type and inverted bytes) + assertFalse( + "Increasing and decreasing encodings should differ", + Arrays.equals(outInc.toByteArray(), outDec.toByteArray())); + } + + // ==================== Double Tests ==================== + + @Test + public void appendDoubleIncreasing_preservesOrdering() { + // Filter out NaN as it has special comparison semantics + List sortedDoubles = new ArrayList<>(); + for (double d : doubleTestValues) { + if (!Double.isNaN(d)) { + sortedDoubles.add(d); + } + } + sortedDoubles.sort(Double::compare); + + for (int i = 0; i < sortedDoubles.size() - 1; i++) { + double v1 = sortedDoubles.get(i); + double v2 = sortedDoubles.get(i + 1); + + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendDoubleIncreasing(out1, v1); + SsFormat.appendDoubleIncreasing(out2, v2); + + int cmp = UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()); + + // Note: -0.0 and 0.0 encode identically (both map to 0 internally), so allow equality + assertTrue("Encoded " + v1 + " should be <= encoded " + v2, cmp <= 0); + } + } + + @Test + public void appendDoubleDecreasing_reversesOrdering() { + double[] values = {-Double.MAX_VALUE, -1.0, 0.0, 1.0, Double.MAX_VALUE}; + + for (int i = 0; i < values.length - 1; i++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendDoubleDecreasing(out1, values[i]); + SsFormat.appendDoubleDecreasing(out2, values[i + 1]); + + assertTrue( + "Decreasing encoded " + values[i] + " should be greater than " + values[i + 1], + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) > 0); + } + } + + @Test + public void appendDoubleIncreasing_specialValues() { + // Test special double values + // Note: -0.0 is excluded because it encodes identically to 0.0 + // (both have internal representation mapping to 0) + double[] specialValues = { + Double.NEGATIVE_INFINITY, + -Double.MAX_VALUE, + -1.0, + -Double.MIN_VALUE, + 0.0, // -0.0 encodes the same as 0.0 + Double.MIN_VALUE, + 1.0, + Double.MAX_VALUE, + Double.POSITIVE_INFINITY + }; + + // Verify ordering is preserved + for (int i = 0; i < specialValues.length - 1; i++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendDoubleIncreasing(out1, specialValues[i]); + SsFormat.appendDoubleIncreasing(out2, specialValues[i + 1]); + + assertTrue( + "Special value " + specialValues[i] + " should encode less than " + specialValues[i + 1], + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + } + + @Test + public void appendDoubleIncreasing_negativeZeroEqualsPositiveZero() { + // Verify that -0.0 and 0.0 encode identically + // This is correct behavior: both map to internal representation 0 + UnsynchronizedByteArrayOutputStream outNegZero = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream outPosZero = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendDoubleIncreasing(outNegZero, -0.0); + SsFormat.appendDoubleIncreasing(outPosZero, 0.0); + + assertArrayEquals( + "-0.0 and 0.0 should encode identically", + outNegZero.toByteArray(), + outPosZero.toByteArray()); + } + + @Test + public void appendDoubleIncreasing_nan() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendDoubleIncreasing(out, Double.NaN); + byte[] result = out.toByteArray(); + + assertTrue("NaN encoding should have at least 2 bytes", result.length >= 2); + assertTrue("IS_KEY bit should be set for NaN", (result[0] & 0x80) != 0); + } + + // ==================== Null Marker Tests ==================== + + @Test + public void appendNullOrderedFirst_encoding() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendNullOrderedFirst(out); + byte[] result = out.toByteArray(); + + assertEquals("Null ordered first should encode to 2 bytes", 2, result.length); + assertTrue("IS_KEY bit should be set", (result[0] & 0x80) != 0); + } + + @Test + public void appendNullOrderedLast_encoding() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendNullOrderedLast(out); + byte[] result = out.toByteArray(); + + assertEquals("Null ordered last should encode to 2 bytes", 2, result.length); + assertTrue("IS_KEY bit should be set", (result[0] & 0x80) != 0); + } + + @Test + public void appendNotNullMarkerNullOrderedFirst_encoding() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendNotNullMarkerNullOrderedFirst(out); + byte[] result = out.toByteArray(); + + assertEquals("Not-null marker (nulls first) should encode to 1 byte", 1, result.length); + } + + @Test + public void appendNotNullMarkerNullOrderedLast_encoding() { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendNotNullMarkerNullOrderedLast(out); + byte[] result = out.toByteArray(); + + assertEquals("Not-null marker (nulls last) should encode to 1 byte", 1, result.length); + } + + @Test + public void nullOrderedFirst_sortsBeforeValues() { + UnsynchronizedByteArrayOutputStream nullOut = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream valueOut = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendNullOrderedFirst(nullOut); + SsFormat.appendNotNullMarkerNullOrderedFirst(valueOut); + SsFormat.appendInt64Increasing(valueOut, Long.MIN_VALUE); + + assertTrue( + "Null (ordered first) should sort before any value", + UNSIGNED_BYTE_COMPARATOR.compare(nullOut.toByteArray(), valueOut.toByteArray()) < 0); + } + + @Test + public void nullOrderedLast_sortsAfterValues() { + UnsynchronizedByteArrayOutputStream nullOut = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream valueOut = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendNullOrderedLast(nullOut); + SsFormat.appendNotNullMarkerNullOrderedLast(valueOut); + SsFormat.appendInt64Increasing(valueOut, Long.MAX_VALUE); + + assertTrue( + "Null (ordered last) should sort after any value", + UNSIGNED_BYTE_COMPARATOR.compare(nullOut.toByteArray(), valueOut.toByteArray()) > 0); + } + + // ==================== Timestamp Tests ==================== + + @Test + public void encodeTimestamp_length() { + byte[] result = SsFormat.encodeTimestamp(0, 0); + assertEquals("Timestamp should encode to 12 bytes", 12, result.length); + } + + @Test + public void encodeTimestamp_preservesOrdering() { + long[][] timestamps = { + {0, 0}, + {0, 1}, + {0, 999999999}, + {1, 0}, + {100, 500000000}, + {Long.MAX_VALUE / 2, 0} + }; + + for (int i = 0; i < timestamps.length - 1; i++) { + byte[] t1 = SsFormat.encodeTimestamp(timestamps[i][0], (int) timestamps[i][1]); + byte[] t2 = SsFormat.encodeTimestamp(timestamps[i + 1][0], (int) timestamps[i + 1][1]); + + assertTrue( + "Earlier timestamp should encode smaller", UNSIGNED_BYTE_COMPARATOR.compare(t1, t2) < 0); + } + } + + // ==================== UUID Tests ==================== + + @Test + public void encodeUuid_length() { + byte[] result = SsFormat.encodeUuid(0, 0); + assertEquals("UUID should encode to 16 bytes", 16, result.length); + } + + @Test + public void encodeUuid_bigEndianEncoding() { + byte[] result = SsFormat.encodeUuid(0x0102030405060708L, 0x090A0B0C0D0E0F10L); + + // Verify big-endian encoding of high bits + assertEquals(0x01, result[0] & 0xFF); + assertEquals(0x02, result[1] & 0xFF); + assertEquals(0x03, result[2] & 0xFF); + assertEquals(0x04, result[3] & 0xFF); + assertEquals(0x05, result[4] & 0xFF); + assertEquals(0x06, result[5] & 0xFF); + assertEquals(0x07, result[6] & 0xFF); + assertEquals(0x08, result[7] & 0xFF); + + // Verify big-endian encoding of low bits + assertEquals(0x09, result[8] & 0xFF); + assertEquals(0x0A, result[9] & 0xFF); + assertEquals(0x0B, result[10] & 0xFF); + assertEquals(0x0C, result[11] & 0xFF); + assertEquals(0x0D, result[12] & 0xFF); + assertEquals(0x0E, result[13] & 0xFF); + assertEquals(0x0F, result[14] & 0xFF); + assertEquals(0x10, result[15] & 0xFF); + } + + @Test + public void encodeUuid_preservesOrdering() { + // UUIDs compared as unsigned 128-bit integers should preserve order + long[][] uuids = { + {0, 0}, + {0, 1}, + {0, Long.MAX_VALUE}, + {1, 0}, + {Long.MAX_VALUE, Long.MAX_VALUE} + }; + + for (int i = 0; i < uuids.length - 1; i++) { + byte[] u1 = SsFormat.encodeUuid(uuids[i][0], uuids[i][1]); + byte[] u2 = SsFormat.encodeUuid(uuids[i + 1][0], uuids[i + 1][1]); + + assertTrue("UUID ordering should be preserved", UNSIGNED_BYTE_COMPARATOR.compare(u1, u2) < 0); + } + } + + // ==================== Composite Key Tests ==================== + + @Test + public void compositeKey_tagPlusIntPreservesOrdering() { + int tag = 5; + long[] values = {Long.MIN_VALUE, -1, 0, 1, Long.MAX_VALUE}; + + for (int i = 0; i < values.length - 1; i++) { + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendCompositeTag(out1, tag); + SsFormat.appendInt64Increasing(out1, values[i]); + + SsFormat.appendCompositeTag(out2, tag); + SsFormat.appendInt64Increasing(out2, values[i + 1]); + + assertTrue( + "Composite key with " + values[i] + " should be less than with " + values[i + 1], + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + } + + @Test + public void compositeKey_differentTagsSortByTag() { + long value = 100; + + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendCompositeTag(out1, 5); + SsFormat.appendInt64Increasing(out1, value); + + SsFormat.appendCompositeTag(out2, 10); + SsFormat.appendInt64Increasing(out2, value); + + assertTrue( + "Key with smaller tag should sort first", + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + + @Test + public void compositeKey_multipleKeyParts() { + // Simulate encoding a composite key with multiple parts: tag + int + string + UnsynchronizedByteArrayOutputStream out1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream out2 = new UnsynchronizedByteArrayOutputStream(); + + SsFormat.appendCompositeTag(out1, 1); + SsFormat.appendInt64Increasing(out1, 100); + SsFormat.appendStringIncreasing(out1, "alice"); + + SsFormat.appendCompositeTag(out2, 1); + SsFormat.appendInt64Increasing(out2, 100); + SsFormat.appendStringIncreasing(out2, "bob"); + + assertTrue( + "Keys with same prefix but different strings should order by string", + UNSIGNED_BYTE_COMPARATOR.compare(out1.toByteArray(), out2.toByteArray()) < 0); + } + + // ==================== Order Preservation Summary Test ==================== + + @Test + public void orderPreservation_comprehensiveIntTest() { + // Take a sample of values to avoid O(n^2) test time + int step = Math.max(1, signedIntTestValues.size() / 100); + List sample = new ArrayList<>(); + for (int i = 0; i < signedIntTestValues.size(); i += step) { + sample.add(signedIntTestValues.get(i)); + } + + // Encode all values + List encoded = new ArrayList<>(); + for (long v : sample) { + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); + SsFormat.appendInt64Increasing(out, v); + encoded.add(out.toByteArray()); + } + + // Verify the encoded values are in the same order as the original values + for (int i = 0; i < sample.size() - 1; i++) { + int comparison = UNSIGNED_BYTE_COMPARATOR.compare(encoded.get(i), encoded.get(i + 1)); + assertTrue( + "Order should be preserved: " + sample.get(i) + " < " + sample.get(i + 1), + comparison < 0); + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/TargetRangeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/TargetRangeTest.java new file mode 100644 index 00000000000..ac43da07f31 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/TargetRangeTest.java @@ -0,0 +1,286 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.spi.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.protobuf.ByteString; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Unit tests for {@link TargetRange}. */ +@RunWith(JUnit4.class) +public class TargetRangeTest { + + private static ByteString bs(String s) { + return ByteString.copyFromUtf8(s); + } + + // ==================== isPoint Tests ==================== + + @Test + public void isPoint_emptyLimit_returnsTrue() { + TargetRange range = new TargetRange(bs("a"), ByteString.EMPTY, false); + assertTrue(range.isPoint()); + } + + @Test + public void isPoint_nonEmptyLimit_returnsFalse() { + TargetRange range = new TargetRange(bs("a"), bs("b"), false); + assertFalse(range.isPoint()); + } + + // ==================== mergeFrom Start Key Tests ==================== + + @Test + public void mergeFrom_otherStartSmaller_updatesStart() { + TargetRange target = new TargetRange(bs("c"), bs("f"), false); + TargetRange other = new TargetRange(bs("a"), bs("d"), false); + + target.mergeFrom(other); + + assertEquals(bs("a"), target.start); + } + + @Test + public void mergeFrom_otherStartEqual_keepsOriginalStart() { + TargetRange target = new TargetRange(bs("c"), bs("f"), false); + TargetRange other = new TargetRange(bs("c"), bs("e"), false); + + target.mergeFrom(other); + + assertEquals(bs("c"), target.start); + } + + @Test + public void mergeFrom_otherStartLarger_keepsOriginalStart() { + TargetRange target = new TargetRange(bs("a"), bs("f"), false); + TargetRange other = new TargetRange(bs("c"), bs("e"), false); + + target.mergeFrom(other); + + assertEquals(bs("a"), target.start); + } + + // ==================== mergeFrom Limit Key Tests (Range into Range) ==================== + + @Test + public void mergeFrom_otherLimitLarger_updatesLimit() { + TargetRange target = new TargetRange(bs("a"), bs("c"), false); + TargetRange other = new TargetRange(bs("b"), bs("e"), false); + + target.mergeFrom(other); + + assertEquals(bs("e"), target.limit); + } + + @Test + public void mergeFrom_otherLimitEqual_keepsOriginalLimit() { + TargetRange target = new TargetRange(bs("a"), bs("e"), false); + TargetRange other = new TargetRange(bs("b"), bs("e"), false); + + target.mergeFrom(other); + + assertEquals(bs("e"), target.limit); + } + + @Test + public void mergeFrom_otherLimitSmaller_keepsOriginalLimit() { + TargetRange target = new TargetRange(bs("a"), bs("f"), false); + TargetRange other = new TargetRange(bs("b"), bs("d"), false); + + target.mergeFrom(other); + + assertEquals(bs("f"), target.limit); + } + + // ==================== mergeFrom Point into Range Tests ==================== + + @Test + public void mergeFrom_pointBeyondLimit_extendsLimitWithPrefixSuccessor() { + TargetRange target = new TargetRange(bs("a"), bs("c"), false); + // Point at "d" which is beyond the limit "c" + TargetRange point = new TargetRange(bs("d"), ByteString.EMPTY, false); + + target.mergeFrom(point); + + // Limit should be makePrefixSuccessor("d") + assertEquals(SsFormat.makePrefixSuccessor(bs("d")), target.limit); + } + + @Test + public void mergeFrom_pointAtLimit_extendsLimitWithPrefixSuccessor() { + TargetRange target = new TargetRange(bs("a"), bs("c"), false); + // Point at "c" which equals the limit + TargetRange point = new TargetRange(bs("c"), ByteString.EMPTY, false); + + target.mergeFrom(point); + + // Limit should be makePrefixSuccessor("c") + assertEquals(SsFormat.makePrefixSuccessor(bs("c")), target.limit); + } + + @Test + public void mergeFrom_pointWithinRange_keepsOriginalLimit() { + TargetRange target = new TargetRange(bs("a"), bs("e"), false); + // Point at "c" which is within the range [a, e) + TargetRange point = new TargetRange(bs("c"), ByteString.EMPTY, false); + + target.mergeFrom(point); + + // Limit should remain unchanged since point is within range + assertEquals(bs("e"), target.limit); + } + + @Test + public void mergeFrom_pointBeforeStart_updatesStartKeepsLimit() { + TargetRange target = new TargetRange(bs("c"), bs("e"), false); + // Point at "a" which is before the start + TargetRange point = new TargetRange(bs("a"), ByteString.EMPTY, false); + + target.mergeFrom(point); + + assertEquals(bs("a"), target.start); + // Limit unchanged since point is before the range + assertEquals(bs("e"), target.limit); + } + + // ==================== mergeFrom Point into Point Tests ==================== + + @Test + public void mergeFrom_pointIntoPoint_smallerStart_extendsToIncludeBoth() { + TargetRange target = new TargetRange(bs("c"), ByteString.EMPTY, false); + TargetRange other = new TargetRange(bs("a"), ByteString.EMPTY, false); + + target.mergeFrom(other); + + assertEquals(bs("a"), target.start); + // Since target was a point (limit empty), and other.start < target.limit (empty), + // limit stays empty? Let's verify the logic... + // Actually: other.isPoint() && other.start >= this.limit + // If this.limit is empty, then other.start >= empty is always true (lexicographically) + // So limit becomes makePrefixSuccessor(other.start) + assertEquals(SsFormat.makePrefixSuccessor(bs("a")), target.limit); + } + + @Test + public void mergeFrom_pointIntoPoint_largerStart() { + TargetRange target = new TargetRange(bs("a"), ByteString.EMPTY, false); + TargetRange other = new TargetRange(bs("c"), ByteString.EMPTY, false); + + target.mergeFrom(other); + + assertEquals(bs("a"), target.start); + // other.isPoint() && other.start("c") >= target.limit(empty) is true + assertEquals(SsFormat.makePrefixSuccessor(bs("c")), target.limit); + } + + // ==================== mergeFrom Approximate Flag Tests ==================== + + @Test + public void mergeFrom_bothNotApproximate_resultNotApproximate() { + TargetRange target = new TargetRange(bs("a"), bs("c"), false); + TargetRange other = new TargetRange(bs("b"), bs("d"), false); + + target.mergeFrom(other); + + assertFalse(target.approximate); + } + + @Test + public void mergeFrom_targetApproximate_resultApproximate() { + TargetRange target = new TargetRange(bs("a"), bs("c"), true); + TargetRange other = new TargetRange(bs("b"), bs("d"), false); + + target.mergeFrom(other); + + assertTrue(target.approximate); + } + + @Test + public void mergeFrom_otherApproximate_resultApproximate() { + TargetRange target = new TargetRange(bs("a"), bs("c"), false); + TargetRange other = new TargetRange(bs("b"), bs("d"), true); + + target.mergeFrom(other); + + assertTrue(target.approximate); + } + + @Test + public void mergeFrom_bothApproximate_resultApproximate() { + TargetRange target = new TargetRange(bs("a"), bs("c"), true); + TargetRange other = new TargetRange(bs("b"), bs("d"), true); + + target.mergeFrom(other); + + assertTrue(target.approximate); + } + + // ==================== mergeFrom Combined Scenarios ==================== + + @Test + public void mergeFrom_disjointRanges_createsUnion() { + // [a, c) merged with [e, g) should give [a, g) + TargetRange target = new TargetRange(bs("a"), bs("c"), false); + TargetRange other = new TargetRange(bs("e"), bs("g"), false); + + target.mergeFrom(other); + + assertEquals(bs("a"), target.start); + assertEquals(bs("g"), target.limit); + } + + @Test + public void mergeFrom_overlappingRanges_createsUnion() { + // [a, d) merged with [c, f) should give [a, f) + TargetRange target = new TargetRange(bs("a"), bs("d"), false); + TargetRange other = new TargetRange(bs("c"), bs("f"), false); + + target.mergeFrom(other); + + assertEquals(bs("a"), target.start); + assertEquals(bs("f"), target.limit); + } + + @Test + public void mergeFrom_containedRange_keepsOuter() { + // [a, f) merged with [b, d) should give [a, f) + TargetRange target = new TargetRange(bs("a"), bs("f"), false); + TargetRange other = new TargetRange(bs("b"), bs("d"), false); + + target.mergeFrom(other); + + assertEquals(bs("a"), target.start); + assertEquals(bs("f"), target.limit); + } + + @Test + public void mergeFrom_multiplePoints_createsSpanningRange() { + // Start with point at "c", merge point at "a", then point at "e" + TargetRange target = new TargetRange(bs("c"), ByteString.EMPTY, false); + + target.mergeFrom(new TargetRange(bs("a"), ByteString.EMPTY, false)); + target.mergeFrom(new TargetRange(bs("e"), ByteString.EMPTY, false)); + + assertEquals(bs("a"), target.start); + assertEquals(SsFormat.makePrefixSuccessor(bs("e")), target.limit); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpanner.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpanner.java index cc2edb4651c..e4c2ad5cd2d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpanner.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpanner.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java index 0fa8bf2d554..52926e09b5f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java index ae1cfdc8a8a..0d7107aa5d1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ import com.google.protobuf.Timestamp; import com.google.rpc.Status; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.CacheUpdate; import com.google.spanner.v1.CommitResponse; import com.google.spanner.v1.DatabaseName; import com.google.spanner.v1.DirectedReadOptions; @@ -56,6 +57,7 @@ import com.google.spanner.v1.ResultSet; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.RoutingHint; import com.google.spanner.v1.Session; import com.google.spanner.v1.SessionName; import com.google.spanner.v1.Transaction; @@ -589,6 +591,7 @@ public void executeSqlTest() throws Exception { .addAllRows(new ArrayList()) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -608,6 +611,7 @@ public void executeSqlTest() throws Exception { .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) .setLastStatement(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); ResultSet actualResponse = client.executeSql(request); @@ -652,6 +656,7 @@ public void executeSqlExceptionTest() throws Exception { .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) .setLastStatement(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); client.executeSql(request); Assert.fail("No exception raised"); @@ -743,6 +748,7 @@ public void readTest() throws Exception { .addAllRows(new ArrayList()) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -761,6 +767,7 @@ public void readTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); ResultSet actualResponse = client.read(request); @@ -804,6 +811,7 @@ public void readExceptionTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); client.read(request); Assert.fail("No exception raised"); @@ -830,6 +838,7 @@ public void beginTransactionTest() throws Exception { .setId(ByteString.EMPTY) .setReadTimestamp(Timestamp.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -878,6 +887,7 @@ public void beginTransactionTest2() throws Exception { .setId(ByteString.EMPTY) .setReadTimestamp(Timestamp.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -927,6 +937,8 @@ public void commitTest() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -976,6 +988,8 @@ public void commitTest2() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -1025,6 +1039,8 @@ public void commitTest3() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); @@ -1076,6 +1092,8 @@ public void commitTest4() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockService.addResponse(expectedResponse); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java index e0e1251d1d2..9e3b86c91cd 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,6 +42,7 @@ import com.google.spanner.v1.BatchWriteRequest; import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; +import com.google.spanner.v1.CacheUpdate; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; import com.google.spanner.v1.CreateSessionRequest; @@ -69,6 +70,7 @@ import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.ResultSetStats; import com.google.spanner.v1.RollbackRequest; +import com.google.spanner.v1.RoutingHint; import com.google.spanner.v1.Session; import com.google.spanner.v1.SessionName; import com.google.spanner.v1.Transaction; @@ -547,6 +549,7 @@ public void executeSqlTest() throws Exception { .addAllRows(new ArrayList()) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); @@ -566,6 +569,7 @@ public void executeSqlTest() throws Exception { .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) .setLastStatement(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); ResultSet actualResponse = client.executeSql(request); @@ -589,6 +593,7 @@ public void executeSqlTest() throws Exception { Assert.assertEquals(request.getDirectedReadOptions(), actualRequest.getDirectedReadOptions()); Assert.assertEquals(request.getDataBoostEnabled(), actualRequest.getDataBoostEnabled()); Assert.assertEquals(request.getLastStatement(), actualRequest.getLastStatement()); + Assert.assertEquals(request.getRoutingHint(), actualRequest.getRoutingHint()); Assert.assertTrue( channelProvider.isHeaderSent( ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), @@ -617,6 +622,7 @@ public void executeSqlExceptionTest() throws Exception { .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) .setLastStatement(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); client.executeSql(request); Assert.fail("No exception raised"); @@ -635,6 +641,8 @@ public void executeStreamingSqlTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setLast(true) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); ExecuteSqlRequest request = @@ -653,6 +661,7 @@ public void executeStreamingSqlTest() throws Exception { .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) .setLastStatement(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -686,6 +695,7 @@ public void executeStreamingSqlExceptionTest() throws Exception { .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) .setLastStatement(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -775,6 +785,7 @@ public void readTest() throws Exception { .addAllRows(new ArrayList()) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); @@ -793,6 +804,7 @@ public void readTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); ResultSet actualResponse = client.read(request); @@ -816,6 +828,7 @@ public void readTest() throws Exception { Assert.assertEquals(request.getDataBoostEnabled(), actualRequest.getDataBoostEnabled()); Assert.assertEquals(request.getOrderBy(), actualRequest.getOrderBy()); Assert.assertEquals(request.getLockHint(), actualRequest.getLockHint()); + Assert.assertEquals(request.getRoutingHint(), actualRequest.getRoutingHint()); Assert.assertTrue( channelProvider.isHeaderSent( ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), @@ -843,6 +856,7 @@ public void readExceptionTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); client.read(request); Assert.fail("No exception raised"); @@ -861,6 +875,8 @@ public void streamingReadTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setLast(true) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); ReadRequest request = @@ -878,6 +894,7 @@ public void streamingReadTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -910,6 +927,7 @@ public void streamingReadExceptionTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setRoutingHint(RoutingHint.newBuilder().build()) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -935,6 +953,7 @@ public void beginTransactionTest() throws Exception { .setId(ByteString.EMPTY) .setReadTimestamp(Timestamp.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); @@ -978,6 +997,7 @@ public void beginTransactionTest2() throws Exception { .setId(ByteString.EMPTY) .setReadTimestamp(Timestamp.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); @@ -1020,6 +1040,8 @@ public void commitTest() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); @@ -1065,6 +1087,8 @@ public void commitTest2() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); @@ -1110,6 +1134,8 @@ public void commitTest3() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); @@ -1155,6 +1181,8 @@ public void commitTest4() throws Exception { CommitResponse.newBuilder() .setCommitTimestamp(Timestamp.newBuilder().build()) .setCommitStats(CommitResponse.CommitStats.newBuilder().build()) + .setSnapshotTimestamp(Timestamp.newBuilder().build()) + .setCacheUpdate(CacheUpdate.newBuilder().build()) .build(); mockSpanner.addResponse(expectedResponse); diff --git a/google-cloud-spanner/src/test/proto/finder_test.proto b/google-cloud-spanner/src/test/proto/finder_test.proto new file mode 100644 index 00000000000..3c3f1d8d299 --- /dev/null +++ b/google-cloud-spanner/src/test/proto/finder_test.proto @@ -0,0 +1,56 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package spanner.cloud.location; + +import "google/spanner/v1/location.proto"; +import "google/spanner/v1/spanner.proto"; + +option java_multiple_files = true; + +message FinderTestCase { + string name = 1; + message Event { + // Name for the event, for diagnostic purposes. + string name = 1; + + // A cache update that should be applied to the `Finder` before calling + // `FindServer`. + google.spanner.v1.CacheUpdate cache_update = 2; + + // During `FindServer`, servers in the `unhealthy_servers` list should + // report false to `Server::IsHealthy`. + repeated string unhealthy_servers = 3; + + // The argument to pass to `FindServer` + oneof request { + google.spanner.v1.ReadRequest read = 4; + google.spanner.v1.ExecuteSqlRequest sql = 5; + } + + // The server that `FindServer` should return. If empty, `FindServer` + // should return null. + string server = 6; + + // The routing hint that should be filled in by `FindServer`. + google.spanner.v1.RoutingHint hint = 7; + } + repeated Event event = 2; +} + +message FinderTestCases { + repeated FinderTestCase test_case = 2; +} diff --git a/google-cloud-spanner/src/test/proto/range_cache_test.proto b/google-cloud-spanner/src/test/proto/range_cache_test.proto new file mode 100644 index 00000000000..a5accaf557f --- /dev/null +++ b/google-cloud-spanner/src/test/proto/range_cache_test.proto @@ -0,0 +1,75 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package spanner.cloud.location; + +import "google/spanner/v1/location.proto"; +import "google/spanner/v1/spanner.proto"; + +option java_multiple_files = true; + +message RangeCacheTestCases { + repeated RangeCacheTestCase test_case = 1; +} + +message RangeCacheTestCase { + // Name of the test case, for diagnostic purposes. + string name = 1; + + // A single step in the test case. Each test starts with a newly constructed + // empty RangeCache, and runs one step at a time. + message Step { + // If present, the cache is updated with this CacheUpdate before running + // the tests below. + google.spanner.v1.CacheUpdate update = 1; + + // The tests then run one at a time. + message Test { + // If true, the test will be run with prefer_leader=true. Otherwise, + // prefer_leader will be false. + bool leader = 1; + + // If non-empty, the test will be run with this directed read options. + google.spanner.v1.DirectedReadOptions directed_read_options = 2; + + // key and limit_key are both optional, and if present, are copied into + // the routing hint passed to FillRoutingHint. + bytes key = 3; + bytes limit_key = 4; + + // The mode for RangeCache::RangeMode. + enum RangeMode { + COVERING_SPLIT = 0; + PICK_RANDOM = 1; + } + RangeMode range_mode = 5; + + // If set, overrides the default value of the + // --spanner_cloud_location_range_cache_min_entries_for_random_pick flag. + int32 min_cache_entries_for_random_pick = 6; + + // `result` should exactly match the routing hint after FillRoutingHint + // is called. + + google.spanner.v1.RoutingHint result = 7; + // If non-empty, then FillRoutingHint should return a server with this + // address. If empty, then FillRoutingHint should return nullptr. + string server = 8; + } + repeated Test test = 2; + } + repeated Step step = 2; +} diff --git a/google-cloud-spanner/src/test/proto/recipe_test.proto b/google-cloud-spanner/src/test/proto/recipe_test.proto new file mode 100644 index 00000000000..cb6f055eeb4 --- /dev/null +++ b/google-cloud-spanner/src/test/proto/recipe_test.proto @@ -0,0 +1,54 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package spanner.cloud.location; + +import "google/protobuf/struct.proto"; +import "google/spanner/v1/keys.proto"; +import "google/spanner/v1/location.proto"; +import "google/spanner/v1/mutation.proto"; + +option java_multiple_files = true; + +// Proto definition for the textproto of tests. +message RecipeTestCases { + repeated RecipeTestCase test_case = 1; +} + +message RecipeTestCase { + // Name of the test case, for diagnostic purposes. + string name = 1; + + // A list of recipes to be used to evaluate the tests below. + google.spanner.v1.RecipeList recipes = 2; + + message Test { + // Each test encodes a single operation. + oneof operation { + google.protobuf.ListValue key = 1; + google.spanner.v1.KeyRange key_range = 2; + google.spanner.v1.KeySet key_set = 3; + google.spanner.v1.Mutation mutation = 4; + google.protobuf.Struct query_params = 5; + } + + // `start`, `limit`, and `approximate` are the expected results of encoding. + bytes start = 6; + bytes limit = 7; + bool approximate = 8; + } + repeated Test test = 3; +} diff --git a/google-cloud-spanner/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-spanner/native-image.properties b/google-cloud-spanner/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-spanner/native-image.properties new file mode 100644 index 00000000000..383f5390d63 --- /dev/null +++ b/google-cloud-spanner/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-spanner/native-image.properties @@ -0,0 +1,3 @@ +Args=--initialize-at-build-time=org.junit.runner.RunWith \ + --initialize-at-build-time=org.junit.experimental.categories.Category \ + --initialize-at-build-time=org.junit.runners.model.FrameworkField diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql index 181f30987d0..e1122271907 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql @@ -1130,6 +1130,205 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-statement_timeout; NEW_CONNECTION; +show variable transaction_timeout; +NEW_CONNECTION; +SHOW VARIABLE TRANSACTION_TIMEOUT; +NEW_CONNECTION; +show variable transaction_timeout; +NEW_CONNECTION; + show variable transaction_timeout; +NEW_CONNECTION; + show variable transaction_timeout; +NEW_CONNECTION; + + + +show variable transaction_timeout; +NEW_CONNECTION; +show variable transaction_timeout ; +NEW_CONNECTION; +show variable transaction_timeout ; +NEW_CONNECTION; +show variable transaction_timeout + +; +NEW_CONNECTION; +show variable transaction_timeout; +NEW_CONNECTION; +show variable transaction_timeout; +NEW_CONNECTION; +show +variable +transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable transaction_timeout/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-transaction_timeout; +NEW_CONNECTION; set readonly = true; SELECT 1 AS TEST; show variable read_timestamp; @@ -6233,20241 +6432,25779 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT start/-transaction; NEW_CONNECTION; -begin transaction; -commit; +begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; -COMMIT; +BEGIN ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -begin transaction; -commit; +begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; - commit; + begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; - commit; + begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit; +begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit ; +begin isolation level repeatable read ; NEW_CONNECTION; -begin transaction; -commit ; +begin isolation level repeatable read ; NEW_CONNECTION; -begin transaction; -commit +begin isolation level repeatable read ; NEW_CONNECTION; -begin transaction; -commit; +begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit; +begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit; +begin +isolation +level +repeatable +read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit; +foo begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit bar; +begin isolation level repeatable read bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit; +%begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit%; +begin isolation level repeatable read%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit%; +begin isolation level repeatable%read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit; +_begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit_; +begin isolation level repeatable read_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit_; +begin isolation level repeatable_read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit; +&begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit&; +begin isolation level repeatable read&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit&; +begin isolation level repeatable&read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit; +$begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit$; +begin isolation level repeatable read$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit$; +begin isolation level repeatable$read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit; +@begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit@; +begin isolation level repeatable read@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit@; +begin isolation level repeatable@read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit; +!begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit!; +begin isolation level repeatable read!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit!; +begin isolation level repeatable!read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit; +*begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit*; +begin isolation level repeatable read*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit*; +begin isolation level repeatable*read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit; +(begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit(; +begin isolation level repeatable read(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit(; +begin isolation level repeatable(read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit; +)begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit); +begin isolation level repeatable read); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit); +begin isolation level repeatable)read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit; +-begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-; +begin isolation level repeatable read-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-; +begin isolation level repeatable-read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit; ++begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit+; +begin isolation level repeatable read+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit+; +begin isolation level repeatable+read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit; +-#begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-#; +begin isolation level repeatable read-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-#; +begin isolation level repeatable-#read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit; +/begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/; +begin isolation level repeatable read/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/; +begin isolation level repeatable/read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit; +\begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit\; +begin isolation level repeatable read\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit\; +begin isolation level repeatable\read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit; +?begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit?; +begin isolation level repeatable read?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit?; +begin isolation level repeatable?read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit; +-/begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-/; +begin isolation level repeatable read-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-/; +begin isolation level repeatable-/read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit; +/#begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/#; +begin isolation level repeatable read/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/#; +begin isolation level repeatable/#read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit; +/-begin isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/-; +begin isolation level repeatable read/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/-; +begin isolation level repeatable/-read; NEW_CONNECTION; -begin transaction; -commit transaction; +begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; -COMMIT TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -begin transaction; -commit transaction; +begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; - commit transaction; + begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; - commit transaction; + begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit transaction; +begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit transaction ; +begin transaction isolation level repeatable read ; NEW_CONNECTION; -begin transaction; -commit transaction ; +begin transaction isolation level repeatable read ; NEW_CONNECTION; -begin transaction; -commit transaction +begin transaction isolation level repeatable read ; NEW_CONNECTION; -begin transaction; -commit transaction; +begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit transaction; +begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; -commit -transaction; +begin +transaction +isolation +level +repeatable +read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit transaction; +foo begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction bar; +begin transaction isolation level repeatable read bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit transaction; +%begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction%; +begin transaction isolation level repeatable read%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit%transaction; +begin transaction isolation level repeatable%read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit transaction; +_begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction_; +begin transaction isolation level repeatable read_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit_transaction; +begin transaction isolation level repeatable_read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit transaction; +&begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction&; +begin transaction isolation level repeatable read&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit&transaction; +begin transaction isolation level repeatable&read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit transaction; +$begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction$; +begin transaction isolation level repeatable read$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit$transaction; +begin transaction isolation level repeatable$read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit transaction; +@begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction@; +begin transaction isolation level repeatable read@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit@transaction; +begin transaction isolation level repeatable@read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit transaction; +!begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction!; +begin transaction isolation level repeatable read!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit!transaction; +begin transaction isolation level repeatable!read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit transaction; +*begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction*; +begin transaction isolation level repeatable read*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit*transaction; +begin transaction isolation level repeatable*read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit transaction; +(begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction(; +begin transaction isolation level repeatable read(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit(transaction; +begin transaction isolation level repeatable(read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit transaction; +)begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction); +begin transaction isolation level repeatable read); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit)transaction; +begin transaction isolation level repeatable)read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit transaction; +-begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction-; +begin transaction isolation level repeatable read-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-transaction; +begin transaction isolation level repeatable-read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit transaction; ++begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction+; +begin transaction isolation level repeatable read+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit+transaction; +begin transaction isolation level repeatable+read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit transaction; +-#begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction-#; +begin transaction isolation level repeatable read-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-#transaction; +begin transaction isolation level repeatable-#read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit transaction; +/begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction/; +begin transaction isolation level repeatable read/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/transaction; +begin transaction isolation level repeatable/read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit transaction; +\begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction\; +begin transaction isolation level repeatable read\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit\transaction; +begin transaction isolation level repeatable\read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit transaction; +?begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction?; +begin transaction isolation level repeatable read?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit?transaction; +begin transaction isolation level repeatable?read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit transaction; +-/begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction-/; +begin transaction isolation level repeatable read-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-/transaction; +begin transaction isolation level repeatable-/read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit transaction; +/#begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction/#; +begin transaction isolation level repeatable read/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/#transaction; +begin transaction isolation level repeatable/#read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit transaction; +/-begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction/-; +begin transaction isolation level repeatable read/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/-transaction; +begin transaction isolation level repeatable/-read; NEW_CONNECTION; -begin transaction; -rollback; +begin isolation level serializable; NEW_CONNECTION; -begin transaction; -ROLLBACK; +BEGIN ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -begin transaction; -rollback; +begin isolation level serializable; NEW_CONNECTION; -begin transaction; - rollback; + begin isolation level serializable; NEW_CONNECTION; -begin transaction; - rollback; + begin isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback; +begin isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback ; +begin isolation level serializable ; NEW_CONNECTION; -begin transaction; -rollback ; +begin isolation level serializable ; NEW_CONNECTION; -begin transaction; -rollback +begin isolation level serializable ; NEW_CONNECTION; -begin transaction; -rollback; +begin isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback; +begin isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback; +begin +isolation +level +serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback; +foo begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback bar; +begin isolation level serializable bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback; +%begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback%; +begin isolation level serializable%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback%; +begin isolation level%serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback; +_begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback_; +begin isolation level serializable_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback_; +begin isolation level_serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback; +&begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback&; +begin isolation level serializable&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback&; +begin isolation level&serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback; +$begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback$; +begin isolation level serializable$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback$; +begin isolation level$serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback; +@begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback@; +begin isolation level serializable@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback@; +begin isolation level@serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback; +!begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback!; +begin isolation level serializable!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback!; +begin isolation level!serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback; +*begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback*; +begin isolation level serializable*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback*; +begin isolation level*serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback; +(begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback(; +begin isolation level serializable(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback(; +begin isolation level(serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback; +)begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback); +begin isolation level serializable); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback); +begin isolation level)serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback; +-begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-; +begin isolation level serializable-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-; +begin isolation level-serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback; ++begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback+; +begin isolation level serializable+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback+; +begin isolation level+serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback; +-#begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-#; +begin isolation level serializable-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-#; +begin isolation level-#serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback; +/begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/; +begin isolation level serializable/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/; +begin isolation level/serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback; +\begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback\; +begin isolation level serializable\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback\; +begin isolation level\serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback; +?begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback?; +begin isolation level serializable?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback?; +begin isolation level?serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback; +-/begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-/; +begin isolation level serializable-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-/; +begin isolation level-/serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback; +/#begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/#; +begin isolation level serializable/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/#; +begin isolation level/#serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback; +/-begin isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/-; +begin isolation level serializable/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/-; +begin isolation level/-serializable; NEW_CONNECTION; -begin transaction; -rollback transaction; +begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; -ROLLBACK TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -begin transaction; -rollback transaction; +begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; - rollback transaction; + begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; - rollback transaction; + begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback transaction; +begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback transaction ; +begin transaction isolation level serializable ; NEW_CONNECTION; -begin transaction; -rollback transaction ; +begin transaction isolation level serializable ; NEW_CONNECTION; -begin transaction; -rollback transaction +begin transaction isolation level serializable ; NEW_CONNECTION; -begin transaction; -rollback transaction; +begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback transaction; +begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; -rollback -transaction; +begin +transaction +isolation +level +serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback transaction; +foo begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction bar; +begin transaction isolation level serializable bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback transaction; +%begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction%; +begin transaction isolation level serializable%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback%transaction; +begin transaction isolation level%serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback transaction; +_begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction_; +begin transaction isolation level serializable_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback_transaction; +begin transaction isolation level_serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback transaction; +&begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction&; +begin transaction isolation level serializable&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback&transaction; +begin transaction isolation level&serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback transaction; +$begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction$; +begin transaction isolation level serializable$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback$transaction; +begin transaction isolation level$serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback transaction; +@begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction@; +begin transaction isolation level serializable@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback@transaction; +begin transaction isolation level@serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback transaction; +!begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction!; +begin transaction isolation level serializable!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback!transaction; +begin transaction isolation level!serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback transaction; +*begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction*; +begin transaction isolation level serializable*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback*transaction; +begin transaction isolation level*serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback transaction; +(begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction(; +begin transaction isolation level serializable(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback(transaction; +begin transaction isolation level(serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback transaction; +)begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction); +begin transaction isolation level serializable); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback)transaction; +begin transaction isolation level)serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback transaction; +-begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction-; +begin transaction isolation level serializable-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-transaction; +begin transaction isolation level-serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback transaction; ++begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction+; +begin transaction isolation level serializable+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback+transaction; +begin transaction isolation level+serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback transaction; +-#begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction-#; +begin transaction isolation level serializable-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-#transaction; +begin transaction isolation level-#serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback transaction; +/begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction/; +begin transaction isolation level serializable/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/transaction; +begin transaction isolation level/serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback transaction; +\begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction\; +begin transaction isolation level serializable\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback\transaction; +begin transaction isolation level\serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback transaction; +?begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction?; +begin transaction isolation level serializable?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback?transaction; +begin transaction isolation level?serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback transaction; +-/begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction-/; +begin transaction isolation level serializable-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-/transaction; +begin transaction isolation level-/serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback transaction; +/#begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction/#; +begin transaction isolation level serializable/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/#transaction; +begin transaction isolation level/#serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback transaction; +/-begin transaction isolation level serializable; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction/-; +begin transaction isolation level serializable/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/-transaction; +begin transaction isolation level/-serializable; NEW_CONNECTION; -start batch ddl; +start isolation level repeatable read; NEW_CONNECTION; -START BATCH DDL; +START ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -start batch ddl; +start isolation level repeatable read; NEW_CONNECTION; - start batch ddl; + start isolation level repeatable read; NEW_CONNECTION; - start batch ddl; + start isolation level repeatable read; NEW_CONNECTION; -start batch ddl; +start isolation level repeatable read; NEW_CONNECTION; -start batch ddl ; +start isolation level repeatable read ; NEW_CONNECTION; -start batch ddl ; +start isolation level repeatable read ; NEW_CONNECTION; -start batch ddl +start isolation level repeatable read ; NEW_CONNECTION; -start batch ddl; +start isolation level repeatable read; NEW_CONNECTION; -start batch ddl; +start isolation level repeatable read; NEW_CONNECTION; start -batch -ddl; +isolation +level +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start batch ddl; +foo start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl bar; +start isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start batch ddl; +%start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl%; +start isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch%ddl; +start isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start batch ddl; +_start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl_; +start isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch_ddl; +start isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start batch ddl; +&start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl&; +start isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch&ddl; +start isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start batch ddl; +$start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl$; +start isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch$ddl; +start isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start batch ddl; +@start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl@; +start isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch@ddl; +start isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start batch ddl; +!start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl!; +start isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch!ddl; +start isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start batch ddl; +*start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl*; +start isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch*ddl; +start isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start batch ddl; +(start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl(; +start isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch(ddl; +start isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start batch ddl; +)start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl); +start isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch)ddl; +start isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start batch ddl; +-start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl-; +start isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-ddl; +start isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start batch ddl; ++start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl+; +start isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch+ddl; +start isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start batch ddl; +-#start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl-#; +start isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-#ddl; +start isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start batch ddl; +/start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl/; +start isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/ddl; +start isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start batch ddl; +\start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl\; +start isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch\ddl; +start isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start batch ddl; +?start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl?; +start isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch?ddl; +start isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start batch ddl; +-/start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl-/; +start isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-/ddl; +start isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start batch ddl; +/#start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl/#; +start isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/#ddl; +start isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start batch ddl; +/-start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl/-; +start isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/-ddl; +start isolation level repeatable/-read; NEW_CONNECTION; -start batch dml; +start transaction isolation level repeatable read; NEW_CONNECTION; -START BATCH DML; +START TRANSACTION ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -start batch dml; +start transaction isolation level repeatable read; NEW_CONNECTION; - start batch dml; + start transaction isolation level repeatable read; NEW_CONNECTION; - start batch dml; + start transaction isolation level repeatable read; NEW_CONNECTION; -start batch dml; +start transaction isolation level repeatable read; NEW_CONNECTION; -start batch dml ; +start transaction isolation level repeatable read ; NEW_CONNECTION; -start batch dml ; +start transaction isolation level repeatable read ; NEW_CONNECTION; -start batch dml +start transaction isolation level repeatable read ; NEW_CONNECTION; -start batch dml; +start transaction isolation level repeatable read; NEW_CONNECTION; -start batch dml; +start transaction isolation level repeatable read; NEW_CONNECTION; start -batch -dml; +transaction +isolation +level +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start batch dml; +foo start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml bar; +start transaction isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start batch dml; +%start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml%; +start transaction isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch%dml; +start transaction isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start batch dml; +_start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml_; +start transaction isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch_dml; +start transaction isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start batch dml; +&start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml&; +start transaction isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch&dml; +start transaction isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start batch dml; +$start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml$; +start transaction isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch$dml; +start transaction isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start batch dml; +@start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml@; +start transaction isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch@dml; +start transaction isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start batch dml; +!start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml!; +start transaction isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch!dml; +start transaction isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start batch dml; +*start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml*; +start transaction isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch*dml; +start transaction isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start batch dml; +(start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml(; +start transaction isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch(dml; +start transaction isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start batch dml; +)start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml); +start transaction isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch)dml; +start transaction isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start batch dml; +-start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml-; +start transaction isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-dml; +start transaction isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start batch dml; ++start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml+; +start transaction isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch+dml; +start transaction isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start batch dml; +-#start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml-#; +start transaction isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-#dml; +start transaction isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start batch dml; +/start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml/; +start transaction isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/dml; +start transaction isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start batch dml; +\start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml\; +start transaction isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch\dml; +start transaction isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start batch dml; +?start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml?; +start transaction isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch?dml; +start transaction isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start batch dml; +-/start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml-/; +start transaction isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-/dml; +start transaction isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start batch dml; +/#start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml/#; +start transaction isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/#dml; +start transaction isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start batch dml; +/-start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml/-; +start transaction isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/-dml; +start transaction isolation level repeatable/-read; NEW_CONNECTION; -start batch ddl; -run batch; +start isolation level serializable; NEW_CONNECTION; -start batch ddl; -RUN BATCH; +START ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -start batch ddl; -run batch; +start isolation level serializable; NEW_CONNECTION; -start batch ddl; - run batch; + start isolation level serializable; NEW_CONNECTION; -start batch ddl; - run batch; + start isolation level serializable; NEW_CONNECTION; -start batch ddl; -run batch; +start isolation level serializable; NEW_CONNECTION; -start batch ddl; -run batch ; +start isolation level serializable ; NEW_CONNECTION; -start batch ddl; -run batch ; +start isolation level serializable ; NEW_CONNECTION; -start batch ddl; -run batch +start isolation level serializable ; NEW_CONNECTION; -start batch ddl; -run batch; +start isolation level serializable; NEW_CONNECTION; -start batch ddl; -run batch; +start isolation level serializable; NEW_CONNECTION; -start batch ddl; -run -batch; +start +isolation +level +serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -foo run batch; +foo start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch bar; +start isolation level serializable bar; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -%run batch; +%start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch%; +start isolation level serializable%; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run%batch; +start isolation level%serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -_run batch; +_start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch_; +start isolation level serializable_; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run_batch; +start isolation level_serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -&run batch; +&start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch&; +start isolation level serializable&; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run&batch; +start isolation level&serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -$run batch; +$start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch$; +start isolation level serializable$; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run$batch; +start isolation level$serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -@run batch; +@start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch@; +start isolation level serializable@; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run@batch; +start isolation level@serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -!run batch; +!start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch!; +start isolation level serializable!; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run!batch; +start isolation level!serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -*run batch; +*start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch*; +start isolation level serializable*; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run*batch; +start isolation level*serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -(run batch; +(start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch(; +start isolation level serializable(; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run(batch; +start isolation level(serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -)run batch; +)start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch); +start isolation level serializable); NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run)batch; +start isolation level)serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --run batch; +-start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch-; +start isolation level serializable-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run-batch; +start isolation level-serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -+run batch; ++start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch+; +start isolation level serializable+; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run+batch; +start isolation level+serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --#run batch; +-#start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch-#; +start isolation level serializable-#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run-#batch; +start isolation level-#serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/run batch; +/start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch/; +start isolation level serializable/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run/batch; +start isolation level/serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -\run batch; +\start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch\; +start isolation level serializable\; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run\batch; +start isolation level\serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -?run batch; +?start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch?; +start isolation level serializable?; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run?batch; +start isolation level?serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --/run batch; +-/start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch-/; +start isolation level serializable-/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run-/batch; +start isolation level-/serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/#run batch; +/#start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch/#; +start isolation level serializable/#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run/#batch; +start isolation level/#serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/-run batch; +/-start isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch/-; +start isolation level serializable/-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run/-batch; +start isolation level/-serializable; NEW_CONNECTION; -start batch ddl; -abort batch; +start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; -ABORT BATCH; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -start batch ddl; -abort batch; +start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; - abort batch; + start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; - abort batch; + start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; -abort batch; +start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; -abort batch ; +start transaction isolation level serializable ; NEW_CONNECTION; -start batch ddl; -abort batch ; +start transaction isolation level serializable ; NEW_CONNECTION; -start batch ddl; -abort batch +start transaction isolation level serializable ; NEW_CONNECTION; -start batch ddl; -abort batch; +start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; -abort batch; +start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; -abort -batch; +start +transaction +isolation +level +serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort batch; +foo start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch bar; +start transaction isolation level serializable bar; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort batch; +%start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch%; +start transaction isolation level serializable%; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort%batch; +start transaction isolation level%serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort batch; +_start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch_; +start transaction isolation level serializable_; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort_batch; +start transaction isolation level_serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort batch; +&start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch&; +start transaction isolation level serializable&; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort&batch; +start transaction isolation level&serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort batch; +$start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch$; +start transaction isolation level serializable$; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort$batch; +start transaction isolation level$serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort batch; +@start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch@; +start transaction isolation level serializable@; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort@batch; +start transaction isolation level@serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort batch; +!start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch!; +start transaction isolation level serializable!; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort!batch; +start transaction isolation level!serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort batch; +*start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch*; +start transaction isolation level serializable*; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort*batch; +start transaction isolation level*serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort batch; +(start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch(; +start transaction isolation level serializable(; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort(batch; +start transaction isolation level(serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort batch; +)start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch); +start transaction isolation level serializable); NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort)batch; +start transaction isolation level)serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --abort batch; +-start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch-; +start transaction isolation level serializable-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-batch; +start transaction isolation level-serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort batch; ++start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch+; +start transaction isolation level serializable+; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort+batch; +start transaction isolation level+serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort batch; +-#start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch-#; +start transaction isolation level serializable-#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-#batch; +start transaction isolation level-#serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort batch; +/start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch/; +start transaction isolation level serializable/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/batch; +start transaction isolation level/serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort batch; +\start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch\; +start transaction isolation level serializable\; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort\batch; +start transaction isolation level\serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort batch; +?start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch?; +start transaction isolation level serializable?; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort?batch; +start transaction isolation level?serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort batch; +-/start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch-/; +start transaction isolation level serializable-/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-/batch; +start transaction isolation level-/serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort batch; +/#start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch/#; +start transaction isolation level serializable/#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/#batch; +start transaction isolation level/#serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort batch; +/-start transaction isolation level serializable; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch/-; +start transaction isolation level serializable/-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/-batch; +start transaction isolation level/-serializable; NEW_CONNECTION; -reset all; +begin transaction; +commit; NEW_CONNECTION; -RESET ALL; +begin transaction; +COMMIT; NEW_CONNECTION; -reset all; +begin transaction; +commit; NEW_CONNECTION; - reset all; +begin transaction; + commit; NEW_CONNECTION; - reset all; +begin transaction; + commit; NEW_CONNECTION; +begin transaction; -reset all; +commit; NEW_CONNECTION; -reset all ; +begin transaction; +commit ; NEW_CONNECTION; -reset all ; +begin transaction; +commit ; NEW_CONNECTION; -reset all +begin transaction; +commit ; NEW_CONNECTION; -reset all; +begin transaction; +commit; NEW_CONNECTION; -reset all; +begin transaction; +commit; NEW_CONNECTION; -reset -all; +begin transaction; +commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo reset all; +foo commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all bar; +commit bar; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%reset all; +%commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all%; +commit%; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset%all; +commit%; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_reset all; +_commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all_; +commit_; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset_all; +commit_; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&reset all; +&commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all&; +commit&; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset&all; +commit&; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$reset all; +$commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all$; +commit$; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset$all; +commit$; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@reset all; +@commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all@; +commit@; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset@all; +commit@; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!reset all; +!commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all!; +commit!; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset!all; +commit!; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*reset all; +*commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all*; +commit*; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset*all; +commit*; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(reset all; +(commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all(; +commit(; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset(all; +commit(; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)reset all; +)commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all); +commit); NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset)all; +commit); NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --reset all; +-commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all-; +commit-; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset-all; +commit-; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+reset all; ++commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all+; +commit+; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset+all; +commit+; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#reset all; +-#commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all-#; +commit-#; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset-#all; +commit-#; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/reset all; +/commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all/; +commit/; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset/all; +commit/; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\reset all; +\commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all\; +commit\; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset\all; +commit\; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?reset all; +?commit; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all?; +commit?; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -reset?all; +commit?; NEW_CONNECTION; +begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/reset all; +-/commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/-; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; +COMMIT TRANSACTION; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; + commit transaction; +NEW_CONNECTION; +begin transaction; + commit transaction; +NEW_CONNECTION; +begin transaction; + + + +commit transaction; +NEW_CONNECTION; +begin transaction; +commit transaction ; +NEW_CONNECTION; +begin transaction; +commit transaction ; +NEW_CONNECTION; +begin transaction; +commit transaction + +; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; +commit +transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit%transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit_transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit&transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit$transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit@transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit!transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit*transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit(transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit)transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit+transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit\transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit?transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/-transaction; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +ROLLBACK; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; + rollback; +NEW_CONNECTION; +begin transaction; + rollback; +NEW_CONNECTION; +begin transaction; + + + +rollback; +NEW_CONNECTION; +begin transaction; +rollback ; +NEW_CONNECTION; +begin transaction; +rollback ; +NEW_CONNECTION; +begin transaction; +rollback + +; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/-; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; +ROLLBACK TRANSACTION; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; + rollback transaction; +NEW_CONNECTION; +begin transaction; + rollback transaction; +NEW_CONNECTION; +begin transaction; + + + +rollback transaction; +NEW_CONNECTION; +begin transaction; +rollback transaction ; +NEW_CONNECTION; +begin transaction; +rollback transaction ; +NEW_CONNECTION; +begin transaction; +rollback transaction + +; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; +rollback +transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback%transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback_transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback&transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback$transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback@transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback!transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback*transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback(transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback)transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback+transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback\transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback?transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/-transaction; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; +START BATCH DDL; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; + start batch ddl; +NEW_CONNECTION; + start batch ddl; +NEW_CONNECTION; + + + +start batch ddl; +NEW_CONNECTION; +start batch ddl ; +NEW_CONNECTION; +start batch ddl ; +NEW_CONNECTION; +start batch ddl + +; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; +start +batch +ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch%ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch_ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch&ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch$ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch@ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch!ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch*ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch(ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch)ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch+ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-#ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch\ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch?ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-/ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/#ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/-ddl; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; +START BATCH DML; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; + start batch dml; +NEW_CONNECTION; + start batch dml; +NEW_CONNECTION; + + + +start batch dml; +NEW_CONNECTION; +start batch dml ; +NEW_CONNECTION; +start batch dml ; +NEW_CONNECTION; +start batch dml + +; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; +start +batch +dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch%dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch_dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch&dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch$dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch@dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch!dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch*dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch(dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch)dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch+dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-#dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch\dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch?dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-/dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/#dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/-dml; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; +RUN BATCH; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; + run batch; +NEW_CONNECTION; +start batch ddl; + run batch; +NEW_CONNECTION; +start batch ddl; + + + +run batch; +NEW_CONNECTION; +start batch ddl; +run batch ; +NEW_CONNECTION; +start batch ddl; +run batch ; +NEW_CONNECTION; +start batch ddl; +run batch + +; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; +run +batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch bar; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +%run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch%; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run%batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +_run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch_; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run_batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +&run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch&; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run&batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +$run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch$; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run$batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +@run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch@; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run@batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +!run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch!; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run!batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +*run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch*; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run*batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +(run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch(; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run(batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +)run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch); +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run)batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run-batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT ++run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch+; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run+batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch-#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run-#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +\run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch\; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run\batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +?run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch?; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run?batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch-/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run-/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch/#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run/#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch/-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run/-batch; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; +ABORT BATCH; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; + abort batch; +NEW_CONNECTION; +start batch ddl; + abort batch; +NEW_CONNECTION; +start batch ddl; + + + +abort batch; +NEW_CONNECTION; +start batch ddl; +abort batch ; +NEW_CONNECTION; +start batch ddl; +abort batch ; +NEW_CONNECTION; +start batch ddl; +abort batch + +; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; +abort +batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch bar; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch%; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort%batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch_; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort_batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch&; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort&batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch$; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort$batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch@; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort@batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch!; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort!batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch*; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort*batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch(; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort(batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch); +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort)batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT ++abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch+; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort+batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch-#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch\; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort\batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch?; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort?batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch-/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch/#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch/-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/-batch; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; +RESET ALL; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; + reset all; +NEW_CONNECTION; + reset all; +NEW_CONNECTION; + + + +reset all; +NEW_CONNECTION; +reset all ; +NEW_CONNECTION; +reset all ; +NEW_CONNECTION; +reset all + +; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; +reset +all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset%all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset_all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset&all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset$all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset@all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset!all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset*all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset(all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset)all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset-all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset+all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset-#all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset/all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset\all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset?all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset-/all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset/#all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset/-all; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; +SET AUTOCOMMIT = TRUE; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; + set autocommit = true; +NEW_CONNECTION; + set autocommit = true; +NEW_CONNECTION; + + + +set autocommit = true; +NEW_CONNECTION; +set autocommit = true ; +NEW_CONNECTION; +set autocommit = true ; +NEW_CONNECTION; +set autocommit = true + +; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; +set +autocommit += +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/-true; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; +SET AUTOCOMMIT = FALSE; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; + set autocommit = false; +NEW_CONNECTION; + set autocommit = false; +NEW_CONNECTION; + + + +set autocommit = false; +NEW_CONNECTION; +set autocommit = false ; +NEW_CONNECTION; +set autocommit = false ; +NEW_CONNECTION; +set autocommit = false + +; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; +set +autocommit += +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/-false; +NEW_CONNECTION; +set readonly = true; +NEW_CONNECTION; +SET READONLY = TRUE; +NEW_CONNECTION; +set readonly = true; +NEW_CONNECTION; + set readonly = true; +NEW_CONNECTION; + set readonly = true; +NEW_CONNECTION; + + + +set readonly = true; +NEW_CONNECTION; +set readonly = true ; +NEW_CONNECTION; +set readonly = true ; +NEW_CONNECTION; +set readonly = true + +; +NEW_CONNECTION; +set readonly = true; +NEW_CONNECTION; +set readonly = true; +NEW_CONNECTION; +set +readonly += +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =/-true; +NEW_CONNECTION; +set readonly = false; +NEW_CONNECTION; +SET READONLY = FALSE; +NEW_CONNECTION; +set readonly = false; +NEW_CONNECTION; + set readonly = false; +NEW_CONNECTION; + set readonly = false; +NEW_CONNECTION; + + + +set readonly = false; +NEW_CONNECTION; +set readonly = false ; +NEW_CONNECTION; +set readonly = false ; +NEW_CONNECTION; +set readonly = false + +; +NEW_CONNECTION; +set readonly = false; +NEW_CONNECTION; +set readonly = false; +NEW_CONNECTION; +set +readonly += +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly = false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set readonly =/-false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +SET RETRY_ABORTS_INTERNALLY = TRUE; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + + + +set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = true ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = true ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = true + +; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set +retry_aborts_internally += +true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true bar; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true%; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =%true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true_; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =_true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true&; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =&true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true$; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =$true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true@; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =@true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true!; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =!true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true*; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =*true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true(; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =(true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true); +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =)true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =-true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true+; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =+true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true-#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =-#true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =/true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true\; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =\true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true?; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =?true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true-/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =-/true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true/#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =/#true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = true/-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =/-true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +SET RETRY_ABORTS_INTERNALLY = FALSE; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + + + +set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = false ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = false ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = false + +; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set +retry_aborts_internally += +false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false bar; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false%; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =%false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false_; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =_false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false&; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =&false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false$; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =$false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false@; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =@false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false!; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =!false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false*; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =*false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false(; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =(false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false); +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =)false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =-false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false+; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =+false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false-#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =-#false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =/false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false\; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =\false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false?; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =?false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false-/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =-/false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false/#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =/#false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally = false/-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set retry_aborts_internally =/-false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +SET LOCAL RETRY_ABORTS_INTERNALLY = TRUE; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + + + +set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = true ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = true ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = true + +; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set +local +retry_aborts_internally += +true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true bar; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true%; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =%true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true_; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =_true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true&; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =&true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true$; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =$true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true@; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =@true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true!; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =!true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true*; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =*true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true(; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =(true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true); +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =)true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =-true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true+; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =+true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true-#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =-#true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =/true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true\; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =\true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true?; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =?true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true-/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =-/true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true/#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =/#true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set local retry_aborts_internally = true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = true/-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =/-true; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +SET LOCAL RETRY_ABORTS_INTERNALLY = FALSE; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; + + + +set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = false ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = false ; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = false + +; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +set +local +retry_aborts_internally += +false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false bar; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false%; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =%false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false_; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =_false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false&; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =&false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false$; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =$false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false@; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =@false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false!; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =!false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false*; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =*false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false(; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =(false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false); +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =)false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =-false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false+; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =+false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false-#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =-#false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =/false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false\; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =\false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false?; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =?false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false-/; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =-/false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false/#; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =/#false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set local retry_aborts_internally = false; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally = false/-; +NEW_CONNECTION; +set readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local retry_aborts_internally =/-false; +NEW_CONNECTION; +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set autocommit_dml_mode='partitioned_non_atomic'; +NEW_CONNECTION; + set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; + set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; + + + +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; +NEW_CONNECTION; +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; +NEW_CONNECTION; +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' + +; +NEW_CONNECTION; +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set +autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL'; +NEW_CONNECTION; +set autocommit_dml_mode='transactional'; +NEW_CONNECTION; + set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; + set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; + + + +set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL' ; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL' ; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL' + +; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +set +autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-autocommit_dml_mode='TRANSACTIONAL'; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set autocommit_dml_mode='transactional_with_fallback_to_partitioned_non_atomic'; +NEW_CONNECTION; + set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; + set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; + + + +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' + +; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set +autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set statement_timeout=null; +NEW_CONNECTION; +SET STATEMENT_TIMEOUT=NULL; +NEW_CONNECTION; +set statement_timeout=null; +NEW_CONNECTION; + set statement_timeout=null; +NEW_CONNECTION; + set statement_timeout=null; +NEW_CONNECTION; + + + +set statement_timeout=null; +NEW_CONNECTION; +set statement_timeout=null ; +NEW_CONNECTION; +set statement_timeout=null ; +NEW_CONNECTION; +set statement_timeout=null + +; +NEW_CONNECTION; +set statement_timeout=null; +NEW_CONNECTION; +set statement_timeout=null; +NEW_CONNECTION; +set +statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set statement_timeout=null; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=null/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-statement_timeout=null; +NEW_CONNECTION; +set statement_timeout = null ; +NEW_CONNECTION; +SET STATEMENT_TIMEOUT = NULL ; +NEW_CONNECTION; +set statement_timeout = null ; +NEW_CONNECTION; + set statement_timeout = null ; +NEW_CONNECTION; + set statement_timeout = null ; +NEW_CONNECTION; + + + +set statement_timeout = null ; +NEW_CONNECTION; +set statement_timeout = null ; +NEW_CONNECTION; +set statement_timeout = null ; +NEW_CONNECTION; +set statement_timeout = null + +; +NEW_CONNECTION; +set statement_timeout = null ; +NEW_CONNECTION; +set statement_timeout = null ; +NEW_CONNECTION; +set +statement_timeout += +null +; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null %; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null _; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null &; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null $; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null @; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null !; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null *; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null (; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null ); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null -; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null +; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null -#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null /; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null \; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null ?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null -/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null /#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set statement_timeout = null ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null /-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = null/-; +NEW_CONNECTION; +set statement_timeout='1s'; +NEW_CONNECTION; +SET STATEMENT_TIMEOUT='1S'; +NEW_CONNECTION; +set statement_timeout='1s'; +NEW_CONNECTION; + set statement_timeout='1s'; +NEW_CONNECTION; + set statement_timeout='1s'; +NEW_CONNECTION; + + + +set statement_timeout='1s'; +NEW_CONNECTION; +set statement_timeout='1s' ; +NEW_CONNECTION; +set statement_timeout='1s' ; +NEW_CONNECTION; +set statement_timeout='1s' + +; +NEW_CONNECTION; +set statement_timeout='1s'; +NEW_CONNECTION; +set statement_timeout='1s'; +NEW_CONNECTION; +set +statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set statement_timeout='1s'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout='1s'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-statement_timeout='1s'; +NEW_CONNECTION; +set statement_timeout = '1s' ; +NEW_CONNECTION; +SET STATEMENT_TIMEOUT = '1S' ; +NEW_CONNECTION; +set statement_timeout = '1s' ; +NEW_CONNECTION; + set statement_timeout = '1s' ; +NEW_CONNECTION; + set statement_timeout = '1s' ; +NEW_CONNECTION; + + + +set statement_timeout = '1s' ; +NEW_CONNECTION; +set statement_timeout = '1s' ; +NEW_CONNECTION; +set statement_timeout = '1s' ; +NEW_CONNECTION; +set statement_timeout = '1s' + +; +NEW_CONNECTION; +set statement_timeout = '1s' ; +NEW_CONNECTION; +set statement_timeout = '1s' ; +NEW_CONNECTION; +set +statement_timeout += +'1s' +; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' %; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' _; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' &; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' $; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' @; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' !; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' *; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' (; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' ); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' -; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' +; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' -#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' /; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' \; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' ?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' -/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' /#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set statement_timeout = '1s' ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s' /-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = '1s'/-; +NEW_CONNECTION; +set statement_timeout=100; +NEW_CONNECTION; +SET STATEMENT_TIMEOUT=100; +NEW_CONNECTION; +set statement_timeout=100; +NEW_CONNECTION; + set statement_timeout=100; +NEW_CONNECTION; + set statement_timeout=100; +NEW_CONNECTION; + + + +set statement_timeout=100; +NEW_CONNECTION; +set statement_timeout=100 ; +NEW_CONNECTION; +set statement_timeout=100 ; +NEW_CONNECTION; +set statement_timeout=100 + +; +NEW_CONNECTION; +set statement_timeout=100; +NEW_CONNECTION; +set statement_timeout=100; +NEW_CONNECTION; +set +statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100 bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set statement_timeout=100; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout=100/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-statement_timeout=100; +NEW_CONNECTION; +set statement_timeout = 100 ; +NEW_CONNECTION; +SET STATEMENT_TIMEOUT = 100 ; +NEW_CONNECTION; +set statement_timeout = 100 ; +NEW_CONNECTION; + set statement_timeout = 100 ; +NEW_CONNECTION; + set statement_timeout = 100 ; +NEW_CONNECTION; + + + +set statement_timeout = 100 ; +NEW_CONNECTION; +set statement_timeout = 100 ; +NEW_CONNECTION; +set statement_timeout = 100 ; +NEW_CONNECTION; +set statement_timeout = 100 + +; +NEW_CONNECTION; +set statement_timeout = 100 ; +NEW_CONNECTION; +set statement_timeout = 100 ; +NEW_CONNECTION; +set +statement_timeout += +100 +; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all-/; +set statement_timeout = 100 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset-/all; +%set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#reset all; +set statement_timeout = 100 %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all/#; +set statement_timeout = 100%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset/#all; +_set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-reset all; +set statement_timeout = 100 _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all/-; +set statement_timeout = 100_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset/-all; +&set statement_timeout = 100 ; NEW_CONNECTION; -set autocommit = true; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 &; NEW_CONNECTION; -SET AUTOCOMMIT = TRUE; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100&; NEW_CONNECTION; -set autocommit = true; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set statement_timeout = 100 ; NEW_CONNECTION; - set autocommit = true; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 $; NEW_CONNECTION; - set autocommit = true; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 @; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 !; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 *; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 (; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 ); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 -; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 +; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 -#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 /; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 \; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 ?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 -/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 /#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set statement_timeout = 100 ; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100 /-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set statement_timeout = 100/-; +NEW_CONNECTION; +set statement_timeout='100ms'; +NEW_CONNECTION; +SET STATEMENT_TIMEOUT='100MS'; +NEW_CONNECTION; +set statement_timeout='100ms'; +NEW_CONNECTION; + set statement_timeout='100ms'; +NEW_CONNECTION; + set statement_timeout='100ms'; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='100ms'; NEW_CONNECTION; -set autocommit = true ; +set statement_timeout='100ms' ; NEW_CONNECTION; -set autocommit = true ; +set statement_timeout='100ms' ; NEW_CONNECTION; -set autocommit = true +set statement_timeout='100ms' ; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='100ms'; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='100ms'; NEW_CONNECTION; set -autocommit -= -true; +statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit = true; +foo set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true bar; +set statement_timeout='100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit = true; +%set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true%; +set statement_timeout='100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =%true; +set%statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit = true; +_set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true_; +set statement_timeout='100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =_true; +set_statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit = true; +&set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true&; +set statement_timeout='100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =&true; +set&statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit = true; +$set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true$; +set statement_timeout='100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =$true; +set$statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit = true; +@set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true@; +set statement_timeout='100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =@true; +set@statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit = true; +!set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true!; +set statement_timeout='100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =!true; +set!statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit = true; +*set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true*; +set statement_timeout='100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =*true; +set*statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit = true; +(set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true(; +set statement_timeout='100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =(true; +set(statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit = true; +)set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true); +set statement_timeout='100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =)true; +set)statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit = true; +-set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true-; +set statement_timeout='100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-true; +set-statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit = true; ++set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true+; +set statement_timeout='100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =+true; +set+statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit = true; +-#set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true-#; +set statement_timeout='100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-#true; +set-#statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit = true; +/set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true/; +set statement_timeout='100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/true; +set/statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit = true; +\set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true\; +set statement_timeout='100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =\true; +set\statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit = true; +?set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true?; +set statement_timeout='100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =?true; +set?statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit = true; +-/set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true-/; +set statement_timeout='100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-/true; +set-/statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit = true; +/#set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true/#; +set statement_timeout='100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/#true; +set/#statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit = true; +/-set statement_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true/-; +set statement_timeout='100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/-true; +set/-statement_timeout='100ms'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='10000us'; NEW_CONNECTION; -SET AUTOCOMMIT = FALSE; +SET STATEMENT_TIMEOUT='10000US'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='10000us'; NEW_CONNECTION; - set autocommit = false; + set statement_timeout='10000us'; NEW_CONNECTION; - set autocommit = false; + set statement_timeout='10000us'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='10000us'; NEW_CONNECTION; -set autocommit = false ; +set statement_timeout='10000us' ; NEW_CONNECTION; -set autocommit = false ; +set statement_timeout='10000us' ; NEW_CONNECTION; -set autocommit = false +set statement_timeout='10000us' ; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='10000us'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='10000us'; NEW_CONNECTION; set -autocommit -= -false; +statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit = false; +foo set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false bar; +set statement_timeout='10000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit = false; +%set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false%; +set statement_timeout='10000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =%false; +set%statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit = false; +_set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false_; +set statement_timeout='10000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =_false; +set_statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit = false; +&set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false&; +set statement_timeout='10000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =&false; +set&statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit = false; +$set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false$; +set statement_timeout='10000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =$false; +set$statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit = false; +@set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false@; +set statement_timeout='10000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =@false; +set@statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit = false; +!set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false!; +set statement_timeout='10000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =!false; +set!statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit = false; +*set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false*; +set statement_timeout='10000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =*false; +set*statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit = false; +(set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false(; +set statement_timeout='10000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =(false; +set(statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit = false; +)set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false); +set statement_timeout='10000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =)false; +set)statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit = false; +-set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false-; +set statement_timeout='10000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-false; +set-statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit = false; ++set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false+; +set statement_timeout='10000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =+false; +set+statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit = false; +-#set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false-#; +set statement_timeout='10000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-#false; +set-#statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit = false; +/set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false/; +set statement_timeout='10000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/false; +set/statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit = false; +\set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false\; +set statement_timeout='10000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =\false; +set\statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit = false; +?set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false?; +set statement_timeout='10000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =?false; +set?statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit = false; +-/set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false-/; +set statement_timeout='10000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-/false; +set-/statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit = false; +/#set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false/#; +set statement_timeout='10000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/#false; +set/#statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit = false; +/-set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false/-; +set statement_timeout='10000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/-false; +set/-statement_timeout='10000us'; NEW_CONNECTION; -set readonly = true; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -SET READONLY = TRUE; +SET STATEMENT_TIMEOUT='9223372036854775807NS'; NEW_CONNECTION; -set readonly = true; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; - set readonly = true; + set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; - set readonly = true; + set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set readonly = true; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set readonly = true ; +set statement_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set readonly = true ; +set statement_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set readonly = true +set statement_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set readonly = true; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set readonly = true; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; set -readonly -= -true; +statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set readonly = true; +foo set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true bar; +set statement_timeout='9223372036854775807ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set readonly = true; +%set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true%; +set statement_timeout='9223372036854775807ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =%true; +set%statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set readonly = true; +_set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true_; +set statement_timeout='9223372036854775807ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =_true; +set_statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set readonly = true; +&set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true&; +set statement_timeout='9223372036854775807ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =&true; +set&statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set readonly = true; +$set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true$; +set statement_timeout='9223372036854775807ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =$true; +set$statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set readonly = true; +@set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true@; +set statement_timeout='9223372036854775807ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =@true; +set@statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set readonly = true; +!set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true!; +set statement_timeout='9223372036854775807ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =!true; +set!statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set readonly = true; +*set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true*; +set statement_timeout='9223372036854775807ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =*true; +set*statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set readonly = true; +(set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true(; +set statement_timeout='9223372036854775807ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =(true; +set(statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set readonly = true; +)set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true); +set statement_timeout='9223372036854775807ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =)true; +set)statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set readonly = true; +-set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true-; +set statement_timeout='9223372036854775807ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =-true; +set-statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set readonly = true; ++set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true+; +set statement_timeout='9223372036854775807ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =+true; +set+statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set readonly = true; +-#set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true-#; +set statement_timeout='9223372036854775807ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =-#true; +set-#statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set readonly = true; +/set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true/; +set statement_timeout='9223372036854775807ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =/true; +set/statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set readonly = true; +\set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true\; +set statement_timeout='9223372036854775807ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =\true; +set\statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set readonly = true; +?set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true?; +set statement_timeout='9223372036854775807ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =?true; +set?statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set readonly = true; +-/set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true-/; +set statement_timeout='9223372036854775807ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =-/true; +set-/statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set readonly = true; +/#set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true/#; +set statement_timeout='9223372036854775807ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =/#true; +set/#statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set readonly = true; +/-set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = true/-; +set statement_timeout='9223372036854775807ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =/-true; +set/-statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set readonly = false; +set transaction_timeout=null; NEW_CONNECTION; -SET READONLY = FALSE; +SET TRANSACTION_TIMEOUT=NULL; NEW_CONNECTION; -set readonly = false; +set transaction_timeout=null; NEW_CONNECTION; - set readonly = false; + set transaction_timeout=null; NEW_CONNECTION; - set readonly = false; + set transaction_timeout=null; NEW_CONNECTION; -set readonly = false; +set transaction_timeout=null; NEW_CONNECTION; -set readonly = false ; +set transaction_timeout=null ; NEW_CONNECTION; -set readonly = false ; +set transaction_timeout=null ; NEW_CONNECTION; -set readonly = false +set transaction_timeout=null ; NEW_CONNECTION; -set readonly = false; +set transaction_timeout=null; NEW_CONNECTION; -set readonly = false; +set transaction_timeout=null; NEW_CONNECTION; set -readonly -= -false; +transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set readonly = false; +foo set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false bar; +set transaction_timeout=null bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set readonly = false; +%set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false%; +set transaction_timeout=null%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =%false; +set%transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set readonly = false; +_set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false_; +set transaction_timeout=null_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =_false; +set_transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set readonly = false; +&set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false&; +set transaction_timeout=null&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =&false; +set&transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set readonly = false; +$set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false$; +set transaction_timeout=null$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =$false; +set$transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set readonly = false; +@set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false@; +set transaction_timeout=null@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =@false; +set@transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set readonly = false; +!set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false!; +set transaction_timeout=null!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =!false; +set!transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set readonly = false; +*set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false*; +set transaction_timeout=null*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =*false; +set*transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set readonly = false; +(set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false(; +set transaction_timeout=null(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =(false; +set(transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set readonly = false; +)set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false); +set transaction_timeout=null); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =)false; +set)transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set readonly = false; +-set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false-; +set transaction_timeout=null-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =-false; +set-transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set readonly = false; ++set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false+; +set transaction_timeout=null+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =+false; +set+transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set readonly = false; +-#set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false-#; +set transaction_timeout=null-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =-#false; +set-#transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set readonly = false; +/set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false/; +set transaction_timeout=null/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =/false; +set/transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set readonly = false; +\set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false\; +set transaction_timeout=null\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =\false; +set\transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set readonly = false; +?set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false?; +set transaction_timeout=null?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =?false; +set?transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set readonly = false; +-/set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false-/; +set transaction_timeout=null-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =-/false; +set-/transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set readonly = false; +/#set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false/#; +set transaction_timeout=null/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =/#false; +set/#transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set readonly = false; +/-set transaction_timeout=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly = false/-; +set transaction_timeout=null/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set readonly =/-false; +set/-transaction_timeout=null; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true; +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -SET RETRY_ABORTS_INTERNALLY = TRUE; +SET TRANSACTION_TIMEOUT = NULL ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true; +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set retry_aborts_internally = true; + set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set retry_aborts_internally = true; + set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true; +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true ; +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true ; +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true; +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = true; +set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; set -retry_aborts_internally +transaction_timeout = -true; +null +; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set retry_aborts_internally = true; +foo set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true bar; +set transaction_timeout = null bar; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set retry_aborts_internally = true; +%set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true%; +set transaction_timeout = null %; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =%true; +set transaction_timeout = null%; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set retry_aborts_internally = true; +_set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true_; +set transaction_timeout = null _; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =_true; +set transaction_timeout = null_; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set retry_aborts_internally = true; +&set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true&; +set transaction_timeout = null &; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =&true; +set transaction_timeout = null&; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set retry_aborts_internally = true; +$set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true$; +set transaction_timeout = null $; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =$true; +set transaction_timeout = null$; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set retry_aborts_internally = true; +@set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true@; +set transaction_timeout = null @; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =@true; +set transaction_timeout = null@; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set retry_aborts_internally = true; +!set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true!; +set transaction_timeout = null !; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =!true; +set transaction_timeout = null!; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set retry_aborts_internally = true; +*set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true*; +set transaction_timeout = null *; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =*true; +set transaction_timeout = null*; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set retry_aborts_internally = true; +(set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true(; +set transaction_timeout = null (; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =(true; +set transaction_timeout = null(; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set retry_aborts_internally = true; +)set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true); +set transaction_timeout = null ); NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =)true; +set transaction_timeout = null); NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set retry_aborts_internally = true; +-set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true-; +set transaction_timeout = null -; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =-true; +set transaction_timeout = null-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set retry_aborts_internally = true; ++set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true+; +set transaction_timeout = null +; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =+true; +set transaction_timeout = null+; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set retry_aborts_internally = true; +-#set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true-#; +set transaction_timeout = null -#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =-#true; +set transaction_timeout = null-#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set retry_aborts_internally = true; +/set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true/; +set transaction_timeout = null /; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =/true; +set transaction_timeout = null/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set retry_aborts_internally = true; +\set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true\; +set transaction_timeout = null \; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =\true; +set transaction_timeout = null\; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set retry_aborts_internally = true; +?set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true?; +set transaction_timeout = null ?; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =?true; +set transaction_timeout = null?; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set retry_aborts_internally = true; +-/set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true-/; +set transaction_timeout = null -/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =-/true; +set transaction_timeout = null-/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set retry_aborts_internally = true; +/#set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true/#; +set transaction_timeout = null /#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =/#true; +set transaction_timeout = null/#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set retry_aborts_internally = true; +/-set transaction_timeout = null ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = true/-; +set transaction_timeout = null /-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =/-true; +set transaction_timeout = null/-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false; +set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -SET RETRY_ABORTS_INTERNALLY = FALSE; +SET TRANSACTION_TIMEOUT='1S'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false; +set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set retry_aborts_internally = false; + set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set retry_aborts_internally = false; + set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false; +set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false ; +set transaction_timeout='1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false ; +set transaction_timeout='1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false +set transaction_timeout='1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false; +set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set retry_aborts_internally = false; +set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; set -retry_aborts_internally -= -false; +transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set retry_aborts_internally = false; +foo set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false bar; +set transaction_timeout='1s' bar; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set retry_aborts_internally = false; +%set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false%; +set transaction_timeout='1s'%; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =%false; +set%transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set retry_aborts_internally = false; +_set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false_; +set transaction_timeout='1s'_; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =_false; +set_transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set retry_aborts_internally = false; +&set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false&; +set transaction_timeout='1s'&; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =&false; +set&transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set retry_aborts_internally = false; +$set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false$; +set transaction_timeout='1s'$; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =$false; +set$transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set retry_aborts_internally = false; +@set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false@; +set transaction_timeout='1s'@; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =@false; +set@transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set retry_aborts_internally = false; +!set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false!; +set transaction_timeout='1s'!; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =!false; +set!transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set retry_aborts_internally = false; +*set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false*; +set transaction_timeout='1s'*; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =*false; +set*transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set retry_aborts_internally = false; +(set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false(; +set transaction_timeout='1s'(; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =(false; +set(transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set retry_aborts_internally = false; +)set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false); +set transaction_timeout='1s'); NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =)false; +set)transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set retry_aborts_internally = false; +-set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false-; +set transaction_timeout='1s'-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =-false; +set-transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set retry_aborts_internally = false; ++set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false+; +set transaction_timeout='1s'+; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =+false; +set+transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set retry_aborts_internally = false; +-#set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false-#; +set transaction_timeout='1s'-#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =-#false; +set-#transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set retry_aborts_internally = false; +/set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false/; +set transaction_timeout='1s'/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =/false; +set/transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set retry_aborts_internally = false; +\set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false\; +set transaction_timeout='1s'\; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =\false; +set\transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set retry_aborts_internally = false; +?set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false?; +set transaction_timeout='1s'?; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =?false; +set?transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set retry_aborts_internally = false; +-/set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false-/; +set transaction_timeout='1s'-/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =-/false; +set-/transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set retry_aborts_internally = false; +/#set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false/#; +set transaction_timeout='1s'/#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =/#false; +set/#transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set retry_aborts_internally = false; +/-set transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally = false/-; +set transaction_timeout='1s'/-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set retry_aborts_internally =/-false; +set/-transaction_timeout='1s'; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true; +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -SET LOCAL RETRY_ABORTS_INTERNALLY = TRUE; +SET TRANSACTION_TIMEOUT = '1S' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true; +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set local retry_aborts_internally = true; + set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set local retry_aborts_internally = true; + set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true; +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true ; +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true ; +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true; +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = true; +set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; set -local -retry_aborts_internally +transaction_timeout = -true; +'1s' +; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set local retry_aborts_internally = true; +foo set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true bar; +set transaction_timeout = '1s' bar; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set local retry_aborts_internally = true; +%set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true%; +set transaction_timeout = '1s' %; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =%true; +set transaction_timeout = '1s'%; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set local retry_aborts_internally = true; +_set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true_; +set transaction_timeout = '1s' _; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =_true; +set transaction_timeout = '1s'_; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set local retry_aborts_internally = true; +&set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true&; +set transaction_timeout = '1s' &; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =&true; +set transaction_timeout = '1s'&; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set local retry_aborts_internally = true; +$set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true$; +set transaction_timeout = '1s' $; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =$true; +set transaction_timeout = '1s'$; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set local retry_aborts_internally = true; +@set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true@; +set transaction_timeout = '1s' @; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =@true; +set transaction_timeout = '1s'@; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set local retry_aborts_internally = true; +!set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true!; +set transaction_timeout = '1s' !; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =!true; +set transaction_timeout = '1s'!; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set local retry_aborts_internally = true; +*set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true*; +set transaction_timeout = '1s' *; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =*true; +set transaction_timeout = '1s'*; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set local retry_aborts_internally = true; +(set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true(; +set transaction_timeout = '1s' (; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =(true; +set transaction_timeout = '1s'(; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set local retry_aborts_internally = true; +)set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true); +set transaction_timeout = '1s' ); NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =)true; +set transaction_timeout = '1s'); NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set local retry_aborts_internally = true; +-set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true-; +set transaction_timeout = '1s' -; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =-true; +set transaction_timeout = '1s'-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set local retry_aborts_internally = true; ++set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true+; +set transaction_timeout = '1s' +; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =+true; +set transaction_timeout = '1s'+; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set local retry_aborts_internally = true; +-#set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true-#; +set transaction_timeout = '1s' -#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =-#true; +set transaction_timeout = '1s'-#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set local retry_aborts_internally = true; +/set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true/; +set transaction_timeout = '1s' /; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =/true; +set transaction_timeout = '1s'/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set local retry_aborts_internally = true; +\set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true\; +set transaction_timeout = '1s' \; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =\true; +set transaction_timeout = '1s'\; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set local retry_aborts_internally = true; +?set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true?; +set transaction_timeout = '1s' ?; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =?true; +set transaction_timeout = '1s'?; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set local retry_aborts_internally = true; +-/set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true-/; +set transaction_timeout = '1s' -/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =-/true; +set transaction_timeout = '1s'-/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set local retry_aborts_internally = true; +/#set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true/#; +set transaction_timeout = '1s' /#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =/#true; +set transaction_timeout = '1s'/#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set local retry_aborts_internally = true; +/-set transaction_timeout = '1s' ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = true/-; +set transaction_timeout = '1s' /-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =/-true; +set transaction_timeout = '1s'/-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false; +set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -SET LOCAL RETRY_ABORTS_INTERNALLY = FALSE; +SET TRANSACTION_TIMEOUT=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false; +set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set local retry_aborts_internally = false; + set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; - set local retry_aborts_internally = false; + set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false; +set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false ; +set transaction_timeout=100 ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false ; +set transaction_timeout=100 ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false +set transaction_timeout=100 ; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false; +set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; -set local retry_aborts_internally = false; +set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; set -local -retry_aborts_internally -= -false; +transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set local retry_aborts_internally = false; +foo set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false bar; +set transaction_timeout=100 bar; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set local retry_aborts_internally = false; +%set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false%; +set transaction_timeout=100%; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =%false; +set%transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set local retry_aborts_internally = false; +_set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false_; +set transaction_timeout=100_; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =_false; +set_transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set local retry_aborts_internally = false; +&set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false&; +set transaction_timeout=100&; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =&false; +set&transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set local retry_aborts_internally = false; +$set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false$; +set transaction_timeout=100$; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =$false; +set$transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set local retry_aborts_internally = false; +@set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false@; +set transaction_timeout=100@; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =@false; +set@transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set local retry_aborts_internally = false; +!set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false!; +set transaction_timeout=100!; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =!false; +set!transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set local retry_aborts_internally = false; +*set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false*; +set transaction_timeout=100*; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =*false; +set*transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set local retry_aborts_internally = false; +(set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false(; +set transaction_timeout=100(; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =(false; +set(transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set local retry_aborts_internally = false; +)set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false); +set transaction_timeout=100); NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =)false; +set)transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set local retry_aborts_internally = false; +-set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false-; +set transaction_timeout=100-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =-false; +set-transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set local retry_aborts_internally = false; ++set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false+; +set transaction_timeout=100+; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =+false; +set+transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set local retry_aborts_internally = false; +-#set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false-#; +set transaction_timeout=100-#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =-#false; +set-#transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set local retry_aborts_internally = false; +/set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false/; +set transaction_timeout=100/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =/false; +set/transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set local retry_aborts_internally = false; +\set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false\; +set transaction_timeout=100\; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =\false; +set\transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set local retry_aborts_internally = false; +?set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false?; +set transaction_timeout=100?; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =?false; +set?transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set local retry_aborts_internally = false; +-/set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false-/; +set transaction_timeout=100-/; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =-/false; +set-/transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set local retry_aborts_internally = false; +/#set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false/#; +set transaction_timeout=100/#; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =/#false; +set/#transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set local retry_aborts_internally = false; +/-set transaction_timeout=100; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally = false/-; +set transaction_timeout=100/-; NEW_CONNECTION; -set readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local retry_aborts_internally =/-false; +set/-transaction_timeout=100; NEW_CONNECTION; -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100 ; NEW_CONNECTION; -SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC'; +SET TRANSACTION_TIMEOUT = 100 ; NEW_CONNECTION; -set autocommit_dml_mode='partitioned_non_atomic'; +set transaction_timeout = 100 ; NEW_CONNECTION; - set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; + set transaction_timeout = 100 ; NEW_CONNECTION; - set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; + set transaction_timeout = 100 ; NEW_CONNECTION; -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100 ; NEW_CONNECTION; -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; +set transaction_timeout = 100 ; NEW_CONNECTION; -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; +set transaction_timeout = 100 ; NEW_CONNECTION; -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' +set transaction_timeout = 100 ; NEW_CONNECTION; -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100 ; NEW_CONNECTION; -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100 ; NEW_CONNECTION; set -autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +transaction_timeout += +100 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +foo set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC' bar; +set transaction_timeout = 100 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +%set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'%; +set transaction_timeout = 100 %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +_set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'_; +set transaction_timeout = 100 _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +&set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'&; +set transaction_timeout = 100 &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +$set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'$; +set transaction_timeout = 100 $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +@set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'@; +set transaction_timeout = 100 @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +!set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'!; +set transaction_timeout = 100 !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +*set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'*; +set transaction_timeout = 100 *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +(set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'(; +set transaction_timeout = 100 (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +)set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'); +set transaction_timeout = 100 ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +-set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-; +set transaction_timeout = 100 -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; ++set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'+; +set transaction_timeout = 100 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +-#set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-#; +set transaction_timeout = 100 -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +/set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/; +set transaction_timeout = 100 /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +\set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'\; +set transaction_timeout = 100 \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +?set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'?; +set transaction_timeout = 100 ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +-/set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-/; +set transaction_timeout = 100 -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +/#set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/#; +set transaction_timeout = 100 /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +/-set transaction_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/-; +set transaction_timeout = 100 /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set transaction_timeout = 100/-; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL'; +set transaction_timeout='100ms'; NEW_CONNECTION; -SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL'; +SET TRANSACTION_TIMEOUT='100MS'; NEW_CONNECTION; -set autocommit_dml_mode='transactional'; +set transaction_timeout='100ms'; NEW_CONNECTION; - set autocommit_dml_mode='TRANSACTIONAL'; + set transaction_timeout='100ms'; NEW_CONNECTION; - set autocommit_dml_mode='TRANSACTIONAL'; + set transaction_timeout='100ms'; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL'; +set transaction_timeout='100ms'; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL' ; +set transaction_timeout='100ms' ; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL' ; +set transaction_timeout='100ms' ; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL' +set transaction_timeout='100ms' ; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL'; +set transaction_timeout='100ms'; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL'; +set transaction_timeout='100ms'; NEW_CONNECTION; set -autocommit_dml_mode='TRANSACTIONAL'; +transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit_dml_mode='TRANSACTIONAL'; +foo set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL' bar; +set transaction_timeout='100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit_dml_mode='TRANSACTIONAL'; +%set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'%; +set transaction_timeout='100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%autocommit_dml_mode='TRANSACTIONAL'; +set%transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit_dml_mode='TRANSACTIONAL'; +_set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'_; +set transaction_timeout='100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_autocommit_dml_mode='TRANSACTIONAL'; +set_transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit_dml_mode='TRANSACTIONAL'; +&set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'&; +set transaction_timeout='100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&autocommit_dml_mode='TRANSACTIONAL'; +set&transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit_dml_mode='TRANSACTIONAL'; +$set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'$; +set transaction_timeout='100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$autocommit_dml_mode='TRANSACTIONAL'; +set$transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit_dml_mode='TRANSACTIONAL'; +@set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'@; +set transaction_timeout='100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@autocommit_dml_mode='TRANSACTIONAL'; +set@transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit_dml_mode='TRANSACTIONAL'; +!set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'!; +set transaction_timeout='100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!autocommit_dml_mode='TRANSACTIONAL'; +set!transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit_dml_mode='TRANSACTIONAL'; +*set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'*; +set transaction_timeout='100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*autocommit_dml_mode='TRANSACTIONAL'; +set*transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit_dml_mode='TRANSACTIONAL'; +(set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'(; +set transaction_timeout='100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(autocommit_dml_mode='TRANSACTIONAL'; +set(transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit_dml_mode='TRANSACTIONAL'; +)set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'); +set transaction_timeout='100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)autocommit_dml_mode='TRANSACTIONAL'; +set)transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit_dml_mode='TRANSACTIONAL'; +-set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'-; +set transaction_timeout='100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-autocommit_dml_mode='TRANSACTIONAL'; +set-transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit_dml_mode='TRANSACTIONAL'; ++set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'+; +set transaction_timeout='100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+autocommit_dml_mode='TRANSACTIONAL'; +set+transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit_dml_mode='TRANSACTIONAL'; +-#set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'-#; +set transaction_timeout='100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#autocommit_dml_mode='TRANSACTIONAL'; +set-#transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit_dml_mode='TRANSACTIONAL'; +/set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'/; +set transaction_timeout='100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/autocommit_dml_mode='TRANSACTIONAL'; +set/transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit_dml_mode='TRANSACTIONAL'; +\set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'\; +set transaction_timeout='100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\autocommit_dml_mode='TRANSACTIONAL'; +set\transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit_dml_mode='TRANSACTIONAL'; +?set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'?; +set transaction_timeout='100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?autocommit_dml_mode='TRANSACTIONAL'; +set?transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit_dml_mode='TRANSACTIONAL'; +-/set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'-/; +set transaction_timeout='100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/autocommit_dml_mode='TRANSACTIONAL'; +set-/transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit_dml_mode='TRANSACTIONAL'; +/#set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'/#; +set transaction_timeout='100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#autocommit_dml_mode='TRANSACTIONAL'; +set/#transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit_dml_mode='TRANSACTIONAL'; +/-set transaction_timeout='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL'/-; +set transaction_timeout='100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-autocommit_dml_mode='TRANSACTIONAL'; +set/-transaction_timeout='100ms'; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction_timeout='10000us'; NEW_CONNECTION; -SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +SET TRANSACTION_TIMEOUT='10000US'; NEW_CONNECTION; -set autocommit_dml_mode='transactional_with_fallback_to_partitioned_non_atomic'; +set transaction_timeout='10000us'; NEW_CONNECTION; - set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; + set transaction_timeout='10000us'; NEW_CONNECTION; - set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; + set transaction_timeout='10000us'; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction_timeout='10000us'; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +set transaction_timeout='10000us' ; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +set transaction_timeout='10000us' ; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' +set transaction_timeout='10000us' ; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction_timeout='10000us'; NEW_CONNECTION; -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction_timeout='10000us'; NEW_CONNECTION; set -autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +foo set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' bar; +set transaction_timeout='10000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +%set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'%; +set transaction_timeout='10000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set%transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +_set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'_; +set transaction_timeout='10000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set_transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +&set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'&; +set transaction_timeout='10000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set&transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +$set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'$; +set transaction_timeout='10000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set$transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +@set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'@; +set transaction_timeout='10000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set@transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +!set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'!; +set transaction_timeout='10000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set!transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +*set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'*; +set transaction_timeout='10000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set*transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +(set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'(; +set transaction_timeout='10000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set(transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +)set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'); +set transaction_timeout='10000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set)transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-; +set transaction_timeout='10000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set-transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; ++set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'+; +set transaction_timeout='10000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set+transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-#set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-#; +set transaction_timeout='10000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set-#transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/; +set transaction_timeout='10000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set/transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +\set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'\; +set transaction_timeout='10000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set\transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +?set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'?; +set transaction_timeout='10000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set?transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-/set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-/; +set transaction_timeout='10000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set-/transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/#set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/#; +set transaction_timeout='10000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set/#transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/-set transaction_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/-; +set transaction_timeout='10000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set/-transaction_timeout='10000us'; NEW_CONNECTION; -set statement_timeout=null; +set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT=NULL; +SET TRANSACTION_TIMEOUT='9223372036854775807NS'; NEW_CONNECTION; -set statement_timeout=null; +set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; - set statement_timeout=null; + set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; - set statement_timeout=null; + set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set statement_timeout=null; +set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set statement_timeout=null ; +set transaction_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set statement_timeout=null ; +set transaction_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set statement_timeout=null +set transaction_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set statement_timeout=null; +set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set statement_timeout=null; +set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; set -statement_timeout=null; +transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout=null; +foo set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null bar; +set transaction_timeout='9223372036854775807ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout=null; +%set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null%; +set transaction_timeout='9223372036854775807ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout=null; +set%transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout=null; +_set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null_; +set transaction_timeout='9223372036854775807ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout=null; +set_transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout=null; +&set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null&; +set transaction_timeout='9223372036854775807ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout=null; +set&transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout=null; +$set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null$; +set transaction_timeout='9223372036854775807ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout=null; +set$transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout=null; +@set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null@; +set transaction_timeout='9223372036854775807ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout=null; +set@transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout=null; +!set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null!; +set transaction_timeout='9223372036854775807ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout=null; +set!transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout=null; +*set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null*; +set transaction_timeout='9223372036854775807ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout=null; +set*transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout=null; +(set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null(; +set transaction_timeout='9223372036854775807ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout=null; +set(transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout=null; +)set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null); +set transaction_timeout='9223372036854775807ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout=null; +set)transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout=null; +-set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null-; +set transaction_timeout='9223372036854775807ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout=null; +set-transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout=null; ++set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null+; +set transaction_timeout='9223372036854775807ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout=null; +set+transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout=null; +-#set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null-#; +set transaction_timeout='9223372036854775807ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout=null; +set-#transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout=null; +/set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null/; +set transaction_timeout='9223372036854775807ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout=null; +set/transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout=null; +\set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null\; +set transaction_timeout='9223372036854775807ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout=null; +set\transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout=null; +?set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null?; +set transaction_timeout='9223372036854775807ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout=null; +set?transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout=null; +-/set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null-/; +set transaction_timeout='9223372036854775807ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout=null; +set-/transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout=null; +/#set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null/#; +set transaction_timeout='9223372036854775807ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout=null; +set/#transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout=null; +/-set transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=null/-; +set transaction_timeout='9223372036854775807ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout=null; +set/-transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set statement_timeout = null ; +set autocommit = false; +set transaction read only; NEW_CONNECTION; -SET STATEMENT_TIMEOUT = NULL ; +set autocommit = false; +SET TRANSACTION READ ONLY; NEW_CONNECTION; -set statement_timeout = null ; +set autocommit = false; +set transaction read only; NEW_CONNECTION; - set statement_timeout = null ; +set autocommit = false; + set transaction read only; NEW_CONNECTION; - set statement_timeout = null ; +set autocommit = false; + set transaction read only; NEW_CONNECTION; +set autocommit = false; -set statement_timeout = null ; +set transaction read only; NEW_CONNECTION; -set statement_timeout = null ; +set autocommit = false; +set transaction read only ; NEW_CONNECTION; -set statement_timeout = null ; +set autocommit = false; +set transaction read only ; NEW_CONNECTION; -set statement_timeout = null +set autocommit = false; +set transaction read only ; NEW_CONNECTION; -set statement_timeout = null ; +set autocommit = false; +set transaction read only; NEW_CONNECTION; -set statement_timeout = null ; +set autocommit = false; +set transaction read only; NEW_CONNECTION; +set autocommit = false; set -statement_timeout -= -null -; +transaction +read +only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout = null ; +foo set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null bar; +set transaction read only bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout = null ; +%set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null %; +set transaction read only%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null%; +set transaction read%only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout = null ; +_set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null _; +set transaction read only_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null_; +set transaction read_only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout = null ; +&set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null &; +set transaction read only&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null&; +set transaction read&only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout = null ; +$set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null $; +set transaction read only$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null$; +set transaction read$only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout = null ; +@set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null @; +set transaction read only@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null@; +set transaction read@only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout = null ; +!set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null !; +set transaction read only!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null!; +set transaction read!only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout = null ; +*set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null *; +set transaction read only*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null*; +set transaction read*only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout = null ; +(set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null (; +set transaction read only(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null(; +set transaction read(only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout = null ; +)set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null ); +set transaction read only); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null); +set transaction read)only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout = null ; +-set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null -; +set transaction read only-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null-; +set transaction read-only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout = null ; ++set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null +; +set transaction read only+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null+; +set transaction read+only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout = null ; +-#set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null -#; +set transaction read only-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null-#; +set transaction read-#only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout = null ; +/set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null /; +set transaction read only/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null/; +set transaction read/only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout = null ; +\set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null \; +set transaction read only\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null\; +set transaction read\only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout = null ; +?set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null ?; +set transaction read only?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null?; +set transaction read?only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout = null ; +-/set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null -/; +set transaction read only-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null-/; +set transaction read-/only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout = null ; +/#set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null /#; +set transaction read only/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null/#; +set transaction read/#only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout = null ; +/-set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null /-; +set transaction read only/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = null/-; +set transaction read/-only; NEW_CONNECTION; -set statement_timeout='1s'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='1S'; +set autocommit = false; +SET TRANSACTION READ WRITE; NEW_CONNECTION; -set statement_timeout='1s'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; - set statement_timeout='1s'; +set autocommit = false; + set transaction read write; NEW_CONNECTION; - set statement_timeout='1s'; +set autocommit = false; + set transaction read write; NEW_CONNECTION; +set autocommit = false; -set statement_timeout='1s'; +set transaction read write; NEW_CONNECTION; -set statement_timeout='1s' ; +set autocommit = false; +set transaction read write ; NEW_CONNECTION; -set statement_timeout='1s' ; +set autocommit = false; +set transaction read write ; NEW_CONNECTION; -set statement_timeout='1s' +set autocommit = false; +set transaction read write ; NEW_CONNECTION; -set statement_timeout='1s'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; -set statement_timeout='1s'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; +set autocommit = false; set -statement_timeout='1s'; +transaction +read +write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='1s'; +foo set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s' bar; +set transaction read write bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='1s'; +%set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'%; +set transaction read write%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='1s'; +set transaction read%write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='1s'; +_set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'_; +set transaction read write_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='1s'; +set transaction read_write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='1s'; +&set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'&; +set transaction read write&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='1s'; +set transaction read&write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='1s'; +$set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'$; +set transaction read write$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='1s'; +set transaction read$write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='1s'; +@set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'@; +set transaction read write@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='1s'; +set transaction read@write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='1s'; +!set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'!; +set transaction read write!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='1s'; +set transaction read!write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='1s'; +*set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'*; +set transaction read write*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='1s'; +set transaction read*write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='1s'; +(set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'(; +set transaction read write(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='1s'; +set transaction read(write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='1s'; +)set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'); +set transaction read write); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='1s'; +set transaction read)write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='1s'; +-set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'-; +set transaction read write-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='1s'; +set transaction read-write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='1s'; ++set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'+; +set transaction read write+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='1s'; +set transaction read+write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='1s'; +-#set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'-#; +set transaction read write-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='1s'; +set transaction read-#write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='1s'; +/set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'/; +set transaction read write/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='1s'; +set transaction read/write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='1s'; +\set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'\; +set transaction read write\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='1s'; +set transaction read\write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='1s'; +?set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'?; +set transaction read write?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='1s'; +set transaction read?write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='1s'; +-/set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'-/; +set transaction read write-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='1s'; +set transaction read-/write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='1s'; +/#set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'/#; +set transaction read write/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='1s'; +set transaction read/#write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='1s'; +/-set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'/-; +set transaction read write/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='1s'; +set transaction read/-write; NEW_CONNECTION; -set statement_timeout = '1s' ; +set read_only_staleness='STRONG'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT = '1S' ; +SET READ_ONLY_STALENESS='STRONG'; NEW_CONNECTION; -set statement_timeout = '1s' ; +set read_only_staleness='strong'; NEW_CONNECTION; - set statement_timeout = '1s' ; + set read_only_staleness='STRONG'; NEW_CONNECTION; - set statement_timeout = '1s' ; + set read_only_staleness='STRONG'; NEW_CONNECTION; -set statement_timeout = '1s' ; +set read_only_staleness='STRONG'; NEW_CONNECTION; -set statement_timeout = '1s' ; +set read_only_staleness='STRONG' ; NEW_CONNECTION; -set statement_timeout = '1s' ; +set read_only_staleness='STRONG' ; NEW_CONNECTION; -set statement_timeout = '1s' +set read_only_staleness='STRONG' ; NEW_CONNECTION; -set statement_timeout = '1s' ; +set read_only_staleness='STRONG'; NEW_CONNECTION; -set statement_timeout = '1s' ; +set read_only_staleness='STRONG'; NEW_CONNECTION; set -statement_timeout -= -'1s' -; +read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout = '1s' ; +foo set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' bar; +set read_only_staleness='STRONG' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout = '1s' ; +%set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' %; +set read_only_staleness='STRONG'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'%; +set%read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout = '1s' ; +_set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' _; +set read_only_staleness='STRONG'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'_; +set_read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout = '1s' ; +&set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' &; +set read_only_staleness='STRONG'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'&; +set&read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout = '1s' ; +$set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' $; +set read_only_staleness='STRONG'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'$; +set$read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout = '1s' ; +@set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' @; +set read_only_staleness='STRONG'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'@; +set@read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout = '1s' ; +!set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' !; +set read_only_staleness='STRONG'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'!; +set!read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout = '1s' ; +*set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' *; +set read_only_staleness='STRONG'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'*; +set*read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout = '1s' ; +(set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' (; +set read_only_staleness='STRONG'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'(; +set(read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout = '1s' ; +)set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' ); +set read_only_staleness='STRONG'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'); +set)read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout = '1s' ; +-set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' -; +set read_only_staleness='STRONG'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'-; +set-read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout = '1s' ; ++set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' +; +set read_only_staleness='STRONG'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'+; +set+read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout = '1s' ; +-#set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' -#; +set read_only_staleness='STRONG'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'-#; +set-#read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout = '1s' ; +/set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' /; +set read_only_staleness='STRONG'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'/; +set/read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout = '1s' ; +\set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' \; +set read_only_staleness='STRONG'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'\; +set\read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout = '1s' ; +?set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' ?; +set read_only_staleness='STRONG'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'?; +set?read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout = '1s' ; +-/set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' -/; +set read_only_staleness='STRONG'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'-/; +set-/read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout = '1s' ; +/#set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' /#; +set read_only_staleness='STRONG'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'/#; +set/#read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout = '1s' ; +/-set read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' /-; +set read_only_staleness='STRONG'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'/-; +set/-read_only_staleness='STRONG'; NEW_CONNECTION; -set statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT=100; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set statement_timeout=100; +set read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123-08:00'; NEW_CONNECTION; - set statement_timeout=100; + set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; - set statement_timeout=100; + set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set statement_timeout=100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set statement_timeout=100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set statement_timeout=100 +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; set -statement_timeout=100; +read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout=100; +foo set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100 bar; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout=100; +%set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100%; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout=100; +_set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100_; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout=100; +&set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100&; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout=100; +$set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100$; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout=100; +@set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100@; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout=100; +!set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100!; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout=100; +*set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100*; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout=100; +(set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100(; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout=100; +)set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100); +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout=100; +-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100-; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout=100; ++set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100+; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout=100; +-#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100-#; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout=100; +/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100/; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout=100; +\set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100\; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout=100; +?set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100?; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout=100; +-/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100-/; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout=100; +/#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100/#; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout=100; +/-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100/-; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout=100; +set read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set statement_timeout = 100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT = 100 ; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set statement_timeout = 100 ; +set read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123z'; NEW_CONNECTION; - set statement_timeout = 100 ; + set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; - set statement_timeout = 100 ; + set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set statement_timeout = 100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set statement_timeout = 100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set statement_timeout = 100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set statement_timeout = 100 +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set statement_timeout = 100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set statement_timeout = 100 ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; set -statement_timeout -= -100 -; +read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout = 100 ; +foo set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 bar; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout = 100 ; +%set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 %; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100%; +set read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout = 100 ; +_set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 _; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100_; +set read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout = 100 ; +&set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 &; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100&; +set read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout = 100 ; +$set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 $; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100$; +set read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout = 100 ; +@set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 @; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100@; +set read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout = 100 ; +!set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 !; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100!; +set read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout = 100 ; +*set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 *; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100*; +set read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout = 100 ; +(set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 (; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100(; +set read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout = 100 ; +)set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 ); +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100); +set read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout = 100 ; +-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 -; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100-; +set read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout = 100 ; ++set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 +; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100+; +set read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout = 100 ; +-#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 -#; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100-#; +set read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout = 100 ; +/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 /; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100/; +set read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout = 100 ; +\set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 \; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100\; +set read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout = 100 ; +?set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 ?; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100?; +set read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout = 100 ; +-/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 -/; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100-/; +set read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout = 100 ; +/#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 /#; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100/#; +set read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout = 100 ; +/-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 /-; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100/-; +set read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='100MS'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set statement_timeout='100ms'; +set read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123+07:45'; NEW_CONNECTION; - set statement_timeout='100ms'; + set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; - set statement_timeout='100ms'; + set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set statement_timeout='100ms' ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set statement_timeout='100ms' ; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set statement_timeout='100ms' +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; set -statement_timeout='100ms'; +read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='100ms'; +foo set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms' bar; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='100ms'; +%set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'%; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='100ms'; +_set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'_; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='100ms'; +&set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'&; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='100ms'; +$set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'$; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='100ms'; +@set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'@; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='100ms'; +!set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'!; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='100ms'; +*set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'*; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='100ms'; +(set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'(; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='100ms'; +)set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'); +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='100ms'; +-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'-; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='100ms'; ++set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'+; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='100ms'; +-#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'-#; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='100ms'; +/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'/; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='100ms'; +\set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'\; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='100ms'; +?set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'?; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='100ms'; +-/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'-/; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='100ms'; +/#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'/#; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='100ms'; +/-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'/-; +set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='100ms'; +set read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='10000US'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set statement_timeout='10000us'; +set read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321-07:00'; NEW_CONNECTION; - set statement_timeout='10000us'; + set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; - set statement_timeout='10000us'; + set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set statement_timeout='10000us' ; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set statement_timeout='10000us' ; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set statement_timeout='10000us' +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; set -statement_timeout='10000us'; +read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='10000us'; +foo set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us' bar; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='10000us'; +%set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'%; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='10000us'; +_set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'_; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='10000us'; +&set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'&; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='10000us'; +$set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'$; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='10000us'; +@set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'@; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='10000us'; +!set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'!; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='10000us'; +*set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'*; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='10000us'; +(set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'(; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='10000us'; +)set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'); +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='10000us'; +-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'-; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='10000us'; ++set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'+; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='10000us'; +-#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'-#; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='10000us'; +/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'/; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='10000us'; +\set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'\; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='10000us'; +?set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'?; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='10000us'; +-/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'-/; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='10000us'; +/#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'/#; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='10000us'; +/-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'/-; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='10000us'; +set read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='9223372036854775807NS'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321z'; NEW_CONNECTION; - set statement_timeout='9223372036854775807ns'; + set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; - set statement_timeout='9223372036854775807ns'; + set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns' ; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns' ; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns' +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; set -statement_timeout='9223372036854775807ns'; +read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='9223372036854775807ns'; +foo set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns' bar; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='9223372036854775807ns'; +%set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'%; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='9223372036854775807ns'; +_set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'_; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='9223372036854775807ns'; +&set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'&; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='9223372036854775807ns'; +$set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'$; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='9223372036854775807ns'; +@set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'@; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='9223372036854775807ns'; +!set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'!; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='9223372036854775807ns'; +*set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'*; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='9223372036854775807ns'; +(set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'(; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='9223372036854775807ns'; +)set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'); +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='9223372036854775807ns'; +-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'-; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='9223372036854775807ns'; ++set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'+; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='9223372036854775807ns'; +-#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'-#; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='9223372036854775807ns'; +/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'/; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='9223372036854775807ns'; +\set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'\; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='9223372036854775807ns'; +?set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'?; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='9223372036854775807ns'; +-/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'-/; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='9223372036854775807ns'; +/#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'/#; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='9223372036854775807ns'; +/-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'/-; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='9223372036854775807ns'; +set read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION READ ONLY; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; - set transaction read only; + set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; - set transaction read only; + set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; -set transaction read only ; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set autocommit = false; -set transaction read only ; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set autocommit = false; -set transaction read only +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; set -transaction -read -only; +read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction read only; +foo set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only bar; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction read only; +%set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only%; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read%only; +set read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction read only; +_set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only_; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read_only; +set read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction read only; +&set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only&; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read&only; +set read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction read only; +$set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only$; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read$only; +set read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction read only; +@set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only@; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read@only; +set read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction read only; +!set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only!; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read!only; +set read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction read only; +*set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only*; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read*only; +set read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction read only; +(set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only(; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read(only; +set read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction read only; +)set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only); +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read)only; +set read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction read only; +-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only-; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-only; +set read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction read only; ++set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only+; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read+only; +set read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction read only; +-#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only-#; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-#only; +set read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction read only; +/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only/; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/only; +set read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction read only; +\set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only\; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read\only; +set read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction read only; +?set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only?; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read?only; +set read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction read only; +-/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only-/; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-/only; +set read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction read only; +/#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only/#; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/#only; +set read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction read only; +/-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only/-; +set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/-only; +set read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION READ WRITE; +SET READ_ONLY_STALENESS='MAX_STALENESS 12S'; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set read_only_staleness='max_staleness 12s'; NEW_CONNECTION; -set autocommit = false; - set transaction read write; + set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; - set transaction read write; + set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; -set transaction read write ; +set read_only_staleness='MAX_STALENESS 12s' ; NEW_CONNECTION; -set autocommit = false; -set transaction read write ; +set read_only_staleness='MAX_STALENESS 12s' ; NEW_CONNECTION; -set autocommit = false; -set transaction read write +set read_only_staleness='MAX_STALENESS 12s' ; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; set -transaction -read -write; +read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction read write; +foo set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write bar; +set read_only_staleness='MAX_STALENESS 12s' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction read write; +%set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write%; +set read_only_staleness='MAX_STALENESS 12s'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read%write; +set read_only_staleness='MAX_STALENESS%12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction read write; +_set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write_; +set read_only_staleness='MAX_STALENESS 12s'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read_write; +set read_only_staleness='MAX_STALENESS_12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction read write; +&set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write&; +set read_only_staleness='MAX_STALENESS 12s'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read&write; +set read_only_staleness='MAX_STALENESS&12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction read write; +$set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write$; +set read_only_staleness='MAX_STALENESS 12s'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read$write; +set read_only_staleness='MAX_STALENESS$12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction read write; +@set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write@; +set read_only_staleness='MAX_STALENESS 12s'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read@write; +set read_only_staleness='MAX_STALENESS@12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction read write; +!set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write!; +set read_only_staleness='MAX_STALENESS 12s'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read!write; +set read_only_staleness='MAX_STALENESS!12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction read write; +*set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write*; +set read_only_staleness='MAX_STALENESS 12s'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read*write; +set read_only_staleness='MAX_STALENESS*12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction read write; +(set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write(; +set read_only_staleness='MAX_STALENESS 12s'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read(write; +set read_only_staleness='MAX_STALENESS(12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction read write; +)set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write); +set read_only_staleness='MAX_STALENESS 12s'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read)write; +set read_only_staleness='MAX_STALENESS)12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction read write; +-set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write-; +set read_only_staleness='MAX_STALENESS 12s'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-write; +set read_only_staleness='MAX_STALENESS-12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction read write; ++set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write+; +set read_only_staleness='MAX_STALENESS 12s'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read+write; +set read_only_staleness='MAX_STALENESS+12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction read write; +-#set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write-#; +set read_only_staleness='MAX_STALENESS 12s'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-#write; +set read_only_staleness='MAX_STALENESS-#12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction read write; +/set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write/; +set read_only_staleness='MAX_STALENESS 12s'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/write; +set read_only_staleness='MAX_STALENESS/12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction read write; +\set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write\; +set read_only_staleness='MAX_STALENESS 12s'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read\write; +set read_only_staleness='MAX_STALENESS\12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction read write; +?set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write?; +set read_only_staleness='MAX_STALENESS 12s'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read?write; +set read_only_staleness='MAX_STALENESS?12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction read write; +-/set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write-/; +set read_only_staleness='MAX_STALENESS 12s'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-/write; +set read_only_staleness='MAX_STALENESS-/12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction read write; +/#set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write/#; +set read_only_staleness='MAX_STALENESS 12s'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/#write; +set read_only_staleness='MAX_STALENESS/#12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction read write; +/-set read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write/-; +set read_only_staleness='MAX_STALENESS 12s'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/-write; +set read_only_staleness='MAX_STALENESS/-12s'; NEW_CONNECTION; -set read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='STRONG'; +SET READ_ONLY_STALENESS='MAX_STALENESS 100MS'; NEW_CONNECTION; -set read_only_staleness='strong'; +set read_only_staleness='max_staleness 100ms'; NEW_CONNECTION; - set read_only_staleness='STRONG'; + set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; - set read_only_staleness='STRONG'; + set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -set read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -set read_only_staleness='STRONG' ; +set read_only_staleness='MAX_STALENESS 100ms' ; NEW_CONNECTION; -set read_only_staleness='STRONG' ; +set read_only_staleness='MAX_STALENESS 100ms' ; NEW_CONNECTION; -set read_only_staleness='STRONG' +set read_only_staleness='MAX_STALENESS 100ms' ; NEW_CONNECTION; -set read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -set read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; set -read_only_staleness='STRONG'; +read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='STRONG'; +foo set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG' bar; +set read_only_staleness='MAX_STALENESS 100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='STRONG'; +%set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'%; +set read_only_staleness='MAX_STALENESS 100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS%100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='STRONG'; +_set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'_; +set read_only_staleness='MAX_STALENESS 100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS_100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='STRONG'; +&set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'&; +set read_only_staleness='MAX_STALENESS 100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS&100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='STRONG'; +$set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'$; +set read_only_staleness='MAX_STALENESS 100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS$100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='STRONG'; +@set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'@; +set read_only_staleness='MAX_STALENESS 100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS@100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='STRONG'; +!set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'!; +set read_only_staleness='MAX_STALENESS 100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS!100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='STRONG'; +*set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'*; +set read_only_staleness='MAX_STALENESS 100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS*100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='STRONG'; +(set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'(; +set read_only_staleness='MAX_STALENESS 100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS(100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='STRONG'; +)set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'); +set read_only_staleness='MAX_STALENESS 100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS)100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='STRONG'; +-set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'-; +set read_only_staleness='MAX_STALENESS 100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS-100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='STRONG'; ++set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'+; +set read_only_staleness='MAX_STALENESS 100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS+100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='STRONG'; +-#set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'-#; +set read_only_staleness='MAX_STALENESS 100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS-#100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='STRONG'; +/set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'/; +set read_only_staleness='MAX_STALENESS 100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS/100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='STRONG'; +\set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'\; +set read_only_staleness='MAX_STALENESS 100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS\100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='STRONG'; +?set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'?; +set read_only_staleness='MAX_STALENESS 100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS?100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='STRONG'; +-/set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'-/; +set read_only_staleness='MAX_STALENESS 100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS-/100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='STRONG'; +/#set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'/#; +set read_only_staleness='MAX_STALENESS 100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS/#100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='STRONG'; +/-set read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='STRONG'/-; +set read_only_staleness='MAX_STALENESS 100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-read_only_staleness='STRONG'; +set read_only_staleness='MAX_STALENESS/-100ms'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +SET READ_ONLY_STALENESS='MAX_STALENESS 99999US'; NEW_CONNECTION; -set read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123-08:00'; +set read_only_staleness='max_staleness 99999us'; NEW_CONNECTION; - set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; + set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; - set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; + set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; +set read_only_staleness='MAX_STALENESS 99999us' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; +set read_only_staleness='MAX_STALENESS 99999us' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' +set read_only_staleness='MAX_STALENESS 99999us' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; set -read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +foo set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar; +set read_only_staleness='MAX_STALENESS 99999us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +%set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%; +set read_only_staleness='MAX_STALENESS 99999us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS%99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +_set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_; +set read_only_staleness='MAX_STALENESS 99999us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS_99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +&set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&; +set read_only_staleness='MAX_STALENESS 99999us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS&99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +$set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$; +set read_only_staleness='MAX_STALENESS 99999us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS$99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +@set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@; +set read_only_staleness='MAX_STALENESS 99999us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS@99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +!set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!; +set read_only_staleness='MAX_STALENESS 99999us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS!99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +*set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*; +set read_only_staleness='MAX_STALENESS 99999us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS*99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +(set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(; +set read_only_staleness='MAX_STALENESS 99999us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS(99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +)set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'); +set read_only_staleness='MAX_STALENESS 99999us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS)99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-; +set read_only_staleness='MAX_STALENESS 99999us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS-99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; ++set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+; +set read_only_staleness='MAX_STALENESS 99999us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS+99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-#set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#; +set read_only_staleness='MAX_STALENESS 99999us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS-#99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/; +set read_only_staleness='MAX_STALENESS 99999us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS/99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +\set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\; +set read_only_staleness='MAX_STALENESS 99999us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS\99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +?set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?; +set read_only_staleness='MAX_STALENESS 99999us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS?99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-/set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/; +set read_only_staleness='MAX_STALENESS 99999us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS-/99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/#set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#; +set read_only_staleness='MAX_STALENESS 99999us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS/#99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/-set read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-; +set read_only_staleness='MAX_STALENESS 99999us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00'; +set read_only_staleness='MAX_STALENESS/-99999us'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +SET READ_ONLY_STALENESS='MAX_STALENESS 10NS'; NEW_CONNECTION; -set read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123z'; +set read_only_staleness='max_staleness 10ns'; NEW_CONNECTION; - set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; + set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; - set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; + set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; +set read_only_staleness='MAX_STALENESS 10ns' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; +set read_only_staleness='MAX_STALENESS 10ns' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' +set read_only_staleness='MAX_STALENESS 10ns' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; set -read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +foo set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar; +set read_only_staleness='MAX_STALENESS 10ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +%set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%; +set read_only_staleness='MAX_STALENESS 10ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS%10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +_set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_; +set read_only_staleness='MAX_STALENESS 10ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS_10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +&set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&; +set read_only_staleness='MAX_STALENESS 10ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS&10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +$set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$; +set read_only_staleness='MAX_STALENESS 10ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS$10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +@set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@; +set read_only_staleness='MAX_STALENESS 10ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS@10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +!set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!; +set read_only_staleness='MAX_STALENESS 10ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS!10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +*set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*; +set read_only_staleness='MAX_STALENESS 10ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS*10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +(set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(; +set read_only_staleness='MAX_STALENESS 10ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS(10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +)set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'); +set read_only_staleness='MAX_STALENESS 10ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS)10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-; +set read_only_staleness='MAX_STALENESS 10ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS-10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; ++set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+; +set read_only_staleness='MAX_STALENESS 10ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS+10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-#set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#; +set read_only_staleness='MAX_STALENESS 10ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS-#10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/; +set read_only_staleness='MAX_STALENESS 10ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS/10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +\set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\; +set read_only_staleness='MAX_STALENESS 10ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS\10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +?set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?; +set read_only_staleness='MAX_STALENESS 10ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS?10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-/set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/; +set read_only_staleness='MAX_STALENESS 10ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS-/10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/#set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#; +set read_only_staleness='MAX_STALENESS 10ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS/#10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/-set read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-; +set read_only_staleness='MAX_STALENESS 10ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z'; +set read_only_staleness='MAX_STALENESS/-10ns'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +SET READ_ONLY_STALENESS='EXACT_STALENESS 15S'; NEW_CONNECTION; -set read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123+07:45'; +set read_only_staleness='exact_staleness 15s'; NEW_CONNECTION; - set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; + set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; - set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; + set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; +set read_only_staleness='EXACT_STALENESS 15s' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; +set read_only_staleness='EXACT_STALENESS 15s' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' +set read_only_staleness='EXACT_STALENESS 15s' ; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; set -read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +foo set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar; +set read_only_staleness='EXACT_STALENESS 15s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +%set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%; +set read_only_staleness='EXACT_STALENESS 15s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS%15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +_set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_; +set read_only_staleness='EXACT_STALENESS 15s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS_15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +&set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&; +set read_only_staleness='EXACT_STALENESS 15s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS&15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +$set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$; +set read_only_staleness='EXACT_STALENESS 15s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS$15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +@set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@; +set read_only_staleness='EXACT_STALENESS 15s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS@15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +!set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!; +set read_only_staleness='EXACT_STALENESS 15s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS!15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +*set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*; +set read_only_staleness='EXACT_STALENESS 15s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS*15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +(set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(; +set read_only_staleness='EXACT_STALENESS 15s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS(15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +)set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'); +set read_only_staleness='EXACT_STALENESS 15s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS)15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-; +set read_only_staleness='EXACT_STALENESS 15s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS-15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; ++set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+; +set read_only_staleness='EXACT_STALENESS 15s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS+15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-#set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#; +set read_only_staleness='EXACT_STALENESS 15s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS-#15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/; +set read_only_staleness='EXACT_STALENESS 15s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS/15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +\set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\; +set read_only_staleness='EXACT_STALENESS 15s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS\15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +?set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?; +set read_only_staleness='EXACT_STALENESS 15s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS?15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-/set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/; +set read_only_staleness='EXACT_STALENESS 15s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS-/15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/#set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#; +set read_only_staleness='EXACT_STALENESS 15s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS/#15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/-set read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-; +set read_only_staleness='EXACT_STALENESS 15s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45'; +set read_only_staleness='EXACT_STALENESS/-15s'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +SET READ_ONLY_STALENESS='EXACT_STALENESS 1500MS'; NEW_CONNECTION; -set read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321-07:00'; +set read_only_staleness='exact_staleness 1500ms'; NEW_CONNECTION; - set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; + set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; - set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; + set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; +set read_only_staleness='EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; +set read_only_staleness='EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' +set read_only_staleness='EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; set -read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +foo set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar; +set read_only_staleness='EXACT_STALENESS 1500ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +%set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%; +set read_only_staleness='EXACT_STALENESS 1500ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS%1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +_set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_; +set read_only_staleness='EXACT_STALENESS 1500ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS_1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +&set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&; +set read_only_staleness='EXACT_STALENESS 1500ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS&1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +$set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$; +set read_only_staleness='EXACT_STALENESS 1500ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS$1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +@set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@; +set read_only_staleness='EXACT_STALENESS 1500ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS@1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +!set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!; +set read_only_staleness='EXACT_STALENESS 1500ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS!1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +*set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*; +set read_only_staleness='EXACT_STALENESS 1500ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS*1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +(set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(; +set read_only_staleness='EXACT_STALENESS 1500ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS(1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +)set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'); +set read_only_staleness='EXACT_STALENESS 1500ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS)1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-; +set read_only_staleness='EXACT_STALENESS 1500ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS-1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; ++set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+; +set read_only_staleness='EXACT_STALENESS 1500ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS+1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-#set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#; +set read_only_staleness='EXACT_STALENESS 1500ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS-#1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/; +set read_only_staleness='EXACT_STALENESS 1500ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS/1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +\set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\; +set read_only_staleness='EXACT_STALENESS 1500ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS\1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +?set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?; +set read_only_staleness='EXACT_STALENESS 1500ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS?1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-/set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/; +set read_only_staleness='EXACT_STALENESS 1500ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS-/1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/#set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#; +set read_only_staleness='EXACT_STALENESS 1500ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS/#1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/-set read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-; +set read_only_staleness='EXACT_STALENESS 1500ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00'; +set read_only_staleness='EXACT_STALENESS/-1500ms'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +SET READ_ONLY_STALENESS='EXACT_STALENESS 15000000US'; NEW_CONNECTION; -set read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321z'; +set read_only_staleness='exact_staleness 15000000us'; NEW_CONNECTION; - set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; + set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; - set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; + set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; +set read_only_staleness='EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; +set read_only_staleness='EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' +set read_only_staleness='EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; set -read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +foo set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar; +set read_only_staleness='EXACT_STALENESS 15000000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +%set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%; +set read_only_staleness='EXACT_STALENESS 15000000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS%15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +_set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_; +set read_only_staleness='EXACT_STALENESS 15000000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS_15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +&set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&; +set read_only_staleness='EXACT_STALENESS 15000000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS&15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +$set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$; +set read_only_staleness='EXACT_STALENESS 15000000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS$15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +@set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@; +set read_only_staleness='EXACT_STALENESS 15000000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS@15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +!set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!; +set read_only_staleness='EXACT_STALENESS 15000000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS!15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +*set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*; +set read_only_staleness='EXACT_STALENESS 15000000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS*15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +(set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(; +set read_only_staleness='EXACT_STALENESS 15000000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS(15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +)set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'); +set read_only_staleness='EXACT_STALENESS 15000000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS)15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-; +set read_only_staleness='EXACT_STALENESS 15000000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS-15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; ++set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+; +set read_only_staleness='EXACT_STALENESS 15000000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS+15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-#set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#; +set read_only_staleness='EXACT_STALENESS 15000000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS-#15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/; +set read_only_staleness='EXACT_STALENESS 15000000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS/15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +\set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\; +set read_only_staleness='EXACT_STALENESS 15000000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS\15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +?set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?; +set read_only_staleness='EXACT_STALENESS 15000000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS?15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-/set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/; +set read_only_staleness='EXACT_STALENESS 15000000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS-/15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/#set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#; +set read_only_staleness='EXACT_STALENESS 15000000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS/#15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/-set read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-; +set read_only_staleness='EXACT_STALENESS 15000000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z'; +set read_only_staleness='EXACT_STALENESS/-15000000us'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +SET READ_ONLY_STALENESS='EXACT_STALENESS 9999NS'; NEW_CONNECTION; -set read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321+05:30'; +set read_only_staleness='exact_staleness 9999ns'; NEW_CONNECTION; - set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; + set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; - set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; + set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; +set read_only_staleness='EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; +set read_only_staleness='EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' +set read_only_staleness='EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; set -read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +foo set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar; +set read_only_staleness='EXACT_STALENESS 9999ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +%set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%; +set read_only_staleness='EXACT_STALENESS 9999ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS%9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +_set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_; +set read_only_staleness='EXACT_STALENESS 9999ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS_9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +&set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&; +set read_only_staleness='EXACT_STALENESS 9999ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS&9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +$set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$; +set read_only_staleness='EXACT_STALENESS 9999ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS$9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +@set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@; +set read_only_staleness='EXACT_STALENESS 9999ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS@9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +!set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!; +set read_only_staleness='EXACT_STALENESS 9999ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS!9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +*set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*; +set read_only_staleness='EXACT_STALENESS 9999ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS*9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +(set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(; +set read_only_staleness='EXACT_STALENESS 9999ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS(9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +)set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'); +set read_only_staleness='EXACT_STALENESS 9999ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS)9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-; +set read_only_staleness='EXACT_STALENESS 9999ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS-9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; ++set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+; +set read_only_staleness='EXACT_STALENESS 9999ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS+9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-#set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#; +set read_only_staleness='EXACT_STALENESS 9999ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS-#9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/; +set read_only_staleness='EXACT_STALENESS 9999ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS/9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +\set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\; +set read_only_staleness='EXACT_STALENESS 9999ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS\9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +?set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?; +set read_only_staleness='EXACT_STALENESS 9999ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS?9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-/set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/; +set read_only_staleness='EXACT_STALENESS 9999ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS-/9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/#set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#; +set read_only_staleness='EXACT_STALENESS 9999ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30'; +set read_only_staleness='EXACT_STALENESS/#9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/-set read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-; +set read_only_staleness='EXACT_STALENESS 9999ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30'; -NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 12s'; -NEW_CONNECTION; -SET READ_ONLY_STALENESS='MAX_STALENESS 12S'; +set read_only_staleness='EXACT_STALENESS/-9999ns'; NEW_CONNECTION; -set read_only_staleness='max_staleness 12s'; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 12s'; + set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 12s'; + set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 12s'; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 12s' ; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 12s' ; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 12s' +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 12s'; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 12s'; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; set -read_only_staleness='MAX_STALENESS 12s'; +directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='MAX_STALENESS 12s'; +foo set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s' bar; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='MAX_STALENESS 12s'; +%set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'%; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS%12s'; +set%directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='MAX_STALENESS 12s'; +_set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'_; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS_12s'; +set_directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='MAX_STALENESS 12s'; +&set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'&; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS&12s'; +set&directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='MAX_STALENESS 12s'; +$set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'$; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS$12s'; +set$directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='MAX_STALENESS 12s'; +@set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'@; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS@12s'; +set@directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='MAX_STALENESS 12s'; +!set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'!; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS!12s'; +set!directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='MAX_STALENESS 12s'; +*set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'*; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS*12s'; +set*directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='MAX_STALENESS 12s'; +(set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'(; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS(12s'; +set(directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='MAX_STALENESS 12s'; +)set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'); +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS)12s'; +set)directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='MAX_STALENESS 12s'; +-set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'-; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-12s'; +set-directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='MAX_STALENESS 12s'; ++set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'+; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS+12s'; +set+directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='MAX_STALENESS 12s'; +-#set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'-#; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-#12s'; +set-#directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='MAX_STALENESS 12s'; +/set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'/; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/12s'; +set/directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='MAX_STALENESS 12s'; +\set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'\; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS\12s'; +set\directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='MAX_STALENESS 12s'; +?set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'?; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS?12s'; +set?directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='MAX_STALENESS 12s'; +-/set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'-/; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-/12s'; +set-/directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='MAX_STALENESS 12s'; +/#set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'/#; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/#12s'; +set/#directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='MAX_STALENESS 12s'; +/-set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 12s'/-; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/-12s'; -NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 100ms'; -NEW_CONNECTION; -SET READ_ONLY_STALENESS='MAX_STALENESS 100MS'; +set/-directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set read_only_staleness='max_staleness 100ms'; +set directed_read=''; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 100ms'; + set directed_read=''; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 100ms'; + set directed_read=''; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 100ms'; +set directed_read=''; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 100ms' ; +set directed_read='' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 100ms' ; +set directed_read='' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 100ms' +set directed_read='' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 100ms'; +set directed_read=''; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 100ms'; +set directed_read=''; NEW_CONNECTION; set -read_only_staleness='MAX_STALENESS 100ms'; +directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='MAX_STALENESS 100ms'; +foo set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms' bar; +set directed_read='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='MAX_STALENESS 100ms'; +%set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'%; +set directed_read=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS%100ms'; +set%directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='MAX_STALENESS 100ms'; +_set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'_; +set directed_read=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS_100ms'; +set_directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='MAX_STALENESS 100ms'; +&set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'&; +set directed_read=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS&100ms'; +set&directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='MAX_STALENESS 100ms'; +$set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'$; +set directed_read=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS$100ms'; +set$directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='MAX_STALENESS 100ms'; +@set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'@; +set directed_read=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS@100ms'; +set@directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='MAX_STALENESS 100ms'; +!set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'!; +set directed_read=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS!100ms'; +set!directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='MAX_STALENESS 100ms'; +*set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'*; +set directed_read=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS*100ms'; +set*directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='MAX_STALENESS 100ms'; +(set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'(; +set directed_read=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS(100ms'; +set(directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='MAX_STALENESS 100ms'; +)set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'); +set directed_read=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS)100ms'; +set)directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='MAX_STALENESS 100ms'; +-set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'-; +set directed_read=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-100ms'; +set-directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='MAX_STALENESS 100ms'; ++set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'+; +set directed_read=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS+100ms'; +set+directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='MAX_STALENESS 100ms'; +-#set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'-#; +set directed_read=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-#100ms'; +set-#directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='MAX_STALENESS 100ms'; +/set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'/; +set directed_read=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/100ms'; +set/directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='MAX_STALENESS 100ms'; +\set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'\; +set directed_read=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS\100ms'; +set\directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='MAX_STALENESS 100ms'; +?set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'?; +set directed_read=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS?100ms'; +set?directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='MAX_STALENESS 100ms'; +-/set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'-/; +set directed_read=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-/100ms'; +set-/directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='MAX_STALENESS 100ms'; +/#set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'/#; +set directed_read=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/#100ms'; +set/#directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='MAX_STALENESS 100ms'; +/-set directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 100ms'/-; +set directed_read=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/-100ms'; +set/-directed_read=''; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 99999us'; +set optimizer_version='1'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='MAX_STALENESS 99999US'; +SET OPTIMIZER_VERSION='1'; NEW_CONNECTION; -set read_only_staleness='max_staleness 99999us'; +set optimizer_version='1'; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 99999us'; + set optimizer_version='1'; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 99999us'; + set optimizer_version='1'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 99999us'; +set optimizer_version='1'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 99999us' ; +set optimizer_version='1' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 99999us' ; +set optimizer_version='1' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 99999us' +set optimizer_version='1' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 99999us'; +set optimizer_version='1'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 99999us'; +set optimizer_version='1'; NEW_CONNECTION; set -read_only_staleness='MAX_STALENESS 99999us'; +optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='MAX_STALENESS 99999us'; +foo set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us' bar; +set optimizer_version='1' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='MAX_STALENESS 99999us'; +%set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'%; +set optimizer_version='1'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS%99999us'; +set%optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='MAX_STALENESS 99999us'; +_set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'_; +set optimizer_version='1'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS_99999us'; +set_optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='MAX_STALENESS 99999us'; +&set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'&; +set optimizer_version='1'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS&99999us'; +set&optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='MAX_STALENESS 99999us'; +$set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'$; +set optimizer_version='1'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS$99999us'; +set$optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='MAX_STALENESS 99999us'; +@set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'@; +set optimizer_version='1'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS@99999us'; +set@optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='MAX_STALENESS 99999us'; +!set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'!; +set optimizer_version='1'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS!99999us'; +set!optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='MAX_STALENESS 99999us'; +*set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'*; +set optimizer_version='1'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS*99999us'; +set*optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='MAX_STALENESS 99999us'; +(set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'(; +set optimizer_version='1'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS(99999us'; +set(optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='MAX_STALENESS 99999us'; +)set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'); +set optimizer_version='1'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS)99999us'; +set)optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='MAX_STALENESS 99999us'; +-set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'-; +set optimizer_version='1'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-99999us'; +set-optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='MAX_STALENESS 99999us'; ++set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'+; +set optimizer_version='1'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS+99999us'; +set+optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='MAX_STALENESS 99999us'; +-#set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'-#; +set optimizer_version='1'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-#99999us'; +set-#optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='MAX_STALENESS 99999us'; +/set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'/; +set optimizer_version='1'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/99999us'; +set/optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='MAX_STALENESS 99999us'; +\set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'\; +set optimizer_version='1'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS\99999us'; +set\optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='MAX_STALENESS 99999us'; +?set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'?; +set optimizer_version='1'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS?99999us'; +set?optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='MAX_STALENESS 99999us'; +-/set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'-/; +set optimizer_version='1'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-/99999us'; +set-/optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='MAX_STALENESS 99999us'; +/#set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'/#; +set optimizer_version='1'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/#99999us'; +set/#optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='MAX_STALENESS 99999us'; +/-set optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 99999us'/-; +set optimizer_version='1'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/-99999us'; +set/-optimizer_version='1'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 10ns'; +set optimizer_version='200'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='MAX_STALENESS 10NS'; +SET OPTIMIZER_VERSION='200'; NEW_CONNECTION; -set read_only_staleness='max_staleness 10ns'; +set optimizer_version='200'; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 10ns'; + set optimizer_version='200'; NEW_CONNECTION; - set read_only_staleness='MAX_STALENESS 10ns'; + set optimizer_version='200'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 10ns'; +set optimizer_version='200'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 10ns' ; +set optimizer_version='200' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 10ns' ; +set optimizer_version='200' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 10ns' +set optimizer_version='200' ; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 10ns'; +set optimizer_version='200'; NEW_CONNECTION; -set read_only_staleness='MAX_STALENESS 10ns'; +set optimizer_version='200'; NEW_CONNECTION; set -read_only_staleness='MAX_STALENESS 10ns'; +optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='MAX_STALENESS 10ns'; +foo set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns' bar; +set optimizer_version='200' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='MAX_STALENESS 10ns'; +%set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'%; +set optimizer_version='200'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS%10ns'; +set%optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='MAX_STALENESS 10ns'; +_set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'_; +set optimizer_version='200'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS_10ns'; +set_optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='MAX_STALENESS 10ns'; +&set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'&; +set optimizer_version='200'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS&10ns'; +set&optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='MAX_STALENESS 10ns'; +$set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'$; +set optimizer_version='200'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS$10ns'; +set$optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='MAX_STALENESS 10ns'; +@set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'@; +set optimizer_version='200'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS@10ns'; +set@optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='MAX_STALENESS 10ns'; +!set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'!; +set optimizer_version='200'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS!10ns'; +set!optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='MAX_STALENESS 10ns'; +*set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'*; +set optimizer_version='200'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS*10ns'; +set*optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='MAX_STALENESS 10ns'; +(set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'(; +set optimizer_version='200'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS(10ns'; +set(optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='MAX_STALENESS 10ns'; +)set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'); +set optimizer_version='200'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS)10ns'; +set)optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='MAX_STALENESS 10ns'; +-set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'-; +set optimizer_version='200'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-10ns'; +set-optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='MAX_STALENESS 10ns'; ++set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'+; +set optimizer_version='200'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS+10ns'; +set+optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='MAX_STALENESS 10ns'; +-#set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'-#; +set optimizer_version='200'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-#10ns'; +set-#optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='MAX_STALENESS 10ns'; +/set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'/; +set optimizer_version='200'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/10ns'; +set/optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='MAX_STALENESS 10ns'; +\set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'\; +set optimizer_version='200'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS\10ns'; +set\optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='MAX_STALENESS 10ns'; +?set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'?; +set optimizer_version='200'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS?10ns'; +set?optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='MAX_STALENESS 10ns'; +-/set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'-/; +set optimizer_version='200'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS-/10ns'; +set-/optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='MAX_STALENESS 10ns'; +/#set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'/#; +set optimizer_version='200'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/#10ns'; +set/#optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='MAX_STALENESS 10ns'; +/-set optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS 10ns'/-; +set optimizer_version='200'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='MAX_STALENESS/-10ns'; +set/-optimizer_version='200'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15s'; +set optimizer_version='LATEST'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='EXACT_STALENESS 15S'; +SET OPTIMIZER_VERSION='LATEST'; NEW_CONNECTION; -set read_only_staleness='exact_staleness 15s'; +set optimizer_version='latest'; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 15s'; + set optimizer_version='LATEST'; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 15s'; + set optimizer_version='LATEST'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15s'; +set optimizer_version='LATEST'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15s' ; +set optimizer_version='LATEST' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15s' ; +set optimizer_version='LATEST' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15s' +set optimizer_version='LATEST' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15s'; +set optimizer_version='LATEST'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15s'; +set optimizer_version='LATEST'; NEW_CONNECTION; set -read_only_staleness='EXACT_STALENESS 15s'; +optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='EXACT_STALENESS 15s'; +foo set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s' bar; +set optimizer_version='LATEST' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='EXACT_STALENESS 15s'; +%set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'%; +set optimizer_version='LATEST'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS%15s'; +set%optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='EXACT_STALENESS 15s'; +_set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'_; +set optimizer_version='LATEST'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS_15s'; +set_optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='EXACT_STALENESS 15s'; +&set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'&; +set optimizer_version='LATEST'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS&15s'; +set&optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='EXACT_STALENESS 15s'; +$set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'$; +set optimizer_version='LATEST'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS$15s'; +set$optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='EXACT_STALENESS 15s'; +@set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'@; +set optimizer_version='LATEST'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS@15s'; +set@optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='EXACT_STALENESS 15s'; +!set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'!; +set optimizer_version='LATEST'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS!15s'; +set!optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='EXACT_STALENESS 15s'; +*set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'*; +set optimizer_version='LATEST'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS*15s'; +set*optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='EXACT_STALENESS 15s'; +(set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'(; +set optimizer_version='LATEST'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS(15s'; +set(optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='EXACT_STALENESS 15s'; +)set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'); +set optimizer_version='LATEST'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS)15s'; +set)optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='EXACT_STALENESS 15s'; +-set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'-; +set optimizer_version='LATEST'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-15s'; +set-optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='EXACT_STALENESS 15s'; ++set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'+; +set optimizer_version='LATEST'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS+15s'; +set+optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='EXACT_STALENESS 15s'; +-#set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'-#; +set optimizer_version='LATEST'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-#15s'; +set-#optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='EXACT_STALENESS 15s'; +/set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'/; +set optimizer_version='LATEST'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/15s'; +set/optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='EXACT_STALENESS 15s'; +\set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'\; +set optimizer_version='LATEST'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS\15s'; +set\optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='EXACT_STALENESS 15s'; +?set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'?; +set optimizer_version='LATEST'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS?15s'; +set?optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='EXACT_STALENESS 15s'; +-/set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'-/; +set optimizer_version='LATEST'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-/15s'; +set-/optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='EXACT_STALENESS 15s'; +/#set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'/#; +set optimizer_version='LATEST'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/#15s'; +set/#optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='EXACT_STALENESS 15s'; +/-set optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15s'/-; +set optimizer_version='LATEST'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/-15s'; +set/-optimizer_version='LATEST'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 1500ms'; +set optimizer_version=''; NEW_CONNECTION; -SET READ_ONLY_STALENESS='EXACT_STALENESS 1500MS'; +SET OPTIMIZER_VERSION=''; NEW_CONNECTION; -set read_only_staleness='exact_staleness 1500ms'; +set optimizer_version=''; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 1500ms'; + set optimizer_version=''; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 1500ms'; + set optimizer_version=''; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 1500ms'; +set optimizer_version=''; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 1500ms' ; +set optimizer_version='' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 1500ms' ; +set optimizer_version='' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 1500ms' +set optimizer_version='' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 1500ms'; +set optimizer_version=''; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 1500ms'; +set optimizer_version=''; NEW_CONNECTION; set -read_only_staleness='EXACT_STALENESS 1500ms'; +optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='EXACT_STALENESS 1500ms'; +foo set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms' bar; +set optimizer_version='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='EXACT_STALENESS 1500ms'; +%set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'%; +set optimizer_version=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS%1500ms'; +set%optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='EXACT_STALENESS 1500ms'; +_set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'_; +set optimizer_version=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS_1500ms'; +set_optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='EXACT_STALENESS 1500ms'; +&set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'&; +set optimizer_version=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS&1500ms'; +set&optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='EXACT_STALENESS 1500ms'; +$set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'$; +set optimizer_version=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS$1500ms'; +set$optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='EXACT_STALENESS 1500ms'; +@set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'@; +set optimizer_version=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS@1500ms'; +set@optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='EXACT_STALENESS 1500ms'; +!set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'!; +set optimizer_version=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS!1500ms'; +set!optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='EXACT_STALENESS 1500ms'; +*set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'*; +set optimizer_version=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS*1500ms'; +set*optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='EXACT_STALENESS 1500ms'; +(set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'(; +set optimizer_version=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS(1500ms'; +set(optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='EXACT_STALENESS 1500ms'; +)set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'); +set optimizer_version=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS)1500ms'; +set)optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='EXACT_STALENESS 1500ms'; +-set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'-; +set optimizer_version=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-1500ms'; +set-optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='EXACT_STALENESS 1500ms'; ++set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'+; +set optimizer_version=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS+1500ms'; +set+optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='EXACT_STALENESS 1500ms'; +-#set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'-#; +set optimizer_version=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-#1500ms'; +set-#optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='EXACT_STALENESS 1500ms'; +/set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'/; +set optimizer_version=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/1500ms'; +set/optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='EXACT_STALENESS 1500ms'; +\set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'\; +set optimizer_version=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS\1500ms'; +set\optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='EXACT_STALENESS 1500ms'; +?set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'?; +set optimizer_version=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS?1500ms'; +set?optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='EXACT_STALENESS 1500ms'; +-/set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'-/; +set optimizer_version=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-/1500ms'; +set-/optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='EXACT_STALENESS 1500ms'; +/#set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'/#; +set optimizer_version=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/#1500ms'; +set/#optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='EXACT_STALENESS 1500ms'; +/-set optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 1500ms'/-; +set optimizer_version=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/-1500ms'; +set/-optimizer_version=''; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15000000us'; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -SET READ_ONLY_STALENESS='EXACT_STALENESS 15000000US'; +SET OPTIMIZER_STATISTICS_PACKAGE='AUTO_20191128_14_47_22UTC'; NEW_CONNECTION; -set read_only_staleness='exact_staleness 15000000us'; +set optimizer_statistics_package='auto_20191128_14_47_22utc'; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 15000000us'; + set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 15000000us'; + set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15000000us'; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15000000us' ; +set optimizer_statistics_package='auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15000000us' ; +set optimizer_statistics_package='auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15000000us' +set optimizer_statistics_package='auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15000000us'; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 15000000us'; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; set -read_only_staleness='EXACT_STALENESS 15000000us'; +optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='EXACT_STALENESS 15000000us'; +foo set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us' bar; +set optimizer_statistics_package='auto_20191128_14_47_22UTC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='EXACT_STALENESS 15000000us'; +%set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'%; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS%15000000us'; +set%optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='EXACT_STALENESS 15000000us'; +_set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'_; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS_15000000us'; +set_optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='EXACT_STALENESS 15000000us'; +&set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'&; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS&15000000us'; +set&optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='EXACT_STALENESS 15000000us'; +$set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'$; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS$15000000us'; +set$optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='EXACT_STALENESS 15000000us'; +@set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'@; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS@15000000us'; +set@optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='EXACT_STALENESS 15000000us'; +!set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'!; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS!15000000us'; +set!optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='EXACT_STALENESS 15000000us'; +*set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'*; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS*15000000us'; +set*optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='EXACT_STALENESS 15000000us'; +(set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'(; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS(15000000us'; +set(optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='EXACT_STALENESS 15000000us'; +)set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'); +set optimizer_statistics_package='auto_20191128_14_47_22UTC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS)15000000us'; +set)optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='EXACT_STALENESS 15000000us'; +-set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'-; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-15000000us'; +set-optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='EXACT_STALENESS 15000000us'; ++set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'+; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS+15000000us'; +set+optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='EXACT_STALENESS 15000000us'; +-#set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'-#; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-#15000000us'; +set-#optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='EXACT_STALENESS 15000000us'; +/set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'/; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/15000000us'; +set/optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='EXACT_STALENESS 15000000us'; +\set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'\; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS\15000000us'; +set\optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='EXACT_STALENESS 15000000us'; +?set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'?; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS?15000000us'; +set?optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='EXACT_STALENESS 15000000us'; +-/set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'-/; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-/15000000us'; +set-/optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='EXACT_STALENESS 15000000us'; +/#set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'/#; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/#15000000us'; +set/#optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='EXACT_STALENESS 15000000us'; +/-set optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 15000000us'/-; +set optimizer_statistics_package='auto_20191128_14_47_22UTC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/-15000000us'; +set/-optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 9999ns'; +set optimizer_statistics_package=''; NEW_CONNECTION; -SET READ_ONLY_STALENESS='EXACT_STALENESS 9999NS'; +SET OPTIMIZER_STATISTICS_PACKAGE=''; NEW_CONNECTION; -set read_only_staleness='exact_staleness 9999ns'; +set optimizer_statistics_package=''; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 9999ns'; + set optimizer_statistics_package=''; NEW_CONNECTION; - set read_only_staleness='EXACT_STALENESS 9999ns'; + set optimizer_statistics_package=''; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 9999ns'; +set optimizer_statistics_package=''; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 9999ns' ; +set optimizer_statistics_package='' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 9999ns' ; +set optimizer_statistics_package='' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 9999ns' +set optimizer_statistics_package='' ; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 9999ns'; +set optimizer_statistics_package=''; NEW_CONNECTION; -set read_only_staleness='EXACT_STALENESS 9999ns'; +set optimizer_statistics_package=''; NEW_CONNECTION; set -read_only_staleness='EXACT_STALENESS 9999ns'; +optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set read_only_staleness='EXACT_STALENESS 9999ns'; +foo set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns' bar; +set optimizer_statistics_package='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set read_only_staleness='EXACT_STALENESS 9999ns'; +%set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'%; +set optimizer_statistics_package=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS%9999ns'; +set%optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set read_only_staleness='EXACT_STALENESS 9999ns'; +_set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'_; +set optimizer_statistics_package=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS_9999ns'; +set_optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set read_only_staleness='EXACT_STALENESS 9999ns'; +&set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'&; +set optimizer_statistics_package=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS&9999ns'; +set&optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set read_only_staleness='EXACT_STALENESS 9999ns'; +$set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'$; +set optimizer_statistics_package=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS$9999ns'; +set$optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set read_only_staleness='EXACT_STALENESS 9999ns'; +@set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'@; +set optimizer_statistics_package=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS@9999ns'; +set@optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set read_only_staleness='EXACT_STALENESS 9999ns'; +!set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'!; +set optimizer_statistics_package=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS!9999ns'; +set!optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set read_only_staleness='EXACT_STALENESS 9999ns'; +*set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'*; +set optimizer_statistics_package=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS*9999ns'; +set*optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set read_only_staleness='EXACT_STALENESS 9999ns'; +(set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'(; +set optimizer_statistics_package=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS(9999ns'; +set(optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set read_only_staleness='EXACT_STALENESS 9999ns'; +)set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'); +set optimizer_statistics_package=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS)9999ns'; +set)optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set read_only_staleness='EXACT_STALENESS 9999ns'; +-set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'-; +set optimizer_statistics_package=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-9999ns'; +set-optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set read_only_staleness='EXACT_STALENESS 9999ns'; ++set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'+; +set optimizer_statistics_package=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS+9999ns'; +set+optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set read_only_staleness='EXACT_STALENESS 9999ns'; +-#set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'-#; +set optimizer_statistics_package=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-#9999ns'; +set-#optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set read_only_staleness='EXACT_STALENESS 9999ns'; +/set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'/; +set optimizer_statistics_package=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/9999ns'; +set/optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set read_only_staleness='EXACT_STALENESS 9999ns'; +\set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'\; +set optimizer_statistics_package=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS\9999ns'; +set\optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set read_only_staleness='EXACT_STALENESS 9999ns'; +?set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'?; +set optimizer_statistics_package=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS?9999ns'; +set?optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set read_only_staleness='EXACT_STALENESS 9999ns'; +-/set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'-/; +set optimizer_statistics_package=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS-/9999ns'; +set-/optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set read_only_staleness='EXACT_STALENESS 9999ns'; +/#set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'/#; +set optimizer_statistics_package=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/#9999ns'; +set/#optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set read_only_staleness='EXACT_STALENESS 9999ns'; +/-set optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS 9999ns'/-; +set optimizer_statistics_package=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set read_only_staleness='EXACT_STALENESS/-9999ns'; +set/-optimizer_statistics_package=''; NEW_CONNECTION; -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats = true; NEW_CONNECTION; - set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +SET RETURN_COMMIT_STATS = TRUE; NEW_CONNECTION; - set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats = true; +NEW_CONNECTION; + set return_commit_stats = true; +NEW_CONNECTION; + set return_commit_stats = true; NEW_CONNECTION; -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats = true; NEW_CONNECTION; -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +set return_commit_stats = true ; NEW_CONNECTION; -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +set return_commit_stats = true ; NEW_CONNECTION; -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' +set return_commit_stats = true ; NEW_CONNECTION; -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats = true; NEW_CONNECTION; -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats = true; NEW_CONNECTION; set -directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +return_commit_stats += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +foo set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' bar; +set return_commit_stats = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +%set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'%; +set return_commit_stats = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +_set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'_; +set return_commit_stats = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +&set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'&; +set return_commit_stats = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +$set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'$; +set return_commit_stats = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +@set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'@; +set return_commit_stats = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +!set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'!; +set return_commit_stats = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +*set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'*; +set return_commit_stats = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +(set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'(; +set return_commit_stats = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +)set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'); +set return_commit_stats = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +-set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-; +set return_commit_stats = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; ++set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'+; +set return_commit_stats = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +-#set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-#; +set return_commit_stats = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +/set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/; +set return_commit_stats = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +\set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'\; +set return_commit_stats = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +?set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'?; +set return_commit_stats = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +-/set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-/; +set return_commit_stats = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +/#set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/#; +set return_commit_stats = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +/-set return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/-; +set return_commit_stats = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set return_commit_stats =/-true; NEW_CONNECTION; -set directed_read=''; +set return_commit_stats = false; NEW_CONNECTION; - set directed_read=''; +SET RETURN_COMMIT_STATS = FALSE; NEW_CONNECTION; - set directed_read=''; +set return_commit_stats = false; +NEW_CONNECTION; + set return_commit_stats = false; +NEW_CONNECTION; + set return_commit_stats = false; NEW_CONNECTION; -set directed_read=''; +set return_commit_stats = false; NEW_CONNECTION; -set directed_read='' ; +set return_commit_stats = false ; NEW_CONNECTION; -set directed_read='' ; +set return_commit_stats = false ; NEW_CONNECTION; -set directed_read='' +set return_commit_stats = false ; NEW_CONNECTION; -set directed_read=''; +set return_commit_stats = false; NEW_CONNECTION; -set directed_read=''; +set return_commit_stats = false; NEW_CONNECTION; set -directed_read=''; +return_commit_stats += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set directed_read=''; +foo set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read='' bar; +set return_commit_stats = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set directed_read=''; +%set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''%; +set return_commit_stats = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%directed_read=''; +set return_commit_stats =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set directed_read=''; +_set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''_; +set return_commit_stats = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_directed_read=''; +set return_commit_stats =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set directed_read=''; +&set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''&; +set return_commit_stats = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&directed_read=''; +set return_commit_stats =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set directed_read=''; +$set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''$; +set return_commit_stats = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$directed_read=''; +set return_commit_stats =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set directed_read=''; +@set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''@; +set return_commit_stats = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@directed_read=''; +set return_commit_stats =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set directed_read=''; +!set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''!; +set return_commit_stats = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!directed_read=''; +set return_commit_stats =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set directed_read=''; +*set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''*; +set return_commit_stats = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*directed_read=''; +set return_commit_stats =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set directed_read=''; +(set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''(; +set return_commit_stats = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(directed_read=''; +set return_commit_stats =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set directed_read=''; +)set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''); +set return_commit_stats = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)directed_read=''; +set return_commit_stats =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set directed_read=''; +-set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''-; +set return_commit_stats = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-directed_read=''; +set return_commit_stats =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set directed_read=''; ++set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''+; +set return_commit_stats = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+directed_read=''; +set return_commit_stats =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set directed_read=''; +-#set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''-#; +set return_commit_stats = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#directed_read=''; +set return_commit_stats =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set directed_read=''; +/set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''/; +set return_commit_stats = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/directed_read=''; +set return_commit_stats =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set directed_read=''; +\set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''\; +set return_commit_stats = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\directed_read=''; +set return_commit_stats =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set directed_read=''; +?set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''?; +set return_commit_stats = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?directed_read=''; +set return_commit_stats =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set directed_read=''; +-/set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''-/; +set return_commit_stats = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/directed_read=''; +set return_commit_stats =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set directed_read=''; +/#set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''/#; +set return_commit_stats = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#directed_read=''; +set return_commit_stats =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set directed_read=''; +/-set return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set directed_read=''/-; +set return_commit_stats = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-directed_read=''; +set return_commit_stats =/-false; NEW_CONNECTION; -set optimizer_version='1'; +set max_commit_delay=null; NEW_CONNECTION; -SET OPTIMIZER_VERSION='1'; +SET MAX_COMMIT_DELAY=NULL; NEW_CONNECTION; -set optimizer_version='1'; +set max_commit_delay=null; NEW_CONNECTION; - set optimizer_version='1'; + set max_commit_delay=null; NEW_CONNECTION; - set optimizer_version='1'; + set max_commit_delay=null; NEW_CONNECTION; -set optimizer_version='1'; +set max_commit_delay=null; NEW_CONNECTION; -set optimizer_version='1' ; +set max_commit_delay=null ; NEW_CONNECTION; -set optimizer_version='1' ; +set max_commit_delay=null ; NEW_CONNECTION; -set optimizer_version='1' +set max_commit_delay=null ; NEW_CONNECTION; -set optimizer_version='1'; +set max_commit_delay=null; NEW_CONNECTION; -set optimizer_version='1'; +set max_commit_delay=null; NEW_CONNECTION; set -optimizer_version='1'; +max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set optimizer_version='1'; +foo set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1' bar; +set max_commit_delay=null bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set optimizer_version='1'; +%set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'%; +set max_commit_delay=null%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%optimizer_version='1'; +set%max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set optimizer_version='1'; +_set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'_; +set max_commit_delay=null_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_optimizer_version='1'; +set_max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set optimizer_version='1'; +&set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'&; +set max_commit_delay=null&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&optimizer_version='1'; +set&max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set optimizer_version='1'; +$set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'$; +set max_commit_delay=null$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$optimizer_version='1'; +set$max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set optimizer_version='1'; +@set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'@; +set max_commit_delay=null@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@optimizer_version='1'; +set@max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set optimizer_version='1'; +!set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'!; +set max_commit_delay=null!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!optimizer_version='1'; +set!max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set optimizer_version='1'; +*set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'*; +set max_commit_delay=null*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*optimizer_version='1'; +set*max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set optimizer_version='1'; +(set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'(; +set max_commit_delay=null(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(optimizer_version='1'; +set(max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set optimizer_version='1'; +)set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'); +set max_commit_delay=null); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)optimizer_version='1'; +set)max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set optimizer_version='1'; +-set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'-; +set max_commit_delay=null-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-optimizer_version='1'; +set-max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set optimizer_version='1'; ++set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'+; +set max_commit_delay=null+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+optimizer_version='1'; +set+max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set optimizer_version='1'; +-#set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'-#; +set max_commit_delay=null-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#optimizer_version='1'; +set-#max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set optimizer_version='1'; +/set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'/; +set max_commit_delay=null/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/optimizer_version='1'; +set/max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set optimizer_version='1'; +\set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'\; +set max_commit_delay=null\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\optimizer_version='1'; +set\max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set optimizer_version='1'; +?set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'?; +set max_commit_delay=null?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?optimizer_version='1'; +set?max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set optimizer_version='1'; +-/set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'-/; +set max_commit_delay=null-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/optimizer_version='1'; +set-/max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set optimizer_version='1'; +/#set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'/#; +set max_commit_delay=null/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#optimizer_version='1'; +set/#max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set optimizer_version='1'; +/-set max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='1'/-; +set max_commit_delay=null/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-optimizer_version='1'; +set/-max_commit_delay=null; NEW_CONNECTION; -set optimizer_version='200'; +set max_commit_delay = null; NEW_CONNECTION; -SET OPTIMIZER_VERSION='200'; +SET MAX_COMMIT_DELAY = NULL; NEW_CONNECTION; -set optimizer_version='200'; +set max_commit_delay = null; NEW_CONNECTION; - set optimizer_version='200'; + set max_commit_delay = null; NEW_CONNECTION; - set optimizer_version='200'; + set max_commit_delay = null; NEW_CONNECTION; -set optimizer_version='200'; +set max_commit_delay = null; NEW_CONNECTION; -set optimizer_version='200' ; +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='200' ; +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='200' +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='200'; +set max_commit_delay = null; NEW_CONNECTION; -set optimizer_version='200'; +set max_commit_delay = null; NEW_CONNECTION; set -optimizer_version='200'; +max_commit_delay += +null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set optimizer_version='200'; +foo set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200' bar; +set max_commit_delay = null bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set optimizer_version='200'; +%set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'%; +set max_commit_delay = null%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%optimizer_version='200'; +set max_commit_delay =%null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set optimizer_version='200'; +_set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'_; +set max_commit_delay = null_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_optimizer_version='200'; +set max_commit_delay =_null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set optimizer_version='200'; +&set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'&; +set max_commit_delay = null&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&optimizer_version='200'; +set max_commit_delay =&null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set optimizer_version='200'; +$set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'$; +set max_commit_delay = null$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$optimizer_version='200'; +set max_commit_delay =$null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set optimizer_version='200'; +@set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'@; +set max_commit_delay = null@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@optimizer_version='200'; +set max_commit_delay =@null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set optimizer_version='200'; +!set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'!; +set max_commit_delay = null!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!optimizer_version='200'; +set max_commit_delay =!null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set optimizer_version='200'; +*set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'*; +set max_commit_delay = null*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*optimizer_version='200'; +set max_commit_delay =*null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set optimizer_version='200'; +(set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'(; +set max_commit_delay = null(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(optimizer_version='200'; +set max_commit_delay =(null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set optimizer_version='200'; +)set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'); +set max_commit_delay = null); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)optimizer_version='200'; +set max_commit_delay =)null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set optimizer_version='200'; +-set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'-; +set max_commit_delay = null-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-optimizer_version='200'; +set max_commit_delay =-null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set optimizer_version='200'; ++set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'+; +set max_commit_delay = null+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+optimizer_version='200'; +set max_commit_delay =+null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set optimizer_version='200'; +-#set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'-#; +set max_commit_delay = null-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#optimizer_version='200'; +set max_commit_delay =-#null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set optimizer_version='200'; +/set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'/; +set max_commit_delay = null/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/optimizer_version='200'; +set max_commit_delay =/null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set optimizer_version='200'; +\set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'\; +set max_commit_delay = null\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\optimizer_version='200'; +set max_commit_delay =\null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set optimizer_version='200'; +?set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'?; +set max_commit_delay = null?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?optimizer_version='200'; +set max_commit_delay =?null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set optimizer_version='200'; +-/set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'-/; +set max_commit_delay = null-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/optimizer_version='200'; +set max_commit_delay =-/null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set optimizer_version='200'; +/#set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'/#; +set max_commit_delay = null/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#optimizer_version='200'; +set max_commit_delay =/#null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set optimizer_version='200'; +/-set max_commit_delay = null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='200'/-; +set max_commit_delay = null/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-optimizer_version='200'; +set max_commit_delay =/-null; NEW_CONNECTION; -set optimizer_version='LATEST'; +set max_commit_delay = null ; NEW_CONNECTION; -SET OPTIMIZER_VERSION='LATEST'; +SET MAX_COMMIT_DELAY = NULL ; NEW_CONNECTION; -set optimizer_version='latest'; +set max_commit_delay = null ; NEW_CONNECTION; - set optimizer_version='LATEST'; + set max_commit_delay = null ; NEW_CONNECTION; - set optimizer_version='LATEST'; + set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='LATEST'; +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='LATEST' ; +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='LATEST' ; +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='LATEST' +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='LATEST'; +set max_commit_delay = null ; NEW_CONNECTION; -set optimizer_version='LATEST'; +set max_commit_delay = null ; NEW_CONNECTION; set -optimizer_version='LATEST'; +max_commit_delay += +null +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set optimizer_version='LATEST'; +foo set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST' bar; +set max_commit_delay = null bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set optimizer_version='LATEST'; +%set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'%; +set max_commit_delay = null %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%optimizer_version='LATEST'; +set max_commit_delay = null%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set optimizer_version='LATEST'; +_set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'_; +set max_commit_delay = null _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_optimizer_version='LATEST'; +set max_commit_delay = null_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set optimizer_version='LATEST'; +&set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'&; +set max_commit_delay = null &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&optimizer_version='LATEST'; +set max_commit_delay = null&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set optimizer_version='LATEST'; +$set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'$; +set max_commit_delay = null $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$optimizer_version='LATEST'; +set max_commit_delay = null$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set optimizer_version='LATEST'; +@set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'@; +set max_commit_delay = null @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@optimizer_version='LATEST'; +set max_commit_delay = null@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set optimizer_version='LATEST'; +!set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'!; +set max_commit_delay = null !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!optimizer_version='LATEST'; +set max_commit_delay = null!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set optimizer_version='LATEST'; +*set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'*; +set max_commit_delay = null *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*optimizer_version='LATEST'; +set max_commit_delay = null*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set optimizer_version='LATEST'; +(set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'(; +set max_commit_delay = null (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(optimizer_version='LATEST'; +set max_commit_delay = null(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set optimizer_version='LATEST'; +)set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'); +set max_commit_delay = null ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)optimizer_version='LATEST'; +set max_commit_delay = null); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set optimizer_version='LATEST'; +-set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'-; +set max_commit_delay = null -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-optimizer_version='LATEST'; +set max_commit_delay = null-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set optimizer_version='LATEST'; ++set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'+; +set max_commit_delay = null +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+optimizer_version='LATEST'; +set max_commit_delay = null+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set optimizer_version='LATEST'; +-#set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'-#; +set max_commit_delay = null -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#optimizer_version='LATEST'; +set max_commit_delay = null-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set optimizer_version='LATEST'; +/set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'/; +set max_commit_delay = null /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/optimizer_version='LATEST'; +set max_commit_delay = null/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set optimizer_version='LATEST'; +\set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'\; +set max_commit_delay = null \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\optimizer_version='LATEST'; +set max_commit_delay = null\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set optimizer_version='LATEST'; +?set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'?; +set max_commit_delay = null ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?optimizer_version='LATEST'; +set max_commit_delay = null?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set optimizer_version='LATEST'; +-/set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'-/; +set max_commit_delay = null -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/optimizer_version='LATEST'; +set max_commit_delay = null-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set optimizer_version='LATEST'; +/#set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'/#; +set max_commit_delay = null /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#optimizer_version='LATEST'; +set max_commit_delay = null/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set optimizer_version='LATEST'; +/-set max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='LATEST'/-; +set max_commit_delay = null /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-optimizer_version='LATEST'; +set max_commit_delay = null/-; NEW_CONNECTION; -set optimizer_version=''; +set max_commit_delay=1000; NEW_CONNECTION; -SET OPTIMIZER_VERSION=''; +SET MAX_COMMIT_DELAY=1000; NEW_CONNECTION; -set optimizer_version=''; +set max_commit_delay=1000; NEW_CONNECTION; - set optimizer_version=''; + set max_commit_delay=1000; NEW_CONNECTION; - set optimizer_version=''; + set max_commit_delay=1000; NEW_CONNECTION; -set optimizer_version=''; +set max_commit_delay=1000; NEW_CONNECTION; -set optimizer_version='' ; +set max_commit_delay=1000 ; NEW_CONNECTION; -set optimizer_version='' ; +set max_commit_delay=1000 ; NEW_CONNECTION; -set optimizer_version='' +set max_commit_delay=1000 ; NEW_CONNECTION; -set optimizer_version=''; +set max_commit_delay=1000; NEW_CONNECTION; -set optimizer_version=''; +set max_commit_delay=1000; NEW_CONNECTION; set -optimizer_version=''; +max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set optimizer_version=''; +foo set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version='' bar; +set max_commit_delay=1000 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set optimizer_version=''; +%set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''%; +set max_commit_delay=1000%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%optimizer_version=''; +set%max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set optimizer_version=''; +_set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''_; +set max_commit_delay=1000_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_optimizer_version=''; +set_max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set optimizer_version=''; +&set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''&; +set max_commit_delay=1000&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&optimizer_version=''; +set&max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set optimizer_version=''; +$set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''$; +set max_commit_delay=1000$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$optimizer_version=''; +set$max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set optimizer_version=''; +@set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''@; +set max_commit_delay=1000@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@optimizer_version=''; +set@max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set optimizer_version=''; +!set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''!; +set max_commit_delay=1000!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!optimizer_version=''; +set!max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set optimizer_version=''; +*set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''*; +set max_commit_delay=1000*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*optimizer_version=''; +set*max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set optimizer_version=''; +(set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''(; +set max_commit_delay=1000(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(optimizer_version=''; +set(max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set optimizer_version=''; +)set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''); +set max_commit_delay=1000); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)optimizer_version=''; +set)max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set optimizer_version=''; +-set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''-; +set max_commit_delay=1000-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-optimizer_version=''; +set-max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set optimizer_version=''; ++set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''+; +set max_commit_delay=1000+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+optimizer_version=''; +set+max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set optimizer_version=''; +-#set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''-#; +set max_commit_delay=1000-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#optimizer_version=''; +set-#max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set optimizer_version=''; +/set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''/; +set max_commit_delay=1000/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/optimizer_version=''; +set/max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set optimizer_version=''; +\set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''\; +set max_commit_delay=1000\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\optimizer_version=''; +set\max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set optimizer_version=''; +?set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''?; +set max_commit_delay=1000?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?optimizer_version=''; +set?max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set optimizer_version=''; +-/set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''-/; +set max_commit_delay=1000-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/optimizer_version=''; +set-/max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set optimizer_version=''; +/#set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''/#; +set max_commit_delay=1000/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#optimizer_version=''; +set/#max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set optimizer_version=''; +/-set max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_version=''/-; +set max_commit_delay=1000/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-optimizer_version=''; +set/-max_commit_delay=1000; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay = 1000; NEW_CONNECTION; -SET OPTIMIZER_STATISTICS_PACKAGE='AUTO_20191128_14_47_22UTC'; +SET MAX_COMMIT_DELAY = 1000; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22utc'; +set max_commit_delay = 1000; NEW_CONNECTION; - set optimizer_statistics_package='auto_20191128_14_47_22UTC'; + set max_commit_delay = 1000; NEW_CONNECTION; - set optimizer_statistics_package='auto_20191128_14_47_22UTC'; + set max_commit_delay = 1000; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay = 1000; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22UTC' ; +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22UTC' ; +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22UTC' +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay = 1000; NEW_CONNECTION; -set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay = 1000; NEW_CONNECTION; set -optimizer_statistics_package='auto_20191128_14_47_22UTC'; +max_commit_delay += +1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +foo set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC' bar; +set max_commit_delay = 1000 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +%set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'%; +set max_commit_delay = 1000%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =%1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +_set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'_; +set max_commit_delay = 1000_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =_1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +&set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'&; +set max_commit_delay = 1000&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =&1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +$set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'$; +set max_commit_delay = 1000$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =$1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +@set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'@; +set max_commit_delay = 1000@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =@1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +!set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'!; +set max_commit_delay = 1000!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =!1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +*set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'*; +set max_commit_delay = 1000*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =*1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +(set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'(; +set max_commit_delay = 1000(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =(1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +)set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'); +set max_commit_delay = 1000); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =)1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +-set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'-; +set max_commit_delay = 1000-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =-1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set optimizer_statistics_package='auto_20191128_14_47_22UTC'; ++set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'+; +set max_commit_delay = 1000+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =+1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +-#set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'-#; +set max_commit_delay = 1000-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =-#1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +/set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'/; +set max_commit_delay = 1000/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =/1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +\set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'\; +set max_commit_delay = 1000\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =\1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +?set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'?; +set max_commit_delay = 1000?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =?1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +-/set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'-/; +set max_commit_delay = 1000-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =-/1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +/#set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'/#; +set max_commit_delay = 1000/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =/#1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set optimizer_statistics_package='auto_20191128_14_47_22UTC'; +/-set max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='auto_20191128_14_47_22UTC'/-; +set max_commit_delay = 1000/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set max_commit_delay =/-1000; NEW_CONNECTION; -set optimizer_statistics_package=''; +set max_commit_delay = 1000 ; NEW_CONNECTION; -SET OPTIMIZER_STATISTICS_PACKAGE=''; +SET MAX_COMMIT_DELAY = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package=''; +set max_commit_delay = 1000 ; NEW_CONNECTION; - set optimizer_statistics_package=''; + set max_commit_delay = 1000 ; NEW_CONNECTION; - set optimizer_statistics_package=''; + set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package=''; +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package='' ; +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package='' ; +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package='' +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package=''; +set max_commit_delay = 1000 ; NEW_CONNECTION; -set optimizer_statistics_package=''; +set max_commit_delay = 1000 ; NEW_CONNECTION; set -optimizer_statistics_package=''; +max_commit_delay += +1000 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set optimizer_statistics_package=''; +foo set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package='' bar; +set max_commit_delay = 1000 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set optimizer_statistics_package=''; +%set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''%; +set max_commit_delay = 1000 %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%optimizer_statistics_package=''; +set max_commit_delay = 1000%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set optimizer_statistics_package=''; +_set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''_; +set max_commit_delay = 1000 _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_optimizer_statistics_package=''; +set max_commit_delay = 1000_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set optimizer_statistics_package=''; +&set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''&; +set max_commit_delay = 1000 &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&optimizer_statistics_package=''; +set max_commit_delay = 1000&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set optimizer_statistics_package=''; +$set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''$; +set max_commit_delay = 1000 $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$optimizer_statistics_package=''; +set max_commit_delay = 1000$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set optimizer_statistics_package=''; +@set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''@; +set max_commit_delay = 1000 @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@optimizer_statistics_package=''; +set max_commit_delay = 1000@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set optimizer_statistics_package=''; +!set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''!; +set max_commit_delay = 1000 !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!optimizer_statistics_package=''; +set max_commit_delay = 1000!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set optimizer_statistics_package=''; +*set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''*; +set max_commit_delay = 1000 *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*optimizer_statistics_package=''; +set max_commit_delay = 1000*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set optimizer_statistics_package=''; +(set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''(; +set max_commit_delay = 1000 (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(optimizer_statistics_package=''; +set max_commit_delay = 1000(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set optimizer_statistics_package=''; +)set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''); +set max_commit_delay = 1000 ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)optimizer_statistics_package=''; +set max_commit_delay = 1000); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set optimizer_statistics_package=''; +-set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''-; +set max_commit_delay = 1000 -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-optimizer_statistics_package=''; +set max_commit_delay = 1000-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set optimizer_statistics_package=''; ++set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''+; +set max_commit_delay = 1000 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+optimizer_statistics_package=''; +set max_commit_delay = 1000+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set optimizer_statistics_package=''; +-#set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''-#; +set max_commit_delay = 1000 -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#optimizer_statistics_package=''; +set max_commit_delay = 1000-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set optimizer_statistics_package=''; +/set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''/; +set max_commit_delay = 1000 /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/optimizer_statistics_package=''; +set max_commit_delay = 1000/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set optimizer_statistics_package=''; +\set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''\; +set max_commit_delay = 1000 \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\optimizer_statistics_package=''; +set max_commit_delay = 1000\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set optimizer_statistics_package=''; +?set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''?; +set max_commit_delay = 1000 ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?optimizer_statistics_package=''; +set max_commit_delay = 1000?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set optimizer_statistics_package=''; +-/set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''-/; +set max_commit_delay = 1000 -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/optimizer_statistics_package=''; +set max_commit_delay = 1000-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set optimizer_statistics_package=''; +/#set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''/#; +set max_commit_delay = 1000 /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#optimizer_statistics_package=''; +set max_commit_delay = 1000/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set optimizer_statistics_package=''; +/-set max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set optimizer_statistics_package=''/-; +set max_commit_delay = 1000 /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-optimizer_statistics_package=''; +set max_commit_delay = 1000/-; NEW_CONNECTION; -set return_commit_stats = true; +set max_commit_delay='1s'; NEW_CONNECTION; -SET RETURN_COMMIT_STATS = TRUE; +SET MAX_COMMIT_DELAY='1S'; NEW_CONNECTION; -set return_commit_stats = true; +set max_commit_delay='1s'; NEW_CONNECTION; - set return_commit_stats = true; + set max_commit_delay='1s'; NEW_CONNECTION; - set return_commit_stats = true; + set max_commit_delay='1s'; NEW_CONNECTION; -set return_commit_stats = true; +set max_commit_delay='1s'; NEW_CONNECTION; -set return_commit_stats = true ; +set max_commit_delay='1s' ; NEW_CONNECTION; -set return_commit_stats = true ; +set max_commit_delay='1s' ; NEW_CONNECTION; -set return_commit_stats = true +set max_commit_delay='1s' ; NEW_CONNECTION; -set return_commit_stats = true; +set max_commit_delay='1s'; NEW_CONNECTION; -set return_commit_stats = true; +set max_commit_delay='1s'; NEW_CONNECTION; set -return_commit_stats -= -true; +max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set return_commit_stats = true; +foo set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true bar; +set max_commit_delay='1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set return_commit_stats = true; +%set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true%; +set max_commit_delay='1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =%true; +set%max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set return_commit_stats = true; +_set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true_; +set max_commit_delay='1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =_true; +set_max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set return_commit_stats = true; +&set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true&; +set max_commit_delay='1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =&true; +set&max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set return_commit_stats = true; +$set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true$; +set max_commit_delay='1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =$true; +set$max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set return_commit_stats = true; +@set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true@; +set max_commit_delay='1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =@true; +set@max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set return_commit_stats = true; +!set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true!; +set max_commit_delay='1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =!true; +set!max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set return_commit_stats = true; +*set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true*; +set max_commit_delay='1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =*true; +set*max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set return_commit_stats = true; +(set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true(; +set max_commit_delay='1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =(true; +set(max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set return_commit_stats = true; +)set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true); +set max_commit_delay='1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =)true; +set)max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set return_commit_stats = true; +-set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true-; +set max_commit_delay='1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =-true; +set-max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set return_commit_stats = true; ++set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true+; +set max_commit_delay='1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =+true; +set+max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set return_commit_stats = true; +-#set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true-#; +set max_commit_delay='1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =-#true; +set-#max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set return_commit_stats = true; +/set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true/; +set max_commit_delay='1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =/true; +set/max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set return_commit_stats = true; +\set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true\; +set max_commit_delay='1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =\true; +set\max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set return_commit_stats = true; +?set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true?; +set max_commit_delay='1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =?true; +set?max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set return_commit_stats = true; +-/set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true-/; +set max_commit_delay='1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =-/true; +set-/max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set return_commit_stats = true; +/#set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true/#; +set max_commit_delay='1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =/#true; +set/#max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set return_commit_stats = true; +/-set max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = true/-; +set max_commit_delay='1s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =/-true; +set/-max_commit_delay='1s'; NEW_CONNECTION; -set return_commit_stats = false; +set max_commit_delay = '1s'; NEW_CONNECTION; -SET RETURN_COMMIT_STATS = FALSE; +SET MAX_COMMIT_DELAY = '1S'; NEW_CONNECTION; -set return_commit_stats = false; +set max_commit_delay = '1s'; NEW_CONNECTION; - set return_commit_stats = false; + set max_commit_delay = '1s'; NEW_CONNECTION; - set return_commit_stats = false; + set max_commit_delay = '1s'; NEW_CONNECTION; -set return_commit_stats = false; +set max_commit_delay = '1s'; NEW_CONNECTION; -set return_commit_stats = false ; +set max_commit_delay = '1s' ; NEW_CONNECTION; -set return_commit_stats = false ; +set max_commit_delay = '1s' ; NEW_CONNECTION; -set return_commit_stats = false +set max_commit_delay = '1s' ; NEW_CONNECTION; -set return_commit_stats = false; +set max_commit_delay = '1s'; NEW_CONNECTION; -set return_commit_stats = false; +set max_commit_delay = '1s'; NEW_CONNECTION; set -return_commit_stats +max_commit_delay = -false; +'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set return_commit_stats = false; +foo set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false bar; +set max_commit_delay = '1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set return_commit_stats = false; +%set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false%; +set max_commit_delay = '1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =%false; +set max_commit_delay =%'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set return_commit_stats = false; +_set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false_; +set max_commit_delay = '1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =_false; +set max_commit_delay =_'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set return_commit_stats = false; +&set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false&; +set max_commit_delay = '1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =&false; +set max_commit_delay =&'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set return_commit_stats = false; +$set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false$; +set max_commit_delay = '1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =$false; +set max_commit_delay =$'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set return_commit_stats = false; +@set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false@; +set max_commit_delay = '1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =@false; +set max_commit_delay =@'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set return_commit_stats = false; +!set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false!; +set max_commit_delay = '1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =!false; +set max_commit_delay =!'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set return_commit_stats = false; +*set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false*; +set max_commit_delay = '1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =*false; +set max_commit_delay =*'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set return_commit_stats = false; +(set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false(; +set max_commit_delay = '1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =(false; +set max_commit_delay =('1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set return_commit_stats = false; +)set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false); +set max_commit_delay = '1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =)false; +set max_commit_delay =)'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set return_commit_stats = false; +-set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false-; +set max_commit_delay = '1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =-false; +set max_commit_delay =-'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set return_commit_stats = false; ++set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false+; +set max_commit_delay = '1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =+false; +set max_commit_delay =+'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set return_commit_stats = false; +-#set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false-#; +set max_commit_delay = '1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =-#false; +set max_commit_delay =-#'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set return_commit_stats = false; +/set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false/; +set max_commit_delay = '1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =/false; +set max_commit_delay =/'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set return_commit_stats = false; +\set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false\; +set max_commit_delay = '1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =\false; +set max_commit_delay =\'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set return_commit_stats = false; +?set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false?; +set max_commit_delay = '1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =?false; +set max_commit_delay =?'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set return_commit_stats = false; +-/set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false-/; +set max_commit_delay = '1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =-/false; +set max_commit_delay =-/'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set return_commit_stats = false; +/#set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false/#; +set max_commit_delay = '1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =/#false; +set max_commit_delay =/#'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set return_commit_stats = false; +/-set max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats = false/-; +set max_commit_delay = '1s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set return_commit_stats =/-false; +set max_commit_delay =/-'1s'; NEW_CONNECTION; -set max_commit_delay=null; +set max_commit_delay = '1s' ; NEW_CONNECTION; -SET MAX_COMMIT_DELAY=NULL; +SET MAX_COMMIT_DELAY = '1S' ; NEW_CONNECTION; -set max_commit_delay=null; +set max_commit_delay = '1s' ; NEW_CONNECTION; - set max_commit_delay=null; + set max_commit_delay = '1s' ; NEW_CONNECTION; - set max_commit_delay=null; + set max_commit_delay = '1s' ; NEW_CONNECTION; -set max_commit_delay=null; +set max_commit_delay = '1s' ; NEW_CONNECTION; -set max_commit_delay=null ; +set max_commit_delay = '1s' ; NEW_CONNECTION; -set max_commit_delay=null ; +set max_commit_delay = '1s' ; NEW_CONNECTION; -set max_commit_delay=null +set max_commit_delay = '1s' ; NEW_CONNECTION; -set max_commit_delay=null; +set max_commit_delay = '1s' ; NEW_CONNECTION; -set max_commit_delay=null; +set max_commit_delay = '1s' ; NEW_CONNECTION; set -max_commit_delay=null; +max_commit_delay += +'1s' +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay=null; +foo set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null bar; +set max_commit_delay = '1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay=null; +%set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null%; +set max_commit_delay = '1s' %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%max_commit_delay=null; +set max_commit_delay = '1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay=null; +_set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null_; +set max_commit_delay = '1s' _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_max_commit_delay=null; +set max_commit_delay = '1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay=null; +&set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null&; +set max_commit_delay = '1s' &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&max_commit_delay=null; +set max_commit_delay = '1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay=null; +$set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null$; +set max_commit_delay = '1s' $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$max_commit_delay=null; +set max_commit_delay = '1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay=null; +@set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null@; +set max_commit_delay = '1s' @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@max_commit_delay=null; +set max_commit_delay = '1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay=null; +!set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null!; +set max_commit_delay = '1s' !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!max_commit_delay=null; +set max_commit_delay = '1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay=null; +*set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null*; +set max_commit_delay = '1s' *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*max_commit_delay=null; +set max_commit_delay = '1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay=null; +(set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null(; +set max_commit_delay = '1s' (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(max_commit_delay=null; +set max_commit_delay = '1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay=null; +)set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null); +set max_commit_delay = '1s' ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)max_commit_delay=null; +set max_commit_delay = '1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay=null; +-set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null-; +set max_commit_delay = '1s' -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-max_commit_delay=null; +set max_commit_delay = '1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay=null; ++set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null+; +set max_commit_delay = '1s' +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+max_commit_delay=null; +set max_commit_delay = '1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay=null; +-#set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null-#; +set max_commit_delay = '1s' -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#max_commit_delay=null; +set max_commit_delay = '1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay=null; +/set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null/; +set max_commit_delay = '1s' /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/max_commit_delay=null; +set max_commit_delay = '1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay=null; +\set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null\; +set max_commit_delay = '1s' \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\max_commit_delay=null; +set max_commit_delay = '1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay=null; +?set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null?; +set max_commit_delay = '1s' ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?max_commit_delay=null; +set max_commit_delay = '1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay=null; +-/set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null-/; +set max_commit_delay = '1s' -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/max_commit_delay=null; +set max_commit_delay = '1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay=null; +/#set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null/#; +set max_commit_delay = '1s' /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#max_commit_delay=null; +set max_commit_delay = '1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay=null; +/-set max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=null/-; +set max_commit_delay = '1s' /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-max_commit_delay=null; +set max_commit_delay = '1s'/-; NEW_CONNECTION; -set max_commit_delay = null; +set max_commit_delay='100ms'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY = NULL; +SET MAX_COMMIT_DELAY='100MS'; NEW_CONNECTION; -set max_commit_delay = null; +set max_commit_delay='100ms'; NEW_CONNECTION; - set max_commit_delay = null; + set max_commit_delay='100ms'; NEW_CONNECTION; - set max_commit_delay = null; + set max_commit_delay='100ms'; NEW_CONNECTION; -set max_commit_delay = null; +set max_commit_delay='100ms'; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='100ms' ; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='100ms' ; NEW_CONNECTION; -set max_commit_delay = null +set max_commit_delay='100ms' ; NEW_CONNECTION; -set max_commit_delay = null; +set max_commit_delay='100ms'; NEW_CONNECTION; -set max_commit_delay = null; +set max_commit_delay='100ms'; NEW_CONNECTION; set -max_commit_delay -= -null; +max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay = null; +foo set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null bar; +set max_commit_delay='100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay = null; +%set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null%; +set max_commit_delay='100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =%null; +set%max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay = null; +_set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null_; +set max_commit_delay='100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =_null; +set_max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay = null; +&set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null&; +set max_commit_delay='100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =&null; +set&max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay = null; +$set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null$; +set max_commit_delay='100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =$null; +set$max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay = null; +@set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null@; +set max_commit_delay='100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =@null; +set@max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay = null; +!set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null!; +set max_commit_delay='100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =!null; +set!max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay = null; +*set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null*; +set max_commit_delay='100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =*null; +set*max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay = null; +(set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null(; +set max_commit_delay='100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =(null; +set(max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay = null; +)set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null); +set max_commit_delay='100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =)null; +set)max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay = null; +-set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null-; +set max_commit_delay='100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-null; +set-max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay = null; ++set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null+; +set max_commit_delay='100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =+null; +set+max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay = null; +-#set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null-#; +set max_commit_delay='100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-#null; +set-#max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay = null; +/set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null/; +set max_commit_delay='100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/null; +set/max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay = null; +\set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null\; +set max_commit_delay='100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =\null; +set\max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay = null; +?set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null?; +set max_commit_delay='100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =?null; +set?max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay = null; +-/set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null-/; +set max_commit_delay='100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-/null; +set-/max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay = null; +/#set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null/#; +set max_commit_delay='100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/#null; +set/#max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay = null; +/-set max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null/-; +set max_commit_delay='100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/-null; +set/-max_commit_delay='100ms'; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='10000us'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY = NULL ; +SET MAX_COMMIT_DELAY='10000US'; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='10000us'; NEW_CONNECTION; - set max_commit_delay = null ; + set max_commit_delay='10000us'; NEW_CONNECTION; - set max_commit_delay = null ; + set max_commit_delay='10000us'; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='10000us'; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='10000us' ; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='10000us' ; NEW_CONNECTION; -set max_commit_delay = null +set max_commit_delay='10000us' ; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='10000us'; NEW_CONNECTION; -set max_commit_delay = null ; +set max_commit_delay='10000us'; NEW_CONNECTION; set -max_commit_delay -= -null -; +max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay = null ; +foo set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null bar; +set max_commit_delay='10000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay = null ; +%set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null %; +set max_commit_delay='10000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null%; +set%max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay = null ; +_set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null _; +set max_commit_delay='10000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null_; +set_max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay = null ; +&set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null &; +set max_commit_delay='10000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null&; +set&max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay = null ; +$set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null $; +set max_commit_delay='10000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null$; +set$max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay = null ; +@set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null @; +set max_commit_delay='10000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null@; +set@max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay = null ; +!set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null !; +set max_commit_delay='10000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null!; +set!max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay = null ; +*set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null *; +set max_commit_delay='10000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null*; +set*max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay = null ; +(set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null (; +set max_commit_delay='10000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null(; +set(max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay = null ; +)set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null ); +set max_commit_delay='10000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null); +set)max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay = null ; +-set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null -; +set max_commit_delay='10000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null-; +set-max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay = null ; ++set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null +; +set max_commit_delay='10000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null+; +set+max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay = null ; +-#set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null -#; +set max_commit_delay='10000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null-#; +set-#max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay = null ; +/set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null /; +set max_commit_delay='10000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null/; +set/max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay = null ; +\set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null \; +set max_commit_delay='10000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null\; +set\max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay = null ; +?set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null ?; +set max_commit_delay='10000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null?; +set?max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay = null ; +-/set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null -/; +set max_commit_delay='10000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null-/; +set-/max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay = null ; +/#set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null /#; +set max_commit_delay='10000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null/#; +set/#max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay = null ; +/-set max_commit_delay='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null /-; +set max_commit_delay='10000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = null/-; +set/-max_commit_delay='10000us'; NEW_CONNECTION; -set max_commit_delay=1000; +set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY=1000; +SET MAX_COMMIT_DELAY='9223372036854775807NS'; NEW_CONNECTION; -set max_commit_delay=1000; +set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; - set max_commit_delay=1000; + set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; - set max_commit_delay=1000; + set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; -set max_commit_delay=1000; +set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; -set max_commit_delay=1000 ; +set max_commit_delay='9223372036854775807ns' ; NEW_CONNECTION; -set max_commit_delay=1000 ; +set max_commit_delay='9223372036854775807ns' ; NEW_CONNECTION; -set max_commit_delay=1000 +set max_commit_delay='9223372036854775807ns' ; NEW_CONNECTION; -set max_commit_delay=1000; +set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; -set max_commit_delay=1000; +set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; set -max_commit_delay=1000; +max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay=1000; +foo set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000 bar; +set max_commit_delay='9223372036854775807ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay=1000; +%set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000%; +set max_commit_delay='9223372036854775807ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%max_commit_delay=1000; +set%max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay=1000; +_set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000_; +set max_commit_delay='9223372036854775807ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_max_commit_delay=1000; +set_max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay=1000; +&set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000&; +set max_commit_delay='9223372036854775807ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&max_commit_delay=1000; +set&max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay=1000; +$set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000$; +set max_commit_delay='9223372036854775807ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$max_commit_delay=1000; +set$max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay=1000; +@set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000@; +set max_commit_delay='9223372036854775807ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@max_commit_delay=1000; +set@max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay=1000; +!set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000!; +set max_commit_delay='9223372036854775807ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!max_commit_delay=1000; +set!max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay=1000; +*set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000*; +set max_commit_delay='9223372036854775807ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*max_commit_delay=1000; +set*max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay=1000; +(set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000(; +set max_commit_delay='9223372036854775807ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(max_commit_delay=1000; +set(max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay=1000; +)set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000); +set max_commit_delay='9223372036854775807ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)max_commit_delay=1000; +set)max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay=1000; +-set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000-; +set max_commit_delay='9223372036854775807ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-max_commit_delay=1000; +set-max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay=1000; ++set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000+; +set max_commit_delay='9223372036854775807ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+max_commit_delay=1000; +set+max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay=1000; +-#set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000-#; +set max_commit_delay='9223372036854775807ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#max_commit_delay=1000; +set-#max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay=1000; +/set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000/; +set max_commit_delay='9223372036854775807ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/max_commit_delay=1000; +set/max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay=1000; +\set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000\; +set max_commit_delay='9223372036854775807ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\max_commit_delay=1000; +set\max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay=1000; +?set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000?; +set max_commit_delay='9223372036854775807ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?max_commit_delay=1000; +set?max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay=1000; +-/set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000-/; +set max_commit_delay='9223372036854775807ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/max_commit_delay=1000; +set-/max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay=1000; +/#set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000/#; +set max_commit_delay='9223372036854775807ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#max_commit_delay=1000; +set/#max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay=1000; +/-set max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay=1000/-; +set max_commit_delay='9223372036854775807ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-max_commit_delay=1000; +set/-max_commit_delay='9223372036854775807ns'; NEW_CONNECTION; -set max_commit_delay = 1000; +set statement_tag='tag1'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY = 1000; +SET STATEMENT_TAG='TAG1'; NEW_CONNECTION; -set max_commit_delay = 1000; +set statement_tag='tag1'; NEW_CONNECTION; - set max_commit_delay = 1000; + set statement_tag='tag1'; NEW_CONNECTION; - set max_commit_delay = 1000; + set statement_tag='tag1'; NEW_CONNECTION; -set max_commit_delay = 1000; +set statement_tag='tag1'; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag1' ; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag1' ; NEW_CONNECTION; -set max_commit_delay = 1000 +set statement_tag='tag1' ; NEW_CONNECTION; -set max_commit_delay = 1000; +set statement_tag='tag1'; NEW_CONNECTION; -set max_commit_delay = 1000; +set statement_tag='tag1'; NEW_CONNECTION; set -max_commit_delay -= -1000; +statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay = 1000; +foo set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 bar; +set statement_tag='tag1' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay = 1000; +%set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000%; +set statement_tag='tag1'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =%1000; +set%statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay = 1000; +_set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000_; +set statement_tag='tag1'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =_1000; +set_statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay = 1000; +&set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000&; +set statement_tag='tag1'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =&1000; +set&statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay = 1000; +$set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000$; +set statement_tag='tag1'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =$1000; +set$statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay = 1000; +@set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000@; +set statement_tag='tag1'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =@1000; +set@statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay = 1000; +!set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000!; +set statement_tag='tag1'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =!1000; +set!statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay = 1000; +*set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000*; +set statement_tag='tag1'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =*1000; +set*statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay = 1000; +(set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000(; +set statement_tag='tag1'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =(1000; +set(statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay = 1000; +)set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000); +set statement_tag='tag1'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =)1000; +set)statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay = 1000; +-set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000-; +set statement_tag='tag1'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-1000; +set-statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay = 1000; ++set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000+; +set statement_tag='tag1'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =+1000; +set+statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay = 1000; +-#set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000-#; +set statement_tag='tag1'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-#1000; +set-#statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay = 1000; +/set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000/; +set statement_tag='tag1'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/1000; +set/statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay = 1000; +\set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000\; +set statement_tag='tag1'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =\1000; +set\statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay = 1000; +?set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000?; +set statement_tag='tag1'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =?1000; +set?statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay = 1000; +-/set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000-/; +set statement_tag='tag1'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-/1000; +set-/statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay = 1000; +/#set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000/#; +set statement_tag='tag1'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/#1000; +set/#statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay = 1000; +/-set statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000/-; +set statement_tag='tag1'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/-1000; +set/-statement_tag='tag1'; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag2'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY = 1000 ; +SET STATEMENT_TAG='TAG2'; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag2'; NEW_CONNECTION; - set max_commit_delay = 1000 ; + set statement_tag='tag2'; NEW_CONNECTION; - set max_commit_delay = 1000 ; + set statement_tag='tag2'; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag2'; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag2' ; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag2' ; NEW_CONNECTION; -set max_commit_delay = 1000 +set statement_tag='tag2' ; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag2'; NEW_CONNECTION; -set max_commit_delay = 1000 ; +set statement_tag='tag2'; NEW_CONNECTION; set -max_commit_delay -= -1000 -; +statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay = 1000 ; +foo set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 bar; +set statement_tag='tag2' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay = 1000 ; +%set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 %; +set statement_tag='tag2'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000%; +set%statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay = 1000 ; +_set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 _; +set statement_tag='tag2'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000_; +set_statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay = 1000 ; +&set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 &; +set statement_tag='tag2'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000&; +set&statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay = 1000 ; +$set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 $; +set statement_tag='tag2'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000$; +set$statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay = 1000 ; +@set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 @; +set statement_tag='tag2'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000@; +set@statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay = 1000 ; +!set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 !; +set statement_tag='tag2'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000!; +set!statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay = 1000 ; +*set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 *; +set statement_tag='tag2'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000*; +set*statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay = 1000 ; +(set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 (; +set statement_tag='tag2'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000(; +set(statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay = 1000 ; +)set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 ); +set statement_tag='tag2'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000); +set)statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay = 1000 ; +-set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 -; +set statement_tag='tag2'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000-; +set-statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay = 1000 ; ++set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 +; +set statement_tag='tag2'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000+; +set+statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay = 1000 ; +-#set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 -#; +set statement_tag='tag2'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000-#; +set-#statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay = 1000 ; +/set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 /; +set statement_tag='tag2'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000/; +set/statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay = 1000 ; +\set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 \; +set statement_tag='tag2'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000\; +set\statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay = 1000 ; +?set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 ?; +set statement_tag='tag2'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000?; +set?statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay = 1000 ; +-/set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 -/; +set statement_tag='tag2'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000-/; +set-/statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay = 1000 ; +/#set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 /#; +set statement_tag='tag2'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000/#; +set/#statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay = 1000 ; +/-set statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000 /-; +set statement_tag='tag2'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = 1000/-; +set/-statement_tag='tag2'; NEW_CONNECTION; -set max_commit_delay='1s'; +set statement_tag=''; NEW_CONNECTION; -SET MAX_COMMIT_DELAY='1S'; +SET STATEMENT_TAG=''; NEW_CONNECTION; -set max_commit_delay='1s'; +set statement_tag=''; NEW_CONNECTION; - set max_commit_delay='1s'; + set statement_tag=''; NEW_CONNECTION; - set max_commit_delay='1s'; + set statement_tag=''; NEW_CONNECTION; -set max_commit_delay='1s'; +set statement_tag=''; NEW_CONNECTION; -set max_commit_delay='1s' ; +set statement_tag='' ; NEW_CONNECTION; -set max_commit_delay='1s' ; +set statement_tag='' ; NEW_CONNECTION; -set max_commit_delay='1s' +set statement_tag='' ; NEW_CONNECTION; -set max_commit_delay='1s'; +set statement_tag=''; NEW_CONNECTION; -set max_commit_delay='1s'; +set statement_tag=''; NEW_CONNECTION; set -max_commit_delay='1s'; +statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay='1s'; +foo set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s' bar; +set statement_tag='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay='1s'; +%set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'%; +set statement_tag=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%max_commit_delay='1s'; +set%statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay='1s'; +_set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'_; +set statement_tag=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_max_commit_delay='1s'; +set_statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay='1s'; +&set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'&; +set statement_tag=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&max_commit_delay='1s'; +set&statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay='1s'; +$set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'$; +set statement_tag=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$max_commit_delay='1s'; +set$statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay='1s'; +@set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'@; +set statement_tag=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@max_commit_delay='1s'; +set@statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay='1s'; +!set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'!; +set statement_tag=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!max_commit_delay='1s'; +set!statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay='1s'; +*set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'*; +set statement_tag=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*max_commit_delay='1s'; +set*statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay='1s'; +(set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'(; +set statement_tag=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(max_commit_delay='1s'; +set(statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay='1s'; +)set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'); +set statement_tag=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)max_commit_delay='1s'; +set)statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay='1s'; +-set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'-; +set statement_tag=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-max_commit_delay='1s'; +set-statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay='1s'; ++set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'+; +set statement_tag=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+max_commit_delay='1s'; +set+statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay='1s'; +-#set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'-#; +set statement_tag=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#max_commit_delay='1s'; +set-#statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay='1s'; +/set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'/; +set statement_tag=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/max_commit_delay='1s'; +set/statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay='1s'; +\set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'\; +set statement_tag=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\max_commit_delay='1s'; +set\statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay='1s'; +?set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'?; +set statement_tag=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?max_commit_delay='1s'; +set?statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay='1s'; +-/set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'-/; +set statement_tag=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/max_commit_delay='1s'; +set-/statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay='1s'; +/#set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'/#; +set statement_tag=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#max_commit_delay='1s'; +set/#statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay='1s'; +/-set statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='1s'/-; +set statement_tag=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-max_commit_delay='1s'; +set/-statement_tag=''; NEW_CONNECTION; -set max_commit_delay = '1s'; +set statement_tag='test_tag'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY = '1S'; +SET STATEMENT_TAG='TEST_TAG'; NEW_CONNECTION; -set max_commit_delay = '1s'; +set statement_tag='test_tag'; NEW_CONNECTION; - set max_commit_delay = '1s'; + set statement_tag='test_tag'; NEW_CONNECTION; - set max_commit_delay = '1s'; + set statement_tag='test_tag'; NEW_CONNECTION; -set max_commit_delay = '1s'; +set statement_tag='test_tag'; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set statement_tag='test_tag' ; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set statement_tag='test_tag' ; NEW_CONNECTION; -set max_commit_delay = '1s' +set statement_tag='test_tag' ; NEW_CONNECTION; -set max_commit_delay = '1s'; +set statement_tag='test_tag'; NEW_CONNECTION; -set max_commit_delay = '1s'; +set statement_tag='test_tag'; NEW_CONNECTION; set -max_commit_delay -= -'1s'; +statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay = '1s'; +foo set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' bar; +set statement_tag='test_tag' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay = '1s'; +%set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'%; +set statement_tag='test_tag'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =%'1s'; +set%statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay = '1s'; +_set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'_; +set statement_tag='test_tag'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =_'1s'; +set_statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay = '1s'; +&set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'&; +set statement_tag='test_tag'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =&'1s'; +set&statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay = '1s'; +$set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'$; +set statement_tag='test_tag'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =$'1s'; +set$statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay = '1s'; +@set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'@; +set statement_tag='test_tag'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =@'1s'; +set@statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay = '1s'; +!set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'!; +set statement_tag='test_tag'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =!'1s'; +set!statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay = '1s'; +*set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'*; +set statement_tag='test_tag'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =*'1s'; +set*statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay = '1s'; +(set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'(; +set statement_tag='test_tag'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =('1s'; +set(statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay = '1s'; +)set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'); +set statement_tag='test_tag'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =)'1s'; +set)statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay = '1s'; +-set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'-; +set statement_tag='test_tag'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-'1s'; +set-statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay = '1s'; ++set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'+; +set statement_tag='test_tag'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =+'1s'; +set+statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay = '1s'; +-#set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'-#; +set statement_tag='test_tag'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-#'1s'; +set-#statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay = '1s'; +/set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'/; +set statement_tag='test_tag'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/'1s'; +set/statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay = '1s'; +\set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'\; +set statement_tag='test_tag'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =\'1s'; +set\statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay = '1s'; +?set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'?; +set statement_tag='test_tag'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =?'1s'; +set?statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay = '1s'; +-/set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'-/; +set statement_tag='test_tag'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =-/'1s'; +set-/statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay = '1s'; +/#set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'/#; +set statement_tag='test_tag'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/#'1s'; +set/#statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay = '1s'; +/-set statement_tag='test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'/-; +set statement_tag='test_tag'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay =/-'1s'; +set/-statement_tag='test_tag'; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set autocommit = false; +set transaction_tag='tag1'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY = '1S' ; +set autocommit = false; +SET TRANSACTION_TAG='TAG1'; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set autocommit = false; +set transaction_tag='tag1'; NEW_CONNECTION; - set max_commit_delay = '1s' ; +set autocommit = false; + set transaction_tag='tag1'; NEW_CONNECTION; - set max_commit_delay = '1s' ; +set autocommit = false; + set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; -set max_commit_delay = '1s' ; +set transaction_tag='tag1'; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set autocommit = false; +set transaction_tag='tag1' ; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set autocommit = false; +set transaction_tag='tag1' ; NEW_CONNECTION; -set max_commit_delay = '1s' +set autocommit = false; +set transaction_tag='tag1' ; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set autocommit = false; +set transaction_tag='tag1'; NEW_CONNECTION; -set max_commit_delay = '1s' ; +set autocommit = false; +set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; set -max_commit_delay -= -'1s' -; +transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay = '1s' ; +foo set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' bar; +set transaction_tag='tag1' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay = '1s' ; +%set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' %; +set transaction_tag='tag1'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'%; +set%transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay = '1s' ; +_set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' _; +set transaction_tag='tag1'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'_; +set_transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay = '1s' ; +&set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' &; +set transaction_tag='tag1'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'&; +set&transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay = '1s' ; +$set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' $; +set transaction_tag='tag1'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'$; +set$transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay = '1s' ; +@set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' @; +set transaction_tag='tag1'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'@; +set@transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay = '1s' ; +!set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' !; +set transaction_tag='tag1'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'!; +set!transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay = '1s' ; +*set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' *; +set transaction_tag='tag1'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'*; +set*transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay = '1s' ; +(set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' (; +set transaction_tag='tag1'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'(; +set(transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay = '1s' ; +)set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' ); +set transaction_tag='tag1'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'); +set)transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay = '1s' ; +-set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' -; +set transaction_tag='tag1'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'-; +set-transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay = '1s' ; ++set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' +; +set transaction_tag='tag1'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'+; +set+transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay = '1s' ; +-#set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' -#; +set transaction_tag='tag1'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'-#; +set-#transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay = '1s' ; +/set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' /; +set transaction_tag='tag1'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'/; +set/transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay = '1s' ; +\set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' \; +set transaction_tag='tag1'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'\; +set\transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay = '1s' ; +?set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' ?; +set transaction_tag='tag1'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'?; +set?transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay = '1s' ; +-/set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' -/; +set transaction_tag='tag1'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'-/; +set-/transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay = '1s' ; +/#set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' /#; +set transaction_tag='tag1'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'/#; +set/#transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay = '1s' ; +/-set transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s' /-; +set transaction_tag='tag1'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay = '1s'/-; +set/-transaction_tag='tag1'; NEW_CONNECTION; -set max_commit_delay='100ms'; +set autocommit = false; +set transaction_tag='tag2'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY='100MS'; +set autocommit = false; +SET TRANSACTION_TAG='TAG2'; NEW_CONNECTION; -set max_commit_delay='100ms'; +set autocommit = false; +set transaction_tag='tag2'; NEW_CONNECTION; - set max_commit_delay='100ms'; +set autocommit = false; + set transaction_tag='tag2'; NEW_CONNECTION; - set max_commit_delay='100ms'; +set autocommit = false; + set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; -set max_commit_delay='100ms'; +set transaction_tag='tag2'; NEW_CONNECTION; -set max_commit_delay='100ms' ; +set autocommit = false; +set transaction_tag='tag2' ; NEW_CONNECTION; -set max_commit_delay='100ms' ; +set autocommit = false; +set transaction_tag='tag2' ; NEW_CONNECTION; -set max_commit_delay='100ms' +set autocommit = false; +set transaction_tag='tag2' ; NEW_CONNECTION; -set max_commit_delay='100ms'; +set autocommit = false; +set transaction_tag='tag2'; NEW_CONNECTION; -set max_commit_delay='100ms'; +set autocommit = false; +set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; set -max_commit_delay='100ms'; +transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay='100ms'; +foo set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms' bar; +set transaction_tag='tag2' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay='100ms'; +%set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'%; +set transaction_tag='tag2'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%max_commit_delay='100ms'; +set%transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay='100ms'; +_set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'_; +set transaction_tag='tag2'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_max_commit_delay='100ms'; +set_transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay='100ms'; +&set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'&; +set transaction_tag='tag2'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&max_commit_delay='100ms'; +set&transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay='100ms'; +$set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'$; +set transaction_tag='tag2'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$max_commit_delay='100ms'; +set$transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay='100ms'; +@set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'@; +set transaction_tag='tag2'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@max_commit_delay='100ms'; +set@transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay='100ms'; +!set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'!; +set transaction_tag='tag2'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!max_commit_delay='100ms'; +set!transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay='100ms'; +*set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'*; +set transaction_tag='tag2'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*max_commit_delay='100ms'; +set*transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay='100ms'; +(set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'(; +set transaction_tag='tag2'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(max_commit_delay='100ms'; +set(transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay='100ms'; +)set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'); +set transaction_tag='tag2'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)max_commit_delay='100ms'; +set)transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay='100ms'; +-set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'-; +set transaction_tag='tag2'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-max_commit_delay='100ms'; +set-transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay='100ms'; ++set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'+; +set transaction_tag='tag2'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+max_commit_delay='100ms'; +set+transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay='100ms'; +-#set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'-#; +set transaction_tag='tag2'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#max_commit_delay='100ms'; +set-#transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay='100ms'; +/set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'/; +set transaction_tag='tag2'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/max_commit_delay='100ms'; +set/transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay='100ms'; +\set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'\; +set transaction_tag='tag2'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\max_commit_delay='100ms'; +set\transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay='100ms'; +?set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'?; +set transaction_tag='tag2'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?max_commit_delay='100ms'; +set?transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay='100ms'; +-/set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'-/; +set transaction_tag='tag2'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/max_commit_delay='100ms'; +set-/transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay='100ms'; +/#set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'/#; +set transaction_tag='tag2'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#max_commit_delay='100ms'; +set/#transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay='100ms'; +/-set transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='100ms'/-; +set transaction_tag='tag2'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-max_commit_delay='100ms'; +set/-transaction_tag='tag2'; NEW_CONNECTION; -set max_commit_delay='10000us'; +set autocommit = false; +set transaction_tag=''; NEW_CONNECTION; -SET MAX_COMMIT_DELAY='10000US'; +set autocommit = false; +SET TRANSACTION_TAG=''; NEW_CONNECTION; -set max_commit_delay='10000us'; +set autocommit = false; +set transaction_tag=''; NEW_CONNECTION; - set max_commit_delay='10000us'; +set autocommit = false; + set transaction_tag=''; NEW_CONNECTION; - set max_commit_delay='10000us'; +set autocommit = false; + set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; -set max_commit_delay='10000us'; +set transaction_tag=''; NEW_CONNECTION; -set max_commit_delay='10000us' ; +set autocommit = false; +set transaction_tag='' ; NEW_CONNECTION; -set max_commit_delay='10000us' ; +set autocommit = false; +set transaction_tag='' ; NEW_CONNECTION; -set max_commit_delay='10000us' +set autocommit = false; +set transaction_tag='' ; NEW_CONNECTION; -set max_commit_delay='10000us'; +set autocommit = false; +set transaction_tag=''; NEW_CONNECTION; -set max_commit_delay='10000us'; +set autocommit = false; +set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; set -max_commit_delay='10000us'; +transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay='10000us'; +foo set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us' bar; +set transaction_tag='' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay='10000us'; +%set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'%; +set transaction_tag=''%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%max_commit_delay='10000us'; +set%transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay='10000us'; +_set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'_; +set transaction_tag=''_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_max_commit_delay='10000us'; +set_transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay='10000us'; +&set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'&; +set transaction_tag=''&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&max_commit_delay='10000us'; +set&transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay='10000us'; +$set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'$; +set transaction_tag=''$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$max_commit_delay='10000us'; +set$transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay='10000us'; +@set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'@; +set transaction_tag=''@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@max_commit_delay='10000us'; +set@transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay='10000us'; +!set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'!; +set transaction_tag=''!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!max_commit_delay='10000us'; +set!transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay='10000us'; +*set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'*; +set transaction_tag=''*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*max_commit_delay='10000us'; +set*transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay='10000us'; +(set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'(; +set transaction_tag=''(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(max_commit_delay='10000us'; +set(transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay='10000us'; +)set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'); +set transaction_tag=''); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)max_commit_delay='10000us'; +set)transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay='10000us'; +-set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'-; +set transaction_tag=''-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-max_commit_delay='10000us'; +set-transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay='10000us'; ++set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'+; +set transaction_tag=''+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+max_commit_delay='10000us'; +set+transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay='10000us'; +-#set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'-#; +set transaction_tag=''-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#max_commit_delay='10000us'; +set-#transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay='10000us'; +/set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'/; +set transaction_tag=''/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/max_commit_delay='10000us'; +set/transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay='10000us'; +\set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'\; +set transaction_tag=''\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\max_commit_delay='10000us'; +set\transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay='10000us'; +?set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'?; +set transaction_tag=''?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?max_commit_delay='10000us'; +set?transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay='10000us'; +-/set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'-/; +set transaction_tag=''-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/max_commit_delay='10000us'; +set-/transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay='10000us'; +/#set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'/#; +set transaction_tag=''/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#max_commit_delay='10000us'; +set/#transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay='10000us'; +/-set transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='10000us'/-; +set transaction_tag=''/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-max_commit_delay='10000us'; +set/-transaction_tag=''; NEW_CONNECTION; -set max_commit_delay='9223372036854775807ns'; +set autocommit = false; +set transaction_tag='test_tag'; NEW_CONNECTION; -SET MAX_COMMIT_DELAY='9223372036854775807NS'; +set autocommit = false; +SET TRANSACTION_TAG='TEST_TAG'; NEW_CONNECTION; -set max_commit_delay='9223372036854775807ns'; +set autocommit = false; +set transaction_tag='test_tag'; NEW_CONNECTION; - set max_commit_delay='9223372036854775807ns'; +set autocommit = false; + set transaction_tag='test_tag'; NEW_CONNECTION; - set max_commit_delay='9223372036854775807ns'; +set autocommit = false; + set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; -set max_commit_delay='9223372036854775807ns'; +set transaction_tag='test_tag'; NEW_CONNECTION; -set max_commit_delay='9223372036854775807ns' ; +set autocommit = false; +set transaction_tag='test_tag' ; NEW_CONNECTION; -set max_commit_delay='9223372036854775807ns' ; +set autocommit = false; +set transaction_tag='test_tag' ; NEW_CONNECTION; -set max_commit_delay='9223372036854775807ns' +set autocommit = false; +set transaction_tag='test_tag' ; NEW_CONNECTION; -set max_commit_delay='9223372036854775807ns'; +set autocommit = false; +set transaction_tag='test_tag'; NEW_CONNECTION; -set max_commit_delay='9223372036854775807ns'; +set autocommit = false; +set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; set -max_commit_delay='9223372036854775807ns'; +transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set max_commit_delay='9223372036854775807ns'; +foo set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns' bar; +set transaction_tag='test_tag' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set max_commit_delay='9223372036854775807ns'; +%set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'%; +set transaction_tag='test_tag'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%max_commit_delay='9223372036854775807ns'; +set%transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set max_commit_delay='9223372036854775807ns'; +_set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'_; +set transaction_tag='test_tag'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_max_commit_delay='9223372036854775807ns'; +set_transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set max_commit_delay='9223372036854775807ns'; +&set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'&; +set transaction_tag='test_tag'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&max_commit_delay='9223372036854775807ns'; +set&transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set max_commit_delay='9223372036854775807ns'; +$set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'$; +set transaction_tag='test_tag'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$max_commit_delay='9223372036854775807ns'; +set$transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set max_commit_delay='9223372036854775807ns'; +@set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'@; +set transaction_tag='test_tag'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@max_commit_delay='9223372036854775807ns'; +set@transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set max_commit_delay='9223372036854775807ns'; +!set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'!; +set transaction_tag='test_tag'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!max_commit_delay='9223372036854775807ns'; +set!transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set max_commit_delay='9223372036854775807ns'; +*set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'*; +set transaction_tag='test_tag'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*max_commit_delay='9223372036854775807ns'; +set*transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set max_commit_delay='9223372036854775807ns'; +(set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'(; +set transaction_tag='test_tag'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(max_commit_delay='9223372036854775807ns'; +set(transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set max_commit_delay='9223372036854775807ns'; +)set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'); +set transaction_tag='test_tag'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)max_commit_delay='9223372036854775807ns'; +set)transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set max_commit_delay='9223372036854775807ns'; +-set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'-; +set transaction_tag='test_tag'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-max_commit_delay='9223372036854775807ns'; +set-transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set max_commit_delay='9223372036854775807ns'; ++set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'+; +set transaction_tag='test_tag'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+max_commit_delay='9223372036854775807ns'; +set+transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set max_commit_delay='9223372036854775807ns'; +-#set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'-#; +set transaction_tag='test_tag'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#max_commit_delay='9223372036854775807ns'; +set-#transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set max_commit_delay='9223372036854775807ns'; +/set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'/; +set transaction_tag='test_tag'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/max_commit_delay='9223372036854775807ns'; +set/transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set max_commit_delay='9223372036854775807ns'; +\set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'\; +set transaction_tag='test_tag'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\max_commit_delay='9223372036854775807ns'; +set\transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set max_commit_delay='9223372036854775807ns'; +?set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'?; +set transaction_tag='test_tag'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?max_commit_delay='9223372036854775807ns'; +set?transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set max_commit_delay='9223372036854775807ns'; +-/set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'-/; +set transaction_tag='test_tag'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/max_commit_delay='9223372036854775807ns'; +set-/transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set max_commit_delay='9223372036854775807ns'; +/#set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'/#; +set transaction_tag='test_tag'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#max_commit_delay='9223372036854775807ns'; +set/#transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set max_commit_delay='9223372036854775807ns'; +/-set transaction_tag='test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set max_commit_delay='9223372036854775807ns'/-; +set transaction_tag='test_tag'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-max_commit_delay='9223372036854775807ns'; +set/-transaction_tag='test_tag'; NEW_CONNECTION; -set statement_tag='tag1'; +set exclude_txn_from_change_streams = true; NEW_CONNECTION; -SET STATEMENT_TAG='TAG1'; +SET EXCLUDE_TXN_FROM_CHANGE_STREAMS = TRUE; NEW_CONNECTION; -set statement_tag='tag1'; +set exclude_txn_from_change_streams = true; NEW_CONNECTION; - set statement_tag='tag1'; + set exclude_txn_from_change_streams = true; NEW_CONNECTION; - set statement_tag='tag1'; + set exclude_txn_from_change_streams = true; NEW_CONNECTION; -set statement_tag='tag1'; +set exclude_txn_from_change_streams = true; NEW_CONNECTION; -set statement_tag='tag1' ; +set exclude_txn_from_change_streams = true ; NEW_CONNECTION; -set statement_tag='tag1' ; +set exclude_txn_from_change_streams = true ; NEW_CONNECTION; -set statement_tag='tag1' +set exclude_txn_from_change_streams = true ; NEW_CONNECTION; -set statement_tag='tag1'; +set exclude_txn_from_change_streams = true; NEW_CONNECTION; -set statement_tag='tag1'; +set exclude_txn_from_change_streams = true; NEW_CONNECTION; set -statement_tag='tag1'; +exclude_txn_from_change_streams += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_tag='tag1'; +foo set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1' bar; +set exclude_txn_from_change_streams = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_tag='tag1'; +%set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'%; +set exclude_txn_from_change_streams = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_tag='tag1'; +set exclude_txn_from_change_streams =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_tag='tag1'; +_set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'_; +set exclude_txn_from_change_streams = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_tag='tag1'; +set exclude_txn_from_change_streams =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_tag='tag1'; +&set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'&; +set exclude_txn_from_change_streams = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_tag='tag1'; +set exclude_txn_from_change_streams =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_tag='tag1'; +$set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'$; +set exclude_txn_from_change_streams = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_tag='tag1'; +set exclude_txn_from_change_streams =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_tag='tag1'; +@set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'@; +set exclude_txn_from_change_streams = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_tag='tag1'; +set exclude_txn_from_change_streams =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_tag='tag1'; +!set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'!; +set exclude_txn_from_change_streams = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_tag='tag1'; +set exclude_txn_from_change_streams =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_tag='tag1'; +*set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'*; +set exclude_txn_from_change_streams = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_tag='tag1'; +set exclude_txn_from_change_streams =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_tag='tag1'; +(set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'(; +set exclude_txn_from_change_streams = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_tag='tag1'; +set exclude_txn_from_change_streams =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_tag='tag1'; +)set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'); +set exclude_txn_from_change_streams = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_tag='tag1'; +set exclude_txn_from_change_streams =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_tag='tag1'; +-set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'-; +set exclude_txn_from_change_streams = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_tag='tag1'; +set exclude_txn_from_change_streams =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_tag='tag1'; ++set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'+; +set exclude_txn_from_change_streams = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_tag='tag1'; +set exclude_txn_from_change_streams =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_tag='tag1'; +-#set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'-#; +set exclude_txn_from_change_streams = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_tag='tag1'; +set exclude_txn_from_change_streams =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_tag='tag1'; +/set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'/; +set exclude_txn_from_change_streams = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_tag='tag1'; +set exclude_txn_from_change_streams =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_tag='tag1'; +\set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'\; +set exclude_txn_from_change_streams = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_tag='tag1'; +set exclude_txn_from_change_streams =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_tag='tag1'; +?set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'?; +set exclude_txn_from_change_streams = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_tag='tag1'; +set exclude_txn_from_change_streams =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_tag='tag1'; +-/set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'-/; +set exclude_txn_from_change_streams = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_tag='tag1'; +set exclude_txn_from_change_streams =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_tag='tag1'; +/#set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'/#; +set exclude_txn_from_change_streams = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_tag='tag1'; +set exclude_txn_from_change_streams =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_tag='tag1'; +/-set exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag1'/-; +set exclude_txn_from_change_streams = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_tag='tag1'; +set exclude_txn_from_change_streams =/-true; NEW_CONNECTION; -set statement_tag='tag2'; +set exclude_txn_from_change_streams = false; NEW_CONNECTION; -SET STATEMENT_TAG='TAG2'; +SET EXCLUDE_TXN_FROM_CHANGE_STREAMS = FALSE; NEW_CONNECTION; -set statement_tag='tag2'; +set exclude_txn_from_change_streams = false; NEW_CONNECTION; - set statement_tag='tag2'; + set exclude_txn_from_change_streams = false; NEW_CONNECTION; - set statement_tag='tag2'; + set exclude_txn_from_change_streams = false; NEW_CONNECTION; -set statement_tag='tag2'; +set exclude_txn_from_change_streams = false; NEW_CONNECTION; -set statement_tag='tag2' ; +set exclude_txn_from_change_streams = false ; NEW_CONNECTION; -set statement_tag='tag2' ; +set exclude_txn_from_change_streams = false ; NEW_CONNECTION; -set statement_tag='tag2' +set exclude_txn_from_change_streams = false ; NEW_CONNECTION; -set statement_tag='tag2'; +set exclude_txn_from_change_streams = false; NEW_CONNECTION; -set statement_tag='tag2'; +set exclude_txn_from_change_streams = false; NEW_CONNECTION; set -statement_tag='tag2'; +exclude_txn_from_change_streams += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_tag='tag2'; +foo set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2' bar; +set exclude_txn_from_change_streams = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_tag='tag2'; +%set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'%; +set exclude_txn_from_change_streams = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_tag='tag2'; +set exclude_txn_from_change_streams =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_tag='tag2'; +_set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'_; +set exclude_txn_from_change_streams = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_tag='tag2'; +set exclude_txn_from_change_streams =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_tag='tag2'; +&set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'&; +set exclude_txn_from_change_streams = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_tag='tag2'; +set exclude_txn_from_change_streams =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_tag='tag2'; +$set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'$; +set exclude_txn_from_change_streams = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_tag='tag2'; +set exclude_txn_from_change_streams =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_tag='tag2'; +@set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'@; +set exclude_txn_from_change_streams = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_tag='tag2'; +set exclude_txn_from_change_streams =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_tag='tag2'; +!set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'!; +set exclude_txn_from_change_streams = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_tag='tag2'; +set exclude_txn_from_change_streams =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_tag='tag2'; +*set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'*; +set exclude_txn_from_change_streams = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_tag='tag2'; +set exclude_txn_from_change_streams =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_tag='tag2'; +(set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'(; +set exclude_txn_from_change_streams = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_tag='tag2'; +set exclude_txn_from_change_streams =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_tag='tag2'; +)set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'); +set exclude_txn_from_change_streams = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_tag='tag2'; +set exclude_txn_from_change_streams =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_tag='tag2'; +-set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'-; +set exclude_txn_from_change_streams = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_tag='tag2'; +set exclude_txn_from_change_streams =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_tag='tag2'; ++set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'+; +set exclude_txn_from_change_streams = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_tag='tag2'; +set exclude_txn_from_change_streams =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_tag='tag2'; +-#set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'-#; +set exclude_txn_from_change_streams = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_tag='tag2'; +set exclude_txn_from_change_streams =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_tag='tag2'; +/set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'/; +set exclude_txn_from_change_streams = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_tag='tag2'; +set exclude_txn_from_change_streams =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_tag='tag2'; +\set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'\; +set exclude_txn_from_change_streams = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_tag='tag2'; +set exclude_txn_from_change_streams =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_tag='tag2'; +?set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'?; +set exclude_txn_from_change_streams = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_tag='tag2'; +set exclude_txn_from_change_streams =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_tag='tag2'; +-/set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'-/; +set exclude_txn_from_change_streams = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_tag='tag2'; +set exclude_txn_from_change_streams =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_tag='tag2'; +/#set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'/#; +set exclude_txn_from_change_streams = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_tag='tag2'; +set exclude_txn_from_change_streams =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_tag='tag2'; +/-set exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='tag2'/-; +set exclude_txn_from_change_streams = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_tag='tag2'; +set exclude_txn_from_change_streams =/-false; NEW_CONNECTION; -set statement_tag=''; +set rpc_priority='HIGH'; NEW_CONNECTION; -SET STATEMENT_TAG=''; +SET RPC_PRIORITY='HIGH'; NEW_CONNECTION; -set statement_tag=''; +set rpc_priority='high'; NEW_CONNECTION; - set statement_tag=''; + set rpc_priority='HIGH'; NEW_CONNECTION; - set statement_tag=''; + set rpc_priority='HIGH'; NEW_CONNECTION; -set statement_tag=''; +set rpc_priority='HIGH'; NEW_CONNECTION; -set statement_tag='' ; +set rpc_priority='HIGH' ; NEW_CONNECTION; -set statement_tag='' ; +set rpc_priority='HIGH' ; NEW_CONNECTION; -set statement_tag='' +set rpc_priority='HIGH' ; NEW_CONNECTION; -set statement_tag=''; +set rpc_priority='HIGH'; NEW_CONNECTION; -set statement_tag=''; +set rpc_priority='HIGH'; NEW_CONNECTION; set -statement_tag=''; +rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_tag=''; +foo set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='' bar; +set rpc_priority='HIGH' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_tag=''; +%set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''%; +set rpc_priority='HIGH'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_tag=''; +set%rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_tag=''; +_set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''_; +set rpc_priority='HIGH'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_tag=''; +set_rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_tag=''; +&set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''&; +set rpc_priority='HIGH'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_tag=''; +set&rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_tag=''; +$set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''$; +set rpc_priority='HIGH'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_tag=''; +set$rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_tag=''; +@set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''@; +set rpc_priority='HIGH'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_tag=''; +set@rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_tag=''; +!set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''!; +set rpc_priority='HIGH'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_tag=''; +set!rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_tag=''; +*set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''*; +set rpc_priority='HIGH'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_tag=''; +set*rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_tag=''; +(set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''(; +set rpc_priority='HIGH'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_tag=''; +set(rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_tag=''; +)set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''); +set rpc_priority='HIGH'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_tag=''; +set)rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_tag=''; +-set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''-; +set rpc_priority='HIGH'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_tag=''; +set-rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_tag=''; ++set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''+; +set rpc_priority='HIGH'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_tag=''; +set+rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_tag=''; +-#set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''-#; +set rpc_priority='HIGH'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_tag=''; +set-#rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_tag=''; +/set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''/; +set rpc_priority='HIGH'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_tag=''; +set/rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_tag=''; +\set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''\; +set rpc_priority='HIGH'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_tag=''; +set\rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_tag=''; +?set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''?; +set rpc_priority='HIGH'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_tag=''; +set?rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_tag=''; +-/set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''-/; +set rpc_priority='HIGH'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_tag=''; +set-/rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_tag=''; +/#set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''/#; +set rpc_priority='HIGH'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_tag=''; +set/#rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_tag=''; +/-set rpc_priority='HIGH'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag=''/-; +set rpc_priority='HIGH'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_tag=''; +set/-rpc_priority='HIGH'; NEW_CONNECTION; -set statement_tag='test_tag'; +set rpc_priority='MEDIUM'; NEW_CONNECTION; -SET STATEMENT_TAG='TEST_TAG'; +SET RPC_PRIORITY='MEDIUM'; NEW_CONNECTION; -set statement_tag='test_tag'; +set rpc_priority='medium'; NEW_CONNECTION; - set statement_tag='test_tag'; + set rpc_priority='MEDIUM'; NEW_CONNECTION; - set statement_tag='test_tag'; + set rpc_priority='MEDIUM'; NEW_CONNECTION; -set statement_tag='test_tag'; +set rpc_priority='MEDIUM'; NEW_CONNECTION; -set statement_tag='test_tag' ; +set rpc_priority='MEDIUM' ; NEW_CONNECTION; -set statement_tag='test_tag' ; +set rpc_priority='MEDIUM' ; NEW_CONNECTION; -set statement_tag='test_tag' +set rpc_priority='MEDIUM' ; NEW_CONNECTION; -set statement_tag='test_tag'; +set rpc_priority='MEDIUM'; NEW_CONNECTION; -set statement_tag='test_tag'; +set rpc_priority='MEDIUM'; NEW_CONNECTION; set -statement_tag='test_tag'; +rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_tag='test_tag'; +foo set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag' bar; +set rpc_priority='MEDIUM' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_tag='test_tag'; +%set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'%; +set rpc_priority='MEDIUM'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_tag='test_tag'; +set%rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_tag='test_tag'; +_set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'_; +set rpc_priority='MEDIUM'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_tag='test_tag'; +set_rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_tag='test_tag'; +&set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'&; +set rpc_priority='MEDIUM'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_tag='test_tag'; +set&rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_tag='test_tag'; +$set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'$; +set rpc_priority='MEDIUM'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_tag='test_tag'; +set$rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_tag='test_tag'; +@set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'@; +set rpc_priority='MEDIUM'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_tag='test_tag'; +set@rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_tag='test_tag'; +!set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'!; +set rpc_priority='MEDIUM'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_tag='test_tag'; +set!rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_tag='test_tag'; +*set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'*; +set rpc_priority='MEDIUM'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_tag='test_tag'; +set*rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_tag='test_tag'; +(set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'(; +set rpc_priority='MEDIUM'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_tag='test_tag'; +set(rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_tag='test_tag'; +)set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'); +set rpc_priority='MEDIUM'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_tag='test_tag'; +set)rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_tag='test_tag'; +-set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'-; +set rpc_priority='MEDIUM'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_tag='test_tag'; +set-rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_tag='test_tag'; ++set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'+; +set rpc_priority='MEDIUM'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_tag='test_tag'; +set+rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_tag='test_tag'; +-#set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'-#; +set rpc_priority='MEDIUM'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_tag='test_tag'; +set-#rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_tag='test_tag'; +/set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'/; +set rpc_priority='MEDIUM'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_tag='test_tag'; +set/rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_tag='test_tag'; +\set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'\; +set rpc_priority='MEDIUM'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_tag='test_tag'; +set\rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_tag='test_tag'; +?set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'?; +set rpc_priority='MEDIUM'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_tag='test_tag'; +set?rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_tag='test_tag'; +-/set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'-/; +set rpc_priority='MEDIUM'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_tag='test_tag'; +set-/rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_tag='test_tag'; +/#set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'/#; +set rpc_priority='MEDIUM'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_tag='test_tag'; +set/#rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_tag='test_tag'; +/-set rpc_priority='MEDIUM'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_tag='test_tag'/-; +set rpc_priority='MEDIUM'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_tag='test_tag'; +set/-rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1'; +set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION_TAG='TAG1'; +SET RPC_PRIORITY='LOW'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1'; +set rpc_priority='low'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag='tag1'; + set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag='tag1'; + set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1'; +set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1' ; +set rpc_priority='LOW' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1' ; +set rpc_priority='LOW' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1' +set rpc_priority='LOW' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1'; +set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag1'; +set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; set -transaction_tag='tag1'; +rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction_tag='tag1'; +foo set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1' bar; +set rpc_priority='LOW' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction_tag='tag1'; +%set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'%; +set rpc_priority='LOW'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%transaction_tag='tag1'; +set%rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction_tag='tag1'; +_set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'_; +set rpc_priority='LOW'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_transaction_tag='tag1'; +set_rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction_tag='tag1'; +&set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'&; +set rpc_priority='LOW'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&transaction_tag='tag1'; +set&rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction_tag='tag1'; +$set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'$; +set rpc_priority='LOW'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$transaction_tag='tag1'; +set$rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction_tag='tag1'; +@set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'@; +set rpc_priority='LOW'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@transaction_tag='tag1'; +set@rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction_tag='tag1'; +!set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'!; +set rpc_priority='LOW'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!transaction_tag='tag1'; +set!rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction_tag='tag1'; +*set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'*; +set rpc_priority='LOW'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*transaction_tag='tag1'; +set*rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction_tag='tag1'; +(set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'(; +set rpc_priority='LOW'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(transaction_tag='tag1'; +set(rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction_tag='tag1'; +)set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'); +set rpc_priority='LOW'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)transaction_tag='tag1'; +set)rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction_tag='tag1'; +-set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'-; +set rpc_priority='LOW'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-transaction_tag='tag1'; +set-rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction_tag='tag1'; ++set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'+; +set rpc_priority='LOW'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+transaction_tag='tag1'; +set+rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction_tag='tag1'; +-#set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'-#; +set rpc_priority='LOW'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#transaction_tag='tag1'; +set-#rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction_tag='tag1'; +/set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'/; +set rpc_priority='LOW'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/transaction_tag='tag1'; +set/rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction_tag='tag1'; +\set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'\; +set rpc_priority='LOW'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\transaction_tag='tag1'; +set\rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction_tag='tag1'; +?set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'?; +set rpc_priority='LOW'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?transaction_tag='tag1'; +set?rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction_tag='tag1'; +-/set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'-/; +set rpc_priority='LOW'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/transaction_tag='tag1'; +set-/rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction_tag='tag1'; +/#set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'/#; +set rpc_priority='LOW'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#transaction_tag='tag1'; +set/#rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction_tag='tag1'; +/-set rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag1'/-; +set rpc_priority='LOW'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-transaction_tag='tag1'; +set/-rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2'; +set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION_TAG='TAG2'; +SET RPC_PRIORITY='NULL'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2'; +set rpc_priority='null'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag='tag2'; + set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag='tag2'; + set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2'; +set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2' ; +set rpc_priority='NULL' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2' ; +set rpc_priority='NULL' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2' +set rpc_priority='NULL' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2'; +set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='tag2'; +set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; set -transaction_tag='tag2'; +rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction_tag='tag2'; +foo set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2' bar; +set rpc_priority='NULL' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction_tag='tag2'; +%set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'%; +set rpc_priority='NULL'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%transaction_tag='tag2'; +set%rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction_tag='tag2'; +_set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'_; +set rpc_priority='NULL'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_transaction_tag='tag2'; +set_rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction_tag='tag2'; +&set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'&; +set rpc_priority='NULL'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&transaction_tag='tag2'; +set&rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction_tag='tag2'; +$set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'$; +set rpc_priority='NULL'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$transaction_tag='tag2'; +set$rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction_tag='tag2'; +@set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'@; +set rpc_priority='NULL'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@transaction_tag='tag2'; +set@rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction_tag='tag2'; +!set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'!; +set rpc_priority='NULL'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!transaction_tag='tag2'; +set!rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction_tag='tag2'; +*set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'*; +set rpc_priority='NULL'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*transaction_tag='tag2'; +set*rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction_tag='tag2'; +(set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'(; +set rpc_priority='NULL'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(transaction_tag='tag2'; +set(rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction_tag='tag2'; +)set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'); +set rpc_priority='NULL'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)transaction_tag='tag2'; +set)rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction_tag='tag2'; +-set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'-; +set rpc_priority='NULL'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-transaction_tag='tag2'; +set-rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction_tag='tag2'; ++set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'+; +set rpc_priority='NULL'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+transaction_tag='tag2'; +set+rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction_tag='tag2'; +-#set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'-#; +set rpc_priority='NULL'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#transaction_tag='tag2'; +set-#rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction_tag='tag2'; +/set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'/; +set rpc_priority='NULL'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/transaction_tag='tag2'; +set/rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction_tag='tag2'; +\set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'\; +set rpc_priority='NULL'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\transaction_tag='tag2'; +set\rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction_tag='tag2'; +?set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'?; +set rpc_priority='NULL'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?transaction_tag='tag2'; +set?rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction_tag='tag2'; +-/set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'-/; +set rpc_priority='NULL'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/transaction_tag='tag2'; +set-/rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction_tag='tag2'; +/#set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'/#; +set rpc_priority='NULL'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#transaction_tag='tag2'; +set/#rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction_tag='tag2'; +/-set rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='tag2'/-; +set rpc_priority='NULL'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-transaction_tag='tag2'; +set/-rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag=''; +set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION_TAG=''; +SET SAVEPOINT_SUPPORT='ENABLED'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag=''; +set savepoint_support='enabled'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag=''; + set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag=''; + set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag=''; +set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='' ; +set savepoint_support='ENABLED' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='' ; +set savepoint_support='ENABLED' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='' +set savepoint_support='ENABLED' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag=''; +set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag=''; +set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; set -transaction_tag=''; +savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction_tag=''; +foo set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='' bar; +set savepoint_support='ENABLED' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction_tag=''; +%set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''%; +set savepoint_support='ENABLED'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%transaction_tag=''; +set%savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction_tag=''; +_set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''_; +set savepoint_support='ENABLED'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_transaction_tag=''; +set_savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction_tag=''; +&set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''&; +set savepoint_support='ENABLED'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&transaction_tag=''; +set&savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction_tag=''; +$set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''$; +set savepoint_support='ENABLED'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$transaction_tag=''; +set$savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction_tag=''; +@set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''@; +set savepoint_support='ENABLED'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@transaction_tag=''; +set@savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction_tag=''; +!set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''!; +set savepoint_support='ENABLED'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!transaction_tag=''; +set!savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction_tag=''; +*set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''*; +set savepoint_support='ENABLED'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*transaction_tag=''; +set*savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction_tag=''; +(set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''(; +set savepoint_support='ENABLED'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(transaction_tag=''; +set(savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction_tag=''; +)set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''); +set savepoint_support='ENABLED'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)transaction_tag=''; +set)savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction_tag=''; +-set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''-; +set savepoint_support='ENABLED'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-transaction_tag=''; +set-savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction_tag=''; ++set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''+; +set savepoint_support='ENABLED'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+transaction_tag=''; +set+savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction_tag=''; +-#set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''-#; +set savepoint_support='ENABLED'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#transaction_tag=''; +set-#savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction_tag=''; +/set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''/; +set savepoint_support='ENABLED'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/transaction_tag=''; +set/savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction_tag=''; +\set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''\; +set savepoint_support='ENABLED'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\transaction_tag=''; +set\savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction_tag=''; +?set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''?; +set savepoint_support='ENABLED'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?transaction_tag=''; +set?savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction_tag=''; +-/set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''-/; +set savepoint_support='ENABLED'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/transaction_tag=''; +set-/savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction_tag=''; +/#set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''/#; +set savepoint_support='ENABLED'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#transaction_tag=''; +set/#savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction_tag=''; +/-set savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag=''/-; +set savepoint_support='ENABLED'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-transaction_tag=''; +set/-savepoint_support='ENABLED'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag'; +set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION_TAG='TEST_TAG'; +SET SAVEPOINT_SUPPORT='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag'; +set savepoint_support='fail_after_rollback'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag='test_tag'; + set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; - set transaction_tag='test_tag'; + set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag'; +set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag' ; +set savepoint_support='FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag' ; +set savepoint_support='FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag' +set savepoint_support='FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag'; +set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; -set transaction_tag='test_tag'; +set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; set -transaction_tag='test_tag'; +savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction_tag='test_tag'; +foo set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag' bar; +set savepoint_support='FAIL_AFTER_ROLLBACK' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction_tag='test_tag'; +%set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'%; +set savepoint_support='FAIL_AFTER_ROLLBACK'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%transaction_tag='test_tag'; +set%savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction_tag='test_tag'; +_set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'_; +set savepoint_support='FAIL_AFTER_ROLLBACK'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_transaction_tag='test_tag'; +set_savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction_tag='test_tag'; +&set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'&; +set savepoint_support='FAIL_AFTER_ROLLBACK'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&transaction_tag='test_tag'; +set&savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction_tag='test_tag'; +$set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'$; +set savepoint_support='FAIL_AFTER_ROLLBACK'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$transaction_tag='test_tag'; +set$savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction_tag='test_tag'; +@set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'@; +set savepoint_support='FAIL_AFTER_ROLLBACK'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@transaction_tag='test_tag'; +set@savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction_tag='test_tag'; +!set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'!; +set savepoint_support='FAIL_AFTER_ROLLBACK'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!transaction_tag='test_tag'; +set!savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction_tag='test_tag'; +*set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'*; +set savepoint_support='FAIL_AFTER_ROLLBACK'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*transaction_tag='test_tag'; +set*savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction_tag='test_tag'; +(set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'(; +set savepoint_support='FAIL_AFTER_ROLLBACK'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(transaction_tag='test_tag'; +set(savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction_tag='test_tag'; +)set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'); +set savepoint_support='FAIL_AFTER_ROLLBACK'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)transaction_tag='test_tag'; +set)savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction_tag='test_tag'; +-set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'-; +set savepoint_support='FAIL_AFTER_ROLLBACK'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-transaction_tag='test_tag'; +set-savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction_tag='test_tag'; ++set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'+; +set savepoint_support='FAIL_AFTER_ROLLBACK'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+transaction_tag='test_tag'; +set+savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction_tag='test_tag'; +-#set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'-#; +set savepoint_support='FAIL_AFTER_ROLLBACK'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#transaction_tag='test_tag'; +set-#savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction_tag='test_tag'; +/set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'/; +set savepoint_support='FAIL_AFTER_ROLLBACK'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/transaction_tag='test_tag'; +set/savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction_tag='test_tag'; +\set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'\; +set savepoint_support='FAIL_AFTER_ROLLBACK'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\transaction_tag='test_tag'; +set\savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction_tag='test_tag'; +?set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'?; +set savepoint_support='FAIL_AFTER_ROLLBACK'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?transaction_tag='test_tag'; +set?savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction_tag='test_tag'; +-/set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'-/; +set savepoint_support='FAIL_AFTER_ROLLBACK'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/transaction_tag='test_tag'; +set-/savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction_tag='test_tag'; +/#set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'/#; +set savepoint_support='FAIL_AFTER_ROLLBACK'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#transaction_tag='test_tag'; +set/#savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction_tag='test_tag'; +/-set savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction_tag='test_tag'/-; +set savepoint_support='FAIL_AFTER_ROLLBACK'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-transaction_tag='test_tag'; +set/-savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set exclude_txn_from_change_streams = true; +set savepoint_support='DISABLED'; NEW_CONNECTION; -SET EXCLUDE_TXN_FROM_CHANGE_STREAMS = TRUE; +SET SAVEPOINT_SUPPORT='DISABLED'; NEW_CONNECTION; -set exclude_txn_from_change_streams = true; +set savepoint_support='disabled'; NEW_CONNECTION; - set exclude_txn_from_change_streams = true; + set savepoint_support='DISABLED'; NEW_CONNECTION; - set exclude_txn_from_change_streams = true; + set savepoint_support='DISABLED'; NEW_CONNECTION; -set exclude_txn_from_change_streams = true; +set savepoint_support='DISABLED'; NEW_CONNECTION; -set exclude_txn_from_change_streams = true ; +set savepoint_support='DISABLED' ; NEW_CONNECTION; -set exclude_txn_from_change_streams = true ; +set savepoint_support='DISABLED' ; NEW_CONNECTION; -set exclude_txn_from_change_streams = true +set savepoint_support='DISABLED' ; NEW_CONNECTION; -set exclude_txn_from_change_streams = true; +set savepoint_support='DISABLED'; NEW_CONNECTION; -set exclude_txn_from_change_streams = true; +set savepoint_support='DISABLED'; NEW_CONNECTION; set -exclude_txn_from_change_streams -= -true; +savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set exclude_txn_from_change_streams = true; +foo set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true bar; +set savepoint_support='DISABLED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set exclude_txn_from_change_streams = true; +%set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true%; +set savepoint_support='DISABLED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =%true; +set%savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set exclude_txn_from_change_streams = true; +_set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true_; +set savepoint_support='DISABLED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =_true; +set_savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set exclude_txn_from_change_streams = true; +&set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true&; +set savepoint_support='DISABLED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =&true; +set&savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set exclude_txn_from_change_streams = true; +$set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true$; +set savepoint_support='DISABLED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =$true; +set$savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set exclude_txn_from_change_streams = true; +@set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true@; +set savepoint_support='DISABLED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =@true; +set@savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set exclude_txn_from_change_streams = true; +!set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true!; +set savepoint_support='DISABLED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =!true; +set!savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set exclude_txn_from_change_streams = true; +*set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true*; +set savepoint_support='DISABLED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =*true; +set*savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set exclude_txn_from_change_streams = true; +(set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true(; +set savepoint_support='DISABLED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =(true; +set(savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set exclude_txn_from_change_streams = true; +)set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true); +set savepoint_support='DISABLED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =)true; +set)savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set exclude_txn_from_change_streams = true; +-set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true-; +set savepoint_support='DISABLED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =-true; +set-savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set exclude_txn_from_change_streams = true; ++set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true+; +set savepoint_support='DISABLED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =+true; +set+savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set exclude_txn_from_change_streams = true; +-#set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true-#; +set savepoint_support='DISABLED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =-#true; +set-#savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set exclude_txn_from_change_streams = true; +/set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true/; +set savepoint_support='DISABLED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =/true; +set/savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set exclude_txn_from_change_streams = true; +\set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true\; +set savepoint_support='DISABLED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =\true; +set\savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set exclude_txn_from_change_streams = true; +?set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true?; +set savepoint_support='DISABLED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =?true; +set?savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set exclude_txn_from_change_streams = true; +-/set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true-/; +set savepoint_support='DISABLED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =-/true; +set-/savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set exclude_txn_from_change_streams = true; +/#set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true/#; +set savepoint_support='DISABLED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =/#true; +set/#savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set exclude_txn_from_change_streams = true; +/-set savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = true/-; +set savepoint_support='DISABLED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =/-true; +set/-savepoint_support='DISABLED'; NEW_CONNECTION; -set exclude_txn_from_change_streams = false; +set delay_transaction_start_until_first_write = true; NEW_CONNECTION; -SET EXCLUDE_TXN_FROM_CHANGE_STREAMS = FALSE; +SET DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = TRUE; NEW_CONNECTION; -set exclude_txn_from_change_streams = false; +set delay_transaction_start_until_first_write = true; NEW_CONNECTION; - set exclude_txn_from_change_streams = false; + set delay_transaction_start_until_first_write = true; NEW_CONNECTION; - set exclude_txn_from_change_streams = false; + set delay_transaction_start_until_first_write = true; NEW_CONNECTION; -set exclude_txn_from_change_streams = false; +set delay_transaction_start_until_first_write = true; NEW_CONNECTION; -set exclude_txn_from_change_streams = false ; +set delay_transaction_start_until_first_write = true ; NEW_CONNECTION; -set exclude_txn_from_change_streams = false ; +set delay_transaction_start_until_first_write = true ; NEW_CONNECTION; -set exclude_txn_from_change_streams = false +set delay_transaction_start_until_first_write = true ; NEW_CONNECTION; -set exclude_txn_from_change_streams = false; +set delay_transaction_start_until_first_write = true; NEW_CONNECTION; -set exclude_txn_from_change_streams = false; +set delay_transaction_start_until_first_write = true; NEW_CONNECTION; set -exclude_txn_from_change_streams +delay_transaction_start_until_first_write = -false; +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set exclude_txn_from_change_streams = false; +foo set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false bar; +set delay_transaction_start_until_first_write = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set exclude_txn_from_change_streams = false; +%set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false%; +set delay_transaction_start_until_first_write = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =%false; +set delay_transaction_start_until_first_write =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set exclude_txn_from_change_streams = false; +_set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false_; +set delay_transaction_start_until_first_write = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =_false; +set delay_transaction_start_until_first_write =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set exclude_txn_from_change_streams = false; +&set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false&; +set delay_transaction_start_until_first_write = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =&false; +set delay_transaction_start_until_first_write =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set exclude_txn_from_change_streams = false; +$set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false$; +set delay_transaction_start_until_first_write = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =$false; +set delay_transaction_start_until_first_write =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set exclude_txn_from_change_streams = false; +@set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false@; +set delay_transaction_start_until_first_write = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =@false; +set delay_transaction_start_until_first_write =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set exclude_txn_from_change_streams = false; +!set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false!; +set delay_transaction_start_until_first_write = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =!false; +set delay_transaction_start_until_first_write =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set exclude_txn_from_change_streams = false; +*set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false*; +set delay_transaction_start_until_first_write = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =*false; +set delay_transaction_start_until_first_write =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set exclude_txn_from_change_streams = false; +(set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false(; +set delay_transaction_start_until_first_write = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =(false; +set delay_transaction_start_until_first_write =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set exclude_txn_from_change_streams = false; +)set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false); +set delay_transaction_start_until_first_write = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =)false; +set delay_transaction_start_until_first_write =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set exclude_txn_from_change_streams = false; +-set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false-; +set delay_transaction_start_until_first_write = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =-false; +set delay_transaction_start_until_first_write =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set exclude_txn_from_change_streams = false; ++set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false+; +set delay_transaction_start_until_first_write = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =+false; +set delay_transaction_start_until_first_write =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set exclude_txn_from_change_streams = false; +-#set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false-#; +set delay_transaction_start_until_first_write = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =-#false; +set delay_transaction_start_until_first_write =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set exclude_txn_from_change_streams = false; +/set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false/; +set delay_transaction_start_until_first_write = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =/false; +set delay_transaction_start_until_first_write =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set exclude_txn_from_change_streams = false; +\set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false\; +set delay_transaction_start_until_first_write = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =\false; +set delay_transaction_start_until_first_write =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set exclude_txn_from_change_streams = false; +?set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false?; +set delay_transaction_start_until_first_write = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =?false; +set delay_transaction_start_until_first_write =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set exclude_txn_from_change_streams = false; +-/set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false-/; +set delay_transaction_start_until_first_write = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =-/false; +set delay_transaction_start_until_first_write =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set exclude_txn_from_change_streams = false; +/#set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false/#; +set delay_transaction_start_until_first_write = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =/#false; +set delay_transaction_start_until_first_write =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set exclude_txn_from_change_streams = false; +/-set delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams = false/-; +set delay_transaction_start_until_first_write = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set exclude_txn_from_change_streams =/-false; +set delay_transaction_start_until_first_write =/-true; NEW_CONNECTION; -set rpc_priority='HIGH'; +set delay_transaction_start_until_first_write = false; NEW_CONNECTION; -SET RPC_PRIORITY='HIGH'; +SET DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = FALSE; NEW_CONNECTION; -set rpc_priority='high'; +set delay_transaction_start_until_first_write = false; NEW_CONNECTION; - set rpc_priority='HIGH'; + set delay_transaction_start_until_first_write = false; NEW_CONNECTION; - set rpc_priority='HIGH'; + set delay_transaction_start_until_first_write = false; NEW_CONNECTION; -set rpc_priority='HIGH'; +set delay_transaction_start_until_first_write = false; NEW_CONNECTION; -set rpc_priority='HIGH' ; +set delay_transaction_start_until_first_write = false ; NEW_CONNECTION; -set rpc_priority='HIGH' ; +set delay_transaction_start_until_first_write = false ; NEW_CONNECTION; -set rpc_priority='HIGH' +set delay_transaction_start_until_first_write = false ; NEW_CONNECTION; -set rpc_priority='HIGH'; +set delay_transaction_start_until_first_write = false; NEW_CONNECTION; -set rpc_priority='HIGH'; +set delay_transaction_start_until_first_write = false; NEW_CONNECTION; set -rpc_priority='HIGH'; +delay_transaction_start_until_first_write += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set rpc_priority='HIGH'; +foo set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH' bar; +set delay_transaction_start_until_first_write = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set rpc_priority='HIGH'; +%set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'%; +set delay_transaction_start_until_first_write = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set rpc_priority='HIGH'; +_set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'_; +set delay_transaction_start_until_first_write = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set rpc_priority='HIGH'; +&set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'&; +set delay_transaction_start_until_first_write = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set rpc_priority='HIGH'; +$set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'$; +set delay_transaction_start_until_first_write = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set rpc_priority='HIGH'; +@set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'@; +set delay_transaction_start_until_first_write = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set rpc_priority='HIGH'; +!set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'!; +set delay_transaction_start_until_first_write = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set rpc_priority='HIGH'; +*set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'*; +set delay_transaction_start_until_first_write = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set rpc_priority='HIGH'; +(set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'(; +set delay_transaction_start_until_first_write = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set rpc_priority='HIGH'; +)set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'); +set delay_transaction_start_until_first_write = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set rpc_priority='HIGH'; +-set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'-; +set delay_transaction_start_until_first_write = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set rpc_priority='HIGH'; ++set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'+; +set delay_transaction_start_until_first_write = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set rpc_priority='HIGH'; +-#set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'-#; +set delay_transaction_start_until_first_write = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set rpc_priority='HIGH'; +/set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'/; +set delay_transaction_start_until_first_write = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set rpc_priority='HIGH'; +\set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'\; +set delay_transaction_start_until_first_write = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set rpc_priority='HIGH'; +?set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'?; +set delay_transaction_start_until_first_write = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set rpc_priority='HIGH'; +-/set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'-/; +set delay_transaction_start_until_first_write = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set rpc_priority='HIGH'; +/#set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'/#; +set delay_transaction_start_until_first_write = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set rpc_priority='HIGH'; +/-set delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='HIGH'/-; +set delay_transaction_start_until_first_write = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-rpc_priority='HIGH'; +set delay_transaction_start_until_first_write =/-false; NEW_CONNECTION; -set rpc_priority='MEDIUM'; +set keep_transaction_alive = true; NEW_CONNECTION; -SET RPC_PRIORITY='MEDIUM'; +SET KEEP_TRANSACTION_ALIVE = TRUE; NEW_CONNECTION; -set rpc_priority='medium'; +set keep_transaction_alive = true; NEW_CONNECTION; - set rpc_priority='MEDIUM'; + set keep_transaction_alive = true; NEW_CONNECTION; - set rpc_priority='MEDIUM'; + set keep_transaction_alive = true; NEW_CONNECTION; -set rpc_priority='MEDIUM'; +set keep_transaction_alive = true; NEW_CONNECTION; -set rpc_priority='MEDIUM' ; +set keep_transaction_alive = true ; NEW_CONNECTION; -set rpc_priority='MEDIUM' ; +set keep_transaction_alive = true ; NEW_CONNECTION; -set rpc_priority='MEDIUM' +set keep_transaction_alive = true ; NEW_CONNECTION; -set rpc_priority='MEDIUM'; +set keep_transaction_alive = true; NEW_CONNECTION; -set rpc_priority='MEDIUM'; +set keep_transaction_alive = true; NEW_CONNECTION; set -rpc_priority='MEDIUM'; +keep_transaction_alive += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set rpc_priority='MEDIUM'; +foo set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM' bar; +set keep_transaction_alive = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set rpc_priority='MEDIUM'; +%set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'%; +set keep_transaction_alive = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%rpc_priority='MEDIUM'; +set keep_transaction_alive =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set rpc_priority='MEDIUM'; +_set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'_; +set keep_transaction_alive = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_rpc_priority='MEDIUM'; +set keep_transaction_alive =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set rpc_priority='MEDIUM'; +&set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'&; +set keep_transaction_alive = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&rpc_priority='MEDIUM'; +set keep_transaction_alive =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set rpc_priority='MEDIUM'; +$set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'$; +set keep_transaction_alive = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$rpc_priority='MEDIUM'; +set keep_transaction_alive =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set rpc_priority='MEDIUM'; +@set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'@; +set keep_transaction_alive = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@rpc_priority='MEDIUM'; +set keep_transaction_alive =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set rpc_priority='MEDIUM'; +!set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'!; +set keep_transaction_alive = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!rpc_priority='MEDIUM'; +set keep_transaction_alive =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set rpc_priority='MEDIUM'; +*set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'*; +set keep_transaction_alive = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*rpc_priority='MEDIUM'; +set keep_transaction_alive =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set rpc_priority='MEDIUM'; +(set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'(; +set keep_transaction_alive = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(rpc_priority='MEDIUM'; +set keep_transaction_alive =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set rpc_priority='MEDIUM'; +)set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'); +set keep_transaction_alive = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)rpc_priority='MEDIUM'; +set keep_transaction_alive =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set rpc_priority='MEDIUM'; +-set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'-; +set keep_transaction_alive = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-rpc_priority='MEDIUM'; +set keep_transaction_alive =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set rpc_priority='MEDIUM'; ++set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'+; +set keep_transaction_alive = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+rpc_priority='MEDIUM'; +set keep_transaction_alive =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set rpc_priority='MEDIUM'; +-#set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'-#; +set keep_transaction_alive = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#rpc_priority='MEDIUM'; +set keep_transaction_alive =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set rpc_priority='MEDIUM'; +/set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'/; +set keep_transaction_alive = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/rpc_priority='MEDIUM'; +set keep_transaction_alive =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set rpc_priority='MEDIUM'; +\set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'\; +set keep_transaction_alive = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\rpc_priority='MEDIUM'; +set keep_transaction_alive =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set rpc_priority='MEDIUM'; +?set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'?; +set keep_transaction_alive = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?rpc_priority='MEDIUM'; +set keep_transaction_alive =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set rpc_priority='MEDIUM'; +-/set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'-/; +set keep_transaction_alive = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/rpc_priority='MEDIUM'; +set keep_transaction_alive =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set rpc_priority='MEDIUM'; +/#set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'/#; +set keep_transaction_alive = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#rpc_priority='MEDIUM'; +set keep_transaction_alive =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set rpc_priority='MEDIUM'; +/-set keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='MEDIUM'/-; +set keep_transaction_alive = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-rpc_priority='MEDIUM'; +set keep_transaction_alive =/-true; NEW_CONNECTION; -set rpc_priority='LOW'; +set keep_transaction_alive = false; NEW_CONNECTION; -SET RPC_PRIORITY='LOW'; +SET KEEP_TRANSACTION_ALIVE = FALSE; NEW_CONNECTION; -set rpc_priority='low'; +set keep_transaction_alive = false; NEW_CONNECTION; - set rpc_priority='LOW'; + set keep_transaction_alive = false; NEW_CONNECTION; - set rpc_priority='LOW'; + set keep_transaction_alive = false; NEW_CONNECTION; -set rpc_priority='LOW'; +set keep_transaction_alive = false; NEW_CONNECTION; -set rpc_priority='LOW' ; +set keep_transaction_alive = false ; NEW_CONNECTION; -set rpc_priority='LOW' ; +set keep_transaction_alive = false ; NEW_CONNECTION; -set rpc_priority='LOW' +set keep_transaction_alive = false ; NEW_CONNECTION; -set rpc_priority='LOW'; +set keep_transaction_alive = false; NEW_CONNECTION; -set rpc_priority='LOW'; +set keep_transaction_alive = false; NEW_CONNECTION; set -rpc_priority='LOW'; +keep_transaction_alive += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set rpc_priority='LOW'; +foo set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW' bar; +set keep_transaction_alive = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set rpc_priority='LOW'; +%set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'%; +set keep_transaction_alive = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%rpc_priority='LOW'; +set keep_transaction_alive =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set rpc_priority='LOW'; +_set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'_; +set keep_transaction_alive = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_rpc_priority='LOW'; +set keep_transaction_alive =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set rpc_priority='LOW'; +&set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'&; +set keep_transaction_alive = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&rpc_priority='LOW'; +set keep_transaction_alive =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set rpc_priority='LOW'; +$set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'$; +set keep_transaction_alive = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$rpc_priority='LOW'; +set keep_transaction_alive =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set rpc_priority='LOW'; +@set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'@; +set keep_transaction_alive = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@rpc_priority='LOW'; +set keep_transaction_alive =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set rpc_priority='LOW'; +!set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'!; +set keep_transaction_alive = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!rpc_priority='LOW'; +set keep_transaction_alive =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set rpc_priority='LOW'; +*set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'*; +set keep_transaction_alive = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*rpc_priority='LOW'; +set keep_transaction_alive =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set rpc_priority='LOW'; +(set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'(; +set keep_transaction_alive = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(rpc_priority='LOW'; +set keep_transaction_alive =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set rpc_priority='LOW'; +)set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'); +set keep_transaction_alive = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)rpc_priority='LOW'; +set keep_transaction_alive =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set rpc_priority='LOW'; +-set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'-; +set keep_transaction_alive = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-rpc_priority='LOW'; +set keep_transaction_alive =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set rpc_priority='LOW'; ++set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'+; +set keep_transaction_alive = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+rpc_priority='LOW'; +set keep_transaction_alive =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set rpc_priority='LOW'; +-#set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'-#; +set keep_transaction_alive = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#rpc_priority='LOW'; +set keep_transaction_alive =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set rpc_priority='LOW'; +/set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'/; +set keep_transaction_alive = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/rpc_priority='LOW'; +set keep_transaction_alive =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set rpc_priority='LOW'; +\set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'\; +set keep_transaction_alive = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\rpc_priority='LOW'; +set keep_transaction_alive =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set rpc_priority='LOW'; +?set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'?; +set keep_transaction_alive = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?rpc_priority='LOW'; +set keep_transaction_alive =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set rpc_priority='LOW'; +-/set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'-/; +set keep_transaction_alive = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/rpc_priority='LOW'; +set keep_transaction_alive =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set rpc_priority='LOW'; +/#set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'/#; +set keep_transaction_alive = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#rpc_priority='LOW'; +set keep_transaction_alive =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set rpc_priority='LOW'; +/-set keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='LOW'/-; +set keep_transaction_alive = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-rpc_priority='LOW'; +set keep_transaction_alive =/-false; NEW_CONNECTION; -set rpc_priority='NULL'; +set auto_batch_dml = true; NEW_CONNECTION; -SET RPC_PRIORITY='NULL'; +SET AUTO_BATCH_DML = TRUE; NEW_CONNECTION; -set rpc_priority='null'; +set auto_batch_dml = true; NEW_CONNECTION; - set rpc_priority='NULL'; + set auto_batch_dml = true; NEW_CONNECTION; - set rpc_priority='NULL'; + set auto_batch_dml = true; NEW_CONNECTION; -set rpc_priority='NULL'; +set auto_batch_dml = true; NEW_CONNECTION; -set rpc_priority='NULL' ; +set auto_batch_dml = true ; NEW_CONNECTION; -set rpc_priority='NULL' ; +set auto_batch_dml = true ; NEW_CONNECTION; -set rpc_priority='NULL' +set auto_batch_dml = true ; NEW_CONNECTION; -set rpc_priority='NULL'; +set auto_batch_dml = true; NEW_CONNECTION; -set rpc_priority='NULL'; +set auto_batch_dml = true; NEW_CONNECTION; set -rpc_priority='NULL'; +auto_batch_dml += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set rpc_priority='NULL'; +foo set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL' bar; +set auto_batch_dml = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set rpc_priority='NULL'; +%set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'%; +set auto_batch_dml = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%rpc_priority='NULL'; +set auto_batch_dml =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set rpc_priority='NULL'; +_set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'_; +set auto_batch_dml = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_rpc_priority='NULL'; +set auto_batch_dml =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set rpc_priority='NULL'; +&set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'&; +set auto_batch_dml = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&rpc_priority='NULL'; +set auto_batch_dml =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set rpc_priority='NULL'; +$set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'$; +set auto_batch_dml = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$rpc_priority='NULL'; +set auto_batch_dml =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set rpc_priority='NULL'; +@set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'@; +set auto_batch_dml = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@rpc_priority='NULL'; +set auto_batch_dml =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set rpc_priority='NULL'; +!set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'!; +set auto_batch_dml = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!rpc_priority='NULL'; +set auto_batch_dml =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set rpc_priority='NULL'; +*set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'*; +set auto_batch_dml = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*rpc_priority='NULL'; +set auto_batch_dml =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set rpc_priority='NULL'; +(set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'(; +set auto_batch_dml = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(rpc_priority='NULL'; +set auto_batch_dml =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set rpc_priority='NULL'; +)set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'); +set auto_batch_dml = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)rpc_priority='NULL'; +set auto_batch_dml =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set rpc_priority='NULL'; +-set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'-; +set auto_batch_dml = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-rpc_priority='NULL'; +set auto_batch_dml =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set rpc_priority='NULL'; ++set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'+; +set auto_batch_dml = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+rpc_priority='NULL'; +set auto_batch_dml =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set rpc_priority='NULL'; +-#set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'-#; +set auto_batch_dml = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#rpc_priority='NULL'; +set auto_batch_dml =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set rpc_priority='NULL'; +/set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'/; +set auto_batch_dml = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/rpc_priority='NULL'; +set auto_batch_dml =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set rpc_priority='NULL'; +\set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'\; +set auto_batch_dml = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\rpc_priority='NULL'; +set auto_batch_dml =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set rpc_priority='NULL'; +?set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'?; +set auto_batch_dml = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?rpc_priority='NULL'; +set auto_batch_dml =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set rpc_priority='NULL'; +-/set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'-/; +set auto_batch_dml = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/rpc_priority='NULL'; +set auto_batch_dml =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set rpc_priority='NULL'; +/#set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'/#; +set auto_batch_dml = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#rpc_priority='NULL'; +set auto_batch_dml =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set rpc_priority='NULL'; +/-set auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set rpc_priority='NULL'/-; +set auto_batch_dml = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-rpc_priority='NULL'; +set auto_batch_dml =/-true; NEW_CONNECTION; -set savepoint_support='ENABLED'; +set auto_batch_dml = false; NEW_CONNECTION; -SET SAVEPOINT_SUPPORT='ENABLED'; +SET AUTO_BATCH_DML = FALSE; NEW_CONNECTION; -set savepoint_support='enabled'; +set auto_batch_dml = false; NEW_CONNECTION; - set savepoint_support='ENABLED'; + set auto_batch_dml = false; NEW_CONNECTION; - set savepoint_support='ENABLED'; + set auto_batch_dml = false; NEW_CONNECTION; -set savepoint_support='ENABLED'; +set auto_batch_dml = false; NEW_CONNECTION; -set savepoint_support='ENABLED' ; +set auto_batch_dml = false ; NEW_CONNECTION; -set savepoint_support='ENABLED' ; +set auto_batch_dml = false ; NEW_CONNECTION; -set savepoint_support='ENABLED' +set auto_batch_dml = false ; NEW_CONNECTION; -set savepoint_support='ENABLED'; +set auto_batch_dml = false; NEW_CONNECTION; -set savepoint_support='ENABLED'; +set auto_batch_dml = false; NEW_CONNECTION; set -savepoint_support='ENABLED'; +auto_batch_dml += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set savepoint_support='ENABLED'; +foo set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED' bar; +set auto_batch_dml = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set savepoint_support='ENABLED'; +%set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'%; +set auto_batch_dml = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%savepoint_support='ENABLED'; +set auto_batch_dml =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set savepoint_support='ENABLED'; +_set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'_; +set auto_batch_dml = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_savepoint_support='ENABLED'; +set auto_batch_dml =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set savepoint_support='ENABLED'; +&set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'&; +set auto_batch_dml = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&savepoint_support='ENABLED'; +set auto_batch_dml =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set savepoint_support='ENABLED'; +$set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'$; +set auto_batch_dml = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$savepoint_support='ENABLED'; +set auto_batch_dml =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set savepoint_support='ENABLED'; +@set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'@; +set auto_batch_dml = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@savepoint_support='ENABLED'; +set auto_batch_dml =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set savepoint_support='ENABLED'; +!set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'!; +set auto_batch_dml = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!savepoint_support='ENABLED'; +set auto_batch_dml =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set savepoint_support='ENABLED'; +*set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'*; +set auto_batch_dml = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*savepoint_support='ENABLED'; +set auto_batch_dml =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set savepoint_support='ENABLED'; +(set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'(; +set auto_batch_dml = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(savepoint_support='ENABLED'; +set auto_batch_dml =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set savepoint_support='ENABLED'; +)set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'); +set auto_batch_dml = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)savepoint_support='ENABLED'; +set auto_batch_dml =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set savepoint_support='ENABLED'; +-set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'-; +set auto_batch_dml = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-savepoint_support='ENABLED'; +set auto_batch_dml =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set savepoint_support='ENABLED'; ++set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'+; +set auto_batch_dml = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+savepoint_support='ENABLED'; +set auto_batch_dml =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set savepoint_support='ENABLED'; +-#set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'-#; +set auto_batch_dml = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#savepoint_support='ENABLED'; +set auto_batch_dml =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set savepoint_support='ENABLED'; +/set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'/; +set auto_batch_dml = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/savepoint_support='ENABLED'; +set auto_batch_dml =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set savepoint_support='ENABLED'; +\set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'\; +set auto_batch_dml = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\savepoint_support='ENABLED'; +set auto_batch_dml =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set savepoint_support='ENABLED'; +?set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'?; +set auto_batch_dml = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?savepoint_support='ENABLED'; +set auto_batch_dml =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set savepoint_support='ENABLED'; +-/set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'-/; +set auto_batch_dml = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/savepoint_support='ENABLED'; +set auto_batch_dml =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set savepoint_support='ENABLED'; +/#set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'/#; +set auto_batch_dml = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#savepoint_support='ENABLED'; +set auto_batch_dml =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set savepoint_support='ENABLED'; +/-set auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='ENABLED'/-; +set auto_batch_dml = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-savepoint_support='ENABLED'; +set auto_batch_dml =/-false; NEW_CONNECTION; -set savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count = 0; NEW_CONNECTION; -SET SAVEPOINT_SUPPORT='FAIL_AFTER_ROLLBACK'; +SET AUTO_BATCH_DML_UPDATE_COUNT = 0; NEW_CONNECTION; -set savepoint_support='fail_after_rollback'; +set auto_batch_dml_update_count = 0; NEW_CONNECTION; - set savepoint_support='FAIL_AFTER_ROLLBACK'; + set auto_batch_dml_update_count = 0; NEW_CONNECTION; - set savepoint_support='FAIL_AFTER_ROLLBACK'; + set auto_batch_dml_update_count = 0; NEW_CONNECTION; -set savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count = 0; NEW_CONNECTION; -set savepoint_support='FAIL_AFTER_ROLLBACK' ; +set auto_batch_dml_update_count = 0 ; NEW_CONNECTION; -set savepoint_support='FAIL_AFTER_ROLLBACK' ; +set auto_batch_dml_update_count = 0 ; NEW_CONNECTION; -set savepoint_support='FAIL_AFTER_ROLLBACK' +set auto_batch_dml_update_count = 0 ; NEW_CONNECTION; -set savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count = 0; NEW_CONNECTION; -set savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count = 0; NEW_CONNECTION; set -savepoint_support='FAIL_AFTER_ROLLBACK'; +auto_batch_dml_update_count += +0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set savepoint_support='FAIL_AFTER_ROLLBACK'; +foo set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK' bar; +set auto_batch_dml_update_count = 0 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set savepoint_support='FAIL_AFTER_ROLLBACK'; +%set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'%; +set auto_batch_dml_update_count = 0%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =%0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set savepoint_support='FAIL_AFTER_ROLLBACK'; +_set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'_; +set auto_batch_dml_update_count = 0_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =_0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set savepoint_support='FAIL_AFTER_ROLLBACK'; +&set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'&; +set auto_batch_dml_update_count = 0&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =&0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set savepoint_support='FAIL_AFTER_ROLLBACK'; +$set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'$; +set auto_batch_dml_update_count = 0$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =$0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set savepoint_support='FAIL_AFTER_ROLLBACK'; +@set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'@; +set auto_batch_dml_update_count = 0@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =@0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set savepoint_support='FAIL_AFTER_ROLLBACK'; +!set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'!; +set auto_batch_dml_update_count = 0!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =!0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set savepoint_support='FAIL_AFTER_ROLLBACK'; +*set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'*; +set auto_batch_dml_update_count = 0*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =*0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set savepoint_support='FAIL_AFTER_ROLLBACK'; +(set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'(; +set auto_batch_dml_update_count = 0(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =(0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set savepoint_support='FAIL_AFTER_ROLLBACK'; +)set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'); +set auto_batch_dml_update_count = 0); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =)0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set savepoint_support='FAIL_AFTER_ROLLBACK'; +-set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'-; +set auto_batch_dml_update_count = 0-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =-0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set savepoint_support='FAIL_AFTER_ROLLBACK'; ++set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'+; +set auto_batch_dml_update_count = 0+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =+0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set savepoint_support='FAIL_AFTER_ROLLBACK'; +-#set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'-#; +set auto_batch_dml_update_count = 0-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =-#0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set savepoint_support='FAIL_AFTER_ROLLBACK'; +/set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'/; +set auto_batch_dml_update_count = 0/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =/0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set savepoint_support='FAIL_AFTER_ROLLBACK'; +\set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'\; +set auto_batch_dml_update_count = 0\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =\0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set savepoint_support='FAIL_AFTER_ROLLBACK'; +?set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'?; +set auto_batch_dml_update_count = 0?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =?0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set savepoint_support='FAIL_AFTER_ROLLBACK'; +-/set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'-/; +set auto_batch_dml_update_count = 0-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =-/0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set savepoint_support='FAIL_AFTER_ROLLBACK'; +/#set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'/#; +set auto_batch_dml_update_count = 0/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =/#0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set savepoint_support='FAIL_AFTER_ROLLBACK'; +/-set auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='FAIL_AFTER_ROLLBACK'/-; +set auto_batch_dml_update_count = 0/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-savepoint_support='FAIL_AFTER_ROLLBACK'; +set auto_batch_dml_update_count =/-0; NEW_CONNECTION; -set savepoint_support='DISABLED'; +set auto_batch_dml_update_count = 100; NEW_CONNECTION; -SET SAVEPOINT_SUPPORT='DISABLED'; +SET AUTO_BATCH_DML_UPDATE_COUNT = 100; NEW_CONNECTION; -set savepoint_support='disabled'; +set auto_batch_dml_update_count = 100; NEW_CONNECTION; - set savepoint_support='DISABLED'; + set auto_batch_dml_update_count = 100; NEW_CONNECTION; - set savepoint_support='DISABLED'; + set auto_batch_dml_update_count = 100; NEW_CONNECTION; -set savepoint_support='DISABLED'; +set auto_batch_dml_update_count = 100; NEW_CONNECTION; -set savepoint_support='DISABLED' ; +set auto_batch_dml_update_count = 100 ; NEW_CONNECTION; -set savepoint_support='DISABLED' ; +set auto_batch_dml_update_count = 100 ; NEW_CONNECTION; -set savepoint_support='DISABLED' +set auto_batch_dml_update_count = 100 ; NEW_CONNECTION; -set savepoint_support='DISABLED'; +set auto_batch_dml_update_count = 100; NEW_CONNECTION; -set savepoint_support='DISABLED'; +set auto_batch_dml_update_count = 100; NEW_CONNECTION; set -savepoint_support='DISABLED'; +auto_batch_dml_update_count += +100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set savepoint_support='DISABLED'; +foo set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED' bar; +set auto_batch_dml_update_count = 100 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set savepoint_support='DISABLED'; +%set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'%; +set auto_batch_dml_update_count = 100%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%savepoint_support='DISABLED'; +set auto_batch_dml_update_count =%100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set savepoint_support='DISABLED'; +_set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'_; +set auto_batch_dml_update_count = 100_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_savepoint_support='DISABLED'; +set auto_batch_dml_update_count =_100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set savepoint_support='DISABLED'; +&set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'&; +set auto_batch_dml_update_count = 100&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&savepoint_support='DISABLED'; +set auto_batch_dml_update_count =&100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set savepoint_support='DISABLED'; +$set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'$; +set auto_batch_dml_update_count = 100$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$savepoint_support='DISABLED'; +set auto_batch_dml_update_count =$100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set savepoint_support='DISABLED'; +@set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'@; +set auto_batch_dml_update_count = 100@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@savepoint_support='DISABLED'; +set auto_batch_dml_update_count =@100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set savepoint_support='DISABLED'; +!set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'!; +set auto_batch_dml_update_count = 100!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!savepoint_support='DISABLED'; +set auto_batch_dml_update_count =!100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set savepoint_support='DISABLED'; +*set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'*; +set auto_batch_dml_update_count = 100*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*savepoint_support='DISABLED'; +set auto_batch_dml_update_count =*100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set savepoint_support='DISABLED'; +(set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'(; +set auto_batch_dml_update_count = 100(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(savepoint_support='DISABLED'; +set auto_batch_dml_update_count =(100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set savepoint_support='DISABLED'; +)set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'); +set auto_batch_dml_update_count = 100); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)savepoint_support='DISABLED'; +set auto_batch_dml_update_count =)100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set savepoint_support='DISABLED'; +-set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'-; +set auto_batch_dml_update_count = 100-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-savepoint_support='DISABLED'; +set auto_batch_dml_update_count =-100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set savepoint_support='DISABLED'; ++set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'+; +set auto_batch_dml_update_count = 100+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+savepoint_support='DISABLED'; +set auto_batch_dml_update_count =+100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set savepoint_support='DISABLED'; +-#set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'-#; +set auto_batch_dml_update_count = 100-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#savepoint_support='DISABLED'; +set auto_batch_dml_update_count =-#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set savepoint_support='DISABLED'; +/set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'/; +set auto_batch_dml_update_count = 100/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/savepoint_support='DISABLED'; +set auto_batch_dml_update_count =/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set savepoint_support='DISABLED'; +\set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'\; +set auto_batch_dml_update_count = 100\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\savepoint_support='DISABLED'; +set auto_batch_dml_update_count =\100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set savepoint_support='DISABLED'; +?set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'?; +set auto_batch_dml_update_count = 100?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?savepoint_support='DISABLED'; +set auto_batch_dml_update_count =?100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set savepoint_support='DISABLED'; +-/set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'-/; +set auto_batch_dml_update_count = 100-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/savepoint_support='DISABLED'; +set auto_batch_dml_update_count =-/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set savepoint_support='DISABLED'; +/#set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'/#; +set auto_batch_dml_update_count = 100/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#savepoint_support='DISABLED'; +set auto_batch_dml_update_count =/#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set savepoint_support='DISABLED'; +/-set auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set savepoint_support='DISABLED'/-; +set auto_batch_dml_update_count = 100/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-savepoint_support='DISABLED'; +set auto_batch_dml_update_count =/-100; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true; +set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; -SET DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = TRUE; +SET AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = TRUE; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true; +set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; - set delay_transaction_start_until_first_write = true; + set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; - set delay_transaction_start_until_first_write = true; + set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true; +set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true ; +set auto_batch_dml_update_count_verification = true ; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true ; +set auto_batch_dml_update_count_verification = true ; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true +set auto_batch_dml_update_count_verification = true ; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true; +set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; -set delay_transaction_start_until_first_write = true; +set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; set -delay_transaction_start_until_first_write +auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set delay_transaction_start_until_first_write = true; +foo set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true bar; +set auto_batch_dml_update_count_verification = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set delay_transaction_start_until_first_write = true; +%set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true%; +set auto_batch_dml_update_count_verification = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =%true; +set auto_batch_dml_update_count_verification =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set delay_transaction_start_until_first_write = true; +_set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true_; +set auto_batch_dml_update_count_verification = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =_true; +set auto_batch_dml_update_count_verification =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set delay_transaction_start_until_first_write = true; +&set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true&; +set auto_batch_dml_update_count_verification = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =&true; +set auto_batch_dml_update_count_verification =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set delay_transaction_start_until_first_write = true; +$set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true$; +set auto_batch_dml_update_count_verification = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =$true; +set auto_batch_dml_update_count_verification =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set delay_transaction_start_until_first_write = true; +@set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true@; +set auto_batch_dml_update_count_verification = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =@true; +set auto_batch_dml_update_count_verification =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set delay_transaction_start_until_first_write = true; +!set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true!; +set auto_batch_dml_update_count_verification = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =!true; +set auto_batch_dml_update_count_verification =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set delay_transaction_start_until_first_write = true; +*set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true*; +set auto_batch_dml_update_count_verification = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =*true; +set auto_batch_dml_update_count_verification =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set delay_transaction_start_until_first_write = true; +(set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true(; +set auto_batch_dml_update_count_verification = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =(true; +set auto_batch_dml_update_count_verification =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set delay_transaction_start_until_first_write = true; +)set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true); +set auto_batch_dml_update_count_verification = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =)true; +set auto_batch_dml_update_count_verification =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set delay_transaction_start_until_first_write = true; +-set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true-; +set auto_batch_dml_update_count_verification = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =-true; +set auto_batch_dml_update_count_verification =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set delay_transaction_start_until_first_write = true; ++set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true+; +set auto_batch_dml_update_count_verification = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =+true; +set auto_batch_dml_update_count_verification =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set delay_transaction_start_until_first_write = true; +-#set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true-#; +set auto_batch_dml_update_count_verification = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =-#true; +set auto_batch_dml_update_count_verification =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set delay_transaction_start_until_first_write = true; +/set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true/; +set auto_batch_dml_update_count_verification = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =/true; +set auto_batch_dml_update_count_verification =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set delay_transaction_start_until_first_write = true; +\set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true\; +set auto_batch_dml_update_count_verification = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =\true; +set auto_batch_dml_update_count_verification =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set delay_transaction_start_until_first_write = true; +?set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true?; +set auto_batch_dml_update_count_verification = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =?true; +set auto_batch_dml_update_count_verification =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set delay_transaction_start_until_first_write = true; +-/set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true-/; +set auto_batch_dml_update_count_verification = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =-/true; +set auto_batch_dml_update_count_verification =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set delay_transaction_start_until_first_write = true; +/#set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true/#; +set auto_batch_dml_update_count_verification = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =/#true; +set auto_batch_dml_update_count_verification =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set delay_transaction_start_until_first_write = true; +/-set auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = true/-; +set auto_batch_dml_update_count_verification = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =/-true; +set auto_batch_dml_update_count_verification =/-true; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false; +set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; -SET DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = FALSE; +SET AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = FALSE; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false; +set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; - set delay_transaction_start_until_first_write = false; + set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; - set delay_transaction_start_until_first_write = false; + set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false; +set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false ; +set auto_batch_dml_update_count_verification = false ; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false ; +set auto_batch_dml_update_count_verification = false ; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false +set auto_batch_dml_update_count_verification = false ; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false; +set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; -set delay_transaction_start_until_first_write = false; +set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; set -delay_transaction_start_until_first_write +auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set delay_transaction_start_until_first_write = false; +foo set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false bar; +set auto_batch_dml_update_count_verification = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set delay_transaction_start_until_first_write = false; +%set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false%; +set auto_batch_dml_update_count_verification = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =%false; +set auto_batch_dml_update_count_verification =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set delay_transaction_start_until_first_write = false; +_set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false_; +set auto_batch_dml_update_count_verification = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =_false; +set auto_batch_dml_update_count_verification =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set delay_transaction_start_until_first_write = false; +&set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false&; +set auto_batch_dml_update_count_verification = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =&false; +set auto_batch_dml_update_count_verification =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set delay_transaction_start_until_first_write = false; +$set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false$; +set auto_batch_dml_update_count_verification = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =$false; +set auto_batch_dml_update_count_verification =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set delay_transaction_start_until_first_write = false; +@set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false@; +set auto_batch_dml_update_count_verification = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =@false; +set auto_batch_dml_update_count_verification =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set delay_transaction_start_until_first_write = false; +!set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false!; +set auto_batch_dml_update_count_verification = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =!false; +set auto_batch_dml_update_count_verification =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set delay_transaction_start_until_first_write = false; +*set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false*; +set auto_batch_dml_update_count_verification = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =*false; +set auto_batch_dml_update_count_verification =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set delay_transaction_start_until_first_write = false; +(set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false(; +set auto_batch_dml_update_count_verification = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =(false; +set auto_batch_dml_update_count_verification =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set delay_transaction_start_until_first_write = false; +)set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false); +set auto_batch_dml_update_count_verification = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =)false; +set auto_batch_dml_update_count_verification =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set delay_transaction_start_until_first_write = false; +-set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false-; +set auto_batch_dml_update_count_verification = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =-false; +set auto_batch_dml_update_count_verification =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set delay_transaction_start_until_first_write = false; ++set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false+; +set auto_batch_dml_update_count_verification = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =+false; +set auto_batch_dml_update_count_verification =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set delay_transaction_start_until_first_write = false; +-#set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false-#; +set auto_batch_dml_update_count_verification = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =-#false; +set auto_batch_dml_update_count_verification =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set delay_transaction_start_until_first_write = false; +/set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false/; +set auto_batch_dml_update_count_verification = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =/false; +set auto_batch_dml_update_count_verification =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set delay_transaction_start_until_first_write = false; +\set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false\; +set auto_batch_dml_update_count_verification = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =\false; +set auto_batch_dml_update_count_verification =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set delay_transaction_start_until_first_write = false; +?set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false?; +set auto_batch_dml_update_count_verification = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =?false; +set auto_batch_dml_update_count_verification =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set delay_transaction_start_until_first_write = false; +-/set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false-/; +set auto_batch_dml_update_count_verification = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =-/false; +set auto_batch_dml_update_count_verification =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set delay_transaction_start_until_first_write = false; +/#set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false/#; +set auto_batch_dml_update_count_verification = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =/#false; +set auto_batch_dml_update_count_verification =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set delay_transaction_start_until_first_write = false; +/-set auto_batch_dml_update_count_verification = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write = false/-; +set auto_batch_dml_update_count_verification = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set delay_transaction_start_until_first_write =/-false; +set auto_batch_dml_update_count_verification =/-false; NEW_CONNECTION; -set keep_transaction_alive = true; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 0; NEW_CONNECTION; -SET KEEP_TRANSACTION_ALIVE = TRUE; +set readonly = false; +set autocommit = false; +SET LOCAL BATCH_DML_UPDATE_COUNT = 0; NEW_CONNECTION; -set keep_transaction_alive = true; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 0; NEW_CONNECTION; - set keep_transaction_alive = true; +set readonly = false; +set autocommit = false; + set local batch_dml_update_count = 0; NEW_CONNECTION; - set keep_transaction_alive = true; +set readonly = false; +set autocommit = false; + set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; -set keep_transaction_alive = true; +set local batch_dml_update_count = 0; NEW_CONNECTION; -set keep_transaction_alive = true ; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 0 ; NEW_CONNECTION; -set keep_transaction_alive = true ; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 0 ; NEW_CONNECTION; -set keep_transaction_alive = true +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 0 ; NEW_CONNECTION; -set keep_transaction_alive = true; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 0; NEW_CONNECTION; -set keep_transaction_alive = true; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; set -keep_transaction_alive +local +batch_dml_update_count = -true; +0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set keep_transaction_alive = true; +foo set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true bar; +set local batch_dml_update_count = 0 bar; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set keep_transaction_alive = true; +%set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true%; +set local batch_dml_update_count = 0%; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =%true; +set local batch_dml_update_count =%0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set keep_transaction_alive = true; +_set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true_; +set local batch_dml_update_count = 0_; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =_true; +set local batch_dml_update_count =_0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set keep_transaction_alive = true; +&set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true&; +set local batch_dml_update_count = 0&; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =&true; +set local batch_dml_update_count =&0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set keep_transaction_alive = true; +$set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true$; +set local batch_dml_update_count = 0$; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =$true; +set local batch_dml_update_count =$0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set keep_transaction_alive = true; +@set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true@; +set local batch_dml_update_count = 0@; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =@true; +set local batch_dml_update_count =@0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set keep_transaction_alive = true; +!set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true!; +set local batch_dml_update_count = 0!; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =!true; +set local batch_dml_update_count =!0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set keep_transaction_alive = true; +*set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true*; +set local batch_dml_update_count = 0*; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =*true; +set local batch_dml_update_count =*0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set keep_transaction_alive = true; +(set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true(; +set local batch_dml_update_count = 0(; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =(true; +set local batch_dml_update_count =(0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set keep_transaction_alive = true; +)set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true); +set local batch_dml_update_count = 0); NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =)true; +set local batch_dml_update_count =)0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set keep_transaction_alive = true; +-set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true-; +set local batch_dml_update_count = 0-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =-true; +set local batch_dml_update_count =-0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set keep_transaction_alive = true; ++set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true+; +set local batch_dml_update_count = 0+; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =+true; +set local batch_dml_update_count =+0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set keep_transaction_alive = true; +-#set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true-#; +set local batch_dml_update_count = 0-#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =-#true; +set local batch_dml_update_count =-#0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set keep_transaction_alive = true; +/set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true/; +set local batch_dml_update_count = 0/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =/true; +set local batch_dml_update_count =/0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set keep_transaction_alive = true; +\set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true\; +set local batch_dml_update_count = 0\; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =\true; +set local batch_dml_update_count =\0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set keep_transaction_alive = true; +?set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true?; +set local batch_dml_update_count = 0?; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =?true; +set local batch_dml_update_count =?0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set keep_transaction_alive = true; +-/set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true-/; +set local batch_dml_update_count = 0-/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =-/true; +set local batch_dml_update_count =-/0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set keep_transaction_alive = true; +/#set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true/#; +set local batch_dml_update_count = 0/#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =/#true; +set local batch_dml_update_count =/#0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set keep_transaction_alive = true; +/-set local batch_dml_update_count = 0; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = true/-; +set local batch_dml_update_count = 0/-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =/-true; +set local batch_dml_update_count =/-0; NEW_CONNECTION; -set keep_transaction_alive = false; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 100; NEW_CONNECTION; -SET KEEP_TRANSACTION_ALIVE = FALSE; +set readonly = false; +set autocommit = false; +SET LOCAL BATCH_DML_UPDATE_COUNT = 100; NEW_CONNECTION; -set keep_transaction_alive = false; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 100; NEW_CONNECTION; - set keep_transaction_alive = false; +set readonly = false; +set autocommit = false; + set local batch_dml_update_count = 100; NEW_CONNECTION; - set keep_transaction_alive = false; +set readonly = false; +set autocommit = false; + set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; -set keep_transaction_alive = false; +set local batch_dml_update_count = 100; NEW_CONNECTION; -set keep_transaction_alive = false ; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 100 ; NEW_CONNECTION; -set keep_transaction_alive = false ; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 100 ; NEW_CONNECTION; -set keep_transaction_alive = false +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 100 ; NEW_CONNECTION; -set keep_transaction_alive = false; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 100; NEW_CONNECTION; -set keep_transaction_alive = false; +set readonly = false; +set autocommit = false; +set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; set -keep_transaction_alive +local +batch_dml_update_count = -false; +100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set keep_transaction_alive = false; +foo set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false bar; +set local batch_dml_update_count = 100 bar; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set keep_transaction_alive = false; +%set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false%; +set local batch_dml_update_count = 100%; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =%false; +set local batch_dml_update_count =%100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set keep_transaction_alive = false; +_set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false_; +set local batch_dml_update_count = 100_; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =_false; +set local batch_dml_update_count =_100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set keep_transaction_alive = false; +&set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false&; +set local batch_dml_update_count = 100&; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =&false; +set local batch_dml_update_count =&100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set keep_transaction_alive = false; +$set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false$; +set local batch_dml_update_count = 100$; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =$false; +set local batch_dml_update_count =$100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set keep_transaction_alive = false; +@set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false@; +set local batch_dml_update_count = 100@; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =@false; +set local batch_dml_update_count =@100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set keep_transaction_alive = false; +!set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false!; +set local batch_dml_update_count = 100!; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =!false; +set local batch_dml_update_count =!100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set keep_transaction_alive = false; +*set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false*; +set local batch_dml_update_count = 100*; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =*false; +set local batch_dml_update_count =*100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set keep_transaction_alive = false; +(set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false(; +set local batch_dml_update_count = 100(; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =(false; +set local batch_dml_update_count =(100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set keep_transaction_alive = false; +)set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false); +set local batch_dml_update_count = 100); NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =)false; +set local batch_dml_update_count =)100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set keep_transaction_alive = false; +-set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false-; +set local batch_dml_update_count = 100-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =-false; +set local batch_dml_update_count =-100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set keep_transaction_alive = false; ++set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false+; +set local batch_dml_update_count = 100+; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =+false; +set local batch_dml_update_count =+100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set keep_transaction_alive = false; +-#set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false-#; +set local batch_dml_update_count = 100-#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =-#false; +set local batch_dml_update_count =-#100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set keep_transaction_alive = false; +/set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false/; +set local batch_dml_update_count = 100/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =/false; +set local batch_dml_update_count =/100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set keep_transaction_alive = false; +\set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false\; +set local batch_dml_update_count = 100\; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =\false; +set local batch_dml_update_count =\100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set keep_transaction_alive = false; +?set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false?; +set local batch_dml_update_count = 100?; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =?false; +set local batch_dml_update_count =?100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set keep_transaction_alive = false; +-/set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false-/; +set local batch_dml_update_count = 100-/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =-/false; +set local batch_dml_update_count =-/100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set keep_transaction_alive = false; +/#set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false/#; +set local batch_dml_update_count = 100/#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =/#false; +set local batch_dml_update_count =/#100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set keep_transaction_alive = false; +/-set local batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive = false/-; +set local batch_dml_update_count = 100/-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set keep_transaction_alive =/-false; +set local batch_dml_update_count =/-100; NEW_CONNECTION; -set auto_batch_dml = true; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 1; NEW_CONNECTION; -SET AUTO_BATCH_DML = TRUE; +set readonly = false; +set autocommit = false; +SET BATCH_DML_UPDATE_COUNT = 1; NEW_CONNECTION; -set auto_batch_dml = true; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 1; NEW_CONNECTION; - set auto_batch_dml = true; +set readonly = false; +set autocommit = false; + set batch_dml_update_count = 1; NEW_CONNECTION; - set auto_batch_dml = true; +set readonly = false; +set autocommit = false; + set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; -set auto_batch_dml = true; +set batch_dml_update_count = 1; NEW_CONNECTION; -set auto_batch_dml = true ; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 1 ; NEW_CONNECTION; -set auto_batch_dml = true ; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 1 ; NEW_CONNECTION; -set auto_batch_dml = true +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 1 ; NEW_CONNECTION; -set auto_batch_dml = true; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 1; NEW_CONNECTION; -set auto_batch_dml = true; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; set -auto_batch_dml +batch_dml_update_count = -true; +1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set auto_batch_dml = true; +foo set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true bar; +set batch_dml_update_count = 1 bar; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set auto_batch_dml = true; +%set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true%; +set batch_dml_update_count = 1%; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =%true; +set batch_dml_update_count =%1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set auto_batch_dml = true; +_set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true_; +set batch_dml_update_count = 1_; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =_true; +set batch_dml_update_count =_1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set auto_batch_dml = true; +&set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true&; +set batch_dml_update_count = 1&; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =&true; +set batch_dml_update_count =&1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set auto_batch_dml = true; +$set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true$; +set batch_dml_update_count = 1$; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =$true; +set batch_dml_update_count =$1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set auto_batch_dml = true; +@set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true@; +set batch_dml_update_count = 1@; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =@true; +set batch_dml_update_count =@1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set auto_batch_dml = true; +!set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true!; +set batch_dml_update_count = 1!; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =!true; +set batch_dml_update_count =!1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set auto_batch_dml = true; +*set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true*; +set batch_dml_update_count = 1*; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =*true; +set batch_dml_update_count =*1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set auto_batch_dml = true; +(set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true(; +set batch_dml_update_count = 1(; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =(true; +set batch_dml_update_count =(1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set auto_batch_dml = true; +)set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true); +set batch_dml_update_count = 1); NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =)true; +set batch_dml_update_count =)1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set auto_batch_dml = true; +-set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true-; +set batch_dml_update_count = 1-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =-true; +set batch_dml_update_count =-1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set auto_batch_dml = true; ++set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true+; +set batch_dml_update_count = 1+; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =+true; +set batch_dml_update_count =+1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set auto_batch_dml = true; +-#set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true-#; +set batch_dml_update_count = 1-#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =-#true; +set batch_dml_update_count =-#1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set auto_batch_dml = true; +/set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true/; +set batch_dml_update_count = 1/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =/true; +set batch_dml_update_count =/1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set auto_batch_dml = true; +\set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true\; +set batch_dml_update_count = 1\; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =\true; +set batch_dml_update_count =\1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set auto_batch_dml = true; +?set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true?; +set batch_dml_update_count = 1?; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =?true; +set batch_dml_update_count =?1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set auto_batch_dml = true; +-/set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true-/; +set batch_dml_update_count = 1-/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =-/true; +set batch_dml_update_count =-/1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set auto_batch_dml = true; +/#set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true/#; +set batch_dml_update_count = 1/#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =/#true; +set batch_dml_update_count =/#1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set auto_batch_dml = true; +/-set batch_dml_update_count = 1; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = true/-; +set batch_dml_update_count = 1/-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =/-true; +set batch_dml_update_count =/-1; NEW_CONNECTION; -set auto_batch_dml = false; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 100; NEW_CONNECTION; -SET AUTO_BATCH_DML = FALSE; +set readonly = false; +set autocommit = false; +SET BATCH_DML_UPDATE_COUNT = 100; NEW_CONNECTION; -set auto_batch_dml = false; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 100; NEW_CONNECTION; - set auto_batch_dml = false; +set readonly = false; +set autocommit = false; + set batch_dml_update_count = 100; NEW_CONNECTION; - set auto_batch_dml = false; +set readonly = false; +set autocommit = false; + set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; -set auto_batch_dml = false; +set batch_dml_update_count = 100; NEW_CONNECTION; -set auto_batch_dml = false ; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 100 ; NEW_CONNECTION; -set auto_batch_dml = false ; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 100 ; NEW_CONNECTION; -set auto_batch_dml = false +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 100 ; NEW_CONNECTION; -set auto_batch_dml = false; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 100; NEW_CONNECTION; -set auto_batch_dml = false; +set readonly = false; +set autocommit = false; +set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; set -auto_batch_dml +batch_dml_update_count = -false; +100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set auto_batch_dml = false; +foo set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false bar; +set batch_dml_update_count = 100 bar; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set auto_batch_dml = false; +%set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false%; +set batch_dml_update_count = 100%; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =%false; +set batch_dml_update_count =%100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set auto_batch_dml = false; +_set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false_; +set batch_dml_update_count = 100_; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =_false; +set batch_dml_update_count =_100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set auto_batch_dml = false; +&set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false&; +set batch_dml_update_count = 100&; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =&false; +set batch_dml_update_count =&100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set auto_batch_dml = false; +$set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false$; +set batch_dml_update_count = 100$; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =$false; +set batch_dml_update_count =$100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set auto_batch_dml = false; +@set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false@; +set batch_dml_update_count = 100@; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =@false; +set batch_dml_update_count =@100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set auto_batch_dml = false; +!set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false!; +set batch_dml_update_count = 100!; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =!false; +set batch_dml_update_count =!100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set auto_batch_dml = false; +*set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false*; +set batch_dml_update_count = 100*; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =*false; +set batch_dml_update_count =*100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set auto_batch_dml = false; +(set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false(; +set batch_dml_update_count = 100(; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =(false; +set batch_dml_update_count =(100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set auto_batch_dml = false; +)set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false); +set batch_dml_update_count = 100); NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =)false; +set batch_dml_update_count =)100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set auto_batch_dml = false; +-set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false-; +set batch_dml_update_count = 100-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =-false; +set batch_dml_update_count =-100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set auto_batch_dml = false; ++set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false+; +set batch_dml_update_count = 100+; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =+false; +set batch_dml_update_count =+100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set auto_batch_dml = false; +-#set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false-#; +set batch_dml_update_count = 100-#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =-#false; +set batch_dml_update_count =-#100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set auto_batch_dml = false; +/set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false/; +set batch_dml_update_count = 100/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =/false; +set batch_dml_update_count =/100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set auto_batch_dml = false; +\set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false\; +set batch_dml_update_count = 100\; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =\false; +set batch_dml_update_count =\100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set auto_batch_dml = false; +?set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false?; +set batch_dml_update_count = 100?; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =?false; +set batch_dml_update_count =?100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set auto_batch_dml = false; +-/set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false-/; +set batch_dml_update_count = 100-/; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =-/false; +set batch_dml_update_count =-/100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set auto_batch_dml = false; +/#set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false/#; +set batch_dml_update_count = 100/#; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =/#false; +set batch_dml_update_count =/#100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set auto_batch_dml = false; +/-set batch_dml_update_count = 100; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml = false/-; +set batch_dml_update_count = 100/-; NEW_CONNECTION; +set readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml =/-false; +set batch_dml_update_count =/-100; NEW_CONNECTION; -set auto_batch_dml_update_count = 0; +show variable read_lock_mode; NEW_CONNECTION; -SET AUTO_BATCH_DML_UPDATE_COUNT = 0; +SHOW VARIABLE READ_LOCK_MODE; NEW_CONNECTION; -set auto_batch_dml_update_count = 0; +show variable read_lock_mode; NEW_CONNECTION; - set auto_batch_dml_update_count = 0; + show variable read_lock_mode; NEW_CONNECTION; - set auto_batch_dml_update_count = 0; + show variable read_lock_mode; NEW_CONNECTION; -set auto_batch_dml_update_count = 0; +show variable read_lock_mode; NEW_CONNECTION; -set auto_batch_dml_update_count = 0 ; +show variable read_lock_mode ; NEW_CONNECTION; -set auto_batch_dml_update_count = 0 ; +show variable read_lock_mode ; NEW_CONNECTION; -set auto_batch_dml_update_count = 0 +show variable read_lock_mode ; NEW_CONNECTION; -set auto_batch_dml_update_count = 0; -NEW_CONNECTION; -set auto_batch_dml_update_count = 0; -NEW_CONNECTION; -set -auto_batch_dml_update_count -= -0; -NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -foo set auto_batch_dml_update_count = 0; +show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0 bar; +show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -%set auto_batch_dml_update_count = 0; +show +variable +read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0%; +foo show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =%0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set auto_batch_dml_update_count = 0; +%show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0_; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =_0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set auto_batch_dml_update_count = 0; +_show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0&; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =&0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set auto_batch_dml_update_count = 0; +&show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0$; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =$0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set auto_batch_dml_update_count = 0; +$show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0@; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =@0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set auto_batch_dml_update_count = 0; +@show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0!; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =!0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set auto_batch_dml_update_count = 0; +!show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0*; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =*0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set auto_batch_dml_update_count = 0; +*show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0(; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =(0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set auto_batch_dml_update_count = 0; +(show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0); +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =)0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set auto_batch_dml_update_count = 0; +)show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0-; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =-0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set auto_batch_dml_update_count = 0; +-show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0+; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =+0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set auto_batch_dml_update_count = 0; ++show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0-#; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =-#0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set auto_batch_dml_update_count = 0; +-#show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0/; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =/0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set auto_batch_dml_update_count = 0; +/show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0\; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =\0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set auto_batch_dml_update_count = 0; +\show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0?; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =?0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set auto_batch_dml_update_count = 0; +?show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0-/; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =-/0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set auto_batch_dml_update_count = 0; +-/show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0/#; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =/#0; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set auto_batch_dml_update_count = 0; +/#show variable read_lock_mode; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 0/-; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#read_lock_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =/-0; +/-show variable read_lock_mode; NEW_CONNECTION; -set auto_batch_dml_update_count = 100; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode/-; NEW_CONNECTION; -SET AUTO_BATCH_DML_UPDATE_COUNT = 100; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-read_lock_mode; NEW_CONNECTION; -set auto_batch_dml_update_count = 100; +set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; - set auto_batch_dml_update_count = 100; +SET READ_LOCK_MODE='OPTIMISTIC'; NEW_CONNECTION; - set auto_batch_dml_update_count = 100; +set read_lock_mode='optimistic'; +NEW_CONNECTION; + set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; + set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count = 100; +set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count = 100 ; +set read_lock_mode='OPTIMISTIC' ; NEW_CONNECTION; -set auto_batch_dml_update_count = 100 ; +set read_lock_mode='OPTIMISTIC' ; NEW_CONNECTION; -set auto_batch_dml_update_count = 100 +set read_lock_mode='OPTIMISTIC' ; NEW_CONNECTION; -set auto_batch_dml_update_count = 100; +set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count = 100; +set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; set -auto_batch_dml_update_count -= -100; +read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set auto_batch_dml_update_count = 100; +foo set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100 bar; +set read_lock_mode='OPTIMISTIC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set auto_batch_dml_update_count = 100; +%set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100%; +set read_lock_mode='OPTIMISTIC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =%100; +set%read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set auto_batch_dml_update_count = 100; +_set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100_; +set read_lock_mode='OPTIMISTIC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =_100; +set_read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set auto_batch_dml_update_count = 100; +&set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100&; +set read_lock_mode='OPTIMISTIC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =&100; +set&read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set auto_batch_dml_update_count = 100; +$set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100$; +set read_lock_mode='OPTIMISTIC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =$100; +set$read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set auto_batch_dml_update_count = 100; +@set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100@; +set read_lock_mode='OPTIMISTIC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =@100; +set@read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set auto_batch_dml_update_count = 100; +!set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100!; +set read_lock_mode='OPTIMISTIC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =!100; +set!read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set auto_batch_dml_update_count = 100; +*set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100*; +set read_lock_mode='OPTIMISTIC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =*100; +set*read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set auto_batch_dml_update_count = 100; +(set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100(; +set read_lock_mode='OPTIMISTIC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =(100; +set(read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set auto_batch_dml_update_count = 100; +)set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100); +set read_lock_mode='OPTIMISTIC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =)100; +set)read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set auto_batch_dml_update_count = 100; +-set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100-; +set read_lock_mode='OPTIMISTIC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =-100; +set-read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set auto_batch_dml_update_count = 100; ++set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100+; +set read_lock_mode='OPTIMISTIC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =+100; +set+read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set auto_batch_dml_update_count = 100; +-#set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100-#; +set read_lock_mode='OPTIMISTIC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =-#100; +set-#read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set auto_batch_dml_update_count = 100; +/set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100/; +set read_lock_mode='OPTIMISTIC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =/100; +set/read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set auto_batch_dml_update_count = 100; +\set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100\; +set read_lock_mode='OPTIMISTIC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =\100; +set\read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set auto_batch_dml_update_count = 100; +?set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100?; +set read_lock_mode='OPTIMISTIC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =?100; +set?read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set auto_batch_dml_update_count = 100; +-/set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100-/; +set read_lock_mode='OPTIMISTIC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =-/100; +set-/read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set auto_batch_dml_update_count = 100; +/#set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100/#; +set read_lock_mode='OPTIMISTIC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =/#100; +set/#read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set auto_batch_dml_update_count = 100; +/-set read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count = 100/-; +set read_lock_mode='OPTIMISTIC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count =/-100; +set/-read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true; +set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -SET AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = TRUE; +SET READ_LOCK_MODE='PESSIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true; +set read_lock_mode='pessimistic'; NEW_CONNECTION; - set auto_batch_dml_update_count_verification = true; + set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; - set auto_batch_dml_update_count_verification = true; + set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true; +set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true ; +set read_lock_mode='PESSIMISTIC' ; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true ; +set read_lock_mode='PESSIMISTIC' ; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true +set read_lock_mode='PESSIMISTIC' ; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true; +set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = true; +set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; set -auto_batch_dml_update_count_verification -= -true; +read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set auto_batch_dml_update_count_verification = true; +foo set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true bar; +set read_lock_mode='PESSIMISTIC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set auto_batch_dml_update_count_verification = true; +%set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true%; +set read_lock_mode='PESSIMISTIC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =%true; +set%read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set auto_batch_dml_update_count_verification = true; +_set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true_; +set read_lock_mode='PESSIMISTIC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =_true; +set_read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set auto_batch_dml_update_count_verification = true; +&set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true&; +set read_lock_mode='PESSIMISTIC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =&true; +set&read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set auto_batch_dml_update_count_verification = true; +$set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true$; +set read_lock_mode='PESSIMISTIC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =$true; +set$read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set auto_batch_dml_update_count_verification = true; +@set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true@; +set read_lock_mode='PESSIMISTIC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =@true; +set@read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set auto_batch_dml_update_count_verification = true; +!set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true!; +set read_lock_mode='PESSIMISTIC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =!true; +set!read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set auto_batch_dml_update_count_verification = true; +*set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true*; +set read_lock_mode='PESSIMISTIC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =*true; +set*read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set auto_batch_dml_update_count_verification = true; +(set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true(; +set read_lock_mode='PESSIMISTIC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =(true; +set(read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set auto_batch_dml_update_count_verification = true; +)set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true); +set read_lock_mode='PESSIMISTIC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =)true; +set)read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set auto_batch_dml_update_count_verification = true; +-set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true-; +set read_lock_mode='PESSIMISTIC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =-true; +set-read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set auto_batch_dml_update_count_verification = true; ++set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true+; +set read_lock_mode='PESSIMISTIC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =+true; +set+read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set auto_batch_dml_update_count_verification = true; +-#set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true-#; +set read_lock_mode='PESSIMISTIC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =-#true; +set-#read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set auto_batch_dml_update_count_verification = true; +/set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true/; +set read_lock_mode='PESSIMISTIC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =/true; +set/read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set auto_batch_dml_update_count_verification = true; +\set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true\; +set read_lock_mode='PESSIMISTIC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =\true; +set\read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set auto_batch_dml_update_count_verification = true; +?set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true?; +set read_lock_mode='PESSIMISTIC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =?true; +set?read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set auto_batch_dml_update_count_verification = true; +-/set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true-/; +set read_lock_mode='PESSIMISTIC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =-/true; +set-/read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set auto_batch_dml_update_count_verification = true; +/#set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true/#; +set read_lock_mode='PESSIMISTIC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =/#true; +set/#read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set auto_batch_dml_update_count_verification = true; +/-set read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = true/-; +set read_lock_mode='PESSIMISTIC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =/-true; +set/-read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false; +set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -SET AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = FALSE; +SET READ_LOCK_MODE='UNSPECIFIED'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false; +set read_lock_mode='unspecified'; NEW_CONNECTION; - set auto_batch_dml_update_count_verification = false; + set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; - set auto_batch_dml_update_count_verification = false; + set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false; +set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false ; +set read_lock_mode='UNSPECIFIED' ; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false ; +set read_lock_mode='UNSPECIFIED' ; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false +set read_lock_mode='UNSPECIFIED' ; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false; +set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -set auto_batch_dml_update_count_verification = false; +set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; set -auto_batch_dml_update_count_verification -= -false; +read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set auto_batch_dml_update_count_verification = false; +foo set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false bar; +set read_lock_mode='UNSPECIFIED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set auto_batch_dml_update_count_verification = false; +%set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false%; +set read_lock_mode='UNSPECIFIED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =%false; +set%read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set auto_batch_dml_update_count_verification = false; +_set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false_; +set read_lock_mode='UNSPECIFIED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =_false; +set_read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set auto_batch_dml_update_count_verification = false; +&set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false&; +set read_lock_mode='UNSPECIFIED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =&false; +set&read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set auto_batch_dml_update_count_verification = false; +$set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false$; +set read_lock_mode='UNSPECIFIED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =$false; +set$read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set auto_batch_dml_update_count_verification = false; +@set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false@; +set read_lock_mode='UNSPECIFIED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =@false; +set@read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set auto_batch_dml_update_count_verification = false; +!set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false!; +set read_lock_mode='UNSPECIFIED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =!false; +set!read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set auto_batch_dml_update_count_verification = false; +*set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false*; +set read_lock_mode='UNSPECIFIED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =*false; +set*read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set auto_batch_dml_update_count_verification = false; +(set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false(; +set read_lock_mode='UNSPECIFIED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =(false; +set(read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set auto_batch_dml_update_count_verification = false; +)set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false); +set read_lock_mode='UNSPECIFIED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =)false; +set)read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set auto_batch_dml_update_count_verification = false; +-set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false-; +set read_lock_mode='UNSPECIFIED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =-false; +set-read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set auto_batch_dml_update_count_verification = false; ++set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false+; +set read_lock_mode='UNSPECIFIED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =+false; +set+read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set auto_batch_dml_update_count_verification = false; +-#set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false-#; +set read_lock_mode='UNSPECIFIED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =-#false; +set-#read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set auto_batch_dml_update_count_verification = false; +/set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false/; +set read_lock_mode='UNSPECIFIED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =/false; +set/read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set auto_batch_dml_update_count_verification = false; +\set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false\; +set read_lock_mode='UNSPECIFIED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =\false; +set\read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set auto_batch_dml_update_count_verification = false; +?set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false?; +set read_lock_mode='UNSPECIFIED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =?false; +set?read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set auto_batch_dml_update_count_verification = false; +-/set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false-/; +set read_lock_mode='UNSPECIFIED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =-/false; +set-/read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set auto_batch_dml_update_count_verification = false; +/#set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false/#; +set read_lock_mode='UNSPECIFIED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =/#false; +set/#read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set auto_batch_dml_update_count_verification = false; +/-set read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification = false/-; +set read_lock_mode='UNSPECIFIED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set auto_batch_dml_update_count_verification =/-false; +set/-read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; show variable data_boost_enabled; NEW_CONNECTION; diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql index 5dcf6577d5b..68c9297298f 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql @@ -160,15 +160,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.280000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.280000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:17.951000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:17.951000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.280000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:17.951000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -261,7 +261,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -271,7 +270,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -281,7 +279,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -291,7 +288,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -510,15 +506,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.405000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.405000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.067000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.067000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.405000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.067000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -611,7 +607,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -621,7 +616,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -631,7 +625,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -641,7 +634,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -950,8 +942,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.518000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.518000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.165000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.165000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -961,7 +953,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.518000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.165000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1096,7 +1088,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1106,7 +1097,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1116,7 +1106,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1126,7 +1115,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1462,8 +1450,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.636000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.636000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.265000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.265000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -1473,7 +1461,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.636000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.265000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1608,7 +1596,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1618,7 +1605,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1628,7 +1614,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1638,7 +1623,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1876,15 +1860,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.733000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.733000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.347000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.347000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.733000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.347000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1977,7 +1961,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1987,7 +1970,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1997,7 +1979,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2007,7 +1988,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2243,14 +2223,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.812000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.418000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.812000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.418000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2355,7 +2335,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2365,7 +2344,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2375,7 +2353,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2385,7 +2362,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2600,13 +2576,13 @@ SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.901000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.495000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.901000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.495000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2697,7 +2673,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2707,7 +2682,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2717,7 +2691,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2727,7 +2700,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2910,14 +2882,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.978000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.978000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.566000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.566000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.978000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.566000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2996,7 +2968,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3006,7 +2977,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3016,7 +2986,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3026,7 +2995,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3245,15 +3213,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.078000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.078000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.639000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.639000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.078000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.639000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3346,7 +3314,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3356,7 +3323,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3366,7 +3332,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3376,7 +3341,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3662,8 +3626,8 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.149000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.149000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.697000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.697000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -3672,7 +3636,7 @@ START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.149000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.697000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3793,7 +3757,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3803,7 +3766,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3813,7 +3775,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3823,7 +3784,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4081,14 +4041,14 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.223000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.757000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.223000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.757000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4193,7 +4153,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4203,7 +4162,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4213,7 +4171,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4223,7 +4180,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4438,13 +4394,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.284000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.811000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.284000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.811000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4535,7 +4491,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4545,7 +4500,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4555,7 +4509,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4565,7 +4518,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4877,8 +4829,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.349000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.349000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.864000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.864000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -4888,7 +4840,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.349000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.864000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5023,7 +4975,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5033,7 +4984,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5043,7 +4993,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5053,7 +5002,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5288,15 +5236,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.424000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.424000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.923000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.923000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.424000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.923000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5389,7 +5337,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5399,7 +5346,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5409,7 +5355,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5419,7 +5364,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5641,15 +5585,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.488000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.488000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.973000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.973000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.488000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.973000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5742,7 +5686,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5752,7 +5695,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5762,7 +5704,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5772,7 +5713,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6088,8 +6028,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.558000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.558000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.027000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.027000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6099,7 +6039,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.558000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.027000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6234,7 +6174,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6244,7 +6183,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6254,7 +6192,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6264,7 +6201,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6607,8 +6543,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.646000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.646000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.098000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.098000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6618,7 +6554,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.646000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.098000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6753,7 +6689,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6763,7 +6698,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6773,7 +6707,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6783,7 +6716,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7023,15 +6955,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.725000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.725000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.162000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.162000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.725000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.162000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7124,7 +7056,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7134,7 +7065,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7144,7 +7074,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7154,7 +7083,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7394,14 +7322,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.790000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.214000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.790000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.214000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7506,7 +7434,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7516,7 +7443,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7526,7 +7452,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7536,7 +7461,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7756,13 +7680,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.868000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.277000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.868000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.277000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7853,7 +7777,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7863,7 +7786,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7873,7 +7795,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7883,7 +7804,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8075,14 +7995,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.940000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.940000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.335000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.335000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.940000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.335000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8161,7 +8081,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8171,7 +8090,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8181,7 +8099,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8191,7 +8108,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8392,13 +8308,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.384000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.384000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8489,7 +8405,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8499,7 +8414,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8509,7 +8423,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8519,7 +8432,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8753,8 +8665,8 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.061000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.061000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.434000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.434000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -8762,7 +8674,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.061000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.434000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8869,7 +8781,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8879,7 +8790,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8889,7 +8799,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8899,7 +8808,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9200,8 +9108,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.128000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.128000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.490000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.490000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -9209,8 +9117,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.128000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.128000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.490000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.490000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -9333,7 +9241,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9343,7 +9250,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9353,7 +9259,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9363,7 +9268,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9596,15 +9500,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.200000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.200000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.550000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.550000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.200000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.550000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9697,7 +9601,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9707,7 +9610,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9717,7 +9619,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9727,7 +9628,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9958,15 +9858,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.258000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.258000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.600000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.600000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.258000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.258000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.600000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.600000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10061,7 +9961,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10071,7 +9970,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10081,7 +9979,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10091,7 +9988,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10329,15 +10225,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.325000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.325000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.656000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.656000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.325000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.325000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.656000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.656000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10432,7 +10328,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10442,7 +10337,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10452,7 +10346,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10462,7 +10355,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10730,16 +10622,16 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.390000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.390000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.715000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.715000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.390000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.390000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.715000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.715000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10848,7 +10740,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10858,7 +10749,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10868,7 +10758,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10878,7 +10767,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11125,15 +11013,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.456000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.456000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.770000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.770000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.456000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.456000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.770000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.770000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11228,7 +11116,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11238,7 +11125,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11248,7 +11134,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11258,7 +11143,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11466,14 +11350,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.538000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.538000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.824000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.824000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.538000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.538000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.824000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.824000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11554,7 +11438,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11564,7 +11447,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11574,7 +11456,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11584,7 +11465,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11796,15 +11676,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.595000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.595000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.873000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.873000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.595000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.595000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.873000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.873000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -11899,7 +11779,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11909,7 +11788,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11919,7 +11797,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11929,7 +11806,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12211,8 +12087,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.658000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.658000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.925000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.925000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12220,8 +12096,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.658000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.658000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.925000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.925000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12344,7 +12220,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12354,7 +12229,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12364,7 +12238,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12374,7 +12247,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12604,15 +12476,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.723000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.723000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.981000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.981000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.723000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.981000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -12705,7 +12577,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12715,7 +12586,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12725,7 +12595,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12735,7 +12604,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12950,15 +12818,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.781000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.781000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:20.031000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:20.031000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.781000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.781000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:20.031000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:20.031000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -13053,7 +12921,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13063,7 +12930,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13073,7 +12939,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13083,7 +12948,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13305,15 +13169,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.844000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.844000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:20.085000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:20.085000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.844000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.844000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:20.085000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:20.085000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -13408,7 +13272,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13418,7 +13281,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13428,7 +13290,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13438,7 +13299,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13630,14 +13490,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.904000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.904000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:20.136000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:20.136000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.904000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.904000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:20.136000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:20.136000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -13718,7 +13578,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13728,7 +13587,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13738,7 +13596,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13748,7 +13605,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=null; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null SHOW VARIABLE STATEMENT_TIMEOUT; diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql index 54374f0ad87..a5a6a01ada9 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql @@ -41,7 +41,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -50,7 +50,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -59,7 +59,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -68,7 +68,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -77,7 +77,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86,7 +86,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -95,7 +95,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -104,7 +104,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -113,7 +113,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -122,7 +122,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -131,7 +131,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -140,7 +140,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -149,7 +149,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -158,7 +158,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -167,7 +167,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -176,7 +176,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -185,7 +185,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#autocommit; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -194,7 +194,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show autocommit/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-autocommit; NEW_CONNECTION; show variable autocommit; @@ -438,7 +438,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -447,7 +447,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -456,7 +456,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -465,7 +465,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -474,7 +474,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -483,7 +483,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -492,7 +492,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -501,7 +501,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -510,7 +510,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -519,7 +519,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -528,7 +528,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -537,7 +537,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -546,7 +546,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -555,7 +555,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -564,7 +564,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -573,7 +573,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -582,7 +582,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.readonly; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -591,7 +591,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.readonly/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.readonly; NEW_CONNECTION; show variable spanner.readonly; @@ -869,7 +869,7 @@ show spanner.retry_aborts_internally%; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -884,7 +884,7 @@ show spanner.retry_aborts_internally_; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -899,7 +899,7 @@ show spanner.retry_aborts_internally&; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -914,7 +914,7 @@ show spanner.retry_aborts_internally$; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -929,7 +929,7 @@ show spanner.retry_aborts_internally@; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -944,7 +944,7 @@ show spanner.retry_aborts_internally!; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -959,7 +959,7 @@ show spanner.retry_aborts_internally*; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -974,7 +974,7 @@ show spanner.retry_aborts_internally(; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -989,7 +989,7 @@ show spanner.retry_aborts_internally); NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1004,7 +1004,7 @@ show spanner.retry_aborts_internally-; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1019,7 +1019,7 @@ show spanner.retry_aborts_internally+; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1034,7 +1034,7 @@ show spanner.retry_aborts_internally-#; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1049,7 +1049,7 @@ show spanner.retry_aborts_internally/; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1064,7 +1064,7 @@ show spanner.retry_aborts_internally\; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1079,7 +1079,7 @@ show spanner.retry_aborts_internally?; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1094,7 +1094,7 @@ show spanner.retry_aborts_internally-/; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1109,7 +1109,7 @@ show spanner.retry_aborts_internally/#; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1124,7 +1124,7 @@ show spanner.retry_aborts_internally/-; NEW_CONNECTION; set spanner.readonly=false; set autocommit=false; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.retry_aborts_internally; NEW_CONNECTION; set spanner.readonly=false; @@ -1504,7 +1504,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1513,7 +1513,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1522,7 +1522,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1531,7 +1531,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1540,7 +1540,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1549,7 +1549,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1558,7 +1558,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1567,7 +1567,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1576,7 +1576,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1585,7 +1585,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1594,7 +1594,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1603,7 +1603,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1612,7 +1612,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1621,7 +1621,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1630,7 +1630,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1639,7 +1639,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1648,7 +1648,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.autocommit_dml_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1657,7 +1657,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.autocommit_dml_mode/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.autocommit_dml_mode; NEW_CONNECTION; show variable spanner.autocommit_dml_mode; @@ -1901,7 +1901,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1910,7 +1910,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1919,7 +1919,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1928,7 +1928,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1937,7 +1937,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1946,7 +1946,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1955,7 +1955,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1964,7 +1964,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1973,7 +1973,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1982,7 +1982,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -1991,7 +1991,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -2000,7 +2000,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -2009,7 +2009,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -2018,7 +2018,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -2027,7 +2027,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -2036,7 +2036,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -2045,7 +2045,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#statement_timeout; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -2054,7 +2054,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show statement_timeout/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-statement_timeout; NEW_CONNECTION; show variable statement_timeout; @@ -2256,6 +2256,403 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-statement_timeout; NEW_CONNECTION; +show spanner.transaction_timeout; +NEW_CONNECTION; +SHOW SPANNER.TRANSACTION_TIMEOUT; +NEW_CONNECTION; +show spanner.transaction_timeout; +NEW_CONNECTION; + show spanner.transaction_timeout; +NEW_CONNECTION; + show spanner.transaction_timeout; +NEW_CONNECTION; + + + +show spanner.transaction_timeout; +NEW_CONNECTION; +show spanner.transaction_timeout ; +NEW_CONNECTION; +show spanner.transaction_timeout ; +NEW_CONNECTION; +show spanner.transaction_timeout + +; +NEW_CONNECTION; +show spanner.transaction_timeout; +NEW_CONNECTION; +show spanner.transaction_timeout; +NEW_CONNECTION; +show +spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show%spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show_spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show&spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show$spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show@spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show!spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show*spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show(spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show)spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show+spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-#spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show\spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show?spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-/spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/#spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.transaction_timeout/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/-spanner.transaction_timeout; +NEW_CONNECTION; +show variable spanner.transaction_timeout; +NEW_CONNECTION; +SHOW VARIABLE SPANNER.TRANSACTION_TIMEOUT; +NEW_CONNECTION; +show variable spanner.transaction_timeout; +NEW_CONNECTION; + show variable spanner.transaction_timeout; +NEW_CONNECTION; + show variable spanner.transaction_timeout; +NEW_CONNECTION; + + + +show variable spanner.transaction_timeout; +NEW_CONNECTION; +show variable spanner.transaction_timeout ; +NEW_CONNECTION; +show variable spanner.transaction_timeout ; +NEW_CONNECTION; +show variable spanner.transaction_timeout + +; +NEW_CONNECTION; +show variable spanner.transaction_timeout; +NEW_CONNECTION; +show variable spanner.transaction_timeout; +NEW_CONNECTION; +show +variable +spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable spanner.transaction_timeout; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.transaction_timeout/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-spanner.transaction_timeout; +NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; show spanner.read_timestamp; @@ -2332,7 +2729,7 @@ show spanner.read_timestamp%; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2347,7 +2744,7 @@ show spanner.read_timestamp_; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2362,7 +2759,7 @@ show spanner.read_timestamp&; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2377,7 +2774,7 @@ show spanner.read_timestamp$; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2392,7 +2789,7 @@ show spanner.read_timestamp@; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2407,7 +2804,7 @@ show spanner.read_timestamp!; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2422,7 +2819,7 @@ show spanner.read_timestamp*; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2437,7 +2834,7 @@ show spanner.read_timestamp(; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2452,7 +2849,7 @@ show spanner.read_timestamp); NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2467,7 +2864,7 @@ show spanner.read_timestamp-; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2482,7 +2879,7 @@ show spanner.read_timestamp+; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2497,7 +2894,7 @@ show spanner.read_timestamp-#; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2512,7 +2909,7 @@ show spanner.read_timestamp/; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2527,7 +2924,7 @@ show spanner.read_timestamp\; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2542,7 +2939,7 @@ show spanner.read_timestamp?; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2557,7 +2954,7 @@ show spanner.read_timestamp-/; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2572,7 +2969,7 @@ show spanner.read_timestamp/#; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2587,7 +2984,7 @@ show spanner.read_timestamp/-; NEW_CONNECTION; set spanner.readonly = true; SELECT 1 AS TEST; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.read_timestamp; NEW_CONNECTION; set spanner.readonly = true; @@ -2984,7 +3381,7 @@ update foo set bar=1; show spanner.commit_timestamp%; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -2996,7 +3393,7 @@ update foo set bar=1; show spanner.commit_timestamp_; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3008,7 +3405,7 @@ update foo set bar=1; show spanner.commit_timestamp&; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3020,7 +3417,7 @@ update foo set bar=1; show spanner.commit_timestamp$; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3032,7 +3429,7 @@ update foo set bar=1; show spanner.commit_timestamp@; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3044,7 +3441,7 @@ update foo set bar=1; show spanner.commit_timestamp!; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3056,7 +3453,7 @@ update foo set bar=1; show spanner.commit_timestamp*; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3068,7 +3465,7 @@ update foo set bar=1; show spanner.commit_timestamp(; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3080,7 +3477,7 @@ update foo set bar=1; show spanner.commit_timestamp); NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3092,7 +3489,7 @@ update foo set bar=1; show spanner.commit_timestamp-; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3104,7 +3501,7 @@ update foo set bar=1; show spanner.commit_timestamp+; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3116,7 +3513,7 @@ update foo set bar=1; show spanner.commit_timestamp-#; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3128,7 +3525,7 @@ update foo set bar=1; show spanner.commit_timestamp/; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3140,7 +3537,7 @@ update foo set bar=1; show spanner.commit_timestamp\; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3152,7 +3549,7 @@ update foo set bar=1; show spanner.commit_timestamp?; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3164,7 +3561,7 @@ update foo set bar=1; show spanner.commit_timestamp-/; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3176,7 +3573,7 @@ update foo set bar=1; show spanner.commit_timestamp/#; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3188,7 +3585,7 @@ update foo set bar=1; show spanner.commit_timestamp/-; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.commit_timestamp; NEW_CONNECTION; update foo set bar=1; @@ -3500,7 +3897,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3509,7 +3906,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3518,7 +3915,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3527,7 +3924,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3536,7 +3933,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3545,7 +3942,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3554,7 +3951,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3563,7 +3960,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3572,7 +3969,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3581,7 +3978,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3590,7 +3987,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3599,7 +3996,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3608,7 +4005,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3617,7 +4014,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3626,7 +4023,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3635,7 +4032,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3644,7 +4041,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.read_only_staleness; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3653,7 +4050,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.read_only_staleness/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.read_only_staleness; NEW_CONNECTION; show variable spanner.read_only_staleness; @@ -3897,7 +4294,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3906,7 +4303,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3915,7 +4312,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3924,7 +4321,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3933,7 +4330,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3942,7 +4339,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3951,7 +4348,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3960,7 +4357,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3969,7 +4366,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3978,7 +4375,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3987,7 +4384,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -3996,7 +4393,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4005,7 +4402,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4014,7 +4411,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4023,7 +4420,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4032,7 +4429,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4041,7 +4438,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.directed_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4050,7 +4447,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.directed_read/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.directed_read; NEW_CONNECTION; show variable spanner.directed_read; @@ -4294,7 +4691,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4303,7 +4700,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4312,7 +4709,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4321,7 +4718,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4330,7 +4727,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4339,7 +4736,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4348,7 +4745,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4357,7 +4754,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4366,7 +4763,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4375,7 +4772,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4384,7 +4781,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4393,7 +4790,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4402,7 +4799,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4411,7 +4808,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4420,7 +4817,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4429,7 +4826,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4438,7 +4835,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.optimizer_version; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4447,7 +4844,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_version/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.optimizer_version; NEW_CONNECTION; show variable spanner.optimizer_version; @@ -4691,7 +5088,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4700,7 +5097,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4709,7 +5106,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4718,7 +5115,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4727,7 +5124,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4736,7 +5133,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4745,7 +5142,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4754,7 +5151,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4763,7 +5160,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4772,7 +5169,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4781,7 +5178,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4790,7 +5187,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4799,7 +5196,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4808,7 +5205,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4817,7 +5214,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4826,7 +5223,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4835,7 +5232,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.optimizer_statistics_package; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -4844,7 +5241,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.optimizer_statistics_package/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.optimizer_statistics_package; NEW_CONNECTION; show variable spanner.optimizer_statistics_package; @@ -5088,7 +5485,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5097,7 +5494,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5106,7 +5503,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5115,7 +5512,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5124,7 +5521,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5133,7 +5530,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5142,7 +5539,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5151,7 +5548,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5160,7 +5557,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5169,7 +5566,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5178,7 +5575,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5187,7 +5584,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5196,7 +5593,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5205,7 +5602,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5214,7 +5611,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5223,7 +5620,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5232,7 +5629,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.return_commit_stats; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5241,7 +5638,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.return_commit_stats/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.return_commit_stats; NEW_CONNECTION; show variable spanner.return_commit_stats; @@ -5485,7 +5882,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5494,7 +5891,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5503,7 +5900,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5512,7 +5909,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5521,7 +5918,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5530,7 +5927,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5539,7 +5936,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5548,7 +5945,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5557,7 +5954,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5566,7 +5963,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5575,7 +5972,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5584,7 +5981,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5593,7 +5990,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5602,7 +5999,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5611,7 +6008,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5620,7 +6017,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5629,7 +6026,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.max_commit_delay; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -5638,7 +6035,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_commit_delay/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.max_commit_delay; NEW_CONNECTION; show variable spanner.max_commit_delay; @@ -5899,7 +6296,7 @@ update foo set bar=1; show spanner.commit_response%; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5911,7 +6308,7 @@ update foo set bar=1; show spanner.commit_response_; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5923,7 +6320,7 @@ update foo set bar=1; show spanner.commit_response&; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5935,7 +6332,7 @@ update foo set bar=1; show spanner.commit_response$; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5947,7 +6344,7 @@ update foo set bar=1; show spanner.commit_response@; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5959,7 +6356,7 @@ update foo set bar=1; show spanner.commit_response!; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5971,7 +6368,7 @@ update foo set bar=1; show spanner.commit_response*; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5983,7 +6380,7 @@ update foo set bar=1; show spanner.commit_response(; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -5995,7 +6392,7 @@ update foo set bar=1; show spanner.commit_response); NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6007,7 +6404,7 @@ update foo set bar=1; show spanner.commit_response-; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6019,7 +6416,7 @@ update foo set bar=1; show spanner.commit_response+; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6031,7 +6428,7 @@ update foo set bar=1; show spanner.commit_response-#; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6043,7 +6440,7 @@ update foo set bar=1; show spanner.commit_response/; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6055,7 +6452,7 @@ update foo set bar=1; show spanner.commit_response\; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6067,7 +6464,7 @@ update foo set bar=1; show spanner.commit_response?; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6079,7 +6476,7 @@ update foo set bar=1; show spanner.commit_response-/; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6091,7 +6488,7 @@ update foo set bar=1; show spanner.commit_response/#; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6103,7 +6500,7 @@ update foo set bar=1; show spanner.commit_response/-; NEW_CONNECTION; update foo set bar=1; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.commit_response; NEW_CONNECTION; update foo set bar=1; @@ -6415,7 +6812,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6424,7 +6821,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6433,7 +6830,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6442,7 +6839,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6451,7 +6848,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6460,7 +6857,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6469,7 +6866,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6478,7 +6875,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6487,7 +6884,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6496,7 +6893,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6505,7 +6902,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6514,7 +6911,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6523,7 +6920,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6532,7 +6929,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6541,7 +6938,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6550,7 +6947,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6559,7 +6956,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.statement_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6568,7 +6965,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.statement_tag/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.statement_tag; NEW_CONNECTION; show variable spanner.statement_tag; @@ -6812,7 +7209,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6821,7 +7218,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6830,7 +7227,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6839,7 +7236,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6848,7 +7245,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6857,7 +7254,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6866,7 +7263,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6875,7 +7272,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6884,7 +7281,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6893,7 +7290,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6902,7 +7299,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6911,7 +7308,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6920,7 +7317,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6929,7 +7326,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6938,7 +7335,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6947,7 +7344,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6956,7 +7353,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.transaction_tag; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -6965,7 +7362,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.transaction_tag/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.transaction_tag; NEW_CONNECTION; show variable spanner.transaction_tag; @@ -7209,7 +7606,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7218,7 +7615,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7227,7 +7624,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7236,7 +7633,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7245,7 +7642,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7254,7 +7651,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7263,7 +7660,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7272,7 +7669,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7281,7 +7678,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7290,7 +7687,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7299,7 +7696,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7308,7 +7705,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7317,7 +7714,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7326,7 +7723,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7335,7 +7732,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7344,7 +7741,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7353,7 +7750,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.exclude_txn_from_change_streams; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7362,7 +7759,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.exclude_txn_from_change_streams/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.exclude_txn_from_change_streams; NEW_CONNECTION; show variable spanner.exclude_txn_from_change_streams; @@ -7606,7 +8003,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7615,7 +8012,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7624,7 +8021,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7633,7 +8030,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7642,7 +8039,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7651,7 +8048,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7660,7 +8057,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7669,7 +8066,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7678,7 +8075,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7687,7 +8084,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7696,7 +8093,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7705,7 +8102,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7714,7 +8111,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7723,7 +8120,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7732,7 +8129,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7741,7 +8138,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7750,7 +8147,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.rpc_priority; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -7759,7 +8156,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.rpc_priority/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.rpc_priority; NEW_CONNECTION; show variable spanner.rpc_priority; @@ -8003,7 +8400,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8012,7 +8409,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8021,7 +8418,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8030,7 +8427,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8039,7 +8436,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8048,7 +8445,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8057,7 +8454,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8066,7 +8463,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8075,7 +8472,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8084,7 +8481,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8093,7 +8490,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8102,7 +8499,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8111,7 +8508,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8120,7 +8517,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8129,7 +8526,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8138,7 +8535,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8147,7 +8544,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.savepoint_support; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8156,7 +8553,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.savepoint_support/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.savepoint_support; NEW_CONNECTION; show variable spanner.savepoint_support; @@ -8358,6 +8755,403 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-spanner.savepoint_support; NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; +SHOW SPANNER.READ_LOCK_MODE; +NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; + show spanner.read_lock_mode; +NEW_CONNECTION; + show spanner.read_lock_mode; +NEW_CONNECTION; + + + +show spanner.read_lock_mode; +NEW_CONNECTION; +show spanner.read_lock_mode ; +NEW_CONNECTION; +show spanner.read_lock_mode ; +NEW_CONNECTION; +show spanner.read_lock_mode + +; +NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; +show +spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show%spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show_spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show&spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show$spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show@spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show!spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show*spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show(spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show)spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show+spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show\spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show?spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/-spanner.read_lock_mode; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; +SHOW VARIABLE SPANNER.READ_LOCK_MODE; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; + show variable spanner.read_lock_mode; +NEW_CONNECTION; + show variable spanner.read_lock_mode; +NEW_CONNECTION; + + + +show variable spanner.read_lock_mode; +NEW_CONNECTION; +show variable spanner.read_lock_mode ; +NEW_CONNECTION; +show variable spanner.read_lock_mode ; +NEW_CONNECTION; +show variable spanner.read_lock_mode + +; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; +show +variable +spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-spanner.read_lock_mode; +NEW_CONNECTION; show spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; SHOW SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; @@ -8400,7 +9194,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8409,7 +9203,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8418,7 +9212,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8427,7 +9221,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8436,7 +9230,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8445,7 +9239,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8454,7 +9248,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8463,7 +9257,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8472,7 +9266,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8481,7 +9275,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8490,7 +9284,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8499,7 +9293,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8508,7 +9302,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8517,7 +9311,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8526,7 +9320,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8535,7 +9329,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8544,7 +9338,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8553,7 +9347,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.delay_transaction_start_until_first_write/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; show variable spanner.delay_transaction_start_until_first_write; @@ -8797,7 +9591,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8806,7 +9600,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8815,7 +9609,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8824,7 +9618,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8833,7 +9627,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8842,7 +9636,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8851,7 +9645,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8860,7 +9654,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8869,7 +9663,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8878,7 +9672,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8887,7 +9681,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8896,7 +9690,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8905,7 +9699,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8914,7 +9708,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8923,7 +9717,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8932,7 +9726,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8941,7 +9735,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.keep_transaction_alive; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -8950,7 +9744,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.keep_transaction_alive/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.keep_transaction_alive; NEW_CONNECTION; show variable spanner.keep_transaction_alive; @@ -9194,7 +9988,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9203,7 +9997,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9212,7 +10006,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9221,7 +10015,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9230,7 +10024,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9239,7 +10033,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9248,7 +10042,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9257,7 +10051,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9266,7 +10060,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9275,7 +10069,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9284,7 +10078,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9293,7 +10087,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9302,7 +10096,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9311,7 +10105,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9320,7 +10114,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9329,7 +10123,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9338,7 +10132,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.auto_batch_dml; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9347,7 +10141,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.auto_batch_dml; NEW_CONNECTION; show variable spanner.auto_batch_dml; @@ -9591,7 +10385,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9600,7 +10394,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9609,7 +10403,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9618,7 +10412,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9627,7 +10421,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9636,7 +10430,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9645,7 +10439,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9654,7 +10448,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9663,7 +10457,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9672,7 +10466,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9681,7 +10475,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9690,7 +10484,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9699,7 +10493,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9708,7 +10502,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9717,7 +10511,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9726,7 +10520,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9735,7 +10529,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.auto_batch_dml_update_count; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9744,7 +10538,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.auto_batch_dml_update_count; NEW_CONNECTION; show variable spanner.auto_batch_dml_update_count; @@ -9988,7 +10782,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -9997,7 +10791,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10006,7 +10800,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10015,7 +10809,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10024,7 +10818,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10033,7 +10827,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10042,7 +10836,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10051,7 +10845,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10060,7 +10854,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10069,7 +10863,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10078,7 +10872,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10087,7 +10881,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10096,7 +10890,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10105,7 +10899,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10114,7 +10908,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10123,7 +10917,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10132,7 +10926,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -10141,7 +10935,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_batch_dml_update_count_verification/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.auto_batch_dml_update_count_verification; NEW_CONNECTION; show variable spanner.auto_batch_dml_update_count_verification; @@ -10744,6 +11538,403 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable transaction isolation/-level; NEW_CONNECTION; +show default_transaction_isolation; +NEW_CONNECTION; +SHOW DEFAULT_TRANSACTION_ISOLATION; +NEW_CONNECTION; +show default_transaction_isolation; +NEW_CONNECTION; + show default_transaction_isolation; +NEW_CONNECTION; + show default_transaction_isolation; +NEW_CONNECTION; + + + +show default_transaction_isolation; +NEW_CONNECTION; +show default_transaction_isolation ; +NEW_CONNECTION; +show default_transaction_isolation ; +NEW_CONNECTION; +show default_transaction_isolation + +; +NEW_CONNECTION; +show default_transaction_isolation; +NEW_CONNECTION; +show default_transaction_isolation; +NEW_CONNECTION; +show +default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show%default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show_default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show&default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show$default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show@default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show!default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show*default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show(default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show)default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show+default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-#default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show\default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show?default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-/default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/#default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show default_transaction_isolation/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/-default_transaction_isolation; +NEW_CONNECTION; +show variable default_transaction_isolation; +NEW_CONNECTION; +SHOW VARIABLE DEFAULT_TRANSACTION_ISOLATION; +NEW_CONNECTION; +show variable default_transaction_isolation; +NEW_CONNECTION; + show variable default_transaction_isolation; +NEW_CONNECTION; + show variable default_transaction_isolation; +NEW_CONNECTION; + + + +show variable default_transaction_isolation; +NEW_CONNECTION; +show variable default_transaction_isolation ; +NEW_CONNECTION; +show variable default_transaction_isolation ; +NEW_CONNECTION; +show variable default_transaction_isolation + +; +NEW_CONNECTION; +show variable default_transaction_isolation; +NEW_CONNECTION; +show variable default_transaction_isolation; +NEW_CONNECTION; +show +variable +default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable default_transaction_isolation; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable default_transaction_isolation/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-default_transaction_isolation; +NEW_CONNECTION; begin; NEW_CONNECTION; BEGIN; @@ -16734,20668 +17925,20676 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT start work isolation level/-serializable; NEW_CONNECTION; -begin isolation level default read write; +begin isolation level repeatable read; NEW_CONNECTION; -BEGIN ISOLATION LEVEL DEFAULT READ WRITE; +BEGIN ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -begin isolation level default read write; +begin isolation level repeatable read; NEW_CONNECTION; - begin isolation level default read write; + begin isolation level repeatable read; NEW_CONNECTION; - begin isolation level default read write; + begin isolation level repeatable read; NEW_CONNECTION; -begin isolation level default read write; +begin isolation level repeatable read; NEW_CONNECTION; -begin isolation level default read write ; +begin isolation level repeatable read ; NEW_CONNECTION; -begin isolation level default read write ; +begin isolation level repeatable read ; NEW_CONNECTION; -begin isolation level default read write +begin isolation level repeatable read ; NEW_CONNECTION; -begin isolation level default read write; +begin isolation level repeatable read; NEW_CONNECTION; -begin isolation level default read write; +begin isolation level repeatable read; NEW_CONNECTION; begin isolation level -default -read -write; +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level default read write; +foo begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write bar; +begin isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level default read write; +%begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write%; +begin isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read%write; +begin isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level default read write; +_begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write_; +begin isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read_write; +begin isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level default read write; +&begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write&; +begin isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read&write; +begin isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level default read write; +$begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write$; +begin isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read$write; +begin isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level default read write; +@begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write@; +begin isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read@write; +begin isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level default read write; +!begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write!; +begin isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read!write; +begin isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level default read write; +*begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write*; +begin isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read*write; +begin isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level default read write; +(begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write(; +begin isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read(write; +begin isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level default read write; +)begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write); +begin isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read)write; +begin isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level default read write; +-begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write-; +begin isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read-write; +begin isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level default read write; ++begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write+; +begin isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read+write; +begin isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level default read write; +-#begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write-#; +begin isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read-#write; +begin isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level default read write; +/begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write/; +begin isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read/write; +begin isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level default read write; +\begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write\; +begin isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read\write; +begin isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level default read write; +?begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write?; +begin isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read?write; +begin isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level default read write; +-/begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write-/; +begin isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read-/write; +begin isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level default read write; +/#begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write/#; +begin isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read/#write; +begin isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level default read write; +/-begin isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write/-; +begin isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read/-write; +begin isolation level repeatable/-read; NEW_CONNECTION; -start isolation level default read only; +start isolation level repeatable read; NEW_CONNECTION; -START ISOLATION LEVEL DEFAULT READ ONLY; +START ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -start isolation level default read only; +start isolation level repeatable read; NEW_CONNECTION; - start isolation level default read only; + start isolation level repeatable read; NEW_CONNECTION; - start isolation level default read only; + start isolation level repeatable read; NEW_CONNECTION; -start isolation level default read only; +start isolation level repeatable read; NEW_CONNECTION; -start isolation level default read only ; +start isolation level repeatable read ; NEW_CONNECTION; -start isolation level default read only ; +start isolation level repeatable read ; NEW_CONNECTION; -start isolation level default read only +start isolation level repeatable read ; NEW_CONNECTION; -start isolation level default read only; +start isolation level repeatable read; NEW_CONNECTION; -start isolation level default read only; +start isolation level repeatable read; NEW_CONNECTION; start isolation level -default -read -only; +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level default read only; +foo start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only bar; +start isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level default read only; +%start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only%; +start isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read%only; +start isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level default read only; +_start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only_; +start isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read_only; +start isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level default read only; +&start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only&; +start isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read&only; +start isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level default read only; +$start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only$; +start isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read$only; +start isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level default read only; +@start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only@; +start isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read@only; +start isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level default read only; +!start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only!; +start isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read!only; +start isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level default read only; +*start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only*; +start isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read*only; +start isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level default read only; +(start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only(; +start isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read(only; +start isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level default read only; +)start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only); +start isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read)only; +start isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level default read only; +-start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only-; +start isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read-only; +start isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level default read only; ++start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only+; +start isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read+only; +start isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level default read only; +-#start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only-#; +start isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read-#only; +start isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level default read only; +/start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only/; +start isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read/only; +start isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level default read only; +\start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only\; +start isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read\only; +start isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level default read only; +?start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only?; +start isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read?only; +start isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level default read only; +-/start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only-/; +start isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read-/only; +start isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level default read only; +/#start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only/#; +start isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read/#only; +start isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level default read only; +/-start isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only/-; +start isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read/-only; +start isolation level repeatable/-read; NEW_CONNECTION; -begin transaction isolation level default read only; +begin transaction isolation level repeatable read; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL DEFAULT READ ONLY; +BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -begin transaction isolation level default read only; +begin transaction isolation level repeatable read; NEW_CONNECTION; - begin transaction isolation level default read only; + begin transaction isolation level repeatable read; NEW_CONNECTION; - begin transaction isolation level default read only; + begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction isolation level default read only; +begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction isolation level default read only ; +begin transaction isolation level repeatable read ; NEW_CONNECTION; -begin transaction isolation level default read only ; +begin transaction isolation level repeatable read ; NEW_CONNECTION; -begin transaction isolation level default read only +begin transaction isolation level repeatable read ; NEW_CONNECTION; -begin transaction isolation level default read only; +begin transaction isolation level repeatable read; NEW_CONNECTION; -begin transaction isolation level default read only; +begin transaction isolation level repeatable read; NEW_CONNECTION; begin transaction isolation level -default -read -only; +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level default read only; +foo begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only bar; +begin transaction isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level default read only; +%begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only%; +begin transaction isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read%only; +begin transaction isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level default read only; +_begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only_; +begin transaction isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read_only; +begin transaction isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level default read only; +&begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only&; +begin transaction isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read&only; +begin transaction isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level default read only; +$begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only$; +begin transaction isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read$only; +begin transaction isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level default read only; +@begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only@; +begin transaction isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read@only; +begin transaction isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level default read only; +!begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only!; +begin transaction isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read!only; +begin transaction isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level default read only; +*begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only*; +begin transaction isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read*only; +begin transaction isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level default read only; +(begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only(; +begin transaction isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read(only; +begin transaction isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level default read only; +)begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only); +begin transaction isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read)only; +begin transaction isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level default read only; +-begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only-; +begin transaction isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read-only; +begin transaction isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level default read only; ++begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only+; +begin transaction isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read+only; +begin transaction isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level default read only; +-#begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only-#; +begin transaction isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read-#only; +begin transaction isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level default read only; +/begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only/; +begin transaction isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read/only; +begin transaction isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level default read only; +\begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only\; +begin transaction isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read\only; +begin transaction isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level default read only; +?begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only?; +begin transaction isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read?only; +begin transaction isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level default read only; +-/begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only-/; +begin transaction isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read-/only; +begin transaction isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level default read only; +/#begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only/#; +begin transaction isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read/#only; +begin transaction isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level default read only; +/-begin transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only/-; +begin transaction isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read/-only; +begin transaction isolation level repeatable/-read; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction isolation level repeatable read; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL DEFAULT READ WRITE; +START TRANSACTION ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction isolation level repeatable read; NEW_CONNECTION; - start transaction isolation level default read write; + start transaction isolation level repeatable read; NEW_CONNECTION; - start transaction isolation level default read write; + start transaction isolation level repeatable read; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction isolation level repeatable read; NEW_CONNECTION; -start transaction isolation level default read write ; +start transaction isolation level repeatable read ; NEW_CONNECTION; -start transaction isolation level default read write ; +start transaction isolation level repeatable read ; NEW_CONNECTION; -start transaction isolation level default read write +start transaction isolation level repeatable read ; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction isolation level repeatable read; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction isolation level repeatable read; NEW_CONNECTION; start transaction isolation level -default -read -write; +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level default read write; +foo start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write bar; +start transaction isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level default read write; +%start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write%; +start transaction isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read%write; +start transaction isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level default read write; +_start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write_; +start transaction isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read_write; +start transaction isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level default read write; +&start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write&; +start transaction isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read&write; +start transaction isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level default read write; +$start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write$; +start transaction isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read$write; +start transaction isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level default read write; +@start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write@; +start transaction isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read@write; +start transaction isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level default read write; +!start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write!; +start transaction isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read!write; +start transaction isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level default read write; +*start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write*; +start transaction isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read*write; +start transaction isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level default read write; +(start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write(; +start transaction isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read(write; +start transaction isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level default read write; +)start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write); +start transaction isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read)write; +start transaction isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level default read write; +-start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write-; +start transaction isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read-write; +start transaction isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level default read write; ++start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write+; +start transaction isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read+write; +start transaction isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level default read write; +-#start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write-#; +start transaction isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read-#write; +start transaction isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level default read write; +/start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write/; +start transaction isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read/write; +start transaction isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level default read write; +\start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write\; +start transaction isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read\write; +start transaction isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level default read write; +?start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write?; +start transaction isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read?write; +start transaction isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level default read write; +-/start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write-/; +start transaction isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read-/write; +start transaction isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level default read write; +/#start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write/#; +start transaction isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read/#write; +start transaction isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level default read write; +/-start transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write/-; +start transaction isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read/-write; +start transaction isolation level repeatable/-read; NEW_CONNECTION; -begin work isolation level default read write; +begin work isolation level repeatable read; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL DEFAULT READ WRITE; +BEGIN WORK ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -begin work isolation level default read write; +begin work isolation level repeatable read; NEW_CONNECTION; - begin work isolation level default read write; + begin work isolation level repeatable read; NEW_CONNECTION; - begin work isolation level default read write; + begin work isolation level repeatable read; NEW_CONNECTION; -begin work isolation level default read write; +begin work isolation level repeatable read; NEW_CONNECTION; -begin work isolation level default read write ; +begin work isolation level repeatable read ; NEW_CONNECTION; -begin work isolation level default read write ; +begin work isolation level repeatable read ; NEW_CONNECTION; -begin work isolation level default read write +begin work isolation level repeatable read ; NEW_CONNECTION; -begin work isolation level default read write; +begin work isolation level repeatable read; NEW_CONNECTION; -begin work isolation level default read write; +begin work isolation level repeatable read; NEW_CONNECTION; begin work isolation level -default -read -write; +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level default read write; +foo begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write bar; +begin work isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level default read write; +%begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write%; +begin work isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read%write; +begin work isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level default read write; +_begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write_; +begin work isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read_write; +begin work isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level default read write; +&begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write&; +begin work isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read&write; +begin work isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level default read write; +$begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write$; +begin work isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read$write; +begin work isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level default read write; +@begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write@; +begin work isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read@write; +begin work isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level default read write; +!begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write!; +begin work isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read!write; +begin work isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level default read write; +*begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write*; +begin work isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read*write; +begin work isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level default read write; +(begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write(; +begin work isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read(write; +begin work isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level default read write; +)begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write); +begin work isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read)write; +begin work isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level default read write; +-begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write-; +begin work isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read-write; +begin work isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level default read write; ++begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write+; +begin work isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read+write; +begin work isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level default read write; +-#begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write-#; +begin work isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read-#write; +begin work isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level default read write; +/begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write/; +begin work isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read/write; +begin work isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level default read write; +\begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write\; +begin work isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read\write; +begin work isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level default read write; +?begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write?; +begin work isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read?write; +begin work isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level default read write; +-/begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write-/; +begin work isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read-/write; +begin work isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level default read write; +/#begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write/#; +begin work isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read/#write; +begin work isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level default read write; +/-begin work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write/-; +begin work isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read/-write; +begin work isolation level repeatable/-read; NEW_CONNECTION; -start work isolation level default read only; +start work isolation level repeatable read; NEW_CONNECTION; -START WORK ISOLATION LEVEL DEFAULT READ ONLY; +START WORK ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -start work isolation level default read only; +start work isolation level repeatable read; NEW_CONNECTION; - start work isolation level default read only; + start work isolation level repeatable read; NEW_CONNECTION; - start work isolation level default read only; + start work isolation level repeatable read; NEW_CONNECTION; -start work isolation level default read only; +start work isolation level repeatable read; NEW_CONNECTION; -start work isolation level default read only ; +start work isolation level repeatable read ; NEW_CONNECTION; -start work isolation level default read only ; +start work isolation level repeatable read ; NEW_CONNECTION; -start work isolation level default read only +start work isolation level repeatable read ; NEW_CONNECTION; -start work isolation level default read only; +start work isolation level repeatable read; NEW_CONNECTION; -start work isolation level default read only; +start work isolation level repeatable read; NEW_CONNECTION; start work isolation level -default -read -only; +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level default read only; +foo start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only bar; +start work isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level default read only; +%start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only%; +start work isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read%only; +start work isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level default read only; +_start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only_; +start work isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read_only; +start work isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level default read only; +&start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only&; +start work isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read&only; +start work isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level default read only; +$start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only$; +start work isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read$only; +start work isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level default read only; +@start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only@; +start work isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read@only; +start work isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level default read only; +!start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only!; +start work isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read!only; +start work isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level default read only; +*start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only*; +start work isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read*only; +start work isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level default read only; +(start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only(; +start work isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read(only; +start work isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level default read only; +)start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only); +start work isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read)only; +start work isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level default read only; +-start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only-; +start work isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read-only; +start work isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level default read only; ++start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only+; +start work isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read+only; +start work isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level default read only; +-#start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only-#; +start work isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read-#only; +start work isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level default read only; +/start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only/; +start work isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read/only; +start work isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level default read only; +\start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only\; +start work isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read\only; +start work isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level default read only; +?start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only?; +start work isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read?only; +start work isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level default read only; +-/start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only-/; +start work isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read-/only; +start work isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level default read only; +/#start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only/#; +start work isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read/#only; +start work isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level default read only; +/-start work isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only/-; +start work isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read/-only; +start work isolation level repeatable/-read; NEW_CONNECTION; -begin isolation level serializable read write; +begin isolation level default read write; NEW_CONNECTION; -BEGIN ISOLATION LEVEL SERIALIZABLE READ WRITE; +BEGIN ISOLATION LEVEL DEFAULT READ WRITE; NEW_CONNECTION; -begin isolation level serializable read write; +begin isolation level default read write; NEW_CONNECTION; - begin isolation level serializable read write; + begin isolation level default read write; NEW_CONNECTION; - begin isolation level serializable read write; + begin isolation level default read write; NEW_CONNECTION; -begin isolation level serializable read write; +begin isolation level default read write; NEW_CONNECTION; -begin isolation level serializable read write ; +begin isolation level default read write ; NEW_CONNECTION; -begin isolation level serializable read write ; +begin isolation level default read write ; NEW_CONNECTION; -begin isolation level serializable read write +begin isolation level default read write ; NEW_CONNECTION; -begin isolation level serializable read write; +begin isolation level default read write; NEW_CONNECTION; -begin isolation level serializable read write; +begin isolation level default read write; NEW_CONNECTION; begin isolation level -serializable +default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level serializable read write; +foo begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write bar; +begin isolation level default read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level serializable read write; +%begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write%; +begin isolation level default read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read%write; +begin isolation level default read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level serializable read write; +_begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write_; +begin isolation level default read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read_write; +begin isolation level default read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level serializable read write; +&begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write&; +begin isolation level default read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read&write; +begin isolation level default read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level serializable read write; +$begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write$; +begin isolation level default read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read$write; +begin isolation level default read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level serializable read write; +@begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write@; +begin isolation level default read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read@write; +begin isolation level default read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level serializable read write; +!begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write!; +begin isolation level default read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read!write; +begin isolation level default read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level serializable read write; +*begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write*; +begin isolation level default read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read*write; +begin isolation level default read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level serializable read write; +(begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write(; +begin isolation level default read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read(write; +begin isolation level default read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level serializable read write; +)begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write); +begin isolation level default read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read)write; +begin isolation level default read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level serializable read write; +-begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write-; +begin isolation level default read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read-write; +begin isolation level default read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level serializable read write; ++begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write+; +begin isolation level default read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read+write; +begin isolation level default read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level serializable read write; +-#begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write-#; +begin isolation level default read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read-#write; +begin isolation level default read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level serializable read write; +/begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write/; +begin isolation level default read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read/write; +begin isolation level default read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level serializable read write; +\begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write\; +begin isolation level default read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read\write; +begin isolation level default read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level serializable read write; +?begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write?; +begin isolation level default read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read?write; +begin isolation level default read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level serializable read write; +-/begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write-/; +begin isolation level default read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read-/write; +begin isolation level default read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level serializable read write; +/#begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write/#; +begin isolation level default read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read/#write; +begin isolation level default read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level serializable read write; +/-begin isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write/-; +begin isolation level default read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read/-write; +begin isolation level default read/-write; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default read only; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE READ WRITE; +START ISOLATION LEVEL DEFAULT READ ONLY; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default read only; NEW_CONNECTION; - start isolation level serializable read write; + start isolation level default read only; NEW_CONNECTION; - start isolation level serializable read write; + start isolation level default read only; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default read only; NEW_CONNECTION; -start isolation level serializable read write ; +start isolation level default read only ; NEW_CONNECTION; -start isolation level serializable read write ; +start isolation level default read only ; NEW_CONNECTION; -start isolation level serializable read write +start isolation level default read only ; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default read only; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default read only; NEW_CONNECTION; start isolation level -serializable +default read -write; +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable read write; +foo start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write bar; +start isolation level default read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable read write; +%start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write%; +start isolation level default read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read%write; +start isolation level default read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable read write; +_start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write_; +start isolation level default read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read_write; +start isolation level default read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable read write; +&start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write&; +start isolation level default read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read&write; +start isolation level default read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable read write; +$start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write$; +start isolation level default read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read$write; +start isolation level default read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable read write; +@start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write@; +start isolation level default read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read@write; +start isolation level default read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable read write; +!start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write!; +start isolation level default read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read!write; +start isolation level default read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable read write; +*start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write*; +start isolation level default read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read*write; +start isolation level default read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable read write; +(start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write(; +start isolation level default read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read(write; +start isolation level default read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable read write; +)start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write); +start isolation level default read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read)write; +start isolation level default read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable read write; +-start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write-; +start isolation level default read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read-write; +start isolation level default read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable read write; ++start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write+; +start isolation level default read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read+write; +start isolation level default read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable read write; +-#start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write-#; +start isolation level default read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read-#write; +start isolation level default read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable read write; +/start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write/; +start isolation level default read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read/write; +start isolation level default read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable read write; +\start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write\; +start isolation level default read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read\write; +start isolation level default read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable read write; +?start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write?; +start isolation level default read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read?write; +start isolation level default read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable read write; +-/start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write-/; +start isolation level default read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read-/write; +start isolation level default read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable read write; +/#start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write/#; +start isolation level default read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read/#write; +start isolation level default read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable read write; +/-start isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write/-; +start isolation level default read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read/-write; +start isolation level default read/-only; NEW_CONNECTION; -begin transaction isolation level serializable read only; +begin transaction isolation level default read only; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY; +BEGIN TRANSACTION ISOLATION LEVEL DEFAULT READ ONLY; NEW_CONNECTION; -begin transaction isolation level serializable read only; +begin transaction isolation level default read only; NEW_CONNECTION; - begin transaction isolation level serializable read only; + begin transaction isolation level default read only; NEW_CONNECTION; - begin transaction isolation level serializable read only; + begin transaction isolation level default read only; NEW_CONNECTION; -begin transaction isolation level serializable read only; +begin transaction isolation level default read only; NEW_CONNECTION; -begin transaction isolation level serializable read only ; +begin transaction isolation level default read only ; NEW_CONNECTION; -begin transaction isolation level serializable read only ; +begin transaction isolation level default read only ; NEW_CONNECTION; -begin transaction isolation level serializable read only +begin transaction isolation level default read only ; NEW_CONNECTION; -begin transaction isolation level serializable read only; +begin transaction isolation level default read only; NEW_CONNECTION; -begin transaction isolation level serializable read only; +begin transaction isolation level default read only; NEW_CONNECTION; begin transaction isolation level -serializable +default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level serializable read only; +foo begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only bar; +begin transaction isolation level default read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level serializable read only; +%begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only%; +begin transaction isolation level default read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read%only; +begin transaction isolation level default read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level serializable read only; +_begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only_; +begin transaction isolation level default read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read_only; +begin transaction isolation level default read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level serializable read only; +&begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only&; +begin transaction isolation level default read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read&only; +begin transaction isolation level default read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level serializable read only; +$begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only$; +begin transaction isolation level default read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read$only; +begin transaction isolation level default read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level serializable read only; +@begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only@; +begin transaction isolation level default read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read@only; +begin transaction isolation level default read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level serializable read only; +!begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only!; +begin transaction isolation level default read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read!only; +begin transaction isolation level default read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level serializable read only; +*begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only*; +begin transaction isolation level default read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read*only; +begin transaction isolation level default read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level serializable read only; +(begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only(; +begin transaction isolation level default read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read(only; +begin transaction isolation level default read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level serializable read only; +)begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only); +begin transaction isolation level default read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read)only; +begin transaction isolation level default read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level serializable read only; +-begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only-; +begin transaction isolation level default read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read-only; +begin transaction isolation level default read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level serializable read only; ++begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only+; +begin transaction isolation level default read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read+only; +begin transaction isolation level default read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level serializable read only; +-#begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only-#; +begin transaction isolation level default read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read-#only; +begin transaction isolation level default read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level serializable read only; +/begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only/; +begin transaction isolation level default read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read/only; +begin transaction isolation level default read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level serializable read only; +\begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only\; +begin transaction isolation level default read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read\only; +begin transaction isolation level default read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level serializable read only; +?begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only?; +begin transaction isolation level default read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read?only; +begin transaction isolation level default read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level serializable read only; +-/begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only-/; +begin transaction isolation level default read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read-/only; +begin transaction isolation level default read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level serializable read only; +/#begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only/#; +begin transaction isolation level default read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read/#only; +begin transaction isolation level default read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level serializable read only; +/-begin transaction isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only/-; +begin transaction isolation level default read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read/-only; +begin transaction isolation level default read/-only; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default read write; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE; +START TRANSACTION ISOLATION LEVEL DEFAULT READ WRITE; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default read write; NEW_CONNECTION; - start transaction isolation level serializable read write; + start transaction isolation level default read write; NEW_CONNECTION; - start transaction isolation level serializable read write; + start transaction isolation level default read write; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default read write; NEW_CONNECTION; -start transaction isolation level serializable read write ; +start transaction isolation level default read write ; NEW_CONNECTION; -start transaction isolation level serializable read write ; +start transaction isolation level default read write ; NEW_CONNECTION; -start transaction isolation level serializable read write +start transaction isolation level default read write ; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default read write; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default read write; NEW_CONNECTION; start transaction isolation level -serializable +default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable read write; +foo start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write bar; +start transaction isolation level default read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable read write; +%start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write%; +start transaction isolation level default read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read%write; +start transaction isolation level default read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable read write; +_start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write_; +start transaction isolation level default read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read_write; +start transaction isolation level default read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable read write; +&start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write&; +start transaction isolation level default read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read&write; +start transaction isolation level default read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable read write; +$start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write$; +start transaction isolation level default read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read$write; +start transaction isolation level default read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable read write; +@start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write@; +start transaction isolation level default read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read@write; +start transaction isolation level default read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable read write; +!start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write!; +start transaction isolation level default read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read!write; +start transaction isolation level default read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable read write; +*start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write*; +start transaction isolation level default read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read*write; +start transaction isolation level default read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable read write; +(start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write(; +start transaction isolation level default read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read(write; +start transaction isolation level default read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable read write; +)start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write); +start transaction isolation level default read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read)write; +start transaction isolation level default read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable read write; +-start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write-; +start transaction isolation level default read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read-write; +start transaction isolation level default read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable read write; ++start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write+; +start transaction isolation level default read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read+write; +start transaction isolation level default read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable read write; +-#start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write-#; +start transaction isolation level default read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read-#write; +start transaction isolation level default read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable read write; +/start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write/; +start transaction isolation level default read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read/write; +start transaction isolation level default read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable read write; +\start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write\; +start transaction isolation level default read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read\write; +start transaction isolation level default read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable read write; +?start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write?; +start transaction isolation level default read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read?write; +start transaction isolation level default read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable read write; +-/start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write-/; +start transaction isolation level default read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read-/write; +start transaction isolation level default read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable read write; +/#start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write/#; +start transaction isolation level default read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read/#write; +start transaction isolation level default read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable read write; +/-start transaction isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write/-; +start transaction isolation level default read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read/-write; +start transaction isolation level default read/-write; NEW_CONNECTION; -begin work isolation level serializable read write; +begin work isolation level default read write; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL SERIALIZABLE READ WRITE; +BEGIN WORK ISOLATION LEVEL DEFAULT READ WRITE; NEW_CONNECTION; -begin work isolation level serializable read write; +begin work isolation level default read write; NEW_CONNECTION; - begin work isolation level serializable read write; + begin work isolation level default read write; NEW_CONNECTION; - begin work isolation level serializable read write; + begin work isolation level default read write; NEW_CONNECTION; -begin work isolation level serializable read write; +begin work isolation level default read write; NEW_CONNECTION; -begin work isolation level serializable read write ; +begin work isolation level default read write ; NEW_CONNECTION; -begin work isolation level serializable read write ; +begin work isolation level default read write ; NEW_CONNECTION; -begin work isolation level serializable read write +begin work isolation level default read write ; NEW_CONNECTION; -begin work isolation level serializable read write; +begin work isolation level default read write; NEW_CONNECTION; -begin work isolation level serializable read write; +begin work isolation level default read write; NEW_CONNECTION; begin work isolation level -serializable +default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level serializable read write; +foo begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write bar; +begin work isolation level default read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level serializable read write; +%begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write%; +begin work isolation level default read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read%write; +begin work isolation level default read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level serializable read write; +_begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write_; +begin work isolation level default read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read_write; +begin work isolation level default read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level serializable read write; +&begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write&; +begin work isolation level default read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read&write; +begin work isolation level default read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level serializable read write; +$begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write$; +begin work isolation level default read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read$write; +begin work isolation level default read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level serializable read write; +@begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write@; +begin work isolation level default read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read@write; +begin work isolation level default read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level serializable read write; +!begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write!; +begin work isolation level default read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read!write; +begin work isolation level default read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level serializable read write; +*begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write*; +begin work isolation level default read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read*write; +begin work isolation level default read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level serializable read write; +(begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write(; +begin work isolation level default read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read(write; +begin work isolation level default read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level serializable read write; +)begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write); +begin work isolation level default read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read)write; +begin work isolation level default read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level serializable read write; +-begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write-; +begin work isolation level default read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read-write; +begin work isolation level default read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level serializable read write; ++begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write+; +begin work isolation level default read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read+write; +begin work isolation level default read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level serializable read write; +-#begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write-#; +begin work isolation level default read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read-#write; +begin work isolation level default read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level serializable read write; +/begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write/; +begin work isolation level default read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read/write; +begin work isolation level default read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level serializable read write; +\begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write\; +begin work isolation level default read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read\write; +begin work isolation level default read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level serializable read write; +?begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write?; +begin work isolation level default read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read?write; +begin work isolation level default read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level serializable read write; +-/begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write-/; +begin work isolation level default read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read-/write; +begin work isolation level default read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level serializable read write; +/#begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write/#; +begin work isolation level default read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read/#write; +begin work isolation level default read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level serializable read write; +/-begin work isolation level default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write/-; +begin work isolation level default read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read/-write; +begin work isolation level default read/-write; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default read only; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE READ ONLY; +START WORK ISOLATION LEVEL DEFAULT READ ONLY; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default read only; NEW_CONNECTION; - start work isolation level serializable read only; + start work isolation level default read only; NEW_CONNECTION; - start work isolation level serializable read only; + start work isolation level default read only; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default read only; NEW_CONNECTION; -start work isolation level serializable read only ; +start work isolation level default read only ; NEW_CONNECTION; -start work isolation level serializable read only ; +start work isolation level default read only ; NEW_CONNECTION; -start work isolation level serializable read only +start work isolation level default read only ; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default read only; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default read only; NEW_CONNECTION; start work isolation level -serializable +default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable read only; +foo start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only bar; +start work isolation level default read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable read only; +%start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only%; +start work isolation level default read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read%only; +start work isolation level default read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable read only; +_start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only_; +start work isolation level default read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read_only; +start work isolation level default read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable read only; +&start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only&; +start work isolation level default read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read&only; +start work isolation level default read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable read only; +$start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only$; +start work isolation level default read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read$only; +start work isolation level default read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable read only; +@start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only@; +start work isolation level default read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read@only; +start work isolation level default read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable read only; +!start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only!; +start work isolation level default read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read!only; +start work isolation level default read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable read only; +*start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only*; +start work isolation level default read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read*only; +start work isolation level default read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable read only; +(start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only(; +start work isolation level default read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read(only; +start work isolation level default read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable read only; +)start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only); +start work isolation level default read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read)only; +start work isolation level default read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable read only; +-start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only-; +start work isolation level default read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read-only; +start work isolation level default read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable read only; ++start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only+; +start work isolation level default read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read+only; +start work isolation level default read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable read only; +-#start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only-#; +start work isolation level default read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read-#only; +start work isolation level default read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable read only; +/start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only/; +start work isolation level default read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read/only; +start work isolation level default read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable read only; +\start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only\; +start work isolation level default read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read\only; +start work isolation level default read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable read only; +?start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only?; +start work isolation level default read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read?only; +start work isolation level default read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable read only; +-/start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only-/; +start work isolation level default read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read-/only; +start work isolation level default read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable read only; +/#start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only/#; +start work isolation level default read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read/#only; +start work isolation level default read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable read only; +/-start work isolation level default read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only/-; +start work isolation level default read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read/-only; +start work isolation level default read/-only; NEW_CONNECTION; -begin isolation level serializable, read write; +begin isolation level serializable read write; NEW_CONNECTION; -BEGIN ISOLATION LEVEL SERIALIZABLE, READ WRITE; +BEGIN ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -begin isolation level serializable, read write; +begin isolation level serializable read write; NEW_CONNECTION; - begin isolation level serializable, read write; + begin isolation level serializable read write; NEW_CONNECTION; - begin isolation level serializable, read write; + begin isolation level serializable read write; NEW_CONNECTION; -begin isolation level serializable, read write; +begin isolation level serializable read write; NEW_CONNECTION; -begin isolation level serializable, read write ; +begin isolation level serializable read write ; NEW_CONNECTION; -begin isolation level serializable, read write ; +begin isolation level serializable read write ; NEW_CONNECTION; -begin isolation level serializable, read write +begin isolation level serializable read write ; NEW_CONNECTION; -begin isolation level serializable, read write; +begin isolation level serializable read write; NEW_CONNECTION; -begin isolation level serializable, read write; +begin isolation level serializable read write; NEW_CONNECTION; begin isolation level -serializable, +serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level serializable, read write; +foo begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write bar; +begin isolation level serializable read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level serializable, read write; +%begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write%; +begin isolation level serializable read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read%write; +begin isolation level serializable read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level serializable, read write; +_begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write_; +begin isolation level serializable read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read_write; +begin isolation level serializable read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level serializable, read write; +&begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write&; +begin isolation level serializable read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read&write; +begin isolation level serializable read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level serializable, read write; +$begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write$; +begin isolation level serializable read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read$write; +begin isolation level serializable read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level serializable, read write; +@begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write@; +begin isolation level serializable read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read@write; +begin isolation level serializable read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level serializable, read write; +!begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write!; +begin isolation level serializable read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read!write; +begin isolation level serializable read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level serializable, read write; +*begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write*; +begin isolation level serializable read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read*write; +begin isolation level serializable read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level serializable, read write; +(begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write(; +begin isolation level serializable read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read(write; +begin isolation level serializable read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level serializable, read write; +)begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write); +begin isolation level serializable read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read)write; +begin isolation level serializable read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level serializable, read write; +-begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write-; +begin isolation level serializable read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read-write; +begin isolation level serializable read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level serializable, read write; ++begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write+; +begin isolation level serializable read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read+write; +begin isolation level serializable read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level serializable, read write; +-#begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write-#; +begin isolation level serializable read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read-#write; +begin isolation level serializable read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level serializable, read write; +/begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write/; +begin isolation level serializable read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read/write; +begin isolation level serializable read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level serializable, read write; +\begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write\; +begin isolation level serializable read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read\write; +begin isolation level serializable read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level serializable, read write; +?begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write?; +begin isolation level serializable read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read?write; +begin isolation level serializable read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level serializable, read write; +-/begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write-/; +begin isolation level serializable read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read-/write; +begin isolation level serializable read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level serializable, read write; +/#begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write/#; +begin isolation level serializable read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read/#write; +begin isolation level serializable read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level serializable, read write; +/-begin isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write/-; +begin isolation level serializable read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read/-write; +begin isolation level serializable read/-write; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable read write; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE, READ WRITE; +START ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable read write; NEW_CONNECTION; - start isolation level serializable, read write; + start isolation level serializable read write; NEW_CONNECTION; - start isolation level serializable, read write; + start isolation level serializable read write; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable read write; NEW_CONNECTION; -start isolation level serializable, read write ; +start isolation level serializable read write ; NEW_CONNECTION; -start isolation level serializable, read write ; +start isolation level serializable read write ; NEW_CONNECTION; -start isolation level serializable, read write +start isolation level serializable read write ; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable read write; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable read write; NEW_CONNECTION; start isolation level -serializable, +serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable, read write; +foo start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write bar; +start isolation level serializable read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable, read write; +%start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write%; +start isolation level serializable read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read%write; +start isolation level serializable read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable, read write; +_start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write_; +start isolation level serializable read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read_write; +start isolation level serializable read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable, read write; +&start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write&; +start isolation level serializable read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read&write; +start isolation level serializable read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable, read write; +$start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write$; +start isolation level serializable read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read$write; +start isolation level serializable read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable, read write; +@start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write@; +start isolation level serializable read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read@write; +start isolation level serializable read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable, read write; +!start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write!; +start isolation level serializable read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read!write; +start isolation level serializable read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable, read write; +*start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write*; +start isolation level serializable read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read*write; +start isolation level serializable read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable, read write; +(start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write(; +start isolation level serializable read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read(write; +start isolation level serializable read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable, read write; +)start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write); +start isolation level serializable read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read)write; +start isolation level serializable read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable, read write; +-start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write-; +start isolation level serializable read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read-write; +start isolation level serializable read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable, read write; ++start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write+; +start isolation level serializable read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read+write; +start isolation level serializable read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable, read write; +-#start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write-#; +start isolation level serializable read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read-#write; +start isolation level serializable read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable, read write; +/start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write/; +start isolation level serializable read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read/write; +start isolation level serializable read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable, read write; +\start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write\; +start isolation level serializable read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read\write; +start isolation level serializable read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable, read write; +?start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write?; +start isolation level serializable read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read?write; +start isolation level serializable read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable, read write; +-/start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write-/; +start isolation level serializable read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read-/write; +start isolation level serializable read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable, read write; +/#start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write/#; +start isolation level serializable read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read/#write; +start isolation level serializable read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable, read write; +/-start isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write/-; +start isolation level serializable read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read/-write; +start isolation level serializable read/-write; NEW_CONNECTION; -begin transaction isolation level serializable, read only; +begin transaction isolation level serializable read only; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY; NEW_CONNECTION; -begin transaction isolation level serializable, read only; +begin transaction isolation level serializable read only; NEW_CONNECTION; - begin transaction isolation level serializable, read only; + begin transaction isolation level serializable read only; NEW_CONNECTION; - begin transaction isolation level serializable, read only; + begin transaction isolation level serializable read only; NEW_CONNECTION; -begin transaction isolation level serializable, read only; +begin transaction isolation level serializable read only; NEW_CONNECTION; -begin transaction isolation level serializable, read only ; +begin transaction isolation level serializable read only ; NEW_CONNECTION; -begin transaction isolation level serializable, read only ; +begin transaction isolation level serializable read only ; NEW_CONNECTION; -begin transaction isolation level serializable, read only +begin transaction isolation level serializable read only ; NEW_CONNECTION; -begin transaction isolation level serializable, read only; +begin transaction isolation level serializable read only; NEW_CONNECTION; -begin transaction isolation level serializable, read only; +begin transaction isolation level serializable read only; NEW_CONNECTION; begin transaction isolation level -serializable, +serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level serializable, read only; +foo begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only bar; +begin transaction isolation level serializable read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level serializable, read only; +%begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only%; +begin transaction isolation level serializable read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read%only; +begin transaction isolation level serializable read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level serializable, read only; +_begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only_; +begin transaction isolation level serializable read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read_only; +begin transaction isolation level serializable read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level serializable, read only; +&begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only&; +begin transaction isolation level serializable read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read&only; +begin transaction isolation level serializable read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level serializable, read only; +$begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only$; +begin transaction isolation level serializable read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read$only; +begin transaction isolation level serializable read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level serializable, read only; +@begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only@; +begin transaction isolation level serializable read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read@only; +begin transaction isolation level serializable read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level serializable, read only; +!begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only!; +begin transaction isolation level serializable read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read!only; +begin transaction isolation level serializable read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level serializable, read only; +*begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only*; +begin transaction isolation level serializable read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read*only; +begin transaction isolation level serializable read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level serializable, read only; +(begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only(; +begin transaction isolation level serializable read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read(only; +begin transaction isolation level serializable read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level serializable, read only; +)begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only); +begin transaction isolation level serializable read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read)only; +begin transaction isolation level serializable read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level serializable, read only; +-begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only-; +begin transaction isolation level serializable read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read-only; +begin transaction isolation level serializable read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level serializable, read only; ++begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only+; +begin transaction isolation level serializable read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read+only; +begin transaction isolation level serializable read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level serializable, read only; +-#begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only-#; +begin transaction isolation level serializable read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read-#only; +begin transaction isolation level serializable read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level serializable, read only; +/begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only/; +begin transaction isolation level serializable read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read/only; +begin transaction isolation level serializable read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level serializable, read only; +\begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only\; +begin transaction isolation level serializable read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read\only; +begin transaction isolation level serializable read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level serializable, read only; +?begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only?; +begin transaction isolation level serializable read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read?only; +begin transaction isolation level serializable read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level serializable, read only; +-/begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only-/; +begin transaction isolation level serializable read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read-/only; +begin transaction isolation level serializable read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level serializable, read only; +/#begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only/#; +begin transaction isolation level serializable read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read/#only; +begin transaction isolation level serializable read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level serializable, read only; +/-begin transaction isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only/-; +begin transaction isolation level serializable read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read/-only; +begin transaction isolation level serializable read/-only; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable read write; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable read write; NEW_CONNECTION; - start transaction isolation level serializable, read write; + start transaction isolation level serializable read write; NEW_CONNECTION; - start transaction isolation level serializable, read write; + start transaction isolation level serializable read write; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable read write; NEW_CONNECTION; -start transaction isolation level serializable, read write ; +start transaction isolation level serializable read write ; NEW_CONNECTION; -start transaction isolation level serializable, read write ; +start transaction isolation level serializable read write ; NEW_CONNECTION; -start transaction isolation level serializable, read write +start transaction isolation level serializable read write ; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable read write; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable read write; NEW_CONNECTION; start transaction isolation level -serializable, +serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable, read write; +foo start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write bar; +start transaction isolation level serializable read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable, read write; +%start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write%; +start transaction isolation level serializable read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read%write; +start transaction isolation level serializable read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable, read write; +_start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write_; +start transaction isolation level serializable read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read_write; +start transaction isolation level serializable read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable, read write; +&start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write&; +start transaction isolation level serializable read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read&write; +start transaction isolation level serializable read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable, read write; +$start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write$; +start transaction isolation level serializable read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read$write; +start transaction isolation level serializable read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable, read write; +@start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write@; +start transaction isolation level serializable read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read@write; +start transaction isolation level serializable read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable, read write; +!start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write!; +start transaction isolation level serializable read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read!write; +start transaction isolation level serializable read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable, read write; +*start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write*; +start transaction isolation level serializable read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read*write; +start transaction isolation level serializable read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable, read write; +(start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write(; +start transaction isolation level serializable read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read(write; +start transaction isolation level serializable read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable, read write; +)start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write); +start transaction isolation level serializable read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read)write; +start transaction isolation level serializable read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable, read write; +-start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write-; +start transaction isolation level serializable read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read-write; +start transaction isolation level serializable read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable, read write; ++start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write+; +start transaction isolation level serializable read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read+write; +start transaction isolation level serializable read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable, read write; +-#start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write-#; +start transaction isolation level serializable read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read-#write; +start transaction isolation level serializable read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable, read write; +/start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write/; +start transaction isolation level serializable read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read/write; +start transaction isolation level serializable read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable, read write; +\start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write\; +start transaction isolation level serializable read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read\write; +start transaction isolation level serializable read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable, read write; +?start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write?; +start transaction isolation level serializable read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read?write; +start transaction isolation level serializable read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable, read write; +-/start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write-/; +start transaction isolation level serializable read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read-/write; +start transaction isolation level serializable read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable, read write; +/#start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write/#; +start transaction isolation level serializable read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read/#write; +start transaction isolation level serializable read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable, read write; +/-start transaction isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write/-; +start transaction isolation level serializable read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read/-write; +start transaction isolation level serializable read/-write; NEW_CONNECTION; -begin work isolation level serializable, read write; +begin work isolation level serializable read write; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL SERIALIZABLE, READ WRITE; +BEGIN WORK ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -begin work isolation level serializable, read write; +begin work isolation level serializable read write; NEW_CONNECTION; - begin work isolation level serializable, read write; + begin work isolation level serializable read write; NEW_CONNECTION; - begin work isolation level serializable, read write; + begin work isolation level serializable read write; NEW_CONNECTION; -begin work isolation level serializable, read write; +begin work isolation level serializable read write; NEW_CONNECTION; -begin work isolation level serializable, read write ; +begin work isolation level serializable read write ; NEW_CONNECTION; -begin work isolation level serializable, read write ; +begin work isolation level serializable read write ; NEW_CONNECTION; -begin work isolation level serializable, read write +begin work isolation level serializable read write ; NEW_CONNECTION; -begin work isolation level serializable, read write; +begin work isolation level serializable read write; NEW_CONNECTION; -begin work isolation level serializable, read write; +begin work isolation level serializable read write; NEW_CONNECTION; begin work isolation level -serializable, +serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level serializable, read write; +foo begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write bar; +begin work isolation level serializable read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level serializable, read write; +%begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write%; +begin work isolation level serializable read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read%write; +begin work isolation level serializable read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level serializable, read write; +_begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write_; +begin work isolation level serializable read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read_write; +begin work isolation level serializable read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level serializable, read write; +&begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write&; +begin work isolation level serializable read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read&write; +begin work isolation level serializable read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level serializable, read write; +$begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write$; +begin work isolation level serializable read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read$write; +begin work isolation level serializable read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level serializable, read write; +@begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write@; +begin work isolation level serializable read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read@write; +begin work isolation level serializable read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level serializable, read write; +!begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write!; +begin work isolation level serializable read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read!write; +begin work isolation level serializable read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level serializable, read write; +*begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write*; +begin work isolation level serializable read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read*write; +begin work isolation level serializable read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level serializable, read write; +(begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write(; +begin work isolation level serializable read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read(write; +begin work isolation level serializable read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level serializable, read write; +)begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write); +begin work isolation level serializable read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read)write; +begin work isolation level serializable read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level serializable, read write; +-begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write-; +begin work isolation level serializable read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read-write; +begin work isolation level serializable read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level serializable, read write; ++begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write+; +begin work isolation level serializable read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read+write; +begin work isolation level serializable read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level serializable, read write; +-#begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write-#; +begin work isolation level serializable read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read-#write; +begin work isolation level serializable read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level serializable, read write; +/begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write/; +begin work isolation level serializable read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read/write; +begin work isolation level serializable read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level serializable, read write; +\begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write\; +begin work isolation level serializable read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read\write; +begin work isolation level serializable read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level serializable, read write; +?begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write?; +begin work isolation level serializable read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read?write; +begin work isolation level serializable read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level serializable, read write; +-/begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write-/; +begin work isolation level serializable read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read-/write; +begin work isolation level serializable read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level serializable, read write; +/#begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write/#; +begin work isolation level serializable read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read/#write; +begin work isolation level serializable read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level serializable, read write; +/-begin work isolation level serializable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write/-; +begin work isolation level serializable read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read/-write; +begin work isolation level serializable read/-write; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable read only; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE, READ ONLY; +START WORK ISOLATION LEVEL SERIALIZABLE READ ONLY; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable read only; NEW_CONNECTION; - start work isolation level serializable, read only; + start work isolation level serializable read only; NEW_CONNECTION; - start work isolation level serializable, read only; + start work isolation level serializable read only; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable read only; NEW_CONNECTION; -start work isolation level serializable, read only ; +start work isolation level serializable read only ; NEW_CONNECTION; -start work isolation level serializable, read only ; +start work isolation level serializable read only ; NEW_CONNECTION; -start work isolation level serializable, read only +start work isolation level serializable read only ; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable read only; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable read only; NEW_CONNECTION; start work isolation level -serializable, +serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable, read only; +foo start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only bar; +start work isolation level serializable read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable, read only; +%start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only%; +start work isolation level serializable read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read%only; +start work isolation level serializable read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable, read only; +_start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only_; +start work isolation level serializable read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read_only; +start work isolation level serializable read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable, read only; +&start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only&; +start work isolation level serializable read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read&only; +start work isolation level serializable read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable, read only; +$start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only$; +start work isolation level serializable read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read$only; +start work isolation level serializable read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable, read only; +@start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only@; +start work isolation level serializable read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read@only; +start work isolation level serializable read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable, read only; +!start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only!; +start work isolation level serializable read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read!only; +start work isolation level serializable read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable, read only; +*start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only*; +start work isolation level serializable read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read*only; +start work isolation level serializable read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable, read only; +(start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only(; +start work isolation level serializable read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read(only; +start work isolation level serializable read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable, read only; +)start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only); +start work isolation level serializable read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read)only; +start work isolation level serializable read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable, read only; +-start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-; +start work isolation level serializable read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-only; +start work isolation level serializable read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable, read only; ++start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only+; +start work isolation level serializable read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read+only; +start work isolation level serializable read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable, read only; +-#start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-#; +start work isolation level serializable read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-#only; +start work isolation level serializable read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable, read only; +/start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/; +start work isolation level serializable read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/only; +start work isolation level serializable read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable, read only; +\start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only\; +start work isolation level serializable read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read\only; +start work isolation level serializable read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable, read only; +?start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only?; +start work isolation level serializable read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read?only; +start work isolation level serializable read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable, read only; +-/start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-/; +start work isolation level serializable read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-/only; +start work isolation level serializable read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable, read only; +/#start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/#; +start work isolation level serializable read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/#only; +start work isolation level serializable read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable, read only; +/-start work isolation level serializable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/-; +start work isolation level serializable read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/-only; +start work isolation level serializable read/-only; NEW_CONNECTION; -begin not deferrable; +begin isolation level repeatable read read write; NEW_CONNECTION; -BEGIN NOT DEFERRABLE; +BEGIN ISOLATION LEVEL REPEATABLE READ READ WRITE; NEW_CONNECTION; -begin not deferrable; +begin isolation level repeatable read read write; NEW_CONNECTION; - begin not deferrable; + begin isolation level repeatable read read write; NEW_CONNECTION; - begin not deferrable; + begin isolation level repeatable read read write; NEW_CONNECTION; -begin not deferrable; +begin isolation level repeatable read read write; NEW_CONNECTION; -begin not deferrable ; +begin isolation level repeatable read read write ; NEW_CONNECTION; -begin not deferrable ; +begin isolation level repeatable read read write ; NEW_CONNECTION; -begin not deferrable +begin isolation level repeatable read read write ; NEW_CONNECTION; -begin not deferrable; +begin isolation level repeatable read read write; NEW_CONNECTION; -begin not deferrable; +begin isolation level repeatable read read write; NEW_CONNECTION; begin -not -deferrable; +isolation +level +repeatable +read +read +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable; +foo begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable bar; +begin isolation level repeatable read read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable; +%begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable%; +begin isolation level repeatable read read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not%deferrable; +begin isolation level repeatable read read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable; +_begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable_; +begin isolation level repeatable read read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not_deferrable; +begin isolation level repeatable read read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable; +&begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable&; +begin isolation level repeatable read read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not&deferrable; +begin isolation level repeatable read read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable; +$begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable$; +begin isolation level repeatable read read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not$deferrable; +begin isolation level repeatable read read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable; +@begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable@; +begin isolation level repeatable read read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not@deferrable; +begin isolation level repeatable read read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable; +!begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable!; +begin isolation level repeatable read read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not!deferrable; +begin isolation level repeatable read read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable; +*begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable*; +begin isolation level repeatable read read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not*deferrable; +begin isolation level repeatable read read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable; +(begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable(; +begin isolation level repeatable read read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not(deferrable; +begin isolation level repeatable read read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable; +)begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable); +begin isolation level repeatable read read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not)deferrable; +begin isolation level repeatable read read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable; +-begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable-; +begin isolation level repeatable read read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not-deferrable; +begin isolation level repeatable read read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable; ++begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable+; +begin isolation level repeatable read read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not+deferrable; +begin isolation level repeatable read read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable; +-#begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable-#; +begin isolation level repeatable read read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not-#deferrable; +begin isolation level repeatable read read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable; +/begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable/; +begin isolation level repeatable read read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not/deferrable; +begin isolation level repeatable read read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable; +\begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable\; +begin isolation level repeatable read read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not\deferrable; +begin isolation level repeatable read read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable; +?begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable?; +begin isolation level repeatable read read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not?deferrable; +begin isolation level repeatable read read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable; +-/begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable-/; +begin isolation level repeatable read read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not-/deferrable; +begin isolation level repeatable read read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable; +/#begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable/#; +begin isolation level repeatable read read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not/#deferrable; +begin isolation level repeatable read read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable; +/-begin isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable/-; +begin isolation level repeatable read read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not/-deferrable; +begin isolation level repeatable read read/-write; NEW_CONNECTION; -start not deferrable; +start isolation level repeatable read read write; NEW_CONNECTION; -START NOT DEFERRABLE; +START ISOLATION LEVEL REPEATABLE READ READ WRITE; NEW_CONNECTION; -start not deferrable; +start isolation level repeatable read read write; NEW_CONNECTION; - start not deferrable; + start isolation level repeatable read read write; NEW_CONNECTION; - start not deferrable; + start isolation level repeatable read read write; NEW_CONNECTION; -start not deferrable; +start isolation level repeatable read read write; NEW_CONNECTION; -start not deferrable ; +start isolation level repeatable read read write ; NEW_CONNECTION; -start not deferrable ; +start isolation level repeatable read read write ; NEW_CONNECTION; -start not deferrable +start isolation level repeatable read read write ; NEW_CONNECTION; -start not deferrable; +start isolation level repeatable read read write; NEW_CONNECTION; -start not deferrable; +start isolation level repeatable read read write; NEW_CONNECTION; start -not -deferrable; +isolation +level +repeatable +read +read +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start not deferrable; +foo start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable bar; +start isolation level repeatable read read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start not deferrable; +%start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable%; +start isolation level repeatable read read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not%deferrable; +start isolation level repeatable read read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start not deferrable; +_start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable_; +start isolation level repeatable read read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not_deferrable; +start isolation level repeatable read read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start not deferrable; +&start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable&; +start isolation level repeatable read read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not&deferrable; +start isolation level repeatable read read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start not deferrable; +$start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable$; +start isolation level repeatable read read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not$deferrable; +start isolation level repeatable read read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start not deferrable; +@start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable@; +start isolation level repeatable read read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not@deferrable; +start isolation level repeatable read read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start not deferrable; +!start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable!; +start isolation level repeatable read read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not!deferrable; +start isolation level repeatable read read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start not deferrable; +*start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable*; +start isolation level repeatable read read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not*deferrable; +start isolation level repeatable read read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start not deferrable; +(start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable(; +start isolation level repeatable read read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not(deferrable; +start isolation level repeatable read read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start not deferrable; +)start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable); +start isolation level repeatable read read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not)deferrable; +start isolation level repeatable read read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start not deferrable; +-start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable-; +start isolation level repeatable read read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not-deferrable; +start isolation level repeatable read read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start not deferrable; ++start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable+; +start isolation level repeatable read read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not+deferrable; +start isolation level repeatable read read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start not deferrable; +-#start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable-#; +start isolation level repeatable read read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not-#deferrable; +start isolation level repeatable read read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start not deferrable; +/start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable/; +start isolation level repeatable read read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not/deferrable; +start isolation level repeatable read read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start not deferrable; +\start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable\; +start isolation level repeatable read read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not\deferrable; +start isolation level repeatable read read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start not deferrable; +?start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable?; +start isolation level repeatable read read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not?deferrable; +start isolation level repeatable read read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start not deferrable; +-/start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable-/; +start isolation level repeatable read read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not-/deferrable; +start isolation level repeatable read read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start not deferrable; +/#start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable/#; +start isolation level repeatable read read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not/#deferrable; +start isolation level repeatable read read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start not deferrable; +/-start isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not deferrable/-; +start isolation level repeatable read read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start not/-deferrable; +start isolation level repeatable read read/-write; NEW_CONNECTION; -begin transaction not deferrable; +begin transaction isolation level repeatable read read only; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE; +BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY; NEW_CONNECTION; -begin transaction not deferrable; +begin transaction isolation level repeatable read read only; NEW_CONNECTION; - begin transaction not deferrable; + begin transaction isolation level repeatable read read only; NEW_CONNECTION; - begin transaction not deferrable; + begin transaction isolation level repeatable read read only; NEW_CONNECTION; -begin transaction not deferrable; +begin transaction isolation level repeatable read read only; NEW_CONNECTION; -begin transaction not deferrable ; +begin transaction isolation level repeatable read read only ; NEW_CONNECTION; -begin transaction not deferrable ; +begin transaction isolation level repeatable read read only ; NEW_CONNECTION; -begin transaction not deferrable +begin transaction isolation level repeatable read read only ; NEW_CONNECTION; -begin transaction not deferrable; +begin transaction isolation level repeatable read read only; NEW_CONNECTION; -begin transaction not deferrable; +begin transaction isolation level repeatable read read only; NEW_CONNECTION; begin transaction -not -deferrable; +isolation +level +repeatable +read +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable; +foo begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable bar; +begin transaction isolation level repeatable read read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable; +%begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable%; +begin transaction isolation level repeatable read read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not%deferrable; +begin transaction isolation level repeatable read read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable; +_begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable_; +begin transaction isolation level repeatable read read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not_deferrable; +begin transaction isolation level repeatable read read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable; +&begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable&; +begin transaction isolation level repeatable read read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not&deferrable; +begin transaction isolation level repeatable read read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable; +$begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable$; +begin transaction isolation level repeatable read read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not$deferrable; +begin transaction isolation level repeatable read read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable; +@begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable@; +begin transaction isolation level repeatable read read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not@deferrable; +begin transaction isolation level repeatable read read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable; +!begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable!; +begin transaction isolation level repeatable read read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not!deferrable; +begin transaction isolation level repeatable read read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable; +*begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable*; +begin transaction isolation level repeatable read read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not*deferrable; +begin transaction isolation level repeatable read read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable; +(begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable(; +begin transaction isolation level repeatable read read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not(deferrable; +begin transaction isolation level repeatable read read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable; +)begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable); +begin transaction isolation level repeatable read read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not)deferrable; +begin transaction isolation level repeatable read read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable; +-begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable-; +begin transaction isolation level repeatable read read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not-deferrable; +begin transaction isolation level repeatable read read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable; ++begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable+; +begin transaction isolation level repeatable read read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not+deferrable; +begin transaction isolation level repeatable read read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable; +-#begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable-#; +begin transaction isolation level repeatable read read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not-#deferrable; +begin transaction isolation level repeatable read read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable; +/begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable/; +begin transaction isolation level repeatable read read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not/deferrable; +begin transaction isolation level repeatable read read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable; +\begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable\; +begin transaction isolation level repeatable read read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not\deferrable; +begin transaction isolation level repeatable read read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable; +?begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable?; +begin transaction isolation level repeatable read read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not?deferrable; +begin transaction isolation level repeatable read read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable; +-/begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable-/; +begin transaction isolation level repeatable read read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not-/deferrable; +begin transaction isolation level repeatable read read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable; +/#begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable/#; +begin transaction isolation level repeatable read read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not/#deferrable; +begin transaction isolation level repeatable read read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable; +/-begin transaction isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable/-; +begin transaction isolation level repeatable read read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not/-deferrable; +begin transaction isolation level repeatable read read/-only; NEW_CONNECTION; -start transaction not deferrable; +start transaction isolation level repeatable read read write; NEW_CONNECTION; -START TRANSACTION NOT DEFERRABLE; +START TRANSACTION ISOLATION LEVEL REPEATABLE READ READ WRITE; NEW_CONNECTION; -start transaction not deferrable; +start transaction isolation level repeatable read read write; NEW_CONNECTION; - start transaction not deferrable; + start transaction isolation level repeatable read read write; NEW_CONNECTION; - start transaction not deferrable; + start transaction isolation level repeatable read read write; NEW_CONNECTION; -start transaction not deferrable; +start transaction isolation level repeatable read read write; NEW_CONNECTION; -start transaction not deferrable ; +start transaction isolation level repeatable read read write ; NEW_CONNECTION; -start transaction not deferrable ; +start transaction isolation level repeatable read read write ; NEW_CONNECTION; -start transaction not deferrable +start transaction isolation level repeatable read read write ; NEW_CONNECTION; -start transaction not deferrable; +start transaction isolation level repeatable read read write; NEW_CONNECTION; -start transaction not deferrable; +start transaction isolation level repeatable read read write; NEW_CONNECTION; start transaction -not -deferrable; +isolation +level +repeatable +read +read +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction not deferrable; +foo start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable bar; +start transaction isolation level repeatable read read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction not deferrable; +%start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable%; +start transaction isolation level repeatable read read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not%deferrable; +start transaction isolation level repeatable read read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction not deferrable; +_start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable_; +start transaction isolation level repeatable read read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not_deferrable; +start transaction isolation level repeatable read read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction not deferrable; +&start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable&; +start transaction isolation level repeatable read read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not&deferrable; +start transaction isolation level repeatable read read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction not deferrable; +$start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable$; +start transaction isolation level repeatable read read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not$deferrable; +start transaction isolation level repeatable read read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction not deferrable; +@start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable@; +start transaction isolation level repeatable read read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not@deferrable; +start transaction isolation level repeatable read read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction not deferrable; +!start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable!; +start transaction isolation level repeatable read read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not!deferrable; +start transaction isolation level repeatable read read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction not deferrable; +*start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable*; +start transaction isolation level repeatable read read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not*deferrable; +start transaction isolation level repeatable read read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction not deferrable; +(start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable(; +start transaction isolation level repeatable read read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not(deferrable; +start transaction isolation level repeatable read read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction not deferrable; +)start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable); +start transaction isolation level repeatable read read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not)deferrable; +start transaction isolation level repeatable read read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction not deferrable; +-start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable-; +start transaction isolation level repeatable read read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not-deferrable; +start transaction isolation level repeatable read read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction not deferrable; ++start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable+; +start transaction isolation level repeatable read read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not+deferrable; +start transaction isolation level repeatable read read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction not deferrable; +-#start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable-#; +start transaction isolation level repeatable read read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not-#deferrable; +start transaction isolation level repeatable read read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction not deferrable; +/start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable/; +start transaction isolation level repeatable read read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not/deferrable; +start transaction isolation level repeatable read read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction not deferrable; +\start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable\; +start transaction isolation level repeatable read read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not\deferrable; +start transaction isolation level repeatable read read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction not deferrable; +?start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable?; +start transaction isolation level repeatable read read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not?deferrable; +start transaction isolation level repeatable read read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction not deferrable; +-/start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable-/; +start transaction isolation level repeatable read read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not-/deferrable; +start transaction isolation level repeatable read read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction not deferrable; +/#start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable/#; +start transaction isolation level repeatable read read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not/#deferrable; +start transaction isolation level repeatable read read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction not deferrable; +/-start transaction isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable/-; +start transaction isolation level repeatable read read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not/-deferrable; +start transaction isolation level repeatable read read/-write; NEW_CONNECTION; -begin work not deferrable; +begin work isolation level repeatable read read write; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE; +BEGIN WORK ISOLATION LEVEL REPEATABLE READ READ WRITE; NEW_CONNECTION; -begin work not deferrable; +begin work isolation level repeatable read read write; NEW_CONNECTION; - begin work not deferrable; + begin work isolation level repeatable read read write; NEW_CONNECTION; - begin work not deferrable; + begin work isolation level repeatable read read write; NEW_CONNECTION; -begin work not deferrable; +begin work isolation level repeatable read read write; NEW_CONNECTION; -begin work not deferrable ; +begin work isolation level repeatable read read write ; NEW_CONNECTION; -begin work not deferrable ; +begin work isolation level repeatable read read write ; NEW_CONNECTION; -begin work not deferrable +begin work isolation level repeatable read read write ; NEW_CONNECTION; -begin work not deferrable; +begin work isolation level repeatable read read write; NEW_CONNECTION; -begin work not deferrable; +begin work isolation level repeatable read read write; NEW_CONNECTION; begin work -not -deferrable; +isolation +level +repeatable +read +read +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable; +foo begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable bar; +begin work isolation level repeatable read read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable; +%begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable%; +begin work isolation level repeatable read read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not%deferrable; +begin work isolation level repeatable read read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable; +_begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable_; +begin work isolation level repeatable read read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not_deferrable; +begin work isolation level repeatable read read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable; +&begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable&; +begin work isolation level repeatable read read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not&deferrable; +begin work isolation level repeatable read read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable; +$begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable$; +begin work isolation level repeatable read read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not$deferrable; +begin work isolation level repeatable read read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable; +@begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable@; +begin work isolation level repeatable read read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not@deferrable; +begin work isolation level repeatable read read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable; +!begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable!; +begin work isolation level repeatable read read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not!deferrable; +begin work isolation level repeatable read read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable; +*begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable*; +begin work isolation level repeatable read read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not*deferrable; +begin work isolation level repeatable read read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable; +(begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable(; +begin work isolation level repeatable read read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not(deferrable; +begin work isolation level repeatable read read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable; +)begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable); +begin work isolation level repeatable read read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not)deferrable; +begin work isolation level repeatable read read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable; +-begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable-; +begin work isolation level repeatable read read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not-deferrable; +begin work isolation level repeatable read read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable; ++begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable+; +begin work isolation level repeatable read read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not+deferrable; +begin work isolation level repeatable read read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable; +-#begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable-#; +begin work isolation level repeatable read read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not-#deferrable; +begin work isolation level repeatable read read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable; +/begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable/; +begin work isolation level repeatable read read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not/deferrable; +begin work isolation level repeatable read read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable; +\begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable\; +begin work isolation level repeatable read read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not\deferrable; +begin work isolation level repeatable read read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable; +?begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable?; +begin work isolation level repeatable read read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not?deferrable; +begin work isolation level repeatable read read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable; +-/begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable-/; +begin work isolation level repeatable read read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not-/deferrable; +begin work isolation level repeatable read read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable; +/#begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable/#; +begin work isolation level repeatable read read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not/#deferrable; +begin work isolation level repeatable read read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable; +/-begin work isolation level repeatable read read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable/-; +begin work isolation level repeatable read read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not/-deferrable; +begin work isolation level repeatable read read/-write; NEW_CONNECTION; -start work not deferrable; +start work isolation level repeatable read read only; NEW_CONNECTION; -START WORK NOT DEFERRABLE; +START WORK ISOLATION LEVEL REPEATABLE READ READ ONLY; NEW_CONNECTION; -start work not deferrable; +start work isolation level repeatable read read only; NEW_CONNECTION; - start work not deferrable; + start work isolation level repeatable read read only; NEW_CONNECTION; - start work not deferrable; + start work isolation level repeatable read read only; NEW_CONNECTION; -start work not deferrable; +start work isolation level repeatable read read only; NEW_CONNECTION; -start work not deferrable ; +start work isolation level repeatable read read only ; NEW_CONNECTION; -start work not deferrable ; +start work isolation level repeatable read read only ; NEW_CONNECTION; -start work not deferrable +start work isolation level repeatable read read only ; NEW_CONNECTION; -start work not deferrable; +start work isolation level repeatable read read only; NEW_CONNECTION; -start work not deferrable; +start work isolation level repeatable read read only; NEW_CONNECTION; start work -not -deferrable; +isolation +level +repeatable +read +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work not deferrable; +foo start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable bar; +start work isolation level repeatable read read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work not deferrable; +%start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable%; +start work isolation level repeatable read read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not%deferrable; +start work isolation level repeatable read read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work not deferrable; +_start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable_; +start work isolation level repeatable read read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not_deferrable; +start work isolation level repeatable read read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work not deferrable; +&start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable&; +start work isolation level repeatable read read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not&deferrable; +start work isolation level repeatable read read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work not deferrable; +$start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable$; +start work isolation level repeatable read read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not$deferrable; +start work isolation level repeatable read read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work not deferrable; +@start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable@; +start work isolation level repeatable read read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not@deferrable; +start work isolation level repeatable read read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work not deferrable; +!start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable!; +start work isolation level repeatable read read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not!deferrable; +start work isolation level repeatable read read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work not deferrable; +*start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable*; +start work isolation level repeatable read read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not*deferrable; +start work isolation level repeatable read read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work not deferrable; +(start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable(; +start work isolation level repeatable read read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not(deferrable; +start work isolation level repeatable read read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work not deferrable; +)start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable); +start work isolation level repeatable read read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not)deferrable; +start work isolation level repeatable read read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work not deferrable; +-start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable-; +start work isolation level repeatable read read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not-deferrable; +start work isolation level repeatable read read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work not deferrable; ++start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable+; +start work isolation level repeatable read read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not+deferrable; +start work isolation level repeatable read read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work not deferrable; +-#start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable-#; +start work isolation level repeatable read read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not-#deferrable; +start work isolation level repeatable read read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work not deferrable; +/start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable/; +start work isolation level repeatable read read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not/deferrable; +start work isolation level repeatable read read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work not deferrable; +\start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable\; +start work isolation level repeatable read read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not\deferrable; +start work isolation level repeatable read read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work not deferrable; +?start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable?; +start work isolation level repeatable read read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not?deferrable; +start work isolation level repeatable read read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work not deferrable; +-/start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable-/; +start work isolation level repeatable read read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not-/deferrable; +start work isolation level repeatable read read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work not deferrable; +/#start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable/#; +start work isolation level repeatable read read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not/#deferrable; +start work isolation level repeatable read read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work not deferrable; +/-start work isolation level repeatable read read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable/-; +start work isolation level repeatable read read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not/-deferrable; +start work isolation level repeatable read read/-only; NEW_CONNECTION; -begin read only not deferrable; +begin isolation level serializable, read write; NEW_CONNECTION; -BEGIN READ ONLY NOT DEFERRABLE; +BEGIN ISOLATION LEVEL SERIALIZABLE, READ WRITE; NEW_CONNECTION; -begin read only not deferrable; +begin isolation level serializable, read write; NEW_CONNECTION; - begin read only not deferrable; + begin isolation level serializable, read write; NEW_CONNECTION; - begin read only not deferrable; + begin isolation level serializable, read write; NEW_CONNECTION; -begin read only not deferrable; +begin isolation level serializable, read write; NEW_CONNECTION; -begin read only not deferrable ; +begin isolation level serializable, read write ; NEW_CONNECTION; -begin read only not deferrable ; +begin isolation level serializable, read write ; NEW_CONNECTION; -begin read only not deferrable +begin isolation level serializable, read write ; NEW_CONNECTION; -begin read only not deferrable; +begin isolation level serializable, read write; NEW_CONNECTION; -begin read only not deferrable; +begin isolation level serializable, read write; NEW_CONNECTION; begin +isolation +level +serializable, read -only -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin read only not deferrable; +foo begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable bar; +begin isolation level serializable, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin read only not deferrable; +%begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable%; +begin isolation level serializable, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not%deferrable; +begin isolation level serializable, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin read only not deferrable; +_begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable_; +begin isolation level serializable, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not_deferrable; +begin isolation level serializable, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin read only not deferrable; +&begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable&; +begin isolation level serializable, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not&deferrable; +begin isolation level serializable, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin read only not deferrable; +$begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable$; +begin isolation level serializable, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not$deferrable; +begin isolation level serializable, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin read only not deferrable; +@begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable@; +begin isolation level serializable, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not@deferrable; +begin isolation level serializable, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin read only not deferrable; +!begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable!; +begin isolation level serializable, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not!deferrable; +begin isolation level serializable, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin read only not deferrable; +*begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable*; +begin isolation level serializable, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not*deferrable; +begin isolation level serializable, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin read only not deferrable; +(begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable(; +begin isolation level serializable, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not(deferrable; +begin isolation level serializable, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin read only not deferrable; +)begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable); +begin isolation level serializable, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not)deferrable; +begin isolation level serializable, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin read only not deferrable; +-begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable-; +begin isolation level serializable, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not-deferrable; +begin isolation level serializable, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin read only not deferrable; ++begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable+; +begin isolation level serializable, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not+deferrable; +begin isolation level serializable, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin read only not deferrable; +-#begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable-#; +begin isolation level serializable, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not-#deferrable; +begin isolation level serializable, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin read only not deferrable; +/begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable/; +begin isolation level serializable, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not/deferrable; +begin isolation level serializable, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin read only not deferrable; +\begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable\; +begin isolation level serializable, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not\deferrable; +begin isolation level serializable, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin read only not deferrable; +?begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable?; +begin isolation level serializable, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not?deferrable; +begin isolation level serializable, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin read only not deferrable; +-/begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable-/; +begin isolation level serializable, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not-/deferrable; +begin isolation level serializable, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin read only not deferrable; +/#begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable/#; +begin isolation level serializable, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not/#deferrable; +begin isolation level serializable, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin read only not deferrable; +/-begin isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not deferrable/-; +begin isolation level serializable, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read only not/-deferrable; +begin isolation level serializable, read/-write; NEW_CONNECTION; -start read only not deferrable; +start isolation level serializable, read write; NEW_CONNECTION; -START READ ONLY NOT DEFERRABLE; +START ISOLATION LEVEL SERIALIZABLE, READ WRITE; NEW_CONNECTION; -start read only not deferrable; +start isolation level serializable, read write; NEW_CONNECTION; - start read only not deferrable; + start isolation level serializable, read write; NEW_CONNECTION; - start read only not deferrable; + start isolation level serializable, read write; NEW_CONNECTION; -start read only not deferrable; +start isolation level serializable, read write; NEW_CONNECTION; -start read only not deferrable ; +start isolation level serializable, read write ; NEW_CONNECTION; -start read only not deferrable ; +start isolation level serializable, read write ; NEW_CONNECTION; -start read only not deferrable +start isolation level serializable, read write ; NEW_CONNECTION; -start read only not deferrable; +start isolation level serializable, read write; NEW_CONNECTION; -start read only not deferrable; +start isolation level serializable, read write; NEW_CONNECTION; start +isolation +level +serializable, read -only -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start read only not deferrable; +foo start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable bar; +start isolation level serializable, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start read only not deferrable; +%start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable%; +start isolation level serializable, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not%deferrable; +start isolation level serializable, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start read only not deferrable; +_start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable_; +start isolation level serializable, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not_deferrable; +start isolation level serializable, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start read only not deferrable; +&start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable&; +start isolation level serializable, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not&deferrable; +start isolation level serializable, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start read only not deferrable; +$start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable$; +start isolation level serializable, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not$deferrable; +start isolation level serializable, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start read only not deferrable; +@start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable@; +start isolation level serializable, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not@deferrable; +start isolation level serializable, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start read only not deferrable; +!start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable!; +start isolation level serializable, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not!deferrable; +start isolation level serializable, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start read only not deferrable; +*start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable*; +start isolation level serializable, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not*deferrable; +start isolation level serializable, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start read only not deferrable; +(start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable(; +start isolation level serializable, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not(deferrable; +start isolation level serializable, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start read only not deferrable; +)start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable); +start isolation level serializable, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not)deferrable; +start isolation level serializable, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start read only not deferrable; +-start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable-; +start isolation level serializable, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not-deferrable; +start isolation level serializable, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start read only not deferrable; ++start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable+; +start isolation level serializable, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not+deferrable; +start isolation level serializable, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start read only not deferrable; +-#start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable-#; +start isolation level serializable, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not-#deferrable; +start isolation level serializable, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start read only not deferrable; +/start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable/; +start isolation level serializable, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not/deferrable; +start isolation level serializable, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start read only not deferrable; +\start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable\; +start isolation level serializable, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not\deferrable; +start isolation level serializable, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start read only not deferrable; +?start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable?; +start isolation level serializable, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not?deferrable; +start isolation level serializable, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start read only not deferrable; +-/start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable-/; +start isolation level serializable, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not-/deferrable; +start isolation level serializable, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start read only not deferrable; +/#start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable/#; +start isolation level serializable, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not/#deferrable; +start isolation level serializable, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start read only not deferrable; +/-start isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not deferrable/-; +start isolation level serializable, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only not/-deferrable; +start isolation level serializable, read/-write; NEW_CONNECTION; -begin transaction read only not deferrable; +begin transaction isolation level serializable, read only; NEW_CONNECTION; -BEGIN TRANSACTION READ ONLY NOT DEFERRABLE; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY; NEW_CONNECTION; -begin transaction read only not deferrable; +begin transaction isolation level serializable, read only; NEW_CONNECTION; - begin transaction read only not deferrable; + begin transaction isolation level serializable, read only; NEW_CONNECTION; - begin transaction read only not deferrable; + begin transaction isolation level serializable, read only; NEW_CONNECTION; -begin transaction read only not deferrable; +begin transaction isolation level serializable, read only; NEW_CONNECTION; -begin transaction read only not deferrable ; +begin transaction isolation level serializable, read only ; NEW_CONNECTION; -begin transaction read only not deferrable ; +begin transaction isolation level serializable, read only ; NEW_CONNECTION; -begin transaction read only not deferrable +begin transaction isolation level serializable, read only ; NEW_CONNECTION; -begin transaction read only not deferrable; +begin transaction isolation level serializable, read only; NEW_CONNECTION; -begin transaction read only not deferrable; +begin transaction isolation level serializable, read only; NEW_CONNECTION; begin transaction +isolation +level +serializable, read -only -not -deferrable; +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction read only not deferrable; +foo begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable bar; +begin transaction isolation level serializable, read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction read only not deferrable; +%begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable%; +begin transaction isolation level serializable, read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not%deferrable; +begin transaction isolation level serializable, read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction read only not deferrable; +_begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable_; +begin transaction isolation level serializable, read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not_deferrable; +begin transaction isolation level serializable, read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction read only not deferrable; +&begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable&; +begin transaction isolation level serializable, read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not&deferrable; +begin transaction isolation level serializable, read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction read only not deferrable; +$begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable$; +begin transaction isolation level serializable, read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not$deferrable; +begin transaction isolation level serializable, read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction read only not deferrable; +@begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable@; +begin transaction isolation level serializable, read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not@deferrable; +begin transaction isolation level serializable, read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction read only not deferrable; +!begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable!; +begin transaction isolation level serializable, read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not!deferrable; +begin transaction isolation level serializable, read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction read only not deferrable; +*begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable*; +begin transaction isolation level serializable, read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not*deferrable; +begin transaction isolation level serializable, read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction read only not deferrable; +(begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable(; +begin transaction isolation level serializable, read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not(deferrable; +begin transaction isolation level serializable, read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction read only not deferrable; +)begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable); +begin transaction isolation level serializable, read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not)deferrable; +begin transaction isolation level serializable, read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction read only not deferrable; +-begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable-; +begin transaction isolation level serializable, read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not-deferrable; +begin transaction isolation level serializable, read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction read only not deferrable; ++begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable+; +begin transaction isolation level serializable, read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not+deferrable; +begin transaction isolation level serializable, read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction read only not deferrable; +-#begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable-#; +begin transaction isolation level serializable, read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not-#deferrable; +begin transaction isolation level serializable, read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction read only not deferrable; +/begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable/; +begin transaction isolation level serializable, read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not/deferrable; +begin transaction isolation level serializable, read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction read only not deferrable; +\begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable\; +begin transaction isolation level serializable, read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not\deferrable; +begin transaction isolation level serializable, read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction read only not deferrable; +?begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable?; +begin transaction isolation level serializable, read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not?deferrable; +begin transaction isolation level serializable, read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction read only not deferrable; +-/begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable-/; +begin transaction isolation level serializable, read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not-/deferrable; +begin transaction isolation level serializable, read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction read only not deferrable; +/#begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable/#; +begin transaction isolation level serializable, read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not/#deferrable; +begin transaction isolation level serializable, read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction read only not deferrable; +/-begin transaction isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not deferrable/-; +begin transaction isolation level serializable, read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read only not/-deferrable; +begin transaction isolation level serializable, read/-only; NEW_CONNECTION; -start transaction read only not deferrable; +start transaction isolation level serializable, read write; NEW_CONNECTION; -START TRANSACTION READ ONLY NOT DEFERRABLE; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE; NEW_CONNECTION; -start transaction read only not deferrable; +start transaction isolation level serializable, read write; NEW_CONNECTION; - start transaction read only not deferrable; + start transaction isolation level serializable, read write; NEW_CONNECTION; - start transaction read only not deferrable; + start transaction isolation level serializable, read write; NEW_CONNECTION; -start transaction read only not deferrable; +start transaction isolation level serializable, read write; NEW_CONNECTION; -start transaction read only not deferrable ; +start transaction isolation level serializable, read write ; NEW_CONNECTION; -start transaction read only not deferrable ; +start transaction isolation level serializable, read write ; NEW_CONNECTION; -start transaction read only not deferrable +start transaction isolation level serializable, read write ; NEW_CONNECTION; -start transaction read only not deferrable; +start transaction isolation level serializable, read write; NEW_CONNECTION; -start transaction read only not deferrable; +start transaction isolation level serializable, read write; NEW_CONNECTION; start transaction +isolation +level +serializable, read -only -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction read only not deferrable; +foo start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable bar; +start transaction isolation level serializable, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction read only not deferrable; +%start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable%; +start transaction isolation level serializable, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not%deferrable; +start transaction isolation level serializable, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction read only not deferrable; +_start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable_; +start transaction isolation level serializable, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not_deferrable; +start transaction isolation level serializable, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction read only not deferrable; +&start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable&; +start transaction isolation level serializable, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not&deferrable; +start transaction isolation level serializable, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction read only not deferrable; +$start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable$; +start transaction isolation level serializable, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not$deferrable; +start transaction isolation level serializable, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction read only not deferrable; +@start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable@; +start transaction isolation level serializable, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not@deferrable; +start transaction isolation level serializable, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction read only not deferrable; +!start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable!; +start transaction isolation level serializable, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not!deferrable; +start transaction isolation level serializable, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction read only not deferrable; +*start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable*; +start transaction isolation level serializable, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not*deferrable; +start transaction isolation level serializable, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction read only not deferrable; +(start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable(; +start transaction isolation level serializable, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not(deferrable; +start transaction isolation level serializable, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction read only not deferrable; +)start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable); +start transaction isolation level serializable, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not)deferrable; +start transaction isolation level serializable, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction read only not deferrable; +-start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable-; +start transaction isolation level serializable, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not-deferrable; +start transaction isolation level serializable, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction read only not deferrable; ++start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable+; +start transaction isolation level serializable, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not+deferrable; +start transaction isolation level serializable, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction read only not deferrable; +-#start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable-#; +start transaction isolation level serializable, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not-#deferrable; +start transaction isolation level serializable, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction read only not deferrable; +/start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable/; +start transaction isolation level serializable, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not/deferrable; +start transaction isolation level serializable, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction read only not deferrable; +\start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable\; +start transaction isolation level serializable, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not\deferrable; +start transaction isolation level serializable, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction read only not deferrable; +?start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable?; +start transaction isolation level serializable, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not?deferrable; +start transaction isolation level serializable, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction read only not deferrable; +-/start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable-/; +start transaction isolation level serializable, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not-/deferrable; +start transaction isolation level serializable, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction read only not deferrable; +/#start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable/#; +start transaction isolation level serializable, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not/#deferrable; +start transaction isolation level serializable, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction read only not deferrable; +/-start transaction isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not deferrable/-; +start transaction isolation level serializable, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only not/-deferrable; +start transaction isolation level serializable, read/-write; NEW_CONNECTION; -begin work read only not deferrable; +begin work isolation level serializable, read write; NEW_CONNECTION; -BEGIN WORK READ ONLY NOT DEFERRABLE; +BEGIN WORK ISOLATION LEVEL SERIALIZABLE, READ WRITE; NEW_CONNECTION; -begin work read only not deferrable; +begin work isolation level serializable, read write; NEW_CONNECTION; - begin work read only not deferrable; + begin work isolation level serializable, read write; NEW_CONNECTION; - begin work read only not deferrable; + begin work isolation level serializable, read write; NEW_CONNECTION; -begin work read only not deferrable; +begin work isolation level serializable, read write; NEW_CONNECTION; -begin work read only not deferrable ; +begin work isolation level serializable, read write ; NEW_CONNECTION; -begin work read only not deferrable ; +begin work isolation level serializable, read write ; NEW_CONNECTION; -begin work read only not deferrable +begin work isolation level serializable, read write ; NEW_CONNECTION; -begin work read only not deferrable; +begin work isolation level serializable, read write; NEW_CONNECTION; -begin work read only not deferrable; +begin work isolation level serializable, read write; NEW_CONNECTION; begin work +isolation +level +serializable, read -only -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work read only not deferrable; +foo begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable bar; +begin work isolation level serializable, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work read only not deferrable; +%begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable%; +begin work isolation level serializable, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not%deferrable; +begin work isolation level serializable, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work read only not deferrable; +_begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable_; +begin work isolation level serializable, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not_deferrable; +begin work isolation level serializable, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work read only not deferrable; +&begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable&; +begin work isolation level serializable, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not&deferrable; +begin work isolation level serializable, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work read only not deferrable; +$begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable$; +begin work isolation level serializable, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not$deferrable; +begin work isolation level serializable, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work read only not deferrable; +@begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable@; +begin work isolation level serializable, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not@deferrable; +begin work isolation level serializable, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work read only not deferrable; +!begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable!; +begin work isolation level serializable, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not!deferrable; +begin work isolation level serializable, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work read only not deferrable; +*begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable*; +begin work isolation level serializable, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not*deferrable; +begin work isolation level serializable, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work read only not deferrable; +(begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable(; +begin work isolation level serializable, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not(deferrable; +begin work isolation level serializable, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work read only not deferrable; +)begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable); +begin work isolation level serializable, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not)deferrable; +begin work isolation level serializable, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work read only not deferrable; +-begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable-; +begin work isolation level serializable, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not-deferrable; +begin work isolation level serializable, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work read only not deferrable; ++begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable+; +begin work isolation level serializable, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not+deferrable; +begin work isolation level serializable, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work read only not deferrable; +-#begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable-#; +begin work isolation level serializable, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not-#deferrable; +begin work isolation level serializable, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work read only not deferrable; +/begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable/; +begin work isolation level serializable, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not/deferrable; +begin work isolation level serializable, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work read only not deferrable; +\begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable\; +begin work isolation level serializable, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not\deferrable; +begin work isolation level serializable, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work read only not deferrable; +?begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable?; +begin work isolation level serializable, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not?deferrable; +begin work isolation level serializable, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work read only not deferrable; +-/begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable-/; +begin work isolation level serializable, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not-/deferrable; +begin work isolation level serializable, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work read only not deferrable; +/#begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable/#; +begin work isolation level serializable, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not/#deferrable; +begin work isolation level serializable, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work read only not deferrable; +/-begin work isolation level serializable, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not deferrable/-; +begin work isolation level serializable, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read only not/-deferrable; +begin work isolation level serializable, read/-write; NEW_CONNECTION; -start work read only not deferrable; +start work isolation level serializable, read only; NEW_CONNECTION; -START WORK READ ONLY NOT DEFERRABLE; +START WORK ISOLATION LEVEL SERIALIZABLE, READ ONLY; NEW_CONNECTION; -start work read only not deferrable; +start work isolation level serializable, read only; NEW_CONNECTION; - start work read only not deferrable; + start work isolation level serializable, read only; NEW_CONNECTION; - start work read only not deferrable; + start work isolation level serializable, read only; NEW_CONNECTION; -start work read only not deferrable; +start work isolation level serializable, read only; NEW_CONNECTION; -start work read only not deferrable ; +start work isolation level serializable, read only ; NEW_CONNECTION; -start work read only not deferrable ; +start work isolation level serializable, read only ; NEW_CONNECTION; -start work read only not deferrable +start work isolation level serializable, read only ; NEW_CONNECTION; -start work read only not deferrable; +start work isolation level serializable, read only; NEW_CONNECTION; -start work read only not deferrable; +start work isolation level serializable, read only; NEW_CONNECTION; start work +isolation +level +serializable, read -only -not -deferrable; +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work read only not deferrable; +foo start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable bar; +start work isolation level serializable, read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work read only not deferrable; +%start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable%; +start work isolation level serializable, read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not%deferrable; +start work isolation level serializable, read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work read only not deferrable; +_start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable_; +start work isolation level serializable, read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not_deferrable; +start work isolation level serializable, read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work read only not deferrable; +&start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable&; +start work isolation level serializable, read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not&deferrable; +start work isolation level serializable, read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work read only not deferrable; +$start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable$; +start work isolation level serializable, read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not$deferrable; +start work isolation level serializable, read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work read only not deferrable; +@start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable@; +start work isolation level serializable, read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not@deferrable; +start work isolation level serializable, read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work read only not deferrable; +!start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable!; +start work isolation level serializable, read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not!deferrable; +start work isolation level serializable, read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work read only not deferrable; +*start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable*; +start work isolation level serializable, read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not*deferrable; +start work isolation level serializable, read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work read only not deferrable; +(start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable(; +start work isolation level serializable, read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not(deferrable; +start work isolation level serializable, read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work read only not deferrable; +)start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable); +start work isolation level serializable, read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not)deferrable; +start work isolation level serializable, read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work read only not deferrable; +-start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable-; +start work isolation level serializable, read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not-deferrable; +start work isolation level serializable, read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work read only not deferrable; ++start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable+; +start work isolation level serializable, read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not+deferrable; +start work isolation level serializable, read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work read only not deferrable; +-#start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable-#; +start work isolation level serializable, read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not-#deferrable; +start work isolation level serializable, read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work read only not deferrable; +/start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable/; +start work isolation level serializable, read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not/deferrable; +start work isolation level serializable, read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work read only not deferrable; +\start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable\; +start work isolation level serializable, read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not\deferrable; +start work isolation level serializable, read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work read only not deferrable; +?start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable?; +start work isolation level serializable, read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not?deferrable; +start work isolation level serializable, read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work read only not deferrable; +-/start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable-/; +start work isolation level serializable, read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not-/deferrable; +start work isolation level serializable, read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work read only not deferrable; +/#start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable/#; +start work isolation level serializable, read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not/#deferrable; +start work isolation level serializable, read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work read only not deferrable; +/-start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not deferrable/-; +start work isolation level serializable, read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only not/-deferrable; +start work isolation level serializable, read/-only; NEW_CONNECTION; -begin read write not deferrable; +begin isolation level repeatable read, read write; NEW_CONNECTION; -BEGIN READ WRITE NOT DEFERRABLE; +BEGIN ISOLATION LEVEL REPEATABLE READ, READ WRITE; NEW_CONNECTION; -begin read write not deferrable; +begin isolation level repeatable read, read write; NEW_CONNECTION; - begin read write not deferrable; + begin isolation level repeatable read, read write; NEW_CONNECTION; - begin read write not deferrable; + begin isolation level repeatable read, read write; NEW_CONNECTION; -begin read write not deferrable; +begin isolation level repeatable read, read write; NEW_CONNECTION; -begin read write not deferrable ; +begin isolation level repeatable read, read write ; NEW_CONNECTION; -begin read write not deferrable ; +begin isolation level repeatable read, read write ; NEW_CONNECTION; -begin read write not deferrable +begin isolation level repeatable read, read write ; NEW_CONNECTION; -begin read write not deferrable; +begin isolation level repeatable read, read write; NEW_CONNECTION; -begin read write not deferrable; +begin isolation level repeatable read, read write; NEW_CONNECTION; begin +isolation +level +repeatable +read, read -write -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin read write not deferrable; +foo begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable bar; +begin isolation level repeatable read, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin read write not deferrable; +%begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable%; +begin isolation level repeatable read, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not%deferrable; +begin isolation level repeatable read, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin read write not deferrable; +_begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable_; +begin isolation level repeatable read, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not_deferrable; +begin isolation level repeatable read, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin read write not deferrable; +&begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable&; +begin isolation level repeatable read, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not&deferrable; +begin isolation level repeatable read, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin read write not deferrable; +$begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable$; +begin isolation level repeatable read, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not$deferrable; +begin isolation level repeatable read, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin read write not deferrable; +@begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable@; +begin isolation level repeatable read, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not@deferrable; +begin isolation level repeatable read, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin read write not deferrable; +!begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable!; +begin isolation level repeatable read, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not!deferrable; +begin isolation level repeatable read, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin read write not deferrable; +*begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable*; +begin isolation level repeatable read, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not*deferrable; +begin isolation level repeatable read, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin read write not deferrable; +(begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable(; +begin isolation level repeatable read, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not(deferrable; +begin isolation level repeatable read, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin read write not deferrable; +)begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable); +begin isolation level repeatable read, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not)deferrable; +begin isolation level repeatable read, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin read write not deferrable; +-begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable-; +begin isolation level repeatable read, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not-deferrable; +begin isolation level repeatable read, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin read write not deferrable; ++begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable+; +begin isolation level repeatable read, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not+deferrable; +begin isolation level repeatable read, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin read write not deferrable; +-#begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable-#; +begin isolation level repeatable read, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not-#deferrable; +begin isolation level repeatable read, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin read write not deferrable; +/begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable/; +begin isolation level repeatable read, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not/deferrable; +begin isolation level repeatable read, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin read write not deferrable; +\begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable\; +begin isolation level repeatable read, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not\deferrable; +begin isolation level repeatable read, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin read write not deferrable; +?begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable?; +begin isolation level repeatable read, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not?deferrable; +begin isolation level repeatable read, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin read write not deferrable; +-/begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable-/; +begin isolation level repeatable read, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not-/deferrable; +begin isolation level repeatable read, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin read write not deferrable; +/#begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable/#; +begin isolation level repeatable read, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not/#deferrable; +begin isolation level repeatable read, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin read write not deferrable; +/-begin isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not deferrable/-; +begin isolation level repeatable read, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin read write not/-deferrable; +begin isolation level repeatable read, read/-write; NEW_CONNECTION; -start read write not deferrable; +start isolation level repeatable read, read write; NEW_CONNECTION; -START READ WRITE NOT DEFERRABLE; +START ISOLATION LEVEL REPEATABLE READ, READ WRITE; NEW_CONNECTION; -start read write not deferrable; +start isolation level repeatable read, read write; NEW_CONNECTION; - start read write not deferrable; + start isolation level repeatable read, read write; NEW_CONNECTION; - start read write not deferrable; + start isolation level repeatable read, read write; NEW_CONNECTION; -start read write not deferrable; +start isolation level repeatable read, read write; NEW_CONNECTION; -start read write not deferrable ; +start isolation level repeatable read, read write ; NEW_CONNECTION; -start read write not deferrable ; +start isolation level repeatable read, read write ; NEW_CONNECTION; -start read write not deferrable +start isolation level repeatable read, read write ; NEW_CONNECTION; -start read write not deferrable; +start isolation level repeatable read, read write; NEW_CONNECTION; -start read write not deferrable; +start isolation level repeatable read, read write; NEW_CONNECTION; start +isolation +level +repeatable +read, read -write -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start read write not deferrable; +foo start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable bar; +start isolation level repeatable read, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start read write not deferrable; +%start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable%; +start isolation level repeatable read, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not%deferrable; +start isolation level repeatable read, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start read write not deferrable; +_start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable_; +start isolation level repeatable read, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not_deferrable; +start isolation level repeatable read, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start read write not deferrable; +&start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable&; +start isolation level repeatable read, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not&deferrable; +start isolation level repeatable read, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start read write not deferrable; +$start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable$; +start isolation level repeatable read, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not$deferrable; +start isolation level repeatable read, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start read write not deferrable; +@start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable@; +start isolation level repeatable read, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not@deferrable; +start isolation level repeatable read, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start read write not deferrable; +!start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable!; +start isolation level repeatable read, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not!deferrable; +start isolation level repeatable read, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start read write not deferrable; +*start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable*; +start isolation level repeatable read, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not*deferrable; +start isolation level repeatable read, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start read write not deferrable; +(start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable(; +start isolation level repeatable read, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not(deferrable; +start isolation level repeatable read, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start read write not deferrable; +)start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable); +start isolation level repeatable read, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not)deferrable; +start isolation level repeatable read, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start read write not deferrable; +-start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable-; +start isolation level repeatable read, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not-deferrable; +start isolation level repeatable read, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start read write not deferrable; ++start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable+; +start isolation level repeatable read, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not+deferrable; +start isolation level repeatable read, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start read write not deferrable; +-#start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable-#; +start isolation level repeatable read, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not-#deferrable; +start isolation level repeatable read, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start read write not deferrable; +/start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable/; +start isolation level repeatable read, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not/deferrable; +start isolation level repeatable read, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start read write not deferrable; +\start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable\; +start isolation level repeatable read, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not\deferrable; +start isolation level repeatable read, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start read write not deferrable; +?start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable?; +start isolation level repeatable read, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not?deferrable; +start isolation level repeatable read, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start read write not deferrable; +-/start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable-/; +start isolation level repeatable read, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not-/deferrable; +start isolation level repeatable read, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start read write not deferrable; +/#start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable/#; +start isolation level repeatable read, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not/#deferrable; +start isolation level repeatable read, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start read write not deferrable; +/-start isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not deferrable/-; +start isolation level repeatable read, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write not/-deferrable; +start isolation level repeatable read, read/-write; NEW_CONNECTION; -begin transaction read write not deferrable; +begin transaction isolation level repeatable read, read only; NEW_CONNECTION; -BEGIN TRANSACTION READ WRITE NOT DEFERRABLE; +BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY; NEW_CONNECTION; -begin transaction read write not deferrable; +begin transaction isolation level repeatable read, read only; NEW_CONNECTION; - begin transaction read write not deferrable; + begin transaction isolation level repeatable read, read only; NEW_CONNECTION; - begin transaction read write not deferrable; + begin transaction isolation level repeatable read, read only; NEW_CONNECTION; -begin transaction read write not deferrable; +begin transaction isolation level repeatable read, read only; NEW_CONNECTION; -begin transaction read write not deferrable ; +begin transaction isolation level repeatable read, read only ; NEW_CONNECTION; -begin transaction read write not deferrable ; +begin transaction isolation level repeatable read, read only ; NEW_CONNECTION; -begin transaction read write not deferrable +begin transaction isolation level repeatable read, read only ; NEW_CONNECTION; -begin transaction read write not deferrable; +begin transaction isolation level repeatable read, read only; NEW_CONNECTION; -begin transaction read write not deferrable; +begin transaction isolation level repeatable read, read only; NEW_CONNECTION; begin transaction +isolation +level +repeatable +read, read -write -not -deferrable; +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction read write not deferrable; +foo begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable bar; +begin transaction isolation level repeatable read, read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction read write not deferrable; +%begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable%; +begin transaction isolation level repeatable read, read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not%deferrable; +begin transaction isolation level repeatable read, read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction read write not deferrable; +_begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable_; +begin transaction isolation level repeatable read, read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not_deferrable; +begin transaction isolation level repeatable read, read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction read write not deferrable; +&begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable&; +begin transaction isolation level repeatable read, read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not&deferrable; +begin transaction isolation level repeatable read, read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction read write not deferrable; +$begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable$; +begin transaction isolation level repeatable read, read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not$deferrable; +begin transaction isolation level repeatable read, read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction read write not deferrable; +@begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable@; +begin transaction isolation level repeatable read, read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not@deferrable; +begin transaction isolation level repeatable read, read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction read write not deferrable; +!begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable!; +begin transaction isolation level repeatable read, read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not!deferrable; +begin transaction isolation level repeatable read, read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction read write not deferrable; +*begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable*; +begin transaction isolation level repeatable read, read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not*deferrable; +begin transaction isolation level repeatable read, read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction read write not deferrable; +(begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable(; +begin transaction isolation level repeatable read, read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not(deferrable; +begin transaction isolation level repeatable read, read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction read write not deferrable; +)begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable); +begin transaction isolation level repeatable read, read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not)deferrable; +begin transaction isolation level repeatable read, read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction read write not deferrable; +-begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable-; +begin transaction isolation level repeatable read, read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not-deferrable; +begin transaction isolation level repeatable read, read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction read write not deferrable; ++begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable+; +begin transaction isolation level repeatable read, read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not+deferrable; +begin transaction isolation level repeatable read, read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction read write not deferrable; +-#begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable-#; +begin transaction isolation level repeatable read, read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not-#deferrable; +begin transaction isolation level repeatable read, read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction read write not deferrable; +/begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable/; +begin transaction isolation level repeatable read, read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not/deferrable; +begin transaction isolation level repeatable read, read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction read write not deferrable; +\begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable\; +begin transaction isolation level repeatable read, read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not\deferrable; +begin transaction isolation level repeatable read, read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction read write not deferrable; +?begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable?; +begin transaction isolation level repeatable read, read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not?deferrable; +begin transaction isolation level repeatable read, read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction read write not deferrable; +-/begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable-/; +begin transaction isolation level repeatable read, read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not-/deferrable; +begin transaction isolation level repeatable read, read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction read write not deferrable; +/#begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable/#; +begin transaction isolation level repeatable read, read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not/#deferrable; +begin transaction isolation level repeatable read, read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction read write not deferrable; +/-begin transaction isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not deferrable/-; +begin transaction isolation level repeatable read, read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction read write not/-deferrable; +begin transaction isolation level repeatable read, read/-only; NEW_CONNECTION; -start transaction read write not deferrable; +start transaction isolation level repeatable read, read write; NEW_CONNECTION; -START TRANSACTION READ WRITE NOT DEFERRABLE; +START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE; NEW_CONNECTION; -start transaction read write not deferrable; +start transaction isolation level repeatable read, read write; NEW_CONNECTION; - start transaction read write not deferrable; + start transaction isolation level repeatable read, read write; NEW_CONNECTION; - start transaction read write not deferrable; + start transaction isolation level repeatable read, read write; NEW_CONNECTION; -start transaction read write not deferrable; +start transaction isolation level repeatable read, read write; NEW_CONNECTION; -start transaction read write not deferrable ; +start transaction isolation level repeatable read, read write ; NEW_CONNECTION; -start transaction read write not deferrable ; +start transaction isolation level repeatable read, read write ; NEW_CONNECTION; -start transaction read write not deferrable +start transaction isolation level repeatable read, read write ; NEW_CONNECTION; -start transaction read write not deferrable; +start transaction isolation level repeatable read, read write; NEW_CONNECTION; -start transaction read write not deferrable; +start transaction isolation level repeatable read, read write; NEW_CONNECTION; start transaction +isolation +level +repeatable +read, read -write -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction read write not deferrable; +foo start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable bar; +start transaction isolation level repeatable read, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction read write not deferrable; +%start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable%; +start transaction isolation level repeatable read, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not%deferrable; +start transaction isolation level repeatable read, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction read write not deferrable; +_start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable_; +start transaction isolation level repeatable read, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not_deferrable; +start transaction isolation level repeatable read, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction read write not deferrable; +&start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable&; +start transaction isolation level repeatable read, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not&deferrable; +start transaction isolation level repeatable read, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction read write not deferrable; +$start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable$; +start transaction isolation level repeatable read, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not$deferrable; +start transaction isolation level repeatable read, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction read write not deferrable; +@start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable@; +start transaction isolation level repeatable read, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not@deferrable; +start transaction isolation level repeatable read, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction read write not deferrable; +!start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable!; +start transaction isolation level repeatable read, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not!deferrable; +start transaction isolation level repeatable read, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction read write not deferrable; +*start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable*; +start transaction isolation level repeatable read, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not*deferrable; +start transaction isolation level repeatable read, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction read write not deferrable; +(start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable(; +start transaction isolation level repeatable read, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not(deferrable; +start transaction isolation level repeatable read, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction read write not deferrable; +)start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable); +start transaction isolation level repeatable read, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not)deferrable; +start transaction isolation level repeatable read, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction read write not deferrable; +-start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable-; +start transaction isolation level repeatable read, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not-deferrable; +start transaction isolation level repeatable read, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction read write not deferrable; ++start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable+; +start transaction isolation level repeatable read, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not+deferrable; +start transaction isolation level repeatable read, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction read write not deferrable; +-#start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable-#; +start transaction isolation level repeatable read, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not-#deferrable; +start transaction isolation level repeatable read, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction read write not deferrable; +/start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable/; +start transaction isolation level repeatable read, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not/deferrable; +start transaction isolation level repeatable read, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction read write not deferrable; +\start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable\; +start transaction isolation level repeatable read, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not\deferrable; +start transaction isolation level repeatable read, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction read write not deferrable; +?start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable?; +start transaction isolation level repeatable read, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not?deferrable; +start transaction isolation level repeatable read, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction read write not deferrable; +-/start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable-/; +start transaction isolation level repeatable read, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not-/deferrable; +start transaction isolation level repeatable read, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction read write not deferrable; +/#start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable/#; +start transaction isolation level repeatable read, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not/#deferrable; +start transaction isolation level repeatable read, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction read write not deferrable; +/-start transaction isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not deferrable/-; +start transaction isolation level repeatable read, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write not/-deferrable; +start transaction isolation level repeatable read, read/-write; NEW_CONNECTION; -begin work read write not deferrable; +begin work isolation level repeatable read, read write; NEW_CONNECTION; -BEGIN WORK READ WRITE NOT DEFERRABLE; +BEGIN WORK ISOLATION LEVEL REPEATABLE READ, READ WRITE; NEW_CONNECTION; -begin work read write not deferrable; +begin work isolation level repeatable read, read write; NEW_CONNECTION; - begin work read write not deferrable; + begin work isolation level repeatable read, read write; NEW_CONNECTION; - begin work read write not deferrable; + begin work isolation level repeatable read, read write; NEW_CONNECTION; -begin work read write not deferrable; +begin work isolation level repeatable read, read write; NEW_CONNECTION; -begin work read write not deferrable ; +begin work isolation level repeatable read, read write ; NEW_CONNECTION; -begin work read write not deferrable ; +begin work isolation level repeatable read, read write ; NEW_CONNECTION; -begin work read write not deferrable +begin work isolation level repeatable read, read write ; NEW_CONNECTION; -begin work read write not deferrable; +begin work isolation level repeatable read, read write; NEW_CONNECTION; -begin work read write not deferrable; +begin work isolation level repeatable read, read write; NEW_CONNECTION; begin work +isolation +level +repeatable +read, read -write -not -deferrable; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work read write not deferrable; +foo begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable bar; +begin work isolation level repeatable read, read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work read write not deferrable; +%begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable%; +begin work isolation level repeatable read, read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not%deferrable; +begin work isolation level repeatable read, read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work read write not deferrable; +_begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable_; +begin work isolation level repeatable read, read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not_deferrable; +begin work isolation level repeatable read, read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work read write not deferrable; +&begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable&; +begin work isolation level repeatable read, read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not&deferrable; +begin work isolation level repeatable read, read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work read write not deferrable; +$begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable$; +begin work isolation level repeatable read, read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not$deferrable; +begin work isolation level repeatable read, read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work read write not deferrable; +@begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable@; +begin work isolation level repeatable read, read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not@deferrable; +begin work isolation level repeatable read, read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work read write not deferrable; +!begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable!; +begin work isolation level repeatable read, read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not!deferrable; +begin work isolation level repeatable read, read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work read write not deferrable; +*begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable*; +begin work isolation level repeatable read, read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not*deferrable; +begin work isolation level repeatable read, read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work read write not deferrable; +(begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable(; +begin work isolation level repeatable read, read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not(deferrable; +begin work isolation level repeatable read, read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work read write not deferrable; +)begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable); +begin work isolation level repeatable read, read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not)deferrable; +begin work isolation level repeatable read, read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work read write not deferrable; +-begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable-; +begin work isolation level repeatable read, read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not-deferrable; +begin work isolation level repeatable read, read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work read write not deferrable; ++begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable+; +begin work isolation level repeatable read, read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not+deferrable; +begin work isolation level repeatable read, read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work read write not deferrable; +-#begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable-#; +begin work isolation level repeatable read, read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not-#deferrable; +begin work isolation level repeatable read, read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work read write not deferrable; +/begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable/; +begin work isolation level repeatable read, read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not/deferrable; +begin work isolation level repeatable read, read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work read write not deferrable; +\begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable\; +begin work isolation level repeatable read, read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not\deferrable; +begin work isolation level repeatable read, read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work read write not deferrable; +?begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable?; +begin work isolation level repeatable read, read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not?deferrable; +begin work isolation level repeatable read, read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work read write not deferrable; +-/begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable-/; +begin work isolation level repeatable read, read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not-/deferrable; +begin work isolation level repeatable read, read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work read write not deferrable; +/#begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable/#; +begin work isolation level repeatable read, read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not/#deferrable; +begin work isolation level repeatable read, read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work read write not deferrable; +/-begin work isolation level repeatable read, read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not deferrable/-; +begin work isolation level repeatable read, read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work read write not/-deferrable; +begin work isolation level repeatable read, read/-write; NEW_CONNECTION; -start work read write not deferrable; +start work isolation level repeatable read, read only; NEW_CONNECTION; -START WORK READ WRITE NOT DEFERRABLE; +START WORK ISOLATION LEVEL REPEATABLE READ, READ ONLY; NEW_CONNECTION; -start work read write not deferrable; +start work isolation level repeatable read, read only; NEW_CONNECTION; - start work read write not deferrable; + start work isolation level repeatable read, read only; NEW_CONNECTION; - start work read write not deferrable; + start work isolation level repeatable read, read only; NEW_CONNECTION; -start work read write not deferrable; +start work isolation level repeatable read, read only; NEW_CONNECTION; -start work read write not deferrable ; +start work isolation level repeatable read, read only ; NEW_CONNECTION; -start work read write not deferrable ; +start work isolation level repeatable read, read only ; NEW_CONNECTION; -start work read write not deferrable +start work isolation level repeatable read, read only ; NEW_CONNECTION; -start work read write not deferrable; +start work isolation level repeatable read, read only; NEW_CONNECTION; -start work read write not deferrable; +start work isolation level repeatable read, read only; NEW_CONNECTION; start work +isolation +level +repeatable +read, read -write -not -deferrable; +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work read write not deferrable; +foo start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable bar; +start work isolation level repeatable read, read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work read write not deferrable; +%start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable%; +start work isolation level repeatable read, read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not%deferrable; +start work isolation level repeatable read, read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work read write not deferrable; +_start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable_; +start work isolation level repeatable read, read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not_deferrable; +start work isolation level repeatable read, read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work read write not deferrable; +&start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable&; +start work isolation level repeatable read, read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not&deferrable; +start work isolation level repeatable read, read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work read write not deferrable; +$start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable$; +start work isolation level repeatable read, read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not$deferrable; +start work isolation level repeatable read, read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work read write not deferrable; +@start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable@; +start work isolation level repeatable read, read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not@deferrable; +start work isolation level repeatable read, read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work read write not deferrable; +!start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable!; +start work isolation level repeatable read, read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not!deferrable; +start work isolation level repeatable read, read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work read write not deferrable; +*start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable*; +start work isolation level repeatable read, read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not*deferrable; +start work isolation level repeatable read, read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work read write not deferrable; +(start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable(; +start work isolation level repeatable read, read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not(deferrable; +start work isolation level repeatable read, read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work read write not deferrable; +)start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable); +start work isolation level repeatable read, read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not)deferrable; +start work isolation level repeatable read, read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work read write not deferrable; +-start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable-; +start work isolation level repeatable read, read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not-deferrable; +start work isolation level repeatable read, read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work read write not deferrable; ++start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable+; +start work isolation level repeatable read, read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not+deferrable; +start work isolation level repeatable read, read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work read write not deferrable; +-#start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable-#; +start work isolation level repeatable read, read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not-#deferrable; +start work isolation level repeatable read, read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work read write not deferrable; +/start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable/; +start work isolation level repeatable read, read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not/deferrable; +start work isolation level repeatable read, read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work read write not deferrable; +\start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable\; +start work isolation level repeatable read, read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not\deferrable; +start work isolation level repeatable read, read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work read write not deferrable; +?start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable?; +start work isolation level repeatable read, read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not?deferrable; +start work isolation level repeatable read, read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work read write not deferrable; +-/start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable-/; +start work isolation level repeatable read, read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not-/deferrable; +start work isolation level repeatable read, read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work read write not deferrable; +/#start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable/#; +start work isolation level repeatable read, read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not/#deferrable; +start work isolation level repeatable read, read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work read write not deferrable; +/-start work isolation level repeatable read, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not deferrable/-; +start work isolation level repeatable read, read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write not/-deferrable; +start work isolation level repeatable read, read/-only; NEW_CONNECTION; -begin isolation level default not deferrable; +begin not deferrable; NEW_CONNECTION; -BEGIN ISOLATION LEVEL DEFAULT NOT DEFERRABLE; +BEGIN NOT DEFERRABLE; NEW_CONNECTION; -begin isolation level default not deferrable; +begin not deferrable; NEW_CONNECTION; - begin isolation level default not deferrable; + begin not deferrable; NEW_CONNECTION; - begin isolation level default not deferrable; + begin not deferrable; NEW_CONNECTION; -begin isolation level default not deferrable; +begin not deferrable; NEW_CONNECTION; -begin isolation level default not deferrable ; +begin not deferrable ; NEW_CONNECTION; -begin isolation level default not deferrable ; +begin not deferrable ; NEW_CONNECTION; -begin isolation level default not deferrable +begin not deferrable ; NEW_CONNECTION; -begin isolation level default not deferrable; +begin not deferrable; NEW_CONNECTION; -begin isolation level default not deferrable; +begin not deferrable; NEW_CONNECTION; begin -isolation -level -default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level default not deferrable; +foo begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable bar; +begin not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level default not deferrable; +%begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable%; +begin not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not%deferrable; +begin not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level default not deferrable; +_begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable_; +begin not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not_deferrable; +begin not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level default not deferrable; +&begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable&; +begin not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not&deferrable; +begin not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level default not deferrable; +$begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable$; +begin not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not$deferrable; +begin not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level default not deferrable; +@begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable@; +begin not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not@deferrable; +begin not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level default not deferrable; +!begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable!; +begin not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not!deferrable; +begin not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level default not deferrable; +*begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable*; +begin not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not*deferrable; +begin not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level default not deferrable; +(begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable(; +begin not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not(deferrable; +begin not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level default not deferrable; +)begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable); +begin not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not)deferrable; +begin not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level default not deferrable; +-begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable-; +begin not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not-deferrable; +begin not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level default not deferrable; ++begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable+; +begin not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not+deferrable; +begin not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level default not deferrable; +-#begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable-#; +begin not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not-#deferrable; +begin not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level default not deferrable; +/begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable/; +begin not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not/deferrable; +begin not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level default not deferrable; +\begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable\; +begin not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not\deferrable; +begin not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level default not deferrable; +?begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable?; +begin not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not?deferrable; +begin not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level default not deferrable; +-/begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable-/; +begin not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not-/deferrable; +begin not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level default not deferrable; +/#begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable/#; +begin not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not/#deferrable; +begin not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level default not deferrable; +/-begin not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not deferrable/-; +begin not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default not/-deferrable; +begin not/-deferrable; NEW_CONNECTION; -start isolation level default not deferrable; +start not deferrable; NEW_CONNECTION; -START ISOLATION LEVEL DEFAULT NOT DEFERRABLE; +START NOT DEFERRABLE; NEW_CONNECTION; -start isolation level default not deferrable; +start not deferrable; NEW_CONNECTION; - start isolation level default not deferrable; + start not deferrable; NEW_CONNECTION; - start isolation level default not deferrable; + start not deferrable; NEW_CONNECTION; -start isolation level default not deferrable; +start not deferrable; NEW_CONNECTION; -start isolation level default not deferrable ; +start not deferrable ; NEW_CONNECTION; -start isolation level default not deferrable ; +start not deferrable ; NEW_CONNECTION; -start isolation level default not deferrable +start not deferrable ; NEW_CONNECTION; -start isolation level default not deferrable; +start not deferrable; NEW_CONNECTION; -start isolation level default not deferrable; +start not deferrable; NEW_CONNECTION; start -isolation -level -default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level default not deferrable; +foo start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable bar; +start not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level default not deferrable; +%start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable%; +start not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not%deferrable; +start not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level default not deferrable; +_start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable_; +start not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not_deferrable; +start not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level default not deferrable; +&start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable&; +start not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not&deferrable; +start not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level default not deferrable; +$start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable$; +start not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not$deferrable; +start not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level default not deferrable; +@start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable@; +start not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not@deferrable; +start not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level default not deferrable; +!start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable!; +start not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not!deferrable; +start not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level default not deferrable; +*start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable*; +start not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not*deferrable; +start not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level default not deferrable; +(start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable(; +start not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not(deferrable; +start not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level default not deferrable; +)start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable); +start not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not)deferrable; +start not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level default not deferrable; +-start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable-; +start not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not-deferrable; +start not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level default not deferrable; ++start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable+; +start not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not+deferrable; +start not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level default not deferrable; +-#start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable-#; +start not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not-#deferrable; +start not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level default not deferrable; +/start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable/; +start not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not/deferrable; +start not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level default not deferrable; +\start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable\; +start not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not\deferrable; +start not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level default not deferrable; +?start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable?; +start not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not?deferrable; +start not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level default not deferrable; +-/start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable-/; +start not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not-/deferrable; +start not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level default not deferrable; +/#start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable/#; +start not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not/#deferrable; +start not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level default not deferrable; +/-start not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not deferrable/-; +start not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default not/-deferrable; +start not/-deferrable; NEW_CONNECTION; -begin transaction isolation level default not deferrable; +begin transaction not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL DEFAULT NOT DEFERRABLE; +BEGIN TRANSACTION NOT DEFERRABLE; NEW_CONNECTION; -begin transaction isolation level default not deferrable; +begin transaction not deferrable; NEW_CONNECTION; - begin transaction isolation level default not deferrable; + begin transaction not deferrable; NEW_CONNECTION; - begin transaction isolation level default not deferrable; + begin transaction not deferrable; NEW_CONNECTION; -begin transaction isolation level default not deferrable; +begin transaction not deferrable; NEW_CONNECTION; -begin transaction isolation level default not deferrable ; +begin transaction not deferrable ; NEW_CONNECTION; -begin transaction isolation level default not deferrable ; +begin transaction not deferrable ; NEW_CONNECTION; -begin transaction isolation level default not deferrable +begin transaction not deferrable ; NEW_CONNECTION; -begin transaction isolation level default not deferrable; +begin transaction not deferrable; NEW_CONNECTION; -begin transaction isolation level default not deferrable; +begin transaction not deferrable; NEW_CONNECTION; begin transaction -isolation -level -default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level default not deferrable; +foo begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable bar; +begin transaction not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level default not deferrable; +%begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable%; +begin transaction not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not%deferrable; +begin transaction not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level default not deferrable; +_begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable_; +begin transaction not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not_deferrable; +begin transaction not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level default not deferrable; +&begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable&; +begin transaction not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not&deferrable; +begin transaction not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level default not deferrable; +$begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable$; +begin transaction not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not$deferrable; +begin transaction not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level default not deferrable; +@begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable@; +begin transaction not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not@deferrable; +begin transaction not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level default not deferrable; +!begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable!; +begin transaction not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not!deferrable; +begin transaction not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level default not deferrable; +*begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable*; +begin transaction not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not*deferrable; +begin transaction not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level default not deferrable; +(begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable(; +begin transaction not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not(deferrable; +begin transaction not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level default not deferrable; +)begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable); +begin transaction not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not)deferrable; +begin transaction not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level default not deferrable; +-begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable-; +begin transaction not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not-deferrable; +begin transaction not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level default not deferrable; ++begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable+; +begin transaction not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not+deferrable; +begin transaction not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level default not deferrable; +-#begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable-#; +begin transaction not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not-#deferrable; +begin transaction not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level default not deferrable; +/begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable/; +begin transaction not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not/deferrable; +begin transaction not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level default not deferrable; +\begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable\; +begin transaction not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not\deferrable; +begin transaction not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level default not deferrable; +?begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable?; +begin transaction not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not?deferrable; +begin transaction not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level default not deferrable; +-/begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable-/; +begin transaction not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not-/deferrable; +begin transaction not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level default not deferrable; +/#begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable/#; +begin transaction not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not/#deferrable; +begin transaction not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level default not deferrable; +/-begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not deferrable/-; +begin transaction not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default not/-deferrable; +begin transaction not/-deferrable; NEW_CONNECTION; -start transaction isolation level default not deferrable; +start transaction not deferrable; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL DEFAULT NOT DEFERRABLE; +START TRANSACTION NOT DEFERRABLE; NEW_CONNECTION; -start transaction isolation level default not deferrable; +start transaction not deferrable; NEW_CONNECTION; - start transaction isolation level default not deferrable; + start transaction not deferrable; NEW_CONNECTION; - start transaction isolation level default not deferrable; + start transaction not deferrable; NEW_CONNECTION; -start transaction isolation level default not deferrable; +start transaction not deferrable; NEW_CONNECTION; -start transaction isolation level default not deferrable ; +start transaction not deferrable ; NEW_CONNECTION; -start transaction isolation level default not deferrable ; +start transaction not deferrable ; NEW_CONNECTION; -start transaction isolation level default not deferrable +start transaction not deferrable ; NEW_CONNECTION; -start transaction isolation level default not deferrable; +start transaction not deferrable; NEW_CONNECTION; -start transaction isolation level default not deferrable; +start transaction not deferrable; NEW_CONNECTION; start transaction -isolation -level -default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level default not deferrable; +foo start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable bar; +start transaction not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level default not deferrable; +%start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable%; +start transaction not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not%deferrable; +start transaction not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level default not deferrable; +_start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable_; +start transaction not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not_deferrable; +start transaction not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level default not deferrable; +&start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable&; +start transaction not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not&deferrable; +start transaction not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level default not deferrable; +$start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable$; +start transaction not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not$deferrable; +start transaction not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level default not deferrable; +@start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable@; +start transaction not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not@deferrable; +start transaction not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level default not deferrable; +!start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable!; +start transaction not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not!deferrable; +start transaction not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level default not deferrable; +*start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable*; +start transaction not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not*deferrable; +start transaction not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level default not deferrable; +(start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable(; +start transaction not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not(deferrable; +start transaction not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level default not deferrable; +)start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable); +start transaction not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not)deferrable; +start transaction not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level default not deferrable; +-start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable-; +start transaction not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not-deferrable; +start transaction not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level default not deferrable; ++start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable+; +start transaction not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not+deferrable; +start transaction not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level default not deferrable; +-#start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable-#; +start transaction not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not-#deferrable; +start transaction not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level default not deferrable; +/start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable/; +start transaction not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not/deferrable; +start transaction not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level default not deferrable; +\start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable\; +start transaction not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not\deferrable; +start transaction not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level default not deferrable; +?start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable?; +start transaction not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not?deferrable; +start transaction not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level default not deferrable; +-/start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable-/; +start transaction not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not-/deferrable; +start transaction not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level default not deferrable; +/#start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable/#; +start transaction not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not/#deferrable; +start transaction not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level default not deferrable; +/-start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not deferrable/-; +start transaction not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default not/-deferrable; +start transaction not/-deferrable; NEW_CONNECTION; -begin work isolation level default not deferrable; +begin work not deferrable; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL DEFAULT NOT DEFERRABLE; +BEGIN WORK NOT DEFERRABLE; NEW_CONNECTION; -begin work isolation level default not deferrable; +begin work not deferrable; NEW_CONNECTION; - begin work isolation level default not deferrable; + begin work not deferrable; NEW_CONNECTION; - begin work isolation level default not deferrable; + begin work not deferrable; NEW_CONNECTION; -begin work isolation level default not deferrable; +begin work not deferrable; NEW_CONNECTION; -begin work isolation level default not deferrable ; +begin work not deferrable ; NEW_CONNECTION; -begin work isolation level default not deferrable ; +begin work not deferrable ; NEW_CONNECTION; -begin work isolation level default not deferrable +begin work not deferrable ; NEW_CONNECTION; -begin work isolation level default not deferrable; +begin work not deferrable; NEW_CONNECTION; -begin work isolation level default not deferrable; +begin work not deferrable; NEW_CONNECTION; begin work -isolation -level -default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level default not deferrable; +foo begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable bar; +begin work not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level default not deferrable; +%begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable%; +begin work not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not%deferrable; +begin work not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level default not deferrable; +_begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable_; +begin work not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not_deferrable; +begin work not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level default not deferrable; +&begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable&; +begin work not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not&deferrable; +begin work not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level default not deferrable; +$begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable$; +begin work not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not$deferrable; +begin work not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level default not deferrable; +@begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable@; +begin work not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not@deferrable; +begin work not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level default not deferrable; +!begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable!; +begin work not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not!deferrable; +begin work not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level default not deferrable; +*begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable*; +begin work not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not*deferrable; +begin work not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level default not deferrable; +(begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable(; +begin work not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not(deferrable; +begin work not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level default not deferrable; +)begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable); +begin work not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not)deferrable; +begin work not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level default not deferrable; +-begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable-; +begin work not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not-deferrable; +begin work not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level default not deferrable; ++begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable+; +begin work not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not+deferrable; +begin work not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level default not deferrable; +-#begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable-#; +begin work not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not-#deferrable; +begin work not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level default not deferrable; +/begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable/; +begin work not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not/deferrable; +begin work not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level default not deferrable; +\begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable\; +begin work not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not\deferrable; +begin work not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level default not deferrable; +?begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable?; +begin work not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not?deferrable; +begin work not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level default not deferrable; +-/begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable-/; +begin work not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not-/deferrable; +begin work not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level default not deferrable; +/#begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable/#; +begin work not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not/#deferrable; +begin work not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level default not deferrable; +/-begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not deferrable/-; +begin work not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default not/-deferrable; +begin work not/-deferrable; NEW_CONNECTION; -start work isolation level default not deferrable; +start work not deferrable; NEW_CONNECTION; -START WORK ISOLATION LEVEL DEFAULT NOT DEFERRABLE; +START WORK NOT DEFERRABLE; NEW_CONNECTION; -start work isolation level default not deferrable; +start work not deferrable; NEW_CONNECTION; - start work isolation level default not deferrable; + start work not deferrable; NEW_CONNECTION; - start work isolation level default not deferrable; + start work not deferrable; NEW_CONNECTION; -start work isolation level default not deferrable; +start work not deferrable; NEW_CONNECTION; -start work isolation level default not deferrable ; +start work not deferrable ; NEW_CONNECTION; -start work isolation level default not deferrable ; +start work not deferrable ; NEW_CONNECTION; -start work isolation level default not deferrable +start work not deferrable ; NEW_CONNECTION; -start work isolation level default not deferrable; +start work not deferrable; NEW_CONNECTION; -start work isolation level default not deferrable; +start work not deferrable; NEW_CONNECTION; start work -isolation -level -default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level default not deferrable; +foo start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable bar; +start work not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level default not deferrable; +%start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable%; +start work not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not%deferrable; +start work not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level default not deferrable; +_start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable_; +start work not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not_deferrable; +start work not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level default not deferrable; +&start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable&; +start work not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not&deferrable; +start work not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level default not deferrable; +$start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable$; +start work not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not$deferrable; +start work not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level default not deferrable; +@start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable@; +start work not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not@deferrable; +start work not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level default not deferrable; +!start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable!; +start work not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not!deferrable; +start work not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level default not deferrable; +*start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable*; +start work not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not*deferrable; +start work not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level default not deferrable; +(start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable(; +start work not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not(deferrable; +start work not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level default not deferrable; +)start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable); +start work not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not)deferrable; +start work not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level default not deferrable; +-start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable-; +start work not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not-deferrable; +start work not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level default not deferrable; ++start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable+; +start work not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not+deferrable; +start work not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level default not deferrable; +-#start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable-#; +start work not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not-#deferrable; +start work not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level default not deferrable; +/start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable/; +start work not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not/deferrable; +start work not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level default not deferrable; +\start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable\; +start work not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not\deferrable; +start work not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level default not deferrable; +?start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable?; +start work not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not?deferrable; +start work not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level default not deferrable; +-/start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable-/; +start work not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not-/deferrable; +start work not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level default not deferrable; +/#start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable/#; +start work not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not/#deferrable; +start work not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level default not deferrable; +/-start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not deferrable/-; +start work not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default not/-deferrable; +start work not/-deferrable; NEW_CONNECTION; -begin isolation level serializable not deferrable; +begin read only not deferrable; NEW_CONNECTION; -BEGIN ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; +BEGIN READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -begin isolation level serializable not deferrable; +begin read only not deferrable; NEW_CONNECTION; - begin isolation level serializable not deferrable; + begin read only not deferrable; NEW_CONNECTION; - begin isolation level serializable not deferrable; + begin read only not deferrable; NEW_CONNECTION; -begin isolation level serializable not deferrable; +begin read only not deferrable; NEW_CONNECTION; -begin isolation level serializable not deferrable ; +begin read only not deferrable ; NEW_CONNECTION; -begin isolation level serializable not deferrable ; +begin read only not deferrable ; NEW_CONNECTION; -begin isolation level serializable not deferrable +begin read only not deferrable ; NEW_CONNECTION; -begin isolation level serializable not deferrable; +begin read only not deferrable; NEW_CONNECTION; -begin isolation level serializable not deferrable; +begin read only not deferrable; NEW_CONNECTION; begin -isolation -level -serializable +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level serializable not deferrable; +foo begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable bar; +begin read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level serializable not deferrable; +%begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable%; +begin read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not%deferrable; +begin read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level serializable not deferrable; +_begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable_; +begin read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not_deferrable; +begin read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level serializable not deferrable; +&begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable&; +begin read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not&deferrable; +begin read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level serializable not deferrable; +$begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable$; +begin read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not$deferrable; +begin read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level serializable not deferrable; +@begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable@; +begin read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not@deferrable; +begin read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level serializable not deferrable; +!begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable!; +begin read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not!deferrable; +begin read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level serializable not deferrable; +*begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable*; +begin read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not*deferrable; +begin read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level serializable not deferrable; +(begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable(; +begin read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not(deferrable; +begin read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level serializable not deferrable; +)begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable); +begin read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not)deferrable; +begin read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level serializable not deferrable; +-begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable-; +begin read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not-deferrable; +begin read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level serializable not deferrable; ++begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable+; +begin read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not+deferrable; +begin read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level serializable not deferrable; +-#begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable-#; +begin read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not-#deferrable; +begin read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level serializable not deferrable; +/begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable/; +begin read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not/deferrable; +begin read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level serializable not deferrable; +\begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable\; +begin read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not\deferrable; +begin read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level serializable not deferrable; +?begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable?; +begin read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not?deferrable; +begin read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level serializable not deferrable; +-/begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable-/; +begin read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not-/deferrable; +begin read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level serializable not deferrable; +/#begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable/#; +begin read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not/#deferrable; +begin read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level serializable not deferrable; +/-begin read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not deferrable/-; +begin read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable not/-deferrable; +begin read only not/-deferrable; NEW_CONNECTION; -start isolation level serializable not deferrable; +start read only not deferrable; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; +START READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -start isolation level serializable not deferrable; +start read only not deferrable; NEW_CONNECTION; - start isolation level serializable not deferrable; + start read only not deferrable; NEW_CONNECTION; - start isolation level serializable not deferrable; + start read only not deferrable; NEW_CONNECTION; -start isolation level serializable not deferrable; +start read only not deferrable; NEW_CONNECTION; -start isolation level serializable not deferrable ; +start read only not deferrable ; NEW_CONNECTION; -start isolation level serializable not deferrable ; +start read only not deferrable ; NEW_CONNECTION; -start isolation level serializable not deferrable +start read only not deferrable ; NEW_CONNECTION; -start isolation level serializable not deferrable; +start read only not deferrable; NEW_CONNECTION; -start isolation level serializable not deferrable; +start read only not deferrable; NEW_CONNECTION; start -isolation -level -serializable +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable not deferrable; +foo start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable bar; +start read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable not deferrable; +%start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable%; +start read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not%deferrable; +start read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable not deferrable; +_start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable_; +start read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not_deferrable; +start read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable not deferrable; +&start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable&; +start read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not&deferrable; +start read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable not deferrable; +$start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable$; +start read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not$deferrable; +start read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable not deferrable; +@start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable@; +start read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not@deferrable; +start read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable not deferrable; +!start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable!; +start read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not!deferrable; +start read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable not deferrable; +*start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable*; +start read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not*deferrable; +start read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable not deferrable; +(start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable(; +start read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not(deferrable; +start read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable not deferrable; +)start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable); +start read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not)deferrable; +start read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable not deferrable; +-start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable-; +start read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not-deferrable; +start read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable not deferrable; ++start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable+; +start read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not+deferrable; +start read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable not deferrable; +-#start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable-#; +start read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not-#deferrable; +start read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable not deferrable; +/start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable/; +start read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not/deferrable; +start read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable not deferrable; +\start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable\; +start read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not\deferrable; +start read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable not deferrable; +?start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable?; +start read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not?deferrable; +start read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable not deferrable; +-/start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable-/; +start read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not-/deferrable; +start read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable not deferrable; +/#start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable/#; +start read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not/#deferrable; +start read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable not deferrable; +/-start read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not deferrable/-; +start read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable not/-deferrable; +start read only not/-deferrable; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable; +begin transaction read only not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; +BEGIN TRANSACTION READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable; +begin transaction read only not deferrable; NEW_CONNECTION; - begin transaction isolation level serializable not deferrable; + begin transaction read only not deferrable; NEW_CONNECTION; - begin transaction isolation level serializable not deferrable; + begin transaction read only not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable; +begin transaction read only not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable ; +begin transaction read only not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable ; +begin transaction read only not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable +begin transaction read only not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable; +begin transaction read only not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable not deferrable; +begin transaction read only not deferrable; NEW_CONNECTION; begin transaction -isolation -level -serializable +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level serializable not deferrable; +foo begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable bar; +begin transaction read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level serializable not deferrable; +%begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable%; +begin transaction read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not%deferrable; +begin transaction read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level serializable not deferrable; +_begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable_; +begin transaction read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not_deferrable; +begin transaction read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level serializable not deferrable; +&begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable&; +begin transaction read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not&deferrable; +begin transaction read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level serializable not deferrable; +$begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable$; +begin transaction read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not$deferrable; +begin transaction read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level serializable not deferrable; +@begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable@; +begin transaction read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not@deferrable; +begin transaction read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level serializable not deferrable; +!begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable!; +begin transaction read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not!deferrable; +begin transaction read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level serializable not deferrable; +*begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable*; +begin transaction read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not*deferrable; +begin transaction read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level serializable not deferrable; +(begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable(; +begin transaction read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not(deferrable; +begin transaction read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level serializable not deferrable; +)begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable); +begin transaction read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not)deferrable; +begin transaction read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level serializable not deferrable; +-begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable-; +begin transaction read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not-deferrable; +begin transaction read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level serializable not deferrable; ++begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable+; +begin transaction read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not+deferrable; +begin transaction read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level serializable not deferrable; +-#begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable-#; +begin transaction read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not-#deferrable; +begin transaction read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level serializable not deferrable; +/begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable/; +begin transaction read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not/deferrable; +begin transaction read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level serializable not deferrable; +\begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable\; +begin transaction read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not\deferrable; +begin transaction read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level serializable not deferrable; +?begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable?; +begin transaction read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not?deferrable; +begin transaction read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level serializable not deferrable; +-/begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable-/; +begin transaction read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not-/deferrable; +begin transaction read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level serializable not deferrable; +/#begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable/#; +begin transaction read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not/#deferrable; +begin transaction read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level serializable not deferrable; +/-begin transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not deferrable/-; +begin transaction read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable not/-deferrable; +begin transaction read only not/-deferrable; NEW_CONNECTION; -start transaction isolation level serializable not deferrable; +start transaction read only not deferrable; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; +START TRANSACTION READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -start transaction isolation level serializable not deferrable; +start transaction read only not deferrable; NEW_CONNECTION; - start transaction isolation level serializable not deferrable; + start transaction read only not deferrable; NEW_CONNECTION; - start transaction isolation level serializable not deferrable; + start transaction read only not deferrable; NEW_CONNECTION; -start transaction isolation level serializable not deferrable; +start transaction read only not deferrable; NEW_CONNECTION; -start transaction isolation level serializable not deferrable ; +start transaction read only not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable not deferrable ; +start transaction read only not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable not deferrable +start transaction read only not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable not deferrable; +start transaction read only not deferrable; NEW_CONNECTION; -start transaction isolation level serializable not deferrable; +start transaction read only not deferrable; NEW_CONNECTION; start transaction -isolation -level -serializable +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable not deferrable; +foo start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable bar; +start transaction read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable not deferrable; +%start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable%; +start transaction read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not%deferrable; +start transaction read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable not deferrable; +_start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable_; +start transaction read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not_deferrable; +start transaction read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable not deferrable; +&start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable&; +start transaction read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not&deferrable; +start transaction read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable not deferrable; +$start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable$; +start transaction read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not$deferrable; +start transaction read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable not deferrable; +@start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable@; +start transaction read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not@deferrable; +start transaction read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable not deferrable; +!start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable!; +start transaction read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not!deferrable; +start transaction read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable not deferrable; +*start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable*; +start transaction read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not*deferrable; +start transaction read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable not deferrable; +(start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable(; +start transaction read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not(deferrable; +start transaction read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable not deferrable; +)start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable); +start transaction read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not)deferrable; +start transaction read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable not deferrable; +-start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable-; +start transaction read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not-deferrable; +start transaction read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable not deferrable; ++start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable+; +start transaction read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not+deferrable; +start transaction read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable not deferrable; +-#start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable-#; +start transaction read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not-#deferrable; +start transaction read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable not deferrable; +/start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable/; +start transaction read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not/deferrable; +start transaction read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable not deferrable; +\start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable\; +start transaction read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not\deferrable; +start transaction read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable not deferrable; +?start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable?; +start transaction read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not?deferrable; +start transaction read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable not deferrable; +-/start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable-/; +start transaction read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not-/deferrable; +start transaction read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable not deferrable; +/#start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable/#; +start transaction read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not/#deferrable; +start transaction read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable not deferrable; +/-start transaction read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not deferrable/-; +start transaction read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable not/-deferrable; +start transaction read only not/-deferrable; NEW_CONNECTION; -begin work isolation level serializable not deferrable; +begin work read only not deferrable; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; +BEGIN WORK READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -begin work isolation level serializable not deferrable; +begin work read only not deferrable; NEW_CONNECTION; - begin work isolation level serializable not deferrable; + begin work read only not deferrable; NEW_CONNECTION; - begin work isolation level serializable not deferrable; + begin work read only not deferrable; NEW_CONNECTION; -begin work isolation level serializable not deferrable; +begin work read only not deferrable; NEW_CONNECTION; -begin work isolation level serializable not deferrable ; +begin work read only not deferrable ; NEW_CONNECTION; -begin work isolation level serializable not deferrable ; +begin work read only not deferrable ; NEW_CONNECTION; -begin work isolation level serializable not deferrable +begin work read only not deferrable ; NEW_CONNECTION; -begin work isolation level serializable not deferrable; +begin work read only not deferrable; NEW_CONNECTION; -begin work isolation level serializable not deferrable; +begin work read only not deferrable; NEW_CONNECTION; begin work -isolation -level -serializable +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level serializable not deferrable; +foo begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable bar; +begin work read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level serializable not deferrable; +%begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable%; +begin work read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not%deferrable; +begin work read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level serializable not deferrable; +_begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable_; +begin work read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not_deferrable; +begin work read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level serializable not deferrable; +&begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable&; +begin work read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not&deferrable; +begin work read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level serializable not deferrable; +$begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable$; +begin work read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not$deferrable; +begin work read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level serializable not deferrable; +@begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable@; +begin work read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not@deferrable; +begin work read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level serializable not deferrable; +!begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable!; +begin work read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not!deferrable; +begin work read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level serializable not deferrable; +*begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable*; +begin work read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not*deferrable; +begin work read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level serializable not deferrable; +(begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable(; +begin work read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not(deferrable; +begin work read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level serializable not deferrable; +)begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable); +begin work read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not)deferrable; +begin work read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level serializable not deferrable; +-begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable-; +begin work read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not-deferrable; +begin work read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level serializable not deferrable; ++begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable+; +begin work read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not+deferrable; +begin work read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level serializable not deferrable; +-#begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable-#; +begin work read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not-#deferrable; +begin work read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level serializable not deferrable; +/begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable/; +begin work read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not/deferrable; +begin work read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level serializable not deferrable; +\begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable\; +begin work read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not\deferrable; +begin work read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level serializable not deferrable; +?begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable?; +begin work read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not?deferrable; +begin work read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level serializable not deferrable; +-/begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable-/; +begin work read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not-/deferrable; +begin work read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level serializable not deferrable; +/#begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable/#; +begin work read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not/#deferrable; +begin work read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level serializable not deferrable; +/-begin work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not deferrable/-; +begin work read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable not/-deferrable; +begin work read only not/-deferrable; NEW_CONNECTION; -start work isolation level serializable not deferrable; +start work read only not deferrable; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; +START WORK READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -start work isolation level serializable not deferrable; +start work read only not deferrable; NEW_CONNECTION; - start work isolation level serializable not deferrable; + start work read only not deferrable; NEW_CONNECTION; - start work isolation level serializable not deferrable; + start work read only not deferrable; NEW_CONNECTION; -start work isolation level serializable not deferrable; +start work read only not deferrable; NEW_CONNECTION; -start work isolation level serializable not deferrable ; +start work read only not deferrable ; NEW_CONNECTION; -start work isolation level serializable not deferrable ; +start work read only not deferrable ; NEW_CONNECTION; -start work isolation level serializable not deferrable +start work read only not deferrable ; NEW_CONNECTION; -start work isolation level serializable not deferrable; +start work read only not deferrable; NEW_CONNECTION; -start work isolation level serializable not deferrable; +start work read only not deferrable; NEW_CONNECTION; start work -isolation -level -serializable +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable not deferrable; +foo start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable bar; +start work read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable not deferrable; +%start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable%; +start work read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not%deferrable; +start work read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable not deferrable; +_start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable_; +start work read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not_deferrable; +start work read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable not deferrable; +&start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable&; +start work read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not&deferrable; +start work read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable not deferrable; +$start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable$; +start work read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not$deferrable; +start work read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable not deferrable; +@start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable@; +start work read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not@deferrable; +start work read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable not deferrable; +!start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable!; +start work read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not!deferrable; +start work read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable not deferrable; +*start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable*; +start work read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not*deferrable; +start work read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable not deferrable; +(start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable(; +start work read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not(deferrable; +start work read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable not deferrable; +)start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable); +start work read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not)deferrable; +start work read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable not deferrable; +-start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable-; +start work read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not-deferrable; +start work read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable not deferrable; ++start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable+; +start work read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not+deferrable; +start work read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable not deferrable; +-#start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable-#; +start work read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not-#deferrable; +start work read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable not deferrable; +/start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable/; +start work read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not/deferrable; +start work read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable not deferrable; +\start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable\; +start work read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not\deferrable; +start work read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable not deferrable; +?start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable?; +start work read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not?deferrable; +start work read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable not deferrable; +-/start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable-/; +start work read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not-/deferrable; +start work read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable not deferrable; +/#start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable/#; +start work read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not/#deferrable; +start work read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable not deferrable; +/-start work read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not deferrable/-; +start work read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable not/-deferrable; +start work read only not/-deferrable; NEW_CONNECTION; -begin isolation level default read write not deferrable; +begin read write not deferrable; NEW_CONNECTION; -BEGIN ISOLATION LEVEL DEFAULT READ WRITE NOT DEFERRABLE; +BEGIN READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -begin isolation level default read write not deferrable; +begin read write not deferrable; NEW_CONNECTION; - begin isolation level default read write not deferrable; + begin read write not deferrable; NEW_CONNECTION; - begin isolation level default read write not deferrable; + begin read write not deferrable; NEW_CONNECTION; -begin isolation level default read write not deferrable; +begin read write not deferrable; NEW_CONNECTION; -begin isolation level default read write not deferrable ; +begin read write not deferrable ; NEW_CONNECTION; -begin isolation level default read write not deferrable ; +begin read write not deferrable ; NEW_CONNECTION; -begin isolation level default read write not deferrable +begin read write not deferrable ; NEW_CONNECTION; -begin isolation level default read write not deferrable; +begin read write not deferrable; NEW_CONNECTION; -begin isolation level default read write not deferrable; +begin read write not deferrable; NEW_CONNECTION; begin -isolation -level -default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level default read write not deferrable; +foo begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable bar; +begin read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level default read write not deferrable; +%begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable%; +begin read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not%deferrable; +begin read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level default read write not deferrable; +_begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable_; +begin read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not_deferrable; +begin read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level default read write not deferrable; +&begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable&; +begin read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not&deferrable; +begin read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level default read write not deferrable; +$begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable$; +begin read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not$deferrable; +begin read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level default read write not deferrable; +@begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable@; +begin read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not@deferrable; +begin read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level default read write not deferrable; +!begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable!; +begin read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not!deferrable; +begin read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level default read write not deferrable; +*begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable*; +begin read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not*deferrable; +begin read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level default read write not deferrable; +(begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable(; +begin read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not(deferrable; +begin read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level default read write not deferrable; +)begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable); +begin read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not)deferrable; +begin read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level default read write not deferrable; +-begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable-; +begin read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not-deferrable; +begin read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level default read write not deferrable; ++begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable+; +begin read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not+deferrable; +begin read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level default read write not deferrable; +-#begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable-#; +begin read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not-#deferrable; +begin read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level default read write not deferrable; +/begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable/; +begin read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not/deferrable; +begin read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level default read write not deferrable; +\begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable\; +begin read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not\deferrable; +begin read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level default read write not deferrable; +?begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable?; +begin read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not?deferrable; +begin read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level default read write not deferrable; +-/begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable-/; +begin read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not-/deferrable; +begin read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level default read write not deferrable; +/#begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable/#; +begin read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not/#deferrable; +begin read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level default read write not deferrable; +/-begin read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not deferrable/-; +begin read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level default read write not/-deferrable; +begin read write not/-deferrable; NEW_CONNECTION; -start isolation level default read only not deferrable; +start read write not deferrable; NEW_CONNECTION; -START ISOLATION LEVEL DEFAULT READ ONLY NOT DEFERRABLE; +START READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -start isolation level default read only not deferrable; +start read write not deferrable; NEW_CONNECTION; - start isolation level default read only not deferrable; + start read write not deferrable; NEW_CONNECTION; - start isolation level default read only not deferrable; + start read write not deferrable; NEW_CONNECTION; -start isolation level default read only not deferrable; +start read write not deferrable; NEW_CONNECTION; -start isolation level default read only not deferrable ; +start read write not deferrable ; NEW_CONNECTION; -start isolation level default read only not deferrable ; +start read write not deferrable ; NEW_CONNECTION; -start isolation level default read only not deferrable +start read write not deferrable ; NEW_CONNECTION; -start isolation level default read only not deferrable; +start read write not deferrable; NEW_CONNECTION; -start isolation level default read only not deferrable; +start read write not deferrable; NEW_CONNECTION; start -isolation -level -default read -only +write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level default read only not deferrable; +foo start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable bar; +start read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level default read only not deferrable; +%start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable%; +start read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not%deferrable; +start read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level default read only not deferrable; +_start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable_; +start read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not_deferrable; +start read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level default read only not deferrable; +&start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable&; +start read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not&deferrable; +start read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level default read only not deferrable; +$start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable$; +start read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not$deferrable; +start read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level default read only not deferrable; +@start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable@; +start read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not@deferrable; +start read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level default read only not deferrable; +!start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable!; +start read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not!deferrable; +start read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level default read only not deferrable; +*start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable*; +start read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not*deferrable; +start read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level default read only not deferrable; +(start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable(; +start read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not(deferrable; +start read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level default read only not deferrable; +)start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable); +start read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not)deferrable; +start read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level default read only not deferrable; +-start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable-; +start read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not-deferrable; +start read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level default read only not deferrable; ++start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable+; +start read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not+deferrable; +start read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level default read only not deferrable; +-#start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable-#; +start read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not-#deferrable; +start read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level default read only not deferrable; +/start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable/; +start read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not/deferrable; +start read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level default read only not deferrable; +\start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable\; +start read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not\deferrable; +start read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level default read only not deferrable; +?start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable?; +start read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not?deferrable; +start read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level default read only not deferrable; +-/start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable-/; +start read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not-/deferrable; +start read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level default read only not deferrable; +/#start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable/#; +start read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not/#deferrable; +start read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level default read only not deferrable; +/-start read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not deferrable/-; +start read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only not/-deferrable; +start read write not/-deferrable; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable; +begin transaction read write not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL DEFAULT READ ONLY NOT DEFERRABLE; +BEGIN TRANSACTION READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable; +begin transaction read write not deferrable; NEW_CONNECTION; - begin transaction isolation level default read only not deferrable; + begin transaction read write not deferrable; NEW_CONNECTION; - begin transaction isolation level default read only not deferrable; + begin transaction read write not deferrable; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable; +begin transaction read write not deferrable; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable ; +begin transaction read write not deferrable ; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable ; +begin transaction read write not deferrable ; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable +begin transaction read write not deferrable ; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable; +begin transaction read write not deferrable; NEW_CONNECTION; -begin transaction isolation level default read only not deferrable; +begin transaction read write not deferrable; NEW_CONNECTION; begin transaction -isolation -level -default read -only +write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level default read only not deferrable; +foo begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable bar; +begin transaction read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level default read only not deferrable; +%begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable%; +begin transaction read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not%deferrable; +begin transaction read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level default read only not deferrable; +_begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable_; +begin transaction read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not_deferrable; +begin transaction read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level default read only not deferrable; +&begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable&; +begin transaction read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not&deferrable; +begin transaction read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level default read only not deferrable; +$begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable$; +begin transaction read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not$deferrable; +begin transaction read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level default read only not deferrable; +@begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable@; +begin transaction read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not@deferrable; +begin transaction read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level default read only not deferrable; +!begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable!; +begin transaction read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not!deferrable; +begin transaction read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level default read only not deferrable; +*begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable*; +begin transaction read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not*deferrable; +begin transaction read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level default read only not deferrable; +(begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable(; +begin transaction read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not(deferrable; +begin transaction read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level default read only not deferrable; +)begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable); +begin transaction read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not)deferrable; +begin transaction read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level default read only not deferrable; +-begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable-; +begin transaction read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not-deferrable; +begin transaction read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level default read only not deferrable; ++begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable+; +begin transaction read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not+deferrable; +begin transaction read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level default read only not deferrable; +-#begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable-#; +begin transaction read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not-#deferrable; +begin transaction read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level default read only not deferrable; +/begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable/; +begin transaction read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not/deferrable; +begin transaction read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level default read only not deferrable; +\begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable\; +begin transaction read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not\deferrable; +begin transaction read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level default read only not deferrable; +?begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable?; +begin transaction read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not?deferrable; +begin transaction read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level default read only not deferrable; +-/begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable-/; +begin transaction read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not-/deferrable; +begin transaction read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level default read only not deferrable; +/#begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable/#; +begin transaction read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not/#deferrable; +begin transaction read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level default read only not deferrable; +/-begin transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not deferrable/-; +begin transaction read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level default read only not/-deferrable; +begin transaction read write not/-deferrable; NEW_CONNECTION; -start transaction isolation level default read write not deferrable; +start transaction read write not deferrable; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL DEFAULT READ WRITE NOT DEFERRABLE; +START TRANSACTION READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -start transaction isolation level default read write not deferrable; +start transaction read write not deferrable; NEW_CONNECTION; - start transaction isolation level default read write not deferrable; + start transaction read write not deferrable; NEW_CONNECTION; - start transaction isolation level default read write not deferrable; + start transaction read write not deferrable; NEW_CONNECTION; -start transaction isolation level default read write not deferrable; +start transaction read write not deferrable; NEW_CONNECTION; -start transaction isolation level default read write not deferrable ; +start transaction read write not deferrable ; NEW_CONNECTION; -start transaction isolation level default read write not deferrable ; +start transaction read write not deferrable ; NEW_CONNECTION; -start transaction isolation level default read write not deferrable +start transaction read write not deferrable ; NEW_CONNECTION; -start transaction isolation level default read write not deferrable; +start transaction read write not deferrable; NEW_CONNECTION; -start transaction isolation level default read write not deferrable; +start transaction read write not deferrable; NEW_CONNECTION; start transaction -isolation -level -default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level default read write not deferrable; +foo start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable bar; +start transaction read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level default read write not deferrable; +%start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable%; +start transaction read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not%deferrable; +start transaction read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level default read write not deferrable; +_start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable_; +start transaction read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not_deferrable; +start transaction read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level default read write not deferrable; +&start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable&; +start transaction read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not&deferrable; +start transaction read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level default read write not deferrable; +$start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable$; +start transaction read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not$deferrable; +start transaction read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level default read write not deferrable; +@start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable@; +start transaction read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not@deferrable; +start transaction read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level default read write not deferrable; +!start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable!; +start transaction read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not!deferrable; +start transaction read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level default read write not deferrable; +*start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable*; +start transaction read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not*deferrable; +start transaction read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level default read write not deferrable; +(start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable(; +start transaction read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not(deferrable; +start transaction read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level default read write not deferrable; +)start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable); +start transaction read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not)deferrable; +start transaction read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level default read write not deferrable; +-start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable-; +start transaction read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not-deferrable; +start transaction read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level default read write not deferrable; ++start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable+; +start transaction read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not+deferrable; +start transaction read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level default read write not deferrable; +-#start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable-#; +start transaction read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not-#deferrable; +start transaction read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level default read write not deferrable; +/start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable/; +start transaction read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not/deferrable; +start transaction read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level default read write not deferrable; +\start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable\; +start transaction read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not\deferrable; +start transaction read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level default read write not deferrable; +?start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable?; +start transaction read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not?deferrable; +start transaction read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level default read write not deferrable; +-/start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable-/; +start transaction read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not-/deferrable; +start transaction read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level default read write not deferrable; +/#start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable/#; +start transaction read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not/#deferrable; +start transaction read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level default read write not deferrable; +/-start transaction read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not deferrable/-; +start transaction read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write not/-deferrable; +start transaction read write not/-deferrable; NEW_CONNECTION; -begin work isolation level default read write not deferrable; +begin work read write not deferrable; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL DEFAULT READ WRITE NOT DEFERRABLE; +BEGIN WORK READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -begin work isolation level default read write not deferrable; +begin work read write not deferrable; NEW_CONNECTION; - begin work isolation level default read write not deferrable; + begin work read write not deferrable; NEW_CONNECTION; - begin work isolation level default read write not deferrable; + begin work read write not deferrable; NEW_CONNECTION; -begin work isolation level default read write not deferrable; +begin work read write not deferrable; NEW_CONNECTION; -begin work isolation level default read write not deferrable ; +begin work read write not deferrable ; NEW_CONNECTION; -begin work isolation level default read write not deferrable ; +begin work read write not deferrable ; NEW_CONNECTION; -begin work isolation level default read write not deferrable +begin work read write not deferrable ; NEW_CONNECTION; -begin work isolation level default read write not deferrable; +begin work read write not deferrable; NEW_CONNECTION; -begin work isolation level default read write not deferrable; +begin work read write not deferrable; NEW_CONNECTION; begin work -isolation -level -default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level default read write not deferrable; +foo begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable bar; +begin work read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level default read write not deferrable; +%begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable%; +begin work read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not%deferrable; +begin work read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level default read write not deferrable; +_begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable_; +begin work read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not_deferrable; +begin work read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level default read write not deferrable; +&begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable&; +begin work read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not&deferrable; +begin work read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level default read write not deferrable; +$begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable$; +begin work read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not$deferrable; +begin work read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level default read write not deferrable; +@begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable@; +begin work read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not@deferrable; +begin work read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level default read write not deferrable; +!begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable!; +begin work read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not!deferrable; +begin work read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level default read write not deferrable; +*begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable*; +begin work read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not*deferrable; +begin work read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level default read write not deferrable; +(begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable(; +begin work read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not(deferrable; +begin work read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level default read write not deferrable; +)begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable); +begin work read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not)deferrable; +begin work read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level default read write not deferrable; +-begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable-; +begin work read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not-deferrable; +begin work read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level default read write not deferrable; ++begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable+; +begin work read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not+deferrable; +begin work read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level default read write not deferrable; +-#begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable-#; +begin work read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not-#deferrable; +begin work read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level default read write not deferrable; +/begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable/; +begin work read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not/deferrable; +begin work read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level default read write not deferrable; +\begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable\; +begin work read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not\deferrable; +begin work read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level default read write not deferrable; +?begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable?; +begin work read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not?deferrable; +begin work read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level default read write not deferrable; +-/begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable-/; +begin work read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not-/deferrable; +begin work read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level default read write not deferrable; +/#begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable/#; +begin work read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not/#deferrable; +begin work read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level default read write not deferrable; +/-begin work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not deferrable/-; +begin work read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level default read write not/-deferrable; +begin work read write not/-deferrable; NEW_CONNECTION; -start work isolation level default read only not deferrable; +start work read write not deferrable; NEW_CONNECTION; -START WORK ISOLATION LEVEL DEFAULT READ ONLY NOT DEFERRABLE; +START WORK READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -start work isolation level default read only not deferrable; +start work read write not deferrable; NEW_CONNECTION; - start work isolation level default read only not deferrable; + start work read write not deferrable; NEW_CONNECTION; - start work isolation level default read only not deferrable; + start work read write not deferrable; NEW_CONNECTION; -start work isolation level default read only not deferrable; +start work read write not deferrable; NEW_CONNECTION; -start work isolation level default read only not deferrable ; +start work read write not deferrable ; NEW_CONNECTION; -start work isolation level default read only not deferrable ; +start work read write not deferrable ; NEW_CONNECTION; -start work isolation level default read only not deferrable +start work read write not deferrable ; NEW_CONNECTION; -start work isolation level default read only not deferrable; +start work read write not deferrable; NEW_CONNECTION; -start work isolation level default read only not deferrable; +start work read write not deferrable; NEW_CONNECTION; start work -isolation -level -default read -only +write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level default read only not deferrable; +foo start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable bar; +start work read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level default read only not deferrable; +%start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable%; +start work read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not%deferrable; +start work read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level default read only not deferrable; +_start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable_; +start work read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not_deferrable; +start work read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level default read only not deferrable; +&start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable&; +start work read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not&deferrable; +start work read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level default read only not deferrable; +$start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable$; +start work read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not$deferrable; +start work read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level default read only not deferrable; +@start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable@; +start work read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not@deferrable; +start work read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level default read only not deferrable; +!start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable!; +start work read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not!deferrable; +start work read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level default read only not deferrable; +*start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable*; +start work read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not*deferrable; +start work read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level default read only not deferrable; +(start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable(; +start work read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not(deferrable; +start work read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level default read only not deferrable; +)start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable); +start work read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not)deferrable; +start work read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level default read only not deferrable; +-start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable-; +start work read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not-deferrable; +start work read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level default read only not deferrable; ++start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable+; +start work read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not+deferrable; +start work read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level default read only not deferrable; +-#start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable-#; +start work read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not-#deferrable; +start work read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level default read only not deferrable; +/start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable/; +start work read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not/deferrable; +start work read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level default read only not deferrable; +\start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable\; +start work read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not\deferrable; +start work read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level default read only not deferrable; +?start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable?; +start work read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not?deferrable; +start work read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level default read only not deferrable; +-/start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable-/; +start work read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not-/deferrable; +start work read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level default read only not deferrable; +/#start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable/#; +start work read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not/#deferrable; +start work read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level default read only not deferrable; +/-start work read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not deferrable/-; +start work read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only not/-deferrable; +start work read write not/-deferrable; NEW_CONNECTION; -begin isolation level serializable read write not deferrable; +begin isolation level default not deferrable; NEW_CONNECTION; -BEGIN ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; +BEGIN ISOLATION LEVEL DEFAULT NOT DEFERRABLE; NEW_CONNECTION; -begin isolation level serializable read write not deferrable; +begin isolation level default not deferrable; NEW_CONNECTION; - begin isolation level serializable read write not deferrable; + begin isolation level default not deferrable; NEW_CONNECTION; - begin isolation level serializable read write not deferrable; + begin isolation level default not deferrable; NEW_CONNECTION; -begin isolation level serializable read write not deferrable; +begin isolation level default not deferrable; NEW_CONNECTION; -begin isolation level serializable read write not deferrable ; +begin isolation level default not deferrable ; NEW_CONNECTION; -begin isolation level serializable read write not deferrable ; +begin isolation level default not deferrable ; NEW_CONNECTION; -begin isolation level serializable read write not deferrable +begin isolation level default not deferrable ; NEW_CONNECTION; -begin isolation level serializable read write not deferrable; +begin isolation level default not deferrable; NEW_CONNECTION; -begin isolation level serializable read write not deferrable; +begin isolation level default not deferrable; NEW_CONNECTION; begin isolation level -serializable -read -write +default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level serializable read write not deferrable; +foo begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable bar; +begin isolation level default not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level serializable read write not deferrable; +%begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable%; +begin isolation level default not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not%deferrable; +begin isolation level default not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level serializable read write not deferrable; +_begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable_; +begin isolation level default not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not_deferrable; +begin isolation level default not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level serializable read write not deferrable; +&begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable&; +begin isolation level default not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not&deferrable; +begin isolation level default not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level serializable read write not deferrable; +$begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable$; +begin isolation level default not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not$deferrable; +begin isolation level default not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level serializable read write not deferrable; +@begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable@; +begin isolation level default not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not@deferrable; +begin isolation level default not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level serializable read write not deferrable; +!begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable!; +begin isolation level default not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not!deferrable; +begin isolation level default not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level serializable read write not deferrable; +*begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable*; +begin isolation level default not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not*deferrable; +begin isolation level default not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level serializable read write not deferrable; +(begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable(; +begin isolation level default not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not(deferrable; +begin isolation level default not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level serializable read write not deferrable; +)begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable); +begin isolation level default not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not)deferrable; +begin isolation level default not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level serializable read write not deferrable; +-begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable-; +begin isolation level default not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not-deferrable; +begin isolation level default not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level serializable read write not deferrable; ++begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable+; +begin isolation level default not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not+deferrable; +begin isolation level default not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level serializable read write not deferrable; +-#begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable-#; +begin isolation level default not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not-#deferrable; +begin isolation level default not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level serializable read write not deferrable; +/begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable/; +begin isolation level default not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not/deferrable; +begin isolation level default not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level serializable read write not deferrable; +\begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable\; +begin isolation level default not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not\deferrable; +begin isolation level default not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level serializable read write not deferrable; +?begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable?; +begin isolation level default not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not?deferrable; +begin isolation level default not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level serializable read write not deferrable; +-/begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable-/; +begin isolation level default not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not-/deferrable; +begin isolation level default not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level serializable read write not deferrable; +/#begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable/#; +begin isolation level default not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not/#deferrable; +begin isolation level default not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level serializable read write not deferrable; +/-begin isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not deferrable/-; +begin isolation level default not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable read write not/-deferrable; +begin isolation level default not/-deferrable; NEW_CONNECTION; -start isolation level serializable read write not deferrable; +start isolation level default not deferrable; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; +START ISOLATION LEVEL DEFAULT NOT DEFERRABLE; NEW_CONNECTION; -start isolation level serializable read write not deferrable; +start isolation level default not deferrable; NEW_CONNECTION; - start isolation level serializable read write not deferrable; + start isolation level default not deferrable; NEW_CONNECTION; - start isolation level serializable read write not deferrable; + start isolation level default not deferrable; NEW_CONNECTION; -start isolation level serializable read write not deferrable; +start isolation level default not deferrable; NEW_CONNECTION; -start isolation level serializable read write not deferrable ; +start isolation level default not deferrable ; NEW_CONNECTION; -start isolation level serializable read write not deferrable ; +start isolation level default not deferrable ; NEW_CONNECTION; -start isolation level serializable read write not deferrable +start isolation level default not deferrable ; NEW_CONNECTION; -start isolation level serializable read write not deferrable; +start isolation level default not deferrable; NEW_CONNECTION; -start isolation level serializable read write not deferrable; +start isolation level default not deferrable; NEW_CONNECTION; start isolation level -serializable -read -write +default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable read write not deferrable; +foo start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable bar; +start isolation level default not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable read write not deferrable; +%start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable%; +start isolation level default not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not%deferrable; +start isolation level default not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable read write not deferrable; +_start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable_; +start isolation level default not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not_deferrable; +start isolation level default not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable read write not deferrable; +&start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable&; +start isolation level default not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not&deferrable; +start isolation level default not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable read write not deferrable; +$start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable$; +start isolation level default not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not$deferrable; +start isolation level default not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable read write not deferrable; +@start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable@; +start isolation level default not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not@deferrable; +start isolation level default not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable read write not deferrable; +!start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable!; +start isolation level default not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not!deferrable; +start isolation level default not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable read write not deferrable; +*start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable*; +start isolation level default not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not*deferrable; +start isolation level default not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable read write not deferrable; +(start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable(; +start isolation level default not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not(deferrable; +start isolation level default not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable read write not deferrable; +)start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable); +start isolation level default not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not)deferrable; +start isolation level default not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable read write not deferrable; +-start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable-; +start isolation level default not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not-deferrable; +start isolation level default not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable read write not deferrable; ++start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable+; +start isolation level default not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not+deferrable; +start isolation level default not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable read write not deferrable; +-#start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable-#; +start isolation level default not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not-#deferrable; +start isolation level default not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable read write not deferrable; +/start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable/; +start isolation level default not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not/deferrable; +start isolation level default not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable read write not deferrable; +\start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable\; +start isolation level default not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not\deferrable; +start isolation level default not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable read write not deferrable; +?start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable?; +start isolation level default not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not?deferrable; +start isolation level default not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable read write not deferrable; +-/start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable-/; +start isolation level default not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not-/deferrable; +start isolation level default not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable read write not deferrable; +/#start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable/#; +start isolation level default not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not/#deferrable; +start isolation level default not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable read write not deferrable; +/-start isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not deferrable/-; +start isolation level default not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write not/-deferrable; +start isolation level default not/-deferrable; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable; +begin transaction isolation level default not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY NOT DEFERRABLE; +BEGIN TRANSACTION ISOLATION LEVEL DEFAULT NOT DEFERRABLE; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable; +begin transaction isolation level default not deferrable; NEW_CONNECTION; - begin transaction isolation level serializable read only not deferrable; + begin transaction isolation level default not deferrable; NEW_CONNECTION; - begin transaction isolation level serializable read only not deferrable; + begin transaction isolation level default not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable; +begin transaction isolation level default not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable ; +begin transaction isolation level default not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable ; +begin transaction isolation level default not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable +begin transaction isolation level default not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable; +begin transaction isolation level default not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable read only not deferrable; +begin transaction isolation level default not deferrable; NEW_CONNECTION; begin transaction isolation level -serializable -read -only +default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level serializable read only not deferrable; +foo begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable bar; +begin transaction isolation level default not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level serializable read only not deferrable; +%begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable%; +begin transaction isolation level default not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not%deferrable; +begin transaction isolation level default not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level serializable read only not deferrable; +_begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable_; +begin transaction isolation level default not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not_deferrable; +begin transaction isolation level default not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level serializable read only not deferrable; +&begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable&; +begin transaction isolation level default not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not&deferrable; +begin transaction isolation level default not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level serializable read only not deferrable; +$begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable$; +begin transaction isolation level default not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not$deferrable; +begin transaction isolation level default not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level serializable read only not deferrable; +@begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable@; +begin transaction isolation level default not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not@deferrable; +begin transaction isolation level default not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level serializable read only not deferrable; +!begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable!; +begin transaction isolation level default not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not!deferrable; +begin transaction isolation level default not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level serializable read only not deferrable; +*begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable*; +begin transaction isolation level default not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not*deferrable; +begin transaction isolation level default not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level serializable read only not deferrable; +(begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable(; +begin transaction isolation level default not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not(deferrable; +begin transaction isolation level default not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level serializable read only not deferrable; +)begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable); +begin transaction isolation level default not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not)deferrable; +begin transaction isolation level default not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level serializable read only not deferrable; +-begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable-; +begin transaction isolation level default not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not-deferrable; +begin transaction isolation level default not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level serializable read only not deferrable; ++begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable+; +begin transaction isolation level default not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not+deferrable; +begin transaction isolation level default not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level serializable read only not deferrable; +-#begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable-#; +begin transaction isolation level default not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not-#deferrable; +begin transaction isolation level default not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level serializable read only not deferrable; +/begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable/; +begin transaction isolation level default not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not/deferrable; +begin transaction isolation level default not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level serializable read only not deferrable; +\begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable\; +begin transaction isolation level default not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not\deferrable; +begin transaction isolation level default not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level serializable read only not deferrable; +?begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable?; +begin transaction isolation level default not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not?deferrable; +begin transaction isolation level default not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level serializable read only not deferrable; +-/begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable-/; +begin transaction isolation level default not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not-/deferrable; +begin transaction isolation level default not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level serializable read only not deferrable; +/#begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable/#; +begin transaction isolation level default not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not/#deferrable; +begin transaction isolation level default not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level serializable read only not deferrable; +/-begin transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not deferrable/-; +begin transaction isolation level default not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable read only not/-deferrable; +begin transaction isolation level default not/-deferrable; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable; +start transaction isolation level default not deferrable; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; +START TRANSACTION ISOLATION LEVEL DEFAULT NOT DEFERRABLE; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable; +start transaction isolation level default not deferrable; NEW_CONNECTION; - start transaction isolation level serializable read write not deferrable; + start transaction isolation level default not deferrable; NEW_CONNECTION; - start transaction isolation level serializable read write not deferrable; + start transaction isolation level default not deferrable; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable; +start transaction isolation level default not deferrable; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable ; +start transaction isolation level default not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable ; +start transaction isolation level default not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable +start transaction isolation level default not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable; +start transaction isolation level default not deferrable; NEW_CONNECTION; -start transaction isolation level serializable read write not deferrable; +start transaction isolation level default not deferrable; NEW_CONNECTION; start transaction isolation level -serializable -read -write +default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable read write not deferrable; +foo start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable bar; +start transaction isolation level default not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable read write not deferrable; +%start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable%; +start transaction isolation level default not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not%deferrable; +start transaction isolation level default not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable read write not deferrable; +_start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable_; +start transaction isolation level default not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not_deferrable; +start transaction isolation level default not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable read write not deferrable; +&start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable&; +start transaction isolation level default not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not&deferrable; +start transaction isolation level default not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable read write not deferrable; +$start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable$; +start transaction isolation level default not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not$deferrable; +start transaction isolation level default not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable read write not deferrable; +@start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable@; +start transaction isolation level default not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not@deferrable; +start transaction isolation level default not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable read write not deferrable; +!start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable!; +start transaction isolation level default not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not!deferrable; +start transaction isolation level default not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable read write not deferrable; +*start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable*; +start transaction isolation level default not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not*deferrable; +start transaction isolation level default not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable read write not deferrable; +(start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable(; +start transaction isolation level default not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not(deferrable; +start transaction isolation level default not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable read write not deferrable; +)start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable); +start transaction isolation level default not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not)deferrable; +start transaction isolation level default not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable read write not deferrable; +-start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable-; +start transaction isolation level default not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not-deferrable; +start transaction isolation level default not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable read write not deferrable; ++start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable+; +start transaction isolation level default not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not+deferrable; +start transaction isolation level default not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable read write not deferrable; +-#start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable-#; +start transaction isolation level default not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not-#deferrable; +start transaction isolation level default not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable read write not deferrable; +/start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable/; +start transaction isolation level default not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not/deferrable; +start transaction isolation level default not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable read write not deferrable; +\start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable\; +start transaction isolation level default not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not\deferrable; +start transaction isolation level default not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable read write not deferrable; +?start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable?; +start transaction isolation level default not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not?deferrable; +start transaction isolation level default not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable read write not deferrable; +-/start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable-/; +start transaction isolation level default not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not-/deferrable; +start transaction isolation level default not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable read write not deferrable; +/#start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable/#; +start transaction isolation level default not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not/#deferrable; +start transaction isolation level default not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable read write not deferrable; +/-start transaction isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not deferrable/-; +start transaction isolation level default not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write not/-deferrable; +start transaction isolation level default not/-deferrable; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable; +begin work isolation level default not deferrable; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; +BEGIN WORK ISOLATION LEVEL DEFAULT NOT DEFERRABLE; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable; +begin work isolation level default not deferrable; NEW_CONNECTION; - begin work isolation level serializable read write not deferrable; + begin work isolation level default not deferrable; NEW_CONNECTION; - begin work isolation level serializable read write not deferrable; + begin work isolation level default not deferrable; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable; +begin work isolation level default not deferrable; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable ; +begin work isolation level default not deferrable ; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable ; +begin work isolation level default not deferrable ; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable +begin work isolation level default not deferrable ; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable; +begin work isolation level default not deferrable; NEW_CONNECTION; -begin work isolation level serializable read write not deferrable; +begin work isolation level default not deferrable; NEW_CONNECTION; begin work isolation level -serializable -read -write +default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level serializable read write not deferrable; +foo begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable bar; +begin work isolation level default not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level serializable read write not deferrable; +%begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable%; +begin work isolation level default not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not%deferrable; +begin work isolation level default not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level serializable read write not deferrable; +_begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable_; +begin work isolation level default not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not_deferrable; +begin work isolation level default not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level serializable read write not deferrable; +&begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable&; +begin work isolation level default not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not&deferrable; +begin work isolation level default not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level serializable read write not deferrable; +$begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable$; +begin work isolation level default not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not$deferrable; +begin work isolation level default not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level serializable read write not deferrable; +@begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable@; +begin work isolation level default not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not@deferrable; +begin work isolation level default not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level serializable read write not deferrable; +!begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable!; +begin work isolation level default not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not!deferrable; +begin work isolation level default not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level serializable read write not deferrable; +*begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable*; +begin work isolation level default not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not*deferrable; +begin work isolation level default not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level serializable read write not deferrable; +(begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable(; +begin work isolation level default not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not(deferrable; +begin work isolation level default not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level serializable read write not deferrable; +)begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable); +begin work isolation level default not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not)deferrable; +begin work isolation level default not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level serializable read write not deferrable; +-begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable-; +begin work isolation level default not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not-deferrable; +begin work isolation level default not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level serializable read write not deferrable; ++begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable+; +begin work isolation level default not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not+deferrable; +begin work isolation level default not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level serializable read write not deferrable; +-#begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable-#; +begin work isolation level default not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not-#deferrable; +begin work isolation level default not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level serializable read write not deferrable; +/begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable/; +begin work isolation level default not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not/deferrable; +begin work isolation level default not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level serializable read write not deferrable; +\begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable\; +begin work isolation level default not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not\deferrable; +begin work isolation level default not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level serializable read write not deferrable; +?begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable?; +begin work isolation level default not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not?deferrable; +begin work isolation level default not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level serializable read write not deferrable; +-/begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable-/; +begin work isolation level default not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not-/deferrable; +begin work isolation level default not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level serializable read write not deferrable; +/#begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable/#; +begin work isolation level default not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not/#deferrable; +begin work isolation level default not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level serializable read write not deferrable; +/-begin work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not deferrable/-; +begin work isolation level default not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable read write not/-deferrable; +begin work isolation level default not/-deferrable; NEW_CONNECTION; -start work isolation level serializable read only not deferrable; +start work isolation level default not deferrable; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE READ ONLY NOT DEFERRABLE; +START WORK ISOLATION LEVEL DEFAULT NOT DEFERRABLE; NEW_CONNECTION; -start work isolation level serializable read only not deferrable; +start work isolation level default not deferrable; NEW_CONNECTION; - start work isolation level serializable read only not deferrable; + start work isolation level default not deferrable; NEW_CONNECTION; - start work isolation level serializable read only not deferrable; + start work isolation level default not deferrable; NEW_CONNECTION; -start work isolation level serializable read only not deferrable; +start work isolation level default not deferrable; NEW_CONNECTION; -start work isolation level serializable read only not deferrable ; +start work isolation level default not deferrable ; NEW_CONNECTION; -start work isolation level serializable read only not deferrable ; +start work isolation level default not deferrable ; NEW_CONNECTION; -start work isolation level serializable read only not deferrable +start work isolation level default not deferrable ; NEW_CONNECTION; -start work isolation level serializable read only not deferrable; +start work isolation level default not deferrable; NEW_CONNECTION; -start work isolation level serializable read only not deferrable; +start work isolation level default not deferrable; NEW_CONNECTION; start work isolation level -serializable -read -only +default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable read only not deferrable; +foo start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable bar; +start work isolation level default not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable read only not deferrable; +%start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable%; +start work isolation level default not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not%deferrable; +start work isolation level default not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable read only not deferrable; +_start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable_; +start work isolation level default not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not_deferrable; +start work isolation level default not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable read only not deferrable; +&start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable&; +start work isolation level default not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not&deferrable; +start work isolation level default not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable read only not deferrable; +$start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable$; +start work isolation level default not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not$deferrable; +start work isolation level default not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable read only not deferrable; +@start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable@; +start work isolation level default not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not@deferrable; +start work isolation level default not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable read only not deferrable; +!start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable!; +start work isolation level default not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not!deferrable; +start work isolation level default not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable read only not deferrable; +*start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable*; +start work isolation level default not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not*deferrable; +start work isolation level default not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable read only not deferrable; +(start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable(; +start work isolation level default not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not(deferrable; +start work isolation level default not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable read only not deferrable; +)start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable); +start work isolation level default not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not)deferrable; +start work isolation level default not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable read only not deferrable; +-start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable-; +start work isolation level default not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not-deferrable; +start work isolation level default not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable read only not deferrable; ++start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable+; +start work isolation level default not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not+deferrable; +start work isolation level default not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable read only not deferrable; +-#start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable-#; +start work isolation level default not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not-#deferrable; +start work isolation level default not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable read only not deferrable; +/start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable/; +start work isolation level default not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not/deferrable; +start work isolation level default not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable read only not deferrable; +\start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable\; +start work isolation level default not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not\deferrable; +start work isolation level default not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable read only not deferrable; +?start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable?; +start work isolation level default not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not?deferrable; +start work isolation level default not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable read only not deferrable; +-/start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable-/; +start work isolation level default not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not-/deferrable; +start work isolation level default not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable read only not deferrable; +/#start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable/#; +start work isolation level default not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not/#deferrable; +start work isolation level default not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable read only not deferrable; +/-start work isolation level default not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not deferrable/-; +start work isolation level default not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only not/-deferrable; +start work isolation level default not/-deferrable; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable; +begin isolation level serializable not deferrable; NEW_CONNECTION; -BEGIN ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; +BEGIN ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable; +begin isolation level serializable not deferrable; NEW_CONNECTION; - begin isolation level serializable, read write, not deferrable; + begin isolation level serializable not deferrable; NEW_CONNECTION; - begin isolation level serializable, read write, not deferrable; + begin isolation level serializable not deferrable; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable; +begin isolation level serializable not deferrable; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable ; +begin isolation level serializable not deferrable ; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable ; +begin isolation level serializable not deferrable ; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable +begin isolation level serializable not deferrable ; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable; +begin isolation level serializable not deferrable; NEW_CONNECTION; -begin isolation level serializable, read write, not deferrable; +begin isolation level serializable not deferrable; NEW_CONNECTION; begin isolation level -serializable, -read -write, +serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin isolation level serializable, read write, not deferrable; +foo begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable bar; +begin isolation level serializable not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin isolation level serializable, read write, not deferrable; +%begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable%; +begin isolation level serializable not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not%deferrable; +begin isolation level serializable not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin isolation level serializable, read write, not deferrable; +_begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable_; +begin isolation level serializable not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not_deferrable; +begin isolation level serializable not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin isolation level serializable, read write, not deferrable; +&begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable&; +begin isolation level serializable not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not&deferrable; +begin isolation level serializable not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin isolation level serializable, read write, not deferrable; +$begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable$; +begin isolation level serializable not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not$deferrable; +begin isolation level serializable not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin isolation level serializable, read write, not deferrable; +@begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable@; +begin isolation level serializable not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not@deferrable; +begin isolation level serializable not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin isolation level serializable, read write, not deferrable; +!begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable!; +begin isolation level serializable not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not!deferrable; +begin isolation level serializable not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin isolation level serializable, read write, not deferrable; +*begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable*; +begin isolation level serializable not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not*deferrable; +begin isolation level serializable not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin isolation level serializable, read write, not deferrable; +(begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable(; +begin isolation level serializable not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not(deferrable; +begin isolation level serializable not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin isolation level serializable, read write, not deferrable; +)begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable); +begin isolation level serializable not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not)deferrable; +begin isolation level serializable not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin isolation level serializable, read write, not deferrable; +-begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable-; +begin isolation level serializable not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not-deferrable; +begin isolation level serializable not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin isolation level serializable, read write, not deferrable; ++begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable+; +begin isolation level serializable not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not+deferrable; +begin isolation level serializable not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin isolation level serializable, read write, not deferrable; +-#begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable-#; +begin isolation level serializable not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not-#deferrable; +begin isolation level serializable not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin isolation level serializable, read write, not deferrable; +/begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable/; +begin isolation level serializable not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not/deferrable; +begin isolation level serializable not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin isolation level serializable, read write, not deferrable; +\begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable\; +begin isolation level serializable not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not\deferrable; +begin isolation level serializable not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin isolation level serializable, read write, not deferrable; +?begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable?; +begin isolation level serializable not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not?deferrable; +begin isolation level serializable not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin isolation level serializable, read write, not deferrable; +-/begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable-/; +begin isolation level serializable not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not-/deferrable; +begin isolation level serializable not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin isolation level serializable, read write, not deferrable; +/#begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable/#; +begin isolation level serializable not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not/#deferrable; +begin isolation level serializable not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin isolation level serializable, read write, not deferrable; +/-begin isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not deferrable/-; +begin isolation level serializable not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin isolation level serializable, read write, not/-deferrable; +begin isolation level serializable not/-deferrable; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable; +start isolation level serializable not deferrable; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; +START ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable; +start isolation level serializable not deferrable; NEW_CONNECTION; - start isolation level serializable, read write, not deferrable; + start isolation level serializable not deferrable; NEW_CONNECTION; - start isolation level serializable, read write, not deferrable; + start isolation level serializable not deferrable; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable; +start isolation level serializable not deferrable; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable ; +start isolation level serializable not deferrable ; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable ; +start isolation level serializable not deferrable ; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable +start isolation level serializable not deferrable ; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable; +start isolation level serializable not deferrable; NEW_CONNECTION; -start isolation level serializable, read write, not deferrable; +start isolation level serializable not deferrable; NEW_CONNECTION; start isolation level -serializable, -read -write, +serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable, read write, not deferrable; +foo start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable bar; +start isolation level serializable not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable, read write, not deferrable; +%start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable%; +start isolation level serializable not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not%deferrable; +start isolation level serializable not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable, read write, not deferrable; +_start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable_; +start isolation level serializable not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not_deferrable; +start isolation level serializable not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable, read write, not deferrable; +&start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable&; +start isolation level serializable not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not&deferrable; +start isolation level serializable not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable, read write, not deferrable; +$start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable$; +start isolation level serializable not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not$deferrable; +start isolation level serializable not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable, read write, not deferrable; +@start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable@; +start isolation level serializable not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not@deferrable; +start isolation level serializable not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable, read write, not deferrable; +!start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable!; +start isolation level serializable not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not!deferrable; +start isolation level serializable not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable, read write, not deferrable; +*start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable*; +start isolation level serializable not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not*deferrable; +start isolation level serializable not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable, read write, not deferrable; +(start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable(; +start isolation level serializable not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not(deferrable; +start isolation level serializable not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable, read write, not deferrable; +)start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable); +start isolation level serializable not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not)deferrable; +start isolation level serializable not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable, read write, not deferrable; +-start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable-; +start isolation level serializable not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not-deferrable; +start isolation level serializable not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable, read write, not deferrable; ++start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable+; +start isolation level serializable not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not+deferrable; +start isolation level serializable not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable, read write, not deferrable; +-#start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable-#; +start isolation level serializable not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not-#deferrable; +start isolation level serializable not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable, read write, not deferrable; +/start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable/; +start isolation level serializable not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not/deferrable; +start isolation level serializable not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable, read write, not deferrable; +\start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable\; +start isolation level serializable not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not\deferrable; +start isolation level serializable not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable, read write, not deferrable; +?start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable?; +start isolation level serializable not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not?deferrable; +start isolation level serializable not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable, read write, not deferrable; +-/start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable-/; +start isolation level serializable not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not-/deferrable; +start isolation level serializable not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable, read write, not deferrable; +/#start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable/#; +start isolation level serializable not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not/#deferrable; +start isolation level serializable not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable, read write, not deferrable; +/-start isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not deferrable/-; +start isolation level serializable not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write, not/-deferrable; +start isolation level serializable not/-deferrable; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable; +begin transaction isolation level serializable not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY, NOT DEFERRABLE; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable; +begin transaction isolation level serializable not deferrable; NEW_CONNECTION; - begin transaction isolation level serializable, read only, not deferrable; + begin transaction isolation level serializable not deferrable; NEW_CONNECTION; - begin transaction isolation level serializable, read only, not deferrable; + begin transaction isolation level serializable not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable; +begin transaction isolation level serializable not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable ; +begin transaction isolation level serializable not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable ; +begin transaction isolation level serializable not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable +begin transaction isolation level serializable not deferrable ; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable; +begin transaction isolation level serializable not deferrable; NEW_CONNECTION; -begin transaction isolation level serializable, read only, not deferrable; +begin transaction isolation level serializable not deferrable; NEW_CONNECTION; begin transaction isolation level -serializable, -read -only, +serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction isolation level serializable, read only, not deferrable; +foo begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable bar; +begin transaction isolation level serializable not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction isolation level serializable, read only, not deferrable; +%begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable%; +begin transaction isolation level serializable not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not%deferrable; +begin transaction isolation level serializable not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction isolation level serializable, read only, not deferrable; +_begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable_; +begin transaction isolation level serializable not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not_deferrable; +begin transaction isolation level serializable not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction isolation level serializable, read only, not deferrable; +&begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable&; +begin transaction isolation level serializable not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not&deferrable; +begin transaction isolation level serializable not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction isolation level serializable, read only, not deferrable; +$begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable$; +begin transaction isolation level serializable not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not$deferrable; +begin transaction isolation level serializable not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction isolation level serializable, read only, not deferrable; +@begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable@; +begin transaction isolation level serializable not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not@deferrable; +begin transaction isolation level serializable not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction isolation level serializable, read only, not deferrable; +!begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable!; +begin transaction isolation level serializable not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not!deferrable; +begin transaction isolation level serializable not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction isolation level serializable, read only, not deferrable; +*begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable*; +begin transaction isolation level serializable not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not*deferrable; +begin transaction isolation level serializable not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction isolation level serializable, read only, not deferrable; +(begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable(; +begin transaction isolation level serializable not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not(deferrable; +begin transaction isolation level serializable not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction isolation level serializable, read only, not deferrable; +)begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable); +begin transaction isolation level serializable not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not)deferrable; +begin transaction isolation level serializable not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction isolation level serializable, read only, not deferrable; +-begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable-; +begin transaction isolation level serializable not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not-deferrable; +begin transaction isolation level serializable not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction isolation level serializable, read only, not deferrable; ++begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable+; +begin transaction isolation level serializable not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not+deferrable; +begin transaction isolation level serializable not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction isolation level serializable, read only, not deferrable; +-#begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable-#; +begin transaction isolation level serializable not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not-#deferrable; +begin transaction isolation level serializable not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction isolation level serializable, read only, not deferrable; +/begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable/; +begin transaction isolation level serializable not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not/deferrable; +begin transaction isolation level serializable not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction isolation level serializable, read only, not deferrable; +\begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable\; +begin transaction isolation level serializable not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not\deferrable; +begin transaction isolation level serializable not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction isolation level serializable, read only, not deferrable; +?begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable?; +begin transaction isolation level serializable not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not?deferrable; +begin transaction isolation level serializable not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction isolation level serializable, read only, not deferrable; +-/begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable-/; +begin transaction isolation level serializable not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not-/deferrable; +begin transaction isolation level serializable not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction isolation level serializable, read only, not deferrable; +/#begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable/#; +begin transaction isolation level serializable not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not/#deferrable; +begin transaction isolation level serializable not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction isolation level serializable, read only, not deferrable; +/-begin transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not deferrable/-; +begin transaction isolation level serializable not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction isolation level serializable, read only, not/-deferrable; +begin transaction isolation level serializable not/-deferrable; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable; +start transaction isolation level serializable not deferrable; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable; +start transaction isolation level serializable not deferrable; NEW_CONNECTION; - start transaction isolation level serializable, read write, not deferrable; + start transaction isolation level serializable not deferrable; NEW_CONNECTION; - start transaction isolation level serializable, read write, not deferrable; + start transaction isolation level serializable not deferrable; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable; +start transaction isolation level serializable not deferrable; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable ; +start transaction isolation level serializable not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable ; +start transaction isolation level serializable not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable +start transaction isolation level serializable not deferrable ; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable; +start transaction isolation level serializable not deferrable; NEW_CONNECTION; -start transaction isolation level serializable, read write, not deferrable; +start transaction isolation level serializable not deferrable; NEW_CONNECTION; start transaction isolation level -serializable, -read -write, +serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable, read write, not deferrable; +foo start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable bar; +start transaction isolation level serializable not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable, read write, not deferrable; +%start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable%; +start transaction isolation level serializable not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not%deferrable; +start transaction isolation level serializable not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable, read write, not deferrable; +_start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable_; +start transaction isolation level serializable not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not_deferrable; +start transaction isolation level serializable not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable, read write, not deferrable; +&start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable&; +start transaction isolation level serializable not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not&deferrable; +start transaction isolation level serializable not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable, read write, not deferrable; +$start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable$; +start transaction isolation level serializable not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not$deferrable; +start transaction isolation level serializable not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable, read write, not deferrable; +@start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable@; +start transaction isolation level serializable not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not@deferrable; +start transaction isolation level serializable not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable, read write, not deferrable; +!start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable!; +start transaction isolation level serializable not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not!deferrable; +start transaction isolation level serializable not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable, read write, not deferrable; +*start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable*; +start transaction isolation level serializable not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not*deferrable; +start transaction isolation level serializable not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable, read write, not deferrable; +(start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable(; +start transaction isolation level serializable not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not(deferrable; +start transaction isolation level serializable not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable, read write, not deferrable; +)start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable); +start transaction isolation level serializable not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not)deferrable; +start transaction isolation level serializable not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable, read write, not deferrable; +-start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable-; +start transaction isolation level serializable not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not-deferrable; +start transaction isolation level serializable not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable, read write, not deferrable; ++start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable+; +start transaction isolation level serializable not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not+deferrable; +start transaction isolation level serializable not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable, read write, not deferrable; +-#start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable-#; +start transaction isolation level serializable not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not-#deferrable; +start transaction isolation level serializable not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable, read write, not deferrable; +/start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable/; +start transaction isolation level serializable not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not/deferrable; +start transaction isolation level serializable not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable, read write, not deferrable; +\start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable\; +start transaction isolation level serializable not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not\deferrable; +start transaction isolation level serializable not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable, read write, not deferrable; +?start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable?; +start transaction isolation level serializable not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not?deferrable; +start transaction isolation level serializable not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable, read write, not deferrable; +-/start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable-/; +start transaction isolation level serializable not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not-/deferrable; +start transaction isolation level serializable not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable, read write, not deferrable; +/#start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable/#; +start transaction isolation level serializable not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not/#deferrable; +start transaction isolation level serializable not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable, read write, not deferrable; +/-start transaction isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not deferrable/-; +start transaction isolation level serializable not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write, not/-deferrable; +start transaction isolation level serializable not/-deferrable; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable; +begin work isolation level serializable not deferrable; NEW_CONNECTION; -BEGIN WORK ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; +BEGIN WORK ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable; +begin work isolation level serializable not deferrable; NEW_CONNECTION; - begin work isolation level serializable, read write, not deferrable; + begin work isolation level serializable not deferrable; NEW_CONNECTION; - begin work isolation level serializable, read write, not deferrable; + begin work isolation level serializable not deferrable; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable; +begin work isolation level serializable not deferrable; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable ; +begin work isolation level serializable not deferrable ; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable ; +begin work isolation level serializable not deferrable ; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable +begin work isolation level serializable not deferrable ; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable; +begin work isolation level serializable not deferrable; NEW_CONNECTION; -begin work isolation level serializable, read write, not deferrable; +begin work isolation level serializable not deferrable; NEW_CONNECTION; begin work isolation level -serializable, -read -write, +serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work isolation level serializable, read write, not deferrable; +foo begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable bar; +begin work isolation level serializable not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work isolation level serializable, read write, not deferrable; +%begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable%; +begin work isolation level serializable not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not%deferrable; +begin work isolation level serializable not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work isolation level serializable, read write, not deferrable; +_begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable_; +begin work isolation level serializable not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not_deferrable; +begin work isolation level serializable not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work isolation level serializable, read write, not deferrable; +&begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable&; +begin work isolation level serializable not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not&deferrable; +begin work isolation level serializable not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work isolation level serializable, read write, not deferrable; +$begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable$; +begin work isolation level serializable not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not$deferrable; +begin work isolation level serializable not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work isolation level serializable, read write, not deferrable; +@begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable@; +begin work isolation level serializable not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not@deferrable; +begin work isolation level serializable not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work isolation level serializable, read write, not deferrable; +!begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable!; +begin work isolation level serializable not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not!deferrable; +begin work isolation level serializable not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work isolation level serializable, read write, not deferrable; +*begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable*; +begin work isolation level serializable not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not*deferrable; +begin work isolation level serializable not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work isolation level serializable, read write, not deferrable; +(begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable(; +begin work isolation level serializable not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not(deferrable; +begin work isolation level serializable not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work isolation level serializable, read write, not deferrable; +)begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable); +begin work isolation level serializable not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not)deferrable; +begin work isolation level serializable not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work isolation level serializable, read write, not deferrable; +-begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable-; +begin work isolation level serializable not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not-deferrable; +begin work isolation level serializable not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work isolation level serializable, read write, not deferrable; ++begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable+; +begin work isolation level serializable not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not+deferrable; +begin work isolation level serializable not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work isolation level serializable, read write, not deferrable; +-#begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable-#; +begin work isolation level serializable not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not-#deferrable; +begin work isolation level serializable not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work isolation level serializable, read write, not deferrable; +/begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable/; +begin work isolation level serializable not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not/deferrable; +begin work isolation level serializable not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work isolation level serializable, read write, not deferrable; +\begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable\; +begin work isolation level serializable not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not\deferrable; +begin work isolation level serializable not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work isolation level serializable, read write, not deferrable; +?begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable?; +begin work isolation level serializable not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not?deferrable; +begin work isolation level serializable not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work isolation level serializable, read write, not deferrable; +-/begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable-/; +begin work isolation level serializable not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not-/deferrable; +begin work isolation level serializable not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work isolation level serializable, read write, not deferrable; +/#begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable/#; +begin work isolation level serializable not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not/#deferrable; +begin work isolation level serializable not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work isolation level serializable, read write, not deferrable; +/-begin work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not deferrable/-; +begin work isolation level serializable not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work isolation level serializable, read write, not/-deferrable; +begin work isolation level serializable not/-deferrable; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable not deferrable; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE, READ ONLY; +START WORK ISOLATION LEVEL SERIALIZABLE NOT DEFERRABLE; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable not deferrable; NEW_CONNECTION; - start work isolation level serializable, read only; + start work isolation level serializable not deferrable; NEW_CONNECTION; - start work isolation level serializable, read only; + start work isolation level serializable not deferrable; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable not deferrable; NEW_CONNECTION; -start work isolation level serializable, read only ; +start work isolation level serializable not deferrable ; NEW_CONNECTION; -start work isolation level serializable, read only ; +start work isolation level serializable not deferrable ; NEW_CONNECTION; -start work isolation level serializable, read only +start work isolation level serializable not deferrable ; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable not deferrable; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable not deferrable; NEW_CONNECTION; start work isolation level -serializable, -read -only; +serializable +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable, read only; +foo start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only bar; +start work isolation level serializable not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable, read only; +%start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only%; +start work isolation level serializable not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read%only; +start work isolation level serializable not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable, read only; +_start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only_; +start work isolation level serializable not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read_only; +start work isolation level serializable not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable, read only; +&start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only&; +start work isolation level serializable not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read&only; +start work isolation level serializable not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable, read only; +$start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only$; +start work isolation level serializable not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read$only; +start work isolation level serializable not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable, read only; +@start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only@; +start work isolation level serializable not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read@only; +start work isolation level serializable not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable, read only; +!start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only!; +start work isolation level serializable not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read!only; +start work isolation level serializable not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable, read only; +*start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only*; +start work isolation level serializable not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read*only; +start work isolation level serializable not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable, read only; +(start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only(; +start work isolation level serializable not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read(only; +start work isolation level serializable not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable, read only; +)start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only); +start work isolation level serializable not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read)only; +start work isolation level serializable not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable, read only; +-start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-; +start work isolation level serializable not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-only; +start work isolation level serializable not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable, read only; ++start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only+; +start work isolation level serializable not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read+only; +start work isolation level serializable not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable, read only; +-#start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-#; +start work isolation level serializable not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-#only; +start work isolation level serializable not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable, read only; +/start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/; +start work isolation level serializable not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/only; +start work isolation level serializable not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable, read only; +\start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only\; +start work isolation level serializable not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read\only; +start work isolation level serializable not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable, read only; +?start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only?; +start work isolation level serializable not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read?only; +start work isolation level serializable not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable, read only; +-/start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-/; +start work isolation level serializable not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-/only; +start work isolation level serializable not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable, read only; +/#start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/#; +start work isolation level serializable not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/#only; +start work isolation level serializable not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable, read only; +/-start work isolation level serializable not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/-; +start work isolation level serializable not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/-only; +start work isolation level serializable not/-deferrable; NEW_CONNECTION; -begin transaction not deferrable; +begin isolation level default read write not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE; +BEGIN ISOLATION LEVEL DEFAULT READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -begin transaction not deferrable; +begin isolation level default read write not deferrable; NEW_CONNECTION; - begin transaction not deferrable; + begin isolation level default read write not deferrable; NEW_CONNECTION; - begin transaction not deferrable; + begin isolation level default read write not deferrable; NEW_CONNECTION; -begin transaction not deferrable; +begin isolation level default read write not deferrable; NEW_CONNECTION; -begin transaction not deferrable ; +begin isolation level default read write not deferrable ; NEW_CONNECTION; -begin transaction not deferrable ; +begin isolation level default read write not deferrable ; NEW_CONNECTION; -begin transaction not deferrable +begin isolation level default read write not deferrable ; NEW_CONNECTION; -begin transaction not deferrable; +begin isolation level default read write not deferrable; NEW_CONNECTION; -begin transaction not deferrable; +begin isolation level default read write not deferrable; NEW_CONNECTION; begin -transaction +isolation +level +default +read +write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable; +foo begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable bar; +begin isolation level default read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable; +%begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable%; +begin isolation level default read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not%deferrable; +begin isolation level default read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable; +_begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable_; +begin isolation level default read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not_deferrable; +begin isolation level default read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable; +&begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable&; +begin isolation level default read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not&deferrable; +begin isolation level default read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable; +$begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable$; +begin isolation level default read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not$deferrable; +begin isolation level default read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable; +@begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable@; +begin isolation level default read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not@deferrable; +begin isolation level default read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable; +!begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable!; +begin isolation level default read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not!deferrable; +begin isolation level default read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable; +*begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable*; +begin isolation level default read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not*deferrable; +begin isolation level default read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable; +(begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable(; +begin isolation level default read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not(deferrable; +begin isolation level default read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable; +)begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable); +begin isolation level default read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not)deferrable; +begin isolation level default read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable; +-begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable-; +begin isolation level default read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not-deferrable; +begin isolation level default read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable; ++begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable+; +begin isolation level default read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not+deferrable; +begin isolation level default read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable; +-#begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable-#; +begin isolation level default read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not-#deferrable; +begin isolation level default read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable; +/begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable/; +begin isolation level default read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not/deferrable; +begin isolation level default read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable; +\begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable\; +begin isolation level default read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not\deferrable; +begin isolation level default read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable; +?begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable?; +begin isolation level default read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not?deferrable; +begin isolation level default read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable; +-/begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable-/; +begin isolation level default read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not-/deferrable; +begin isolation level default read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable; +/#begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable/#; +begin isolation level default read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not/#deferrable; +begin isolation level default read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable; +/-begin isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable/-; +begin isolation level default read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not/-deferrable; +begin isolation level default read write not/-deferrable; NEW_CONNECTION; -start transaction not deferrable; +start isolation level default read only not deferrable; NEW_CONNECTION; -START TRANSACTION NOT DEFERRABLE; +START ISOLATION LEVEL DEFAULT READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -start transaction not deferrable; +start isolation level default read only not deferrable; NEW_CONNECTION; - start transaction not deferrable; + start isolation level default read only not deferrable; NEW_CONNECTION; - start transaction not deferrable; + start isolation level default read only not deferrable; NEW_CONNECTION; -start transaction not deferrable; +start isolation level default read only not deferrable; NEW_CONNECTION; -start transaction not deferrable ; +start isolation level default read only not deferrable ; NEW_CONNECTION; -start transaction not deferrable ; +start isolation level default read only not deferrable ; NEW_CONNECTION; -start transaction not deferrable +start isolation level default read only not deferrable ; NEW_CONNECTION; -start transaction not deferrable; +start isolation level default read only not deferrable; NEW_CONNECTION; -start transaction not deferrable; +start isolation level default read only not deferrable; NEW_CONNECTION; start -transaction +isolation +level +default +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction not deferrable; +foo start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable bar; +start isolation level default read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction not deferrable; +%start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable%; +start isolation level default read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not%deferrable; +start isolation level default read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction not deferrable; +_start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable_; +start isolation level default read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not_deferrable; +start isolation level default read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction not deferrable; +&start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable&; +start isolation level default read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not&deferrable; +start isolation level default read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction not deferrable; +$start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable$; +start isolation level default read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not$deferrable; +start isolation level default read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction not deferrable; +@start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable@; +start isolation level default read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not@deferrable; +start isolation level default read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction not deferrable; +!start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable!; +start isolation level default read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not!deferrable; +start isolation level default read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction not deferrable; +*start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable*; +start isolation level default read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not*deferrable; +start isolation level default read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction not deferrable; +(start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable(; +start isolation level default read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not(deferrable; +start isolation level default read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction not deferrable; +)start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable); +start isolation level default read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not)deferrable; +start isolation level default read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction not deferrable; +-start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable-; +start isolation level default read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not-deferrable; +start isolation level default read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction not deferrable; ++start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable+; +start isolation level default read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not+deferrable; +start isolation level default read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction not deferrable; +-#start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable-#; +start isolation level default read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not-#deferrable; +start isolation level default read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction not deferrable; +/start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable/; +start isolation level default read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not/deferrable; +start isolation level default read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction not deferrable; +\start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable\; +start isolation level default read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not\deferrable; +start isolation level default read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction not deferrable; +?start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable?; +start isolation level default read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not?deferrable; +start isolation level default read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction not deferrable; +-/start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable-/; +start isolation level default read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not-/deferrable; +start isolation level default read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction not deferrable; +/#start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable/#; +start isolation level default read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not/#deferrable; +start isolation level default read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction not deferrable; +/-start isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not deferrable/-; +start isolation level default read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction not/-deferrable; +start isolation level default read only not/-deferrable; NEW_CONNECTION; -begin work not deferrable; +begin transaction isolation level default read only not deferrable; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE; +BEGIN TRANSACTION ISOLATION LEVEL DEFAULT READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -begin work not deferrable; +begin transaction isolation level default read only not deferrable; NEW_CONNECTION; - begin work not deferrable; + begin transaction isolation level default read only not deferrable; NEW_CONNECTION; - begin work not deferrable; + begin transaction isolation level default read only not deferrable; NEW_CONNECTION; -begin work not deferrable; +begin transaction isolation level default read only not deferrable; NEW_CONNECTION; -begin work not deferrable ; +begin transaction isolation level default read only not deferrable ; NEW_CONNECTION; -begin work not deferrable ; +begin transaction isolation level default read only not deferrable ; NEW_CONNECTION; -begin work not deferrable +begin transaction isolation level default read only not deferrable ; NEW_CONNECTION; -begin work not deferrable; +begin transaction isolation level default read only not deferrable; NEW_CONNECTION; -begin work not deferrable; +begin transaction isolation level default read only not deferrable; NEW_CONNECTION; begin -work +transaction +isolation +level +default +read +only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable; +foo begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable bar; +begin transaction isolation level default read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable; +%begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable%; +begin transaction isolation level default read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not%deferrable; +begin transaction isolation level default read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable; +_begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable_; +begin transaction isolation level default read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not_deferrable; +begin transaction isolation level default read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable; +&begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable&; +begin transaction isolation level default read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not&deferrable; +begin transaction isolation level default read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable; +$begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable$; +begin transaction isolation level default read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not$deferrable; +begin transaction isolation level default read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable; +@begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable@; +begin transaction isolation level default read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not@deferrable; +begin transaction isolation level default read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable; +!begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable!; +begin transaction isolation level default read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not!deferrable; +begin transaction isolation level default read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable; +*begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable*; +begin transaction isolation level default read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not*deferrable; +begin transaction isolation level default read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable; +(begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable(; +begin transaction isolation level default read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not(deferrable; +begin transaction isolation level default read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable; +)begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable); +begin transaction isolation level default read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not)deferrable; +begin transaction isolation level default read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable; +-begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable-; +begin transaction isolation level default read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not-deferrable; +begin transaction isolation level default read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable; ++begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable+; +begin transaction isolation level default read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not+deferrable; +begin transaction isolation level default read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable; +-#begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable-#; +begin transaction isolation level default read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not-#deferrable; +begin transaction isolation level default read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable; +/begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable/; +begin transaction isolation level default read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not/deferrable; +begin transaction isolation level default read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable; +\begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable\; +begin transaction isolation level default read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not\deferrable; +begin transaction isolation level default read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable; +?begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable?; +begin transaction isolation level default read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not?deferrable; +begin transaction isolation level default read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable; +-/begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable-/; +begin transaction isolation level default read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not-/deferrable; +begin transaction isolation level default read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable; +/#begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable/#; +begin transaction isolation level default read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not/#deferrable; +begin transaction isolation level default read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable; +/-begin transaction isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable/-; +begin transaction isolation level default read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not/-deferrable; +begin transaction isolation level default read only not/-deferrable; NEW_CONNECTION; -start work not deferrable; +start transaction isolation level default read write not deferrable; NEW_CONNECTION; -START WORK NOT DEFERRABLE; +START TRANSACTION ISOLATION LEVEL DEFAULT READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -start work not deferrable; +start transaction isolation level default read write not deferrable; NEW_CONNECTION; - start work not deferrable; + start transaction isolation level default read write not deferrable; NEW_CONNECTION; - start work not deferrable; + start transaction isolation level default read write not deferrable; NEW_CONNECTION; -start work not deferrable; +start transaction isolation level default read write not deferrable; NEW_CONNECTION; -start work not deferrable ; +start transaction isolation level default read write not deferrable ; NEW_CONNECTION; -start work not deferrable ; +start transaction isolation level default read write not deferrable ; NEW_CONNECTION; -start work not deferrable +start transaction isolation level default read write not deferrable ; NEW_CONNECTION; -start work not deferrable; +start transaction isolation level default read write not deferrable; NEW_CONNECTION; -start work not deferrable; +start transaction isolation level default read write not deferrable; NEW_CONNECTION; start -work +transaction +isolation +level +default +read +write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work not deferrable; +foo start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable bar; +start transaction isolation level default read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work not deferrable; +%start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable%; +start transaction isolation level default read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not%deferrable; +start transaction isolation level default read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work not deferrable; +_start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable_; +start transaction isolation level default read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not_deferrable; +start transaction isolation level default read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work not deferrable; +&start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable&; +start transaction isolation level default read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not&deferrable; +start transaction isolation level default read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work not deferrable; +$start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable$; +start transaction isolation level default read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not$deferrable; +start transaction isolation level default read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work not deferrable; +@start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable@; +start transaction isolation level default read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not@deferrable; +start transaction isolation level default read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work not deferrable; +!start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable!; +start transaction isolation level default read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not!deferrable; +start transaction isolation level default read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work not deferrable; +*start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable*; +start transaction isolation level default read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not*deferrable; +start transaction isolation level default read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work not deferrable; +(start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable(; +start transaction isolation level default read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not(deferrable; +start transaction isolation level default read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work not deferrable; +)start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable); +start transaction isolation level default read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not)deferrable; +start transaction isolation level default read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work not deferrable; +-start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable-; +start transaction isolation level default read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not-deferrable; +start transaction isolation level default read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work not deferrable; ++start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable+; +start transaction isolation level default read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not+deferrable; +start transaction isolation level default read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work not deferrable; +-#start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable-#; +start transaction isolation level default read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not-#deferrable; +start transaction isolation level default read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work not deferrable; +/start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable/; +start transaction isolation level default read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not/deferrable; +start transaction isolation level default read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work not deferrable; +\start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable\; +start transaction isolation level default read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not\deferrable; +start transaction isolation level default read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work not deferrable; +?start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable?; +start transaction isolation level default read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not?deferrable; +start transaction isolation level default read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work not deferrable; +-/start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable-/; +start transaction isolation level default read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not-/deferrable; +start transaction isolation level default read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work not deferrable; +/#start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable/#; +start transaction isolation level default read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not/#deferrable; +start transaction isolation level default read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work not deferrable; +/-start transaction isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not deferrable/-; +start transaction isolation level default read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work not/-deferrable; +start transaction isolation level default read write not/-deferrable; NEW_CONNECTION; -begin not deferrable read only; +begin work isolation level default read write not deferrable; NEW_CONNECTION; -BEGIN NOT DEFERRABLE READ ONLY; +BEGIN WORK ISOLATION LEVEL DEFAULT READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -begin not deferrable read only; +begin work isolation level default read write not deferrable; NEW_CONNECTION; - begin not deferrable read only; + begin work isolation level default read write not deferrable; NEW_CONNECTION; - begin not deferrable read only; + begin work isolation level default read write not deferrable; NEW_CONNECTION; -begin not deferrable read only; +begin work isolation level default read write not deferrable; NEW_CONNECTION; -begin not deferrable read only ; +begin work isolation level default read write not deferrable ; NEW_CONNECTION; -begin not deferrable read only ; +begin work isolation level default read write not deferrable ; NEW_CONNECTION; -begin not deferrable read only +begin work isolation level default read write not deferrable ; NEW_CONNECTION; -begin not deferrable read only; +begin work isolation level default read write not deferrable; NEW_CONNECTION; -begin not deferrable read only; +begin work isolation level default read write not deferrable; NEW_CONNECTION; begin -not -deferrable +work +isolation +level +default read -only; +write +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable read only; +foo begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only bar; +begin work isolation level default read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable read only; +%begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only%; +begin work isolation level default read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read%only; +begin work isolation level default read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable read only; +_begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only_; +begin work isolation level default read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read_only; +begin work isolation level default read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable read only; +&begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only&; +begin work isolation level default read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read&only; +begin work isolation level default read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable read only; +$begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only$; +begin work isolation level default read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read$only; +begin work isolation level default read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable read only; +@begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only@; +begin work isolation level default read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read@only; +begin work isolation level default read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable read only; +!begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only!; +begin work isolation level default read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read!only; +begin work isolation level default read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable read only; +*begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only*; +begin work isolation level default read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read*only; +begin work isolation level default read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable read only; +(begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only(; +begin work isolation level default read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read(only; +begin work isolation level default read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable read only; +)begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only); +begin work isolation level default read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read)only; +begin work isolation level default read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable read only; +-begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only-; +begin work isolation level default read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read-only; +begin work isolation level default read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable read only; ++begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only+; +begin work isolation level default read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read+only; +begin work isolation level default read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable read only; +-#begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only-#; +begin work isolation level default read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read-#only; +begin work isolation level default read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable read only; +/begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only/; +begin work isolation level default read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read/only; +begin work isolation level default read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable read only; +\begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only\; +begin work isolation level default read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read\only; +begin work isolation level default read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable read only; +?begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only?; +begin work isolation level default read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read?only; +begin work isolation level default read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable read only; +-/begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only-/; +begin work isolation level default read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read-/only; +begin work isolation level default read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable read only; +/#begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only/#; +begin work isolation level default read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read/#only; +begin work isolation level default read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable read only; +/-begin work isolation level default read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read only/-; +begin work isolation level default read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read/-only; +begin work isolation level default read write not/-deferrable; NEW_CONNECTION; -start read only; +start work isolation level default read only not deferrable; NEW_CONNECTION; -START READ ONLY; +START WORK ISOLATION LEVEL DEFAULT READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -start read only; +start work isolation level default read only not deferrable; NEW_CONNECTION; - start read only; + start work isolation level default read only not deferrable; NEW_CONNECTION; - start read only; + start work isolation level default read only not deferrable; NEW_CONNECTION; -start read only; +start work isolation level default read only not deferrable; NEW_CONNECTION; -start read only ; +start work isolation level default read only not deferrable ; NEW_CONNECTION; -start read only ; +start work isolation level default read only not deferrable ; NEW_CONNECTION; -start read only +start work isolation level default read only not deferrable ; NEW_CONNECTION; -start read only; +start work isolation level default read only not deferrable; NEW_CONNECTION; -start read only; +start work isolation level default read only not deferrable; NEW_CONNECTION; start +work +isolation +level +default read -only; +only +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start read only; +foo start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only bar; +start work isolation level default read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start read only; +%start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only%; +start work isolation level default read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read%only; +start work isolation level default read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start read only; +_start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only_; +start work isolation level default read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read_only; +start work isolation level default read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start read only; +&start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only&; +start work isolation level default read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read&only; +start work isolation level default read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start read only; +$start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only$; +start work isolation level default read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read$only; +start work isolation level default read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start read only; +@start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only@; +start work isolation level default read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read@only; +start work isolation level default read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start read only; +!start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only!; +start work isolation level default read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read!only; +start work isolation level default read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start read only; +*start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only*; +start work isolation level default read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read*only; +start work isolation level default read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start read only; +(start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only(; +start work isolation level default read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read(only; +start work isolation level default read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start read only; +)start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only); +start work isolation level default read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read)only; +start work isolation level default read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start read only; +-start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only-; +start work isolation level default read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read-only; +start work isolation level default read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start read only; ++start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only+; +start work isolation level default read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read+only; +start work isolation level default read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start read only; +-#start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only-#; +start work isolation level default read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read-#only; +start work isolation level default read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start read only; +/start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only/; +start work isolation level default read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read/only; +start work isolation level default read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start read only; +\start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only\; +start work isolation level default read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read\only; +start work isolation level default read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start read only; +?start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only?; +start work isolation level default read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read?only; +start work isolation level default read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start read only; +-/start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only-/; +start work isolation level default read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read-/only; +start work isolation level default read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start read only; +/#start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only/#; +start work isolation level default read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read/#only; +start work isolation level default read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start read only; +/-start work isolation level default read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read only/-; +start work isolation level default read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read/-only; +start work isolation level default read only not/-deferrable; NEW_CONNECTION; -begin transaction not deferrable read only; +begin isolation level serializable read write not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE READ ONLY; +BEGIN ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -begin transaction not deferrable read only; +begin isolation level serializable read write not deferrable; NEW_CONNECTION; - begin transaction not deferrable read only; + begin isolation level serializable read write not deferrable; NEW_CONNECTION; - begin transaction not deferrable read only; + begin isolation level serializable read write not deferrable; NEW_CONNECTION; -begin transaction not deferrable read only; +begin isolation level serializable read write not deferrable; NEW_CONNECTION; -begin transaction not deferrable read only ; +begin isolation level serializable read write not deferrable ; NEW_CONNECTION; -begin transaction not deferrable read only ; +begin isolation level serializable read write not deferrable ; NEW_CONNECTION; -begin transaction not deferrable read only +begin isolation level serializable read write not deferrable ; NEW_CONNECTION; -begin transaction not deferrable read only; +begin isolation level serializable read write not deferrable; NEW_CONNECTION; -begin transaction not deferrable read only; +begin isolation level serializable read write not deferrable; NEW_CONNECTION; begin -transaction -not -deferrable +isolation +level +serializable read -only; +write +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable read only; +foo begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only bar; +begin isolation level serializable read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable read only; +%begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only%; +begin isolation level serializable read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read%only; +begin isolation level serializable read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable read only; +_begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only_; +begin isolation level serializable read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read_only; +begin isolation level serializable read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable read only; +&begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only&; +begin isolation level serializable read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read&only; +begin isolation level serializable read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable read only; +$begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only$; +begin isolation level serializable read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read$only; +begin isolation level serializable read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable read only; +@begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only@; +begin isolation level serializable read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read@only; +begin isolation level serializable read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable read only; +!begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only!; +begin isolation level serializable read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read!only; +begin isolation level serializable read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable read only; +*begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only*; +begin isolation level serializable read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read*only; +begin isolation level serializable read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable read only; +(begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only(; +begin isolation level serializable read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read(only; +begin isolation level serializable read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable read only; +)begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only); +begin isolation level serializable read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read)only; +begin isolation level serializable read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable read only; +-begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only-; +begin isolation level serializable read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read-only; +begin isolation level serializable read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable read only; ++begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only+; +begin isolation level serializable read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read+only; +begin isolation level serializable read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable read only; +-#begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only-#; +begin isolation level serializable read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read-#only; +begin isolation level serializable read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable read only; +/begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only/; +begin isolation level serializable read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read/only; +begin isolation level serializable read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable read only; +\begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only\; +begin isolation level serializable read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read\only; +begin isolation level serializable read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable read only; +?begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only?; +begin isolation level serializable read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read?only; +begin isolation level serializable read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable read only; +-/begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only-/; +begin isolation level serializable read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read-/only; +begin isolation level serializable read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable read only; +/#begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only/#; +begin isolation level serializable read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read/#only; +begin isolation level serializable read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable read only; +/-begin isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read only/-; +begin isolation level serializable read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read/-only; +begin isolation level serializable read write not/-deferrable; NEW_CONNECTION; -start transaction read only; +start isolation level serializable read write not deferrable; NEW_CONNECTION; -START TRANSACTION READ ONLY; +START ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -start transaction read only; +start isolation level serializable read write not deferrable; NEW_CONNECTION; - start transaction read only; + start isolation level serializable read write not deferrable; NEW_CONNECTION; - start transaction read only; + start isolation level serializable read write not deferrable; NEW_CONNECTION; -start transaction read only; +start isolation level serializable read write not deferrable; NEW_CONNECTION; -start transaction read only ; +start isolation level serializable read write not deferrable ; NEW_CONNECTION; -start transaction read only ; +start isolation level serializable read write not deferrable ; NEW_CONNECTION; -start transaction read only +start isolation level serializable read write not deferrable ; NEW_CONNECTION; -start transaction read only; +start isolation level serializable read write not deferrable; NEW_CONNECTION; -start transaction read only; +start isolation level serializable read write not deferrable; NEW_CONNECTION; start -transaction +isolation +level +serializable read -only; +write +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction read only; +foo start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only bar; +start isolation level serializable read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction read only; +%start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only%; +start isolation level serializable read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read%only; +start isolation level serializable read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction read only; +_start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only_; +start isolation level serializable read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read_only; +start isolation level serializable read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction read only; +&start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only&; +start isolation level serializable read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read&only; +start isolation level serializable read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction read only; +$start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only$; +start isolation level serializable read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read$only; +start isolation level serializable read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction read only; +@start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only@; +start isolation level serializable read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read@only; +start isolation level serializable read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction read only; +!start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only!; +start isolation level serializable read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read!only; +start isolation level serializable read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction read only; +*start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only*; +start isolation level serializable read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read*only; +start isolation level serializable read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction read only; +(start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only(; +start isolation level serializable read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read(only; +start isolation level serializable read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction read only; +)start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only); +start isolation level serializable read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read)only; +start isolation level serializable read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction read only; +-start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only-; +start isolation level serializable read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read-only; +start isolation level serializable read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction read only; ++start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only+; +start isolation level serializable read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read+only; +start isolation level serializable read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction read only; +-#start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only-#; +start isolation level serializable read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read-#only; +start isolation level serializable read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction read only; +/start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only/; +start isolation level serializable read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read/only; +start isolation level serializable read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction read only; +\start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only\; +start isolation level serializable read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read\only; +start isolation level serializable read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction read only; +?start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only?; +start isolation level serializable read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read?only; +start isolation level serializable read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction read only; +-/start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only-/; +start isolation level serializable read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read-/only; +start isolation level serializable read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction read only; +/#start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only/#; +start isolation level serializable read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read/#only; +start isolation level serializable read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction read only; +/-start isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read only/-; +start isolation level serializable read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read/-only; +start isolation level serializable read write not/-deferrable; NEW_CONNECTION; -begin work not deferrable read only; +begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE READ ONLY; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -begin work not deferrable read only; +begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; - begin work not deferrable read only; + begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; - begin work not deferrable read only; + begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; -begin work not deferrable read only; +begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; -begin work not deferrable read only ; +begin transaction isolation level serializable read only not deferrable ; NEW_CONNECTION; -begin work not deferrable read only ; +begin transaction isolation level serializable read only not deferrable ; NEW_CONNECTION; -begin work not deferrable read only +begin transaction isolation level serializable read only not deferrable ; NEW_CONNECTION; -begin work not deferrable read only; +begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; -begin work not deferrable read only; +begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; begin -work -not -deferrable +transaction +isolation +level +serializable read -only; +only +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable read only; +foo begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only bar; +begin transaction isolation level serializable read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable read only; +%begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only%; +begin transaction isolation level serializable read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read%only; +begin transaction isolation level serializable read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable read only; +_begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only_; +begin transaction isolation level serializable read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read_only; +begin transaction isolation level serializable read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable read only; +&begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only&; +begin transaction isolation level serializable read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read&only; +begin transaction isolation level serializable read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable read only; +$begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only$; +begin transaction isolation level serializable read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read$only; +begin transaction isolation level serializable read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable read only; +@begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only@; +begin transaction isolation level serializable read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read@only; +begin transaction isolation level serializable read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable read only; +!begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only!; +begin transaction isolation level serializable read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read!only; +begin transaction isolation level serializable read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable read only; +*begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only*; +begin transaction isolation level serializable read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read*only; +begin transaction isolation level serializable read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable read only; +(begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only(; +begin transaction isolation level serializable read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read(only; +begin transaction isolation level serializable read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable read only; +)begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only); +begin transaction isolation level serializable read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read)only; +begin transaction isolation level serializable read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable read only; +-begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only-; +begin transaction isolation level serializable read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read-only; +begin transaction isolation level serializable read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable read only; ++begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only+; +begin transaction isolation level serializable read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read+only; +begin transaction isolation level serializable read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable read only; +-#begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only-#; +begin transaction isolation level serializable read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read-#only; +begin transaction isolation level serializable read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable read only; +/begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only/; +begin transaction isolation level serializable read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read/only; +begin transaction isolation level serializable read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable read only; +\begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only\; +begin transaction isolation level serializable read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read\only; +begin transaction isolation level serializable read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable read only; +?begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only?; +begin transaction isolation level serializable read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read?only; +begin transaction isolation level serializable read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable read only; +-/begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only-/; +begin transaction isolation level serializable read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read-/only; +begin transaction isolation level serializable read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable read only; +/#begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only/#; +begin transaction isolation level serializable read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read/#only; +begin transaction isolation level serializable read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable read only; +/-begin transaction isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read only/-; +begin transaction isolation level serializable read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read/-only; +begin transaction isolation level serializable read only not/-deferrable; NEW_CONNECTION; -start work read only; +start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; -START WORK READ ONLY; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -start work read only; +start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; - start work read only; + start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; - start work read only; + start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; -start work read only; +start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; -start work read only ; +start transaction isolation level serializable read write not deferrable ; NEW_CONNECTION; -start work read only ; +start transaction isolation level serializable read write not deferrable ; NEW_CONNECTION; -start work read only +start transaction isolation level serializable read write not deferrable ; NEW_CONNECTION; -start work read only; +start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; -start work read only; +start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; start -work +transaction +isolation +level +serializable read -only; +write +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work read only; +foo start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only bar; +start transaction isolation level serializable read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work read only; +%start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only%; +start transaction isolation level serializable read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read%only; +start transaction isolation level serializable read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work read only; +_start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only_; +start transaction isolation level serializable read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read_only; +start transaction isolation level serializable read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work read only; +&start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only&; +start transaction isolation level serializable read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read&only; +start transaction isolation level serializable read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work read only; +$start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only$; +start transaction isolation level serializable read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read$only; +start transaction isolation level serializable read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work read only; +@start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only@; +start transaction isolation level serializable read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read@only; +start transaction isolation level serializable read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work read only; +!start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only!; +start transaction isolation level serializable read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read!only; +start transaction isolation level serializable read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work read only; +*start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only*; +start transaction isolation level serializable read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read*only; +start transaction isolation level serializable read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work read only; +(start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only(; +start transaction isolation level serializable read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read(only; +start transaction isolation level serializable read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work read only; +)start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only); +start transaction isolation level serializable read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read)only; +start transaction isolation level serializable read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work read only; +-start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only-; +start transaction isolation level serializable read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read-only; +start transaction isolation level serializable read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work read only; ++start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only+; +start transaction isolation level serializable read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read+only; +start transaction isolation level serializable read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work read only; +-#start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only-#; +start transaction isolation level serializable read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read-#only; +start transaction isolation level serializable read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work read only; +/start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only/; +start transaction isolation level serializable read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read/only; +start transaction isolation level serializable read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work read only; +\start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only\; +start transaction isolation level serializable read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read\only; +start transaction isolation level serializable read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work read only; +?start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only?; +start transaction isolation level serializable read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read?only; +start transaction isolation level serializable read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work read only; +-/start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only-/; +start transaction isolation level serializable read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read-/only; +start transaction isolation level serializable read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work read only; +/#start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only/#; +start transaction isolation level serializable read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read/#only; +start transaction isolation level serializable read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work read only; +/-start transaction isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read only/-; +start transaction isolation level serializable read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read/-only; +start transaction isolation level serializable read write not/-deferrable; NEW_CONNECTION; -begin not deferrable read write; +begin work isolation level serializable read write not deferrable; NEW_CONNECTION; -BEGIN NOT DEFERRABLE READ WRITE; +BEGIN WORK ISOLATION LEVEL SERIALIZABLE READ WRITE NOT DEFERRABLE; NEW_CONNECTION; -begin not deferrable read write; +begin work isolation level serializable read write not deferrable; NEW_CONNECTION; - begin not deferrable read write; + begin work isolation level serializable read write not deferrable; NEW_CONNECTION; - begin not deferrable read write; + begin work isolation level serializable read write not deferrable; NEW_CONNECTION; -begin not deferrable read write; +begin work isolation level serializable read write not deferrable; NEW_CONNECTION; -begin not deferrable read write ; +begin work isolation level serializable read write not deferrable ; NEW_CONNECTION; -begin not deferrable read write ; +begin work isolation level serializable read write not deferrable ; NEW_CONNECTION; -begin not deferrable read write +begin work isolation level serializable read write not deferrable ; NEW_CONNECTION; -begin not deferrable read write; +begin work isolation level serializable read write not deferrable; NEW_CONNECTION; -begin not deferrable read write; +begin work isolation level serializable read write not deferrable; NEW_CONNECTION; begin -not -deferrable +work +isolation +level +serializable read -write; +write +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable read write; +foo begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write bar; +begin work isolation level serializable read write not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable read write; +%begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write%; +begin work isolation level serializable read write not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read%write; +begin work isolation level serializable read write not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable read write; +_begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write_; +begin work isolation level serializable read write not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read_write; +begin work isolation level serializable read write not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable read write; +&begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write&; +begin work isolation level serializable read write not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read&write; +begin work isolation level serializable read write not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable read write; +$begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write$; +begin work isolation level serializable read write not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read$write; +begin work isolation level serializable read write not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable read write; +@begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write@; +begin work isolation level serializable read write not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read@write; +begin work isolation level serializable read write not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable read write; +!begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write!; +begin work isolation level serializable read write not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read!write; +begin work isolation level serializable read write not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable read write; +*begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write*; +begin work isolation level serializable read write not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read*write; +begin work isolation level serializable read write not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable read write; +(begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write(; +begin work isolation level serializable read write not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read(write; +begin work isolation level serializable read write not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable read write; +)begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write); +begin work isolation level serializable read write not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read)write; +begin work isolation level serializable read write not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable read write; +-begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write-; +begin work isolation level serializable read write not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read-write; +begin work isolation level serializable read write not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable read write; ++begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write+; +begin work isolation level serializable read write not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read+write; +begin work isolation level serializable read write not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable read write; +-#begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write-#; +begin work isolation level serializable read write not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read-#write; +begin work isolation level serializable read write not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable read write; +/begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write/; +begin work isolation level serializable read write not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read/write; +begin work isolation level serializable read write not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable read write; +\begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write\; +begin work isolation level serializable read write not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read\write; +begin work isolation level serializable read write not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable read write; +?begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write?; +begin work isolation level serializable read write not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read?write; +begin work isolation level serializable read write not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable read write; +-/begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write-/; +begin work isolation level serializable read write not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read-/write; +begin work isolation level serializable read write not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable read write; +/#begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write/#; +begin work isolation level serializable read write not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read/#write; +begin work isolation level serializable read write not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable read write; +/-begin work isolation level serializable read write not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read write/-; +begin work isolation level serializable read write not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable read/-write; +begin work isolation level serializable read write not/-deferrable; NEW_CONNECTION; -start read write; +start work isolation level serializable read only not deferrable; NEW_CONNECTION; -START READ WRITE; +START WORK ISOLATION LEVEL SERIALIZABLE READ ONLY NOT DEFERRABLE; NEW_CONNECTION; -start read write; +start work isolation level serializable read only not deferrable; NEW_CONNECTION; - start read write; + start work isolation level serializable read only not deferrable; NEW_CONNECTION; - start read write; + start work isolation level serializable read only not deferrable; NEW_CONNECTION; -start read write; +start work isolation level serializable read only not deferrable; NEW_CONNECTION; -start read write ; +start work isolation level serializable read only not deferrable ; NEW_CONNECTION; -start read write ; +start work isolation level serializable read only not deferrable ; NEW_CONNECTION; -start read write +start work isolation level serializable read only not deferrable ; NEW_CONNECTION; -start read write; +start work isolation level serializable read only not deferrable; NEW_CONNECTION; -start read write; +start work isolation level serializable read only not deferrable; NEW_CONNECTION; start +work +isolation +level +serializable read -write; +only +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start read write; +foo start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write bar; +start work isolation level serializable read only not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start read write; +%start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write%; +start work isolation level serializable read only not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read%write; +start work isolation level serializable read only not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start read write; +_start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write_; +start work isolation level serializable read only not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read_write; +start work isolation level serializable read only not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start read write; +&start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write&; +start work isolation level serializable read only not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read&write; +start work isolation level serializable read only not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start read write; +$start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write$; +start work isolation level serializable read only not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read$write; +start work isolation level serializable read only not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start read write; +@start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write@; +start work isolation level serializable read only not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read@write; +start work isolation level serializable read only not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start read write; +!start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write!; +start work isolation level serializable read only not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read!write; +start work isolation level serializable read only not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start read write; +*start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write*; +start work isolation level serializable read only not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read*write; +start work isolation level serializable read only not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start read write; +(start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write(; +start work isolation level serializable read only not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read(write; +start work isolation level serializable read only not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start read write; +)start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write); +start work isolation level serializable read only not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read)write; +start work isolation level serializable read only not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start read write; +-start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write-; +start work isolation level serializable read only not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read-write; +start work isolation level serializable read only not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start read write; ++start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write+; +start work isolation level serializable read only not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read+write; +start work isolation level serializable read only not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start read write; +-#start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write-#; +start work isolation level serializable read only not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read-#write; +start work isolation level serializable read only not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start read write; +/start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write/; +start work isolation level serializable read only not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read/write; +start work isolation level serializable read only not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start read write; +\start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write\; +start work isolation level serializable read only not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read\write; +start work isolation level serializable read only not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start read write; +?start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write?; +start work isolation level serializable read only not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read?write; +start work isolation level serializable read only not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start read write; +-/start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write-/; +start work isolation level serializable read only not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read-/write; +start work isolation level serializable read only not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start read write; +/#start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write/#; +start work isolation level serializable read only not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read/#write; +start work isolation level serializable read only not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start read write; +/-start work isolation level serializable read only not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read write/-; +start work isolation level serializable read only not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start read/-write; +start work isolation level serializable read only not/-deferrable; NEW_CONNECTION; -begin transaction not deferrable read write; +begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE READ WRITE; +BEGIN ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; NEW_CONNECTION; -begin transaction not deferrable read write; +begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; - begin transaction not deferrable read write; + begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; - begin transaction not deferrable read write; + begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; -begin transaction not deferrable read write; +begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; -begin transaction not deferrable read write ; +begin isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -begin transaction not deferrable read write ; +begin isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -begin transaction not deferrable read write +begin isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -begin transaction not deferrable read write; +begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; -begin transaction not deferrable read write; +begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; begin -transaction -not -deferrable +isolation +level +serializable, read -write; +write, +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable read write; +foo begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write bar; +begin isolation level serializable, read write, not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable read write; +%begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write%; +begin isolation level serializable, read write, not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read%write; +begin isolation level serializable, read write, not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable read write; +_begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write_; +begin isolation level serializable, read write, not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read_write; +begin isolation level serializable, read write, not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable read write; +&begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write&; +begin isolation level serializable, read write, not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read&write; +begin isolation level serializable, read write, not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable read write; +$begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write$; +begin isolation level serializable, read write, not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read$write; +begin isolation level serializable, read write, not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable read write; +@begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write@; +begin isolation level serializable, read write, not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read@write; +begin isolation level serializable, read write, not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable read write; +!begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write!; +begin isolation level serializable, read write, not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read!write; +begin isolation level serializable, read write, not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable read write; +*begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write*; +begin isolation level serializable, read write, not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read*write; +begin isolation level serializable, read write, not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable read write; +(begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write(; +begin isolation level serializable, read write, not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read(write; +begin isolation level serializable, read write, not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable read write; +)begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write); +begin isolation level serializable, read write, not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read)write; +begin isolation level serializable, read write, not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable read write; +-begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write-; +begin isolation level serializable, read write, not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read-write; +begin isolation level serializable, read write, not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable read write; ++begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write+; +begin isolation level serializable, read write, not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read+write; +begin isolation level serializable, read write, not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable read write; +-#begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write-#; +begin isolation level serializable, read write, not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read-#write; +begin isolation level serializable, read write, not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable read write; +/begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write/; +begin isolation level serializable, read write, not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read/write; +begin isolation level serializable, read write, not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable read write; +\begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write\; +begin isolation level serializable, read write, not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read\write; +begin isolation level serializable, read write, not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable read write; +?begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write?; +begin isolation level serializable, read write, not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read?write; +begin isolation level serializable, read write, not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable read write; +-/begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write-/; +begin isolation level serializable, read write, not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read-/write; +begin isolation level serializable, read write, not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable read write; +/#begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write/#; +begin isolation level serializable, read write, not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read/#write; +begin isolation level serializable, read write, not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable read write; +/-begin isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read write/-; +begin isolation level serializable, read write, not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable read/-write; +begin isolation level serializable, read write, not/-deferrable; NEW_CONNECTION; -start transaction read write; +start isolation level serializable, read write, not deferrable; NEW_CONNECTION; -START TRANSACTION READ WRITE; +START ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; NEW_CONNECTION; -start transaction read write; +start isolation level serializable, read write, not deferrable; NEW_CONNECTION; - start transaction read write; + start isolation level serializable, read write, not deferrable; NEW_CONNECTION; - start transaction read write; + start isolation level serializable, read write, not deferrable; NEW_CONNECTION; -start transaction read write; +start isolation level serializable, read write, not deferrable; NEW_CONNECTION; -start transaction read write ; +start isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -start transaction read write ; +start isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -start transaction read write +start isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -start transaction read write; +start isolation level serializable, read write, not deferrable; NEW_CONNECTION; -start transaction read write; +start isolation level serializable, read write, not deferrable; NEW_CONNECTION; start -transaction +isolation +level +serializable, read -write; +write, +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction read write; +foo start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write bar; +start isolation level serializable, read write, not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction read write; +%start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write%; +start isolation level serializable, read write, not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read%write; +start isolation level serializable, read write, not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction read write; +_start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write_; +start isolation level serializable, read write, not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read_write; +start isolation level serializable, read write, not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction read write; +&start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write&; +start isolation level serializable, read write, not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read&write; +start isolation level serializable, read write, not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction read write; +$start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write$; +start isolation level serializable, read write, not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read$write; +start isolation level serializable, read write, not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction read write; +@start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write@; +start isolation level serializable, read write, not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read@write; +start isolation level serializable, read write, not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction read write; +!start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write!; +start isolation level serializable, read write, not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read!write; +start isolation level serializable, read write, not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction read write; +*start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write*; +start isolation level serializable, read write, not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read*write; +start isolation level serializable, read write, not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction read write; +(start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write(; +start isolation level serializable, read write, not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read(write; +start isolation level serializable, read write, not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction read write; +)start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write); +start isolation level serializable, read write, not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read)write; +start isolation level serializable, read write, not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction read write; +-start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write-; +start isolation level serializable, read write, not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read-write; +start isolation level serializable, read write, not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction read write; ++start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write+; +start isolation level serializable, read write, not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read+write; +start isolation level serializable, read write, not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction read write; +-#start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write-#; +start isolation level serializable, read write, not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read-#write; +start isolation level serializable, read write, not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction read write; +/start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write/; +start isolation level serializable, read write, not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read/write; +start isolation level serializable, read write, not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction read write; +\start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write\; +start isolation level serializable, read write, not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read\write; +start isolation level serializable, read write, not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction read write; +?start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write?; +start isolation level serializable, read write, not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read?write; +start isolation level serializable, read write, not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction read write; +-/start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write-/; +start isolation level serializable, read write, not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read-/write; +start isolation level serializable, read write, not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction read write; +/#start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write/#; +start isolation level serializable, read write, not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read/#write; +start isolation level serializable, read write, not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction read write; +/-start isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read write/-; +start isolation level serializable, read write, not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction read/-write; +start isolation level serializable, read write, not/-deferrable; NEW_CONNECTION; -begin work not deferrable read write; +begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE READ WRITE; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY, NOT DEFERRABLE; NEW_CONNECTION; -begin work not deferrable read write; +begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; - begin work not deferrable read write; + begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; - begin work not deferrable read write; + begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; -begin work not deferrable read write; +begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; -begin work not deferrable read write ; +begin transaction isolation level serializable, read only, not deferrable ; NEW_CONNECTION; -begin work not deferrable read write ; +begin transaction isolation level serializable, read only, not deferrable ; NEW_CONNECTION; -begin work not deferrable read write +begin transaction isolation level serializable, read only, not deferrable ; NEW_CONNECTION; -begin work not deferrable read write; +begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; -begin work not deferrable read write; +begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; begin -work -not -deferrable +transaction +isolation +level +serializable, read -write; +only, +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable read write; +foo begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write bar; +begin transaction isolation level serializable, read only, not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable read write; +%begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write%; +begin transaction isolation level serializable, read only, not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read%write; +begin transaction isolation level serializable, read only, not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable read write; +_begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write_; +begin transaction isolation level serializable, read only, not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read_write; +begin transaction isolation level serializable, read only, not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable read write; +&begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write&; +begin transaction isolation level serializable, read only, not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read&write; +begin transaction isolation level serializable, read only, not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable read write; +$begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write$; +begin transaction isolation level serializable, read only, not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read$write; +begin transaction isolation level serializable, read only, not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable read write; +@begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write@; +begin transaction isolation level serializable, read only, not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read@write; +begin transaction isolation level serializable, read only, not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable read write; +!begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write!; +begin transaction isolation level serializable, read only, not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read!write; +begin transaction isolation level serializable, read only, not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable read write; +*begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write*; +begin transaction isolation level serializable, read only, not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read*write; +begin transaction isolation level serializable, read only, not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable read write; +(begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write(; +begin transaction isolation level serializable, read only, not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read(write; +begin transaction isolation level serializable, read only, not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable read write; +)begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write); +begin transaction isolation level serializable, read only, not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read)write; +begin transaction isolation level serializable, read only, not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable read write; +-begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write-; +begin transaction isolation level serializable, read only, not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read-write; +begin transaction isolation level serializable, read only, not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable read write; ++begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write+; +begin transaction isolation level serializable, read only, not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read+write; +begin transaction isolation level serializable, read only, not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable read write; +-#begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write-#; +begin transaction isolation level serializable, read only, not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read-#write; +begin transaction isolation level serializable, read only, not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable read write; +/begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write/; +begin transaction isolation level serializable, read only, not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read/write; +begin transaction isolation level serializable, read only, not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable read write; +\begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write\; +begin transaction isolation level serializable, read only, not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read\write; +begin transaction isolation level serializable, read only, not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable read write; +?begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write?; +begin transaction isolation level serializable, read only, not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read?write; +begin transaction isolation level serializable, read only, not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable read write; +-/begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write-/; +begin transaction isolation level serializable, read only, not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read-/write; +begin transaction isolation level serializable, read only, not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable read write; +/#begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write/#; +begin transaction isolation level serializable, read only, not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read/#write; +begin transaction isolation level serializable, read only, not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable read write; +/-begin transaction isolation level serializable, read only, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read write/-; +begin transaction isolation level serializable, read only, not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable read/-write; +begin transaction isolation level serializable, read only, not/-deferrable; NEW_CONNECTION; -start work read write; +start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; -START WORK READ WRITE; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; NEW_CONNECTION; -start work read write; +start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; - start work read write; + start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; - start work read write; + start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; -start work read write; +start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; -start work read write ; +start transaction isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -start work read write ; +start transaction isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -start work read write +start transaction isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -start work read write; +start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; -start work read write; +start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; start -work +transaction +isolation +level +serializable, read -write; +write, +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work read write; +foo start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write bar; +start transaction isolation level serializable, read write, not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work read write; +%start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write%; +start transaction isolation level serializable, read write, not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read%write; +start transaction isolation level serializable, read write, not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work read write; +_start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write_; +start transaction isolation level serializable, read write, not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read_write; +start transaction isolation level serializable, read write, not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work read write; +&start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write&; +start transaction isolation level serializable, read write, not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read&write; +start transaction isolation level serializable, read write, not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work read write; +$start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write$; +start transaction isolation level serializable, read write, not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read$write; +start transaction isolation level serializable, read write, not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work read write; +@start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write@; +start transaction isolation level serializable, read write, not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read@write; +start transaction isolation level serializable, read write, not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work read write; +!start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write!; +start transaction isolation level serializable, read write, not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read!write; +start transaction isolation level serializable, read write, not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work read write; +*start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write*; +start transaction isolation level serializable, read write, not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read*write; +start transaction isolation level serializable, read write, not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work read write; +(start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write(; +start transaction isolation level serializable, read write, not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read(write; +start transaction isolation level serializable, read write, not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work read write; +)start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write); +start transaction isolation level serializable, read write, not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read)write; +start transaction isolation level serializable, read write, not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work read write; +-start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write-; +start transaction isolation level serializable, read write, not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read-write; +start transaction isolation level serializable, read write, not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work read write; ++start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write+; +start transaction isolation level serializable, read write, not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read+write; +start transaction isolation level serializable, read write, not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work read write; +-#start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write-#; +start transaction isolation level serializable, read write, not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read-#write; +start transaction isolation level serializable, read write, not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work read write; +/start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write/; +start transaction isolation level serializable, read write, not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read/write; +start transaction isolation level serializable, read write, not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work read write; +\start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write\; +start transaction isolation level serializable, read write, not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read\write; +start transaction isolation level serializable, read write, not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work read write; +?start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write?; +start transaction isolation level serializable, read write, not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read?write; +start transaction isolation level serializable, read write, not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work read write; +-/start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write-/; +start transaction isolation level serializable, read write, not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read-/write; +start transaction isolation level serializable, read write, not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work read write; +/#start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write/#; +start transaction isolation level serializable, read write, not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read/#write; +start transaction isolation level serializable, read write, not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work read write; +/-start transaction isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read write/-; +start transaction isolation level serializable, read write, not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work read/-write; +start transaction isolation level serializable, read write, not/-deferrable; NEW_CONNECTION; -begin not deferrable isolation level default; +begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; -BEGIN NOT DEFERRABLE ISOLATION LEVEL DEFAULT; +BEGIN WORK ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; NEW_CONNECTION; -begin not deferrable isolation level default; +begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; - begin not deferrable isolation level default; + begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; - begin not deferrable isolation level default; + begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; -begin not deferrable isolation level default; +begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; -begin not deferrable isolation level default ; +begin work isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -begin not deferrable isolation level default ; +begin work isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -begin not deferrable isolation level default +begin work isolation level serializable, read write, not deferrable ; NEW_CONNECTION; -begin not deferrable isolation level default; +begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; -begin not deferrable isolation level default; +begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; begin -not -deferrable +work isolation level -default; +serializable, +read +write, +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable isolation level default; +foo begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default bar; +begin work isolation level serializable, read write, not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable isolation level default; +%begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default%; +begin work isolation level serializable, read write, not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level%default; +begin work isolation level serializable, read write, not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable isolation level default; +_begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default_; +begin work isolation level serializable, read write, not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level_default; +begin work isolation level serializable, read write, not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable isolation level default; +&begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default&; +begin work isolation level serializable, read write, not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level&default; +begin work isolation level serializable, read write, not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable isolation level default; +$begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default$; +begin work isolation level serializable, read write, not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level$default; +begin work isolation level serializable, read write, not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable isolation level default; +@begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default@; +begin work isolation level serializable, read write, not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level@default; +begin work isolation level serializable, read write, not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable isolation level default; +!begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default!; +begin work isolation level serializable, read write, not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level!default; +begin work isolation level serializable, read write, not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable isolation level default; +*begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default*; +begin work isolation level serializable, read write, not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level*default; +begin work isolation level serializable, read write, not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable isolation level default; +(begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default(; +begin work isolation level serializable, read write, not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level(default; +begin work isolation level serializable, read write, not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable isolation level default; +)begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default); +begin work isolation level serializable, read write, not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level)default; +begin work isolation level serializable, read write, not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable isolation level default; +-begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default-; +begin work isolation level serializable, read write, not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level-default; +begin work isolation level serializable, read write, not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable isolation level default; ++begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default+; +begin work isolation level serializable, read write, not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level+default; +begin work isolation level serializable, read write, not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable isolation level default; +-#begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default-#; +begin work isolation level serializable, read write, not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level-#default; +begin work isolation level serializable, read write, not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable isolation level default; +/begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default/; +begin work isolation level serializable, read write, not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level/default; +begin work isolation level serializable, read write, not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable isolation level default; +\begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default\; +begin work isolation level serializable, read write, not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level\default; +begin work isolation level serializable, read write, not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable isolation level default; +?begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default?; +begin work isolation level serializable, read write, not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level?default; +begin work isolation level serializable, read write, not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable isolation level default; +-/begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default-/; +begin work isolation level serializable, read write, not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level-/default; +begin work isolation level serializable, read write, not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable isolation level default; +/#begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default/#; +begin work isolation level serializable, read write, not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level/#default; +begin work isolation level serializable, read write, not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable isolation level default; +/-begin work isolation level serializable, read write, not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default/-; +begin work isolation level serializable, read write, not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level/-default; +begin work isolation level serializable, read write, not/-deferrable; NEW_CONNECTION; -start isolation level default; +start work isolation level serializable, read only; NEW_CONNECTION; -START ISOLATION LEVEL DEFAULT; +START WORK ISOLATION LEVEL SERIALIZABLE, READ ONLY; NEW_CONNECTION; -start isolation level default; +start work isolation level serializable, read only; NEW_CONNECTION; - start isolation level default; + start work isolation level serializable, read only; NEW_CONNECTION; - start isolation level default; + start work isolation level serializable, read only; NEW_CONNECTION; -start isolation level default; +start work isolation level serializable, read only; NEW_CONNECTION; -start isolation level default ; +start work isolation level serializable, read only ; NEW_CONNECTION; -start isolation level default ; +start work isolation level serializable, read only ; NEW_CONNECTION; -start isolation level default +start work isolation level serializable, read only ; NEW_CONNECTION; -start isolation level default; +start work isolation level serializable, read only; NEW_CONNECTION; -start isolation level default; +start work isolation level serializable, read only; NEW_CONNECTION; start +work isolation level -default; +serializable, +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level default; +foo start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default bar; +start work isolation level serializable, read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level default; +%start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default%; +start work isolation level serializable, read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level%default; +start work isolation level serializable, read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level default; +_start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default_; +start work isolation level serializable, read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level_default; +start work isolation level serializable, read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level default; +&start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default&; +start work isolation level serializable, read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level&default; +start work isolation level serializable, read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level default; +$start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default$; +start work isolation level serializable, read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level$default; +start work isolation level serializable, read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level default; +@start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default@; +start work isolation level serializable, read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level@default; +start work isolation level serializable, read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level default; +!start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default!; +start work isolation level serializable, read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level!default; +start work isolation level serializable, read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level default; +*start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default*; +start work isolation level serializable, read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level*default; +start work isolation level serializable, read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level default; +(start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default(; +start work isolation level serializable, read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level(default; +start work isolation level serializable, read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level default; +)start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default); +start work isolation level serializable, read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level)default; +start work isolation level serializable, read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level default; +-start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default-; +start work isolation level serializable, read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level-default; +start work isolation level serializable, read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level default; ++start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default+; +start work isolation level serializable, read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level+default; +start work isolation level serializable, read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level default; +-#start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default-#; +start work isolation level serializable, read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level-#default; +start work isolation level serializable, read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level default; +/start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default/; +start work isolation level serializable, read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level/default; +start work isolation level serializable, read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level default; +\start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default\; +start work isolation level serializable, read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level\default; +start work isolation level serializable, read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level default; +?start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default?; +start work isolation level serializable, read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level?default; +start work isolation level serializable, read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level default; +-/start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default-/; +start work isolation level serializable, read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level-/default; +start work isolation level serializable, read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level default; +/#start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default/#; +start work isolation level serializable, read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level/#default; +start work isolation level serializable, read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level default; +/-start work isolation level serializable, read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default/-; +start work isolation level serializable, read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level/-default; +start work isolation level serializable, read/-only; NEW_CONNECTION; -begin transaction not deferrable isolation level default; +begin transaction not deferrable; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL DEFAULT; +BEGIN TRANSACTION NOT DEFERRABLE; NEW_CONNECTION; -begin transaction not deferrable isolation level default; +begin transaction not deferrable; NEW_CONNECTION; - begin transaction not deferrable isolation level default; + begin transaction not deferrable; NEW_CONNECTION; - begin transaction not deferrable isolation level default; + begin transaction not deferrable; NEW_CONNECTION; -begin transaction not deferrable isolation level default; +begin transaction not deferrable; NEW_CONNECTION; -begin transaction not deferrable isolation level default ; +begin transaction not deferrable ; NEW_CONNECTION; -begin transaction not deferrable isolation level default ; +begin transaction not deferrable ; NEW_CONNECTION; -begin transaction not deferrable isolation level default +begin transaction not deferrable ; NEW_CONNECTION; -begin transaction not deferrable isolation level default; +begin transaction not deferrable; NEW_CONNECTION; -begin transaction not deferrable isolation level default; +begin transaction not deferrable; NEW_CONNECTION; begin transaction not -deferrable -isolation -level -default; +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable isolation level default; +foo begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default bar; +begin transaction not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable isolation level default; +%begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default%; +begin transaction not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level%default; +begin transaction not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable isolation level default; +_begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default_; +begin transaction not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level_default; +begin transaction not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable isolation level default; +&begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default&; +begin transaction not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level&default; +begin transaction not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable isolation level default; +$begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default$; +begin transaction not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level$default; +begin transaction not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable isolation level default; +@begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default@; +begin transaction not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level@default; +begin transaction not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable isolation level default; +!begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default!; +begin transaction not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level!default; +begin transaction not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable isolation level default; +*begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default*; +begin transaction not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level*default; +begin transaction not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable isolation level default; +(begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default(; +begin transaction not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level(default; +begin transaction not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable isolation level default; +)begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default); +begin transaction not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level)default; +begin transaction not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable isolation level default; +-begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default-; +begin transaction not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level-default; +begin transaction not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable isolation level default; ++begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default+; +begin transaction not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level+default; +begin transaction not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable isolation level default; +-#begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default-#; +begin transaction not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level-#default; +begin transaction not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable isolation level default; +/begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default/; +begin transaction not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level/default; +begin transaction not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable isolation level default; +\begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default\; +begin transaction not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level\default; +begin transaction not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable isolation level default; +?begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default?; +begin transaction not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level?default; +begin transaction not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable isolation level default; +-/begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default-/; +begin transaction not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level-/default; +begin transaction not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable isolation level default; +/#begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default/#; +begin transaction not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level/#default; +begin transaction not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable isolation level default; +/-begin transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default/-; +begin transaction not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level/-default; +begin transaction not/-deferrable; NEW_CONNECTION; -start transaction isolation level default; +start transaction not deferrable; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL DEFAULT; +START TRANSACTION NOT DEFERRABLE; NEW_CONNECTION; -start transaction isolation level default; +start transaction not deferrable; NEW_CONNECTION; - start transaction isolation level default; + start transaction not deferrable; NEW_CONNECTION; - start transaction isolation level default; + start transaction not deferrable; NEW_CONNECTION; -start transaction isolation level default; +start transaction not deferrable; NEW_CONNECTION; -start transaction isolation level default ; +start transaction not deferrable ; NEW_CONNECTION; -start transaction isolation level default ; +start transaction not deferrable ; NEW_CONNECTION; -start transaction isolation level default +start transaction not deferrable ; NEW_CONNECTION; -start transaction isolation level default; +start transaction not deferrable; NEW_CONNECTION; -start transaction isolation level default; +start transaction not deferrable; NEW_CONNECTION; start transaction -isolation -level -default; +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level default; +foo start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default bar; +start transaction not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level default; +%start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default%; +start transaction not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level%default; +start transaction not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level default; +_start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default_; +start transaction not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level_default; +start transaction not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level default; +&start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default&; +start transaction not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level&default; +start transaction not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level default; +$start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default$; +start transaction not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level$default; +start transaction not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level default; +@start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default@; +start transaction not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level@default; +start transaction not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level default; +!start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default!; +start transaction not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level!default; +start transaction not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level default; +*start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default*; +start transaction not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level*default; +start transaction not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level default; +(start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default(; +start transaction not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level(default; +start transaction not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level default; +)start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default); +start transaction not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level)default; +start transaction not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level default; +-start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default-; +start transaction not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level-default; +start transaction not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level default; ++start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default+; +start transaction not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level+default; +start transaction not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level default; +-#start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default-#; +start transaction not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level-#default; +start transaction not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level default; +/start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default/; +start transaction not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level/default; +start transaction not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level default; +\start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default\; +start transaction not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level\default; +start transaction not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level default; +?start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default?; +start transaction not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level?default; +start transaction not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level default; +-/start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default-/; +start transaction not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level-/default; +start transaction not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level default; +/#start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default/#; +start transaction not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level/#default; +start transaction not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level default; +/-start transaction not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default/-; +start transaction not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level/-default; +start transaction not/-deferrable; NEW_CONNECTION; -begin work not deferrable isolation level default; +begin work not deferrable; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL DEFAULT; +BEGIN WORK NOT DEFERRABLE; NEW_CONNECTION; -begin work not deferrable isolation level default; +begin work not deferrable; NEW_CONNECTION; - begin work not deferrable isolation level default; + begin work not deferrable; NEW_CONNECTION; - begin work not deferrable isolation level default; + begin work not deferrable; NEW_CONNECTION; -begin work not deferrable isolation level default; +begin work not deferrable; NEW_CONNECTION; -begin work not deferrable isolation level default ; +begin work not deferrable ; NEW_CONNECTION; -begin work not deferrable isolation level default ; +begin work not deferrable ; NEW_CONNECTION; -begin work not deferrable isolation level default +begin work not deferrable ; NEW_CONNECTION; -begin work not deferrable isolation level default; +begin work not deferrable; NEW_CONNECTION; -begin work not deferrable isolation level default; +begin work not deferrable; NEW_CONNECTION; begin work not -deferrable -isolation -level -default; +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable isolation level default; +foo begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default bar; +begin work not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable isolation level default; +%begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default%; +begin work not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level%default; +begin work not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable isolation level default; +_begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default_; +begin work not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level_default; +begin work not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable isolation level default; +&begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default&; +begin work not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level&default; +begin work not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable isolation level default; +$begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default$; +begin work not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level$default; +begin work not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable isolation level default; +@begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default@; +begin work not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level@default; +begin work not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable isolation level default; +!begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default!; +begin work not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level!default; +begin work not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable isolation level default; +*begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default*; +begin work not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level*default; +begin work not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable isolation level default; +(begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default(; +begin work not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level(default; +begin work not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable isolation level default; +)begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default); +begin work not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level)default; +begin work not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable isolation level default; +-begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default-; +begin work not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level-default; +begin work not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable isolation level default; ++begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default+; +begin work not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level+default; +begin work not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable isolation level default; +-#begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default-#; +begin work not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level-#default; +begin work not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable isolation level default; +/begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default/; +begin work not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level/default; +begin work not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable isolation level default; +\begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default\; +begin work not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level\default; +begin work not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable isolation level default; +?begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default?; +begin work not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level?default; +begin work not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable isolation level default; +-/begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default-/; +begin work not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level-/default; +begin work not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable isolation level default; +/#begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default/#; +begin work not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level/#default; +begin work not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable isolation level default; +/-begin work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default/-; +begin work not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level/-default; +begin work not/-deferrable; NEW_CONNECTION; -start work isolation level default; +start work not deferrable; NEW_CONNECTION; -START WORK ISOLATION LEVEL DEFAULT; +START WORK NOT DEFERRABLE; NEW_CONNECTION; -start work isolation level default; +start work not deferrable; NEW_CONNECTION; - start work isolation level default; + start work not deferrable; NEW_CONNECTION; - start work isolation level default; + start work not deferrable; NEW_CONNECTION; -start work isolation level default; +start work not deferrable; NEW_CONNECTION; -start work isolation level default ; +start work not deferrable ; NEW_CONNECTION; -start work isolation level default ; +start work not deferrable ; NEW_CONNECTION; -start work isolation level default +start work not deferrable ; NEW_CONNECTION; -start work isolation level default; +start work not deferrable; NEW_CONNECTION; -start work isolation level default; +start work not deferrable; NEW_CONNECTION; start work -isolation -level -default; +not +deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level default; +foo start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default bar; +start work not deferrable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level default; +%start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default%; +start work not deferrable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level%default; +start work not%deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level default; +_start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default_; +start work not deferrable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level_default; +start work not_deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level default; +&start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default&; +start work not deferrable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level&default; +start work not&deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level default; +$start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default$; +start work not deferrable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level$default; +start work not$deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level default; +@start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default@; +start work not deferrable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level@default; +start work not@deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level default; +!start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default!; +start work not deferrable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level!default; +start work not!deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level default; +*start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default*; +start work not deferrable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level*default; +start work not*deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level default; +(start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default(; +start work not deferrable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level(default; +start work not(deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level default; +)start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default); +start work not deferrable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level)default; +start work not)deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level default; +-start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default-; +start work not deferrable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level-default; +start work not-deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level default; ++start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default+; +start work not deferrable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level+default; +start work not+deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level default; +-#start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default-#; +start work not deferrable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level-#default; +start work not-#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level default; +/start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default/; +start work not deferrable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level/default; +start work not/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level default; +\start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default\; +start work not deferrable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level\default; +start work not\deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level default; +?start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default?; +start work not deferrable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level?default; +start work not?deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level default; +-/start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default-/; +start work not deferrable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level-/default; +start work not-/deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level default; +/#start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default/#; +start work not deferrable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level/#default; +start work not/#deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level default; +/-start work not deferrable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default/-; +start work not deferrable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level/-default; +start work not/-deferrable; NEW_CONNECTION; -begin not deferrable isolation level serializable; +begin not deferrable read only; NEW_CONNECTION; -BEGIN NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE; +BEGIN NOT DEFERRABLE READ ONLY; NEW_CONNECTION; -begin not deferrable isolation level serializable; +begin not deferrable read only; NEW_CONNECTION; - begin not deferrable isolation level serializable; + begin not deferrable read only; NEW_CONNECTION; - begin not deferrable isolation level serializable; + begin not deferrable read only; NEW_CONNECTION; -begin not deferrable isolation level serializable; +begin not deferrable read only; NEW_CONNECTION; -begin not deferrable isolation level serializable ; +begin not deferrable read only ; NEW_CONNECTION; -begin not deferrable isolation level serializable ; +begin not deferrable read only ; NEW_CONNECTION; -begin not deferrable isolation level serializable +begin not deferrable read only ; NEW_CONNECTION; -begin not deferrable isolation level serializable; +begin not deferrable read only; NEW_CONNECTION; -begin not deferrable isolation level serializable; +begin not deferrable read only; NEW_CONNECTION; begin not deferrable -isolation -level -serializable; +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable isolation level serializable; +foo begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable bar; +begin not deferrable read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable isolation level serializable; +%begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable%; +begin not deferrable read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level%serializable; +begin not deferrable read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable isolation level serializable; +_begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable_; +begin not deferrable read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level_serializable; +begin not deferrable read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable isolation level serializable; +&begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable&; +begin not deferrable read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level&serializable; +begin not deferrable read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable isolation level serializable; +$begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable$; +begin not deferrable read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level$serializable; +begin not deferrable read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable isolation level serializable; +@begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable@; +begin not deferrable read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level@serializable; +begin not deferrable read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable isolation level serializable; +!begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable!; +begin not deferrable read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level!serializable; +begin not deferrable read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable isolation level serializable; +*begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable*; +begin not deferrable read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level*serializable; +begin not deferrable read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable isolation level serializable; +(begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable(; +begin not deferrable read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level(serializable; +begin not deferrable read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable isolation level serializable; +)begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable); +begin not deferrable read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level)serializable; +begin not deferrable read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable isolation level serializable; +-begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable-; +begin not deferrable read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level-serializable; +begin not deferrable read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable isolation level serializable; ++begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable+; +begin not deferrable read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level+serializable; +begin not deferrable read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable isolation level serializable; +-#begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable-#; +begin not deferrable read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level-#serializable; +begin not deferrable read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable isolation level serializable; +/begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable/; +begin not deferrable read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level/serializable; +begin not deferrable read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable isolation level serializable; +\begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable\; +begin not deferrable read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level\serializable; +begin not deferrable read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable isolation level serializable; +?begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable?; +begin not deferrable read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level?serializable; +begin not deferrable read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable isolation level serializable; +-/begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable-/; +begin not deferrable read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level-/serializable; +begin not deferrable read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable isolation level serializable; +/#begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable/#; +begin not deferrable read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level/#serializable; +begin not deferrable read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable isolation level serializable; +/-begin not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable/-; +begin not deferrable read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level/-serializable; +begin not deferrable read/-only; NEW_CONNECTION; -start isolation level serializable; +start read only; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE; +START READ ONLY; NEW_CONNECTION; -start isolation level serializable; +start read only; NEW_CONNECTION; - start isolation level serializable; + start read only; NEW_CONNECTION; - start isolation level serializable; + start read only; NEW_CONNECTION; -start isolation level serializable; +start read only; NEW_CONNECTION; -start isolation level serializable ; +start read only ; NEW_CONNECTION; -start isolation level serializable ; +start read only ; NEW_CONNECTION; -start isolation level serializable +start read only ; NEW_CONNECTION; -start isolation level serializable; +start read only; NEW_CONNECTION; -start isolation level serializable; +start read only; NEW_CONNECTION; start -isolation -level -serializable; +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable; +foo start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable bar; +start read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable; +%start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable%; +start read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level%serializable; +start read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable; +_start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable_; +start read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level_serializable; +start read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable; +&start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable&; +start read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level&serializable; +start read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable; +$start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable$; +start read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level$serializable; +start read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable; +@start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable@; +start read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level@serializable; +start read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable; +!start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable!; +start read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level!serializable; +start read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable; +*start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable*; +start read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level*serializable; +start read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable; +(start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable(; +start read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level(serializable; +start read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable; +)start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable); +start read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level)serializable; +start read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable; +-start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable-; +start read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level-serializable; +start read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable; ++start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable+; +start read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level+serializable; +start read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable; +-#start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable-#; +start read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level-#serializable; +start read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable; +/start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable/; +start read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level/serializable; +start read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable; +\start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable\; +start read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level\serializable; +start read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable; +?start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable?; +start read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level?serializable; +start read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable; +-/start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable-/; +start read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level-/serializable; +start read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable; +/#start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable/#; +start read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level/#serializable; +start read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable; +/-start read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable/-; +start read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level/-serializable; +start read/-only; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable; +begin transaction not deferrable read only; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE; +BEGIN TRANSACTION NOT DEFERRABLE READ ONLY; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable; +begin transaction not deferrable read only; NEW_CONNECTION; - begin transaction not deferrable isolation level serializable; + begin transaction not deferrable read only; NEW_CONNECTION; - begin transaction not deferrable isolation level serializable; + begin transaction not deferrable read only; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable; +begin transaction not deferrable read only; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable ; +begin transaction not deferrable read only ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable ; +begin transaction not deferrable read only ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable +begin transaction not deferrable read only ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable; +begin transaction not deferrable read only; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable; +begin transaction not deferrable read only; NEW_CONNECTION; begin transaction not deferrable -isolation -level -serializable; +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable isolation level serializable; +foo begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable bar; +begin transaction not deferrable read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable isolation level serializable; +%begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable%; +begin transaction not deferrable read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level%serializable; +begin transaction not deferrable read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable isolation level serializable; +_begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable_; +begin transaction not deferrable read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level_serializable; +begin transaction not deferrable read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable isolation level serializable; +&begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable&; +begin transaction not deferrable read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level&serializable; +begin transaction not deferrable read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable isolation level serializable; +$begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable$; +begin transaction not deferrable read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level$serializable; +begin transaction not deferrable read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable isolation level serializable; +@begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable@; +begin transaction not deferrable read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level@serializable; +begin transaction not deferrable read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable isolation level serializable; +!begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable!; +begin transaction not deferrable read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level!serializable; +begin transaction not deferrable read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable isolation level serializable; +*begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable*; +begin transaction not deferrable read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level*serializable; +begin transaction not deferrable read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable isolation level serializable; +(begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable(; +begin transaction not deferrable read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level(serializable; +begin transaction not deferrable read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable isolation level serializable; +)begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable); +begin transaction not deferrable read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level)serializable; +begin transaction not deferrable read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable isolation level serializable; +-begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable-; +begin transaction not deferrable read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level-serializable; +begin transaction not deferrable read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable isolation level serializable; ++begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable+; +begin transaction not deferrable read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level+serializable; +begin transaction not deferrable read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable isolation level serializable; +-#begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable-#; +begin transaction not deferrable read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level-#serializable; +begin transaction not deferrable read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable isolation level serializable; +/begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable/; +begin transaction not deferrable read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level/serializable; +begin transaction not deferrable read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable isolation level serializable; +\begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable\; +begin transaction not deferrable read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level\serializable; +begin transaction not deferrable read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable isolation level serializable; +?begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable?; +begin transaction not deferrable read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level?serializable; +begin transaction not deferrable read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable isolation level serializable; +-/begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable-/; +begin transaction not deferrable read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level-/serializable; +begin transaction not deferrable read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable isolation level serializable; +/#begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable/#; +begin transaction not deferrable read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level/#serializable; +begin transaction not deferrable read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable isolation level serializable; +/-begin transaction not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable/-; +begin transaction not deferrable read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level/-serializable; +begin transaction not deferrable read/-only; NEW_CONNECTION; -start transaction isolation level serializable; +start transaction read only; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE; +START TRANSACTION READ ONLY; NEW_CONNECTION; -start transaction isolation level serializable; +start transaction read only; NEW_CONNECTION; - start transaction isolation level serializable; + start transaction read only; NEW_CONNECTION; - start transaction isolation level serializable; + start transaction read only; NEW_CONNECTION; -start transaction isolation level serializable; +start transaction read only; NEW_CONNECTION; -start transaction isolation level serializable ; +start transaction read only ; NEW_CONNECTION; -start transaction isolation level serializable ; +start transaction read only ; NEW_CONNECTION; -start transaction isolation level serializable +start transaction read only ; NEW_CONNECTION; -start transaction isolation level serializable; +start transaction read only; NEW_CONNECTION; -start transaction isolation level serializable; +start transaction read only; NEW_CONNECTION; start transaction -isolation -level -serializable; +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable; +foo start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable bar; +start transaction read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable; +%start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable%; +start transaction read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level%serializable; +start transaction read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable; +_start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable_; +start transaction read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level_serializable; +start transaction read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable; +&start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable&; +start transaction read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level&serializable; +start transaction read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable; +$start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable$; +start transaction read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level$serializable; +start transaction read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable; +@start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable@; +start transaction read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level@serializable; +start transaction read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable; +!start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable!; +start transaction read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level!serializable; +start transaction read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable; +*start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable*; +start transaction read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level*serializable; +start transaction read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable; +(start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable(; +start transaction read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level(serializable; +start transaction read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable; +)start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable); +start transaction read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level)serializable; +start transaction read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable; +-start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable-; +start transaction read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level-serializable; +start transaction read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable; ++start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable+; +start transaction read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level+serializable; +start transaction read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable; +-#start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable-#; +start transaction read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level-#serializable; +start transaction read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable; +/start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable/; +start transaction read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level/serializable; +start transaction read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable; +\start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable\; +start transaction read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level\serializable; +start transaction read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable; +?start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable?; +start transaction read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level?serializable; +start transaction read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable; +-/start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable-/; +start transaction read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level-/serializable; +start transaction read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable; +/#start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable/#; +start transaction read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level/#serializable; +start transaction read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable; +/-start transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable/-; +start transaction read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level/-serializable; +start transaction read/-only; NEW_CONNECTION; -begin work not deferrable isolation level serializable; +begin work not deferrable read only; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE; +BEGIN WORK NOT DEFERRABLE READ ONLY; NEW_CONNECTION; -begin work not deferrable isolation level serializable; +begin work not deferrable read only; NEW_CONNECTION; - begin work not deferrable isolation level serializable; + begin work not deferrable read only; NEW_CONNECTION; - begin work not deferrable isolation level serializable; + begin work not deferrable read only; NEW_CONNECTION; -begin work not deferrable isolation level serializable; +begin work not deferrable read only; NEW_CONNECTION; -begin work not deferrable isolation level serializable ; +begin work not deferrable read only ; NEW_CONNECTION; -begin work not deferrable isolation level serializable ; +begin work not deferrable read only ; NEW_CONNECTION; -begin work not deferrable isolation level serializable +begin work not deferrable read only ; NEW_CONNECTION; -begin work not deferrable isolation level serializable; +begin work not deferrable read only; NEW_CONNECTION; -begin work not deferrable isolation level serializable; +begin work not deferrable read only; NEW_CONNECTION; begin work not deferrable -isolation -level -serializable; +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable isolation level serializable; +foo begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable bar; +begin work not deferrable read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable isolation level serializable; +%begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable%; +begin work not deferrable read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level%serializable; +begin work not deferrable read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable isolation level serializable; +_begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable_; +begin work not deferrable read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level_serializable; +begin work not deferrable read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable isolation level serializable; +&begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable&; +begin work not deferrable read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level&serializable; +begin work not deferrable read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable isolation level serializable; +$begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable$; +begin work not deferrable read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level$serializable; +begin work not deferrable read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable isolation level serializable; +@begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable@; +begin work not deferrable read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level@serializable; +begin work not deferrable read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable isolation level serializable; +!begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable!; +begin work not deferrable read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level!serializable; +begin work not deferrable read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable isolation level serializable; +*begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable*; +begin work not deferrable read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level*serializable; +begin work not deferrable read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable isolation level serializable; +(begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable(; +begin work not deferrable read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level(serializable; +begin work not deferrable read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable isolation level serializable; +)begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable); +begin work not deferrable read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level)serializable; +begin work not deferrable read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable isolation level serializable; +-begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable-; +begin work not deferrable read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level-serializable; +begin work not deferrable read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable isolation level serializable; ++begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable+; +begin work not deferrable read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level+serializable; +begin work not deferrable read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable isolation level serializable; +-#begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable-#; +begin work not deferrable read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level-#serializable; +begin work not deferrable read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable isolation level serializable; +/begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable/; +begin work not deferrable read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level/serializable; +begin work not deferrable read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable isolation level serializable; +\begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable\; +begin work not deferrable read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level\serializable; +begin work not deferrable read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable isolation level serializable; +?begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable?; +begin work not deferrable read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level?serializable; +begin work not deferrable read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable isolation level serializable; +-/begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable-/; +begin work not deferrable read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level-/serializable; +begin work not deferrable read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable isolation level serializable; +/#begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable/#; +begin work not deferrable read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level/#serializable; +begin work not deferrable read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable isolation level serializable; +/-begin work not deferrable read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable/-; +begin work not deferrable read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level/-serializable; +begin work not deferrable read/-only; NEW_CONNECTION; -start work isolation level serializable; +start work read only; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE; +START WORK READ ONLY; NEW_CONNECTION; -start work isolation level serializable; +start work read only; NEW_CONNECTION; - start work isolation level serializable; + start work read only; NEW_CONNECTION; - start work isolation level serializable; + start work read only; NEW_CONNECTION; -start work isolation level serializable; +start work read only; NEW_CONNECTION; -start work isolation level serializable ; +start work read only ; NEW_CONNECTION; -start work isolation level serializable ; +start work read only ; NEW_CONNECTION; -start work isolation level serializable +start work read only ; NEW_CONNECTION; -start work isolation level serializable; +start work read only; NEW_CONNECTION; -start work isolation level serializable; +start work read only; NEW_CONNECTION; start work -isolation -level -serializable; +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable; +foo start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable bar; +start work read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable; +%start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable%; +start work read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level%serializable; +start work read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable; +_start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable_; +start work read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level_serializable; +start work read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable; +&start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable&; +start work read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level&serializable; +start work read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable; +$start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable$; +start work read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level$serializable; +start work read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable; +@start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable@; +start work read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level@serializable; +start work read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable; +!start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable!; +start work read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level!serializable; +start work read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable; +*start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable*; +start work read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level*serializable; +start work read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable; +(start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable(; +start work read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level(serializable; +start work read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable; +)start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable); +start work read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level)serializable; +start work read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable; +-start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable-; +start work read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level-serializable; +start work read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable; ++start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable+; +start work read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level+serializable; +start work read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable; +-#start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable-#; +start work read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level-#serializable; +start work read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable; +/start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable/; +start work read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level/serializable; +start work read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable; +\start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable\; +start work read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level\serializable; +start work read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable; +?start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable?; +start work read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level?serializable; +start work read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable; +-/start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable-/; +start work read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level-/serializable; +start work read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable; +/#start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable/#; +start work read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level/#serializable; +start work read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable; +/-start work read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable/-; +start work read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level/-serializable; +start work read/-only; NEW_CONNECTION; -begin not deferrable isolation level default read write; +begin not deferrable read write; NEW_CONNECTION; -BEGIN NOT DEFERRABLE ISOLATION LEVEL DEFAULT READ WRITE; +BEGIN NOT DEFERRABLE READ WRITE; NEW_CONNECTION; -begin not deferrable isolation level default read write; +begin not deferrable read write; NEW_CONNECTION; - begin not deferrable isolation level default read write; + begin not deferrable read write; NEW_CONNECTION; - begin not deferrable isolation level default read write; + begin not deferrable read write; NEW_CONNECTION; -begin not deferrable isolation level default read write; +begin not deferrable read write; NEW_CONNECTION; -begin not deferrable isolation level default read write ; +begin not deferrable read write ; NEW_CONNECTION; -begin not deferrable isolation level default read write ; +begin not deferrable read write ; NEW_CONNECTION; -begin not deferrable isolation level default read write +begin not deferrable read write ; NEW_CONNECTION; -begin not deferrable isolation level default read write; +begin not deferrable read write; NEW_CONNECTION; -begin not deferrable isolation level default read write; +begin not deferrable read write; NEW_CONNECTION; begin not deferrable -isolation -level -default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable isolation level default read write; +foo begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write bar; +begin not deferrable read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable isolation level default read write; +%begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write%; +begin not deferrable read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read%write; +begin not deferrable read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable isolation level default read write; +_begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write_; +begin not deferrable read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read_write; +begin not deferrable read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable isolation level default read write; +&begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write&; +begin not deferrable read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read&write; +begin not deferrable read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable isolation level default read write; +$begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write$; +begin not deferrable read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read$write; +begin not deferrable read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable isolation level default read write; +@begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write@; +begin not deferrable read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read@write; +begin not deferrable read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable isolation level default read write; +!begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write!; +begin not deferrable read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read!write; +begin not deferrable read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable isolation level default read write; +*begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write*; +begin not deferrable read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read*write; +begin not deferrable read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable isolation level default read write; +(begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write(; +begin not deferrable read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read(write; +begin not deferrable read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable isolation level default read write; +)begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write); +begin not deferrable read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read)write; +begin not deferrable read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable isolation level default read write; +-begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write-; +begin not deferrable read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read-write; +begin not deferrable read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable isolation level default read write; ++begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write+; +begin not deferrable read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read+write; +begin not deferrable read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable isolation level default read write; +-#begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write-#; +begin not deferrable read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read-#write; +begin not deferrable read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable isolation level default read write; +/begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write/; +begin not deferrable read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read/write; +begin not deferrable read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable isolation level default read write; +\begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write\; +begin not deferrable read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read\write; +begin not deferrable read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable isolation level default read write; +?begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write?; +begin not deferrable read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read?write; +begin not deferrable read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable isolation level default read write; +-/begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write-/; +begin not deferrable read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read-/write; +begin not deferrable read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable isolation level default read write; +/#begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write/#; +begin not deferrable read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read/#write; +begin not deferrable read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable isolation level default read write; +/-begin not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read write/-; +begin not deferrable read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level default read/-write; +begin not deferrable read/-write; NEW_CONNECTION; -start isolation level default read only; +start read write; NEW_CONNECTION; -START ISOLATION LEVEL DEFAULT READ ONLY; +START READ WRITE; NEW_CONNECTION; -start isolation level default read only; +start read write; NEW_CONNECTION; - start isolation level default read only; + start read write; NEW_CONNECTION; - start isolation level default read only; + start read write; NEW_CONNECTION; -start isolation level default read only; +start read write; NEW_CONNECTION; -start isolation level default read only ; +start read write ; NEW_CONNECTION; -start isolation level default read only ; +start read write ; NEW_CONNECTION; -start isolation level default read only +start read write ; NEW_CONNECTION; -start isolation level default read only; +start read write; NEW_CONNECTION; -start isolation level default read only; +start read write; NEW_CONNECTION; start -isolation -level -default read -only; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level default read only; +foo start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only bar; +start read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level default read only; +%start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only%; +start read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read%only; +start read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level default read only; +_start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only_; +start read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read_only; +start read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level default read only; +&start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only&; +start read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read&only; +start read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level default read only; +$start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only$; +start read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read$only; +start read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level default read only; +@start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only@; +start read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read@only; +start read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level default read only; +!start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only!; +start read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read!only; +start read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level default read only; +*start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only*; +start read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read*only; +start read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level default read only; +(start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only(; +start read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read(only; +start read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level default read only; +)start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only); +start read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read)only; +start read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level default read only; +-start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only-; +start read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read-only; +start read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level default read only; ++start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only+; +start read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read+only; +start read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level default read only; +-#start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only-#; +start read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read-#only; +start read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level default read only; +/start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only/; +start read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read/only; +start read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level default read only; +\start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only\; +start read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read\only; +start read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level default read only; +?start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only?; +start read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read?only; +start read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level default read only; +-/start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only-/; +start read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read-/only; +start read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level default read only; +/#start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only/#; +start read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read/#only; +start read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level default read only; +/-start read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read only/-; +start read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level default read/-only; +start read/-write; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only; +begin transaction not deferrable read write; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL DEFAULT READ ONLY; +BEGIN TRANSACTION NOT DEFERRABLE READ WRITE; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only; +begin transaction not deferrable read write; NEW_CONNECTION; - begin transaction not deferrable isolation level default read only; + begin transaction not deferrable read write; NEW_CONNECTION; - begin transaction not deferrable isolation level default read only; + begin transaction not deferrable read write; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only; +begin transaction not deferrable read write; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only ; +begin transaction not deferrable read write ; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only ; +begin transaction not deferrable read write ; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only +begin transaction not deferrable read write ; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only; +begin transaction not deferrable read write; NEW_CONNECTION; -begin transaction not deferrable isolation level default read only; +begin transaction not deferrable read write; NEW_CONNECTION; begin transaction not deferrable -isolation -level -default read -only; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable isolation level default read only; +foo begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only bar; +begin transaction not deferrable read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable isolation level default read only; +%begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only%; +begin transaction not deferrable read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read%only; +begin transaction not deferrable read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable isolation level default read only; +_begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only_; +begin transaction not deferrable read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read_only; +begin transaction not deferrable read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable isolation level default read only; +&begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only&; +begin transaction not deferrable read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read&only; +begin transaction not deferrable read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable isolation level default read only; +$begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only$; +begin transaction not deferrable read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read$only; +begin transaction not deferrable read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable isolation level default read only; +@begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only@; +begin transaction not deferrable read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read@only; +begin transaction not deferrable read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable isolation level default read only; +!begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only!; +begin transaction not deferrable read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read!only; +begin transaction not deferrable read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable isolation level default read only; +*begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only*; +begin transaction not deferrable read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read*only; +begin transaction not deferrable read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable isolation level default read only; +(begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only(; +begin transaction not deferrable read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read(only; +begin transaction not deferrable read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable isolation level default read only; +)begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only); +begin transaction not deferrable read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read)only; +begin transaction not deferrable read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable isolation level default read only; +-begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only-; +begin transaction not deferrable read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read-only; +begin transaction not deferrable read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable isolation level default read only; ++begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only+; +begin transaction not deferrable read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read+only; +begin transaction not deferrable read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable isolation level default read only; +-#begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only-#; +begin transaction not deferrable read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read-#only; +begin transaction not deferrable read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable isolation level default read only; +/begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only/; +begin transaction not deferrable read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read/only; +begin transaction not deferrable read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable isolation level default read only; +\begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only\; +begin transaction not deferrable read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read\only; +begin transaction not deferrable read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable isolation level default read only; +?begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only?; +begin transaction not deferrable read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read?only; +begin transaction not deferrable read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable isolation level default read only; +-/begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only-/; +begin transaction not deferrable read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read-/only; +begin transaction not deferrable read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable isolation level default read only; +/#begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only/#; +begin transaction not deferrable read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read/#only; +begin transaction not deferrable read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable isolation level default read only; +/-begin transaction not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read only/-; +begin transaction not deferrable read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level default read/-only; +begin transaction not deferrable read/-write; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction read write; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL DEFAULT READ WRITE; +START TRANSACTION READ WRITE; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction read write; NEW_CONNECTION; - start transaction isolation level default read write; + start transaction read write; NEW_CONNECTION; - start transaction isolation level default read write; + start transaction read write; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction read write; NEW_CONNECTION; -start transaction isolation level default read write ; +start transaction read write ; NEW_CONNECTION; -start transaction isolation level default read write ; +start transaction read write ; NEW_CONNECTION; -start transaction isolation level default read write +start transaction read write ; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction read write; NEW_CONNECTION; -start transaction isolation level default read write; +start transaction read write; NEW_CONNECTION; start transaction -isolation -level -default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level default read write; +foo start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write bar; +start transaction read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level default read write; +%start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write%; +start transaction read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read%write; +start transaction read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level default read write; +_start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write_; +start transaction read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read_write; +start transaction read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level default read write; +&start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write&; +start transaction read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read&write; +start transaction read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level default read write; +$start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write$; +start transaction read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read$write; +start transaction read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level default read write; +@start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write@; +start transaction read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read@write; +start transaction read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level default read write; +!start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write!; +start transaction read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read!write; +start transaction read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level default read write; +*start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write*; +start transaction read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read*write; +start transaction read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level default read write; +(start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write(; +start transaction read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read(write; +start transaction read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level default read write; +)start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write); +start transaction read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read)write; +start transaction read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level default read write; +-start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write-; +start transaction read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read-write; +start transaction read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level default read write; ++start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write+; +start transaction read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read+write; +start transaction read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level default read write; +-#start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write-#; +start transaction read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read-#write; +start transaction read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level default read write; +/start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write/; +start transaction read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read/write; +start transaction read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level default read write; +\start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write\; +start transaction read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read\write; +start transaction read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level default read write; +?start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write?; +start transaction read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read?write; +start transaction read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level default read write; +-/start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write-/; +start transaction read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read-/write; +start transaction read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level default read write; +/#start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write/#; +start transaction read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read/#write; +start transaction read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level default read write; +/-start transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read write/-; +start transaction read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level default read/-write; +start transaction read/-write; NEW_CONNECTION; -begin work not deferrable isolation level default read write; +begin work not deferrable read write; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL DEFAULT READ WRITE; +BEGIN WORK NOT DEFERRABLE READ WRITE; NEW_CONNECTION; -begin work not deferrable isolation level default read write; +begin work not deferrable read write; NEW_CONNECTION; - begin work not deferrable isolation level default read write; + begin work not deferrable read write; NEW_CONNECTION; - begin work not deferrable isolation level default read write; + begin work not deferrable read write; NEW_CONNECTION; -begin work not deferrable isolation level default read write; +begin work not deferrable read write; NEW_CONNECTION; -begin work not deferrable isolation level default read write ; +begin work not deferrable read write ; NEW_CONNECTION; -begin work not deferrable isolation level default read write ; +begin work not deferrable read write ; NEW_CONNECTION; -begin work not deferrable isolation level default read write +begin work not deferrable read write ; NEW_CONNECTION; -begin work not deferrable isolation level default read write; +begin work not deferrable read write; NEW_CONNECTION; -begin work not deferrable isolation level default read write; +begin work not deferrable read write; NEW_CONNECTION; begin work not deferrable -isolation -level -default read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable isolation level default read write; +foo begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write bar; +begin work not deferrable read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable isolation level default read write; +%begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write%; +begin work not deferrable read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read%write; +begin work not deferrable read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable isolation level default read write; +_begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write_; +begin work not deferrable read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read_write; +begin work not deferrable read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable isolation level default read write; +&begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write&; +begin work not deferrable read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read&write; +begin work not deferrable read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable isolation level default read write; +$begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write$; +begin work not deferrable read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read$write; +begin work not deferrable read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable isolation level default read write; +@begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write@; +begin work not deferrable read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read@write; +begin work not deferrable read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable isolation level default read write; +!begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write!; +begin work not deferrable read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read!write; +begin work not deferrable read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable isolation level default read write; +*begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write*; +begin work not deferrable read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read*write; +begin work not deferrable read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable isolation level default read write; +(begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write(; +begin work not deferrable read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read(write; +begin work not deferrable read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable isolation level default read write; +)begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write); +begin work not deferrable read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read)write; +begin work not deferrable read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable isolation level default read write; +-begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write-; +begin work not deferrable read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read-write; +begin work not deferrable read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable isolation level default read write; ++begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write+; +begin work not deferrable read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read+write; +begin work not deferrable read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable isolation level default read write; +-#begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write-#; +begin work not deferrable read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read-#write; +begin work not deferrable read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable isolation level default read write; +/begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write/; +begin work not deferrable read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read/write; +begin work not deferrable read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable isolation level default read write; +\begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write\; +begin work not deferrable read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read\write; +begin work not deferrable read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable isolation level default read write; +?begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write?; +begin work not deferrable read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read?write; +begin work not deferrable read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable isolation level default read write; +-/begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write-/; +begin work not deferrable read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read-/write; +begin work not deferrable read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable isolation level default read write; +/#begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write/#; +begin work not deferrable read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read/#write; +begin work not deferrable read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable isolation level default read write; +/-begin work not deferrable read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read write/-; +begin work not deferrable read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level default read/-write; +begin work not deferrable read/-write; NEW_CONNECTION; -start work isolation level default read only; +start work read write; NEW_CONNECTION; -START WORK ISOLATION LEVEL DEFAULT READ ONLY; +START WORK READ WRITE; NEW_CONNECTION; -start work isolation level default read only; +start work read write; NEW_CONNECTION; - start work isolation level default read only; + start work read write; NEW_CONNECTION; - start work isolation level default read only; + start work read write; NEW_CONNECTION; -start work isolation level default read only; +start work read write; NEW_CONNECTION; -start work isolation level default read only ; +start work read write ; NEW_CONNECTION; -start work isolation level default read only ; +start work read write ; NEW_CONNECTION; -start work isolation level default read only +start work read write ; NEW_CONNECTION; -start work isolation level default read only; +start work read write; NEW_CONNECTION; -start work isolation level default read only; +start work read write; NEW_CONNECTION; start work -isolation -level -default read -only; +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level default read only; +foo start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only bar; +start work read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level default read only; +%start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only%; +start work read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read%only; +start work read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level default read only; +_start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only_; +start work read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read_only; +start work read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level default read only; +&start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only&; +start work read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read&only; +start work read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level default read only; +$start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only$; +start work read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read$only; +start work read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level default read only; +@start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only@; +start work read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read@only; +start work read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level default read only; +!start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only!; +start work read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read!only; +start work read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level default read only; +*start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only*; +start work read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read*only; +start work read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level default read only; +(start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only(; +start work read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read(only; +start work read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level default read only; +)start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only); +start work read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read)only; +start work read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level default read only; +-start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only-; +start work read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read-only; +start work read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level default read only; ++start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only+; +start work read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read+only; +start work read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level default read only; +-#start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only-#; +start work read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read-#only; +start work read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level default read only; +/start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only/; +start work read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read/only; +start work read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level default read only; +\start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only\; +start work read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read\only; +start work read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level default read only; +?start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only?; +start work read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read?only; +start work read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level default read only; +-/start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only-/; +start work read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read-/only; +start work read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level default read only; +/#start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only/#; +start work read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read/#only; +start work read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level default read only; +/-start work read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read only/-; +start work read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level default read/-only; +start work read/-write; NEW_CONNECTION; -begin not deferrable isolation level serializable read write; +begin not deferrable isolation level default; NEW_CONNECTION; -BEGIN NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE READ WRITE; +BEGIN NOT DEFERRABLE ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -begin not deferrable isolation level serializable read write; +begin not deferrable isolation level default; NEW_CONNECTION; - begin not deferrable isolation level serializable read write; + begin not deferrable isolation level default; NEW_CONNECTION; - begin not deferrable isolation level serializable read write; + begin not deferrable isolation level default; NEW_CONNECTION; -begin not deferrable isolation level serializable read write; +begin not deferrable isolation level default; NEW_CONNECTION; -begin not deferrable isolation level serializable read write ; +begin not deferrable isolation level default ; NEW_CONNECTION; -begin not deferrable isolation level serializable read write ; +begin not deferrable isolation level default ; NEW_CONNECTION; -begin not deferrable isolation level serializable read write +begin not deferrable isolation level default ; NEW_CONNECTION; -begin not deferrable isolation level serializable read write; +begin not deferrable isolation level default; NEW_CONNECTION; -begin not deferrable isolation level serializable read write; +begin not deferrable isolation level default; NEW_CONNECTION; begin not deferrable isolation level -serializable -read -write; +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable isolation level serializable read write; +foo begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write bar; +begin not deferrable isolation level default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable isolation level serializable read write; +%begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write%; +begin not deferrable isolation level default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read%write; +begin not deferrable isolation level%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable isolation level serializable read write; +_begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write_; +begin not deferrable isolation level default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read_write; +begin not deferrable isolation level_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable isolation level serializable read write; +&begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write&; +begin not deferrable isolation level default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read&write; +begin not deferrable isolation level&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable isolation level serializable read write; +$begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write$; +begin not deferrable isolation level default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read$write; +begin not deferrable isolation level$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable isolation level serializable read write; +@begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write@; +begin not deferrable isolation level default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read@write; +begin not deferrable isolation level@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable isolation level serializable read write; +!begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write!; +begin not deferrable isolation level default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read!write; +begin not deferrable isolation level!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable isolation level serializable read write; +*begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write*; +begin not deferrable isolation level default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read*write; +begin not deferrable isolation level*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable isolation level serializable read write; +(begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write(; +begin not deferrable isolation level default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read(write; +begin not deferrable isolation level(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable isolation level serializable read write; +)begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write); +begin not deferrable isolation level default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read)write; +begin not deferrable isolation level)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable isolation level serializable read write; +-begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write-; +begin not deferrable isolation level default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read-write; +begin not deferrable isolation level-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable isolation level serializable read write; ++begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write+; +begin not deferrable isolation level default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read+write; +begin not deferrable isolation level+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable isolation level serializable read write; +-#begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write-#; +begin not deferrable isolation level default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read-#write; +begin not deferrable isolation level-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable isolation level serializable read write; +/begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write/; +begin not deferrable isolation level default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read/write; +begin not deferrable isolation level/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable isolation level serializable read write; +\begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write\; +begin not deferrable isolation level default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read\write; +begin not deferrable isolation level\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable isolation level serializable read write; +?begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write?; +begin not deferrable isolation level default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read?write; +begin not deferrable isolation level?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable isolation level serializable read write; +-/begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write-/; +begin not deferrable isolation level default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read-/write; +begin not deferrable isolation level-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable isolation level serializable read write; +/#begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write/#; +begin not deferrable isolation level default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read/#write; +begin not deferrable isolation level/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable isolation level serializable read write; +/-begin not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read write/-; +begin not deferrable isolation level default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable read/-write; +begin not deferrable isolation level/-default; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE READ WRITE; +START ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default; NEW_CONNECTION; - start isolation level serializable read write; + start isolation level default; NEW_CONNECTION; - start isolation level serializable read write; + start isolation level default; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default; NEW_CONNECTION; -start isolation level serializable read write ; +start isolation level default ; NEW_CONNECTION; -start isolation level serializable read write ; +start isolation level default ; NEW_CONNECTION; -start isolation level serializable read write +start isolation level default ; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default; NEW_CONNECTION; -start isolation level serializable read write; +start isolation level default; NEW_CONNECTION; start isolation level -serializable -read -write; +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable read write; +foo start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write bar; +start isolation level default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable read write; +%start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write%; +start isolation level default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read%write; +start isolation level%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable read write; +_start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write_; +start isolation level default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read_write; +start isolation level_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable read write; +&start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write&; +start isolation level default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read&write; +start isolation level&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable read write; +$start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write$; +start isolation level default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read$write; +start isolation level$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable read write; +@start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write@; +start isolation level default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read@write; +start isolation level@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable read write; +!start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write!; +start isolation level default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read!write; +start isolation level!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable read write; +*start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write*; +start isolation level default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read*write; +start isolation level*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable read write; +(start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write(; +start isolation level default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read(write; +start isolation level(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable read write; +)start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write); +start isolation level default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read)write; +start isolation level)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable read write; +-start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write-; +start isolation level default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read-write; +start isolation level-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable read write; ++start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write+; +start isolation level default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read+write; +start isolation level+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable read write; +-#start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write-#; +start isolation level default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read-#write; +start isolation level-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable read write; +/start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write/; +start isolation level default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read/write; +start isolation level/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable read write; +\start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write\; +start isolation level default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read\write; +start isolation level\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable read write; +?start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write?; +start isolation level default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read?write; +start isolation level?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable read write; +-/start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write-/; +start isolation level default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read-/write; +start isolation level-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable read write; +/#start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write/#; +start isolation level default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read/#write; +start isolation level/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable read write; +/-start isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read write/-; +start isolation level default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable read/-write; +start isolation level/-default; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only; +begin transaction not deferrable isolation level default; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE READ ONLY; +BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only; +begin transaction not deferrable isolation level default; NEW_CONNECTION; - begin transaction not deferrable isolation level serializable read only; + begin transaction not deferrable isolation level default; NEW_CONNECTION; - begin transaction not deferrable isolation level serializable read only; + begin transaction not deferrable isolation level default; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only; +begin transaction not deferrable isolation level default; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only ; +begin transaction not deferrable isolation level default ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only ; +begin transaction not deferrable isolation level default ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only +begin transaction not deferrable isolation level default ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only; +begin transaction not deferrable isolation level default; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable read only; +begin transaction not deferrable isolation level default; NEW_CONNECTION; begin transaction @@ -37403,407 +38602,403 @@ not deferrable isolation level -serializable -read -only; +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable isolation level serializable read only; +foo begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only bar; +begin transaction not deferrable isolation level default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable isolation level serializable read only; +%begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only%; +begin transaction not deferrable isolation level default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read%only; +begin transaction not deferrable isolation level%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable isolation level serializable read only; +_begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only_; +begin transaction not deferrable isolation level default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read_only; +begin transaction not deferrable isolation level_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable isolation level serializable read only; +&begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only&; +begin transaction not deferrable isolation level default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read&only; +begin transaction not deferrable isolation level&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable isolation level serializable read only; +$begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only$; +begin transaction not deferrable isolation level default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read$only; +begin transaction not deferrable isolation level$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable isolation level serializable read only; +@begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only@; +begin transaction not deferrable isolation level default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read@only; +begin transaction not deferrable isolation level@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable isolation level serializable read only; +!begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only!; +begin transaction not deferrable isolation level default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read!only; +begin transaction not deferrable isolation level!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable isolation level serializable read only; +*begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only*; +begin transaction not deferrable isolation level default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read*only; +begin transaction not deferrable isolation level*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable isolation level serializable read only; +(begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only(; +begin transaction not deferrable isolation level default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read(only; +begin transaction not deferrable isolation level(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable isolation level serializable read only; +)begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only); +begin transaction not deferrable isolation level default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read)only; +begin transaction not deferrable isolation level)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable isolation level serializable read only; +-begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only-; +begin transaction not deferrable isolation level default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read-only; +begin transaction not deferrable isolation level-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable isolation level serializable read only; ++begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only+; +begin transaction not deferrable isolation level default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read+only; +begin transaction not deferrable isolation level+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable isolation level serializable read only; +-#begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only-#; +begin transaction not deferrable isolation level default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read-#only; +begin transaction not deferrable isolation level-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable isolation level serializable read only; +/begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only/; +begin transaction not deferrable isolation level default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read/only; +begin transaction not deferrable isolation level/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable isolation level serializable read only; +\begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only\; +begin transaction not deferrable isolation level default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read\only; +begin transaction not deferrable isolation level\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable isolation level serializable read only; +?begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only?; +begin transaction not deferrable isolation level default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read?only; +begin transaction not deferrable isolation level?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable isolation level serializable read only; +-/begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only-/; +begin transaction not deferrable isolation level default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read-/only; +begin transaction not deferrable isolation level-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable isolation level serializable read only; +/#begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only/#; +begin transaction not deferrable isolation level default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read/#only; +begin transaction not deferrable isolation level/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable isolation level serializable read only; +/-begin transaction not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read only/-; +begin transaction not deferrable isolation level default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable read/-only; +begin transaction not deferrable isolation level/-default; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE; +START TRANSACTION ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default; NEW_CONNECTION; - start transaction isolation level serializable read write; + start transaction isolation level default; NEW_CONNECTION; - start transaction isolation level serializable read write; + start transaction isolation level default; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default; NEW_CONNECTION; -start transaction isolation level serializable read write ; +start transaction isolation level default ; NEW_CONNECTION; -start transaction isolation level serializable read write ; +start transaction isolation level default ; NEW_CONNECTION; -start transaction isolation level serializable read write +start transaction isolation level default ; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default; NEW_CONNECTION; -start transaction isolation level serializable read write; +start transaction isolation level default; NEW_CONNECTION; start transaction isolation level -serializable -read -write; +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable read write; +foo start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write bar; +start transaction isolation level default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable read write; +%start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write%; +start transaction isolation level default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read%write; +start transaction isolation level%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable read write; +_start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write_; +start transaction isolation level default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read_write; +start transaction isolation level_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable read write; +&start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write&; +start transaction isolation level default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read&write; +start transaction isolation level&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable read write; +$start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write$; +start transaction isolation level default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read$write; +start transaction isolation level$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable read write; +@start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write@; +start transaction isolation level default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read@write; +start transaction isolation level@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable read write; +!start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write!; +start transaction isolation level default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read!write; +start transaction isolation level!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable read write; +*start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write*; +start transaction isolation level default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read*write; +start transaction isolation level*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable read write; +(start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write(; +start transaction isolation level default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read(write; +start transaction isolation level(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable read write; +)start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write); +start transaction isolation level default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read)write; +start transaction isolation level)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable read write; +-start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write-; +start transaction isolation level default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read-write; +start transaction isolation level-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable read write; ++start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write+; +start transaction isolation level default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read+write; +start transaction isolation level+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable read write; +-#start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write-#; +start transaction isolation level default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read-#write; +start transaction isolation level-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable read write; +/start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write/; +start transaction isolation level default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read/write; +start transaction isolation level/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable read write; +\start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write\; +start transaction isolation level default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read\write; +start transaction isolation level\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable read write; +?start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write?; +start transaction isolation level default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read?write; +start transaction isolation level?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable read write; +-/start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write-/; +start transaction isolation level default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read-/write; +start transaction isolation level-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable read write; +/#start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write/#; +start transaction isolation level default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read/#write; +start transaction isolation level/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable read write; +/-start transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read write/-; +start transaction isolation level default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable read/-write; +start transaction isolation level/-default; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write; +begin work not deferrable isolation level default; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE READ WRITE; +BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write; +begin work not deferrable isolation level default; NEW_CONNECTION; - begin work not deferrable isolation level serializable read write; + begin work not deferrable isolation level default; NEW_CONNECTION; - begin work not deferrable isolation level serializable read write; + begin work not deferrable isolation level default; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write; +begin work not deferrable isolation level default; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write ; +begin work not deferrable isolation level default ; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write ; +begin work not deferrable isolation level default ; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write +begin work not deferrable isolation level default ; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write; +begin work not deferrable isolation level default; NEW_CONNECTION; -begin work not deferrable isolation level serializable read write; +begin work not deferrable isolation level default; NEW_CONNECTION; begin work @@ -37811,813 +39006,805 @@ not deferrable isolation level -serializable -read -write; +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable isolation level serializable read write; +foo begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write bar; +begin work not deferrable isolation level default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable isolation level serializable read write; +%begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write%; +begin work not deferrable isolation level default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read%write; +begin work not deferrable isolation level%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable isolation level serializable read write; +_begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write_; +begin work not deferrable isolation level default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read_write; +begin work not deferrable isolation level_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable isolation level serializable read write; +&begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write&; +begin work not deferrable isolation level default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read&write; +begin work not deferrable isolation level&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable isolation level serializable read write; +$begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write$; +begin work not deferrable isolation level default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read$write; +begin work not deferrable isolation level$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable isolation level serializable read write; +@begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write@; +begin work not deferrable isolation level default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read@write; +begin work not deferrable isolation level@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable isolation level serializable read write; +!begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write!; +begin work not deferrable isolation level default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read!write; +begin work not deferrable isolation level!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable isolation level serializable read write; +*begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write*; +begin work not deferrable isolation level default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read*write; +begin work not deferrable isolation level*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable isolation level serializable read write; +(begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write(; +begin work not deferrable isolation level default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read(write; +begin work not deferrable isolation level(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable isolation level serializable read write; +)begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write); +begin work not deferrable isolation level default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read)write; +begin work not deferrable isolation level)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable isolation level serializable read write; +-begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write-; +begin work not deferrable isolation level default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read-write; +begin work not deferrable isolation level-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable isolation level serializable read write; ++begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write+; +begin work not deferrable isolation level default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read+write; +begin work not deferrable isolation level+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable isolation level serializable read write; +-#begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write-#; +begin work not deferrable isolation level default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read-#write; +begin work not deferrable isolation level-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable isolation level serializable read write; +/begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write/; +begin work not deferrable isolation level default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read/write; +begin work not deferrable isolation level/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable isolation level serializable read write; +\begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write\; +begin work not deferrable isolation level default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read\write; +begin work not deferrable isolation level\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable isolation level serializable read write; +?begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write?; +begin work not deferrable isolation level default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read?write; +begin work not deferrable isolation level?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable isolation level serializable read write; +-/begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write-/; +begin work not deferrable isolation level default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read-/write; +begin work not deferrable isolation level-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable isolation level serializable read write; +/#begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write/#; +begin work not deferrable isolation level default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read/#write; +begin work not deferrable isolation level/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable isolation level serializable read write; +/-begin work not deferrable isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read write/-; +begin work not deferrable isolation level default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable read/-write; +begin work not deferrable isolation level/-default; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE READ ONLY; +START WORK ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default; NEW_CONNECTION; - start work isolation level serializable read only; + start work isolation level default; NEW_CONNECTION; - start work isolation level serializable read only; + start work isolation level default; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default; NEW_CONNECTION; -start work isolation level serializable read only ; +start work isolation level default ; NEW_CONNECTION; -start work isolation level serializable read only ; +start work isolation level default ; NEW_CONNECTION; -start work isolation level serializable read only +start work isolation level default ; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default; NEW_CONNECTION; -start work isolation level serializable read only; +start work isolation level default; NEW_CONNECTION; start work isolation level -serializable -read -only; +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable read only; +foo start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only bar; +start work isolation level default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable read only; +%start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only%; +start work isolation level default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read%only; +start work isolation level%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable read only; +_start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only_; +start work isolation level default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read_only; +start work isolation level_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable read only; +&start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only&; +start work isolation level default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read&only; +start work isolation level&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable read only; +$start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only$; +start work isolation level default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read$only; +start work isolation level$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable read only; +@start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only@; +start work isolation level default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read@only; +start work isolation level@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable read only; +!start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only!; +start work isolation level default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read!only; +start work isolation level!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable read only; +*start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only*; +start work isolation level default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read*only; +start work isolation level*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable read only; +(start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only(; +start work isolation level default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read(only; +start work isolation level(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable read only; +)start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only); +start work isolation level default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read)only; +start work isolation level)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable read only; +-start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only-; +start work isolation level default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read-only; +start work isolation level-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable read only; ++start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only+; +start work isolation level default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read+only; +start work isolation level+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable read only; +-#start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only-#; +start work isolation level default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read-#only; +start work isolation level-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable read only; +/start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only/; +start work isolation level default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read/only; +start work isolation level/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable read only; +\start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only\; +start work isolation level default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read\only; +start work isolation level\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable read only; +?start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only?; +start work isolation level default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read?only; +start work isolation level?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable read only; +-/start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only-/; +start work isolation level default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read-/only; +start work isolation level-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable read only; +/#start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only/#; +start work isolation level default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read/#only; +start work isolation level/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable read only; +/-start work isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read only/-; +start work isolation level default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable read/-only; +start work isolation level/-default; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write; +begin not deferrable isolation level serializable; NEW_CONNECTION; -BEGIN NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE, READ WRITE; +BEGIN NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write; +begin not deferrable isolation level serializable; NEW_CONNECTION; - begin not deferrable isolation level serializable, read write; + begin not deferrable isolation level serializable; NEW_CONNECTION; - begin not deferrable isolation level serializable, read write; + begin not deferrable isolation level serializable; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write; +begin not deferrable isolation level serializable; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write ; +begin not deferrable isolation level serializable ; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write ; +begin not deferrable isolation level serializable ; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write +begin not deferrable isolation level serializable ; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write; +begin not deferrable isolation level serializable; NEW_CONNECTION; -begin not deferrable isolation level serializable, read write; +begin not deferrable isolation level serializable; NEW_CONNECTION; begin not deferrable isolation level -serializable, -read -write; +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin not deferrable isolation level serializable, read write; +foo begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write bar; +begin not deferrable isolation level serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin not deferrable isolation level serializable, read write; +%begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write%; +begin not deferrable isolation level serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read%write; +begin not deferrable isolation level%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin not deferrable isolation level serializable, read write; +_begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write_; +begin not deferrable isolation level serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read_write; +begin not deferrable isolation level_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin not deferrable isolation level serializable, read write; +&begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write&; +begin not deferrable isolation level serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read&write; +begin not deferrable isolation level&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin not deferrable isolation level serializable, read write; +$begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write$; +begin not deferrable isolation level serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read$write; +begin not deferrable isolation level$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin not deferrable isolation level serializable, read write; +@begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write@; +begin not deferrable isolation level serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read@write; +begin not deferrable isolation level@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin not deferrable isolation level serializable, read write; +!begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write!; +begin not deferrable isolation level serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read!write; +begin not deferrable isolation level!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin not deferrable isolation level serializable, read write; +*begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write*; +begin not deferrable isolation level serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read*write; +begin not deferrable isolation level*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin not deferrable isolation level serializable, read write; +(begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write(; +begin not deferrable isolation level serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read(write; +begin not deferrable isolation level(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin not deferrable isolation level serializable, read write; +)begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write); +begin not deferrable isolation level serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read)write; +begin not deferrable isolation level)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin not deferrable isolation level serializable, read write; +-begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write-; +begin not deferrable isolation level serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read-write; +begin not deferrable isolation level-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin not deferrable isolation level serializable, read write; ++begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write+; +begin not deferrable isolation level serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read+write; +begin not deferrable isolation level+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin not deferrable isolation level serializable, read write; +-#begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write-#; +begin not deferrable isolation level serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read-#write; +begin not deferrable isolation level-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin not deferrable isolation level serializable, read write; +/begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write/; +begin not deferrable isolation level serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read/write; +begin not deferrable isolation level/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin not deferrable isolation level serializable, read write; +\begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write\; +begin not deferrable isolation level serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read\write; +begin not deferrable isolation level\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin not deferrable isolation level serializable, read write; +?begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write?; +begin not deferrable isolation level serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read?write; +begin not deferrable isolation level?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin not deferrable isolation level serializable, read write; +-/begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write-/; +begin not deferrable isolation level serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read-/write; +begin not deferrable isolation level-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin not deferrable isolation level serializable, read write; +/#begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write/#; +begin not deferrable isolation level serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read/#write; +begin not deferrable isolation level/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin not deferrable isolation level serializable, read write; +/-begin not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read write/-; +begin not deferrable isolation level serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin not deferrable isolation level serializable, read/-write; +begin not deferrable isolation level/-serializable; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable; NEW_CONNECTION; -START ISOLATION LEVEL SERIALIZABLE, READ WRITE; +START ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable; NEW_CONNECTION; - start isolation level serializable, read write; + start isolation level serializable; NEW_CONNECTION; - start isolation level serializable, read write; + start isolation level serializable; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable; NEW_CONNECTION; -start isolation level serializable, read write ; +start isolation level serializable ; NEW_CONNECTION; -start isolation level serializable, read write ; +start isolation level serializable ; NEW_CONNECTION; -start isolation level serializable, read write +start isolation level serializable ; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable; NEW_CONNECTION; -start isolation level serializable, read write; +start isolation level serializable; NEW_CONNECTION; start isolation level -serializable, -read -write; +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start isolation level serializable, read write; +foo start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write bar; +start isolation level serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start isolation level serializable, read write; +%start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write%; +start isolation level serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read%write; +start isolation level%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start isolation level serializable, read write; +_start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write_; +start isolation level serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read_write; +start isolation level_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start isolation level serializable, read write; +&start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write&; +start isolation level serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read&write; +start isolation level&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start isolation level serializable, read write; +$start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write$; +start isolation level serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read$write; +start isolation level$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start isolation level serializable, read write; +@start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write@; +start isolation level serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read@write; +start isolation level@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start isolation level serializable, read write; +!start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write!; +start isolation level serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read!write; +start isolation level!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start isolation level serializable, read write; +*start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write*; +start isolation level serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read*write; +start isolation level*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start isolation level serializable, read write; +(start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write(; +start isolation level serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read(write; +start isolation level(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start isolation level serializable, read write; +)start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write); +start isolation level serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read)write; +start isolation level)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start isolation level serializable, read write; +-start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write-; +start isolation level serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read-write; +start isolation level-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start isolation level serializable, read write; ++start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write+; +start isolation level serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read+write; +start isolation level+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start isolation level serializable, read write; +-#start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write-#; +start isolation level serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read-#write; +start isolation level-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start isolation level serializable, read write; +/start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write/; +start isolation level serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read/write; +start isolation level/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start isolation level serializable, read write; +\start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write\; +start isolation level serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read\write; +start isolation level\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start isolation level serializable, read write; +?start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write?; +start isolation level serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read?write; +start isolation level?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start isolation level serializable, read write; +-/start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write-/; +start isolation level serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read-/write; +start isolation level-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start isolation level serializable, read write; +/#start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write/#; +start isolation level serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read/#write; +start isolation level/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start isolation level serializable, read write; +/-start isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read write/-; +start isolation level serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start isolation level serializable, read/-write; +start isolation level/-serializable; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only; +begin transaction not deferrable isolation level serializable; NEW_CONNECTION; -BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE, READ ONLY; +BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only; +begin transaction not deferrable isolation level serializable; NEW_CONNECTION; - begin transaction not deferrable isolation level serializable, read only; + begin transaction not deferrable isolation level serializable; NEW_CONNECTION; - begin transaction not deferrable isolation level serializable, read only; + begin transaction not deferrable isolation level serializable; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only; +begin transaction not deferrable isolation level serializable; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only ; +begin transaction not deferrable isolation level serializable ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only ; +begin transaction not deferrable isolation level serializable ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only +begin transaction not deferrable isolation level serializable ; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only; +begin transaction not deferrable isolation level serializable; NEW_CONNECTION; -begin transaction not deferrable isolation level serializable, read only; +begin transaction not deferrable isolation level serializable; NEW_CONNECTION; begin transaction @@ -38625,407 +39812,403 @@ not deferrable isolation level -serializable, -read -only; +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin transaction not deferrable isolation level serializable, read only; +foo begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only bar; +begin transaction not deferrable isolation level serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin transaction not deferrable isolation level serializable, read only; +%begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only%; +begin transaction not deferrable isolation level serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read%only; +begin transaction not deferrable isolation level%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin transaction not deferrable isolation level serializable, read only; +_begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only_; +begin transaction not deferrable isolation level serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read_only; +begin transaction not deferrable isolation level_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin transaction not deferrable isolation level serializable, read only; +&begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only&; +begin transaction not deferrable isolation level serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read&only; +begin transaction not deferrable isolation level&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin transaction not deferrable isolation level serializable, read only; +$begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only$; +begin transaction not deferrable isolation level serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read$only; +begin transaction not deferrable isolation level$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin transaction not deferrable isolation level serializable, read only; +@begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only@; +begin transaction not deferrable isolation level serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read@only; +begin transaction not deferrable isolation level@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin transaction not deferrable isolation level serializable, read only; +!begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only!; +begin transaction not deferrable isolation level serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read!only; +begin transaction not deferrable isolation level!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin transaction not deferrable isolation level serializable, read only; +*begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only*; +begin transaction not deferrable isolation level serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read*only; +begin transaction not deferrable isolation level*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin transaction not deferrable isolation level serializable, read only; +(begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only(; +begin transaction not deferrable isolation level serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read(only; +begin transaction not deferrable isolation level(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin transaction not deferrable isolation level serializable, read only; +)begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only); +begin transaction not deferrable isolation level serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read)only; +begin transaction not deferrable isolation level)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin transaction not deferrable isolation level serializable, read only; +-begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only-; +begin transaction not deferrable isolation level serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read-only; +begin transaction not deferrable isolation level-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin transaction not deferrable isolation level serializable, read only; ++begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only+; +begin transaction not deferrable isolation level serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read+only; +begin transaction not deferrable isolation level+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin transaction not deferrable isolation level serializable, read only; +-#begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only-#; +begin transaction not deferrable isolation level serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read-#only; +begin transaction not deferrable isolation level-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin transaction not deferrable isolation level serializable, read only; +/begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only/; +begin transaction not deferrable isolation level serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read/only; +begin transaction not deferrable isolation level/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin transaction not deferrable isolation level serializable, read only; +\begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only\; +begin transaction not deferrable isolation level serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read\only; +begin transaction not deferrable isolation level\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin transaction not deferrable isolation level serializable, read only; +?begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only?; +begin transaction not deferrable isolation level serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read?only; +begin transaction not deferrable isolation level?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin transaction not deferrable isolation level serializable, read only; +-/begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only-/; +begin transaction not deferrable isolation level serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read-/only; +begin transaction not deferrable isolation level-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin transaction not deferrable isolation level serializable, read only; +/#begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only/#; +begin transaction not deferrable isolation level serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read/#only; +begin transaction not deferrable isolation level/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin transaction not deferrable isolation level serializable, read only; +/-begin transaction not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read only/-; +begin transaction not deferrable isolation level serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin transaction not deferrable isolation level serializable, read/-only; +begin transaction not deferrable isolation level/-serializable; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable; NEW_CONNECTION; -START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable; NEW_CONNECTION; - start transaction isolation level serializable, read write; + start transaction isolation level serializable; NEW_CONNECTION; - start transaction isolation level serializable, read write; + start transaction isolation level serializable; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable; NEW_CONNECTION; -start transaction isolation level serializable, read write ; +start transaction isolation level serializable ; NEW_CONNECTION; -start transaction isolation level serializable, read write ; +start transaction isolation level serializable ; NEW_CONNECTION; -start transaction isolation level serializable, read write +start transaction isolation level serializable ; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable; NEW_CONNECTION; -start transaction isolation level serializable, read write; +start transaction isolation level serializable; NEW_CONNECTION; start transaction isolation level -serializable, -read -write; +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start transaction isolation level serializable, read write; +foo start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write bar; +start transaction isolation level serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start transaction isolation level serializable, read write; +%start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write%; +start transaction isolation level serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read%write; +start transaction isolation level%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start transaction isolation level serializable, read write; +_start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write_; +start transaction isolation level serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read_write; +start transaction isolation level_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start transaction isolation level serializable, read write; +&start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write&; +start transaction isolation level serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read&write; +start transaction isolation level&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start transaction isolation level serializable, read write; +$start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write$; +start transaction isolation level serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read$write; +start transaction isolation level$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start transaction isolation level serializable, read write; +@start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write@; +start transaction isolation level serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read@write; +start transaction isolation level@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start transaction isolation level serializable, read write; +!start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write!; +start transaction isolation level serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read!write; +start transaction isolation level!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start transaction isolation level serializable, read write; +*start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write*; +start transaction isolation level serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read*write; +start transaction isolation level*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start transaction isolation level serializable, read write; +(start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write(; +start transaction isolation level serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read(write; +start transaction isolation level(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start transaction isolation level serializable, read write; +)start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write); +start transaction isolation level serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read)write; +start transaction isolation level)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start transaction isolation level serializable, read write; +-start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write-; +start transaction isolation level serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read-write; +start transaction isolation level-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start transaction isolation level serializable, read write; ++start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write+; +start transaction isolation level serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read+write; +start transaction isolation level+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start transaction isolation level serializable, read write; +-#start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write-#; +start transaction isolation level serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read-#write; +start transaction isolation level-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start transaction isolation level serializable, read write; +/start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write/; +start transaction isolation level serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read/write; +start transaction isolation level/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start transaction isolation level serializable, read write; +\start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write\; +start transaction isolation level serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read\write; +start transaction isolation level\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start transaction isolation level serializable, read write; +?start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write?; +start transaction isolation level serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read?write; +start transaction isolation level?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start transaction isolation level serializable, read write; +-/start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write-/; +start transaction isolation level serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read-/write; +start transaction isolation level-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start transaction isolation level serializable, read write; +/#start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write/#; +start transaction isolation level serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read/#write; +start transaction isolation level/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start transaction isolation level serializable, read write; +/-start transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read write/-; +start transaction isolation level serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start transaction isolation level serializable, read/-write; +start transaction isolation level/-serializable; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write; +begin work not deferrable isolation level serializable; NEW_CONNECTION; -BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE, READ WRITE; +BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write; +begin work not deferrable isolation level serializable; NEW_CONNECTION; - begin work not deferrable isolation level serializable, read write; + begin work not deferrable isolation level serializable; NEW_CONNECTION; - begin work not deferrable isolation level serializable, read write; + begin work not deferrable isolation level serializable; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write; +begin work not deferrable isolation level serializable; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write ; +begin work not deferrable isolation level serializable ; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write ; +begin work not deferrable isolation level serializable ; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write +begin work not deferrable isolation level serializable ; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write; +begin work not deferrable isolation level serializable; NEW_CONNECTION; -begin work not deferrable isolation level serializable, read write; +begin work not deferrable isolation level serializable; NEW_CONNECTION; begin work @@ -39033,46023 +40216,58458 @@ not deferrable isolation level -serializable, -read -write; +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo begin work not deferrable isolation level serializable, read write; +foo begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write bar; +begin work not deferrable isolation level serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%begin work not deferrable isolation level serializable, read write; +%begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write%; +begin work not deferrable isolation level serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read%write; +begin work not deferrable isolation level%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_begin work not deferrable isolation level serializable, read write; +_begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write_; +begin work not deferrable isolation level serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read_write; +begin work not deferrable isolation level_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&begin work not deferrable isolation level serializable, read write; +&begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write&; +begin work not deferrable isolation level serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read&write; +begin work not deferrable isolation level&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$begin work not deferrable isolation level serializable, read write; +$begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write$; +begin work not deferrable isolation level serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read$write; +begin work not deferrable isolation level$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@begin work not deferrable isolation level serializable, read write; +@begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write@; +begin work not deferrable isolation level serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read@write; +begin work not deferrable isolation level@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!begin work not deferrable isolation level serializable, read write; +!begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write!; +begin work not deferrable isolation level serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read!write; +begin work not deferrable isolation level!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*begin work not deferrable isolation level serializable, read write; +*begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write*; +begin work not deferrable isolation level serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read*write; +begin work not deferrable isolation level*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(begin work not deferrable isolation level serializable, read write; +(begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write(; +begin work not deferrable isolation level serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read(write; +begin work not deferrable isolation level(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)begin work not deferrable isolation level serializable, read write; +)begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write); +begin work not deferrable isolation level serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read)write; +begin work not deferrable isolation level)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --begin work not deferrable isolation level serializable, read write; +-begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write-; +begin work not deferrable isolation level serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read-write; +begin work not deferrable isolation level-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+begin work not deferrable isolation level serializable, read write; ++begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write+; +begin work not deferrable isolation level serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read+write; +begin work not deferrable isolation level+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#begin work not deferrable isolation level serializable, read write; +-#begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write-#; +begin work not deferrable isolation level serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read-#write; +begin work not deferrable isolation level-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/begin work not deferrable isolation level serializable, read write; +/begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write/; +begin work not deferrable isolation level serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read/write; +begin work not deferrable isolation level/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\begin work not deferrable isolation level serializable, read write; +\begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write\; +begin work not deferrable isolation level serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read\write; +begin work not deferrable isolation level\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?begin work not deferrable isolation level serializable, read write; +?begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write?; +begin work not deferrable isolation level serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read?write; +begin work not deferrable isolation level?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/begin work not deferrable isolation level serializable, read write; +-/begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write-/; +begin work not deferrable isolation level serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read-/write; +begin work not deferrable isolation level-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#begin work not deferrable isolation level serializable, read write; +/#begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write/#; +begin work not deferrable isolation level serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read/#write; +begin work not deferrable isolation level/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-begin work not deferrable isolation level serializable, read write; +/-begin work not deferrable isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read write/-; +begin work not deferrable isolation level serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -begin work not deferrable isolation level serializable, read/-write; +begin work not deferrable isolation level/-serializable; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable; NEW_CONNECTION; -START WORK ISOLATION LEVEL SERIALIZABLE, READ ONLY; +START WORK ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable; NEW_CONNECTION; - start work isolation level serializable, read only; + start work isolation level serializable; NEW_CONNECTION; - start work isolation level serializable, read only; + start work isolation level serializable; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable; NEW_CONNECTION; -start work isolation level serializable, read only ; +start work isolation level serializable ; NEW_CONNECTION; -start work isolation level serializable, read only ; +start work isolation level serializable ; NEW_CONNECTION; -start work isolation level serializable, read only +start work isolation level serializable ; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable; NEW_CONNECTION; -start work isolation level serializable, read only; +start work isolation level serializable; NEW_CONNECTION; start work isolation level -serializable, -read -only; +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start work isolation level serializable, read only; +foo start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only bar; +start work isolation level serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start work isolation level serializable, read only; +%start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only%; +start work isolation level serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read%only; +start work isolation level%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start work isolation level serializable, read only; +_start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only_; +start work isolation level serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read_only; +start work isolation level_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start work isolation level serializable, read only; +&start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only&; +start work isolation level serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read&only; +start work isolation level&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start work isolation level serializable, read only; +$start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only$; +start work isolation level serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read$only; +start work isolation level$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start work isolation level serializable, read only; +@start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only@; +start work isolation level serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read@only; +start work isolation level@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start work isolation level serializable, read only; +!start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only!; +start work isolation level serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read!only; +start work isolation level!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start work isolation level serializable, read only; +*start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only*; +start work isolation level serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read*only; +start work isolation level*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start work isolation level serializable, read only; +(start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only(; +start work isolation level serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read(only; +start work isolation level(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start work isolation level serializable, read only; +)start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only); +start work isolation level serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read)only; +start work isolation level)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start work isolation level serializable, read only; +-start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-; +start work isolation level serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-only; +start work isolation level-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start work isolation level serializable, read only; ++start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only+; +start work isolation level serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read+only; +start work isolation level+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start work isolation level serializable, read only; +-#start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-#; +start work isolation level serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-#only; +start work isolation level-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start work isolation level serializable, read only; +/start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/; +start work isolation level serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/only; +start work isolation level/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start work isolation level serializable, read only; +\start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only\; +start work isolation level serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read\only; +start work isolation level\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start work isolation level serializable, read only; +?start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only?; +start work isolation level serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read?only; +start work isolation level?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start work isolation level serializable, read only; +-/start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only-/; +start work isolation level serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read-/only; +start work isolation level-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start work isolation level serializable, read only; +/#start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/#; +start work isolation level serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/#only; +start work isolation level/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start work isolation level serializable, read only; +/-start work isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read only/-; +start work isolation level serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start work isolation level serializable, read/-only; +start work isolation level/-serializable; NEW_CONNECTION; -begin transaction; -commit; +begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -COMMIT; +BEGIN NOT DEFERRABLE ISOLATION LEVEL DEFAULT READ WRITE; NEW_CONNECTION; -begin transaction; -commit; +begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; - commit; + begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; - commit; + begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit; +begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit ; +begin not deferrable isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit ; +begin not deferrable isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit +begin not deferrable isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit; +begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit; +begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit; +begin +not +deferrable +isolation +level +default +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit; +foo begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit bar; +begin not deferrable isolation level default read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit; +%begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit%; +begin not deferrable isolation level default read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit%; +begin not deferrable isolation level default read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit; +_begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit_; +begin not deferrable isolation level default read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit_; +begin not deferrable isolation level default read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit; +&begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit&; +begin not deferrable isolation level default read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit&; +begin not deferrable isolation level default read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit; +$begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit$; +begin not deferrable isolation level default read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit$; +begin not deferrable isolation level default read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit; +@begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit@; +begin not deferrable isolation level default read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit@; +begin not deferrable isolation level default read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit; +!begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit!; +begin not deferrable isolation level default read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit!; +begin not deferrable isolation level default read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit; +*begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit*; +begin not deferrable isolation level default read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit*; +begin not deferrable isolation level default read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit; +(begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit(; +begin not deferrable isolation level default read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit(; +begin not deferrable isolation level default read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit; +)begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit); +begin not deferrable isolation level default read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit); +begin not deferrable isolation level default read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit; +-begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-; +begin not deferrable isolation level default read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-; +begin not deferrable isolation level default read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit; ++begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit+; +begin not deferrable isolation level default read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit+; +begin not deferrable isolation level default read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit; +-#begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-#; +begin not deferrable isolation level default read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-#; +begin not deferrable isolation level default read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit; +/begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/; +begin not deferrable isolation level default read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/; +begin not deferrable isolation level default read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit; +\begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit\; +begin not deferrable isolation level default read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit\; +begin not deferrable isolation level default read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit; +?begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit?; +begin not deferrable isolation level default read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit?; +begin not deferrable isolation level default read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit; +-/begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-/; +begin not deferrable isolation level default read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-/; +begin not deferrable isolation level default read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit; +/#begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/#; +begin not deferrable isolation level default read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/#; +begin not deferrable isolation level default read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit; +/-begin not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/-; +begin not deferrable isolation level default read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/-; +begin not deferrable isolation level default read/-write; NEW_CONNECTION; -begin transaction; -commit transaction; +start isolation level default read only; NEW_CONNECTION; -begin transaction; -COMMIT TRANSACTION; +START ISOLATION LEVEL DEFAULT READ ONLY; NEW_CONNECTION; -begin transaction; -commit transaction; +start isolation level default read only; NEW_CONNECTION; -begin transaction; - commit transaction; + start isolation level default read only; NEW_CONNECTION; -begin transaction; - commit transaction; + start isolation level default read only; NEW_CONNECTION; -begin transaction; -commit transaction; +start isolation level default read only; NEW_CONNECTION; -begin transaction; -commit transaction ; +start isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit transaction ; +start isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit transaction +start isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit transaction; +start isolation level default read only; NEW_CONNECTION; -begin transaction; -commit transaction; +start isolation level default read only; NEW_CONNECTION; -begin transaction; -commit -transaction; +start +isolation +level +default +read +only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit transaction; +foo start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction bar; +start isolation level default read only bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit transaction; +%start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction%; +start isolation level default read only%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit%transaction; +start isolation level default read%only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit transaction; +_start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction_; +start isolation level default read only_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit_transaction; +start isolation level default read_only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit transaction; +&start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction&; +start isolation level default read only&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit&transaction; +start isolation level default read&only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit transaction; +$start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction$; +start isolation level default read only$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit$transaction; +start isolation level default read$only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit transaction; +@start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction@; +start isolation level default read only@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit@transaction; +start isolation level default read@only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit transaction; +!start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction!; +start isolation level default read only!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit!transaction; +start isolation level default read!only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit transaction; +*start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction*; +start isolation level default read only*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit*transaction; +start isolation level default read*only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit transaction; +(start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction(; +start isolation level default read only(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit(transaction; +start isolation level default read(only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit transaction; +)start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction); +start isolation level default read only); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit)transaction; +start isolation level default read)only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit transaction; +-start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction-; +start isolation level default read only-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-transaction; +start isolation level default read-only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit transaction; ++start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction+; +start isolation level default read only+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit+transaction; +start isolation level default read+only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit transaction; +-#start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction-#; +start isolation level default read only-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-#transaction; +start isolation level default read-#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit transaction; +/start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction/; +start isolation level default read only/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/transaction; +start isolation level default read/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit transaction; +\start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction\; +start isolation level default read only\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit\transaction; +start isolation level default read\only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit transaction; +?start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction?; +start isolation level default read only?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit?transaction; +start isolation level default read?only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit transaction; +-/start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction-/; +start isolation level default read only-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-/transaction; +start isolation level default read-/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit transaction; +/#start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction/#; +start isolation level default read only/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/#transaction; +start isolation level default read/#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit transaction; +/-start isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction/-; +start isolation level default read only/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/-transaction; +start isolation level default read/-only; NEW_CONNECTION; -begin transaction; -commit work; +begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; -COMMIT WORK; +BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL DEFAULT READ ONLY; NEW_CONNECTION; -begin transaction; -commit work; +begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; - commit work; + begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; - commit work; + begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; -commit work; +begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; -commit work ; +begin transaction not deferrable isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit work ; +begin transaction not deferrable isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit work +begin transaction not deferrable isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit work; +begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; -commit work; +begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; -commit -work; +begin +transaction +not +deferrable +isolation +level +default +read +only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit work; +foo begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work bar; +begin transaction not deferrable isolation level default read only bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit work; +%begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work%; +begin transaction not deferrable isolation level default read only%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit%work; +begin transaction not deferrable isolation level default read%only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit work; +_begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work_; +begin transaction not deferrable isolation level default read only_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit_work; +begin transaction not deferrable isolation level default read_only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit work; +&begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work&; +begin transaction not deferrable isolation level default read only&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit&work; +begin transaction not deferrable isolation level default read&only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit work; +$begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work$; +begin transaction not deferrable isolation level default read only$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit$work; +begin transaction not deferrable isolation level default read$only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit work; +@begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work@; +begin transaction not deferrable isolation level default read only@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit@work; +begin transaction not deferrable isolation level default read@only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit work; +!begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work!; +begin transaction not deferrable isolation level default read only!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit!work; +begin transaction not deferrable isolation level default read!only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit work; +*begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work*; +begin transaction not deferrable isolation level default read only*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit*work; +begin transaction not deferrable isolation level default read*only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit work; +(begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work(; +begin transaction not deferrable isolation level default read only(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit(work; +begin transaction not deferrable isolation level default read(only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit work; +)begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work); +begin transaction not deferrable isolation level default read only); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit)work; +begin transaction not deferrable isolation level default read)only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit work; +-begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work-; +begin transaction not deferrable isolation level default read only-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-work; +begin transaction not deferrable isolation level default read-only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit work; ++begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work+; +begin transaction not deferrable isolation level default read only+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit+work; +begin transaction not deferrable isolation level default read+only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit work; +-#begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work-#; +begin transaction not deferrable isolation level default read only-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-#work; +begin transaction not deferrable isolation level default read-#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit work; +/begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work/; +begin transaction not deferrable isolation level default read only/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/work; +begin transaction not deferrable isolation level default read/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit work; +\begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work\; +begin transaction not deferrable isolation level default read only\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit\work; +begin transaction not deferrable isolation level default read\only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit work; +?begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work?; +begin transaction not deferrable isolation level default read only?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit?work; +begin transaction not deferrable isolation level default read?only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit work; +-/begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work-/; +begin transaction not deferrable isolation level default read only-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit-/work; +begin transaction not deferrable isolation level default read-/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit work; +/#begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work/#; +begin transaction not deferrable isolation level default read only/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/#work; +begin transaction not deferrable isolation level default read/#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit work; +/-begin transaction not deferrable isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work/-; +begin transaction not deferrable isolation level default read only/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit/-work; +begin transaction not deferrable isolation level default read/-only; NEW_CONNECTION; -begin transaction; -commit and no chain; +start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; -COMMIT AND NO CHAIN; +START TRANSACTION ISOLATION LEVEL DEFAULT READ WRITE; NEW_CONNECTION; -begin transaction; -commit and no chain; +start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; - commit and no chain; + start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; - commit and no chain; + start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; -commit and no chain; +start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; -commit and no chain ; +start transaction isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit and no chain ; +start transaction isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit and no chain +start transaction isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit and no chain; +start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; -commit and no chain; +start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; -commit -and -no -chain; +start +transaction +isolation +level +default +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit and no chain; +foo start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain bar; +start transaction isolation level default read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit and no chain; +%start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain%; +start transaction isolation level default read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no%chain; +start transaction isolation level default read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit and no chain; +_start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain_; +start transaction isolation level default read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no_chain; +start transaction isolation level default read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit and no chain; +&start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain&; +start transaction isolation level default read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no&chain; +start transaction isolation level default read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit and no chain; +$start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain$; +start transaction isolation level default read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no$chain; +start transaction isolation level default read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit and no chain; +@start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain@; +start transaction isolation level default read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no@chain; +start transaction isolation level default read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit and no chain; +!start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain!; +start transaction isolation level default read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no!chain; +start transaction isolation level default read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit and no chain; +*start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain*; +start transaction isolation level default read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no*chain; +start transaction isolation level default read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit and no chain; +(start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain(; +start transaction isolation level default read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no(chain; +start transaction isolation level default read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit and no chain; +)start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain); +start transaction isolation level default read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no)chain; +start transaction isolation level default read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit and no chain; +-start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain-; +start transaction isolation level default read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no-chain; +start transaction isolation level default read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit and no chain; ++start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain+; +start transaction isolation level default read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no+chain; +start transaction isolation level default read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit and no chain; +-#start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain-#; +start transaction isolation level default read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no-#chain; +start transaction isolation level default read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit and no chain; +/start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain/; +start transaction isolation level default read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no/chain; +start transaction isolation level default read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit and no chain; +\start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain\; +start transaction isolation level default read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no\chain; +start transaction isolation level default read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit and no chain; +?start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain?; +start transaction isolation level default read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no?chain; +start transaction isolation level default read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit and no chain; +-/start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain-/; +start transaction isolation level default read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no-/chain; +start transaction isolation level default read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit and no chain; +/#start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain/#; +start transaction isolation level default read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no/#chain; +start transaction isolation level default read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit and no chain; +/-start transaction isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no chain/-; +start transaction isolation level default read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit and no/-chain; +start transaction isolation level default read/-write; NEW_CONNECTION; -begin transaction; -commit transaction and no chain; +begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -COMMIT TRANSACTION AND NO CHAIN; +BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL DEFAULT READ WRITE; NEW_CONNECTION; -begin transaction; -commit transaction and no chain; +begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; - commit transaction and no chain; + begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; - commit transaction and no chain; + begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit transaction and no chain; +begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit transaction and no chain ; +begin work not deferrable isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit transaction and no chain ; +begin work not deferrable isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit transaction and no chain +begin work not deferrable isolation level default read write ; NEW_CONNECTION; -begin transaction; -commit transaction and no chain; +begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit transaction and no chain; +begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; -commit -transaction -and -no -chain; +begin +work +not +deferrable +isolation +level +default +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit transaction and no chain; +foo begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain bar; +begin work not deferrable isolation level default read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit transaction and no chain; +%begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain%; +begin work not deferrable isolation level default read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no%chain; +begin work not deferrable isolation level default read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit transaction and no chain; +_begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain_; +begin work not deferrable isolation level default read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no_chain; +begin work not deferrable isolation level default read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit transaction and no chain; +&begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain&; +begin work not deferrable isolation level default read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no&chain; +begin work not deferrable isolation level default read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit transaction and no chain; +$begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain$; +begin work not deferrable isolation level default read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no$chain; +begin work not deferrable isolation level default read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit transaction and no chain; +@begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain@; +begin work not deferrable isolation level default read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no@chain; +begin work not deferrable isolation level default read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit transaction and no chain; +!begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain!; +begin work not deferrable isolation level default read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no!chain; +begin work not deferrable isolation level default read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit transaction and no chain; +*begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain*; +begin work not deferrable isolation level default read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no*chain; +begin work not deferrable isolation level default read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit transaction and no chain; +(begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain(; +begin work not deferrable isolation level default read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no(chain; +begin work not deferrable isolation level default read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit transaction and no chain; +)begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain); +begin work not deferrable isolation level default read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no)chain; +begin work not deferrable isolation level default read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit transaction and no chain; +-begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain-; +begin work not deferrable isolation level default read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no-chain; +begin work not deferrable isolation level default read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit transaction and no chain; ++begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain+; +begin work not deferrable isolation level default read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no+chain; +begin work not deferrable isolation level default read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit transaction and no chain; +-#begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain-#; +begin work not deferrable isolation level default read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no-#chain; +begin work not deferrable isolation level default read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit transaction and no chain; +/begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain/; +begin work not deferrable isolation level default read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no/chain; +begin work not deferrable isolation level default read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit transaction and no chain; +\begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain\; +begin work not deferrable isolation level default read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no\chain; +begin work not deferrable isolation level default read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit transaction and no chain; +?begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain?; +begin work not deferrable isolation level default read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no?chain; +begin work not deferrable isolation level default read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit transaction and no chain; +-/begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain-/; +begin work not deferrable isolation level default read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no-/chain; +begin work not deferrable isolation level default read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit transaction and no chain; +/#begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain/#; +begin work not deferrable isolation level default read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no/#chain; +begin work not deferrable isolation level default read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit transaction and no chain; +/-begin work not deferrable isolation level default read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no chain/-; +begin work not deferrable isolation level default read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit transaction and no/-chain; +begin work not deferrable isolation level default read/-write; NEW_CONNECTION; -begin transaction; -commit work and no chain; +start work isolation level default read only; NEW_CONNECTION; -begin transaction; -COMMIT WORK AND NO CHAIN; +START WORK ISOLATION LEVEL DEFAULT READ ONLY; NEW_CONNECTION; -begin transaction; -commit work and no chain; +start work isolation level default read only; NEW_CONNECTION; -begin transaction; - commit work and no chain; + start work isolation level default read only; NEW_CONNECTION; -begin transaction; - commit work and no chain; + start work isolation level default read only; NEW_CONNECTION; -begin transaction; -commit work and no chain; +start work isolation level default read only; NEW_CONNECTION; -begin transaction; -commit work and no chain ; +start work isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit work and no chain ; +start work isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit work and no chain +start work isolation level default read only ; NEW_CONNECTION; -begin transaction; -commit work and no chain; +start work isolation level default read only; NEW_CONNECTION; -begin transaction; -commit work and no chain; +start work isolation level default read only; NEW_CONNECTION; -begin transaction; -commit +start work -and -no -chain; +isolation +level +default +read +only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo commit work and no chain; +foo start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain bar; +start work isolation level default read only bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%commit work and no chain; +%start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain%; +start work isolation level default read only%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no%chain; +start work isolation level default read%only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_commit work and no chain; +_start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain_; +start work isolation level default read only_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no_chain; +start work isolation level default read_only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&commit work and no chain; +&start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain&; +start work isolation level default read only&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no&chain; +start work isolation level default read&only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$commit work and no chain; +$start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain$; +start work isolation level default read only$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no$chain; +start work isolation level default read$only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@commit work and no chain; +@start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain@; +start work isolation level default read only@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no@chain; +start work isolation level default read@only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!commit work and no chain; +!start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain!; +start work isolation level default read only!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no!chain; +start work isolation level default read!only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*commit work and no chain; +*start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain*; +start work isolation level default read only*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no*chain; +start work isolation level default read*only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(commit work and no chain; +(start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain(; +start work isolation level default read only(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no(chain; +start work isolation level default read(only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)commit work and no chain; +)start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain); +start work isolation level default read only); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no)chain; +start work isolation level default read)only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --commit work and no chain; +-start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain-; +start work isolation level default read only-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no-chain; +start work isolation level default read-only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+commit work and no chain; ++start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain+; +start work isolation level default read only+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no+chain; +start work isolation level default read+only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#commit work and no chain; +-#start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain-#; +start work isolation level default read only-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no-#chain; +start work isolation level default read-#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/commit work and no chain; +/start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain/; +start work isolation level default read only/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no/chain; +start work isolation level default read/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\commit work and no chain; +\start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain\; +start work isolation level default read only\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no\chain; +start work isolation level default read\only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?commit work and no chain; +?start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain?; +start work isolation level default read only?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no?chain; +start work isolation level default read?only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/commit work and no chain; +-/start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain-/; +start work isolation level default read only-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no-/chain; +start work isolation level default read-/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#commit work and no chain; +/#start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain/#; +start work isolation level default read only/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no/#chain; +start work isolation level default read/#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-commit work and no chain; +/-start work isolation level default read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no chain/-; +start work isolation level default read only/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -commit work and no/-chain; +start work isolation level default read/-only; NEW_CONNECTION; -begin transaction; -end; +begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -END; +BEGIN NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -begin transaction; -end; +begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end; + begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end; + begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end; +begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end ; +begin not deferrable isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end ; +begin not deferrable isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end +begin not deferrable isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end; +begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end; +begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end; +begin +not +deferrable +isolation +level +serializable +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo end; +foo begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end bar; +begin not deferrable isolation level serializable read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%end; +%begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end%; +begin not deferrable isolation level serializable read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end%; +begin not deferrable isolation level serializable read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_end; +_begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end_; +begin not deferrable isolation level serializable read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end_; +begin not deferrable isolation level serializable read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&end; +&begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end&; +begin not deferrable isolation level serializable read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end&; +begin not deferrable isolation level serializable read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$end; +$begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end$; +begin not deferrable isolation level serializable read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end$; +begin not deferrable isolation level serializable read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@end; +@begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end@; +begin not deferrable isolation level serializable read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end@; +begin not deferrable isolation level serializable read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!end; +!begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end!; +begin not deferrable isolation level serializable read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end!; +begin not deferrable isolation level serializable read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*end; +*begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end*; +begin not deferrable isolation level serializable read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end*; +begin not deferrable isolation level serializable read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(end; +(begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end(; +begin not deferrable isolation level serializable read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end(; +begin not deferrable isolation level serializable read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)end; +)begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end); +begin not deferrable isolation level serializable read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end); +begin not deferrable isolation level serializable read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --end; +-begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-; +begin not deferrable isolation level serializable read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-; +begin not deferrable isolation level serializable read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+end; ++begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end+; +begin not deferrable isolation level serializable read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end+; +begin not deferrable isolation level serializable read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#end; +-#begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-#; +begin not deferrable isolation level serializable read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-#; +begin not deferrable isolation level serializable read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/end; +/begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/; +begin not deferrable isolation level serializable read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/; +begin not deferrable isolation level serializable read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\end; +\begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end\; +begin not deferrable isolation level serializable read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end\; +begin not deferrable isolation level serializable read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?end; +?begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end?; +begin not deferrable isolation level serializable read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end?; +begin not deferrable isolation level serializable read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/end; +-/begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-/; +begin not deferrable isolation level serializable read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-/; +begin not deferrable isolation level serializable read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#end; +/#begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/#; +begin not deferrable isolation level serializable read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/#; +begin not deferrable isolation level serializable read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-end; +/-begin not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/-; +begin not deferrable isolation level serializable read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/-; +begin not deferrable isolation level serializable read/-write; NEW_CONNECTION; -begin transaction; -end transaction; +start isolation level serializable read write; NEW_CONNECTION; -begin transaction; -END TRANSACTION; +START ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -begin transaction; -end transaction; +start isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end transaction; + start isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end transaction; + start isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end transaction; +start isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end transaction ; +start isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end transaction ; +start isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end transaction +start isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end transaction; +start isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end transaction; +start isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end -transaction; +start +isolation +level +serializable +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo end transaction; +foo start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction bar; +start isolation level serializable read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%end transaction; +%start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction%; +start isolation level serializable read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end%transaction; +start isolation level serializable read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_end transaction; +_start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction_; +start isolation level serializable read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end_transaction; +start isolation level serializable read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&end transaction; +&start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction&; +start isolation level serializable read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end&transaction; +start isolation level serializable read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$end transaction; +$start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction$; +start isolation level serializable read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end$transaction; +start isolation level serializable read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@end transaction; +@start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction@; +start isolation level serializable read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end@transaction; +start isolation level serializable read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!end transaction; +!start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction!; +start isolation level serializable read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end!transaction; +start isolation level serializable read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*end transaction; +*start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction*; +start isolation level serializable read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end*transaction; +start isolation level serializable read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(end transaction; +(start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction(; +start isolation level serializable read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end(transaction; +start isolation level serializable read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)end transaction; +)start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction); +start isolation level serializable read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end)transaction; +start isolation level serializable read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --end transaction; +-start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction-; +start isolation level serializable read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-transaction; +start isolation level serializable read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+end transaction; ++start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction+; +start isolation level serializable read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end+transaction; +start isolation level serializable read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#end transaction; +-#start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction-#; +start isolation level serializable read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-#transaction; +start isolation level serializable read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/end transaction; +/start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction/; +start isolation level serializable read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/transaction; +start isolation level serializable read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\end transaction; +\start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction\; +start isolation level serializable read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end\transaction; +start isolation level serializable read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?end transaction; +?start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction?; +start isolation level serializable read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end?transaction; +start isolation level serializable read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/end transaction; +-/start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction-/; +start isolation level serializable read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-/transaction; +start isolation level serializable read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#end transaction; +/#start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction/#; +start isolation level serializable read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/#transaction; +start isolation level serializable read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-end transaction; +/-start isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction/-; +start isolation level serializable read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/-transaction; +start isolation level serializable read/-write; NEW_CONNECTION; -begin transaction; -end work; +begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; -END WORK; +BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE READ ONLY; NEW_CONNECTION; -begin transaction; -end work; +begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; - end work; + begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; - end work; + begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end work; +begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end work ; +begin transaction not deferrable isolation level serializable read only ; NEW_CONNECTION; -begin transaction; -end work ; +begin transaction not deferrable isolation level serializable read only ; NEW_CONNECTION; -begin transaction; -end work +begin transaction not deferrable isolation level serializable read only ; NEW_CONNECTION; -begin transaction; -end work; +begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end work; +begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end -work; +begin +transaction +not +deferrable +isolation +level +serializable +read +only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo end work; +foo begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work bar; +begin transaction not deferrable isolation level serializable read only bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%end work; +%begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work%; +begin transaction not deferrable isolation level serializable read only%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end%work; +begin transaction not deferrable isolation level serializable read%only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_end work; +_begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work_; +begin transaction not deferrable isolation level serializable read only_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end_work; +begin transaction not deferrable isolation level serializable read_only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&end work; +&begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work&; +begin transaction not deferrable isolation level serializable read only&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end&work; +begin transaction not deferrable isolation level serializable read&only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$end work; +$begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work$; +begin transaction not deferrable isolation level serializable read only$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end$work; +begin transaction not deferrable isolation level serializable read$only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@end work; +@begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work@; +begin transaction not deferrable isolation level serializable read only@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end@work; +begin transaction not deferrable isolation level serializable read@only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!end work; +!begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work!; +begin transaction not deferrable isolation level serializable read only!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end!work; +begin transaction not deferrable isolation level serializable read!only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*end work; +*begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work*; +begin transaction not deferrable isolation level serializable read only*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end*work; +begin transaction not deferrable isolation level serializable read*only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(end work; +(begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work(; +begin transaction not deferrable isolation level serializable read only(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end(work; +begin transaction not deferrable isolation level serializable read(only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)end work; +)begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work); +begin transaction not deferrable isolation level serializable read only); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end)work; +begin transaction not deferrable isolation level serializable read)only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --end work; +-begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work-; +begin transaction not deferrable isolation level serializable read only-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-work; +begin transaction not deferrable isolation level serializable read-only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+end work; ++begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work+; +begin transaction not deferrable isolation level serializable read only+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end+work; +begin transaction not deferrable isolation level serializable read+only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#end work; +-#begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work-#; +begin transaction not deferrable isolation level serializable read only-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-#work; +begin transaction not deferrable isolation level serializable read-#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/end work; +/begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work/; +begin transaction not deferrable isolation level serializable read only/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/work; +begin transaction not deferrable isolation level serializable read/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\end work; +\begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work\; +begin transaction not deferrable isolation level serializable read only\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end\work; +begin transaction not deferrable isolation level serializable read\only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?end work; +?begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work?; +begin transaction not deferrable isolation level serializable read only?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end?work; +begin transaction not deferrable isolation level serializable read?only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/end work; +-/begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work-/; +begin transaction not deferrable isolation level serializable read only-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end-/work; +begin transaction not deferrable isolation level serializable read-/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#end work; +/#begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work/#; +begin transaction not deferrable isolation level serializable read only/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/#work; +begin transaction not deferrable isolation level serializable read/#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-end work; +/-begin transaction not deferrable isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work/-; +begin transaction not deferrable isolation level serializable read only/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end/-work; +begin transaction not deferrable isolation level serializable read/-only; NEW_CONNECTION; -begin transaction; -end and no chain; +start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; -END AND NO CHAIN; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -begin transaction; -end and no chain; +start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end and no chain; + start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end and no chain; + start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end and no chain; +start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end and no chain ; +start transaction isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end and no chain ; +start transaction isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end and no chain +start transaction isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end and no chain; +start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end and no chain; +start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end -and -no -chain; +start +transaction +isolation +level +serializable +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo end and no chain; +foo start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain bar; +start transaction isolation level serializable read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%end and no chain; +%start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain%; +start transaction isolation level serializable read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no%chain; +start transaction isolation level serializable read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_end and no chain; +_start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain_; +start transaction isolation level serializable read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no_chain; +start transaction isolation level serializable read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&end and no chain; +&start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain&; +start transaction isolation level serializable read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no&chain; +start transaction isolation level serializable read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$end and no chain; +$start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain$; +start transaction isolation level serializable read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no$chain; +start transaction isolation level serializable read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@end and no chain; +@start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain@; +start transaction isolation level serializable read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no@chain; +start transaction isolation level serializable read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!end and no chain; +!start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain!; +start transaction isolation level serializable read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no!chain; +start transaction isolation level serializable read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*end and no chain; +*start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain*; +start transaction isolation level serializable read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no*chain; +start transaction isolation level serializable read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(end and no chain; +(start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain(; +start transaction isolation level serializable read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no(chain; +start transaction isolation level serializable read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)end and no chain; +)start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain); +start transaction isolation level serializable read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no)chain; +start transaction isolation level serializable read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --end and no chain; +-start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain-; +start transaction isolation level serializable read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no-chain; +start transaction isolation level serializable read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+end and no chain; ++start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain+; +start transaction isolation level serializable read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no+chain; +start transaction isolation level serializable read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#end and no chain; +-#start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain-#; +start transaction isolation level serializable read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no-#chain; +start transaction isolation level serializable read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/end and no chain; +/start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain/; +start transaction isolation level serializable read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no/chain; +start transaction isolation level serializable read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\end and no chain; +\start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain\; +start transaction isolation level serializable read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no\chain; +start transaction isolation level serializable read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?end and no chain; +?start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain?; +start transaction isolation level serializable read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no?chain; +start transaction isolation level serializable read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/end and no chain; +-/start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain-/; +start transaction isolation level serializable read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no-/chain; +start transaction isolation level serializable read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#end and no chain; +/#start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain/#; +start transaction isolation level serializable read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no/#chain; +start transaction isolation level serializable read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-end and no chain; +/-start transaction isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no chain/-; +start transaction isolation level serializable read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end and no/-chain; +start transaction isolation level serializable read/-write; NEW_CONNECTION; -begin transaction; -end transaction and no chain; +begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -END TRANSACTION AND NO CHAIN; +BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE READ WRITE; NEW_CONNECTION; -begin transaction; -end transaction and no chain; +begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end transaction and no chain; + begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; - end transaction and no chain; + begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end transaction and no chain; +begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end transaction and no chain ; +begin work not deferrable isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end transaction and no chain ; +begin work not deferrable isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end transaction and no chain +begin work not deferrable isolation level serializable read write ; NEW_CONNECTION; -begin transaction; -end transaction and no chain; +begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end transaction and no chain; +begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; -end -transaction -and -no -chain; +begin +work +not +deferrable +isolation +level +serializable +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo end transaction and no chain; +foo begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain bar; +begin work not deferrable isolation level serializable read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%end transaction and no chain; +%begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain%; +begin work not deferrable isolation level serializable read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no%chain; +begin work not deferrable isolation level serializable read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_end transaction and no chain; +_begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain_; +begin work not deferrable isolation level serializable read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no_chain; +begin work not deferrable isolation level serializable read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&end transaction and no chain; +&begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain&; +begin work not deferrable isolation level serializable read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no&chain; +begin work not deferrable isolation level serializable read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$end transaction and no chain; +$begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain$; +begin work not deferrable isolation level serializable read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no$chain; +begin work not deferrable isolation level serializable read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@end transaction and no chain; +@begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain@; +begin work not deferrable isolation level serializable read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no@chain; +begin work not deferrable isolation level serializable read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!end transaction and no chain; +!begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain!; +begin work not deferrable isolation level serializable read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no!chain; +begin work not deferrable isolation level serializable read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*end transaction and no chain; +*begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain*; +begin work not deferrable isolation level serializable read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no*chain; +begin work not deferrable isolation level serializable read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(end transaction and no chain; +(begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain(; +begin work not deferrable isolation level serializable read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no(chain; +begin work not deferrable isolation level serializable read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)end transaction and no chain; +)begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain); +begin work not deferrable isolation level serializable read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no)chain; +begin work not deferrable isolation level serializable read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --end transaction and no chain; +-begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain-; +begin work not deferrable isolation level serializable read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no-chain; +begin work not deferrable isolation level serializable read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+end transaction and no chain; ++begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain+; +begin work not deferrable isolation level serializable read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no+chain; +begin work not deferrable isolation level serializable read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#end transaction and no chain; +-#begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain-#; +begin work not deferrable isolation level serializable read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no-#chain; +begin work not deferrable isolation level serializable read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/end transaction and no chain; +/begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain/; +begin work not deferrable isolation level serializable read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no/chain; +begin work not deferrable isolation level serializable read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\end transaction and no chain; +\begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain\; +begin work not deferrable isolation level serializable read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no\chain; +begin work not deferrable isolation level serializable read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?end transaction and no chain; +?begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain?; +begin work not deferrable isolation level serializable read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no?chain; +begin work not deferrable isolation level serializable read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/end transaction and no chain; +-/begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain-/; +begin work not deferrable isolation level serializable read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no-/chain; +begin work not deferrable isolation level serializable read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#end transaction and no chain; +/#begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain/#; +begin work not deferrable isolation level serializable read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no/#chain; +begin work not deferrable isolation level serializable read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-end transaction and no chain; +/-begin work not deferrable isolation level serializable read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no chain/-; +begin work not deferrable isolation level serializable read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end transaction and no/-chain; +begin work not deferrable isolation level serializable read/-write; NEW_CONNECTION; -begin transaction; -end work and no chain; +start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; -END WORK AND NO CHAIN; +START WORK ISOLATION LEVEL SERIALIZABLE READ ONLY; NEW_CONNECTION; -begin transaction; -end work and no chain; +start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; - end work and no chain; + start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; - end work and no chain; + start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end work and no chain; +start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end work and no chain ; +start work isolation level serializable read only ; NEW_CONNECTION; -begin transaction; -end work and no chain ; +start work isolation level serializable read only ; NEW_CONNECTION; -begin transaction; -end work and no chain +start work isolation level serializable read only ; NEW_CONNECTION; -begin transaction; -end work and no chain; +start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end work and no chain; +start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; -end +start work -and -no -chain; +isolation +level +serializable +read +only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo end work and no chain; +foo start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain bar; +start work isolation level serializable read only bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%end work and no chain; +%start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain%; +start work isolation level serializable read only%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no%chain; +start work isolation level serializable read%only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_end work and no chain; +_start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain_; +start work isolation level serializable read only_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no_chain; +start work isolation level serializable read_only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&end work and no chain; +&start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain&; +start work isolation level serializable read only&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no&chain; +start work isolation level serializable read&only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$end work and no chain; +$start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain$; +start work isolation level serializable read only$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no$chain; +start work isolation level serializable read$only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@end work and no chain; +@start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain@; +start work isolation level serializable read only@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no@chain; +start work isolation level serializable read@only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!end work and no chain; +!start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain!; +start work isolation level serializable read only!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no!chain; +start work isolation level serializable read!only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*end work and no chain; +*start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain*; +start work isolation level serializable read only*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no*chain; +start work isolation level serializable read*only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(end work and no chain; +(start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain(; +start work isolation level serializable read only(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no(chain; +start work isolation level serializable read(only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)end work and no chain; +)start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain); +start work isolation level serializable read only); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no)chain; +start work isolation level serializable read)only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --end work and no chain; +-start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain-; +start work isolation level serializable read only-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no-chain; +start work isolation level serializable read-only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+end work and no chain; ++start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain+; +start work isolation level serializable read only+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no+chain; +start work isolation level serializable read+only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#end work and no chain; +-#start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain-#; +start work isolation level serializable read only-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no-#chain; +start work isolation level serializable read-#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/end work and no chain; +/start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain/; +start work isolation level serializable read only/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no/chain; +start work isolation level serializable read/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\end work and no chain; +\start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain\; +start work isolation level serializable read only\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no\chain; +start work isolation level serializable read\only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?end work and no chain; +?start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain?; +start work isolation level serializable read only?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no?chain; +start work isolation level serializable read?only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/end work and no chain; +-/start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain-/; +start work isolation level serializable read only-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no-/chain; +start work isolation level serializable read-/only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#end work and no chain; +/#start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain/#; +start work isolation level serializable read only/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no/#chain; +start work isolation level serializable read/#only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-end work and no chain; +/-start work isolation level serializable read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no chain/-; +start work isolation level serializable read only/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -end work and no/-chain; +start work isolation level serializable read/-only; NEW_CONNECTION; -begin transaction; -rollback; +begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -ROLLBACK; +BEGIN NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE, READ WRITE; NEW_CONNECTION; -begin transaction; -rollback; +begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; - rollback; + begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; - rollback; + begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback; +begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback ; +begin not deferrable isolation level serializable, read write ; NEW_CONNECTION; -begin transaction; -rollback ; +begin not deferrable isolation level serializable, read write ; NEW_CONNECTION; -begin transaction; -rollback +begin not deferrable isolation level serializable, read write ; NEW_CONNECTION; -begin transaction; -rollback; +begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback; +begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback; +begin +not +deferrable +isolation +level +serializable, +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback; +foo begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback bar; +begin not deferrable isolation level serializable, read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback; +%begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback%; +begin not deferrable isolation level serializable, read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback%; +begin not deferrable isolation level serializable, read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback; +_begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback_; +begin not deferrable isolation level serializable, read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback_; +begin not deferrable isolation level serializable, read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback; +&begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback&; +begin not deferrable isolation level serializable, read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback&; +begin not deferrable isolation level serializable, read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback; +$begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback$; +begin not deferrable isolation level serializable, read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback$; +begin not deferrable isolation level serializable, read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback; +@begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback@; +begin not deferrable isolation level serializable, read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback@; +begin not deferrable isolation level serializable, read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback; +!begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback!; +begin not deferrable isolation level serializable, read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback!; +begin not deferrable isolation level serializable, read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback; +*begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback*; +begin not deferrable isolation level serializable, read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback*; +begin not deferrable isolation level serializable, read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback; +(begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback(; +begin not deferrable isolation level serializable, read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback(; +begin not deferrable isolation level serializable, read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback; +)begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback); +begin not deferrable isolation level serializable, read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback); +begin not deferrable isolation level serializable, read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback; +-begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-; +begin not deferrable isolation level serializable, read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-; +begin not deferrable isolation level serializable, read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback; ++begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback+; +begin not deferrable isolation level serializable, read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback+; +begin not deferrable isolation level serializable, read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback; +-#begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-#; +begin not deferrable isolation level serializable, read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-#; +begin not deferrable isolation level serializable, read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback; +/begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/; +begin not deferrable isolation level serializable, read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/; +begin not deferrable isolation level serializable, read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback; +\begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback\; +begin not deferrable isolation level serializable, read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback\; +begin not deferrable isolation level serializable, read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback; +?begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback?; +begin not deferrable isolation level serializable, read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback?; +begin not deferrable isolation level serializable, read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback; +-/begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-/; +begin not deferrable isolation level serializable, read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-/; +begin not deferrable isolation level serializable, read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback; +/#begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/#; +begin not deferrable isolation level serializable, read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/#; +begin not deferrable isolation level serializable, read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback; +/-begin not deferrable isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/-; +begin not deferrable isolation level serializable, read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/-; +begin not deferrable isolation level serializable, read/-write; NEW_CONNECTION; -begin transaction; -rollback transaction; +start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -ROLLBACK TRANSACTION; +START ISOLATION LEVEL SERIALIZABLE, READ WRITE; NEW_CONNECTION; -begin transaction; -rollback transaction; +start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; - rollback transaction; + start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; - rollback transaction; + start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback transaction; +start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback transaction ; +start isolation level serializable, read write ; NEW_CONNECTION; -begin transaction; -rollback transaction ; +start isolation level serializable, read write ; NEW_CONNECTION; -begin transaction; -rollback transaction +start isolation level serializable, read write ; NEW_CONNECTION; -begin transaction; -rollback transaction; +start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback transaction; +start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; -rollback -transaction; +start +isolation +level +serializable, +read +write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback transaction; +foo start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction bar; +start isolation level serializable, read write bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback transaction; +%start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction%; +start isolation level serializable, read write%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback%transaction; +start isolation level serializable, read%write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback transaction; +_start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction_; +start isolation level serializable, read write_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback_transaction; +start isolation level serializable, read_write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback transaction; +&start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction&; +start isolation level serializable, read write&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback&transaction; +start isolation level serializable, read&write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback transaction; +$start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction$; +start isolation level serializable, read write$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback$transaction; +start isolation level serializable, read$write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback transaction; +@start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction@; +start isolation level serializable, read write@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback@transaction; +start isolation level serializable, read@write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback transaction; +!start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction!; +start isolation level serializable, read write!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback!transaction; +start isolation level serializable, read!write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback transaction; +*start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction*; +start isolation level serializable, read write*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback*transaction; +start isolation level serializable, read*write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback transaction; +(start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction(; +start isolation level serializable, read write(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback(transaction; +start isolation level serializable, read(write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback transaction; +)start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction); +start isolation level serializable, read write); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback)transaction; +start isolation level serializable, read)write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback transaction; +-start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction-; +start isolation level serializable, read write-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-transaction; +start isolation level serializable, read-write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback transaction; ++start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction+; +start isolation level serializable, read write+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback+transaction; +start isolation level serializable, read+write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback transaction; +-#start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction-#; +start isolation level serializable, read write-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-#transaction; +start isolation level serializable, read-#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback transaction; +/start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction/; +start isolation level serializable, read write/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/transaction; +start isolation level serializable, read/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback transaction; +\start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction\; +start isolation level serializable, read write\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback\transaction; +start isolation level serializable, read\write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback transaction; +?start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction?; +start isolation level serializable, read write?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback?transaction; +start isolation level serializable, read?write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback transaction; +-/start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction-/; +start isolation level serializable, read write-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-/transaction; +start isolation level serializable, read-/write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback transaction; +/#start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction/#; +start isolation level serializable, read write/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/#transaction; +start isolation level serializable, read/#write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback transaction; +/-start isolation level serializable, read write; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction/-; +start isolation level serializable, read write/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/-transaction; +start isolation level serializable, read/-write; NEW_CONNECTION; -begin transaction; -rollback work; +begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; -ROLLBACK WORK; +BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE, READ ONLY; NEW_CONNECTION; -begin transaction; -rollback work; +begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; - rollback work; + begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; - rollback work; + begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; -rollback work; +begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; -rollback work ; +begin transaction not deferrable isolation level serializable, read only ; NEW_CONNECTION; -begin transaction; -rollback work ; +begin transaction not deferrable isolation level serializable, read only ; NEW_CONNECTION; -begin transaction; -rollback work +begin transaction not deferrable isolation level serializable, read only ; NEW_CONNECTION; -begin transaction; -rollback work; +begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; -rollback work; +begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; -rollback -work; +begin +transaction +not +deferrable +isolation +level +serializable, +read +only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback work; +foo begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work bar; +begin transaction not deferrable isolation level serializable, read only bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback work; +%begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work%; +begin transaction not deferrable isolation level serializable, read only%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback%work; +begin transaction not deferrable isolation level serializable, read%only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback work; +_begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work_; +begin transaction not deferrable isolation level serializable, read only_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback_work; +begin transaction not deferrable isolation level serializable, read_only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback work; +&begin transaction not deferrable isolation level serializable, read only; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work&; +begin transaction not deferrable isolation level serializable, read only&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read&only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read$only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read@only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read!only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read*only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read(only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read)only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read-only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read+only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read-#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read\only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read?only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read-/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read/#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-begin transaction not deferrable isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read only/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level serializable, read/-only; +NEW_CONNECTION; +start transaction isolation level serializable, read write; +NEW_CONNECTION; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE; +NEW_CONNECTION; +start transaction isolation level serializable, read write; +NEW_CONNECTION; + start transaction isolation level serializable, read write; +NEW_CONNECTION; + start transaction isolation level serializable, read write; +NEW_CONNECTION; + + + +start transaction isolation level serializable, read write; +NEW_CONNECTION; +start transaction isolation level serializable, read write ; +NEW_CONNECTION; +start transaction isolation level serializable, read write ; +NEW_CONNECTION; +start transaction isolation level serializable, read write + +; +NEW_CONNECTION; +start transaction isolation level serializable, read write; +NEW_CONNECTION; +start transaction isolation level serializable, read write; +NEW_CONNECTION; +start +transaction +isolation +level +serializable, +read +write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read%write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read_write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read&write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read$write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read@write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read!write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read*write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read(write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read)write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read-write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read+write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read-#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read\write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read?write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read-/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read/#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start transaction isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read write/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level serializable, read/-write; +NEW_CONNECTION; +begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL SERIALIZABLE, READ WRITE; +NEW_CONNECTION; +begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; + begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; + begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; + + + +begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +begin work not deferrable isolation level serializable, read write ; +NEW_CONNECTION; +begin work not deferrable isolation level serializable, read write ; +NEW_CONNECTION; +begin work not deferrable isolation level serializable, read write + +; +NEW_CONNECTION; +begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +begin +work +not +deferrable +isolation +level +serializable, +read +write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read%write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read_write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read&write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read$write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read@write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read!write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read*write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read(write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read)write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read-write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read+write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read-#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read\write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read?write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read-/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read/#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-begin work not deferrable isolation level serializable, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read write/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level serializable, read/-write; +NEW_CONNECTION; +start work isolation level serializable, read only; +NEW_CONNECTION; +START WORK ISOLATION LEVEL SERIALIZABLE, READ ONLY; +NEW_CONNECTION; +start work isolation level serializable, read only; +NEW_CONNECTION; + start work isolation level serializable, read only; +NEW_CONNECTION; + start work isolation level serializable, read only; +NEW_CONNECTION; + + + +start work isolation level serializable, read only; +NEW_CONNECTION; +start work isolation level serializable, read only ; +NEW_CONNECTION; +start work isolation level serializable, read only ; +NEW_CONNECTION; +start work isolation level serializable, read only + +; +NEW_CONNECTION; +start work isolation level serializable, read only; +NEW_CONNECTION; +start work isolation level serializable, read only; +NEW_CONNECTION; +start +work +isolation +level +serializable, +read +only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read%only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read_only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read&only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read$only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read@only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read!only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read*only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read(only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read)only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read-only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read+only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read-#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read\only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read?only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read-/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read/#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start work isolation level serializable, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read only/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level serializable, read/-only; +NEW_CONNECTION; +begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +BEGIN NOT DEFERRABLE ISOLATION LEVEL REPEATABLE READ, READ WRITE; +NEW_CONNECTION; +begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; + begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; + begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; + + + +begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +begin not deferrable isolation level repeatable read, read write ; +NEW_CONNECTION; +begin not deferrable isolation level repeatable read, read write ; +NEW_CONNECTION; +begin not deferrable isolation level repeatable read, read write + +; +NEW_CONNECTION; +begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +begin +not +deferrable +isolation +level +repeatable +read, +read +write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read%write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read_write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read&write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read$write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read@write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read!write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read*write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read(write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read)write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read-write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read+write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read-#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read\write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read?write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read-/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read/#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-begin not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read write/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin not deferrable isolation level repeatable read, read/-write; +NEW_CONNECTION; +start isolation level repeatable read, read write; +NEW_CONNECTION; +START ISOLATION LEVEL REPEATABLE READ, READ WRITE; +NEW_CONNECTION; +start isolation level repeatable read, read write; +NEW_CONNECTION; + start isolation level repeatable read, read write; +NEW_CONNECTION; + start isolation level repeatable read, read write; +NEW_CONNECTION; + + + +start isolation level repeatable read, read write; +NEW_CONNECTION; +start isolation level repeatable read, read write ; +NEW_CONNECTION; +start isolation level repeatable read, read write ; +NEW_CONNECTION; +start isolation level repeatable read, read write + +; +NEW_CONNECTION; +start isolation level repeatable read, read write; +NEW_CONNECTION; +start isolation level repeatable read, read write; +NEW_CONNECTION; +start +isolation +level +repeatable +read, +read +write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read%write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read_write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read&write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read$write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read@write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read!write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read*write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read(write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read)write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read-write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read+write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read-#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read\write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read?write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read-/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read/#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read write/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start isolation level repeatable read, read/-write; +NEW_CONNECTION; +begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +BEGIN TRANSACTION NOT DEFERRABLE ISOLATION LEVEL REPEATABLE READ, READ ONLY; +NEW_CONNECTION; +begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; + begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; + begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; + + + +begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +begin transaction not deferrable isolation level repeatable read, read only ; +NEW_CONNECTION; +begin transaction not deferrable isolation level repeatable read, read only ; +NEW_CONNECTION; +begin transaction not deferrable isolation level repeatable read, read only + +; +NEW_CONNECTION; +begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +begin +transaction +not +deferrable +isolation +level +repeatable +read, +read +only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read%only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read_only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read&only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read$only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read@only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read!only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read*only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read(only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read)only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read-only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read+only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read-#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read\only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read?only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read-/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read/#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-begin transaction not deferrable isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read only/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin transaction not deferrable isolation level repeatable read, read/-only; +NEW_CONNECTION; +start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE; +NEW_CONNECTION; +start transaction isolation level repeatable read, read write; +NEW_CONNECTION; + start transaction isolation level repeatable read, read write; +NEW_CONNECTION; + start transaction isolation level repeatable read, read write; +NEW_CONNECTION; + + + +start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +start transaction isolation level repeatable read, read write ; +NEW_CONNECTION; +start transaction isolation level repeatable read, read write ; +NEW_CONNECTION; +start transaction isolation level repeatable read, read write + +; +NEW_CONNECTION; +start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +start +transaction +isolation +level +repeatable +read, +read +write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read%write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read_write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read&write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read$write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read@write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read!write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read*write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read(write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read)write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read-write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read+write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read-#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read\write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read?write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read-/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read/#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start transaction isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read write/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start transaction isolation level repeatable read, read/-write; +NEW_CONNECTION; +begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +BEGIN WORK NOT DEFERRABLE ISOLATION LEVEL REPEATABLE READ, READ WRITE; +NEW_CONNECTION; +begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; + begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; + begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; + + + +begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +begin work not deferrable isolation level repeatable read, read write ; +NEW_CONNECTION; +begin work not deferrable isolation level repeatable read, read write ; +NEW_CONNECTION; +begin work not deferrable isolation level repeatable read, read write + +; +NEW_CONNECTION; +begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +begin +work +not +deferrable +isolation +level +repeatable +read, +read +write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read%write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read_write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read&write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read$write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read@write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read!write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read*write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read(write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read)write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read-write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read+write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read-#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read\write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read?write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read-/write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read/#write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-begin work not deferrable isolation level repeatable read, read write; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read write/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +begin work not deferrable isolation level repeatable read, read/-write; +NEW_CONNECTION; +start work isolation level repeatable read, read only; +NEW_CONNECTION; +START WORK ISOLATION LEVEL REPEATABLE READ, READ ONLY; +NEW_CONNECTION; +start work isolation level repeatable read, read only; +NEW_CONNECTION; + start work isolation level repeatable read, read only; +NEW_CONNECTION; + start work isolation level repeatable read, read only; +NEW_CONNECTION; + + + +start work isolation level repeatable read, read only; +NEW_CONNECTION; +start work isolation level repeatable read, read only ; +NEW_CONNECTION; +start work isolation level repeatable read, read only ; +NEW_CONNECTION; +start work isolation level repeatable read, read only + +; +NEW_CONNECTION; +start work isolation level repeatable read, read only; +NEW_CONNECTION; +start work isolation level repeatable read, read only; +NEW_CONNECTION; +start +work +isolation +level +repeatable +read, +read +only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read%only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read_only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read&only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read$only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read@only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read!only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read*only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read(only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read)only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read-only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read+only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read-#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read\only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read?only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read-/only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read/#only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start work isolation level repeatable read, read only; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read only/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start work isolation level repeatable read, read/-only; +NEW_CONNECTION; +begin transaction; +commit; +NEW_CONNECTION; +begin transaction; +COMMIT; +NEW_CONNECTION; +begin transaction; +commit; +NEW_CONNECTION; +begin transaction; + commit; +NEW_CONNECTION; +begin transaction; + commit; +NEW_CONNECTION; +begin transaction; + + + +commit; +NEW_CONNECTION; +begin transaction; +commit ; +NEW_CONNECTION; +begin transaction; +commit ; +NEW_CONNECTION; +begin transaction; +commit + +; +NEW_CONNECTION; +begin transaction; +commit; +NEW_CONNECTION; +begin transaction; +commit; +NEW_CONNECTION; +begin transaction; +commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/-; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; +COMMIT TRANSACTION; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; + commit transaction; +NEW_CONNECTION; +begin transaction; + commit transaction; +NEW_CONNECTION; +begin transaction; + + + +commit transaction; +NEW_CONNECTION; +begin transaction; +commit transaction ; +NEW_CONNECTION; +begin transaction; +commit transaction ; +NEW_CONNECTION; +begin transaction; +commit transaction + +; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; +commit transaction; +NEW_CONNECTION; +begin transaction; +commit +transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit%transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit_transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit&transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit$transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit@transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit!transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit*transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit(transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit)transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit+transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit\transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit?transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/-transaction; +NEW_CONNECTION; +begin transaction; +commit work; +NEW_CONNECTION; +begin transaction; +COMMIT WORK; +NEW_CONNECTION; +begin transaction; +commit work; +NEW_CONNECTION; +begin transaction; + commit work; +NEW_CONNECTION; +begin transaction; + commit work; +NEW_CONNECTION; +begin transaction; + + + +commit work; +NEW_CONNECTION; +begin transaction; +commit work ; +NEW_CONNECTION; +begin transaction; +commit work ; +NEW_CONNECTION; +begin transaction; +commit work + +; +NEW_CONNECTION; +begin transaction; +commit work; +NEW_CONNECTION; +begin transaction; +commit work; +NEW_CONNECTION; +begin transaction; +commit +work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit%work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit_work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit&work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit$work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit@work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit!work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit*work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit(work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit)work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit+work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit\work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit?work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit-/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit/-work; +NEW_CONNECTION; +begin transaction; +commit and no chain; +NEW_CONNECTION; +begin transaction; +COMMIT AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +commit and no chain; +NEW_CONNECTION; +begin transaction; + commit and no chain; +NEW_CONNECTION; +begin transaction; + commit and no chain; +NEW_CONNECTION; +begin transaction; + + + +commit and no chain; +NEW_CONNECTION; +begin transaction; +commit and no chain ; +NEW_CONNECTION; +begin transaction; +commit and no chain ; +NEW_CONNECTION; +begin transaction; +commit and no chain + +; +NEW_CONNECTION; +begin transaction; +commit and no chain; +NEW_CONNECTION; +begin transaction; +commit and no chain; +NEW_CONNECTION; +begin transaction; +commit +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit and no/-chain; +NEW_CONNECTION; +begin transaction; +commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +COMMIT TRANSACTION AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +commit transaction and no chain; +NEW_CONNECTION; +begin transaction; + commit transaction and no chain; +NEW_CONNECTION; +begin transaction; + commit transaction and no chain; +NEW_CONNECTION; +begin transaction; + + + +commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +commit transaction and no chain ; +NEW_CONNECTION; +begin transaction; +commit transaction and no chain ; +NEW_CONNECTION; +begin transaction; +commit transaction and no chain + +; +NEW_CONNECTION; +begin transaction; +commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +commit +transaction +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit transaction and no/-chain; +NEW_CONNECTION; +begin transaction; +commit work and no chain; +NEW_CONNECTION; +begin transaction; +COMMIT WORK AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +commit work and no chain; +NEW_CONNECTION; +begin transaction; + commit work and no chain; +NEW_CONNECTION; +begin transaction; + commit work and no chain; +NEW_CONNECTION; +begin transaction; + + + +commit work and no chain; +NEW_CONNECTION; +begin transaction; +commit work and no chain ; +NEW_CONNECTION; +begin transaction; +commit work and no chain ; +NEW_CONNECTION; +begin transaction; +commit work and no chain + +; +NEW_CONNECTION; +begin transaction; +commit work and no chain; +NEW_CONNECTION; +begin transaction; +commit work and no chain; +NEW_CONNECTION; +begin transaction; +commit +work +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-commit work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +commit work and no/-chain; +NEW_CONNECTION; +begin transaction; +end; +NEW_CONNECTION; +begin transaction; +END; +NEW_CONNECTION; +begin transaction; +end; +NEW_CONNECTION; +begin transaction; + end; +NEW_CONNECTION; +begin transaction; + end; +NEW_CONNECTION; +begin transaction; + + + +end; +NEW_CONNECTION; +begin transaction; +end ; +NEW_CONNECTION; +begin transaction; +end ; +NEW_CONNECTION; +begin transaction; +end + +; +NEW_CONNECTION; +begin transaction; +end; +NEW_CONNECTION; +begin transaction; +end; +NEW_CONNECTION; +begin transaction; +end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-end; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/-; +NEW_CONNECTION; +begin transaction; +end transaction; +NEW_CONNECTION; +begin transaction; +END TRANSACTION; +NEW_CONNECTION; +begin transaction; +end transaction; +NEW_CONNECTION; +begin transaction; + end transaction; +NEW_CONNECTION; +begin transaction; + end transaction; +NEW_CONNECTION; +begin transaction; + + + +end transaction; +NEW_CONNECTION; +begin transaction; +end transaction ; +NEW_CONNECTION; +begin transaction; +end transaction ; +NEW_CONNECTION; +begin transaction; +end transaction + +; +NEW_CONNECTION; +begin transaction; +end transaction; +NEW_CONNECTION; +begin transaction; +end transaction; +NEW_CONNECTION; +begin transaction; +end +transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end%transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end_transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end&transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end$transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end@transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end!transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end*transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end(transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end)transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end+transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end\transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end?transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-end transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/-transaction; +NEW_CONNECTION; +begin transaction; +end work; +NEW_CONNECTION; +begin transaction; +END WORK; +NEW_CONNECTION; +begin transaction; +end work; +NEW_CONNECTION; +begin transaction; + end work; +NEW_CONNECTION; +begin transaction; + end work; +NEW_CONNECTION; +begin transaction; + + + +end work; +NEW_CONNECTION; +begin transaction; +end work ; +NEW_CONNECTION; +begin transaction; +end work ; +NEW_CONNECTION; +begin transaction; +end work + +; +NEW_CONNECTION; +begin transaction; +end work; +NEW_CONNECTION; +begin transaction; +end work; +NEW_CONNECTION; +begin transaction; +end +work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end%work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end_work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end&work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end$work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end@work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end!work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end*work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end(work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end)work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end+work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end\work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end?work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end-/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-end work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end/-work; +NEW_CONNECTION; +begin transaction; +end and no chain; +NEW_CONNECTION; +begin transaction; +END AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +end and no chain; +NEW_CONNECTION; +begin transaction; + end and no chain; +NEW_CONNECTION; +begin transaction; + end and no chain; +NEW_CONNECTION; +begin transaction; + + + +end and no chain; +NEW_CONNECTION; +begin transaction; +end and no chain ; +NEW_CONNECTION; +begin transaction; +end and no chain ; +NEW_CONNECTION; +begin transaction; +end and no chain + +; +NEW_CONNECTION; +begin transaction; +end and no chain; +NEW_CONNECTION; +begin transaction; +end and no chain; +NEW_CONNECTION; +begin transaction; +end +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-end and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end and no/-chain; +NEW_CONNECTION; +begin transaction; +end transaction and no chain; +NEW_CONNECTION; +begin transaction; +END TRANSACTION AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +end transaction and no chain; +NEW_CONNECTION; +begin transaction; + end transaction and no chain; +NEW_CONNECTION; +begin transaction; + end transaction and no chain; +NEW_CONNECTION; +begin transaction; + + + +end transaction and no chain; +NEW_CONNECTION; +begin transaction; +end transaction and no chain ; +NEW_CONNECTION; +begin transaction; +end transaction and no chain ; +NEW_CONNECTION; +begin transaction; +end transaction and no chain + +; +NEW_CONNECTION; +begin transaction; +end transaction and no chain; +NEW_CONNECTION; +begin transaction; +end transaction and no chain; +NEW_CONNECTION; +begin transaction; +end +transaction +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-end transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end transaction and no/-chain; +NEW_CONNECTION; +begin transaction; +end work and no chain; +NEW_CONNECTION; +begin transaction; +END WORK AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +end work and no chain; +NEW_CONNECTION; +begin transaction; + end work and no chain; +NEW_CONNECTION; +begin transaction; + end work and no chain; +NEW_CONNECTION; +begin transaction; + + + +end work and no chain; +NEW_CONNECTION; +begin transaction; +end work and no chain ; +NEW_CONNECTION; +begin transaction; +end work and no chain ; +NEW_CONNECTION; +begin transaction; +end work and no chain + +; +NEW_CONNECTION; +begin transaction; +end work and no chain; +NEW_CONNECTION; +begin transaction; +end work and no chain; +NEW_CONNECTION; +begin transaction; +end +work +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-end work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +end work and no/-chain; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +ROLLBACK; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; + rollback; +NEW_CONNECTION; +begin transaction; + rollback; +NEW_CONNECTION; +begin transaction; + + + +rollback; +NEW_CONNECTION; +begin transaction; +rollback ; +NEW_CONNECTION; +begin transaction; +rollback ; +NEW_CONNECTION; +begin transaction; +rollback + +; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/-; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; +ROLLBACK TRANSACTION; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; + rollback transaction; +NEW_CONNECTION; +begin transaction; + rollback transaction; +NEW_CONNECTION; +begin transaction; + + + +rollback transaction; +NEW_CONNECTION; +begin transaction; +rollback transaction ; +NEW_CONNECTION; +begin transaction; +rollback transaction ; +NEW_CONNECTION; +begin transaction; +rollback transaction + +; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; +rollback transaction; +NEW_CONNECTION; +begin transaction; +rollback +transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback%transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback_transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback&transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback$transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback@transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback!transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback*transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback(transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback)transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback+transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback\transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback?transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/-transaction; +NEW_CONNECTION; +begin transaction; +rollback work; +NEW_CONNECTION; +begin transaction; +ROLLBACK WORK; +NEW_CONNECTION; +begin transaction; +rollback work; +NEW_CONNECTION; +begin transaction; + rollback work; +NEW_CONNECTION; +begin transaction; + rollback work; +NEW_CONNECTION; +begin transaction; + + + +rollback work; +NEW_CONNECTION; +begin transaction; +rollback work ; +NEW_CONNECTION; +begin transaction; +rollback work ; +NEW_CONNECTION; +begin transaction; +rollback work + +; +NEW_CONNECTION; +begin transaction; +rollback work; +NEW_CONNECTION; +begin transaction; +rollback work; +NEW_CONNECTION; +begin transaction; +rollback +work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback%work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback_work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback&work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback$work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback@work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback!work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback*work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback(work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback)work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback+work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback\work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback?work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback-/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback/-work; +NEW_CONNECTION; +begin transaction; +rollback and no chain; +NEW_CONNECTION; +begin transaction; +ROLLBACK AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +rollback and no chain; +NEW_CONNECTION; +begin transaction; + rollback and no chain; +NEW_CONNECTION; +begin transaction; + rollback and no chain; +NEW_CONNECTION; +begin transaction; + + + +rollback and no chain; +NEW_CONNECTION; +begin transaction; +rollback and no chain ; +NEW_CONNECTION; +begin transaction; +rollback and no chain ; +NEW_CONNECTION; +begin transaction; +rollback and no chain + +; +NEW_CONNECTION; +begin transaction; +rollback and no chain; +NEW_CONNECTION; +begin transaction; +rollback and no chain; +NEW_CONNECTION; +begin transaction; +rollback +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback and no/-chain; +NEW_CONNECTION; +begin transaction; +rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +ROLLBACK TRANSACTION AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; + rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; + rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; + + + +rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +rollback transaction and no chain ; +NEW_CONNECTION; +begin transaction; +rollback transaction and no chain ; +NEW_CONNECTION; +begin transaction; +rollback transaction and no chain + +; +NEW_CONNECTION; +begin transaction; +rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +rollback +transaction +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback transaction and no/-chain; +NEW_CONNECTION; +begin transaction; +rollback work and no chain; +NEW_CONNECTION; +begin transaction; +ROLLBACK WORK AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +rollback work and no chain; +NEW_CONNECTION; +begin transaction; + rollback work and no chain; +NEW_CONNECTION; +begin transaction; + rollback work and no chain; +NEW_CONNECTION; +begin transaction; + + + +rollback work and no chain; +NEW_CONNECTION; +begin transaction; +rollback work and no chain ; +NEW_CONNECTION; +begin transaction; +rollback work and no chain ; +NEW_CONNECTION; +begin transaction; +rollback work and no chain + +; +NEW_CONNECTION; +begin transaction; +rollback work and no chain; +NEW_CONNECTION; +begin transaction; +rollback work and no chain; +NEW_CONNECTION; +begin transaction; +rollback +work +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-rollback work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +rollback work and no/-chain; +NEW_CONNECTION; +begin transaction; +abort; +NEW_CONNECTION; +begin transaction; +ABORT; +NEW_CONNECTION; +begin transaction; +abort; +NEW_CONNECTION; +begin transaction; + abort; +NEW_CONNECTION; +begin transaction; + abort; +NEW_CONNECTION; +begin transaction; + + + +abort; +NEW_CONNECTION; +begin transaction; +abort ; +NEW_CONNECTION; +begin transaction; +abort ; +NEW_CONNECTION; +begin transaction; +abort + +; +NEW_CONNECTION; +begin transaction; +abort; +NEW_CONNECTION; +begin transaction; +abort; +NEW_CONNECTION; +begin transaction; +abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/-; +NEW_CONNECTION; +begin transaction; +abort transaction; +NEW_CONNECTION; +begin transaction; +ABORT TRANSACTION; +NEW_CONNECTION; +begin transaction; +abort transaction; +NEW_CONNECTION; +begin transaction; + abort transaction; +NEW_CONNECTION; +begin transaction; + abort transaction; +NEW_CONNECTION; +begin transaction; + + + +abort transaction; +NEW_CONNECTION; +begin transaction; +abort transaction ; +NEW_CONNECTION; +begin transaction; +abort transaction ; +NEW_CONNECTION; +begin transaction; +abort transaction + +; +NEW_CONNECTION; +begin transaction; +abort transaction; +NEW_CONNECTION; +begin transaction; +abort transaction; +NEW_CONNECTION; +begin transaction; +abort +transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort%transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort_transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort&transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort$transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort@transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort!transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort*transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort(transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort)transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort+transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort\transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort?transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-/transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/#transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort transaction; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/-transaction; +NEW_CONNECTION; +begin transaction; +abort work; +NEW_CONNECTION; +begin transaction; +ABORT WORK; +NEW_CONNECTION; +begin transaction; +abort work; +NEW_CONNECTION; +begin transaction; + abort work; +NEW_CONNECTION; +begin transaction; + abort work; +NEW_CONNECTION; +begin transaction; + + + +abort work; +NEW_CONNECTION; +begin transaction; +abort work ; +NEW_CONNECTION; +begin transaction; +abort work ; +NEW_CONNECTION; +begin transaction; +abort work + +; +NEW_CONNECTION; +begin transaction; +abort work; +NEW_CONNECTION; +begin transaction; +abort work; +NEW_CONNECTION; +begin transaction; +abort +work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort%work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort_work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort&work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort$work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort@work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort!work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort*work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort(work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort)work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort+work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort\work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort?work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-/work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/#work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort work; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/-work; +NEW_CONNECTION; +begin transaction; +abort and no chain; +NEW_CONNECTION; +begin transaction; +ABORT AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +abort and no chain; +NEW_CONNECTION; +begin transaction; + abort and no chain; +NEW_CONNECTION; +begin transaction; + abort and no chain; +NEW_CONNECTION; +begin transaction; + + + +abort and no chain; +NEW_CONNECTION; +begin transaction; +abort and no chain ; +NEW_CONNECTION; +begin transaction; +abort and no chain ; +NEW_CONNECTION; +begin transaction; +abort and no chain + +; +NEW_CONNECTION; +begin transaction; +abort and no chain; +NEW_CONNECTION; +begin transaction; +abort and no chain; +NEW_CONNECTION; +begin transaction; +abort +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort and no/-chain; +NEW_CONNECTION; +begin transaction; +abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +ABORT TRANSACTION AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +abort transaction and no chain; +NEW_CONNECTION; +begin transaction; + abort transaction and no chain; +NEW_CONNECTION; +begin transaction; + abort transaction and no chain; +NEW_CONNECTION; +begin transaction; + + + +abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +abort transaction and no chain ; +NEW_CONNECTION; +begin transaction; +abort transaction and no chain ; +NEW_CONNECTION; +begin transaction; +abort transaction and no chain + +; +NEW_CONNECTION; +begin transaction; +abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +abort +transaction +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no-chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT ++abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort transaction and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort transaction and no/-chain; +NEW_CONNECTION; +begin transaction; +abort work and no chain; +NEW_CONNECTION; +begin transaction; +ABORT WORK AND NO CHAIN; +NEW_CONNECTION; +begin transaction; +abort work and no chain; +NEW_CONNECTION; +begin transaction; + abort work and no chain; +NEW_CONNECTION; +begin transaction; + abort work and no chain; +NEW_CONNECTION; +begin transaction; + + + +abort work and no chain; +NEW_CONNECTION; +begin transaction; +abort work and no chain ; +NEW_CONNECTION; +begin transaction; +abort work and no chain ; +NEW_CONNECTION; +begin transaction; +abort work and no chain + +; +NEW_CONNECTION; +begin transaction; +abort work and no chain; +NEW_CONNECTION; +begin transaction; +abort work and no chain; +NEW_CONNECTION; +begin transaction; +abort +work +and +no +chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain bar; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain%; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no%chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain_; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no_chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain&; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no&chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain$; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no$chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain@; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no@chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain!; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no!chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain*; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no*chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain(; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no(chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain); +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no)chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no-chain; NEW_CONNECTION; begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback&work; ++abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain+; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no+chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain-#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no-#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain\; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no\chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain?; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no?chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain-/; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no-/chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain/#; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no/#chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort work and no chain; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no chain/-; +NEW_CONNECTION; +begin transaction; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort work and no/-chain; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; +START BATCH DDL; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; + start batch ddl; +NEW_CONNECTION; + start batch ddl; +NEW_CONNECTION; + + + +start batch ddl; +NEW_CONNECTION; +start batch ddl ; +NEW_CONNECTION; +start batch ddl ; +NEW_CONNECTION; +start batch ddl + +; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; +start batch ddl; +NEW_CONNECTION; +start +batch +ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch%ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch_ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch&ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch$ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch@ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch!ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch*ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch(ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch)ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch+ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-#ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch\ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch?ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-/ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/#ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start batch ddl; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch ddl/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/-ddl; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; +START BATCH DML; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; + start batch dml; +NEW_CONNECTION; + start batch dml; +NEW_CONNECTION; + + + +start batch dml; +NEW_CONNECTION; +start batch dml ; +NEW_CONNECTION; +start batch dml ; +NEW_CONNECTION; +start batch dml + +; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; +start batch dml; +NEW_CONNECTION; +start +batch +dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch%dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch_dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch&dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch$dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch@dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch!dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch*dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch(dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch)dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch+dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-#dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch\dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch?dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch-/dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/#dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-start batch dml; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch dml/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +start batch/-dml; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; +RUN BATCH; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; + run batch; +NEW_CONNECTION; +start batch ddl; + run batch; +NEW_CONNECTION; +start batch ddl; + + + +run batch; +NEW_CONNECTION; +start batch ddl; +run batch ; +NEW_CONNECTION; +start batch ddl; +run batch ; +NEW_CONNECTION; +start batch ddl; +run batch + +; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; +run batch; +NEW_CONNECTION; +start batch ddl; +run +batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch bar; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +%run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch%; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run%batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +_run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch_; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run_batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +&run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch&; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run&batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +$run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch$; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run$batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +@run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch@; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run@batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +!run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch!; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run!batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +*run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch*; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run*batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +(run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch(; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run(batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +)run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch); +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run)batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run-batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT ++run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch+; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run+batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch-#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run-#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +\run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch\; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run\batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +?run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch?; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run?batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch-/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run-/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch/#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run/#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-run batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run batch/-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +run/-batch; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; +ABORT BATCH; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; + abort batch; +NEW_CONNECTION; +start batch ddl; + abort batch; +NEW_CONNECTION; +start batch ddl; + + + +abort batch; +NEW_CONNECTION; +start batch ddl; +abort batch ; +NEW_CONNECTION; +start batch ddl; +abort batch ; +NEW_CONNECTION; +start batch ddl; +abort batch + +; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; +abort batch; +NEW_CONNECTION; +start batch ddl; +abort +batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch bar; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +%abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch%; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort%batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +_abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch_; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort_batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +&abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch&; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort&batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +$abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch$; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort$batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +@abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch@; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort@batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +!abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch!; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort!batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +*abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch*; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort*batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +(abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch(; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort(batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +)abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch); +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort)batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT ++abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch+; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort+batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch-#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +\abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch\; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort\batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +?abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch?; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort?batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch-/; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort-/batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch/#; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/#batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-abort batch; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort batch/-; +NEW_CONNECTION; +start batch ddl; +@EXPECT EXCEPTION INVALID_ARGUMENT +abort/-batch; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; +RESET ALL; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; + reset all; +NEW_CONNECTION; + reset all; +NEW_CONNECTION; + + + +reset all; +NEW_CONNECTION; +reset all ; +NEW_CONNECTION; +reset all ; +NEW_CONNECTION; +reset all + +; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; +reset all; +NEW_CONNECTION; +reset +all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset%all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset_all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset&all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset$all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset@all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset!all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset*all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset(all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset)all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset-all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset+all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset-#all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset/all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset\all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset?all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset-/all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset/#all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-reset all; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset all/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +reset/-all; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; +SET AUTOCOMMIT = TRUE; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; + set autocommit = true; +NEW_CONNECTION; + set autocommit = true; +NEW_CONNECTION; + + + +set autocommit = true; +NEW_CONNECTION; +set autocommit = true ; +NEW_CONNECTION; +set autocommit = true ; +NEW_CONNECTION; +set autocommit = true + +; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; +set autocommit = true; +NEW_CONNECTION; +set +autocommit += +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/-true; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; +SET AUTOCOMMIT = FALSE; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; + set autocommit = false; +NEW_CONNECTION; + set autocommit = false; +NEW_CONNECTION; + + + +set autocommit = false; +NEW_CONNECTION; +set autocommit = false ; +NEW_CONNECTION; +set autocommit = false ; +NEW_CONNECTION; +set autocommit = false + +; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; +set autocommit = false; +NEW_CONNECTION; +set +autocommit += +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit = false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit =/-false; +NEW_CONNECTION; +set autocommit to true; +NEW_CONNECTION; +SET AUTOCOMMIT TO TRUE; +NEW_CONNECTION; +set autocommit to true; +NEW_CONNECTION; + set autocommit to true; +NEW_CONNECTION; + set autocommit to true; +NEW_CONNECTION; + + + +set autocommit to true; +NEW_CONNECTION; +set autocommit to true ; +NEW_CONNECTION; +set autocommit to true ; +NEW_CONNECTION; +set autocommit to true + +; +NEW_CONNECTION; +set autocommit to true; +NEW_CONNECTION; +set autocommit to true; +NEW_CONNECTION; +set +autocommit +to +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to/-true; +NEW_CONNECTION; +set autocommit to false; +NEW_CONNECTION; +SET AUTOCOMMIT TO FALSE; +NEW_CONNECTION; +set autocommit to false; +NEW_CONNECTION; + set autocommit to false; +NEW_CONNECTION; + set autocommit to false; +NEW_CONNECTION; + + + +set autocommit to false; +NEW_CONNECTION; +set autocommit to false ; +NEW_CONNECTION; +set autocommit to false ; +NEW_CONNECTION; +set autocommit to false + +; +NEW_CONNECTION; +set autocommit to false; +NEW_CONNECTION; +set autocommit to false; +NEW_CONNECTION; +set +autocommit +to +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set autocommit to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set autocommit to/-false; +NEW_CONNECTION; +set spanner.readonly = true; +NEW_CONNECTION; +SET SPANNER.READONLY = TRUE; +NEW_CONNECTION; +set spanner.readonly = true; +NEW_CONNECTION; + set spanner.readonly = true; +NEW_CONNECTION; + set spanner.readonly = true; +NEW_CONNECTION; + + + +set spanner.readonly = true; +NEW_CONNECTION; +set spanner.readonly = true ; +NEW_CONNECTION; +set spanner.readonly = true ; +NEW_CONNECTION; +set spanner.readonly = true + +; +NEW_CONNECTION; +set spanner.readonly = true; +NEW_CONNECTION; +set spanner.readonly = true; +NEW_CONNECTION; +set +spanner.readonly += +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.readonly = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =/-true; +NEW_CONNECTION; +set spanner.readonly = false; +NEW_CONNECTION; +SET SPANNER.READONLY = FALSE; +NEW_CONNECTION; +set spanner.readonly = false; +NEW_CONNECTION; + set spanner.readonly = false; +NEW_CONNECTION; + set spanner.readonly = false; +NEW_CONNECTION; + + + +set spanner.readonly = false; +NEW_CONNECTION; +set spanner.readonly = false ; +NEW_CONNECTION; +set spanner.readonly = false ; +NEW_CONNECTION; +set spanner.readonly = false + +; +NEW_CONNECTION; +set spanner.readonly = false; +NEW_CONNECTION; +set spanner.readonly = false; +NEW_CONNECTION; +set +spanner.readonly += +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.readonly = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly = false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly =/-false; +NEW_CONNECTION; +set spanner.readonly to true; +NEW_CONNECTION; +SET SPANNER.READONLY TO TRUE; +NEW_CONNECTION; +set spanner.readonly to true; +NEW_CONNECTION; + set spanner.readonly to true; +NEW_CONNECTION; + set spanner.readonly to true; +NEW_CONNECTION; + + + +set spanner.readonly to true; +NEW_CONNECTION; +set spanner.readonly to true ; +NEW_CONNECTION; +set spanner.readonly to true ; +NEW_CONNECTION; +set spanner.readonly to true + +; +NEW_CONNECTION; +set spanner.readonly to true; +NEW_CONNECTION; +set spanner.readonly to true; +NEW_CONNECTION; +set +spanner.readonly +to +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.readonly to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to/-true; +NEW_CONNECTION; +set spanner.readonly to false; +NEW_CONNECTION; +SET SPANNER.READONLY TO FALSE; +NEW_CONNECTION; +set spanner.readonly to false; +NEW_CONNECTION; + set spanner.readonly to false; +NEW_CONNECTION; + set spanner.readonly to false; +NEW_CONNECTION; + + + +set spanner.readonly to false; +NEW_CONNECTION; +set spanner.readonly to false ; +NEW_CONNECTION; +set spanner.readonly to false ; +NEW_CONNECTION; +set spanner.readonly to false + +; +NEW_CONNECTION; +set spanner.readonly to false; +NEW_CONNECTION; +set spanner.readonly to false; +NEW_CONNECTION; +set +spanner.readonly +to +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.readonly to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.readonly to/-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SPANNER.RETRY_ABORTS_INTERNALLY = TRUE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = true + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +spanner.retry_aborts_internally += +true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =%true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =_true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =&true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =$true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =@true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =!true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =*true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =(true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =)true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =+true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =-#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =\true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =?true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =-/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =/#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = true/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =/-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SPANNER.RETRY_ABORTS_INTERNALLY = FALSE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = false + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +spanner.retry_aborts_internally += +false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =%false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =_false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =&false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =$false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =@false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =!false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =*false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =(false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =)false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =+false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =-#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =\false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =?false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =-/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =/#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally = false/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally =/-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SPANNER.RETRY_ABORTS_INTERNALLY TO TRUE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to true + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +spanner.retry_aborts_internally +to +true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to%true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to_true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to&true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to$true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to@true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to!true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to*true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to(true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to)true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to+true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to-#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to\true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to?true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to-/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to/#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to true/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to/-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SPANNER.RETRY_ABORTS_INTERNALLY TO FALSE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to false + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +spanner.retry_aborts_internally +to +false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to%false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to_false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to&false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to$false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to@false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to!false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to*false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to(false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to)false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to+false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to-#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to\false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to?false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to-/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to/#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to false/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.retry_aborts_internally to/-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY = TRUE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = true + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +local +spanner.retry_aborts_internally += +true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =%true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =_true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =&true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =$true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =@true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =!true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =*true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =(true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =)true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =+true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =-#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =\true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =?true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =-/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =/#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set local spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = true/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =/-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY = FALSE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = false + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +local +spanner.retry_aborts_internally += +false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =%false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =_false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =&false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =$false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =@false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =!false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =*false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =(false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =)false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =+false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =-#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =\false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =?false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =-/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =/#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set local spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally = false/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally =/-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY TO TRUE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to true + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +local +spanner.retry_aborts_internally +to +true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to%true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to_true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to&true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to$true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to@true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to!true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to*true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to(true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to)true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to+true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to-#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to\true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to?true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to-/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to/#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set local spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to true/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to/-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY TO FALSE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to false + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +local +spanner.retry_aborts_internally +to +false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to%false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to_false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to&false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to$false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to@false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to!false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to*false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to(false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to)false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to+false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to-#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to\false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to?false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to-/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to/#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set local spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to false/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set local spanner.retry_aborts_internally to/-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY = TRUE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = true + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +session +spanner.retry_aborts_internally += +true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =%true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =_true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =&true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =$true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =@true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =!true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =*true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =(true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =)true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =+true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =-#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =\true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =?true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =-/true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =/#true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set session spanner.retry_aborts_internally = true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = true/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =/-true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY = FALSE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = false + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +session +spanner.retry_aborts_internally += +false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =%false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =_false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =&false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =$false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =@false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =!false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =*false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =(false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =)false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =+false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =-#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =\false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =?false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =-/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =/#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set session spanner.retry_aborts_internally = false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally = false/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally =/-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY TO TRUE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to true ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to true + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +session +spanner.retry_aborts_internally +to +true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true bar; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true%; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to%true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true_; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to_true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true&; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to&true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true$; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to$true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true@; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to@true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true!; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to!true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true*; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to*true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true(; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to(true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to)true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set session spanner.retry_aborts_internally to true; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to true-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to-true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback work; ++set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work$; +set session spanner.retry_aborts_internally to true+; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback$work; +set session spanner.retry_aborts_internally to+true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback work; +-#set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work@; +set session spanner.retry_aborts_internally to true-#; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback@work; +set session spanner.retry_aborts_internally to-#true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback work; +/set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work!; +set session spanner.retry_aborts_internally to true/; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback!work; +set session spanner.retry_aborts_internally to/true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback work; +\set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work*; +set session spanner.retry_aborts_internally to true\; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback*work; +set session spanner.retry_aborts_internally to\true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback work; +?set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work(; +set session spanner.retry_aborts_internally to true?; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback(work; +set session spanner.retry_aborts_internally to?true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback work; +-/set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work); +set session spanner.retry_aborts_internally to true-/; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback)work; +set session spanner.retry_aborts_internally to-/true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback work; +/#set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work-; +set session spanner.retry_aborts_internally to true/#; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-work; +set session spanner.retry_aborts_internally to/#true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback work; +/-set session spanner.retry_aborts_internally to true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work+; +set session spanner.retry_aborts_internally to true/-; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback+work; +set session spanner.retry_aborts_internally to/-true; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY TO FALSE; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; + + + +set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to false ; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to false + +; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +set +session +spanner.retry_aborts_internally +to +false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback work; +foo set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work-#; +set session spanner.retry_aborts_internally to false bar; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-#work; +%set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback work; +set session spanner.retry_aborts_internally to false%; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work/; +set session spanner.retry_aborts_internally to%false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/work; +_set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback work; +set session spanner.retry_aborts_internally to false_; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work\; +set session spanner.retry_aborts_internally to_false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback\work; +&set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback work; +set session spanner.retry_aborts_internally to false&; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work?; +set session spanner.retry_aborts_internally to&false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback?work; +$set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback work; +set session spanner.retry_aborts_internally to false$; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work-/; +set session spanner.retry_aborts_internally to$false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback-/work; +@set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback work; +set session spanner.retry_aborts_internally to false@; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work/#; +set session spanner.retry_aborts_internally to@false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/#work; +!set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback work; +set session spanner.retry_aborts_internally to false!; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work/-; +set session spanner.retry_aborts_internally to!false; NEW_CONNECTION; -begin transaction; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback/-work; +*set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; -rollback and no chain; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false*; NEW_CONNECTION; -begin transaction; -ROLLBACK AND NO CHAIN; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to*false; NEW_CONNECTION; -begin transaction; -rollback and no chain; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set session spanner.retry_aborts_internally to false; NEW_CONNECTION; -begin transaction; - rollback and no chain; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false(; NEW_CONNECTION; -begin transaction; - rollback and no chain; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to(false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false); +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to)false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to-false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false+; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to+false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false-#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to-#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false\; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to\false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false?; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to?false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false-/; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to-/false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false/#; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to/#false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set session spanner.retry_aborts_internally to false; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to false/-; +NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; +@EXPECT EXCEPTION INVALID_ARGUMENT +set session spanner.retry_aborts_internally to/-false; +NEW_CONNECTION; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; +set spanner.autocommit_dml_mode='partitioned_non_atomic'; +NEW_CONNECTION; + set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +NEW_CONNECTION; + set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback and no chain; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback and no chain ; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -rollback and no chain ; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -rollback and no chain +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -rollback and no chain; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback and no chain; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback -and -no -chain; +set +spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback and no chain; +foo set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain bar; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback and no chain; +%set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain%; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no%chain; +set%spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback and no chain; +_set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain_; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no_chain; +set_spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback and no chain; +&set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain&; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no&chain; +set&spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback and no chain; +$set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain$; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no$chain; +set$spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback and no chain; +@set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain@; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no@chain; +set@spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback and no chain; +!set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain!; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no!chain; +set!spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback and no chain; +*set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain*; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no*chain; +set*spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback and no chain; +(set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain(; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no(chain; +set(spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback and no chain; +)set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain); +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no)chain; +set)spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback and no chain; +-set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain-; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no-chain; +set-spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback and no chain; ++set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain+; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no+chain; +set+spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback and no chain; +-#set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain-#; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no-#chain; +set-#spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback and no chain; +/set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain/; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no/chain; +set/spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback and no chain; +\set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain\; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no\chain; +set\spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback and no chain; +?set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain?; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no?chain; +set?spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback and no chain; +-/set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain-/; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no-/chain; +set-/spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback and no chain; +/#set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain/#; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no/#chain; +set/#spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback and no chain; +/-set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no chain/-; +set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback and no/-chain; +set/-spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -ROLLBACK TRANSACTION AND NO CHAIN; +SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain; +set spanner.autocommit_dml_mode='transactional'; NEW_CONNECTION; -begin transaction; - rollback transaction and no chain; + set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; - rollback transaction and no chain; + set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain ; +set spanner.autocommit_dml_mode='TRANSACTIONAL' ; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain ; +set spanner.autocommit_dml_mode='TRANSACTIONAL' ; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain +set spanner.autocommit_dml_mode='TRANSACTIONAL' ; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -rollback transaction and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -rollback -transaction -and -no -chain; +set +spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback transaction and no chain; +foo set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain bar; +set spanner.autocommit_dml_mode='TRANSACTIONAL' bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback transaction and no chain; +%set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain%; +set spanner.autocommit_dml_mode='TRANSACTIONAL'%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no%chain; +set%spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback transaction and no chain; +_set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain_; +set spanner.autocommit_dml_mode='TRANSACTIONAL'_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no_chain; +set_spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback transaction and no chain; +&set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain&; +set spanner.autocommit_dml_mode='TRANSACTIONAL'&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no&chain; +set&spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback transaction and no chain; +$set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain$; +set spanner.autocommit_dml_mode='TRANSACTIONAL'$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no$chain; +set$spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback transaction and no chain; +@set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain@; +set spanner.autocommit_dml_mode='TRANSACTIONAL'@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no@chain; +set@spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback transaction and no chain; +!set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain!; +set spanner.autocommit_dml_mode='TRANSACTIONAL'!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no!chain; +set!spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback transaction and no chain; +*set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain*; +set spanner.autocommit_dml_mode='TRANSACTIONAL'*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no*chain; +set*spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback transaction and no chain; +(set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain(; +set spanner.autocommit_dml_mode='TRANSACTIONAL'(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no(chain; +set(spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback transaction and no chain; +)set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain); +set spanner.autocommit_dml_mode='TRANSACTIONAL'); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no)chain; +set)spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback transaction and no chain; +-set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain-; +set spanner.autocommit_dml_mode='TRANSACTIONAL'-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no-chain; +set-spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback transaction and no chain; ++set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain+; +set spanner.autocommit_dml_mode='TRANSACTIONAL'+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no+chain; +set+spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback transaction and no chain; +-#set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain-#; +set spanner.autocommit_dml_mode='TRANSACTIONAL'-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no-#chain; +set-#spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback transaction and no chain; +/set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain/; +set spanner.autocommit_dml_mode='TRANSACTIONAL'/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no/chain; +set/spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback transaction and no chain; +\set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain\; +set spanner.autocommit_dml_mode='TRANSACTIONAL'\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no\chain; +set\spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback transaction and no chain; +?set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain?; +set spanner.autocommit_dml_mode='TRANSACTIONAL'?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no?chain; +set?spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback transaction and no chain; +-/set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain-/; +set spanner.autocommit_dml_mode='TRANSACTIONAL'-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no-/chain; +set-/spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback transaction and no chain; +/#set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain/#; +set spanner.autocommit_dml_mode='TRANSACTIONAL'/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no/#chain; +set/#spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback transaction and no chain; +/-set spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no chain/-; +set spanner.autocommit_dml_mode='TRANSACTIONAL'/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback transaction and no/-chain; +set/-spanner.autocommit_dml_mode='TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -rollback work and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -ROLLBACK WORK AND NO CHAIN; +SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback work and no chain; +set spanner.autocommit_dml_mode='transactional_with_fallback_to_partitioned_non_atomic'; NEW_CONNECTION; -begin transaction; - rollback work and no chain; + set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; - rollback work and no chain; + set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback work and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback work and no chain ; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -rollback work and no chain ; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -rollback work and no chain +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -rollback work and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback work and no chain; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -rollback -work -and -no -chain; +set +spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo rollback work and no chain; +foo set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain bar; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%rollback work and no chain; +%set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain%; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no%chain; +set%spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_rollback work and no chain; +_set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain_; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no_chain; +set_spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&rollback work and no chain; +&set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain&; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no&chain; +set&spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$rollback work and no chain; +$set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain$; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no$chain; +set$spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@rollback work and no chain; +@set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain@; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no@chain; +set@spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!rollback work and no chain; +!set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain!; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no!chain; +set!spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*rollback work and no chain; +*set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain*; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no*chain; +set*spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(rollback work and no chain; +(set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain(; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no(chain; +set(spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)rollback work and no chain; +)set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain); +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no)chain; +set)spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --rollback work and no chain; +-set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain-; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no-chain; +set-spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+rollback work and no chain; ++set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain+; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no+chain; +set+spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#rollback work and no chain; +-#set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain-#; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no-#chain; +set-#spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/rollback work and no chain; +/set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain/; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no/chain; +set/spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\rollback work and no chain; +\set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain\; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no\chain; +set\spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?rollback work and no chain; +?set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain?; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no?chain; +set?spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/rollback work and no chain; +-/set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain-/; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no-/chain; +set-/spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#rollback work and no chain; +/#set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain/#; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no/#chain; +set/#spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-rollback work and no chain; +/-set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no chain/-; +set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -rollback work and no/-chain; +set/-spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -ABORT; +SET SPANNER.AUTOCOMMIT_DML_MODE TO 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort; +set spanner.autocommit_dml_mode to 'partitioned_non_atomic'; NEW_CONNECTION; -begin transaction; - abort; + set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; - abort; + set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort ; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -abort ; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -abort +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -abort; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort; +set +spanner.autocommit_dml_mode +to +'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort; +foo set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort bar; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort; +%set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort%; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort%; +set spanner.autocommit_dml_mode to%'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort; +_set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort_; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort_; +set spanner.autocommit_dml_mode to_'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort; +&set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort&; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort&; +set spanner.autocommit_dml_mode to&'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort; +$set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort$; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort$; +set spanner.autocommit_dml_mode to$'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort; +@set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort@; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort@; +set spanner.autocommit_dml_mode to@'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort; +!set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort!; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort!; +set spanner.autocommit_dml_mode to!'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort; +*set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort*; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort*; +set spanner.autocommit_dml_mode to*'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort; +(set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort(; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort(; +set spanner.autocommit_dml_mode to('PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort; +)set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort); +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort); +set spanner.autocommit_dml_mode to)'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --abort; +-set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-; +set spanner.autocommit_dml_mode to-'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort; ++set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort+; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort+; +set spanner.autocommit_dml_mode to+'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort; +-#set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-#; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-#; +set spanner.autocommit_dml_mode to-#'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort; +/set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/; +set spanner.autocommit_dml_mode to/'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort; +\set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort\; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort\; +set spanner.autocommit_dml_mode to\'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort; +?set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort?; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort?; +set spanner.autocommit_dml_mode to?'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort; +-/set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-/; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-/; +set spanner.autocommit_dml_mode to-/'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort; +/#set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/#; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/#; +set spanner.autocommit_dml_mode to/#'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort; +/-set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/-; +set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/-; +set spanner.autocommit_dml_mode to/-'PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort transaction; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -ABORT TRANSACTION; +SET SPANNER.AUTOCOMMIT_DML_MODE TO 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -abort transaction; +set spanner.autocommit_dml_mode to 'transactional'; NEW_CONNECTION; -begin transaction; - abort transaction; + set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; - abort transaction; + set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -abort transaction; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -abort transaction ; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL' ; NEW_CONNECTION; -begin transaction; -abort transaction ; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL' ; NEW_CONNECTION; -begin transaction; -abort transaction +set spanner.autocommit_dml_mode to 'TRANSACTIONAL' ; NEW_CONNECTION; -begin transaction; -abort transaction; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -abort transaction; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -abort -transaction; +set +spanner.autocommit_dml_mode +to +'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort transaction; +foo set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction bar; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL' bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort transaction; +%set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction%; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort%transaction; +set spanner.autocommit_dml_mode to%'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort transaction; +_set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction_; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort_transaction; +set spanner.autocommit_dml_mode to_'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort transaction; +&set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction&; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort&transaction; +set spanner.autocommit_dml_mode to&'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort transaction; +$set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction$; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort$transaction; +set spanner.autocommit_dml_mode to$'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort transaction; +@set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction@; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort@transaction; +set spanner.autocommit_dml_mode to@'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort transaction; +!set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction!; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort!transaction; +set spanner.autocommit_dml_mode to!'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort transaction; +*set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction*; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort*transaction; +set spanner.autocommit_dml_mode to*'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort transaction; +(set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction(; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort(transaction; +set spanner.autocommit_dml_mode to('TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort transaction; +)set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction); +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort)transaction; +set spanner.autocommit_dml_mode to)'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --abort transaction; +-set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction-; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-transaction; +set spanner.autocommit_dml_mode to-'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort transaction; ++set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction+; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort+transaction; +set spanner.autocommit_dml_mode to+'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort transaction; +-#set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction-#; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-#transaction; +set spanner.autocommit_dml_mode to-#'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort transaction; +/set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction/; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/transaction; +set spanner.autocommit_dml_mode to/'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort transaction; +\set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction\; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort\transaction; +set spanner.autocommit_dml_mode to\'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort transaction; +?set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction?; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort?transaction; +set spanner.autocommit_dml_mode to?'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort transaction; +-/set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction-/; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-/transaction; +set spanner.autocommit_dml_mode to-/'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort transaction; +/#set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction/#; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/#transaction; +set spanner.autocommit_dml_mode to/#'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort transaction; +/-set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction/-; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/-transaction; +set spanner.autocommit_dml_mode to/-'TRANSACTIONAL'; NEW_CONNECTION; -begin transaction; -abort work; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -ABORT WORK; +SET SPANNER.AUTOCOMMIT_DML_MODE TO 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort work; +set spanner.autocommit_dml_mode to 'transactional_with_fallback_to_partitioned_non_atomic'; NEW_CONNECTION; -begin transaction; - abort work; + set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; - abort work; + set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort work; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort work ; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -abort work ; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -abort work +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; NEW_CONNECTION; -begin transaction; -abort work; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort work; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort -work; +set +spanner.autocommit_dml_mode +to +'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort work; +foo set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work bar; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort work; +%set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work%; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort%work; +set spanner.autocommit_dml_mode to%'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort work; +_set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work_; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort_work; +set spanner.autocommit_dml_mode to_'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort work; +&set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work&; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort&work; +set spanner.autocommit_dml_mode to&'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort work; +$set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work$; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort$work; +set spanner.autocommit_dml_mode to$'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort work; +@set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work@; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort@work; +set spanner.autocommit_dml_mode to@'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort work; +!set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work!; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort!work; +set spanner.autocommit_dml_mode to!'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort work; +*set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work*; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort*work; +set spanner.autocommit_dml_mode to*'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort work; +(set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work(; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort(work; +set spanner.autocommit_dml_mode to('TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort work; +)set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work); +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort)work; +set spanner.autocommit_dml_mode to)'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --abort work; +-set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work-; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-work; +set spanner.autocommit_dml_mode to-'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort work; ++set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work+; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort+work; +set spanner.autocommit_dml_mode to+'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort work; +-#set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work-#; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-#work; +set spanner.autocommit_dml_mode to-#'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort work; +/set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work/; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/work; +set spanner.autocommit_dml_mode to/'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort work; +\set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work\; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort\work; +set spanner.autocommit_dml_mode to\'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort work; +?set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work?; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort?work; +set spanner.autocommit_dml_mode to?'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort work; +-/set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work-/; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-/work; +set spanner.autocommit_dml_mode to-/'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort work; +/#set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work/#; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/#work; +set spanner.autocommit_dml_mode to/#'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort work; +/-set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work/-; +set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/-work; +set spanner.autocommit_dml_mode to/-'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; NEW_CONNECTION; -begin transaction; -abort and no chain; +set statement_timeout=default; NEW_CONNECTION; -begin transaction; -ABORT AND NO CHAIN; +SET STATEMENT_TIMEOUT=DEFAULT; NEW_CONNECTION; -begin transaction; -abort and no chain; +set statement_timeout=default; NEW_CONNECTION; -begin transaction; - abort and no chain; + set statement_timeout=default; NEW_CONNECTION; -begin transaction; - abort and no chain; + set statement_timeout=default; NEW_CONNECTION; -begin transaction; -abort and no chain; +set statement_timeout=default; NEW_CONNECTION; -begin transaction; -abort and no chain ; +set statement_timeout=default ; NEW_CONNECTION; -begin transaction; -abort and no chain ; +set statement_timeout=default ; NEW_CONNECTION; -begin transaction; -abort and no chain +set statement_timeout=default ; NEW_CONNECTION; -begin transaction; -abort and no chain; +set statement_timeout=default; NEW_CONNECTION; -begin transaction; -abort and no chain; +set statement_timeout=default; NEW_CONNECTION; -begin transaction; -abort -and -no -chain; +set +statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort and no chain; +foo set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain bar; +set statement_timeout=default bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort and no chain; +%set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain%; +set statement_timeout=default%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no%chain; +set%statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort and no chain; +_set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain_; +set statement_timeout=default_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no_chain; +set_statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort and no chain; +&set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain&; +set statement_timeout=default&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no&chain; +set&statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort and no chain; +$set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain$; +set statement_timeout=default$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no$chain; +set$statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort and no chain; +@set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain@; +set statement_timeout=default@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no@chain; +set@statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort and no chain; +!set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain!; +set statement_timeout=default!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no!chain; +set!statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort and no chain; +*set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain*; +set statement_timeout=default*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no*chain; +set*statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort and no chain; +(set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain(; +set statement_timeout=default(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no(chain; +set(statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort and no chain; +)set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain); +set statement_timeout=default); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no)chain; +set)statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --abort and no chain; +-set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain-; +set statement_timeout=default-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no-chain; +set-statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort and no chain; ++set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain+; +set statement_timeout=default+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no+chain; +set+statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort and no chain; +-#set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain-#; +set statement_timeout=default-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no-#chain; +set-#statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort and no chain; +/set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain/; +set statement_timeout=default/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no/chain; +set/statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort and no chain; +\set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain\; +set statement_timeout=default\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no\chain; +set\statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort and no chain; +?set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain?; +set statement_timeout=default?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no?chain; +set?statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort and no chain; +-/set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain-/; +set statement_timeout=default-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no-/chain; +set-/statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort and no chain; +/#set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain/#; +set statement_timeout=default/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no/#chain; +set/#statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort and no chain; +/-set statement_timeout=default; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no chain/-; +set statement_timeout=default/-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort and no/-chain; +set/-statement_timeout=default; NEW_CONNECTION; -begin transaction; -abort transaction and no chain; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -ABORT TRANSACTION AND NO CHAIN; +SET STATEMENT_TIMEOUT = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort transaction and no chain; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; - abort transaction and no chain; + set statement_timeout = default ; NEW_CONNECTION; -begin transaction; - abort transaction and no chain; + set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -abort transaction and no chain; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -abort transaction and no chain ; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -abort transaction and no chain ; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -abort transaction and no chain +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -abort transaction and no chain; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -abort transaction and no chain; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; -abort -transaction -and -no -chain; +set +statement_timeout += +default +; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort transaction and no chain; +foo set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain bar; +set statement_timeout = default bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort transaction and no chain; +%set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain%; +set statement_timeout = default %; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no%chain; +set statement_timeout = default%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort transaction and no chain; +_set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain_; +set statement_timeout = default _; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no_chain; +set statement_timeout = default_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort transaction and no chain; +&set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain&; +set statement_timeout = default &; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no&chain; +set statement_timeout = default&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort transaction and no chain; +$set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain$; +set statement_timeout = default $; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no$chain; +set statement_timeout = default$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort transaction and no chain; +@set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain@; +set statement_timeout = default @; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no@chain; +set statement_timeout = default@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort transaction and no chain; +!set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain!; +set statement_timeout = default !; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no!chain; +set statement_timeout = default!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort transaction and no chain; +*set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain*; +set statement_timeout = default *; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no*chain; +set statement_timeout = default*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort transaction and no chain; +(set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain(; +set statement_timeout = default (; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no(chain; +set statement_timeout = default(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort transaction and no chain; +)set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain); +set statement_timeout = default ); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no)chain; +set statement_timeout = default); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --abort transaction and no chain; +-set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain-; +set statement_timeout = default -; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no-chain; +set statement_timeout = default-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort transaction and no chain; ++set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain+; +set statement_timeout = default +; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no+chain; +set statement_timeout = default+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort transaction and no chain; +-#set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain-#; +set statement_timeout = default -#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no-#chain; +set statement_timeout = default-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort transaction and no chain; +/set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain/; +set statement_timeout = default /; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no/chain; +set statement_timeout = default/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort transaction and no chain; +\set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain\; +set statement_timeout = default \; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no\chain; +set statement_timeout = default\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort transaction and no chain; +?set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain?; +set statement_timeout = default ?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no?chain; +set statement_timeout = default?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort transaction and no chain; +-/set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain-/; +set statement_timeout = default -/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no-/chain; +set statement_timeout = default-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort transaction and no chain; +/#set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain/#; +set statement_timeout = default /#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no/#chain; +set statement_timeout = default/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort transaction and no chain; +/-set statement_timeout = default ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no chain/-; +set statement_timeout = default /-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort transaction and no/-chain; +set statement_timeout = default/-; NEW_CONNECTION; -begin transaction; -abort work and no chain; +set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -ABORT WORK AND NO CHAIN; +SET STATEMENT_TIMEOUT = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort work and no chain; +set statement_timeout = default ; NEW_CONNECTION; -begin transaction; - abort work and no chain; + set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; - abort work and no chain; + set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort work and no chain; +set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort work and no chain ; +set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort work and no chain ; +set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort work and no chain +set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort work and no chain; +set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort work and no chain; +set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; -abort -work -and -no -chain; +set +statement_timeout += +DEFAULT +; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort work and no chain; +foo set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain bar; +set statement_timeout = DEFAULT bar; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort work and no chain; +%set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain%; +set statement_timeout = DEFAULT %; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no%chain; +set statement_timeout = DEFAULT%; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort work and no chain; +_set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain_; +set statement_timeout = DEFAULT _; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no_chain; +set statement_timeout = DEFAULT_; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort work and no chain; +&set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain&; +set statement_timeout = DEFAULT &; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no&chain; +set statement_timeout = DEFAULT&; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort work and no chain; +$set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain$; +set statement_timeout = DEFAULT $; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no$chain; +set statement_timeout = DEFAULT$; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort work and no chain; +@set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain@; +set statement_timeout = DEFAULT @; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no@chain; +set statement_timeout = DEFAULT@; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort work and no chain; +!set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain!; +set statement_timeout = DEFAULT !; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no!chain; +set statement_timeout = DEFAULT!; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort work and no chain; +*set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain*; +set statement_timeout = DEFAULT *; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no*chain; +set statement_timeout = DEFAULT*; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort work and no chain; +(set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain(; +set statement_timeout = DEFAULT (; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no(chain; +set statement_timeout = DEFAULT(; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort work and no chain; +)set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain); +set statement_timeout = DEFAULT ); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no)chain; +set statement_timeout = DEFAULT); NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --abort work and no chain; +-set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain-; +set statement_timeout = DEFAULT -; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no-chain; +set statement_timeout = DEFAULT-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort work and no chain; ++set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain+; +set statement_timeout = DEFAULT +; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no+chain; +set statement_timeout = DEFAULT+; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort work and no chain; +-#set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain-#; +set statement_timeout = DEFAULT -#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no-#chain; +set statement_timeout = DEFAULT-#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort work and no chain; +/set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain/; +set statement_timeout = DEFAULT /; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no/chain; +set statement_timeout = DEFAULT/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort work and no chain; +\set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain\; +set statement_timeout = DEFAULT \; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no\chain; +set statement_timeout = DEFAULT\; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort work and no chain; +?set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain?; +set statement_timeout = DEFAULT ?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no?chain; +set statement_timeout = DEFAULT?; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort work and no chain; +-/set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain-/; +set statement_timeout = DEFAULT -/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no-/chain; +set statement_timeout = DEFAULT-/; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort work and no chain; +/#set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain/#; +set statement_timeout = DEFAULT /#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no/#chain; +set statement_timeout = DEFAULT/#; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort work and no chain; +/-set statement_timeout = DEFAULT ; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no chain/-; +set statement_timeout = DEFAULT /-; NEW_CONNECTION; -begin transaction; @EXPECT EXCEPTION INVALID_ARGUMENT -abort work and no/-chain; +set statement_timeout = DEFAULT/-; NEW_CONNECTION; -start batch ddl; +set statement_timeout='1s'; NEW_CONNECTION; -START BATCH DDL; +SET STATEMENT_TIMEOUT='1S'; NEW_CONNECTION; -start batch ddl; +set statement_timeout='1s'; NEW_CONNECTION; - start batch ddl; + set statement_timeout='1s'; NEW_CONNECTION; - start batch ddl; + set statement_timeout='1s'; NEW_CONNECTION; -start batch ddl; +set statement_timeout='1s'; NEW_CONNECTION; -start batch ddl ; +set statement_timeout='1s' ; NEW_CONNECTION; -start batch ddl ; +set statement_timeout='1s' ; NEW_CONNECTION; -start batch ddl +set statement_timeout='1s' ; NEW_CONNECTION; -start batch ddl; +set statement_timeout='1s'; NEW_CONNECTION; -start batch ddl; +set statement_timeout='1s'; NEW_CONNECTION; -start -batch -ddl; +set +statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start batch ddl; +foo set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl bar; +set statement_timeout='1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start batch ddl; +%set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl%; +set statement_timeout='1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch%ddl; +set%statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start batch ddl; +_set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl_; +set statement_timeout='1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch_ddl; +set_statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start batch ddl; +&set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl&; +set statement_timeout='1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch&ddl; +set&statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start batch ddl; +$set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl$; +set statement_timeout='1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch$ddl; +set$statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start batch ddl; +@set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl@; +set statement_timeout='1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch@ddl; +set@statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start batch ddl; +!set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl!; +set statement_timeout='1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch!ddl; +set!statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start batch ddl; +*set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl*; +set statement_timeout='1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch*ddl; +set*statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start batch ddl; +(set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl(; +set statement_timeout='1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch(ddl; +set(statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start batch ddl; +)set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl); +set statement_timeout='1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch)ddl; +set)statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start batch ddl; +-set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl-; +set statement_timeout='1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-ddl; +set-statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start batch ddl; ++set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl+; +set statement_timeout='1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch+ddl; +set+statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start batch ddl; +-#set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl-#; +set statement_timeout='1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-#ddl; +set-#statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start batch ddl; +/set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl/; +set statement_timeout='1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/ddl; +set/statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start batch ddl; +\set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl\; +set statement_timeout='1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch\ddl; +set\statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start batch ddl; +?set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl?; +set statement_timeout='1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch?ddl; +set?statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start batch ddl; +-/set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl-/; +set statement_timeout='1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-/ddl; +set-/statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start batch ddl; +/#set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl/#; +set statement_timeout='1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/#ddl; +set/#statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start batch ddl; +/-set statement_timeout='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch ddl/-; +set statement_timeout='1s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/-ddl; +set/-statement_timeout='1s'; NEW_CONNECTION; -start batch dml; +set statement_timeout = '1s' ; NEW_CONNECTION; -START BATCH DML; +SET STATEMENT_TIMEOUT = '1S' ; NEW_CONNECTION; -start batch dml; +set statement_timeout = '1s' ; NEW_CONNECTION; - start batch dml; + set statement_timeout = '1s' ; NEW_CONNECTION; - start batch dml; + set statement_timeout = '1s' ; NEW_CONNECTION; -start batch dml; +set statement_timeout = '1s' ; NEW_CONNECTION; -start batch dml ; +set statement_timeout = '1s' ; NEW_CONNECTION; -start batch dml ; +set statement_timeout = '1s' ; NEW_CONNECTION; -start batch dml +set statement_timeout = '1s' ; NEW_CONNECTION; -start batch dml; +set statement_timeout = '1s' ; NEW_CONNECTION; -start batch dml; +set statement_timeout = '1s' ; NEW_CONNECTION; -start -batch -dml; +set +statement_timeout += +'1s' +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo start batch dml; +foo set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml bar; +set statement_timeout = '1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%start batch dml; +%set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml%; +set statement_timeout = '1s' %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch%dml; +set statement_timeout = '1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_start batch dml; +_set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml_; +set statement_timeout = '1s' _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch_dml; +set statement_timeout = '1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&start batch dml; +&set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml&; +set statement_timeout = '1s' &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch&dml; +set statement_timeout = '1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$start batch dml; +$set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml$; +set statement_timeout = '1s' $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch$dml; +set statement_timeout = '1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@start batch dml; +@set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml@; +set statement_timeout = '1s' @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch@dml; +set statement_timeout = '1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!start batch dml; +!set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml!; +set statement_timeout = '1s' !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch!dml; +set statement_timeout = '1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*start batch dml; +*set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml*; +set statement_timeout = '1s' *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch*dml; +set statement_timeout = '1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(start batch dml; +(set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml(; +set statement_timeout = '1s' (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch(dml; +set statement_timeout = '1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)start batch dml; +)set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml); +set statement_timeout = '1s' ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch)dml; +set statement_timeout = '1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --start batch dml; +-set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml-; +set statement_timeout = '1s' -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-dml; +set statement_timeout = '1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+start batch dml; ++set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml+; +set statement_timeout = '1s' +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch+dml; +set statement_timeout = '1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#start batch dml; +-#set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml-#; +set statement_timeout = '1s' -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-#dml; +set statement_timeout = '1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/start batch dml; +/set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml/; +set statement_timeout = '1s' /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/dml; +set statement_timeout = '1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\start batch dml; +\set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml\; +set statement_timeout = '1s' \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch\dml; +set statement_timeout = '1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?start batch dml; +?set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml?; +set statement_timeout = '1s' ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch?dml; +set statement_timeout = '1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/start batch dml; +-/set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml-/; +set statement_timeout = '1s' -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch-/dml; +set statement_timeout = '1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#start batch dml; +/#set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml/#; +set statement_timeout = '1s' /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/#dml; +set statement_timeout = '1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-start batch dml; +/-set statement_timeout = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch dml/-; +set statement_timeout = '1s' /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -start batch/-dml; +set statement_timeout = '1s'/-; NEW_CONNECTION; -start batch ddl; -run batch; +set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; -RUN BATCH; +SET STATEMENT_TIMEOUT='100MS'; NEW_CONNECTION; -start batch ddl; -run batch; +set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; - run batch; + set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; - run batch; + set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; -run batch; +set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; -run batch ; +set statement_timeout='100ms' ; NEW_CONNECTION; -start batch ddl; -run batch ; +set statement_timeout='100ms' ; NEW_CONNECTION; -start batch ddl; -run batch +set statement_timeout='100ms' ; NEW_CONNECTION; -start batch ddl; -run batch; +set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; -run batch; +set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; -run -batch; +set +statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -foo run batch; +foo set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch bar; +set statement_timeout='100ms' bar; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -%run batch; +%set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch%; +set statement_timeout='100ms'%; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run%batch; +set%statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -_run batch; +_set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch_; +set statement_timeout='100ms'_; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run_batch; +set_statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -&run batch; +&set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch&; +set statement_timeout='100ms'&; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run&batch; +set&statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -$run batch; +$set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch$; +set statement_timeout='100ms'$; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run$batch; +set$statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -@run batch; +@set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch@; +set statement_timeout='100ms'@; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run@batch; +set@statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -!run batch; +!set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch!; +set statement_timeout='100ms'!; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run!batch; +set!statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -*run batch; +*set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch*; +set statement_timeout='100ms'*; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run*batch; +set*statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -(run batch; +(set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch(; +set statement_timeout='100ms'(; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run(batch; +set(statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -)run batch; +)set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch); +set statement_timeout='100ms'); NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run)batch; +set)statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --run batch; +-set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch-; +set statement_timeout='100ms'-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run-batch; +set-statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -+run batch; ++set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch+; +set statement_timeout='100ms'+; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run+batch; +set+statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --#run batch; +-#set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch-#; +set statement_timeout='100ms'-#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run-#batch; +set-#statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/run batch; +/set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch/; +set statement_timeout='100ms'/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run/batch; +set/statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -\run batch; +\set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch\; +set statement_timeout='100ms'\; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run\batch; +set\statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -?run batch; +?set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch?; +set statement_timeout='100ms'?; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run?batch; +set?statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --/run batch; +-/set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch-/; +set statement_timeout='100ms'-/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run-/batch; +set-/statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/#run batch; +/#set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch/#; +set statement_timeout='100ms'/#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run/#batch; +set/#statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/-run batch; +/-set statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run batch/-; +set statement_timeout='100ms'/-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -run/-batch; +set/-statement_timeout='100ms'; NEW_CONNECTION; -start batch ddl; -abort batch; +set statement_timeout=100; NEW_CONNECTION; -start batch ddl; -ABORT BATCH; +SET STATEMENT_TIMEOUT=100; NEW_CONNECTION; -start batch ddl; -abort batch; +set statement_timeout=100; NEW_CONNECTION; -start batch ddl; - abort batch; + set statement_timeout=100; NEW_CONNECTION; -start batch ddl; - abort batch; + set statement_timeout=100; NEW_CONNECTION; -start batch ddl; -abort batch; +set statement_timeout=100; NEW_CONNECTION; -start batch ddl; -abort batch ; +set statement_timeout=100 ; NEW_CONNECTION; -start batch ddl; -abort batch ; +set statement_timeout=100 ; NEW_CONNECTION; -start batch ddl; -abort batch +set statement_timeout=100 ; NEW_CONNECTION; -start batch ddl; -abort batch; +set statement_timeout=100; NEW_CONNECTION; -start batch ddl; -abort batch; +set statement_timeout=100; NEW_CONNECTION; -start batch ddl; -abort -batch; +set +statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -foo abort batch; +foo set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch bar; +set statement_timeout=100 bar; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -%abort batch; +%set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch%; +set statement_timeout=100%; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort%batch; +set%statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -_abort batch; +_set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch_; +set statement_timeout=100_; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort_batch; +set_statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -&abort batch; +&set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch&; +set statement_timeout=100&; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort&batch; +set&statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -$abort batch; +$set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch$; +set statement_timeout=100$; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort$batch; +set$statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -@abort batch; +@set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch@; +set statement_timeout=100@; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort@batch; +set@statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -!abort batch; +!set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch!; +set statement_timeout=100!; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort!batch; +set!statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -*abort batch; +*set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch*; +set statement_timeout=100*; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort*batch; +set*statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -(abort batch; +(set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch(; +set statement_timeout=100(; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort(batch; +set(statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -)abort batch; +)set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch); +set statement_timeout=100); NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort)batch; +set)statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --abort batch; +-set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch-; +set statement_timeout=100-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-batch; +set-statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -+abort batch; ++set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch+; +set statement_timeout=100+; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort+batch; +set+statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --#abort batch; +-#set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch-#; +set statement_timeout=100-#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-#batch; +set-#statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/abort batch; +/set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch/; +set statement_timeout=100/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/batch; +set/statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -\abort batch; +\set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch\; +set statement_timeout=100\; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort\batch; +set\statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -?abort batch; +?set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch?; +set statement_timeout=100?; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort?batch; +set?statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT --/abort batch; +-/set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch-/; +set statement_timeout=100-/; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort-/batch; +set-/statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/#abort batch; +/#set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch/#; +set statement_timeout=100/#; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/#batch; +set/#statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -/-abort batch; +/-set statement_timeout=100; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort batch/-; +set statement_timeout=100/-; NEW_CONNECTION; -start batch ddl; @EXPECT EXCEPTION INVALID_ARGUMENT -abort/-batch; +set/-statement_timeout=100; NEW_CONNECTION; -reset all; +set statement_timeout = 100 ; NEW_CONNECTION; -RESET ALL; +SET STATEMENT_TIMEOUT = 100 ; NEW_CONNECTION; -reset all; +set statement_timeout = 100 ; NEW_CONNECTION; - reset all; + set statement_timeout = 100 ; NEW_CONNECTION; - reset all; + set statement_timeout = 100 ; NEW_CONNECTION; -reset all; +set statement_timeout = 100 ; NEW_CONNECTION; -reset all ; +set statement_timeout = 100 ; NEW_CONNECTION; -reset all ; +set statement_timeout = 100 ; NEW_CONNECTION; -reset all +set statement_timeout = 100 ; NEW_CONNECTION; -reset all; +set statement_timeout = 100 ; NEW_CONNECTION; -reset all; +set statement_timeout = 100 ; NEW_CONNECTION; -reset -all; +set +statement_timeout += +100 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo reset all; +foo set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all bar; +set statement_timeout = 100 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%reset all; +%set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all%; +set statement_timeout = 100 %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset%all; +set statement_timeout = 100%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_reset all; +_set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all_; +set statement_timeout = 100 _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset_all; +set statement_timeout = 100_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&reset all; +&set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all&; +set statement_timeout = 100 &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset&all; +set statement_timeout = 100&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$reset all; +$set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all$; +set statement_timeout = 100 $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset$all; +set statement_timeout = 100$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@reset all; +@set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all@; +set statement_timeout = 100 @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset@all; +set statement_timeout = 100@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!reset all; +!set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all!; +set statement_timeout = 100 !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset!all; +set statement_timeout = 100!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*reset all; +*set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all*; +set statement_timeout = 100 *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset*all; +set statement_timeout = 100*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(reset all; +(set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all(; +set statement_timeout = 100 (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset(all; +set statement_timeout = 100(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)reset all; +)set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all); +set statement_timeout = 100 ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset)all; +set statement_timeout = 100); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --reset all; +-set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all-; +set statement_timeout = 100 -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset-all; +set statement_timeout = 100-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+reset all; ++set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all+; +set statement_timeout = 100 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset+all; +set statement_timeout = 100+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#reset all; +-#set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all-#; +set statement_timeout = 100 -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset-#all; +set statement_timeout = 100-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/reset all; +/set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all/; +set statement_timeout = 100 /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset/all; +set statement_timeout = 100/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\reset all; +\set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all\; +set statement_timeout = 100 \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset\all; +set statement_timeout = 100\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?reset all; +?set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all?; +set statement_timeout = 100 ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset?all; +set statement_timeout = 100?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/reset all; +-/set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all-/; +set statement_timeout = 100 -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset-/all; +set statement_timeout = 100-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#reset all; +/#set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all/#; +set statement_timeout = 100 /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset/#all; +set statement_timeout = 100/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-reset all; +/-set statement_timeout = 100 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset all/-; +set statement_timeout = 100 /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -reset/-all; +set statement_timeout = 100/-; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='10000us'; NEW_CONNECTION; -SET AUTOCOMMIT = TRUE; +SET STATEMENT_TIMEOUT='10000US'; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='10000us'; NEW_CONNECTION; - set autocommit = true; + set statement_timeout='10000us'; NEW_CONNECTION; - set autocommit = true; + set statement_timeout='10000us'; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='10000us'; NEW_CONNECTION; -set autocommit = true ; +set statement_timeout='10000us' ; NEW_CONNECTION; -set autocommit = true ; +set statement_timeout='10000us' ; NEW_CONNECTION; -set autocommit = true +set statement_timeout='10000us' ; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='10000us'; NEW_CONNECTION; -set autocommit = true; +set statement_timeout='10000us'; NEW_CONNECTION; set -autocommit -= -true; +statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit = true; +foo set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true bar; +set statement_timeout='10000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit = true; +%set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true%; +set statement_timeout='10000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =%true; +set%statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit = true; +_set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true_; +set statement_timeout='10000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =_true; +set_statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit = true; +&set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true&; +set statement_timeout='10000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =&true; +set&statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit = true; +$set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true$; +set statement_timeout='10000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =$true; +set$statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit = true; +@set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true@; +set statement_timeout='10000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =@true; +set@statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit = true; +!set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true!; +set statement_timeout='10000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =!true; +set!statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit = true; +*set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true*; +set statement_timeout='10000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =*true; +set*statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit = true; +(set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true(; +set statement_timeout='10000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =(true; +set(statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit = true; +)set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true); +set statement_timeout='10000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =)true; +set)statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit = true; +-set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true-; +set statement_timeout='10000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-true; +set-statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit = true; ++set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true+; +set statement_timeout='10000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =+true; +set+statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit = true; +-#set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true-#; +set statement_timeout='10000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-#true; +set-#statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit = true; +/set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true/; +set statement_timeout='10000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/true; +set/statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit = true; +\set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true\; +set statement_timeout='10000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =\true; +set\statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit = true; +?set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true?; +set statement_timeout='10000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =?true; +set?statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit = true; +-/set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true-/; +set statement_timeout='10000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-/true; +set-/statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit = true; +/#set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true/#; +set statement_timeout='10000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/#true; +set/#statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit = true; +/-set statement_timeout='10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = true/-; +set statement_timeout='10000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/-true; +set/-statement_timeout='10000us'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -SET AUTOCOMMIT = FALSE; +SET STATEMENT_TIMEOUT='9223372036854775807NS'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; - set autocommit = false; + set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; - set autocommit = false; + set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set autocommit = false ; +set statement_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set autocommit = false ; +set statement_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set autocommit = false +set statement_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set autocommit = false; +set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; set -autocommit -= -false; +statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit = false; +foo set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false bar; +set statement_timeout='9223372036854775807ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit = false; +%set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false%; +set statement_timeout='9223372036854775807ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =%false; +set%statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit = false; +_set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false_; +set statement_timeout='9223372036854775807ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =_false; +set_statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit = false; +&set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false&; +set statement_timeout='9223372036854775807ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =&false; +set&statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit = false; +$set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false$; +set statement_timeout='9223372036854775807ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =$false; +set$statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit = false; +@set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false@; +set statement_timeout='9223372036854775807ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =@false; +set@statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit = false; +!set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false!; +set statement_timeout='9223372036854775807ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =!false; +set!statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit = false; +*set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false*; +set statement_timeout='9223372036854775807ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =*false; +set*statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit = false; +(set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false(; +set statement_timeout='9223372036854775807ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =(false; +set(statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit = false; +)set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false); +set statement_timeout='9223372036854775807ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =)false; +set)statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit = false; +-set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false-; +set statement_timeout='9223372036854775807ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-false; +set-statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit = false; ++set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false+; +set statement_timeout='9223372036854775807ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =+false; +set+statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit = false; +-#set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false-#; +set statement_timeout='9223372036854775807ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-#false; +set-#statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit = false; +/set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false/; +set statement_timeout='9223372036854775807ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/false; +set/statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit = false; +\set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false\; +set statement_timeout='9223372036854775807ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =\false; +set\statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit = false; +?set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false?; +set statement_timeout='9223372036854775807ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =?false; +set?statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit = false; +-/set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false-/; +set statement_timeout='9223372036854775807ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =-/false; +set-/statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit = false; +/#set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false/#; +set statement_timeout='9223372036854775807ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/#false; +set/#statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit = false; +/-set statement_timeout='9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit = false/-; +set statement_timeout='9223372036854775807ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit =/-false; +set/-statement_timeout='9223372036854775807ns'; NEW_CONNECTION; -set autocommit to true; +set statement_timeout to default; NEW_CONNECTION; -SET AUTOCOMMIT TO TRUE; +SET STATEMENT_TIMEOUT TO DEFAULT; NEW_CONNECTION; -set autocommit to true; +set statement_timeout to default; NEW_CONNECTION; - set autocommit to true; + set statement_timeout to default; NEW_CONNECTION; - set autocommit to true; + set statement_timeout to default; NEW_CONNECTION; -set autocommit to true; +set statement_timeout to default; NEW_CONNECTION; -set autocommit to true ; +set statement_timeout to default ; NEW_CONNECTION; -set autocommit to true ; +set statement_timeout to default ; NEW_CONNECTION; -set autocommit to true +set statement_timeout to default ; NEW_CONNECTION; -set autocommit to true; +set statement_timeout to default; NEW_CONNECTION; -set autocommit to true; +set statement_timeout to default; NEW_CONNECTION; set -autocommit +statement_timeout to -true; +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit to true; +foo set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true bar; +set statement_timeout to default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit to true; +%set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true%; +set statement_timeout to default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to%true; +set statement_timeout to%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit to true; +_set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true_; +set statement_timeout to default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to_true; +set statement_timeout to_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit to true; +&set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true&; +set statement_timeout to default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to&true; +set statement_timeout to&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit to true; +$set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true$; +set statement_timeout to default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to$true; +set statement_timeout to$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit to true; +@set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true@; +set statement_timeout to default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to@true; +set statement_timeout to@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit to true; +!set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true!; +set statement_timeout to default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to!true; +set statement_timeout to!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit to true; +*set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true*; +set statement_timeout to default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to*true; +set statement_timeout to*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit to true; +(set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true(; +set statement_timeout to default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to(true; +set statement_timeout to(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit to true; +)set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true); +set statement_timeout to default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to)true; +set statement_timeout to)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit to true; +-set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true-; +set statement_timeout to default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to-true; +set statement_timeout to-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit to true; ++set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true+; +set statement_timeout to default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to+true; +set statement_timeout to+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit to true; +-#set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true-#; +set statement_timeout to default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to-#true; +set statement_timeout to-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit to true; +/set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true/; +set statement_timeout to default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to/true; +set statement_timeout to/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit to true; +\set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true\; +set statement_timeout to default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to\true; +set statement_timeout to\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit to true; +?set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true?; +set statement_timeout to default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to?true; +set statement_timeout to?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit to true; +-/set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true-/; +set statement_timeout to default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to-/true; +set statement_timeout to-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit to true; +/#set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true/#; +set statement_timeout to default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to/#true; +set statement_timeout to/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit to true; +/-set statement_timeout to default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to true/-; +set statement_timeout to default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to/-true; +set statement_timeout to/-default; NEW_CONNECTION; -set autocommit to false; +set statement_timeout to '1s'; NEW_CONNECTION; -SET AUTOCOMMIT TO FALSE; +SET STATEMENT_TIMEOUT TO '1S'; NEW_CONNECTION; -set autocommit to false; +set statement_timeout to '1s'; NEW_CONNECTION; - set autocommit to false; + set statement_timeout to '1s'; NEW_CONNECTION; - set autocommit to false; + set statement_timeout to '1s'; NEW_CONNECTION; -set autocommit to false; +set statement_timeout to '1s'; NEW_CONNECTION; -set autocommit to false ; +set statement_timeout to '1s' ; NEW_CONNECTION; -set autocommit to false ; +set statement_timeout to '1s' ; NEW_CONNECTION; -set autocommit to false +set statement_timeout to '1s' ; NEW_CONNECTION; -set autocommit to false; +set statement_timeout to '1s'; NEW_CONNECTION; -set autocommit to false; +set statement_timeout to '1s'; NEW_CONNECTION; set -autocommit +statement_timeout to -false; +'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set autocommit to false; +foo set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false bar; +set statement_timeout to '1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set autocommit to false; +%set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false%; +set statement_timeout to '1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to%false; +set statement_timeout to%'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set autocommit to false; +_set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false_; +set statement_timeout to '1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to_false; +set statement_timeout to_'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set autocommit to false; +&set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false&; +set statement_timeout to '1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to&false; +set statement_timeout to&'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set autocommit to false; +$set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false$; +set statement_timeout to '1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to$false; +set statement_timeout to$'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set autocommit to false; +@set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false@; +set statement_timeout to '1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to@false; +set statement_timeout to@'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set autocommit to false; +!set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false!; +set statement_timeout to '1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to!false; +set statement_timeout to!'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set autocommit to false; +*set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false*; +set statement_timeout to '1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to*false; +set statement_timeout to*'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set autocommit to false; +(set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false(; +set statement_timeout to '1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to(false; +set statement_timeout to('1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set autocommit to false; +)set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false); +set statement_timeout to '1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to)false; +set statement_timeout to)'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set autocommit to false; +-set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false-; +set statement_timeout to '1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to-false; +set statement_timeout to-'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set autocommit to false; ++set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false+; +set statement_timeout to '1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to+false; +set statement_timeout to+'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set autocommit to false; +-#set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false-#; +set statement_timeout to '1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to-#false; +set statement_timeout to-#'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set autocommit to false; +/set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false/; +set statement_timeout to '1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to/false; +set statement_timeout to/'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set autocommit to false; +\set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false\; +set statement_timeout to '1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to\false; +set statement_timeout to\'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set autocommit to false; +?set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false?; +set statement_timeout to '1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to?false; +set statement_timeout to?'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set autocommit to false; +-/set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false-/; +set statement_timeout to '1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to-/false; +set statement_timeout to-/'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set autocommit to false; +/#set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false/#; +set statement_timeout to '1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to/#false; +set statement_timeout to/#'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set autocommit to false; +/-set statement_timeout to '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to false/-; +set statement_timeout to '1s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set autocommit to/-false; +set statement_timeout to/-'1s'; NEW_CONNECTION; -set spanner.readonly = true; +set statement_timeout to '100ms'; NEW_CONNECTION; -SET SPANNER.READONLY = TRUE; +SET STATEMENT_TIMEOUT TO '100MS'; NEW_CONNECTION; -set spanner.readonly = true; +set statement_timeout to '100ms'; NEW_CONNECTION; - set spanner.readonly = true; + set statement_timeout to '100ms'; NEW_CONNECTION; - set spanner.readonly = true; + set statement_timeout to '100ms'; NEW_CONNECTION; -set spanner.readonly = true; +set statement_timeout to '100ms'; NEW_CONNECTION; -set spanner.readonly = true ; +set statement_timeout to '100ms' ; NEW_CONNECTION; -set spanner.readonly = true ; +set statement_timeout to '100ms' ; NEW_CONNECTION; -set spanner.readonly = true +set statement_timeout to '100ms' ; NEW_CONNECTION; -set spanner.readonly = true; +set statement_timeout to '100ms'; NEW_CONNECTION; -set spanner.readonly = true; +set statement_timeout to '100ms'; NEW_CONNECTION; set -spanner.readonly -= -true; +statement_timeout +to +'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.readonly = true; +foo set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true bar; +set statement_timeout to '100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.readonly = true; +%set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true%; +set statement_timeout to '100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =%true; +set statement_timeout to%'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.readonly = true; +_set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true_; +set statement_timeout to '100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =_true; +set statement_timeout to_'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.readonly = true; +&set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true&; +set statement_timeout to '100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =&true; +set statement_timeout to&'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.readonly = true; +$set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true$; +set statement_timeout to '100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =$true; +set statement_timeout to$'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.readonly = true; +@set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true@; +set statement_timeout to '100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =@true; +set statement_timeout to@'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.readonly = true; +!set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true!; +set statement_timeout to '100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =!true; +set statement_timeout to!'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.readonly = true; +*set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true*; +set statement_timeout to '100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =*true; +set statement_timeout to*'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.readonly = true; +(set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true(; +set statement_timeout to '100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =(true; +set statement_timeout to('100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.readonly = true; +)set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true); +set statement_timeout to '100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =)true; +set statement_timeout to)'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.readonly = true; +-set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true-; +set statement_timeout to '100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =-true; +set statement_timeout to-'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.readonly = true; ++set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true+; +set statement_timeout to '100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =+true; +set statement_timeout to+'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.readonly = true; +-#set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true-#; +set statement_timeout to '100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =-#true; +set statement_timeout to-#'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.readonly = true; +/set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true/; +set statement_timeout to '100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =/true; +set statement_timeout to/'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.readonly = true; +\set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true\; +set statement_timeout to '100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =\true; +set statement_timeout to\'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.readonly = true; +?set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true?; +set statement_timeout to '100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =?true; +set statement_timeout to?'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.readonly = true; +-/set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true-/; +set statement_timeout to '100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =-/true; +set statement_timeout to-/'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.readonly = true; +/#set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true/#; +set statement_timeout to '100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =/#true; +set statement_timeout to/#'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.readonly = true; +/-set statement_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = true/-; +set statement_timeout to '100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =/-true; +set statement_timeout to/-'100ms'; NEW_CONNECTION; -set spanner.readonly = false; +set statement_timeout to 100; NEW_CONNECTION; -SET SPANNER.READONLY = FALSE; +SET STATEMENT_TIMEOUT TO 100; NEW_CONNECTION; -set spanner.readonly = false; +set statement_timeout to 100; NEW_CONNECTION; - set spanner.readonly = false; + set statement_timeout to 100; NEW_CONNECTION; - set spanner.readonly = false; + set statement_timeout to 100; NEW_CONNECTION; -set spanner.readonly = false; +set statement_timeout to 100; NEW_CONNECTION; -set spanner.readonly = false ; +set statement_timeout to 100 ; NEW_CONNECTION; -set spanner.readonly = false ; +set statement_timeout to 100 ; NEW_CONNECTION; -set spanner.readonly = false +set statement_timeout to 100 ; NEW_CONNECTION; -set spanner.readonly = false; +set statement_timeout to 100; NEW_CONNECTION; -set spanner.readonly = false; +set statement_timeout to 100; NEW_CONNECTION; set -spanner.readonly -= -false; +statement_timeout +to +100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.readonly = false; +foo set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false bar; +set statement_timeout to 100 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.readonly = false; +%set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false%; +set statement_timeout to 100%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =%false; +set statement_timeout to%100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.readonly = false; +_set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false_; +set statement_timeout to 100_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =_false; +set statement_timeout to_100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.readonly = false; +&set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false&; +set statement_timeout to 100&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =&false; +set statement_timeout to&100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.readonly = false; +$set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false$; +set statement_timeout to 100$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =$false; +set statement_timeout to$100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.readonly = false; +@set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false@; +set statement_timeout to 100@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =@false; +set statement_timeout to@100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.readonly = false; +!set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false!; +set statement_timeout to 100!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =!false; +set statement_timeout to!100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.readonly = false; +*set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false*; +set statement_timeout to 100*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =*false; +set statement_timeout to*100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.readonly = false; +(set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false(; +set statement_timeout to 100(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =(false; +set statement_timeout to(100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.readonly = false; +)set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false); +set statement_timeout to 100); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =)false; +set statement_timeout to)100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.readonly = false; +-set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false-; +set statement_timeout to 100-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =-false; +set statement_timeout to-100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.readonly = false; ++set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false+; +set statement_timeout to 100+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =+false; +set statement_timeout to+100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.readonly = false; +-#set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false-#; +set statement_timeout to 100-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =-#false; +set statement_timeout to-#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.readonly = false; +/set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false/; +set statement_timeout to 100/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =/false; +set statement_timeout to/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.readonly = false; +\set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false\; +set statement_timeout to 100\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =\false; +set statement_timeout to\100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.readonly = false; +?set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false?; +set statement_timeout to 100?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =?false; +set statement_timeout to?100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.readonly = false; +-/set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false-/; +set statement_timeout to 100-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =-/false; +set statement_timeout to-/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.readonly = false; +/#set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false/#; +set statement_timeout to 100/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =/#false; +set statement_timeout to/#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.readonly = false; +/-set statement_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly = false/-; +set statement_timeout to 100/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly =/-false; +set statement_timeout to/-100; NEW_CONNECTION; -set spanner.readonly to true; +set statement_timeout to '10000us'; NEW_CONNECTION; -SET SPANNER.READONLY TO TRUE; +SET STATEMENT_TIMEOUT TO '10000US'; NEW_CONNECTION; -set spanner.readonly to true; +set statement_timeout to '10000us'; NEW_CONNECTION; - set spanner.readonly to true; + set statement_timeout to '10000us'; NEW_CONNECTION; - set spanner.readonly to true; + set statement_timeout to '10000us'; NEW_CONNECTION; -set spanner.readonly to true; +set statement_timeout to '10000us'; NEW_CONNECTION; -set spanner.readonly to true ; +set statement_timeout to '10000us' ; NEW_CONNECTION; -set spanner.readonly to true ; +set statement_timeout to '10000us' ; NEW_CONNECTION; -set spanner.readonly to true +set statement_timeout to '10000us' ; NEW_CONNECTION; -set spanner.readonly to true; +set statement_timeout to '10000us'; NEW_CONNECTION; -set spanner.readonly to true; +set statement_timeout to '10000us'; NEW_CONNECTION; set -spanner.readonly +statement_timeout to -true; +'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.readonly to true; +foo set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true bar; +set statement_timeout to '10000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.readonly to true; +%set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true%; +set statement_timeout to '10000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to%true; +set statement_timeout to%'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.readonly to true; +_set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true_; +set statement_timeout to '10000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to_true; +set statement_timeout to_'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.readonly to true; +&set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true&; +set statement_timeout to '10000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to&true; +set statement_timeout to&'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.readonly to true; +$set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true$; +set statement_timeout to '10000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to$true; +set statement_timeout to$'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.readonly to true; +@set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true@; +set statement_timeout to '10000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to@true; +set statement_timeout to@'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.readonly to true; +!set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true!; +set statement_timeout to '10000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to!true; +set statement_timeout to!'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.readonly to true; +*set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true*; +set statement_timeout to '10000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to*true; +set statement_timeout to*'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.readonly to true; +(set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true(; +set statement_timeout to '10000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to(true; +set statement_timeout to('10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.readonly to true; +)set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true); +set statement_timeout to '10000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to)true; +set statement_timeout to)'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.readonly to true; +-set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true-; +set statement_timeout to '10000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to-true; +set statement_timeout to-'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.readonly to true; ++set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true+; +set statement_timeout to '10000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to+true; +set statement_timeout to+'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.readonly to true; +-#set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true-#; +set statement_timeout to '10000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to-#true; +set statement_timeout to-#'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.readonly to true; +/set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true/; +set statement_timeout to '10000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to/true; +set statement_timeout to/'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.readonly to true; +\set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true\; +set statement_timeout to '10000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to\true; +set statement_timeout to\'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.readonly to true; +?set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true?; +set statement_timeout to '10000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to?true; +set statement_timeout to?'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.readonly to true; +-/set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true-/; +set statement_timeout to '10000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to-/true; +set statement_timeout to-/'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.readonly to true; +/#set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true/#; +set statement_timeout to '10000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to/#true; +set statement_timeout to/#'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.readonly to true; +/-set statement_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to true/-; +set statement_timeout to '10000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to/-true; +set statement_timeout to/-'10000us'; NEW_CONNECTION; -set spanner.readonly to false; +set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; -SET SPANNER.READONLY TO FALSE; +SET STATEMENT_TIMEOUT TO '9223372036854775807NS'; NEW_CONNECTION; -set spanner.readonly to false; +set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; - set spanner.readonly to false; + set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; - set spanner.readonly to false; + set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly to false; +set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly to false ; +set statement_timeout to '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.readonly to false ; +set statement_timeout to '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.readonly to false +set statement_timeout to '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.readonly to false; +set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly to false; +set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; set -spanner.readonly +statement_timeout to -false; +'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.readonly to false; +foo set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false bar; +set statement_timeout to '9223372036854775807ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.readonly to false; +%set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false%; +set statement_timeout to '9223372036854775807ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to%false; +set statement_timeout to%'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.readonly to false; +_set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false_; +set statement_timeout to '9223372036854775807ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to_false; +set statement_timeout to_'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.readonly to false; +&set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false&; +set statement_timeout to '9223372036854775807ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to&false; +set statement_timeout to&'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.readonly to false; +$set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false$; +set statement_timeout to '9223372036854775807ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to$false; +set statement_timeout to$'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.readonly to false; +@set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false@; +set statement_timeout to '9223372036854775807ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to@false; +set statement_timeout to@'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.readonly to false; +!set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false!; +set statement_timeout to '9223372036854775807ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to!false; +set statement_timeout to!'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.readonly to false; +*set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false*; +set statement_timeout to '9223372036854775807ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to*false; +set statement_timeout to*'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.readonly to false; +(set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false(; +set statement_timeout to '9223372036854775807ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to(false; +set statement_timeout to('9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.readonly to false; +)set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false); +set statement_timeout to '9223372036854775807ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to)false; +set statement_timeout to)'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.readonly to false; +-set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false-; +set statement_timeout to '9223372036854775807ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to-false; +set statement_timeout to-'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.readonly to false; ++set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false+; +set statement_timeout to '9223372036854775807ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to+false; +set statement_timeout to+'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.readonly to false; +-#set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false-#; +set statement_timeout to '9223372036854775807ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to-#false; +set statement_timeout to-#'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.readonly to false; +/set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false/; +set statement_timeout to '9223372036854775807ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to/false; +set statement_timeout to/'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.readonly to false; +\set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false\; +set statement_timeout to '9223372036854775807ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to\false; +set statement_timeout to\'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.readonly to false; +?set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false?; +set statement_timeout to '9223372036854775807ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to?false; +set statement_timeout to?'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.readonly to false; +-/set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false-/; +set statement_timeout to '9223372036854775807ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to-/false; +set statement_timeout to-/'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.readonly to false; +/#set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false/#; +set statement_timeout to '9223372036854775807ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to/#false; +set statement_timeout to/#'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.readonly to false; +/-set statement_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to false/-; +set statement_timeout to '9223372036854775807ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.readonly to/-false; +set statement_timeout to/-'9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true; +set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SPANNER.RETRY_ABORTS_INTERNALLY = TRUE; +SET SPANNER.TRANSACTION_TIMEOUT=DEFAULT; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true; +set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally = true; + set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally = true; + set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true; +set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true ; +set spanner.transaction_timeout=default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true ; +set spanner.transaction_timeout=default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true +set spanner.transaction_timeout=default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true; +set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = true; +set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -spanner.retry_aborts_internally -= -true; +spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.retry_aborts_internally = true; +foo set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true bar; +set spanner.transaction_timeout=default bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.retry_aborts_internally = true; +%set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true%; +set spanner.transaction_timeout=default%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =%true; +set%spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.retry_aborts_internally = true; +_set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true_; +set spanner.transaction_timeout=default_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =_true; +set_spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.retry_aborts_internally = true; +&set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true&; +set spanner.transaction_timeout=default&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =&true; +set&spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.retry_aborts_internally = true; +$set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true$; +set spanner.transaction_timeout=default$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =$true; +set$spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.retry_aborts_internally = true; +@set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true@; +set spanner.transaction_timeout=default@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =@true; +set@spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.retry_aborts_internally = true; +!set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true!; +set spanner.transaction_timeout=default!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =!true; +set!spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.retry_aborts_internally = true; +*set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true*; +set spanner.transaction_timeout=default*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =*true; +set*spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.retry_aborts_internally = true; +(set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true(; +set spanner.transaction_timeout=default(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =(true; +set(spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.retry_aborts_internally = true; +)set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true); +set spanner.transaction_timeout=default); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =)true; +set)spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.retry_aborts_internally = true; +-set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true-; +set spanner.transaction_timeout=default-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =-true; +set-spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.retry_aborts_internally = true; ++set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true+; +set spanner.transaction_timeout=default+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =+true; +set+spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.retry_aborts_internally = true; +-#set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true-#; +set spanner.transaction_timeout=default-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =-#true; +set-#spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.retry_aborts_internally = true; +/set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true/; +set spanner.transaction_timeout=default/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =/true; +set/spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.retry_aborts_internally = true; +\set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true\; +set spanner.transaction_timeout=default\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =\true; +set\spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.retry_aborts_internally = true; +?set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true?; +set spanner.transaction_timeout=default?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =?true; +set?spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.retry_aborts_internally = true; +-/set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true-/; +set spanner.transaction_timeout=default-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =-/true; +set-/spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.retry_aborts_internally = true; +/#set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true/#; +set spanner.transaction_timeout=default/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =/#true; +set/#spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.retry_aborts_internally = true; +/-set spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = true/-; +set spanner.transaction_timeout=default/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =/-true; +set/-spanner.transaction_timeout=default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SPANNER.RETRY_ABORTS_INTERNALLY = FALSE; +SET SPANNER.TRANSACTION_TIMEOUT = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally = false; + set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally = false; + set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false ; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false ; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally = false; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -spanner.retry_aborts_internally +spanner.transaction_timeout = -false; +default +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.retry_aborts_internally = false; +foo set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false bar; +set spanner.transaction_timeout = default bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.retry_aborts_internally = false; +%set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false%; +set spanner.transaction_timeout = default %; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =%false; +set spanner.transaction_timeout = default%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.retry_aborts_internally = false; +_set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false_; +set spanner.transaction_timeout = default _; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =_false; +set spanner.transaction_timeout = default_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.retry_aborts_internally = false; +&set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false&; +set spanner.transaction_timeout = default &; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =&false; +set spanner.transaction_timeout = default&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.retry_aborts_internally = false; +$set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false$; +set spanner.transaction_timeout = default $; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =$false; +set spanner.transaction_timeout = default$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.retry_aborts_internally = false; +@set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false@; +set spanner.transaction_timeout = default @; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =@false; +set spanner.transaction_timeout = default@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.retry_aborts_internally = false; +!set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false!; +set spanner.transaction_timeout = default !; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =!false; +set spanner.transaction_timeout = default!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.retry_aborts_internally = false; +*set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false*; +set spanner.transaction_timeout = default *; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =*false; +set spanner.transaction_timeout = default*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.retry_aborts_internally = false; +(set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false(; +set spanner.transaction_timeout = default (; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =(false; +set spanner.transaction_timeout = default(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.retry_aborts_internally = false; +)set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false); +set spanner.transaction_timeout = default ); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =)false; +set spanner.transaction_timeout = default); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.retry_aborts_internally = false; +-set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false-; +set spanner.transaction_timeout = default -; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =-false; +set spanner.transaction_timeout = default-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.retry_aborts_internally = false; ++set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false+; +set spanner.transaction_timeout = default +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =+false; +set spanner.transaction_timeout = default+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.retry_aborts_internally = false; +-#set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false-#; +set spanner.transaction_timeout = default -#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =-#false; +set spanner.transaction_timeout = default-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.retry_aborts_internally = false; +/set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false/; +set spanner.transaction_timeout = default /; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =/false; +set spanner.transaction_timeout = default/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.retry_aborts_internally = false; +\set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false\; +set spanner.transaction_timeout = default \; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =\false; +set spanner.transaction_timeout = default\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.retry_aborts_internally = false; +?set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false?; +set spanner.transaction_timeout = default ?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =?false; +set spanner.transaction_timeout = default?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.retry_aborts_internally = false; +-/set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false-/; +set spanner.transaction_timeout = default -/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =-/false; +set spanner.transaction_timeout = default-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.retry_aborts_internally = false; +/#set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false/#; +set spanner.transaction_timeout = default /#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =/#false; +set spanner.transaction_timeout = default/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.retry_aborts_internally = false; +/-set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally = false/-; +set spanner.transaction_timeout = default /-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally =/-false; +set spanner.transaction_timeout = default/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true; +set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SPANNER.RETRY_ABORTS_INTERNALLY TO TRUE; +SET SPANNER.TRANSACTION_TIMEOUT = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true; +set spanner.transaction_timeout = default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally to true; + set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally to true; + set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true; +set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true ; +set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true ; +set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true +set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true; +set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to true; +set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -spanner.retry_aborts_internally -to -true; +spanner.transaction_timeout += +DEFAULT +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.retry_aborts_internally to true; +foo set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true bar; +set spanner.transaction_timeout = DEFAULT bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.retry_aborts_internally to true; +%set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true%; +set spanner.transaction_timeout = DEFAULT %; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to%true; +set spanner.transaction_timeout = DEFAULT%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.retry_aborts_internally to true; +_set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true_; +set spanner.transaction_timeout = DEFAULT _; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to_true; +set spanner.transaction_timeout = DEFAULT_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.retry_aborts_internally to true; +&set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true&; +set spanner.transaction_timeout = DEFAULT &; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to&true; +set spanner.transaction_timeout = DEFAULT&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.retry_aborts_internally to true; +$set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true$; +set spanner.transaction_timeout = DEFAULT $; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to$true; +set spanner.transaction_timeout = DEFAULT$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.retry_aborts_internally to true; +@set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true@; +set spanner.transaction_timeout = DEFAULT @; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to@true; +set spanner.transaction_timeout = DEFAULT@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.retry_aborts_internally to true; +!set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true!; +set spanner.transaction_timeout = DEFAULT !; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to!true; +set spanner.transaction_timeout = DEFAULT!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.retry_aborts_internally to true; +*set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true*; +set spanner.transaction_timeout = DEFAULT *; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to*true; +set spanner.transaction_timeout = DEFAULT*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.retry_aborts_internally to true; +(set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true(; +set spanner.transaction_timeout = DEFAULT (; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to(true; +set spanner.transaction_timeout = DEFAULT(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.retry_aborts_internally to true; +)set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true); +set spanner.transaction_timeout = DEFAULT ); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to)true; +set spanner.transaction_timeout = DEFAULT); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.retry_aborts_internally to true; +-set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true-; +set spanner.transaction_timeout = DEFAULT -; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to-true; +set spanner.transaction_timeout = DEFAULT-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.retry_aborts_internally to true; ++set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true+; +set spanner.transaction_timeout = DEFAULT +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to+true; +set spanner.transaction_timeout = DEFAULT+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.retry_aborts_internally to true; +-#set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true-#; +set spanner.transaction_timeout = DEFAULT -#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to-#true; +set spanner.transaction_timeout = DEFAULT-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.retry_aborts_internally to true; +/set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true/; +set spanner.transaction_timeout = DEFAULT /; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to/true; +set spanner.transaction_timeout = DEFAULT/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.retry_aborts_internally to true; +\set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true\; +set spanner.transaction_timeout = DEFAULT \; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to\true; +set spanner.transaction_timeout = DEFAULT\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.retry_aborts_internally to true; +?set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true?; +set spanner.transaction_timeout = DEFAULT ?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to?true; +set spanner.transaction_timeout = DEFAULT?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.retry_aborts_internally to true; +-/set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true-/; +set spanner.transaction_timeout = DEFAULT -/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to-/true; +set spanner.transaction_timeout = DEFAULT-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.retry_aborts_internally to true; +/#set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true/#; +set spanner.transaction_timeout = DEFAULT /#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to/#true; +set spanner.transaction_timeout = DEFAULT/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.retry_aborts_internally to true; +/-set spanner.transaction_timeout = DEFAULT ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to true/-; +set spanner.transaction_timeout = DEFAULT /-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to/-true; +set spanner.transaction_timeout = DEFAULT/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false; +set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SPANNER.RETRY_ABORTS_INTERNALLY TO FALSE; +SET SPANNER.TRANSACTION_TIMEOUT='1S'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false; +set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally to false; + set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set spanner.retry_aborts_internally to false; + set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false; +set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false ; +set spanner.transaction_timeout='1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false ; +set spanner.transaction_timeout='1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false +set spanner.transaction_timeout='1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false; +set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set spanner.retry_aborts_internally to false; +set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -spanner.retry_aborts_internally -to -false; +spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.retry_aborts_internally to false; +foo set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false bar; +set spanner.transaction_timeout='1s' bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.retry_aborts_internally to false; +%set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false%; +set spanner.transaction_timeout='1s'%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to%false; +set%spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.retry_aborts_internally to false; +_set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false_; +set spanner.transaction_timeout='1s'_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to_false; +set_spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.retry_aborts_internally to false; +&set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false&; +set spanner.transaction_timeout='1s'&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to&false; +set&spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.retry_aborts_internally to false; +$set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false$; +set spanner.transaction_timeout='1s'$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to$false; +set$spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.retry_aborts_internally to false; +@set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false@; +set spanner.transaction_timeout='1s'@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to@false; +set@spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.retry_aborts_internally to false; +!set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false!; +set spanner.transaction_timeout='1s'!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to!false; +set!spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.retry_aborts_internally to false; +*set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false*; +set spanner.transaction_timeout='1s'*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to*false; +set*spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.retry_aborts_internally to false; +(set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false(; +set spanner.transaction_timeout='1s'(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to(false; +set(spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.retry_aborts_internally to false; +)set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false); +set spanner.transaction_timeout='1s'); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to)false; +set)spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.retry_aborts_internally to false; +-set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false-; +set spanner.transaction_timeout='1s'-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to-false; +set-spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.retry_aborts_internally to false; ++set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false+; +set spanner.transaction_timeout='1s'+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to+false; +set+spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.retry_aborts_internally to false; +-#set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false-#; +set spanner.transaction_timeout='1s'-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to-#false; +set-#spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.retry_aborts_internally to false; +/set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false/; +set spanner.transaction_timeout='1s'/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to/false; +set/spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.retry_aborts_internally to false; +\set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false\; +set spanner.transaction_timeout='1s'\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to\false; +set\spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.retry_aborts_internally to false; +?set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false?; +set spanner.transaction_timeout='1s'?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to?false; +set?spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.retry_aborts_internally to false; +-/set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false-/; +set spanner.transaction_timeout='1s'-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to-/false; +set-/spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.retry_aborts_internally to false; +/#set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false/#; +set spanner.transaction_timeout='1s'/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to/#false; +set/#spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.retry_aborts_internally to false; +/-set spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to false/-; +set spanner.transaction_timeout='1s'/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.retry_aborts_internally to/-false; -NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true; +set/-spanner.transaction_timeout='1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY = TRUE; +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true; +SET SPANNER.TRANSACTION_TIMEOUT = '1S' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally = true; +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally = true; + set spanner.transaction_timeout = '1s' ; +NEW_CONNECTION; + set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true; +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true ; +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true ; +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true; +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = true; +set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -local -spanner.retry_aborts_internally +spanner.transaction_timeout = -true; +'1s' +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set local spanner.retry_aborts_internally = true; +foo set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true bar; +set spanner.transaction_timeout = '1s' bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set local spanner.retry_aborts_internally = true; +%set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true%; +set spanner.transaction_timeout = '1s' %; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =%true; +set spanner.transaction_timeout = '1s'%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set local spanner.retry_aborts_internally = true; +_set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true_; +set spanner.transaction_timeout = '1s' _; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =_true; +set spanner.transaction_timeout = '1s'_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set local spanner.retry_aborts_internally = true; +&set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true&; +set spanner.transaction_timeout = '1s' &; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =&true; +set spanner.transaction_timeout = '1s'&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set local spanner.retry_aborts_internally = true; +$set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true$; +set spanner.transaction_timeout = '1s' $; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =$true; +set spanner.transaction_timeout = '1s'$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set local spanner.retry_aborts_internally = true; +@set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true@; +set spanner.transaction_timeout = '1s' @; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =@true; +set spanner.transaction_timeout = '1s'@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set local spanner.retry_aborts_internally = true; +!set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true!; +set spanner.transaction_timeout = '1s' !; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =!true; +set spanner.transaction_timeout = '1s'!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set local spanner.retry_aborts_internally = true; +*set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true*; +set spanner.transaction_timeout = '1s' *; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =*true; +set spanner.transaction_timeout = '1s'*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set local spanner.retry_aborts_internally = true; +(set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true(; +set spanner.transaction_timeout = '1s' (; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =(true; +set spanner.transaction_timeout = '1s'(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set local spanner.retry_aborts_internally = true; +)set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true); +set spanner.transaction_timeout = '1s' ); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =)true; +set spanner.transaction_timeout = '1s'); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set local spanner.retry_aborts_internally = true; +-set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true-; +set spanner.transaction_timeout = '1s' -; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =-true; +set spanner.transaction_timeout = '1s'-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set local spanner.retry_aborts_internally = true; ++set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true+; +set spanner.transaction_timeout = '1s' +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =+true; +set spanner.transaction_timeout = '1s'+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set local spanner.retry_aborts_internally = true; +-#set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true-#; +set spanner.transaction_timeout = '1s' -#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =-#true; +set spanner.transaction_timeout = '1s'-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set local spanner.retry_aborts_internally = true; +/set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true/; +set spanner.transaction_timeout = '1s' /; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =/true; +set spanner.transaction_timeout = '1s'/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set local spanner.retry_aborts_internally = true; +\set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true\; +set spanner.transaction_timeout = '1s' \; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =\true; +set spanner.transaction_timeout = '1s'\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set local spanner.retry_aborts_internally = true; +?set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true?; +set spanner.transaction_timeout = '1s' ?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =?true; +set spanner.transaction_timeout = '1s'?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set local spanner.retry_aborts_internally = true; +-/set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true-/; +set spanner.transaction_timeout = '1s' -/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =-/true; +set spanner.transaction_timeout = '1s'-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set local spanner.retry_aborts_internally = true; +/#set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true/#; +set spanner.transaction_timeout = '1s' /#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =/#true; +set spanner.transaction_timeout = '1s'/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set local spanner.retry_aborts_internally = true; +/-set spanner.transaction_timeout = '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = true/-; +set spanner.transaction_timeout = '1s' /-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =/-true; +set spanner.transaction_timeout = '1s'/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY = FALSE; +SET SPANNER.TRANSACTION_TIMEOUT='100MS'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally = false; + set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally = false; + set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false ; +set spanner.transaction_timeout='100ms' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false ; +set spanner.transaction_timeout='100ms' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false +set spanner.transaction_timeout='100ms' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -local -spanner.retry_aborts_internally -= -false; +spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set local spanner.retry_aborts_internally = false; +foo set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false bar; +set spanner.transaction_timeout='100ms' bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set local spanner.retry_aborts_internally = false; +%set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false%; +set spanner.transaction_timeout='100ms'%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =%false; +set%spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set local spanner.retry_aborts_internally = false; +_set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false_; +set spanner.transaction_timeout='100ms'_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =_false; +set_spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set local spanner.retry_aborts_internally = false; +&set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false&; +set spanner.transaction_timeout='100ms'&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =&false; +set&spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set local spanner.retry_aborts_internally = false; +$set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false$; +set spanner.transaction_timeout='100ms'$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =$false; +set$spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set local spanner.retry_aborts_internally = false; +@set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false@; +set spanner.transaction_timeout='100ms'@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =@false; +set@spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set local spanner.retry_aborts_internally = false; +!set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false!; +set spanner.transaction_timeout='100ms'!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =!false; +set!spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set local spanner.retry_aborts_internally = false; +*set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false*; +set spanner.transaction_timeout='100ms'*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =*false; +set*spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set local spanner.retry_aborts_internally = false; +(set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false(; +set spanner.transaction_timeout='100ms'(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =(false; +set(spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set local spanner.retry_aborts_internally = false; +)set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false); +set spanner.transaction_timeout='100ms'); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =)false; +set)spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set local spanner.retry_aborts_internally = false; +-set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false-; +set spanner.transaction_timeout='100ms'-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =-false; +set-spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set local spanner.retry_aborts_internally = false; ++set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false+; +set spanner.transaction_timeout='100ms'+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =+false; +set+spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set local spanner.retry_aborts_internally = false; +-#set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false-#; +set spanner.transaction_timeout='100ms'-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =-#false; +set-#spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set local spanner.retry_aborts_internally = false; +/set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false/; +set spanner.transaction_timeout='100ms'/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =/false; +set/spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set local spanner.retry_aborts_internally = false; +\set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false\; +set spanner.transaction_timeout='100ms'\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =\false; +set\spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set local spanner.retry_aborts_internally = false; +?set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false?; +set spanner.transaction_timeout='100ms'?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =?false; +set?spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set local spanner.retry_aborts_internally = false; +-/set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false-/; +set spanner.transaction_timeout='100ms'-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =-/false; +set-/spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set local spanner.retry_aborts_internally = false; +/#set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false/#; +set spanner.transaction_timeout='100ms'/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =/#false; +set/#spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set local spanner.retry_aborts_internally = false; +/-set spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally = false/-; +set spanner.transaction_timeout='100ms'/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally =/-false; +set/-spanner.transaction_timeout='100ms'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true; +set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY TO TRUE; +SET SPANNER.TRANSACTION_TIMEOUT=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true; +set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally to true; + set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally to true; + set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true; +set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true ; +set spanner.transaction_timeout=100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true ; +set spanner.transaction_timeout=100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true +set spanner.transaction_timeout=100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true; +set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to true; +set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -local -spanner.retry_aborts_internally -to -true; +spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set local spanner.retry_aborts_internally to true; +foo set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true bar; +set spanner.transaction_timeout=100 bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set local spanner.retry_aborts_internally to true; +%set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true%; +set spanner.transaction_timeout=100%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to%true; +set%spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set local spanner.retry_aborts_internally to true; +_set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true_; +set spanner.transaction_timeout=100_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to_true; +set_spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set local spanner.retry_aborts_internally to true; +&set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true&; +set spanner.transaction_timeout=100&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to&true; +set&spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set local spanner.retry_aborts_internally to true; +$set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true$; +set spanner.transaction_timeout=100$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to$true; +set$spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set local spanner.retry_aborts_internally to true; +@set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true@; +set spanner.transaction_timeout=100@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to@true; +set@spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set local spanner.retry_aborts_internally to true; +!set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true!; +set spanner.transaction_timeout=100!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to!true; -NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; +set!spanner.transaction_timeout=100; +NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set local spanner.retry_aborts_internally to true; +*set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true*; +set spanner.transaction_timeout=100*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to*true; +set*spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set local spanner.retry_aborts_internally to true; +(set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true(; +set spanner.transaction_timeout=100(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to(true; +set(spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set local spanner.retry_aborts_internally to true; +)set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true); +set spanner.transaction_timeout=100); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to)true; +set)spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set local spanner.retry_aborts_internally to true; +-set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true-; +set spanner.transaction_timeout=100-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to-true; +set-spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set local spanner.retry_aborts_internally to true; ++set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true+; +set spanner.transaction_timeout=100+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to+true; +set+spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set local spanner.retry_aborts_internally to true; +-#set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true-#; +set spanner.transaction_timeout=100-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to-#true; +set-#spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set local spanner.retry_aborts_internally to true; +/set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true/; +set spanner.transaction_timeout=100/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to/true; +set/spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set local spanner.retry_aborts_internally to true; +\set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true\; +set spanner.transaction_timeout=100\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to\true; +set\spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set local spanner.retry_aborts_internally to true; +?set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true?; +set spanner.transaction_timeout=100?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to?true; +set?spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set local spanner.retry_aborts_internally to true; +-/set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true-/; +set spanner.transaction_timeout=100-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to-/true; +set-/spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set local spanner.retry_aborts_internally to true; +/#set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true/#; +set spanner.transaction_timeout=100/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to/#true; +set/#spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set local spanner.retry_aborts_internally to true; +/-set spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to true/-; +set spanner.transaction_timeout=100/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to/-true; +set/-spanner.transaction_timeout=100; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false; +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET LOCAL SPANNER.RETRY_ABORTS_INTERNALLY TO FALSE; +SET SPANNER.TRANSACTION_TIMEOUT = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false; +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally to false; + set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set local spanner.retry_aborts_internally to false; + set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false; +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false ; +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false ; +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false; +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set local spanner.retry_aborts_internally to false; +set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -local -spanner.retry_aborts_internally -to -false; +spanner.transaction_timeout += +100 +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set local spanner.retry_aborts_internally to false; +foo set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false bar; +set spanner.transaction_timeout = 100 bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set local spanner.retry_aborts_internally to false; +%set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false%; +set spanner.transaction_timeout = 100 %; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to%false; +set spanner.transaction_timeout = 100%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set local spanner.retry_aborts_internally to false; +_set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false_; +set spanner.transaction_timeout = 100 _; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to_false; +set spanner.transaction_timeout = 100_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set local spanner.retry_aborts_internally to false; +&set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false&; +set spanner.transaction_timeout = 100 &; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to&false; +set spanner.transaction_timeout = 100&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set local spanner.retry_aborts_internally to false; +$set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false$; +set spanner.transaction_timeout = 100 $; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to$false; +set spanner.transaction_timeout = 100$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set local spanner.retry_aborts_internally to false; +@set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false@; +set spanner.transaction_timeout = 100 @; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to@false; +set spanner.transaction_timeout = 100@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set local spanner.retry_aborts_internally to false; +!set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false!; +set spanner.transaction_timeout = 100 !; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to!false; +set spanner.transaction_timeout = 100!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set local spanner.retry_aborts_internally to false; +*set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false*; +set spanner.transaction_timeout = 100 *; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to*false; +set spanner.transaction_timeout = 100*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set local spanner.retry_aborts_internally to false; +(set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false(; +set spanner.transaction_timeout = 100 (; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to(false; +set spanner.transaction_timeout = 100(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set local spanner.retry_aborts_internally to false; +)set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false); +set spanner.transaction_timeout = 100 ); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to)false; +set spanner.transaction_timeout = 100); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set local spanner.retry_aborts_internally to false; +-set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false-; +set spanner.transaction_timeout = 100 -; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to-false; +set spanner.transaction_timeout = 100-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set local spanner.retry_aborts_internally to false; ++set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false+; +set spanner.transaction_timeout = 100 +; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to+false; +set spanner.transaction_timeout = 100+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set local spanner.retry_aborts_internally to false; +-#set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false-#; +set spanner.transaction_timeout = 100 -#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to-#false; +set spanner.transaction_timeout = 100-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set local spanner.retry_aborts_internally to false; +/set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false/; +set spanner.transaction_timeout = 100 /; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to/false; +set spanner.transaction_timeout = 100/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set local spanner.retry_aborts_internally to false; +\set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false\; +set spanner.transaction_timeout = 100 \; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to\false; +set spanner.transaction_timeout = 100\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set local spanner.retry_aborts_internally to false; +?set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false?; +set spanner.transaction_timeout = 100 ?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to?false; +set spanner.transaction_timeout = 100?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set local spanner.retry_aborts_internally to false; +-/set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false-/; +set spanner.transaction_timeout = 100 -/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to-/false; +set spanner.transaction_timeout = 100-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set local spanner.retry_aborts_internally to false; +/#set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false/#; +set spanner.transaction_timeout = 100 /#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to/#false; +set spanner.transaction_timeout = 100/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set local spanner.retry_aborts_internally to false; +/-set spanner.transaction_timeout = 100 ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to false/-; +set spanner.transaction_timeout = 100 /-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set local spanner.retry_aborts_internally to/-false; +set spanner.transaction_timeout = 100/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true; +set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY = TRUE; +SET SPANNER.TRANSACTION_TIMEOUT='10000US'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true; +set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally = true; + set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally = true; + set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true; +set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true ; +set spanner.transaction_timeout='10000us' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true ; +set spanner.transaction_timeout='10000us' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true +set spanner.transaction_timeout='10000us' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true; +set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = true; +set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -session -spanner.retry_aborts_internally -= -true; +spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session spanner.retry_aborts_internally = true; +foo set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true bar; +set spanner.transaction_timeout='10000us' bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session spanner.retry_aborts_internally = true; +%set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true%; +set spanner.transaction_timeout='10000us'%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =%true; +set%spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session spanner.retry_aborts_internally = true; +_set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true_; +set spanner.transaction_timeout='10000us'_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =_true; +set_spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session spanner.retry_aborts_internally = true; +&set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true&; +set spanner.transaction_timeout='10000us'&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =&true; +set&spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session spanner.retry_aborts_internally = true; +$set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true$; +set spanner.transaction_timeout='10000us'$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =$true; +set$spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session spanner.retry_aborts_internally = true; +@set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true@; +set spanner.transaction_timeout='10000us'@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =@true; +set@spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session spanner.retry_aborts_internally = true; +!set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true!; +set spanner.transaction_timeout='10000us'!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =!true; +set!spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session spanner.retry_aborts_internally = true; +*set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true*; +set spanner.transaction_timeout='10000us'*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =*true; +set*spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session spanner.retry_aborts_internally = true; +(set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true(; +set spanner.transaction_timeout='10000us'(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =(true; +set(spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session spanner.retry_aborts_internally = true; +)set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true); +set spanner.transaction_timeout='10000us'); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =)true; +set)spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set session spanner.retry_aborts_internally = true; +-set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true-; +set spanner.transaction_timeout='10000us'-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =-true; +set-spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session spanner.retry_aborts_internally = true; ++set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true+; +set spanner.transaction_timeout='10000us'+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =+true; +set+spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session spanner.retry_aborts_internally = true; +-#set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true-#; +set spanner.transaction_timeout='10000us'-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =-#true; +set-#spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session spanner.retry_aborts_internally = true; +/set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true/; +set spanner.transaction_timeout='10000us'/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =/true; +set/spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session spanner.retry_aborts_internally = true; +\set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true\; +set spanner.transaction_timeout='10000us'\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =\true; +set\spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session spanner.retry_aborts_internally = true; +?set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true?; +set spanner.transaction_timeout='10000us'?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =?true; +set?spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session spanner.retry_aborts_internally = true; +-/set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true-/; +set spanner.transaction_timeout='10000us'-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =-/true; +set-/spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session spanner.retry_aborts_internally = true; -NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; +/#set spanner.transaction_timeout='10000us'; +NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true/#; +set spanner.transaction_timeout='10000us'/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =/#true; +set/#spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session spanner.retry_aborts_internally = true; +/-set spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = true/-; +set spanner.transaction_timeout='10000us'/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =/-true; +set/-spanner.transaction_timeout='10000us'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY = FALSE; +SET SPANNER.TRANSACTION_TIMEOUT='9223372036854775807NS'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally = false; + set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally = false; + set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false ; +set spanner.transaction_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false ; +set spanner.transaction_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false +set spanner.transaction_timeout='9223372036854775807ns' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally = false; +set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -session -spanner.retry_aborts_internally -= -false; +spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session spanner.retry_aborts_internally = false; +foo set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false bar; +set spanner.transaction_timeout='9223372036854775807ns' bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session spanner.retry_aborts_internally = false; +%set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false%; +set spanner.transaction_timeout='9223372036854775807ns'%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =%false; +set%spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session spanner.retry_aborts_internally = false; +_set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false_; +set spanner.transaction_timeout='9223372036854775807ns'_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =_false; +set_spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session spanner.retry_aborts_internally = false; +&set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false&; +set spanner.transaction_timeout='9223372036854775807ns'&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =&false; +set&spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session spanner.retry_aborts_internally = false; +$set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false$; +set spanner.transaction_timeout='9223372036854775807ns'$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =$false; +set$spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session spanner.retry_aborts_internally = false; +@set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false@; +set spanner.transaction_timeout='9223372036854775807ns'@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =@false; +set@spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session spanner.retry_aborts_internally = false; +!set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false!; +set spanner.transaction_timeout='9223372036854775807ns'!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =!false; +set!spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session spanner.retry_aborts_internally = false; +*set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false*; +set spanner.transaction_timeout='9223372036854775807ns'*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =*false; +set*spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session spanner.retry_aborts_internally = false; +(set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false(; +set spanner.transaction_timeout='9223372036854775807ns'(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =(false; +set(spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session spanner.retry_aborts_internally = false; +)set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false); +set spanner.transaction_timeout='9223372036854775807ns'); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =)false; +set)spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set session spanner.retry_aborts_internally = false; +-set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false-; +set spanner.transaction_timeout='9223372036854775807ns'-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =-false; +set-spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session spanner.retry_aborts_internally = false; ++set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false+; +set spanner.transaction_timeout='9223372036854775807ns'+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =+false; +set+spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session spanner.retry_aborts_internally = false; +-#set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false-#; +set spanner.transaction_timeout='9223372036854775807ns'-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =-#false; +set-#spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session spanner.retry_aborts_internally = false; +/set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false/; +set spanner.transaction_timeout='9223372036854775807ns'/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =/false; +set/spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session spanner.retry_aborts_internally = false; +\set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false\; +set spanner.transaction_timeout='9223372036854775807ns'\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =\false; +set\spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session spanner.retry_aborts_internally = false; +?set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false?; +set spanner.transaction_timeout='9223372036854775807ns'?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =?false; +set?spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session spanner.retry_aborts_internally = false; +-/set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false-/; +set spanner.transaction_timeout='9223372036854775807ns'-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =-/false; +set-/spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session spanner.retry_aborts_internally = false; +/#set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false/#; +set spanner.transaction_timeout='9223372036854775807ns'/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =/#false; +set/#spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session spanner.retry_aborts_internally = false; +/-set spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally = false/-; +set spanner.transaction_timeout='9223372036854775807ns'/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally =/-false; +set/-spanner.transaction_timeout='9223372036854775807ns'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true; +set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY TO TRUE; +SET SPANNER.TRANSACTION_TIMEOUT TO DEFAULT; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true; +set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally to true; + set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally to true; + set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true; +set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true ; +set spanner.transaction_timeout to default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true ; +set spanner.transaction_timeout to default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true +set spanner.transaction_timeout to default ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true; +set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to true; +set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -session -spanner.retry_aborts_internally +spanner.transaction_timeout to -true; +default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session spanner.retry_aborts_internally to true; +foo set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true bar; +set spanner.transaction_timeout to default bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session spanner.retry_aborts_internally to true; +%set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true%; +set spanner.transaction_timeout to default%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to%true; +set spanner.transaction_timeout to%default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session spanner.retry_aborts_internally to true; +_set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true_; +set spanner.transaction_timeout to default_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to_true; +set spanner.transaction_timeout to_default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session spanner.retry_aborts_internally to true; +&set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true&; +set spanner.transaction_timeout to default&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to&true; +set spanner.transaction_timeout to&default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session spanner.retry_aborts_internally to true; +$set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true$; +set spanner.transaction_timeout to default$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to$true; +set spanner.transaction_timeout to$default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session spanner.retry_aborts_internally to true; +@set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true@; +set spanner.transaction_timeout to default@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to@true; +set spanner.transaction_timeout to@default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session spanner.retry_aborts_internally to true; +!set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true!; +set spanner.transaction_timeout to default!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to!true; +set spanner.transaction_timeout to!default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session spanner.retry_aborts_internally to true; +*set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true*; +set spanner.transaction_timeout to default*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to*true; +set spanner.transaction_timeout to*default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session spanner.retry_aborts_internally to true; +(set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true(; +set spanner.transaction_timeout to default(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to(true; +set spanner.transaction_timeout to(default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session spanner.retry_aborts_internally to true; +)set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true); +set spanner.transaction_timeout to default); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to)true; +set spanner.transaction_timeout to)default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set session spanner.retry_aborts_internally to true; +-set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true-; +set spanner.transaction_timeout to default-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to-true; +set spanner.transaction_timeout to-default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session spanner.retry_aborts_internally to true; ++set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true+; +set spanner.transaction_timeout to default+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to+true; +set spanner.transaction_timeout to+default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session spanner.retry_aborts_internally to true; +-#set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true-#; +set spanner.transaction_timeout to default-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to-#true; +set spanner.transaction_timeout to-#default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session spanner.retry_aborts_internally to true; +/set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true/; +set spanner.transaction_timeout to default/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to/true; +set spanner.transaction_timeout to/default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session spanner.retry_aborts_internally to true; +\set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true\; +set spanner.transaction_timeout to default\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to\true; +set spanner.transaction_timeout to\default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session spanner.retry_aborts_internally to true; +?set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true?; +set spanner.transaction_timeout to default?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to?true; +set spanner.transaction_timeout to?default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session spanner.retry_aborts_internally to true; +-/set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true-/; +set spanner.transaction_timeout to default-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to-/true; +set spanner.transaction_timeout to-/default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session spanner.retry_aborts_internally to true; +/#set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true/#; +set spanner.transaction_timeout to default/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to/#true; +set spanner.transaction_timeout to/#default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session spanner.retry_aborts_internally to true; +/-set spanner.transaction_timeout to default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to true/-; +set spanner.transaction_timeout to default/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to/-true; +set spanner.transaction_timeout to/-default; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false; +set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -SET SESSION SPANNER.RETRY_ABORTS_INTERNALLY TO FALSE; +SET SPANNER.TRANSACTION_TIMEOUT TO '1S'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false; +set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally to false; + set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; - set session spanner.retry_aborts_internally to false; + set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false; +set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false ; +set spanner.transaction_timeout to '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false ; +set spanner.transaction_timeout to '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false +set spanner.transaction_timeout to '1s' ; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false; +set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; -set session spanner.retry_aborts_internally to false; +set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; set -session -spanner.retry_aborts_internally +spanner.transaction_timeout to -false; +'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session spanner.retry_aborts_internally to false; +foo set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false bar; +set spanner.transaction_timeout to '1s' bar; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session spanner.retry_aborts_internally to false; +%set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false%; +set spanner.transaction_timeout to '1s'%; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to%false; +set spanner.transaction_timeout to%'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session spanner.retry_aborts_internally to false; +_set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false_; +set spanner.transaction_timeout to '1s'_; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to_false; +set spanner.transaction_timeout to_'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session spanner.retry_aborts_internally to false; +&set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false&; +set spanner.transaction_timeout to '1s'&; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to&false; +set spanner.transaction_timeout to&'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session spanner.retry_aborts_internally to false; +$set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false$; +set spanner.transaction_timeout to '1s'$; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to$false; -NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; +set spanner.transaction_timeout to$'1s'; +NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session spanner.retry_aborts_internally to false; +@set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false@; +set spanner.transaction_timeout to '1s'@; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to@false; +set spanner.transaction_timeout to@'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session spanner.retry_aborts_internally to false; +!set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false!; +set spanner.transaction_timeout to '1s'!; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to!false; +set spanner.transaction_timeout to!'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session spanner.retry_aborts_internally to false; +*set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false*; +set spanner.transaction_timeout to '1s'*; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to*false; +set spanner.transaction_timeout to*'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session spanner.retry_aborts_internally to false; +(set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false(; +set spanner.transaction_timeout to '1s'(; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to(false; +set spanner.transaction_timeout to('1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session spanner.retry_aborts_internally to false; +)set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false); +set spanner.transaction_timeout to '1s'); NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to)false; +set spanner.transaction_timeout to)'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set session spanner.retry_aborts_internally to false; +-set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false-; +set spanner.transaction_timeout to '1s'-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to-false; +set spanner.transaction_timeout to-'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session spanner.retry_aborts_internally to false; ++set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false+; +set spanner.transaction_timeout to '1s'+; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to+false; +set spanner.transaction_timeout to+'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session spanner.retry_aborts_internally to false; +-#set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false-#; +set spanner.transaction_timeout to '1s'-#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to-#false; +set spanner.transaction_timeout to-#'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session spanner.retry_aborts_internally to false; +/set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false/; +set spanner.transaction_timeout to '1s'/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to/false; +set spanner.transaction_timeout to/'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session spanner.retry_aborts_internally to false; +\set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false\; +set spanner.transaction_timeout to '1s'\; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to\false; +set spanner.transaction_timeout to\'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session spanner.retry_aborts_internally to false; +?set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false?; +set spanner.transaction_timeout to '1s'?; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to?false; +set spanner.transaction_timeout to?'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session spanner.retry_aborts_internally to false; +-/set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false-/; +set spanner.transaction_timeout to '1s'-/; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to-/false; +set spanner.transaction_timeout to-/'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session spanner.retry_aborts_internally to false; +/#set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false/#; +set spanner.transaction_timeout to '1s'/#; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to/#false; +set spanner.transaction_timeout to/#'1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session spanner.retry_aborts_internally to false; +/-set spanner.transaction_timeout to '1s'; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to false/-; +set spanner.transaction_timeout to '1s'/-; NEW_CONNECTION; -set spanner.readonly = false; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set session spanner.retry_aborts_internally to/-false; +set spanner.transaction_timeout to/-'1s'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; -SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC'; +SET SPANNER.TRANSACTION_TIMEOUT TO '100MS'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='partitioned_non_atomic'; +set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; - set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; + set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; - set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; + set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; +set spanner.transaction_timeout to '100ms' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ; +set spanner.transaction_timeout to '100ms' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' +set spanner.transaction_timeout to '100ms' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; set -spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +spanner.transaction_timeout +to +'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +foo set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' bar; +set spanner.transaction_timeout to '100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +%set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'%; +set spanner.transaction_timeout to '100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to%'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +_set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'_; +set spanner.transaction_timeout to '100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to_'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +&set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'&; +set spanner.transaction_timeout to '100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to&'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +$set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'$; +set spanner.transaction_timeout to '100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to$'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +@set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'@; +set spanner.transaction_timeout to '100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to@'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +!set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'!; +set spanner.transaction_timeout to '100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to!'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +*set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'*; +set spanner.transaction_timeout to '100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to*'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +(set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'(; +set spanner.transaction_timeout to '100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to('100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +)set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'); +set spanner.transaction_timeout to '100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to)'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +-set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-; +set spanner.transaction_timeout to '100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; ++set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'+; +set spanner.transaction_timeout to '100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to+'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +-#set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-#; +set spanner.transaction_timeout to '100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-#'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +/set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/; +set spanner.transaction_timeout to '100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +\set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'\; +set spanner.transaction_timeout to '100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to\'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +?set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'?; +set spanner.transaction_timeout to '100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to?'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +-/set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-/; +set spanner.transaction_timeout to '100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-/'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +/#set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/#; +set spanner.transaction_timeout to '100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/#'100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +/-set spanner.transaction_timeout to '100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/-; +set spanner.transaction_timeout to '100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/-'100ms'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to 100; NEW_CONNECTION; -SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL'; +SET SPANNER.TRANSACTION_TIMEOUT TO 100; NEW_CONNECTION; -set spanner.autocommit_dml_mode='transactional'; +set spanner.transaction_timeout to 100; NEW_CONNECTION; - set spanner.autocommit_dml_mode='TRANSACTIONAL'; + set spanner.transaction_timeout to 100; NEW_CONNECTION; - set spanner.autocommit_dml_mode='TRANSACTIONAL'; + set spanner.transaction_timeout to 100; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to 100; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL' ; +set spanner.transaction_timeout to 100 ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL' ; +set spanner.transaction_timeout to 100 ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL' +set spanner.transaction_timeout to 100 ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to 100; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to 100; NEW_CONNECTION; set -spanner.autocommit_dml_mode='TRANSACTIONAL'; +spanner.transaction_timeout +to +100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.autocommit_dml_mode='TRANSACTIONAL'; +foo set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL' bar; +set spanner.transaction_timeout to 100 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.autocommit_dml_mode='TRANSACTIONAL'; +%set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'%; +set spanner.transaction_timeout to 100%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to%100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.autocommit_dml_mode='TRANSACTIONAL'; +_set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'_; +set spanner.transaction_timeout to 100_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to_100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.autocommit_dml_mode='TRANSACTIONAL'; +&set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'&; +set spanner.transaction_timeout to 100&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to&100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.autocommit_dml_mode='TRANSACTIONAL'; +$set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'$; +set spanner.transaction_timeout to 100$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to$100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.autocommit_dml_mode='TRANSACTIONAL'; +@set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'@; +set spanner.transaction_timeout to 100@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to@100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.autocommit_dml_mode='TRANSACTIONAL'; +!set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'!; +set spanner.transaction_timeout to 100!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to!100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.autocommit_dml_mode='TRANSACTIONAL'; +*set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'*; +set spanner.transaction_timeout to 100*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to*100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.autocommit_dml_mode='TRANSACTIONAL'; +(set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'(; +set spanner.transaction_timeout to 100(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to(100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.autocommit_dml_mode='TRANSACTIONAL'; +)set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'); +set spanner.transaction_timeout to 100); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to)100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.autocommit_dml_mode='TRANSACTIONAL'; +-set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'-; +set spanner.transaction_timeout to 100-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to-100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.autocommit_dml_mode='TRANSACTIONAL'; ++set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'+; +set spanner.transaction_timeout to 100+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to+100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.autocommit_dml_mode='TRANSACTIONAL'; +-#set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'-#; +set spanner.transaction_timeout to 100-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to-#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.autocommit_dml_mode='TRANSACTIONAL'; +/set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'/; +set spanner.transaction_timeout to 100/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.autocommit_dml_mode='TRANSACTIONAL'; +\set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'\; +set spanner.transaction_timeout to 100\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to\100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.autocommit_dml_mode='TRANSACTIONAL'; +?set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'?; +set spanner.transaction_timeout to 100?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to?100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.autocommit_dml_mode='TRANSACTIONAL'; +-/set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'-/; +set spanner.transaction_timeout to 100-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to-/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.autocommit_dml_mode='TRANSACTIONAL'; +/#set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'/#; +set spanner.transaction_timeout to 100/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to/#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.autocommit_dml_mode='TRANSACTIONAL'; +/-set spanner.transaction_timeout to 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL'/-; +set spanner.transaction_timeout to 100/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.autocommit_dml_mode='TRANSACTIONAL'; +set spanner.transaction_timeout to/-100; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; -SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +SET SPANNER.TRANSACTION_TIMEOUT TO '10000US'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='transactional_with_fallback_to_partitioned_non_atomic'; +set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; - set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; + set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; - set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; + set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +set spanner.transaction_timeout to '10000us' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +set spanner.transaction_timeout to '10000us' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' +set spanner.transaction_timeout to '10000us' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; set -spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +spanner.transaction_timeout +to +'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +foo set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' bar; +set spanner.transaction_timeout to '10000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +%set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'%; +set spanner.transaction_timeout to '10000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to%'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +_set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'_; +set spanner.transaction_timeout to '10000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to_'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +&set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'&; +set spanner.transaction_timeout to '10000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to&'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +$set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'$; +set spanner.transaction_timeout to '10000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to$'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +@set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'@; +set spanner.transaction_timeout to '10000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to@'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +!set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'!; +set spanner.transaction_timeout to '10000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to!'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +*set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'*; +set spanner.transaction_timeout to '10000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to*'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +(set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'(; +set spanner.transaction_timeout to '10000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to('10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +)set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'); +set spanner.transaction_timeout to '10000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to)'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-; +set spanner.transaction_timeout to '10000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; ++set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'+; +set spanner.transaction_timeout to '10000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to+'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-#set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-#; +set spanner.transaction_timeout to '10000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-#'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/; +set spanner.transaction_timeout to '10000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +\set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'\; +set spanner.transaction_timeout to '10000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to\'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +?set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'?; +set spanner.transaction_timeout to '10000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to?'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-/set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-/; +set spanner.transaction_timeout to '10000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-/'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/#set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/#; +set spanner.transaction_timeout to '10000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/#'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/-set spanner.transaction_timeout to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/-; +set spanner.transaction_timeout to '10000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.autocommit_dml_mode='TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/-'10000us'; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; -SET SPANNER.AUTOCOMMIT_DML_MODE TO 'PARTITIONED_NON_ATOMIC'; +SET SPANNER.TRANSACTION_TIMEOUT TO '9223372036854775807NS'; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'partitioned_non_atomic'; +set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; - set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; + set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; - set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; + set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' ; +set spanner.transaction_timeout to '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' ; +set spanner.transaction_timeout to '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' +set spanner.transaction_timeout to '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; set -spanner.autocommit_dml_mode +spanner.transaction_timeout to -'PARTITIONED_NON_ATOMIC'; +'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +foo set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' bar; +set spanner.transaction_timeout to '9223372036854775807ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +%set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'%; +set spanner.transaction_timeout to '9223372036854775807ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to%'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to%'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +_set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'_; +set spanner.transaction_timeout to '9223372036854775807ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to_'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to_'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +&set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'&; +set spanner.transaction_timeout to '9223372036854775807ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to&'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to&'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +$set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'$; +set spanner.transaction_timeout to '9223372036854775807ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to$'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to$'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +@set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'@; +set spanner.transaction_timeout to '9223372036854775807ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to@'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to@'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +!set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'!; +set spanner.transaction_timeout to '9223372036854775807ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to!'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to!'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +*set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'*; +set spanner.transaction_timeout to '9223372036854775807ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to*'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to*'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +(set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'(; +set spanner.transaction_timeout to '9223372036854775807ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to('PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to('9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +)set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'); +set spanner.transaction_timeout to '9223372036854775807ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to)'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to)'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +-set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-; +set spanner.transaction_timeout to '9223372036854775807ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; ++set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'+; +set spanner.transaction_timeout to '9223372036854775807ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to+'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to+'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +-#set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-#; +set spanner.transaction_timeout to '9223372036854775807ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-#'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-#'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +/set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/; +set spanner.transaction_timeout to '9223372036854775807ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +\set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'\; +set spanner.transaction_timeout to '9223372036854775807ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to\'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to\'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +?set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'?; +set spanner.transaction_timeout to '9223372036854775807ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to?'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to?'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +-/set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-/; +set spanner.transaction_timeout to '9223372036854775807ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-/'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to-/'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +/#set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/#; +set spanner.transaction_timeout to '9223372036854775807ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/#'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/#'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'; +/-set spanner.transaction_timeout to '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/-; +set spanner.transaction_timeout to '9223372036854775807ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/-'PARTITIONED_NON_ATOMIC'; +set spanner.transaction_timeout to/-'9223372036854775807ns'; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +set autocommit = false; +set transaction read only; NEW_CONNECTION; -SET SPANNER.AUTOCOMMIT_DML_MODE TO 'TRANSACTIONAL'; +set autocommit = false; +SET TRANSACTION READ ONLY; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'transactional'; +set autocommit = false; +set transaction read only; NEW_CONNECTION; - set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +set autocommit = false; + set transaction read only; NEW_CONNECTION; - set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +set autocommit = false; + set transaction read only; NEW_CONNECTION; +set autocommit = false; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +set transaction read only; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL' ; +set autocommit = false; +set transaction read only ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL' ; +set autocommit = false; +set transaction read only ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL' +set autocommit = false; +set transaction read only ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +set autocommit = false; +set transaction read only; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +set autocommit = false; +set transaction read only; NEW_CONNECTION; +set autocommit = false; set -spanner.autocommit_dml_mode -to -'TRANSACTIONAL'; +transaction +read +only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +foo set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL' bar; +set transaction read only bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +%set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'%; +set transaction read only%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to%'TRANSACTIONAL'; +set transaction read%only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +_set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'_; +set transaction read only_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to_'TRANSACTIONAL'; +set transaction read_only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +&set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'&; +set transaction read only&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to&'TRANSACTIONAL'; +set transaction read&only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +$set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'$; +set transaction read only$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to$'TRANSACTIONAL'; +set transaction read$only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +@set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'@; +set transaction read only@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to@'TRANSACTIONAL'; +set transaction read@only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +!set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'!; +set transaction read only!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to!'TRANSACTIONAL'; +set transaction read!only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +*set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'*; +set transaction read only*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to*'TRANSACTIONAL'; +set transaction read*only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +(set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'(; +set transaction read only(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to('TRANSACTIONAL'; +set transaction read(only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +)set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'); +set transaction read only); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to)'TRANSACTIONAL'; +set transaction read)only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +-set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-; +set transaction read only-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-'TRANSACTIONAL'; +set transaction read-only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; ++set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'+; +set transaction read only+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to+'TRANSACTIONAL'; +set transaction read+only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +-#set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-#; +set transaction read only-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-#'TRANSACTIONAL'; +set transaction read-#only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +/set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/; +set transaction read only/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/'TRANSACTIONAL'; +set transaction read/only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +\set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'\; +set transaction read only\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to\'TRANSACTIONAL'; +set transaction read\only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +?set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'?; +set transaction read only?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to?'TRANSACTIONAL'; +set transaction read?only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +-/set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-/; +set transaction read only-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-/'TRANSACTIONAL'; +set transaction read-/only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +/#set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/#; +set transaction read only/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/#'TRANSACTIONAL'; +set transaction read/#only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.autocommit_dml_mode to 'TRANSACTIONAL'; +/-set transaction read only; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/-; +set transaction read only/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/-'TRANSACTIONAL'; +set transaction read/-only; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; -SET SPANNER.AUTOCOMMIT_DML_MODE TO 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set autocommit = false; +SET TRANSACTION READ WRITE; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'transactional_with_fallback_to_partitioned_non_atomic'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; - set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set autocommit = false; + set transaction read write; NEW_CONNECTION; - set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set autocommit = false; + set transaction read write; NEW_CONNECTION; +set autocommit = false; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read write; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +set autocommit = false; +set transaction read write ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' ; +set autocommit = false; +set transaction read write ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' +set autocommit = false; +set transaction read write ; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set autocommit = false; +set transaction read write; NEW_CONNECTION; +set autocommit = false; set -spanner.autocommit_dml_mode -to -'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +transaction +read +write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +foo set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC' bar; +set transaction read write bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +%set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'%; +set transaction read write%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to%'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read%write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +_set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'_; +set transaction read write_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to_'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read_write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +&set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'&; +set transaction read write&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to&'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read&write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +$set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'$; +set transaction read write$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to$'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read$write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +@set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'@; +set transaction read write@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to@'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read@write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +!set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'!; +set transaction read write!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to!'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read!write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +*set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'*; +set transaction read write*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to*'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read*write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +(set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'(; +set transaction read write(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to('TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read(write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +)set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'); +set transaction read write); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to)'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read)write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-; +set transaction read write-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read-write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; ++set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'+; +set transaction read write+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to+'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read+write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-#set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-#; +set transaction read write-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-#'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read-#write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/; +set transaction read write/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read/write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +\set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'\; +set transaction read write\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to\'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read\write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +?set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'?; +set transaction read write?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to?'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read?write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +-/set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'-/; +set transaction read write-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to-/'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read-/write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/#set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/#; +set transaction read write/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/#'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read/#write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +/-set transaction read write; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to 'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'/-; +set transaction read write/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.autocommit_dml_mode to/-'TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC'; +set transaction read/-write; NEW_CONNECTION; -set statement_timeout=default; +set autocommit = false; +set transaction isolation level default; NEW_CONNECTION; -SET STATEMENT_TIMEOUT=DEFAULT; +set autocommit = false; +SET TRANSACTION ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -set statement_timeout=default; +set autocommit = false; +set transaction isolation level default; NEW_CONNECTION; - set statement_timeout=default; +set autocommit = false; + set transaction isolation level default; NEW_CONNECTION; - set statement_timeout=default; +set autocommit = false; + set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; -set statement_timeout=default; +set transaction isolation level default; NEW_CONNECTION; -set statement_timeout=default ; +set autocommit = false; +set transaction isolation level default ; NEW_CONNECTION; -set statement_timeout=default ; +set autocommit = false; +set transaction isolation level default ; NEW_CONNECTION; -set statement_timeout=default +set autocommit = false; +set transaction isolation level default ; NEW_CONNECTION; -set statement_timeout=default; +set autocommit = false; +set transaction isolation level default; NEW_CONNECTION; -set statement_timeout=default; +set autocommit = false; +set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; set -statement_timeout=default; +transaction +isolation +level +default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout=default; +foo set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default bar; +set transaction isolation level default bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout=default; +%set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default%; +set transaction isolation level default%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout=default; +set transaction isolation level%default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout=default; +_set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default_; +set transaction isolation level default_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout=default; +set transaction isolation level_default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout=default; +&set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default&; +set transaction isolation level default&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout=default; +set transaction isolation level&default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout=default; +$set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default$; +set transaction isolation level default$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout=default; +set transaction isolation level$default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout=default; +@set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default@; +set transaction isolation level default@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout=default; +set transaction isolation level@default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout=default; +!set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default!; +set transaction isolation level default!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout=default; +set transaction isolation level!default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout=default; +*set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default*; +set transaction isolation level default*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout=default; +set transaction isolation level*default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout=default; +(set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default(; +set transaction isolation level default(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout=default; +set transaction isolation level(default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout=default; +)set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default); +set transaction isolation level default); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout=default; +set transaction isolation level)default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout=default; +-set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default-; +set transaction isolation level default-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout=default; +set transaction isolation level-default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout=default; ++set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default+; +set transaction isolation level default+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout=default; +set transaction isolation level+default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout=default; +-#set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default-#; +set transaction isolation level default-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout=default; +set transaction isolation level-#default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout=default; +/set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default/; +set transaction isolation level default/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout=default; +set transaction isolation level/default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout=default; +\set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default\; +set transaction isolation level default\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout=default; +set transaction isolation level\default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout=default; +?set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default?; +set transaction isolation level default?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout=default; +set transaction isolation level?default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout=default; +-/set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default-/; +set transaction isolation level default-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout=default; +set transaction isolation level-/default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout=default; +/#set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default/#; +set transaction isolation level default/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout=default; +set transaction isolation level/#default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout=default; +/-set transaction isolation level default; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=default/-; +set transaction isolation level default/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout=default; +set transaction isolation level/-default; NEW_CONNECTION; -set statement_timeout = default ; +set autocommit = false; +set transaction isolation level serializable; NEW_CONNECTION; -SET STATEMENT_TIMEOUT = DEFAULT ; +set autocommit = false; +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -set statement_timeout = default ; +set autocommit = false; +set transaction isolation level serializable; NEW_CONNECTION; - set statement_timeout = default ; +set autocommit = false; + set transaction isolation level serializable; NEW_CONNECTION; - set statement_timeout = default ; +set autocommit = false; + set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; -set statement_timeout = default ; +set transaction isolation level serializable; NEW_CONNECTION; -set statement_timeout = default ; +set autocommit = false; +set transaction isolation level serializable ; NEW_CONNECTION; -set statement_timeout = default ; +set autocommit = false; +set transaction isolation level serializable ; NEW_CONNECTION; -set statement_timeout = default +set autocommit = false; +set transaction isolation level serializable ; NEW_CONNECTION; -set statement_timeout = default ; +set autocommit = false; +set transaction isolation level serializable; NEW_CONNECTION; -set statement_timeout = default ; +set autocommit = false; +set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; set -statement_timeout -= -default -; +transaction +isolation +level +serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout = default ; +foo set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default bar; +set transaction isolation level serializable bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout = default ; +%set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default %; +set transaction isolation level serializable%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default%; +set transaction isolation level%serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout = default ; +_set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default _; +set transaction isolation level serializable_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default_; +set transaction isolation level_serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout = default ; +&set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default &; +set transaction isolation level serializable&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default&; +set transaction isolation level&serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout = default ; +$set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default $; +set transaction isolation level serializable$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default$; +set transaction isolation level$serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout = default ; +@set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default @; +set transaction isolation level serializable@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default@; +set transaction isolation level@serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout = default ; +!set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default !; +set transaction isolation level serializable!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default!; +set transaction isolation level!serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout = default ; +*set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default *; +set transaction isolation level serializable*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default*; +set transaction isolation level*serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout = default ; +(set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default (; +set transaction isolation level serializable(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default(; +set transaction isolation level(serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout = default ; +)set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default ); +set transaction isolation level serializable); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default); +set transaction isolation level)serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout = default ; +-set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default -; +set transaction isolation level serializable-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default-; +set transaction isolation level-serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout = default ; ++set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default +; +set transaction isolation level serializable+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default+; +set transaction isolation level+serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout = default ; +-#set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default -#; +set transaction isolation level serializable-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default-#; +set transaction isolation level-#serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout = default ; +/set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default /; +set transaction isolation level serializable/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default/; +set transaction isolation level/serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout = default ; +\set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default \; +set transaction isolation level serializable\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default\; +set transaction isolation level\serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout = default ; +?set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default ?; +set transaction isolation level serializable?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default?; +set transaction isolation level?serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout = default ; +-/set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default -/; +set transaction isolation level serializable-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default-/; +set transaction isolation level-/serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout = default ; +/#set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default /#; +set transaction isolation level serializable/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default/#; +set transaction isolation level/#serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout = default ; +/-set transaction isolation level serializable; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default /-; +set transaction isolation level serializable/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = default/-; +set transaction isolation level/-serializable; NEW_CONNECTION; -set statement_timeout = DEFAULT ; +set autocommit = false; +set transaction isolation level repeatable read; NEW_CONNECTION; -SET STATEMENT_TIMEOUT = DEFAULT ; +set autocommit = false; +SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -set statement_timeout = default ; +set autocommit = false; +set transaction isolation level repeatable read; NEW_CONNECTION; - set statement_timeout = DEFAULT ; +set autocommit = false; + set transaction isolation level repeatable read; NEW_CONNECTION; - set statement_timeout = DEFAULT ; +set autocommit = false; + set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; -set statement_timeout = DEFAULT ; +set transaction isolation level repeatable read; NEW_CONNECTION; -set statement_timeout = DEFAULT ; +set autocommit = false; +set transaction isolation level repeatable read ; NEW_CONNECTION; -set statement_timeout = DEFAULT ; +set autocommit = false; +set transaction isolation level repeatable read ; NEW_CONNECTION; -set statement_timeout = DEFAULT +set autocommit = false; +set transaction isolation level repeatable read ; NEW_CONNECTION; -set statement_timeout = DEFAULT ; +set autocommit = false; +set transaction isolation level repeatable read; NEW_CONNECTION; -set statement_timeout = DEFAULT ; +set autocommit = false; +set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; set -statement_timeout -= -DEFAULT -; +transaction +isolation +level +repeatable +read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout = DEFAULT ; +foo set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT bar; +set transaction isolation level repeatable read bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout = DEFAULT ; +%set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT %; +set transaction isolation level repeatable read%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT%; +set transaction isolation level repeatable%read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout = DEFAULT ; +_set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT _; +set transaction isolation level repeatable read_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT_; +set transaction isolation level repeatable_read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout = DEFAULT ; +&set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT &; +set transaction isolation level repeatable read&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT&; +set transaction isolation level repeatable&read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout = DEFAULT ; +$set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT $; +set transaction isolation level repeatable read$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT$; +set transaction isolation level repeatable$read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout = DEFAULT ; +@set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT @; +set transaction isolation level repeatable read@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT@; +set transaction isolation level repeatable@read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout = DEFAULT ; +!set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT !; +set transaction isolation level repeatable read!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT!; +set transaction isolation level repeatable!read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout = DEFAULT ; +*set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT *; +set transaction isolation level repeatable read*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT*; +set transaction isolation level repeatable*read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout = DEFAULT ; +(set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT (; +set transaction isolation level repeatable read(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT(; +set transaction isolation level repeatable(read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout = DEFAULT ; +)set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT ); +set transaction isolation level repeatable read); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT); +set transaction isolation level repeatable)read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout = DEFAULT ; +-set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT -; +set transaction isolation level repeatable read-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT-; +set transaction isolation level repeatable-read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout = DEFAULT ; ++set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT +; +set transaction isolation level repeatable read+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT+; +set transaction isolation level repeatable+read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout = DEFAULT ; +-#set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT -#; +set transaction isolation level repeatable read-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT-#; +set transaction isolation level repeatable-#read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout = DEFAULT ; +/set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT /; +set transaction isolation level repeatable read/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT/; +set transaction isolation level repeatable/read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout = DEFAULT ; +\set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT \; +set transaction isolation level repeatable read\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT\; +set transaction isolation level repeatable\read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout = DEFAULT ; +?set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT ?; +set transaction isolation level repeatable read?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT?; +set transaction isolation level repeatable?read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout = DEFAULT ; +-/set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT -/; +set transaction isolation level repeatable read-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT-/; +set transaction isolation level repeatable-/read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout = DEFAULT ; +/#set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT /#; +set transaction isolation level repeatable read/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT/#; +set transaction isolation level repeatable/#read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout = DEFAULT ; +/-set transaction isolation level repeatable read; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT /-; +set transaction isolation level repeatable read/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = DEFAULT/-; +set transaction isolation level repeatable/-read; NEW_CONNECTION; -set statement_timeout='1s'; +set session characteristics as transaction read only; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='1S'; +SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY; NEW_CONNECTION; -set statement_timeout='1s'; +set session characteristics as transaction read only; NEW_CONNECTION; - set statement_timeout='1s'; + set session characteristics as transaction read only; NEW_CONNECTION; - set statement_timeout='1s'; + set session characteristics as transaction read only; NEW_CONNECTION; -set statement_timeout='1s'; +set session characteristics as transaction read only; NEW_CONNECTION; -set statement_timeout='1s' ; +set session characteristics as transaction read only ; NEW_CONNECTION; -set statement_timeout='1s' ; +set session characteristics as transaction read only ; NEW_CONNECTION; -set statement_timeout='1s' +set session characteristics as transaction read only ; NEW_CONNECTION; -set statement_timeout='1s'; +set session characteristics as transaction read only; NEW_CONNECTION; -set statement_timeout='1s'; +set session characteristics as transaction read only; NEW_CONNECTION; set -statement_timeout='1s'; +session +characteristics +as +transaction +read +only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='1s'; +foo set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s' bar; +set session characteristics as transaction read only bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='1s'; +%set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'%; +set session characteristics as transaction read only%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='1s'; +set session characteristics as transaction read%only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='1s'; +_set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'_; +set session characteristics as transaction read only_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='1s'; +set session characteristics as transaction read_only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='1s'; +&set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'&; +set session characteristics as transaction read only&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='1s'; +set session characteristics as transaction read&only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='1s'; +$set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'$; +set session characteristics as transaction read only$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='1s'; +set session characteristics as transaction read$only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='1s'; +@set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'@; +set session characteristics as transaction read only@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='1s'; +set session characteristics as transaction read@only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='1s'; +!set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'!; +set session characteristics as transaction read only!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='1s'; +set session characteristics as transaction read!only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='1s'; +*set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'*; +set session characteristics as transaction read only*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='1s'; +set session characteristics as transaction read*only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='1s'; +(set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'(; +set session characteristics as transaction read only(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='1s'; +set session characteristics as transaction read(only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='1s'; +)set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'); +set session characteristics as transaction read only); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='1s'; +set session characteristics as transaction read)only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='1s'; +-set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'-; +set session characteristics as transaction read only-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='1s'; +set session characteristics as transaction read-only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='1s'; ++set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'+; +set session characteristics as transaction read only+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='1s'; +set session characteristics as transaction read+only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='1s'; +-#set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'-#; +set session characteristics as transaction read only-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='1s'; +set session characteristics as transaction read-#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='1s'; +/set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'/; +set session characteristics as transaction read only/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='1s'; +set session characteristics as transaction read/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='1s'; +\set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'\; +set session characteristics as transaction read only\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='1s'; +set session characteristics as transaction read\only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='1s'; +?set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'?; +set session characteristics as transaction read only?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='1s'; +set session characteristics as transaction read?only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='1s'; +-/set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'-/; +set session characteristics as transaction read only-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='1s'; +set session characteristics as transaction read-/only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='1s'; +/#set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'/#; +set session characteristics as transaction read only/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='1s'; +set session characteristics as transaction read/#only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='1s'; +/-set session characteristics as transaction read only; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='1s'/-; +set session characteristics as transaction read only/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='1s'; +set session characteristics as transaction read/-only; NEW_CONNECTION; -set statement_timeout = '1s' ; +set session characteristics as transaction read write; NEW_CONNECTION; -SET STATEMENT_TIMEOUT = '1S' ; +SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE; NEW_CONNECTION; -set statement_timeout = '1s' ; +set session characteristics as transaction read write; NEW_CONNECTION; - set statement_timeout = '1s' ; + set session characteristics as transaction read write; NEW_CONNECTION; - set statement_timeout = '1s' ; + set session characteristics as transaction read write; NEW_CONNECTION; -set statement_timeout = '1s' ; +set session characteristics as transaction read write; NEW_CONNECTION; -set statement_timeout = '1s' ; +set session characteristics as transaction read write ; NEW_CONNECTION; -set statement_timeout = '1s' ; +set session characteristics as transaction read write ; NEW_CONNECTION; -set statement_timeout = '1s' +set session characteristics as transaction read write ; NEW_CONNECTION; -set statement_timeout = '1s' ; +set session characteristics as transaction read write; NEW_CONNECTION; -set statement_timeout = '1s' ; +set session characteristics as transaction read write; NEW_CONNECTION; set -statement_timeout -= -'1s' -; +session +characteristics +as +transaction +read +write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout = '1s' ; +foo set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' bar; +set session characteristics as transaction read write bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout = '1s' ; +%set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' %; +set session characteristics as transaction read write%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'%; +set session characteristics as transaction read%write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout = '1s' ; +_set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' _; +set session characteristics as transaction read write_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'_; +set session characteristics as transaction read_write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout = '1s' ; +&set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' &; +set session characteristics as transaction read write&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'&; +set session characteristics as transaction read&write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout = '1s' ; +$set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' $; +set session characteristics as transaction read write$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'$; +set session characteristics as transaction read$write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout = '1s' ; +@set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' @; +set session characteristics as transaction read write@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'@; +set session characteristics as transaction read@write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout = '1s' ; +!set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' !; +set session characteristics as transaction read write!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'!; +set session characteristics as transaction read!write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout = '1s' ; +*set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' *; +set session characteristics as transaction read write*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'*; +set session characteristics as transaction read*write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout = '1s' ; +(set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' (; +set session characteristics as transaction read write(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'(; +set session characteristics as transaction read(write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout = '1s' ; +)set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' ); +set session characteristics as transaction read write); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'); +set session characteristics as transaction read)write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout = '1s' ; +-set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' -; +set session characteristics as transaction read write-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'-; +set session characteristics as transaction read-write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout = '1s' ; ++set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' +; +set session characteristics as transaction read write+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'+; +set session characteristics as transaction read+write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout = '1s' ; +-#set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' -#; +set session characteristics as transaction read write-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'-#; +set session characteristics as transaction read-#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout = '1s' ; +/set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' /; +set session characteristics as transaction read write/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'/; +set session characteristics as transaction read/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout = '1s' ; +\set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' \; +set session characteristics as transaction read write\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'\; +set session characteristics as transaction read\write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout = '1s' ; +?set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' ?; +set session characteristics as transaction read write?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'?; +set session characteristics as transaction read?write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout = '1s' ; +-/set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' -/; +set session characteristics as transaction read write-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'-/; +set session characteristics as transaction read-/write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout = '1s' ; +/#set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' /#; +set session characteristics as transaction read write/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'/#; +set session characteristics as transaction read/#write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout = '1s' ; +/-set session characteristics as transaction read write; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s' /-; +set session characteristics as transaction read write/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = '1s'/-; +set session characteristics as transaction read/-write; NEW_CONNECTION; -set statement_timeout='100ms'; +set session characteristics as transaction isolation level default; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='100MS'; +SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL DEFAULT; NEW_CONNECTION; -set statement_timeout='100ms'; +set session characteristics as transaction isolation level default; NEW_CONNECTION; - set statement_timeout='100ms'; + set session characteristics as transaction isolation level default; NEW_CONNECTION; - set statement_timeout='100ms'; + set session characteristics as transaction isolation level default; NEW_CONNECTION; -set statement_timeout='100ms'; +set session characteristics as transaction isolation level default; NEW_CONNECTION; -set statement_timeout='100ms' ; +set session characteristics as transaction isolation level default ; NEW_CONNECTION; -set statement_timeout='100ms' ; +set session characteristics as transaction isolation level default ; NEW_CONNECTION; -set statement_timeout='100ms' +set session characteristics as transaction isolation level default ; NEW_CONNECTION; -set statement_timeout='100ms'; +set session characteristics as transaction isolation level default; NEW_CONNECTION; -set statement_timeout='100ms'; +set session characteristics as transaction isolation level default; NEW_CONNECTION; set -statement_timeout='100ms'; +session +characteristics +as +transaction +isolation +level +default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='100ms'; +foo set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms' bar; +set session characteristics as transaction isolation level default bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='100ms'; +%set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'%; +set session characteristics as transaction isolation level default%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='100ms'; +set session characteristics as transaction isolation level%default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='100ms'; +_set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'_; +set session characteristics as transaction isolation level default_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='100ms'; +set session characteristics as transaction isolation level_default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='100ms'; +&set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'&; +set session characteristics as transaction isolation level default&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='100ms'; +set session characteristics as transaction isolation level&default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='100ms'; +$set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'$; +set session characteristics as transaction isolation level default$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='100ms'; +set session characteristics as transaction isolation level$default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='100ms'; +@set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'@; +set session characteristics as transaction isolation level default@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='100ms'; +set session characteristics as transaction isolation level@default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='100ms'; +!set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'!; +set session characteristics as transaction isolation level default!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='100ms'; +set session characteristics as transaction isolation level!default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='100ms'; +*set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'*; +set session characteristics as transaction isolation level default*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='100ms'; +set session characteristics as transaction isolation level*default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='100ms'; +(set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'(; +set session characteristics as transaction isolation level default(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='100ms'; +set session characteristics as transaction isolation level(default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='100ms'; +)set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'); +set session characteristics as transaction isolation level default); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='100ms'; +set session characteristics as transaction isolation level)default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='100ms'; +-set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'-; +set session characteristics as transaction isolation level default-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='100ms'; +set session characteristics as transaction isolation level-default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='100ms'; ++set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'+; +set session characteristics as transaction isolation level default+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='100ms'; +set session characteristics as transaction isolation level+default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='100ms'; +-#set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'-#; +set session characteristics as transaction isolation level default-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='100ms'; +set session characteristics as transaction isolation level-#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='100ms'; +/set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'/; +set session characteristics as transaction isolation level default/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='100ms'; +set session characteristics as transaction isolation level/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='100ms'; +\set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'\; +set session characteristics as transaction isolation level default\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='100ms'; +set session characteristics as transaction isolation level\default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='100ms'; +?set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'?; +set session characteristics as transaction isolation level default?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='100ms'; +set session characteristics as transaction isolation level?default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='100ms'; +-/set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'-/; +set session characteristics as transaction isolation level default-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='100ms'; +set session characteristics as transaction isolation level-/default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='100ms'; +/#set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'/#; +set session characteristics as transaction isolation level default/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='100ms'; +set session characteristics as transaction isolation level/#default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='100ms'; +/-set session characteristics as transaction isolation level default; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='100ms'/-; +set session characteristics as transaction isolation level default/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='100ms'; +set session characteristics as transaction isolation level/-default; NEW_CONNECTION; -set statement_timeout=100; +set session characteristics as transaction isolation level serializable; NEW_CONNECTION; -SET STATEMENT_TIMEOUT=100; +SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE; NEW_CONNECTION; -set statement_timeout=100; +set session characteristics as transaction isolation level serializable; NEW_CONNECTION; - set statement_timeout=100; + set session characteristics as transaction isolation level serializable; NEW_CONNECTION; - set statement_timeout=100; + set session characteristics as transaction isolation level serializable; NEW_CONNECTION; -set statement_timeout=100; +set session characteristics as transaction isolation level serializable; NEW_CONNECTION; -set statement_timeout=100 ; +set session characteristics as transaction isolation level serializable ; NEW_CONNECTION; -set statement_timeout=100 ; +set session characteristics as transaction isolation level serializable ; NEW_CONNECTION; -set statement_timeout=100 +set session characteristics as transaction isolation level serializable ; NEW_CONNECTION; -set statement_timeout=100; +set session characteristics as transaction isolation level serializable; NEW_CONNECTION; -set statement_timeout=100; +set session characteristics as transaction isolation level serializable; NEW_CONNECTION; set -statement_timeout=100; +session +characteristics +as +transaction +isolation +level +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout=100; +foo set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100 bar; +set session characteristics as transaction isolation level serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout=100; +%set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100%; +set session characteristics as transaction isolation level serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout=100; +set session characteristics as transaction isolation level%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout=100; +_set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100_; +set session characteristics as transaction isolation level serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout=100; +set session characteristics as transaction isolation level_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout=100; +&set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100&; +set session characteristics as transaction isolation level serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout=100; +set session characteristics as transaction isolation level&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout=100; +$set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100$; +set session characteristics as transaction isolation level serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout=100; +set session characteristics as transaction isolation level$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout=100; +@set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100@; +set session characteristics as transaction isolation level serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout=100; +set session characteristics as transaction isolation level@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout=100; +!set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100!; +set session characteristics as transaction isolation level serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout=100; +set session characteristics as transaction isolation level!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout=100; +*set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100*; +set session characteristics as transaction isolation level serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout=100; +set session characteristics as transaction isolation level*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout=100; +(set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100(; +set session characteristics as transaction isolation level serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout=100; +set session characteristics as transaction isolation level(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout=100; +)set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100); +set session characteristics as transaction isolation level serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout=100; +set session characteristics as transaction isolation level)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout=100; +-set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100-; +set session characteristics as transaction isolation level serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout=100; +set session characteristics as transaction isolation level-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout=100; ++set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100+; +set session characteristics as transaction isolation level serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout=100; +set session characteristics as transaction isolation level+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout=100; +-#set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100-#; +set session characteristics as transaction isolation level serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout=100; +set session characteristics as transaction isolation level-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout=100; +/set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100/; +set session characteristics as transaction isolation level serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout=100; +set session characteristics as transaction isolation level/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout=100; +\set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100\; +set session characteristics as transaction isolation level serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout=100; +set session characteristics as transaction isolation level\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout=100; +?set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100?; +set session characteristics as transaction isolation level serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout=100; +set session characteristics as transaction isolation level?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout=100; +-/set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100-/; +set session characteristics as transaction isolation level serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout=100; +set session characteristics as transaction isolation level-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout=100; +/#set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100/#; +set session characteristics as transaction isolation level serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout=100; +set session characteristics as transaction isolation level/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout=100; +/-set session characteristics as transaction isolation level serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout=100/-; +set session characteristics as transaction isolation level serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout=100; +set session characteristics as transaction isolation level/-serializable; NEW_CONNECTION; -set statement_timeout = 100 ; +set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; -SET STATEMENT_TIMEOUT = 100 ; +SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ; NEW_CONNECTION; -set statement_timeout = 100 ; +set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; - set statement_timeout = 100 ; + set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; - set statement_timeout = 100 ; + set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; -set statement_timeout = 100 ; +set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; -set statement_timeout = 100 ; +set session characteristics as transaction isolation level repeatable read ; NEW_CONNECTION; -set statement_timeout = 100 ; +set session characteristics as transaction isolation level repeatable read ; NEW_CONNECTION; -set statement_timeout = 100 +set session characteristics as transaction isolation level repeatable read ; NEW_CONNECTION; -set statement_timeout = 100 ; +set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; -set statement_timeout = 100 ; +set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; set -statement_timeout -= -100 -; +session +characteristics +as +transaction +isolation +level +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout = 100 ; +foo set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 bar; +set session characteristics as transaction isolation level repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout = 100 ; +%set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 %; +set session characteristics as transaction isolation level repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100%; +set session characteristics as transaction isolation level repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout = 100 ; +_set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 _; +set session characteristics as transaction isolation level repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100_; +set session characteristics as transaction isolation level repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout = 100 ; +&set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 &; +set session characteristics as transaction isolation level repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100&; +set session characteristics as transaction isolation level repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout = 100 ; +$set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 $; +set session characteristics as transaction isolation level repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100$; +set session characteristics as transaction isolation level repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout = 100 ; +@set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 @; +set session characteristics as transaction isolation level repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100@; +set session characteristics as transaction isolation level repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout = 100 ; +!set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 !; +set session characteristics as transaction isolation level repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100!; +set session characteristics as transaction isolation level repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout = 100 ; +*set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 *; +set session characteristics as transaction isolation level repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100*; +set session characteristics as transaction isolation level repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout = 100 ; +(set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 (; +set session characteristics as transaction isolation level repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100(; +set session characteristics as transaction isolation level repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout = 100 ; +)set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 ); +set session characteristics as transaction isolation level repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100); +set session characteristics as transaction isolation level repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout = 100 ; +-set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 -; +set session characteristics as transaction isolation level repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100-; +set session characteristics as transaction isolation level repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout = 100 ; ++set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 +; +set session characteristics as transaction isolation level repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100+; +set session characteristics as transaction isolation level repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout = 100 ; +-#set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 -#; +set session characteristics as transaction isolation level repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100-#; +set session characteristics as transaction isolation level repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout = 100 ; +/set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 /; +set session characteristics as transaction isolation level repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100/; +set session characteristics as transaction isolation level repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout = 100 ; +\set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 \; +set session characteristics as transaction isolation level repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100\; +set session characteristics as transaction isolation level repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout = 100 ; +?set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 ?; +set session characteristics as transaction isolation level repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100?; +set session characteristics as transaction isolation level repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout = 100 ; +-/set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 -/; +set session characteristics as transaction isolation level repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100-/; +set session characteristics as transaction isolation level repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout = 100 ; +/#set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 /#; +set session characteristics as transaction isolation level repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100/#; +set session characteristics as transaction isolation level repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout = 100 ; +/-set session characteristics as transaction isolation level repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100 /-; +set session characteristics as transaction isolation level repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout = 100/-; +set session characteristics as transaction isolation level repeatable/-read; NEW_CONNECTION; -set statement_timeout='10000us'; +set default_transaction_isolation=serializable; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='10000US'; +SET DEFAULT_TRANSACTION_ISOLATION=SERIALIZABLE; NEW_CONNECTION; -set statement_timeout='10000us'; +set default_transaction_isolation=serializable; NEW_CONNECTION; - set statement_timeout='10000us'; + set default_transaction_isolation=serializable; NEW_CONNECTION; - set statement_timeout='10000us'; + set default_transaction_isolation=serializable; NEW_CONNECTION; -set statement_timeout='10000us'; +set default_transaction_isolation=serializable; NEW_CONNECTION; -set statement_timeout='10000us' ; +set default_transaction_isolation=serializable ; NEW_CONNECTION; -set statement_timeout='10000us' ; +set default_transaction_isolation=serializable ; NEW_CONNECTION; -set statement_timeout='10000us' +set default_transaction_isolation=serializable ; NEW_CONNECTION; -set statement_timeout='10000us'; +set default_transaction_isolation=serializable; NEW_CONNECTION; -set statement_timeout='10000us'; +set default_transaction_isolation=serializable; NEW_CONNECTION; set -statement_timeout='10000us'; +default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='10000us'; +foo set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us' bar; +set default_transaction_isolation=serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='10000us'; +%set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'%; +set default_transaction_isolation=serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='10000us'; +set%default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='10000us'; +_set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'_; +set default_transaction_isolation=serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='10000us'; +set_default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='10000us'; +&set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'&; +set default_transaction_isolation=serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='10000us'; +set&default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='10000us'; +$set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'$; +set default_transaction_isolation=serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='10000us'; +set$default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='10000us'; +@set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'@; +set default_transaction_isolation=serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='10000us'; +set@default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='10000us'; +!set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'!; +set default_transaction_isolation=serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='10000us'; +set!default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='10000us'; +*set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'*; +set default_transaction_isolation=serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='10000us'; +set*default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='10000us'; +(set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'(; +set default_transaction_isolation=serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='10000us'; +set(default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='10000us'; +)set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'); +set default_transaction_isolation=serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='10000us'; +set)default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='10000us'; +-set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'-; +set default_transaction_isolation=serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='10000us'; +set-default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='10000us'; ++set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'+; +set default_transaction_isolation=serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='10000us'; +set+default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='10000us'; +-#set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'-#; +set default_transaction_isolation=serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='10000us'; +set-#default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='10000us'; +/set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'/; +set default_transaction_isolation=serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='10000us'; +set/default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='10000us'; +\set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'\; +set default_transaction_isolation=serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='10000us'; +set\default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='10000us'; +?set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'?; +set default_transaction_isolation=serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='10000us'; +set?default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='10000us'; +-/set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'-/; +set default_transaction_isolation=serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='10000us'; +set-/default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='10000us'; +/#set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'/#; +set default_transaction_isolation=serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='10000us'; +set/#default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='10000us'; +/-set default_transaction_isolation=serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='10000us'/-; +set default_transaction_isolation=serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='10000us'; +set/-default_transaction_isolation=serializable; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to serializable; NEW_CONNECTION; -SET STATEMENT_TIMEOUT='9223372036854775807NS'; +SET DEFAULT_TRANSACTION_ISOLATION TO SERIALIZABLE; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to serializable; NEW_CONNECTION; - set statement_timeout='9223372036854775807ns'; + set default_transaction_isolation to serializable; NEW_CONNECTION; - set statement_timeout='9223372036854775807ns'; + set default_transaction_isolation to serializable; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to serializable; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns' ; +set default_transaction_isolation to serializable ; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns' ; +set default_transaction_isolation to serializable ; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns' +set default_transaction_isolation to serializable ; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to serializable; NEW_CONNECTION; -set statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to serializable; NEW_CONNECTION; set -statement_timeout='9223372036854775807ns'; +default_transaction_isolation +to +serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout='9223372036854775807ns'; +foo set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns' bar; +set default_transaction_isolation to serializable bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout='9223372036854775807ns'; +%set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'%; +set default_transaction_isolation to serializable%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to%serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout='9223372036854775807ns'; +_set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'_; +set default_transaction_isolation to serializable_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to_serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout='9223372036854775807ns'; +&set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'&; +set default_transaction_isolation to serializable&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to&serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout='9223372036854775807ns'; +$set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'$; +set default_transaction_isolation to serializable$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to$serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout='9223372036854775807ns'; +@set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'@; +set default_transaction_isolation to serializable@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to@serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout='9223372036854775807ns'; +!set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'!; +set default_transaction_isolation to serializable!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to!serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout='9223372036854775807ns'; +*set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'*; +set default_transaction_isolation to serializable*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to*serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout='9223372036854775807ns'; +(set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'(; +set default_transaction_isolation to serializable(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to(serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout='9223372036854775807ns'; +)set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'); +set default_transaction_isolation to serializable); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to)serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout='9223372036854775807ns'; +-set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'-; +set default_transaction_isolation to serializable-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to-serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout='9223372036854775807ns'; ++set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'+; +set default_transaction_isolation to serializable+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to+serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout='9223372036854775807ns'; +-#set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'-#; +set default_transaction_isolation to serializable-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to-#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout='9223372036854775807ns'; +/set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'/; +set default_transaction_isolation to serializable/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout='9223372036854775807ns'; +\set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'\; +set default_transaction_isolation to serializable\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to\serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout='9223372036854775807ns'; +?set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'?; +set default_transaction_isolation to serializable?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to?serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout='9223372036854775807ns'; +-/set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'-/; +set default_transaction_isolation to serializable-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to-/serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout='9223372036854775807ns'; +/#set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'/#; +set default_transaction_isolation to serializable/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to/#serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout='9223372036854775807ns'; +/-set default_transaction_isolation to serializable; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout='9223372036854775807ns'/-; +set default_transaction_isolation to serializable/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-statement_timeout='9223372036854775807ns'; +set default_transaction_isolation to/-serializable; NEW_CONNECTION; -set statement_timeout to default; +set default_transaction_isolation to 'serializable'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT TO DEFAULT; +SET DEFAULT_TRANSACTION_ISOLATION TO 'SERIALIZABLE'; NEW_CONNECTION; -set statement_timeout to default; +set default_transaction_isolation to 'serializable'; NEW_CONNECTION; - set statement_timeout to default; + set default_transaction_isolation to 'serializable'; NEW_CONNECTION; - set statement_timeout to default; + set default_transaction_isolation to 'serializable'; NEW_CONNECTION; -set statement_timeout to default; +set default_transaction_isolation to 'serializable'; NEW_CONNECTION; -set statement_timeout to default ; +set default_transaction_isolation to 'serializable' ; NEW_CONNECTION; -set statement_timeout to default ; +set default_transaction_isolation to 'serializable' ; NEW_CONNECTION; -set statement_timeout to default +set default_transaction_isolation to 'serializable' ; NEW_CONNECTION; -set statement_timeout to default; +set default_transaction_isolation to 'serializable'; NEW_CONNECTION; -set statement_timeout to default; +set default_transaction_isolation to 'serializable'; NEW_CONNECTION; set -statement_timeout +default_transaction_isolation to -default; +'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout to default; +foo set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default bar; +set default_transaction_isolation to 'serializable' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout to default; +%set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default%; +set default_transaction_isolation to 'serializable'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to%default; +set default_transaction_isolation to%'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout to default; +_set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default_; +set default_transaction_isolation to 'serializable'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to_default; +set default_transaction_isolation to_'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout to default; +&set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default&; +set default_transaction_isolation to 'serializable'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to&default; +set default_transaction_isolation to&'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout to default; +$set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default$; +set default_transaction_isolation to 'serializable'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to$default; +set default_transaction_isolation to$'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout to default; +@set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default@; +set default_transaction_isolation to 'serializable'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to@default; +set default_transaction_isolation to@'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout to default; +!set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default!; +set default_transaction_isolation to 'serializable'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to!default; +set default_transaction_isolation to!'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout to default; +*set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default*; +set default_transaction_isolation to 'serializable'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to*default; +set default_transaction_isolation to*'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout to default; +(set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default(; +set default_transaction_isolation to 'serializable'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to(default; +set default_transaction_isolation to('serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout to default; +)set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default); +set default_transaction_isolation to 'serializable'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to)default; +set default_transaction_isolation to)'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout to default; +-set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default-; +set default_transaction_isolation to 'serializable'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-default; +set default_transaction_isolation to-'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout to default; ++set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default+; +set default_transaction_isolation to 'serializable'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to+default; +set default_transaction_isolation to+'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout to default; +-#set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default-#; +set default_transaction_isolation to 'serializable'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-#default; +set default_transaction_isolation to-#'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout to default; +/set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default/; +set default_transaction_isolation to 'serializable'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/default; +set default_transaction_isolation to/'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout to default; +\set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default\; +set default_transaction_isolation to 'serializable'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to\default; +set default_transaction_isolation to\'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout to default; +?set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default?; +set default_transaction_isolation to 'serializable'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to?default; +set default_transaction_isolation to?'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout to default; +-/set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default-/; +set default_transaction_isolation to 'serializable'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-/default; +set default_transaction_isolation to-/'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout to default; +/#set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default/#; +set default_transaction_isolation to 'serializable'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/#default; +set default_transaction_isolation to/#'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout to default; +/-set default_transaction_isolation to 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to default/-; +set default_transaction_isolation to 'serializable'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/-default; +set default_transaction_isolation to/-'serializable'; NEW_CONNECTION; -set statement_timeout to '1s'; +set default_transaction_isolation = 'serializable'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT TO '1S'; +SET DEFAULT_TRANSACTION_ISOLATION = 'SERIALIZABLE'; NEW_CONNECTION; -set statement_timeout to '1s'; +set default_transaction_isolation = 'serializable'; NEW_CONNECTION; - set statement_timeout to '1s'; + set default_transaction_isolation = 'serializable'; NEW_CONNECTION; - set statement_timeout to '1s'; + set default_transaction_isolation = 'serializable'; NEW_CONNECTION; -set statement_timeout to '1s'; +set default_transaction_isolation = 'serializable'; NEW_CONNECTION; -set statement_timeout to '1s' ; +set default_transaction_isolation = 'serializable' ; NEW_CONNECTION; -set statement_timeout to '1s' ; +set default_transaction_isolation = 'serializable' ; NEW_CONNECTION; -set statement_timeout to '1s' +set default_transaction_isolation = 'serializable' ; NEW_CONNECTION; -set statement_timeout to '1s'; +set default_transaction_isolation = 'serializable'; NEW_CONNECTION; -set statement_timeout to '1s'; +set default_transaction_isolation = 'serializable'; NEW_CONNECTION; set -statement_timeout -to -'1s'; +default_transaction_isolation += +'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout to '1s'; +foo set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s' bar; +set default_transaction_isolation = 'serializable' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout to '1s'; +%set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'%; +set default_transaction_isolation = 'serializable'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to%'1s'; +set default_transaction_isolation =%'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout to '1s'; +_set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'_; +set default_transaction_isolation = 'serializable'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to_'1s'; +set default_transaction_isolation =_'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout to '1s'; +&set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'&; +set default_transaction_isolation = 'serializable'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to&'1s'; +set default_transaction_isolation =&'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout to '1s'; +$set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'$; +set default_transaction_isolation = 'serializable'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to$'1s'; +set default_transaction_isolation =$'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout to '1s'; +@set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'@; +set default_transaction_isolation = 'serializable'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to@'1s'; +set default_transaction_isolation =@'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout to '1s'; +!set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'!; +set default_transaction_isolation = 'serializable'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to!'1s'; +set default_transaction_isolation =!'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout to '1s'; +*set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'*; +set default_transaction_isolation = 'serializable'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to*'1s'; +set default_transaction_isolation =*'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout to '1s'; +(set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'(; +set default_transaction_isolation = 'serializable'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to('1s'; +set default_transaction_isolation =('serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout to '1s'; +)set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'); +set default_transaction_isolation = 'serializable'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to)'1s'; +set default_transaction_isolation =)'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout to '1s'; +-set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'-; +set default_transaction_isolation = 'serializable'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-'1s'; +set default_transaction_isolation =-'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout to '1s'; ++set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'+; +set default_transaction_isolation = 'serializable'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to+'1s'; +set default_transaction_isolation =+'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout to '1s'; +-#set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'-#; +set default_transaction_isolation = 'serializable'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-#'1s'; +set default_transaction_isolation =-#'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout to '1s'; +/set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'/; +set default_transaction_isolation = 'serializable'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/'1s'; +set default_transaction_isolation =/'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout to '1s'; +\set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'\; +set default_transaction_isolation = 'serializable'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to\'1s'; +set default_transaction_isolation =\'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout to '1s'; +?set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'?; +set default_transaction_isolation = 'serializable'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to?'1s'; +set default_transaction_isolation =?'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout to '1s'; +-/set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'-/; +set default_transaction_isolation = 'serializable'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-/'1s'; +set default_transaction_isolation =-/'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout to '1s'; +/#set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'/#; +set default_transaction_isolation = 'serializable'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/#'1s'; +set default_transaction_isolation =/#'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout to '1s'; +/-set default_transaction_isolation = 'serializable'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '1s'/-; +set default_transaction_isolation = 'serializable'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/-'1s'; +set default_transaction_isolation =/-'serializable'; NEW_CONNECTION; -set statement_timeout to '100ms'; +set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; -SET STATEMENT_TIMEOUT TO '100MS'; +SET DEFAULT_TRANSACTION_ISOLATION = "SERIALIZABLE"; NEW_CONNECTION; -set statement_timeout to '100ms'; +set default_transaction_isolation = "serializable"; NEW_CONNECTION; - set statement_timeout to '100ms'; + set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; - set statement_timeout to '100ms'; + set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; -set statement_timeout to '100ms'; +set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; -set statement_timeout to '100ms' ; +set default_transaction_isolation = "SERIALIZABLE" ; NEW_CONNECTION; -set statement_timeout to '100ms' ; +set default_transaction_isolation = "SERIALIZABLE" ; NEW_CONNECTION; -set statement_timeout to '100ms' +set default_transaction_isolation = "SERIALIZABLE" ; NEW_CONNECTION; -set statement_timeout to '100ms'; +set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; -set statement_timeout to '100ms'; +set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; set -statement_timeout -to -'100ms'; +default_transaction_isolation += +"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout to '100ms'; +foo set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms' bar; +set default_transaction_isolation = "SERIALIZABLE" bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout to '100ms'; +%set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'%; +set default_transaction_isolation = "SERIALIZABLE"%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to%'100ms'; +set default_transaction_isolation =%"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout to '100ms'; +_set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'_; +set default_transaction_isolation = "SERIALIZABLE"_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to_'100ms'; +set default_transaction_isolation =_"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout to '100ms'; +&set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'&; +set default_transaction_isolation = "SERIALIZABLE"&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to&'100ms'; +set default_transaction_isolation =&"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout to '100ms'; +$set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'$; +set default_transaction_isolation = "SERIALIZABLE"$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to$'100ms'; +set default_transaction_isolation =$"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout to '100ms'; +@set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'@; +set default_transaction_isolation = "SERIALIZABLE"@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to@'100ms'; +set default_transaction_isolation =@"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout to '100ms'; +!set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'!; +set default_transaction_isolation = "SERIALIZABLE"!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to!'100ms'; +set default_transaction_isolation =!"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout to '100ms'; +*set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'*; +set default_transaction_isolation = "SERIALIZABLE"*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to*'100ms'; +set default_transaction_isolation =*"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout to '100ms'; +(set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'(; +set default_transaction_isolation = "SERIALIZABLE"(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to('100ms'; +set default_transaction_isolation =("SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout to '100ms'; +)set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'); +set default_transaction_isolation = "SERIALIZABLE"); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to)'100ms'; +set default_transaction_isolation =)"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout to '100ms'; +-set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'-; +set default_transaction_isolation = "SERIALIZABLE"-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-'100ms'; +set default_transaction_isolation =-"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout to '100ms'; ++set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'+; +set default_transaction_isolation = "SERIALIZABLE"+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to+'100ms'; +set default_transaction_isolation =+"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout to '100ms'; +-#set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'-#; +set default_transaction_isolation = "SERIALIZABLE"-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-#'100ms'; +set default_transaction_isolation =-#"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout to '100ms'; +/set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'/; +set default_transaction_isolation = "SERIALIZABLE"/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/'100ms'; +set default_transaction_isolation =/"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout to '100ms'; +\set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'\; +set default_transaction_isolation = "SERIALIZABLE"\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to\'100ms'; +set default_transaction_isolation =\"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout to '100ms'; +?set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'?; +set default_transaction_isolation = "SERIALIZABLE"?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to?'100ms'; +set default_transaction_isolation =?"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout to '100ms'; +-/set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'-/; +set default_transaction_isolation = "SERIALIZABLE"-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-/'100ms'; +set default_transaction_isolation =-/"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout to '100ms'; +/#set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'/#; +set default_transaction_isolation = "SERIALIZABLE"/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/#'100ms'; +set default_transaction_isolation =/#"SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout to '100ms'; +/-set default_transaction_isolation = "SERIALIZABLE"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '100ms'/-; +set default_transaction_isolation = "SERIALIZABLE"/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/-'100ms'; +set default_transaction_isolation =/-"SERIALIZABLE"; NEW_CONNECTION; -set statement_timeout to 100; +set default_transaction_isolation=repeatable read; NEW_CONNECTION; -SET STATEMENT_TIMEOUT TO 100; +SET DEFAULT_TRANSACTION_ISOLATION=REPEATABLE READ; NEW_CONNECTION; -set statement_timeout to 100; +set default_transaction_isolation=repeatable read; NEW_CONNECTION; - set statement_timeout to 100; + set default_transaction_isolation=repeatable read; NEW_CONNECTION; - set statement_timeout to 100; + set default_transaction_isolation=repeatable read; NEW_CONNECTION; -set statement_timeout to 100; +set default_transaction_isolation=repeatable read; NEW_CONNECTION; -set statement_timeout to 100 ; +set default_transaction_isolation=repeatable read ; NEW_CONNECTION; -set statement_timeout to 100 ; +set default_transaction_isolation=repeatable read ; NEW_CONNECTION; -set statement_timeout to 100 +set default_transaction_isolation=repeatable read ; NEW_CONNECTION; -set statement_timeout to 100; +set default_transaction_isolation=repeatable read; NEW_CONNECTION; -set statement_timeout to 100; +set default_transaction_isolation=repeatable read; NEW_CONNECTION; set -statement_timeout -to -100; +default_transaction_isolation=repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout to 100; +foo set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100 bar; +set default_transaction_isolation=repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout to 100; +%set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100%; +set default_transaction_isolation=repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to%100; +set default_transaction_isolation=repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout to 100; +_set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100_; +set default_transaction_isolation=repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to_100; +set default_transaction_isolation=repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout to 100; +&set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100&; +set default_transaction_isolation=repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to&100; +set default_transaction_isolation=repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout to 100; +$set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100$; +set default_transaction_isolation=repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to$100; +set default_transaction_isolation=repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout to 100; +@set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100@; +set default_transaction_isolation=repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to@100; +set default_transaction_isolation=repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout to 100; +!set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100!; +set default_transaction_isolation=repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to!100; +set default_transaction_isolation=repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout to 100; +*set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100*; +set default_transaction_isolation=repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to*100; +set default_transaction_isolation=repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout to 100; +(set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100(; +set default_transaction_isolation=repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to(100; +set default_transaction_isolation=repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout to 100; +)set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100); +set default_transaction_isolation=repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to)100; +set default_transaction_isolation=repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout to 100; +-set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100-; +set default_transaction_isolation=repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-100; +set default_transaction_isolation=repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout to 100; ++set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100+; +set default_transaction_isolation=repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to+100; +set default_transaction_isolation=repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout to 100; +-#set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100-#; +set default_transaction_isolation=repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-#100; +set default_transaction_isolation=repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout to 100; +/set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100/; +set default_transaction_isolation=repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/100; +set default_transaction_isolation=repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout to 100; +\set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100\; +set default_transaction_isolation=repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to\100; +set default_transaction_isolation=repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout to 100; +?set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100?; +set default_transaction_isolation=repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to?100; +set default_transaction_isolation=repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout to 100; +-/set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100-/; +set default_transaction_isolation=repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-/100; +set default_transaction_isolation=repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout to 100; +/#set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100/#; +set default_transaction_isolation=repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/#100; +set default_transaction_isolation=repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout to 100; +/-set default_transaction_isolation=repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to 100/-; +set default_transaction_isolation=repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/-100; +set default_transaction_isolation=repeatable/-read; NEW_CONNECTION; -set statement_timeout to '10000us'; +set default_transaction_isolation to repeatable read; NEW_CONNECTION; -SET STATEMENT_TIMEOUT TO '10000US'; +SET DEFAULT_TRANSACTION_ISOLATION TO REPEATABLE READ; NEW_CONNECTION; -set statement_timeout to '10000us'; +set default_transaction_isolation to repeatable read; NEW_CONNECTION; - set statement_timeout to '10000us'; + set default_transaction_isolation to repeatable read; NEW_CONNECTION; - set statement_timeout to '10000us'; + set default_transaction_isolation to repeatable read; NEW_CONNECTION; -set statement_timeout to '10000us'; +set default_transaction_isolation to repeatable read; NEW_CONNECTION; -set statement_timeout to '10000us' ; +set default_transaction_isolation to repeatable read ; NEW_CONNECTION; -set statement_timeout to '10000us' ; +set default_transaction_isolation to repeatable read ; NEW_CONNECTION; -set statement_timeout to '10000us' +set default_transaction_isolation to repeatable read ; NEW_CONNECTION; -set statement_timeout to '10000us'; +set default_transaction_isolation to repeatable read; NEW_CONNECTION; -set statement_timeout to '10000us'; +set default_transaction_isolation to repeatable read; NEW_CONNECTION; set -statement_timeout +default_transaction_isolation to -'10000us'; +repeatable +read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout to '10000us'; +foo set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us' bar; +set default_transaction_isolation to repeatable read bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout to '10000us'; +%set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'%; +set default_transaction_isolation to repeatable read%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to%'10000us'; +set default_transaction_isolation to repeatable%read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout to '10000us'; +_set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'_; +set default_transaction_isolation to repeatable read_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to_'10000us'; +set default_transaction_isolation to repeatable_read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout to '10000us'; +&set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'&; +set default_transaction_isolation to repeatable read&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to&'10000us'; +set default_transaction_isolation to repeatable&read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout to '10000us'; +$set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'$; +set default_transaction_isolation to repeatable read$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to$'10000us'; +set default_transaction_isolation to repeatable$read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout to '10000us'; +@set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'@; +set default_transaction_isolation to repeatable read@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to@'10000us'; +set default_transaction_isolation to repeatable@read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout to '10000us'; +!set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'!; +set default_transaction_isolation to repeatable read!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to!'10000us'; +set default_transaction_isolation to repeatable!read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout to '10000us'; +*set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'*; +set default_transaction_isolation to repeatable read*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to*'10000us'; +set default_transaction_isolation to repeatable*read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout to '10000us'; +(set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'(; +set default_transaction_isolation to repeatable read(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to('10000us'; +set default_transaction_isolation to repeatable(read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout to '10000us'; +)set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'); +set default_transaction_isolation to repeatable read); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to)'10000us'; +set default_transaction_isolation to repeatable)read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout to '10000us'; +-set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'-; +set default_transaction_isolation to repeatable read-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-'10000us'; +set default_transaction_isolation to repeatable-read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout to '10000us'; ++set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'+; +set default_transaction_isolation to repeatable read+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to+'10000us'; +set default_transaction_isolation to repeatable+read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout to '10000us'; +-#set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'-#; +set default_transaction_isolation to repeatable read-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-#'10000us'; +set default_transaction_isolation to repeatable-#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout to '10000us'; +/set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'/; +set default_transaction_isolation to repeatable read/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/'10000us'; +set default_transaction_isolation to repeatable/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout to '10000us'; +\set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'\; +set default_transaction_isolation to repeatable read\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to\'10000us'; +set default_transaction_isolation to repeatable\read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout to '10000us'; +?set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'?; +set default_transaction_isolation to repeatable read?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to?'10000us'; +set default_transaction_isolation to repeatable?read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout to '10000us'; +-/set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'-/; +set default_transaction_isolation to repeatable read-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-/'10000us'; +set default_transaction_isolation to repeatable-/read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout to '10000us'; +/#set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'/#; +set default_transaction_isolation to repeatable read/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/#'10000us'; +set default_transaction_isolation to repeatable/#read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout to '10000us'; +/-set default_transaction_isolation to repeatable read; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '10000us'/-; +set default_transaction_isolation to repeatable read/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/-'10000us'; +set default_transaction_isolation to repeatable/-read; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns'; +set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; -SET STATEMENT_TIMEOUT TO '9223372036854775807NS'; +SET DEFAULT_TRANSACTION_ISOLATION TO 'REPEATABLE READ'; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns'; +set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; - set statement_timeout to '9223372036854775807ns'; + set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; - set statement_timeout to '9223372036854775807ns'; + set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns'; +set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns' ; +set default_transaction_isolation to 'repeatable read' ; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns' ; +set default_transaction_isolation to 'repeatable read' ; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns' +set default_transaction_isolation to 'repeatable read' ; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns'; +set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; -set statement_timeout to '9223372036854775807ns'; +set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; set -statement_timeout +default_transaction_isolation to -'9223372036854775807ns'; +'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set statement_timeout to '9223372036854775807ns'; +foo set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns' bar; +set default_transaction_isolation to 'repeatable read' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set statement_timeout to '9223372036854775807ns'; +%set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'%; +set default_transaction_isolation to 'repeatable read'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to%'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable%read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set statement_timeout to '9223372036854775807ns'; +_set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'_; +set default_transaction_isolation to 'repeatable read'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to_'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable_read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set statement_timeout to '9223372036854775807ns'; +&set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'&; +set default_transaction_isolation to 'repeatable read'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to&'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable&read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set statement_timeout to '9223372036854775807ns'; +$set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'$; +set default_transaction_isolation to 'repeatable read'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to$'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable$read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set statement_timeout to '9223372036854775807ns'; +@set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'@; +set default_transaction_isolation to 'repeatable read'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to@'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable@read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set statement_timeout to '9223372036854775807ns'; +!set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'!; +set default_transaction_isolation to 'repeatable read'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to!'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable!read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set statement_timeout to '9223372036854775807ns'; +*set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'*; +set default_transaction_isolation to 'repeatable read'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to*'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable*read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set statement_timeout to '9223372036854775807ns'; +(set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'(; +set default_transaction_isolation to 'repeatable read'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to('9223372036854775807ns'; +set default_transaction_isolation to 'repeatable(read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set statement_timeout to '9223372036854775807ns'; +)set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'); +set default_transaction_isolation to 'repeatable read'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to)'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable)read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set statement_timeout to '9223372036854775807ns'; +-set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'-; +set default_transaction_isolation to 'repeatable read'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable-read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set statement_timeout to '9223372036854775807ns'; ++set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'+; +set default_transaction_isolation to 'repeatable read'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to+'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable+read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set statement_timeout to '9223372036854775807ns'; +-#set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'-#; +set default_transaction_isolation to 'repeatable read'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-#'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable-#read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set statement_timeout to '9223372036854775807ns'; +/set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'/; +set default_transaction_isolation to 'repeatable read'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable/read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set statement_timeout to '9223372036854775807ns'; +\set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'\; +set default_transaction_isolation to 'repeatable read'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to\'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable\read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set statement_timeout to '9223372036854775807ns'; +?set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'?; +set default_transaction_isolation to 'repeatable read'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to?'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable?read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set statement_timeout to '9223372036854775807ns'; +-/set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'-/; +set default_transaction_isolation to 'repeatable read'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to-/'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable-/read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set statement_timeout to '9223372036854775807ns'; +/#set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'/#; +set default_transaction_isolation to 'repeatable read'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/#'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable/#read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set statement_timeout to '9223372036854775807ns'; +/-set default_transaction_isolation to 'repeatable read'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to '9223372036854775807ns'/-; +set default_transaction_isolation to 'repeatable read'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set statement_timeout to/-'9223372036854775807ns'; +set default_transaction_isolation to 'repeatable/-read'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION READ ONLY; +SET DEFAULT_TRANSACTION_ISOLATION = 'REPEATABLE READ'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; - set transaction read only; + set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; - set transaction read only; + set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; -set transaction read only ; +set default_transaction_isolation = 'repeatable read' ; NEW_CONNECTION; -set autocommit = false; -set transaction read only ; +set default_transaction_isolation = 'repeatable read' ; NEW_CONNECTION; -set autocommit = false; -set transaction read only +set default_transaction_isolation = 'repeatable read' ; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; -set transaction read only; +set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; set -transaction -read -only; +default_transaction_isolation += +'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction read only; +foo set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only bar; +set default_transaction_isolation = 'repeatable read' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction read only; +%set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only%; +set default_transaction_isolation = 'repeatable read'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read%only; +set default_transaction_isolation = 'repeatable%read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction read only; +_set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only_; +set default_transaction_isolation = 'repeatable read'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read_only; +set default_transaction_isolation = 'repeatable_read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction read only; +&set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only&; +set default_transaction_isolation = 'repeatable read'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read&only; +set default_transaction_isolation = 'repeatable&read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction read only; +$set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only$; +set default_transaction_isolation = 'repeatable read'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read$only; +set default_transaction_isolation = 'repeatable$read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction read only; +@set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only@; +set default_transaction_isolation = 'repeatable read'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read@only; +set default_transaction_isolation = 'repeatable@read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction read only; +!set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only!; +set default_transaction_isolation = 'repeatable read'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read!only; +set default_transaction_isolation = 'repeatable!read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction read only; +*set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only*; +set default_transaction_isolation = 'repeatable read'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read*only; +set default_transaction_isolation = 'repeatable*read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction read only; +(set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only(; +set default_transaction_isolation = 'repeatable read'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read(only; +set default_transaction_isolation = 'repeatable(read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction read only; +)set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only); +set default_transaction_isolation = 'repeatable read'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read)only; +set default_transaction_isolation = 'repeatable)read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction read only; +-set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only-; +set default_transaction_isolation = 'repeatable read'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-only; +set default_transaction_isolation = 'repeatable-read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction read only; ++set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only+; +set default_transaction_isolation = 'repeatable read'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read+only; +set default_transaction_isolation = 'repeatable+read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction read only; +-#set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only-#; +set default_transaction_isolation = 'repeatable read'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-#only; +set default_transaction_isolation = 'repeatable-#read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction read only; +/set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only/; +set default_transaction_isolation = 'repeatable read'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/only; +set default_transaction_isolation = 'repeatable/read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction read only; +\set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only\; +set default_transaction_isolation = 'repeatable read'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read\only; +set default_transaction_isolation = 'repeatable\read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction read only; +?set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only?; +set default_transaction_isolation = 'repeatable read'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read?only; +set default_transaction_isolation = 'repeatable?read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction read only; +-/set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only-/; +set default_transaction_isolation = 'repeatable read'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-/only; +set default_transaction_isolation = 'repeatable-/read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction read only; +/#set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only/#; +set default_transaction_isolation = 'repeatable read'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/#only; +set default_transaction_isolation = 'repeatable/#read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction read only; +/-set default_transaction_isolation = 'repeatable read'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read only/-; +set default_transaction_isolation = 'repeatable read'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/-only; +set default_transaction_isolation = 'repeatable/-read'; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION READ WRITE; +SET DEFAULT_TRANSACTION_ISOLATION = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set default_transaction_isolation = "repeatable read"; NEW_CONNECTION; -set autocommit = false; - set transaction read write; + set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; - set transaction read write; + set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; -set transaction read write ; +set default_transaction_isolation = "REPEATABLE READ" ; NEW_CONNECTION; -set autocommit = false; -set transaction read write ; +set default_transaction_isolation = "REPEATABLE READ" ; NEW_CONNECTION; -set autocommit = false; -set transaction read write +set default_transaction_isolation = "REPEATABLE READ" ; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; -set transaction read write; +set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; set -transaction -read -write; +default_transaction_isolation += +"REPEATABLE +READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction read write; +foo set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write bar; +set default_transaction_isolation = "REPEATABLE READ" bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction read write; +%set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write%; +set default_transaction_isolation = "REPEATABLE READ"%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read%write; +set default_transaction_isolation = "REPEATABLE%READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction read write; +_set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write_; +set default_transaction_isolation = "REPEATABLE READ"_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read_write; +set default_transaction_isolation = "REPEATABLE_READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction read write; +&set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write&; +set default_transaction_isolation = "REPEATABLE READ"&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read&write; +set default_transaction_isolation = "REPEATABLE&READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction read write; +$set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write$; +set default_transaction_isolation = "REPEATABLE READ"$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read$write; +set default_transaction_isolation = "REPEATABLE$READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction read write; +@set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write@; +set default_transaction_isolation = "REPEATABLE READ"@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read@write; +set default_transaction_isolation = "REPEATABLE@READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction read write; +!set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write!; +set default_transaction_isolation = "REPEATABLE READ"!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read!write; +set default_transaction_isolation = "REPEATABLE!READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction read write; +*set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write*; +set default_transaction_isolation = "REPEATABLE READ"*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read*write; +set default_transaction_isolation = "REPEATABLE*READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction read write; +(set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write(; +set default_transaction_isolation = "REPEATABLE READ"(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read(write; +set default_transaction_isolation = "REPEATABLE(READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction read write; +)set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write); +set default_transaction_isolation = "REPEATABLE READ"); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read)write; +set default_transaction_isolation = "REPEATABLE)READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction read write; +-set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write-; +set default_transaction_isolation = "REPEATABLE READ"-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-write; +set default_transaction_isolation = "REPEATABLE-READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction read write; ++set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write+; +set default_transaction_isolation = "REPEATABLE READ"+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read+write; +set default_transaction_isolation = "REPEATABLE+READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction read write; +-#set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write-#; +set default_transaction_isolation = "REPEATABLE READ"-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-#write; +set default_transaction_isolation = "REPEATABLE-#READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction read write; +/set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write/; +set default_transaction_isolation = "REPEATABLE READ"/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/write; +set default_transaction_isolation = "REPEATABLE/READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction read write; +\set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write\; +set default_transaction_isolation = "REPEATABLE READ"\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read\write; +set default_transaction_isolation = "REPEATABLE\READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction read write; +?set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write?; +set default_transaction_isolation = "REPEATABLE READ"?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read?write; +set default_transaction_isolation = "REPEATABLE?READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction read write; +-/set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write-/; +set default_transaction_isolation = "REPEATABLE READ"-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read-/write; +set default_transaction_isolation = "REPEATABLE-/READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction read write; +/#set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write/#; +set default_transaction_isolation = "REPEATABLE READ"/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/#write; +set default_transaction_isolation = "REPEATABLE/#READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction read write; +/-set default_transaction_isolation = "REPEATABLE READ"; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read write/-; +set default_transaction_isolation = "REPEATABLE READ"/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction read/-write; +set default_transaction_isolation = "REPEATABLE/-READ"; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default; +set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION ISOLATION LEVEL DEFAULT; +SET DEFAULT_TRANSACTION_ISOLATION = DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default; +set default_transaction_isolation = default; NEW_CONNECTION; -set autocommit = false; - set transaction isolation level default; + set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; - set transaction isolation level default; + set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default; +set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default ; +set default_transaction_isolation = DEFAULT ; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default ; +set default_transaction_isolation = DEFAULT ; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default +set default_transaction_isolation = DEFAULT ; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default; +set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level default; +set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; set -transaction -isolation -level -default; +default_transaction_isolation += +DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction isolation level default; +foo set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default bar; +set default_transaction_isolation = DEFAULT bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction isolation level default; +%set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default%; +set default_transaction_isolation = DEFAULT%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level%default; +set default_transaction_isolation =%DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction isolation level default; +_set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default_; +set default_transaction_isolation = DEFAULT_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level_default; +set default_transaction_isolation =_DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction isolation level default; +&set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default&; +set default_transaction_isolation = DEFAULT&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level&default; +set default_transaction_isolation =&DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction isolation level default; +$set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default$; +set default_transaction_isolation = DEFAULT$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level$default; +set default_transaction_isolation =$DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction isolation level default; +@set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default@; +set default_transaction_isolation = DEFAULT@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level@default; +set default_transaction_isolation =@DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction isolation level default; +!set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default!; +set default_transaction_isolation = DEFAULT!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level!default; +set default_transaction_isolation =!DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction isolation level default; +*set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default*; +set default_transaction_isolation = DEFAULT*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level*default; +set default_transaction_isolation =*DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction isolation level default; +(set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default(; +set default_transaction_isolation = DEFAULT(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level(default; +set default_transaction_isolation =(DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction isolation level default; +)set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default); +set default_transaction_isolation = DEFAULT); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level)default; +set default_transaction_isolation =)DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction isolation level default; +-set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default-; +set default_transaction_isolation = DEFAULT-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level-default; +set default_transaction_isolation =-DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction isolation level default; ++set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default+; +set default_transaction_isolation = DEFAULT+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level+default; +set default_transaction_isolation =+DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction isolation level default; +-#set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default-#; +set default_transaction_isolation = DEFAULT-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level-#default; +set default_transaction_isolation =-#DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction isolation level default; +/set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default/; +set default_transaction_isolation = DEFAULT/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level/default; +set default_transaction_isolation =/DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction isolation level default; +\set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default\; +set default_transaction_isolation = DEFAULT\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level\default; +set default_transaction_isolation =\DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction isolation level default; +?set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default?; +set default_transaction_isolation = DEFAULT?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level?default; +set default_transaction_isolation =?DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction isolation level default; +-/set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default-/; +set default_transaction_isolation = DEFAULT-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level-/default; +set default_transaction_isolation =-/DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction isolation level default; +/#set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default/#; +set default_transaction_isolation = DEFAULT/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level/#default; +set default_transaction_isolation =/#DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction isolation level default; +/-set default_transaction_isolation = DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level default/-; +set default_transaction_isolation = DEFAULT/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level/-default; +set default_transaction_isolation =/-DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable; +set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; -SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; +SET DEFAULT_TRANSACTION_ISOLATION TO DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable; +set default_transaction_isolation to default; NEW_CONNECTION; -set autocommit = false; - set transaction isolation level serializable; + set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; - set transaction isolation level serializable; + set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable; +set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable ; +set default_transaction_isolation to DEFAULT ; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable ; +set default_transaction_isolation to DEFAULT ; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable +set default_transaction_isolation to DEFAULT ; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable; +set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; -set transaction isolation level serializable; +set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; set -transaction -isolation -level -serializable; +default_transaction_isolation +to +DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set transaction isolation level serializable; +foo set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable bar; +set default_transaction_isolation to DEFAULT bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set transaction isolation level serializable; +%set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable%; +set default_transaction_isolation to DEFAULT%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level%serializable; +set default_transaction_isolation to%DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set transaction isolation level serializable; +_set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable_; +set default_transaction_isolation to DEFAULT_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level_serializable; +set default_transaction_isolation to_DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set transaction isolation level serializable; +&set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable&; +set default_transaction_isolation to DEFAULT&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level&serializable; +set default_transaction_isolation to&DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set transaction isolation level serializable; +$set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable$; +set default_transaction_isolation to DEFAULT$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level$serializable; +set default_transaction_isolation to$DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set transaction isolation level serializable; +@set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable@; +set default_transaction_isolation to DEFAULT@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level@serializable; +set default_transaction_isolation to@DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set transaction isolation level serializable; +!set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable!; +set default_transaction_isolation to DEFAULT!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level!serializable; +set default_transaction_isolation to!DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set transaction isolation level serializable; +*set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable*; +set default_transaction_isolation to DEFAULT*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level*serializable; +set default_transaction_isolation to*DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set transaction isolation level serializable; +(set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable(; +set default_transaction_isolation to DEFAULT(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level(serializable; +set default_transaction_isolation to(DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set transaction isolation level serializable; +)set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable); +set default_transaction_isolation to DEFAULT); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level)serializable; +set default_transaction_isolation to)DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set transaction isolation level serializable; +-set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable-; +set default_transaction_isolation to DEFAULT-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level-serializable; +set default_transaction_isolation to-DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set transaction isolation level serializable; ++set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable+; +set default_transaction_isolation to DEFAULT+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level+serializable; +set default_transaction_isolation to+DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set transaction isolation level serializable; +-#set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable-#; +set default_transaction_isolation to DEFAULT-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level-#serializable; +set default_transaction_isolation to-#DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set transaction isolation level serializable; +/set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable/; +set default_transaction_isolation to DEFAULT/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level/serializable; +set default_transaction_isolation to/DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set transaction isolation level serializable; +\set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable\; +set default_transaction_isolation to DEFAULT\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level\serializable; +set default_transaction_isolation to\DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set transaction isolation level serializable; +?set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable?; +set default_transaction_isolation to DEFAULT?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level?serializable; +set default_transaction_isolation to?DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set transaction isolation level serializable; +-/set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable-/; +set default_transaction_isolation to DEFAULT-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level-/serializable; +set default_transaction_isolation to-/DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set transaction isolation level serializable; +/#set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable/#; +set default_transaction_isolation to DEFAULT/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level/#serializable; +set default_transaction_isolation to/#DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set transaction isolation level serializable; +/-set default_transaction_isolation to DEFAULT; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level serializable/-; +set default_transaction_isolation to DEFAULT/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set transaction isolation level/-serializable; +set default_transaction_isolation to/-DEFAULT; NEW_CONNECTION; -set session characteristics as transaction read only; +set default_transaction_read_only = true; NEW_CONNECTION; -SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY; +SET DEFAULT_TRANSACTION_READ_ONLY = TRUE; NEW_CONNECTION; -set session characteristics as transaction read only; +set default_transaction_read_only = true; NEW_CONNECTION; - set session characteristics as transaction read only; + set default_transaction_read_only = true; NEW_CONNECTION; - set session characteristics as transaction read only; + set default_transaction_read_only = true; NEW_CONNECTION; -set session characteristics as transaction read only; +set default_transaction_read_only = true; NEW_CONNECTION; -set session characteristics as transaction read only ; +set default_transaction_read_only = true ; NEW_CONNECTION; -set session characteristics as transaction read only ; +set default_transaction_read_only = true ; NEW_CONNECTION; -set session characteristics as transaction read only +set default_transaction_read_only = true ; NEW_CONNECTION; -set session characteristics as transaction read only; +set default_transaction_read_only = true; NEW_CONNECTION; -set session characteristics as transaction read only; +set default_transaction_read_only = true; NEW_CONNECTION; set -session -characteristics -as -transaction -read -only; +default_transaction_read_only += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session characteristics as transaction read only; +foo set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only bar; +set default_transaction_read_only = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session characteristics as transaction read only; +%set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only%; +set default_transaction_read_only = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read%only; +set default_transaction_read_only =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session characteristics as transaction read only; +_set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only_; +set default_transaction_read_only = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read_only; +set default_transaction_read_only =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session characteristics as transaction read only; +&set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only&; +set default_transaction_read_only = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read&only; +set default_transaction_read_only =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session characteristics as transaction read only; +$set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only$; +set default_transaction_read_only = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read$only; +set default_transaction_read_only =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session characteristics as transaction read only; +@set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only@; +set default_transaction_read_only = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read@only; +set default_transaction_read_only =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session characteristics as transaction read only; +!set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only!; +set default_transaction_read_only = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read!only; +set default_transaction_read_only =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session characteristics as transaction read only; +*set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only*; +set default_transaction_read_only = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read*only; +set default_transaction_read_only =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session characteristics as transaction read only; +(set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only(; +set default_transaction_read_only = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read(only; +set default_transaction_read_only =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session characteristics as transaction read only; +)set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only); +set default_transaction_read_only = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read)only; +set default_transaction_read_only =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set session characteristics as transaction read only; +-set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only-; +set default_transaction_read_only = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read-only; +set default_transaction_read_only =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session characteristics as transaction read only; ++set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only+; +set default_transaction_read_only = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read+only; +set default_transaction_read_only =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session characteristics as transaction read only; +-#set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only-#; +set default_transaction_read_only = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read-#only; +set default_transaction_read_only =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session characteristics as transaction read only; +/set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only/; +set default_transaction_read_only = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read/only; +set default_transaction_read_only =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session characteristics as transaction read only; +\set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only\; +set default_transaction_read_only = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read\only; +set default_transaction_read_only =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session characteristics as transaction read only; +?set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only?; +set default_transaction_read_only = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read?only; +set default_transaction_read_only =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session characteristics as transaction read only; +-/set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only-/; +set default_transaction_read_only = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read-/only; +set default_transaction_read_only =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session characteristics as transaction read only; +/#set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only/#; +set default_transaction_read_only = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read/#only; +set default_transaction_read_only =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session characteristics as transaction read only; +/-set default_transaction_read_only = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read only/-; +set default_transaction_read_only = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read/-only; +set default_transaction_read_only =/-true; NEW_CONNECTION; -set session characteristics as transaction read write; +set default_transaction_read_only = false; NEW_CONNECTION; -SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE; +SET DEFAULT_TRANSACTION_READ_ONLY = FALSE; NEW_CONNECTION; -set session characteristics as transaction read write; +set default_transaction_read_only = false; NEW_CONNECTION; - set session characteristics as transaction read write; + set default_transaction_read_only = false; NEW_CONNECTION; - set session characteristics as transaction read write; + set default_transaction_read_only = false; NEW_CONNECTION; -set session characteristics as transaction read write; +set default_transaction_read_only = false; NEW_CONNECTION; -set session characteristics as transaction read write ; +set default_transaction_read_only = false ; NEW_CONNECTION; -set session characteristics as transaction read write ; +set default_transaction_read_only = false ; NEW_CONNECTION; -set session characteristics as transaction read write +set default_transaction_read_only = false ; NEW_CONNECTION; -set session characteristics as transaction read write; +set default_transaction_read_only = false; NEW_CONNECTION; -set session characteristics as transaction read write; +set default_transaction_read_only = false; NEW_CONNECTION; set -session -characteristics -as -transaction -read -write; +default_transaction_read_only += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session characteristics as transaction read write; +foo set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write bar; +set default_transaction_read_only = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session characteristics as transaction read write; +%set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write%; +set default_transaction_read_only = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read%write; +set default_transaction_read_only =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session characteristics as transaction read write; +_set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write_; +set default_transaction_read_only = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read_write; +set default_transaction_read_only =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session characteristics as transaction read write; +&set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write&; +set default_transaction_read_only = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read&write; +set default_transaction_read_only =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session characteristics as transaction read write; +$set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write$; +set default_transaction_read_only = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read$write; +set default_transaction_read_only =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session characteristics as transaction read write; +@set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write@; +set default_transaction_read_only = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read@write; +set default_transaction_read_only =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session characteristics as transaction read write; +!set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write!; +set default_transaction_read_only = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read!write; +set default_transaction_read_only =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session characteristics as transaction read write; +*set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write*; +set default_transaction_read_only = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read*write; +set default_transaction_read_only =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session characteristics as transaction read write; +(set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write(; +set default_transaction_read_only = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read(write; +set default_transaction_read_only =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session characteristics as transaction read write; +)set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write); +set default_transaction_read_only = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read)write; +set default_transaction_read_only =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set session characteristics as transaction read write; +-set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write-; +set default_transaction_read_only = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read-write; +set default_transaction_read_only =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session characteristics as transaction read write; ++set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write+; +set default_transaction_read_only = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read+write; +set default_transaction_read_only =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session characteristics as transaction read write; +-#set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write-#; +set default_transaction_read_only = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read-#write; +set default_transaction_read_only =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session characteristics as transaction read write; +/set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write/; +set default_transaction_read_only = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read/write; +set default_transaction_read_only =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session characteristics as transaction read write; +\set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write\; +set default_transaction_read_only = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read\write; +set default_transaction_read_only =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session characteristics as transaction read write; +?set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write?; +set default_transaction_read_only = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read?write; +set default_transaction_read_only =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session characteristics as transaction read write; +-/set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write-/; +set default_transaction_read_only = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read-/write; +set default_transaction_read_only =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session characteristics as transaction read write; +/#set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write/#; +set default_transaction_read_only = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read/#write; +set default_transaction_read_only =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session characteristics as transaction read write; +/-set default_transaction_read_only = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read write/-; +set default_transaction_read_only = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction read/-write; +set default_transaction_read_only =/-false; NEW_CONNECTION; -set session characteristics as transaction isolation level default; +set default_transaction_read_only = t; NEW_CONNECTION; -SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL DEFAULT; +SET DEFAULT_TRANSACTION_READ_ONLY = T; NEW_CONNECTION; -set session characteristics as transaction isolation level default; +set default_transaction_read_only = t; NEW_CONNECTION; - set session characteristics as transaction isolation level default; + set default_transaction_read_only = t; NEW_CONNECTION; - set session characteristics as transaction isolation level default; + set default_transaction_read_only = t; NEW_CONNECTION; -set session characteristics as transaction isolation level default; +set default_transaction_read_only = t; NEW_CONNECTION; -set session characteristics as transaction isolation level default ; +set default_transaction_read_only = t ; NEW_CONNECTION; -set session characteristics as transaction isolation level default ; +set default_transaction_read_only = t ; NEW_CONNECTION; -set session characteristics as transaction isolation level default +set default_transaction_read_only = t ; NEW_CONNECTION; -set session characteristics as transaction isolation level default; +set default_transaction_read_only = t; NEW_CONNECTION; -set session characteristics as transaction isolation level default; +set default_transaction_read_only = t; NEW_CONNECTION; set -session -characteristics -as -transaction -isolation -level -default; +default_transaction_read_only += +t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session characteristics as transaction isolation level default; +foo set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default bar; +set default_transaction_read_only = t bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session characteristics as transaction isolation level default; +%set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default%; +set default_transaction_read_only = t%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level%default; +set default_transaction_read_only =%t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session characteristics as transaction isolation level default; +_set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default_; +set default_transaction_read_only = t_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level_default; +set default_transaction_read_only =_t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session characteristics as transaction isolation level default; +&set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default&; +set default_transaction_read_only = t&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level&default; +set default_transaction_read_only =&t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session characteristics as transaction isolation level default; +$set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default$; +set default_transaction_read_only = t$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level$default; +set default_transaction_read_only =$t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session characteristics as transaction isolation level default; +@set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default@; +set default_transaction_read_only = t@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level@default; +set default_transaction_read_only =@t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session characteristics as transaction isolation level default; +!set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default!; +set default_transaction_read_only = t!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level!default; +set default_transaction_read_only =!t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session characteristics as transaction isolation level default; +*set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default*; +set default_transaction_read_only = t*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level*default; +set default_transaction_read_only =*t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session characteristics as transaction isolation level default; +(set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default(; +set default_transaction_read_only = t(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level(default; +set default_transaction_read_only =(t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session characteristics as transaction isolation level default; +)set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default); +set default_transaction_read_only = t); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level)default; +set default_transaction_read_only =)t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set session characteristics as transaction isolation level default; +-set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default-; +set default_transaction_read_only = t-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level-default; +set default_transaction_read_only =-t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session characteristics as transaction isolation level default; ++set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default+; +set default_transaction_read_only = t+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level+default; +set default_transaction_read_only =+t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session characteristics as transaction isolation level default; +-#set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default-#; +set default_transaction_read_only = t-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level-#default; +set default_transaction_read_only =-#t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session characteristics as transaction isolation level default; +/set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default/; +set default_transaction_read_only = t/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level/default; +set default_transaction_read_only =/t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session characteristics as transaction isolation level default; +\set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default\; +set default_transaction_read_only = t\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level\default; +set default_transaction_read_only =\t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session characteristics as transaction isolation level default; +?set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default?; +set default_transaction_read_only = t?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level?default; +set default_transaction_read_only =?t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session characteristics as transaction isolation level default; +-/set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default-/; +set default_transaction_read_only = t-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level-/default; +set default_transaction_read_only =-/t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session characteristics as transaction isolation level default; +/#set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default/#; +set default_transaction_read_only = t/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level/#default; +set default_transaction_read_only =/#t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session characteristics as transaction isolation level default; +/-set default_transaction_read_only = t; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level default/-; +set default_transaction_read_only = t/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level/-default; +set default_transaction_read_only =/-t; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable; +set default_transaction_read_only = f; NEW_CONNECTION; -SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE; +SET DEFAULT_TRANSACTION_READ_ONLY = F; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable; +set default_transaction_read_only = f; NEW_CONNECTION; - set session characteristics as transaction isolation level serializable; + set default_transaction_read_only = f; NEW_CONNECTION; - set session characteristics as transaction isolation level serializable; + set default_transaction_read_only = f; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable; +set default_transaction_read_only = f; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable ; +set default_transaction_read_only = f ; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable ; +set default_transaction_read_only = f ; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable +set default_transaction_read_only = f ; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable; +set default_transaction_read_only = f; NEW_CONNECTION; -set session characteristics as transaction isolation level serializable; +set default_transaction_read_only = f; NEW_CONNECTION; set -session -characteristics -as -transaction -isolation -level -serializable; +default_transaction_read_only += +f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set session characteristics as transaction isolation level serializable; +foo set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable bar; +set default_transaction_read_only = f bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set session characteristics as transaction isolation level serializable; +%set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable%; +set default_transaction_read_only = f%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level%serializable; +set default_transaction_read_only =%f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set session characteristics as transaction isolation level serializable; +_set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable_; +set default_transaction_read_only = f_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level_serializable; +set default_transaction_read_only =_f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set session characteristics as transaction isolation level serializable; +&set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable&; +set default_transaction_read_only = f&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level&serializable; +set default_transaction_read_only =&f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set session characteristics as transaction isolation level serializable; +$set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable$; +set default_transaction_read_only = f$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level$serializable; +set default_transaction_read_only =$f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set session characteristics as transaction isolation level serializable; +@set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable@; +set default_transaction_read_only = f@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level@serializable; +set default_transaction_read_only =@f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set session characteristics as transaction isolation level serializable; +!set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable!; +set default_transaction_read_only = f!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level!serializable; +set default_transaction_read_only =!f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set session characteristics as transaction isolation level serializable; +*set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable*; +set default_transaction_read_only = f*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level*serializable; +set default_transaction_read_only =*f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set session characteristics as transaction isolation level serializable; +(set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable(; +set default_transaction_read_only = f(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level(serializable; +set default_transaction_read_only =(f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set session characteristics as transaction isolation level serializable; +)set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable); +set default_transaction_read_only = f); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level)serializable; +set default_transaction_read_only =)f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set session characteristics as transaction isolation level serializable; +-set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable-; +set default_transaction_read_only = f-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level-serializable; +set default_transaction_read_only =-f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set session characteristics as transaction isolation level serializable; ++set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable+; +set default_transaction_read_only = f+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level+serializable; +set default_transaction_read_only =+f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set session characteristics as transaction isolation level serializable; +-#set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable-#; +set default_transaction_read_only = f-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level-#serializable; +set default_transaction_read_only =-#f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set session characteristics as transaction isolation level serializable; +/set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable/; +set default_transaction_read_only = f/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level/serializable; +set default_transaction_read_only =/f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set session characteristics as transaction isolation level serializable; +\set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable\; +set default_transaction_read_only = f\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level\serializable; +set default_transaction_read_only =\f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set session characteristics as transaction isolation level serializable; +?set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable?; +set default_transaction_read_only = f?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level?serializable; +set default_transaction_read_only =?f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set session characteristics as transaction isolation level serializable; +-/set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable-/; +set default_transaction_read_only = f-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level-/serializable; +set default_transaction_read_only =-/f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set session characteristics as transaction isolation level serializable; +/#set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable/#; +set default_transaction_read_only = f/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level/#serializable; +set default_transaction_read_only =/#f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set session characteristics as transaction isolation level serializable; +/-set default_transaction_read_only = f; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level serializable/-; +set default_transaction_read_only = f/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set session characteristics as transaction isolation level/-serializable; +set default_transaction_read_only =/-f; NEW_CONNECTION; -set default_transaction_isolation=serializable; +set default_transaction_read_only to 't'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_ISOLATION=SERIALIZABLE; +SET DEFAULT_TRANSACTION_READ_ONLY TO 'T'; NEW_CONNECTION; -set default_transaction_isolation=serializable; +set default_transaction_read_only to 't'; NEW_CONNECTION; - set default_transaction_isolation=serializable; + set default_transaction_read_only to 't'; NEW_CONNECTION; - set default_transaction_isolation=serializable; + set default_transaction_read_only to 't'; NEW_CONNECTION; -set default_transaction_isolation=serializable; +set default_transaction_read_only to 't'; NEW_CONNECTION; -set default_transaction_isolation=serializable ; +set default_transaction_read_only to 't' ; NEW_CONNECTION; -set default_transaction_isolation=serializable ; +set default_transaction_read_only to 't' ; NEW_CONNECTION; -set default_transaction_isolation=serializable +set default_transaction_read_only to 't' ; NEW_CONNECTION; -set default_transaction_isolation=serializable; +set default_transaction_read_only to 't'; NEW_CONNECTION; -set default_transaction_isolation=serializable; +set default_transaction_read_only to 't'; NEW_CONNECTION; set -default_transaction_isolation=serializable; +default_transaction_read_only +to +'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_isolation=serializable; +foo set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable bar; +set default_transaction_read_only to 't' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_isolation=serializable; +%set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable%; +set default_transaction_read_only to 't'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%default_transaction_isolation=serializable; +set default_transaction_read_only to%'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_isolation=serializable; +_set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable_; +set default_transaction_read_only to 't'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_default_transaction_isolation=serializable; +set default_transaction_read_only to_'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_isolation=serializable; +&set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable&; +set default_transaction_read_only to 't'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&default_transaction_isolation=serializable; +set default_transaction_read_only to&'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_isolation=serializable; +$set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable$; +set default_transaction_read_only to 't'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$default_transaction_isolation=serializable; +set default_transaction_read_only to$'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_isolation=serializable; +@set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable@; +set default_transaction_read_only to 't'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@default_transaction_isolation=serializable; +set default_transaction_read_only to@'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_isolation=serializable; +!set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable!; +set default_transaction_read_only to 't'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!default_transaction_isolation=serializable; +set default_transaction_read_only to!'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_isolation=serializable; +*set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable*; +set default_transaction_read_only to 't'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*default_transaction_isolation=serializable; +set default_transaction_read_only to*'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_isolation=serializable; +(set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable(; +set default_transaction_read_only to 't'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(default_transaction_isolation=serializable; +set default_transaction_read_only to('t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_isolation=serializable; +)set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable); +set default_transaction_read_only to 't'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)default_transaction_isolation=serializable; +set default_transaction_read_only to)'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_isolation=serializable; +-set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable-; +set default_transaction_read_only to 't'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-default_transaction_isolation=serializable; +set default_transaction_read_only to-'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_isolation=serializable; ++set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable+; +set default_transaction_read_only to 't'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+default_transaction_isolation=serializable; +set default_transaction_read_only to+'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_isolation=serializable; +-#set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable-#; +set default_transaction_read_only to 't'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#default_transaction_isolation=serializable; +set default_transaction_read_only to-#'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_isolation=serializable; +/set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable/; +set default_transaction_read_only to 't'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/default_transaction_isolation=serializable; +set default_transaction_read_only to/'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_isolation=serializable; +\set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable\; +set default_transaction_read_only to 't'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\default_transaction_isolation=serializable; +set default_transaction_read_only to\'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_isolation=serializable; +?set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable?; +set default_transaction_read_only to 't'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?default_transaction_isolation=serializable; +set default_transaction_read_only to?'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_isolation=serializable; +-/set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable-/; +set default_transaction_read_only to 't'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/default_transaction_isolation=serializable; +set default_transaction_read_only to-/'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_isolation=serializable; +/#set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable/#; +set default_transaction_read_only to 't'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#default_transaction_isolation=serializable; +set default_transaction_read_only to/#'t'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_isolation=serializable; +/-set default_transaction_read_only to 't'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation=serializable/-; +set default_transaction_read_only to 't'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-default_transaction_isolation=serializable; +set default_transaction_read_only to/-'t'; NEW_CONNECTION; -set default_transaction_isolation to serializable; +set default_transaction_read_only to "f"; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_ISOLATION TO SERIALIZABLE; +SET DEFAULT_TRANSACTION_READ_ONLY TO "F"; NEW_CONNECTION; -set default_transaction_isolation to serializable; +set default_transaction_read_only to "f"; NEW_CONNECTION; - set default_transaction_isolation to serializable; + set default_transaction_read_only to "f"; NEW_CONNECTION; - set default_transaction_isolation to serializable; + set default_transaction_read_only to "f"; NEW_CONNECTION; -set default_transaction_isolation to serializable; +set default_transaction_read_only to "f"; NEW_CONNECTION; -set default_transaction_isolation to serializable ; +set default_transaction_read_only to "f" ; NEW_CONNECTION; -set default_transaction_isolation to serializable ; +set default_transaction_read_only to "f" ; NEW_CONNECTION; -set default_transaction_isolation to serializable +set default_transaction_read_only to "f" ; NEW_CONNECTION; -set default_transaction_isolation to serializable; +set default_transaction_read_only to "f"; NEW_CONNECTION; -set default_transaction_isolation to serializable; +set default_transaction_read_only to "f"; NEW_CONNECTION; set -default_transaction_isolation +default_transaction_read_only to -serializable; +"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_isolation to serializable; +foo set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable bar; +set default_transaction_read_only to "f" bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_isolation to serializable; +%set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable%; +set default_transaction_read_only to "f"%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to%serializable; +set default_transaction_read_only to%"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_isolation to serializable; +_set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable_; +set default_transaction_read_only to "f"_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to_serializable; +set default_transaction_read_only to_"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_isolation to serializable; +&set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable&; +set default_transaction_read_only to "f"&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to&serializable; +set default_transaction_read_only to&"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_isolation to serializable; +$set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable$; +set default_transaction_read_only to "f"$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to$serializable; +set default_transaction_read_only to$"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_isolation to serializable; +@set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable@; +set default_transaction_read_only to "f"@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to@serializable; +set default_transaction_read_only to@"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_isolation to serializable; +!set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable!; +set default_transaction_read_only to "f"!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to!serializable; +set default_transaction_read_only to!"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_isolation to serializable; +*set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable*; +set default_transaction_read_only to "f"*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to*serializable; +set default_transaction_read_only to*"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_isolation to serializable; +(set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable(; +set default_transaction_read_only to "f"(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to(serializable; +set default_transaction_read_only to("f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_isolation to serializable; +)set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable); +set default_transaction_read_only to "f"); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to)serializable; +set default_transaction_read_only to)"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_isolation to serializable; +-set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable-; +set default_transaction_read_only to "f"-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-serializable; +set default_transaction_read_only to-"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_isolation to serializable; ++set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable+; +set default_transaction_read_only to "f"+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to+serializable; +set default_transaction_read_only to+"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_isolation to serializable; +-#set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable-#; +set default_transaction_read_only to "f"-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-#serializable; +set default_transaction_read_only to-#"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_isolation to serializable; +/set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable/; +set default_transaction_read_only to "f"/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/serializable; +set default_transaction_read_only to/"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_isolation to serializable; +\set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable\; +set default_transaction_read_only to "f"\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to\serializable; +set default_transaction_read_only to\"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_isolation to serializable; +?set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable?; +set default_transaction_read_only to "f"?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to?serializable; +set default_transaction_read_only to?"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_isolation to serializable; +-/set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable-/; +set default_transaction_read_only to "f"-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-/serializable; +set default_transaction_read_only to-/"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_isolation to serializable; +/#set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable/#; +set default_transaction_read_only to "f"/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/#serializable; +set default_transaction_read_only to/#"f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_isolation to serializable; +/-set default_transaction_read_only to "f"; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to serializable/-; +set default_transaction_read_only to "f"/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/-serializable; +set default_transaction_read_only to/-"f"; NEW_CONNECTION; -set default_transaction_isolation to 'serializable'; +set default_transaction_read_only = on; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_ISOLATION TO 'SERIALIZABLE'; +SET DEFAULT_TRANSACTION_READ_ONLY = ON; NEW_CONNECTION; -set default_transaction_isolation to 'serializable'; +set default_transaction_read_only = on; NEW_CONNECTION; - set default_transaction_isolation to 'serializable'; + set default_transaction_read_only = on; NEW_CONNECTION; - set default_transaction_isolation to 'serializable'; + set default_transaction_read_only = on; NEW_CONNECTION; -set default_transaction_isolation to 'serializable'; +set default_transaction_read_only = on; NEW_CONNECTION; -set default_transaction_isolation to 'serializable' ; +set default_transaction_read_only = on ; NEW_CONNECTION; -set default_transaction_isolation to 'serializable' ; +set default_transaction_read_only = on ; NEW_CONNECTION; -set default_transaction_isolation to 'serializable' +set default_transaction_read_only = on ; NEW_CONNECTION; -set default_transaction_isolation to 'serializable'; +set default_transaction_read_only = on; NEW_CONNECTION; -set default_transaction_isolation to 'serializable'; +set default_transaction_read_only = on; NEW_CONNECTION; set -default_transaction_isolation -to -'serializable'; +default_transaction_read_only += +on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_isolation to 'serializable'; +foo set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable' bar; +set default_transaction_read_only = on bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_isolation to 'serializable'; +%set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'%; +set default_transaction_read_only = on%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to%'serializable'; +set default_transaction_read_only =%on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_isolation to 'serializable'; +_set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'_; +set default_transaction_read_only = on_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to_'serializable'; +set default_transaction_read_only =_on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_isolation to 'serializable'; +&set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'&; +set default_transaction_read_only = on&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to&'serializable'; +set default_transaction_read_only =&on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_isolation to 'serializable'; +$set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'$; +set default_transaction_read_only = on$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to$'serializable'; +set default_transaction_read_only =$on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_isolation to 'serializable'; +@set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'@; +set default_transaction_read_only = on@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to@'serializable'; +set default_transaction_read_only =@on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_isolation to 'serializable'; +!set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'!; +set default_transaction_read_only = on!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to!'serializable'; +set default_transaction_read_only =!on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_isolation to 'serializable'; +*set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'*; +set default_transaction_read_only = on*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to*'serializable'; +set default_transaction_read_only =*on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_isolation to 'serializable'; +(set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'(; +set default_transaction_read_only = on(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to('serializable'; +set default_transaction_read_only =(on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_isolation to 'serializable'; +)set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'); +set default_transaction_read_only = on); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to)'serializable'; +set default_transaction_read_only =)on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_isolation to 'serializable'; +-set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'-; +set default_transaction_read_only = on-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-'serializable'; +set default_transaction_read_only =-on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_isolation to 'serializable'; ++set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'+; +set default_transaction_read_only = on+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to+'serializable'; +set default_transaction_read_only =+on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_isolation to 'serializable'; +-#set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'-#; +set default_transaction_read_only = on-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-#'serializable'; +set default_transaction_read_only =-#on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_isolation to 'serializable'; +/set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'/; +set default_transaction_read_only = on/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/'serializable'; +set default_transaction_read_only =/on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_isolation to 'serializable'; +\set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'\; +set default_transaction_read_only = on\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to\'serializable'; +set default_transaction_read_only =\on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_isolation to 'serializable'; +?set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'?; +set default_transaction_read_only = on?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to?'serializable'; +set default_transaction_read_only =?on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_isolation to 'serializable'; +-/set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'-/; +set default_transaction_read_only = on-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-/'serializable'; +set default_transaction_read_only =-/on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_isolation to 'serializable'; +/#set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'/#; +set default_transaction_read_only = on/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/#'serializable'; +set default_transaction_read_only =/#on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_isolation to 'serializable'; +/-set default_transaction_read_only = on; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to 'serializable'/-; +set default_transaction_read_only = on/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/-'serializable'; +set default_transaction_read_only =/-on; NEW_CONNECTION; -set default_transaction_isolation = 'serializable'; +set default_transaction_read_only = off; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_ISOLATION = 'SERIALIZABLE'; +SET DEFAULT_TRANSACTION_READ_ONLY = OFF; NEW_CONNECTION; -set default_transaction_isolation = 'serializable'; +set default_transaction_read_only = off; NEW_CONNECTION; - set default_transaction_isolation = 'serializable'; + set default_transaction_read_only = off; NEW_CONNECTION; - set default_transaction_isolation = 'serializable'; + set default_transaction_read_only = off; NEW_CONNECTION; -set default_transaction_isolation = 'serializable'; +set default_transaction_read_only = off; NEW_CONNECTION; -set default_transaction_isolation = 'serializable' ; +set default_transaction_read_only = off ; NEW_CONNECTION; -set default_transaction_isolation = 'serializable' ; +set default_transaction_read_only = off ; NEW_CONNECTION; -set default_transaction_isolation = 'serializable' +set default_transaction_read_only = off ; NEW_CONNECTION; -set default_transaction_isolation = 'serializable'; +set default_transaction_read_only = off; NEW_CONNECTION; -set default_transaction_isolation = 'serializable'; +set default_transaction_read_only = off; NEW_CONNECTION; set -default_transaction_isolation +default_transaction_read_only = -'serializable'; +off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_isolation = 'serializable'; +foo set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable' bar; +set default_transaction_read_only = off bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_isolation = 'serializable'; +%set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'%; +set default_transaction_read_only = off%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =%'serializable'; +set default_transaction_read_only =%off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_isolation = 'serializable'; +_set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'_; +set default_transaction_read_only = off_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =_'serializable'; +set default_transaction_read_only =_off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_isolation = 'serializable'; +&set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'&; +set default_transaction_read_only = off&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =&'serializable'; +set default_transaction_read_only =&off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_isolation = 'serializable'; +$set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'$; +set default_transaction_read_only = off$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =$'serializable'; +set default_transaction_read_only =$off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_isolation = 'serializable'; +@set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'@; +set default_transaction_read_only = off@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =@'serializable'; +set default_transaction_read_only =@off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_isolation = 'serializable'; +!set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'!; +set default_transaction_read_only = off!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =!'serializable'; +set default_transaction_read_only =!off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_isolation = 'serializable'; +*set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'*; +set default_transaction_read_only = off*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =*'serializable'; +set default_transaction_read_only =*off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_isolation = 'serializable'; +(set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'(; +set default_transaction_read_only = off(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =('serializable'; +set default_transaction_read_only =(off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_isolation = 'serializable'; +)set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'); +set default_transaction_read_only = off); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =)'serializable'; +set default_transaction_read_only =)off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_isolation = 'serializable'; +-set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'-; +set default_transaction_read_only = off-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-'serializable'; +set default_transaction_read_only =-off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_isolation = 'serializable'; ++set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'+; +set default_transaction_read_only = off+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =+'serializable'; +set default_transaction_read_only =+off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_isolation = 'serializable'; +-#set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'-#; +set default_transaction_read_only = off-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-#'serializable'; +set default_transaction_read_only =-#off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_isolation = 'serializable'; +/set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'/; +set default_transaction_read_only = off/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/'serializable'; +set default_transaction_read_only =/off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_isolation = 'serializable'; +\set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'\; +set default_transaction_read_only = off\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =\'serializable'; +set default_transaction_read_only =\off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_isolation = 'serializable'; +?set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'?; +set default_transaction_read_only = off?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =?'serializable'; +set default_transaction_read_only =?off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_isolation = 'serializable'; +-/set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'-/; +set default_transaction_read_only = off-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-/'serializable'; +set default_transaction_read_only =-/off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_isolation = 'serializable'; +/#set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'/#; +set default_transaction_read_only = off/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/#'serializable'; +set default_transaction_read_only =/#off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_isolation = 'serializable'; +/-set default_transaction_read_only = off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = 'serializable'/-; +set default_transaction_read_only = off/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/-'serializable'; +set default_transaction_read_only =/-off; NEW_CONNECTION; -set default_transaction_isolation = "SERIALIZABLE"; +set default_transaction_read_only = 1; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_ISOLATION = "SERIALIZABLE"; +SET DEFAULT_TRANSACTION_READ_ONLY = 1; NEW_CONNECTION; -set default_transaction_isolation = "serializable"; +set default_transaction_read_only = 1; NEW_CONNECTION; - set default_transaction_isolation = "SERIALIZABLE"; + set default_transaction_read_only = 1; NEW_CONNECTION; - set default_transaction_isolation = "SERIALIZABLE"; + set default_transaction_read_only = 1; NEW_CONNECTION; -set default_transaction_isolation = "SERIALIZABLE"; +set default_transaction_read_only = 1; NEW_CONNECTION; -set default_transaction_isolation = "SERIALIZABLE" ; +set default_transaction_read_only = 1 ; NEW_CONNECTION; -set default_transaction_isolation = "SERIALIZABLE" ; +set default_transaction_read_only = 1 ; NEW_CONNECTION; -set default_transaction_isolation = "SERIALIZABLE" +set default_transaction_read_only = 1 ; NEW_CONNECTION; -set default_transaction_isolation = "SERIALIZABLE"; +set default_transaction_read_only = 1; NEW_CONNECTION; -set default_transaction_isolation = "SERIALIZABLE"; +set default_transaction_read_only = 1; NEW_CONNECTION; set -default_transaction_isolation +default_transaction_read_only = -"SERIALIZABLE"; +1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_isolation = "SERIALIZABLE"; +foo set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE" bar; +set default_transaction_read_only = 1 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_isolation = "SERIALIZABLE"; +%set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"%; +set default_transaction_read_only = 1%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =%"SERIALIZABLE"; +set default_transaction_read_only =%1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_isolation = "SERIALIZABLE"; +_set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"_; +set default_transaction_read_only = 1_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =_"SERIALIZABLE"; +set default_transaction_read_only =_1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_isolation = "SERIALIZABLE"; +&set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"&; +set default_transaction_read_only = 1&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =&"SERIALIZABLE"; +set default_transaction_read_only =&1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_isolation = "SERIALIZABLE"; +$set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"$; +set default_transaction_read_only = 1$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =$"SERIALIZABLE"; +set default_transaction_read_only =$1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_isolation = "SERIALIZABLE"; +@set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"@; +set default_transaction_read_only = 1@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =@"SERIALIZABLE"; +set default_transaction_read_only =@1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_isolation = "SERIALIZABLE"; +!set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"!; +set default_transaction_read_only = 1!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =!"SERIALIZABLE"; +set default_transaction_read_only =!1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_isolation = "SERIALIZABLE"; +*set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"*; +set default_transaction_read_only = 1*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =*"SERIALIZABLE"; +set default_transaction_read_only =*1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_isolation = "SERIALIZABLE"; +(set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"(; +set default_transaction_read_only = 1(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =("SERIALIZABLE"; +set default_transaction_read_only =(1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_isolation = "SERIALIZABLE"; +)set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"); +set default_transaction_read_only = 1); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =)"SERIALIZABLE"; +set default_transaction_read_only =)1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_isolation = "SERIALIZABLE"; +-set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"-; +set default_transaction_read_only = 1-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-"SERIALIZABLE"; +set default_transaction_read_only =-1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_isolation = "SERIALIZABLE"; ++set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"+; +set default_transaction_read_only = 1+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =+"SERIALIZABLE"; +set default_transaction_read_only =+1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_isolation = "SERIALIZABLE"; +-#set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"-#; +set default_transaction_read_only = 1-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-#"SERIALIZABLE"; +set default_transaction_read_only =-#1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_isolation = "SERIALIZABLE"; +/set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"/; +set default_transaction_read_only = 1/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/"SERIALIZABLE"; +set default_transaction_read_only =/1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_isolation = "SERIALIZABLE"; +\set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"\; +set default_transaction_read_only = 1\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =\"SERIALIZABLE"; +set default_transaction_read_only =\1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_isolation = "SERIALIZABLE"; +?set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"?; +set default_transaction_read_only = 1?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =?"SERIALIZABLE"; +set default_transaction_read_only =?1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_isolation = "SERIALIZABLE"; +-/set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"-/; +set default_transaction_read_only = 1-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-/"SERIALIZABLE"; +set default_transaction_read_only =-/1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_isolation = "SERIALIZABLE"; +/#set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"/#; +set default_transaction_read_only = 1/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/#"SERIALIZABLE"; +set default_transaction_read_only =/#1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_isolation = "SERIALIZABLE"; +/-set default_transaction_read_only = 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = "SERIALIZABLE"/-; +set default_transaction_read_only = 1/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/-"SERIALIZABLE"; +set default_transaction_read_only =/-1; NEW_CONNECTION; -set default_transaction_isolation = DEFAULT; +set default_transaction_read_only = 0; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_ISOLATION = DEFAULT; +SET DEFAULT_TRANSACTION_READ_ONLY = 0; NEW_CONNECTION; -set default_transaction_isolation = default; +set default_transaction_read_only = 0; NEW_CONNECTION; - set default_transaction_isolation = DEFAULT; + set default_transaction_read_only = 0; NEW_CONNECTION; - set default_transaction_isolation = DEFAULT; + set default_transaction_read_only = 0; NEW_CONNECTION; -set default_transaction_isolation = DEFAULT; +set default_transaction_read_only = 0; NEW_CONNECTION; -set default_transaction_isolation = DEFAULT ; +set default_transaction_read_only = 0 ; NEW_CONNECTION; -set default_transaction_isolation = DEFAULT ; +set default_transaction_read_only = 0 ; NEW_CONNECTION; -set default_transaction_isolation = DEFAULT +set default_transaction_read_only = 0 ; NEW_CONNECTION; -set default_transaction_isolation = DEFAULT; +set default_transaction_read_only = 0; NEW_CONNECTION; -set default_transaction_isolation = DEFAULT; +set default_transaction_read_only = 0; NEW_CONNECTION; set -default_transaction_isolation +default_transaction_read_only = -DEFAULT; +0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_isolation = DEFAULT; +foo set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT bar; +set default_transaction_read_only = 0 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_isolation = DEFAULT; +%set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT%; +set default_transaction_read_only = 0%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =%DEFAULT; +set default_transaction_read_only =%0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_isolation = DEFAULT; +_set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT_; +set default_transaction_read_only = 0_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =_DEFAULT; +set default_transaction_read_only =_0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_isolation = DEFAULT; +&set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT&; +set default_transaction_read_only = 0&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =&DEFAULT; +set default_transaction_read_only =&0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_isolation = DEFAULT; +$set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT$; +set default_transaction_read_only = 0$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =$DEFAULT; +set default_transaction_read_only =$0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_isolation = DEFAULT; +@set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT@; +set default_transaction_read_only = 0@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =@DEFAULT; +set default_transaction_read_only =@0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_isolation = DEFAULT; +!set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT!; +set default_transaction_read_only = 0!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =!DEFAULT; +set default_transaction_read_only =!0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_isolation = DEFAULT; +*set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT*; +set default_transaction_read_only = 0*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =*DEFAULT; +set default_transaction_read_only =*0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_isolation = DEFAULT; +(set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT(; +set default_transaction_read_only = 0(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =(DEFAULT; +set default_transaction_read_only =(0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_isolation = DEFAULT; +)set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT); +set default_transaction_read_only = 0); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =)DEFAULT; +set default_transaction_read_only =)0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_isolation = DEFAULT; +-set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT-; +set default_transaction_read_only = 0-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-DEFAULT; +set default_transaction_read_only =-0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_isolation = DEFAULT; ++set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT+; +set default_transaction_read_only = 0+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =+DEFAULT; +set default_transaction_read_only =+0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_isolation = DEFAULT; +-#set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT-#; +set default_transaction_read_only = 0-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-#DEFAULT; +set default_transaction_read_only =-#0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_isolation = DEFAULT; +/set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT/; +set default_transaction_read_only = 0/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/DEFAULT; +set default_transaction_read_only =/0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_isolation = DEFAULT; +\set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT\; +set default_transaction_read_only = 0\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =\DEFAULT; +set default_transaction_read_only =\0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_isolation = DEFAULT; +?set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT?; +set default_transaction_read_only = 0?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =?DEFAULT; +set default_transaction_read_only =?0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_isolation = DEFAULT; +-/set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT-/; +set default_transaction_read_only = 0-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =-/DEFAULT; +set default_transaction_read_only =-/0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_isolation = DEFAULT; +/#set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT/#; +set default_transaction_read_only = 0/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/#DEFAULT; +set default_transaction_read_only =/#0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_isolation = DEFAULT; +/-set default_transaction_read_only = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation = DEFAULT/-; +set default_transaction_read_only = 0/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation =/-DEFAULT; +set default_transaction_read_only =/-0; NEW_CONNECTION; -set default_transaction_isolation to DEFAULT; +set default_transaction_read_only = yes; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_ISOLATION TO DEFAULT; +SET DEFAULT_TRANSACTION_READ_ONLY = YES; NEW_CONNECTION; -set default_transaction_isolation to default; +set default_transaction_read_only = yes; NEW_CONNECTION; - set default_transaction_isolation to DEFAULT; + set default_transaction_read_only = yes; NEW_CONNECTION; - set default_transaction_isolation to DEFAULT; + set default_transaction_read_only = yes; NEW_CONNECTION; -set default_transaction_isolation to DEFAULT; +set default_transaction_read_only = yes; NEW_CONNECTION; -set default_transaction_isolation to DEFAULT ; +set default_transaction_read_only = yes ; NEW_CONNECTION; -set default_transaction_isolation to DEFAULT ; +set default_transaction_read_only = yes ; NEW_CONNECTION; -set default_transaction_isolation to DEFAULT +set default_transaction_read_only = yes ; NEW_CONNECTION; -set default_transaction_isolation to DEFAULT; +set default_transaction_read_only = yes; NEW_CONNECTION; -set default_transaction_isolation to DEFAULT; +set default_transaction_read_only = yes; NEW_CONNECTION; set -default_transaction_isolation -to -DEFAULT; +default_transaction_read_only += +yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_isolation to DEFAULT; +foo set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT bar; +set default_transaction_read_only = yes bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_isolation to DEFAULT; +%set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT%; +set default_transaction_read_only = yes%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to%DEFAULT; +set default_transaction_read_only =%yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_isolation to DEFAULT; +_set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT_; +set default_transaction_read_only = yes_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to_DEFAULT; +set default_transaction_read_only =_yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_isolation to DEFAULT; +&set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT&; +set default_transaction_read_only = yes&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to&DEFAULT; +set default_transaction_read_only =&yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_isolation to DEFAULT; +$set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT$; +set default_transaction_read_only = yes$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to$DEFAULT; +set default_transaction_read_only =$yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_isolation to DEFAULT; +@set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT@; +set default_transaction_read_only = yes@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to@DEFAULT; +set default_transaction_read_only =@yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_isolation to DEFAULT; +!set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT!; +set default_transaction_read_only = yes!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to!DEFAULT; +set default_transaction_read_only =!yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_isolation to DEFAULT; +*set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT*; +set default_transaction_read_only = yes*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to*DEFAULT; +set default_transaction_read_only =*yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_isolation to DEFAULT; +(set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT(; +set default_transaction_read_only = yes(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to(DEFAULT; +set default_transaction_read_only =(yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_isolation to DEFAULT; +)set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT); +set default_transaction_read_only = yes); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to)DEFAULT; +set default_transaction_read_only =)yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_isolation to DEFAULT; +-set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT-; +set default_transaction_read_only = yes-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-DEFAULT; +set default_transaction_read_only =-yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_isolation to DEFAULT; ++set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT+; +set default_transaction_read_only = yes+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to+DEFAULT; +set default_transaction_read_only =+yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_isolation to DEFAULT; +-#set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT-#; +set default_transaction_read_only = yes-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-#DEFAULT; +set default_transaction_read_only =-#yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_isolation to DEFAULT; +/set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT/; +set default_transaction_read_only = yes/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/DEFAULT; +set default_transaction_read_only =/yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_isolation to DEFAULT; +\set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT\; +set default_transaction_read_only = yes\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to\DEFAULT; +set default_transaction_read_only =\yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_isolation to DEFAULT; +?set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT?; +set default_transaction_read_only = yes?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to?DEFAULT; +set default_transaction_read_only =?yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_isolation to DEFAULT; +-/set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT-/; +set default_transaction_read_only = yes-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to-/DEFAULT; +set default_transaction_read_only =-/yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_isolation to DEFAULT; +/#set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT/#; +set default_transaction_read_only = yes/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/#DEFAULT; +set default_transaction_read_only =/#yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_isolation to DEFAULT; +/-set default_transaction_read_only = yes; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to DEFAULT/-; +set default_transaction_read_only = yes/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_isolation to/-DEFAULT; +set default_transaction_read_only =/-yes; NEW_CONNECTION; -set default_transaction_read_only = true; +set default_transaction_read_only = no; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = TRUE; +SET DEFAULT_TRANSACTION_READ_ONLY = NO; NEW_CONNECTION; -set default_transaction_read_only = true; +set default_transaction_read_only = no; NEW_CONNECTION; - set default_transaction_read_only = true; + set default_transaction_read_only = no; NEW_CONNECTION; - set default_transaction_read_only = true; + set default_transaction_read_only = no; NEW_CONNECTION; -set default_transaction_read_only = true; +set default_transaction_read_only = no; NEW_CONNECTION; -set default_transaction_read_only = true ; +set default_transaction_read_only = no ; NEW_CONNECTION; -set default_transaction_read_only = true ; +set default_transaction_read_only = no ; NEW_CONNECTION; -set default_transaction_read_only = true +set default_transaction_read_only = no ; NEW_CONNECTION; -set default_transaction_read_only = true; +set default_transaction_read_only = no; NEW_CONNECTION; -set default_transaction_read_only = true; +set default_transaction_read_only = no; NEW_CONNECTION; set default_transaction_read_only = -true; +no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = true; +foo set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true bar; +set default_transaction_read_only = no bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = true; +%set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true%; +set default_transaction_read_only = no%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%true; +set default_transaction_read_only =%no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = true; +_set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true_; +set default_transaction_read_only = no_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_true; +set default_transaction_read_only =_no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = true; +&set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true&; +set default_transaction_read_only = no&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&true; +set default_transaction_read_only =&no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = true; +$set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true$; +set default_transaction_read_only = no$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$true; +set default_transaction_read_only =$no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = true; +@set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true@; +set default_transaction_read_only = no@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@true; +set default_transaction_read_only =@no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = true; +!set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true!; +set default_transaction_read_only = no!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!true; +set default_transaction_read_only =!no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = true; +*set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true*; +set default_transaction_read_only = no*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*true; +set default_transaction_read_only =*no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = true; +(set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true(; +set default_transaction_read_only = no(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(true; +set default_transaction_read_only =(no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = true; +)set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true); +set default_transaction_read_only = no); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)true; +set default_transaction_read_only =)no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = true; +-set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true-; +set default_transaction_read_only = no-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-true; +set default_transaction_read_only =-no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = true; ++set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true+; +set default_transaction_read_only = no+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+true; +set default_transaction_read_only =+no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = true; +-#set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true-#; +set default_transaction_read_only = no-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#true; +set default_transaction_read_only =-#no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = true; +/set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true/; +set default_transaction_read_only = no/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/true; +set default_transaction_read_only =/no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = true; +\set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true\; +set default_transaction_read_only = no\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\true; +set default_transaction_read_only =\no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = true; +?set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true?; +set default_transaction_read_only = no?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?true; +set default_transaction_read_only =?no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = true; +-/set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true-/; +set default_transaction_read_only = no-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/true; +set default_transaction_read_only =-/no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = true; +/#set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true/#; +set default_transaction_read_only = no/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#true; +set default_transaction_read_only =/#no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = true; +/-set default_transaction_read_only = no; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = true/-; +set default_transaction_read_only = no/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-true; +set default_transaction_read_only =/-no; NEW_CONNECTION; -set default_transaction_read_only = false; +set default_transaction_read_only = y; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = FALSE; +SET DEFAULT_TRANSACTION_READ_ONLY = Y; NEW_CONNECTION; -set default_transaction_read_only = false; +set default_transaction_read_only = y; NEW_CONNECTION; - set default_transaction_read_only = false; + set default_transaction_read_only = y; NEW_CONNECTION; - set default_transaction_read_only = false; + set default_transaction_read_only = y; NEW_CONNECTION; -set default_transaction_read_only = false; +set default_transaction_read_only = y; NEW_CONNECTION; -set default_transaction_read_only = false ; +set default_transaction_read_only = y ; NEW_CONNECTION; -set default_transaction_read_only = false ; +set default_transaction_read_only = y ; NEW_CONNECTION; -set default_transaction_read_only = false +set default_transaction_read_only = y ; NEW_CONNECTION; -set default_transaction_read_only = false; +set default_transaction_read_only = y; NEW_CONNECTION; -set default_transaction_read_only = false; +set default_transaction_read_only = y; NEW_CONNECTION; set default_transaction_read_only = -false; +y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = false; +foo set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false bar; +set default_transaction_read_only = y bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = false; +%set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false%; +set default_transaction_read_only = y%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%false; +set default_transaction_read_only =%y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = false; +_set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false_; +set default_transaction_read_only = y_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_false; +set default_transaction_read_only =_y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = false; +&set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false&; +set default_transaction_read_only = y&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&false; +set default_transaction_read_only =&y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = false; +$set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false$; +set default_transaction_read_only = y$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$false; +set default_transaction_read_only =$y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = false; +@set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false@; +set default_transaction_read_only = y@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@false; +set default_transaction_read_only =@y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = false; +!set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false!; +set default_transaction_read_only = y!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!false; +set default_transaction_read_only =!y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = false; +*set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false*; +set default_transaction_read_only = y*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*false; +set default_transaction_read_only =*y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = false; +(set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false(; +set default_transaction_read_only = y(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(false; +set default_transaction_read_only =(y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = false; +)set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false); +set default_transaction_read_only = y); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)false; +set default_transaction_read_only =)y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = false; +-set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false-; +set default_transaction_read_only = y-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-false; +set default_transaction_read_only =-y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = false; ++set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false+; +set default_transaction_read_only = y+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+false; +set default_transaction_read_only =+y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = false; +-#set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false-#; +set default_transaction_read_only = y-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#false; +set default_transaction_read_only =-#y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = false; +/set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false/; +set default_transaction_read_only = y/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/false; +set default_transaction_read_only =/y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = false; +\set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false\; +set default_transaction_read_only = y\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\false; +set default_transaction_read_only =\y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = false; +?set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false?; +set default_transaction_read_only = y?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?false; +set default_transaction_read_only =?y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = false; +-/set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false-/; +set default_transaction_read_only = y-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/false; +set default_transaction_read_only =-/y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = false; +/#set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false/#; +set default_transaction_read_only = y/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#false; +set default_transaction_read_only =/#y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = false; +/-set default_transaction_read_only = y; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = false/-; +set default_transaction_read_only = y/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-false; +set default_transaction_read_only =/-y; NEW_CONNECTION; -set default_transaction_read_only = t; +set default_transaction_read_only = n; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = T; +SET DEFAULT_TRANSACTION_READ_ONLY = N; NEW_CONNECTION; -set default_transaction_read_only = t; +set default_transaction_read_only = n; NEW_CONNECTION; - set default_transaction_read_only = t; + set default_transaction_read_only = n; NEW_CONNECTION; - set default_transaction_read_only = t; + set default_transaction_read_only = n; NEW_CONNECTION; -set default_transaction_read_only = t; +set default_transaction_read_only = n; NEW_CONNECTION; -set default_transaction_read_only = t ; +set default_transaction_read_only = n ; NEW_CONNECTION; -set default_transaction_read_only = t ; +set default_transaction_read_only = n ; NEW_CONNECTION; -set default_transaction_read_only = t +set default_transaction_read_only = n ; NEW_CONNECTION; -set default_transaction_read_only = t; +set default_transaction_read_only = n; NEW_CONNECTION; -set default_transaction_read_only = t; +set default_transaction_read_only = n; NEW_CONNECTION; set default_transaction_read_only = -t; +n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = t; +foo set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t bar; +set default_transaction_read_only = n bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = t; +%set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t%; +set default_transaction_read_only = n%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%t; +set default_transaction_read_only =%n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = t; +_set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t_; +set default_transaction_read_only = n_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_t; +set default_transaction_read_only =_n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = t; +&set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t&; +set default_transaction_read_only = n&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&t; +set default_transaction_read_only =&n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = t; +$set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t$; +set default_transaction_read_only = n$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$t; +set default_transaction_read_only =$n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = t; +@set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t@; +set default_transaction_read_only = n@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@t; +set default_transaction_read_only =@n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = t; +!set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t!; +set default_transaction_read_only = n!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!t; +set default_transaction_read_only =!n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = t; +*set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t*; +set default_transaction_read_only = n*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*t; +set default_transaction_read_only =*n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = t; +(set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t(; +set default_transaction_read_only = n(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(t; +set default_transaction_read_only =(n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = t; +)set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t); +set default_transaction_read_only = n); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)t; +set default_transaction_read_only =)n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = t; +-set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t-; +set default_transaction_read_only = n-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-t; +set default_transaction_read_only =-n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = t; ++set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t+; +set default_transaction_read_only = n+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+t; +set default_transaction_read_only =+n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = t; +-#set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t-#; +set default_transaction_read_only = n-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#t; +set default_transaction_read_only =-#n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = t; +/set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t/; +set default_transaction_read_only = n/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/t; +set default_transaction_read_only =/n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = t; +\set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t\; +set default_transaction_read_only = n\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\t; +set default_transaction_read_only =\n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = t; +?set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t?; +set default_transaction_read_only = n?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?t; +set default_transaction_read_only =?n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = t; +-/set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t-/; +set default_transaction_read_only = n-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/t; +set default_transaction_read_only =-/n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = t; +/#set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t/#; +set default_transaction_read_only = n/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#t; +set default_transaction_read_only =/#n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = t; +/-set default_transaction_read_only = n; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = t/-; +set default_transaction_read_only = n/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-t; +set default_transaction_read_only =/-n; NEW_CONNECTION; -set default_transaction_read_only = f; +set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = F; +SET SPANNER.READ_ONLY_STALENESS='STRONG'; NEW_CONNECTION; -set default_transaction_read_only = f; +set spanner.read_only_staleness='strong'; NEW_CONNECTION; - set default_transaction_read_only = f; + set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; - set default_transaction_read_only = f; + set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; -set default_transaction_read_only = f; +set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; -set default_transaction_read_only = f ; +set spanner.read_only_staleness='STRONG' ; NEW_CONNECTION; -set default_transaction_read_only = f ; +set spanner.read_only_staleness='STRONG' ; NEW_CONNECTION; -set default_transaction_read_only = f +set spanner.read_only_staleness='STRONG' ; NEW_CONNECTION; -set default_transaction_read_only = f; +set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; -set default_transaction_read_only = f; +set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; set -default_transaction_read_only -= -f; +spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = f; +foo set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f bar; +set spanner.read_only_staleness='STRONG' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = f; +%set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f%; +set spanner.read_only_staleness='STRONG'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%f; +set%spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = f; +_set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f_; +set spanner.read_only_staleness='STRONG'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_f; +set_spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = f; +&set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f&; +set spanner.read_only_staleness='STRONG'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&f; +set&spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = f; +$set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f$; +set spanner.read_only_staleness='STRONG'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$f; +set$spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = f; +@set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f@; +set spanner.read_only_staleness='STRONG'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@f; +set@spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = f; +!set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f!; +set spanner.read_only_staleness='STRONG'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!f; +set!spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = f; +*set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f*; +set spanner.read_only_staleness='STRONG'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*f; +set*spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = f; +(set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f(; +set spanner.read_only_staleness='STRONG'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(f; +set(spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = f; +)set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f); +set spanner.read_only_staleness='STRONG'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)f; +set)spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = f; +-set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f-; +set spanner.read_only_staleness='STRONG'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-f; +set-spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = f; ++set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f+; +set spanner.read_only_staleness='STRONG'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+f; +set+spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = f; +-#set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f-#; +set spanner.read_only_staleness='STRONG'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#f; +set-#spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = f; +/set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f/; +set spanner.read_only_staleness='STRONG'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/f; +set/spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = f; +\set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f\; +set spanner.read_only_staleness='STRONG'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\f; +set\spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = f; +?set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f?; +set spanner.read_only_staleness='STRONG'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?f; +set?spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = f; +-/set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f-/; +set spanner.read_only_staleness='STRONG'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/f; +set-/spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = f; +/#set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f/#; +set spanner.read_only_staleness='STRONG'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#f; +set/#spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = f; +/-set spanner.read_only_staleness='STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = f/-; +set spanner.read_only_staleness='STRONG'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-f; +set/-spanner.read_only_staleness='STRONG'; NEW_CONNECTION; -set default_transaction_read_only to 't'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY TO 'T'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set default_transaction_read_only to 't'; +set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123-08:00'; NEW_CONNECTION; - set default_transaction_read_only to 't'; + set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; - set default_transaction_read_only to 't'; + set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set default_transaction_read_only to 't'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set default_transaction_read_only to 't' ; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set default_transaction_read_only to 't' ; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set default_transaction_read_only to 't' +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set default_transaction_read_only to 't'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set default_transaction_read_only to 't'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; set -default_transaction_read_only -to -'t'; +spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only to 't'; +foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't' bar; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only to 't'; +%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'%; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to%'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only to 't'; +_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'_; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to_'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only to 't'; +&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'&; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to&'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only to 't'; +$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'$; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to$'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only to 't'; +@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'@; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to@'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only to 't'; +!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'!; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to!'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only to 't'; +*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'*; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to*'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only to 't'; +(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'(; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to('t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only to 't'; +)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'); +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to)'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only to 't'; +-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'-; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to-'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only to 't'; ++set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'+; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to+'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only to 't'; +-#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'-#; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to-#'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only to 't'; +/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'/; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to/'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only to 't'; +\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'\; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to\'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only to 't'; +?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'?; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to?'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only to 't'; +-/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'-/; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to-/'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only to 't'; +/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'/#; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to/#'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only to 't'; +/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to 't'/-; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to/-'t'; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set default_transaction_read_only to "f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY TO "F"; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set default_transaction_read_only to "f"; +set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123z'; NEW_CONNECTION; - set default_transaction_read_only to "f"; + set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; - set default_transaction_read_only to "f"; + set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set default_transaction_read_only to "f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set default_transaction_read_only to "f" ; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set default_transaction_read_only to "f" ; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set default_transaction_read_only to "f" +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set default_transaction_read_only to "f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set default_transaction_read_only to "f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; set -default_transaction_read_only -to -"f"; +spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only to "f"; +foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f" bar; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only to "f"; +%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"%; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to%"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only to "f"; +_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"_; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to_"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only to "f"; +&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"&; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to&"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only to "f"; +$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"$; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to$"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only to "f"; +@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"@; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to@"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only to "f"; +!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"!; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to!"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only to "f"; +*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"*; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to*"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only to "f"; +(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"(; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to("f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only to "f"; +)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"); +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to)"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only to "f"; +-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"-; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to-"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only to "f"; ++set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"+; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to+"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only to "f"; +-#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"-#; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to-#"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only to "f"; +/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"/; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to/"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only to "f"; +\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"\; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to\"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only to "f"; +?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"?; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to?"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only to "f"; +-/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"-/; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to-/"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only to "f"; +/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"/#; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to/#"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only to "f"; +/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to "f"/-; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only to/-"f"; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set default_transaction_read_only = on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = ON; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set default_transaction_read_only = on; +set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123+07:45'; NEW_CONNECTION; - set default_transaction_read_only = on; + set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; - set default_transaction_read_only = on; + set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set default_transaction_read_only = on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set default_transaction_read_only = on ; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set default_transaction_read_only = on ; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set default_transaction_read_only = on +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set default_transaction_read_only = on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set default_transaction_read_only = on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; set -default_transaction_read_only -= -on; +spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = on; +foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on bar; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = on; +%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on%; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = on; +_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on_; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = on; +&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on&; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = on; +$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on$; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = on; +@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on@; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = on; +!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on!; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = on; +*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on*; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = on; +(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on(; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = on; +)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on); +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = on; +-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on-; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = on; ++set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on+; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = on; +-#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on-#; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = on; +/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on/; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = on; +\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on\; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = on; +?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on?; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = on; +-/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on-/; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = on; +/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on/#; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = on; +/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = on/-; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-on; +set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set default_transaction_read_only = off; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = OFF; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set default_transaction_read_only = off; +set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321-07:00'; NEW_CONNECTION; - set default_transaction_read_only = off; + set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; - set default_transaction_read_only = off; + set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set default_transaction_read_only = off; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set default_transaction_read_only = off ; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set default_transaction_read_only = off ; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set default_transaction_read_only = off +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set default_transaction_read_only = off; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set default_transaction_read_only = off; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; set -default_transaction_read_only -= -off; +spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = off; +foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off bar; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = off; +%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off%; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%off; +set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = off; +_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off_; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_off; +set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = off; +&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off&; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&off; +set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = off; +$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off$; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$off; +set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = off; +@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off@; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@off; +set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = off; +!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off!; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!off; +set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = off; +*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off*; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*off; +set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = off; +(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off(; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(off; +set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = off; +)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off); +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)off; +set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = off; +-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off-; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-off; +set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = off; ++set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off+; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+off; +set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = off; +-#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off-#; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#off; +set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = off; +/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off/; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/off; +set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = off; +\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off\; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\off; +set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = off; +?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off?; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?off; +set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = off; +-/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off-/; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/off; +set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = off; +/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off/#; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#off; +set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = off; +/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = off/-; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-off; +set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set default_transaction_read_only = 1; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = 1; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set default_transaction_read_only = 1; +set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321z'; NEW_CONNECTION; - set default_transaction_read_only = 1; + set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; - set default_transaction_read_only = 1; + set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set default_transaction_read_only = 1; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set default_transaction_read_only = 1 ; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set default_transaction_read_only = 1 ; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set default_transaction_read_only = 1 +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set default_transaction_read_only = 1; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set default_transaction_read_only = 1; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; set -default_transaction_read_only -= -1; +spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = 1; +foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1 bar; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = 1; +%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1%; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%1; +set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = 1; +_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1_; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_1; +set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = 1; +&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1&; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&1; +set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = 1; +$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1$; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$1; +set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = 1; +@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1@; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@1; +set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = 1; +!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1!; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!1; +set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = 1; +*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1*; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*1; +set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = 1; +(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1(; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(1; +set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = 1; +)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1); +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)1; +set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = 1; +-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1-; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-1; +set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = 1; ++set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1+; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+1; +set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = 1; +-#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1-#; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#1; +set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = 1; +/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1/; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/1; +set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = 1; +\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1\; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\1; +set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = 1; +?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1?; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?1; +set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = 1; +-/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1-/; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/1; +set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = 1; +/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1/#; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#1; +set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = 1; +/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 1/-; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-1; +set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set default_transaction_read_only = 0; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = 0; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set default_transaction_read_only = 0; +set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321+05:30'; NEW_CONNECTION; - set default_transaction_read_only = 0; + set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; - set default_transaction_read_only = 0; + set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set default_transaction_read_only = 0; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set default_transaction_read_only = 0 ; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set default_transaction_read_only = 0 ; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set default_transaction_read_only = 0 +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set default_transaction_read_only = 0; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set default_transaction_read_only = 0; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; set -default_transaction_read_only -= -0; +spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = 0; +foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0 bar; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = 0; +%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0%; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%0; +set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = 0; +_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0_; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_0; +set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = 0; +&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0&; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&0; +set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = 0; +$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0$; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$0; +set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = 0; +@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0@; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@0; +set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = 0; +!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0!; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!0; +set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = 0; +*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0*; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*0; +set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = 0; +(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0(; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(0; +set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = 0; +)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0); +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)0; +set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = 0; +-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0-; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-0; +set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = 0; ++set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0+; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+0; +set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = 0; +-#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0-#; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#0; +set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = 0; +/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0/; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/0; +set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = 0; +\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0\; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\0; +set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = 0; +?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0?; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?0; +set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = 0; +-/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0-/; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/0; +set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = 0; +/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0/#; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#0; +set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = 0; +/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = 0/-; +set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-0; +set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set default_transaction_read_only = yes; +set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = YES; +SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 12S'; NEW_CONNECTION; -set default_transaction_read_only = yes; +set spanner.read_only_staleness='max_staleness 12s'; NEW_CONNECTION; - set default_transaction_read_only = yes; + set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; - set default_transaction_read_only = yes; + set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set default_transaction_read_only = yes; +set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set default_transaction_read_only = yes ; +set spanner.read_only_staleness='MAX_STALENESS 12s' ; NEW_CONNECTION; -set default_transaction_read_only = yes ; +set spanner.read_only_staleness='MAX_STALENESS 12s' ; NEW_CONNECTION; -set default_transaction_read_only = yes +set spanner.read_only_staleness='MAX_STALENESS 12s' ; NEW_CONNECTION; -set default_transaction_read_only = yes; +set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; -set default_transaction_read_only = yes; +set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; set -default_transaction_read_only -= -yes; +spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = yes; +foo set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes bar; +set spanner.read_only_staleness='MAX_STALENESS 12s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = yes; +%set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes%; +set spanner.read_only_staleness='MAX_STALENESS 12s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%yes; +set spanner.read_only_staleness='MAX_STALENESS%12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = yes; +_set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes_; +set spanner.read_only_staleness='MAX_STALENESS 12s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_yes; +set spanner.read_only_staleness='MAX_STALENESS_12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = yes; +&set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes&; +set spanner.read_only_staleness='MAX_STALENESS 12s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&yes; +set spanner.read_only_staleness='MAX_STALENESS&12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = yes; +$set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes$; +set spanner.read_only_staleness='MAX_STALENESS 12s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$yes; +set spanner.read_only_staleness='MAX_STALENESS$12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = yes; +@set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes@; +set spanner.read_only_staleness='MAX_STALENESS 12s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@yes; +set spanner.read_only_staleness='MAX_STALENESS@12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = yes; +!set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes!; +set spanner.read_only_staleness='MAX_STALENESS 12s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!yes; +set spanner.read_only_staleness='MAX_STALENESS!12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = yes; +*set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes*; +set spanner.read_only_staleness='MAX_STALENESS 12s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*yes; +set spanner.read_only_staleness='MAX_STALENESS*12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = yes; +(set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes(; +set spanner.read_only_staleness='MAX_STALENESS 12s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(yes; +set spanner.read_only_staleness='MAX_STALENESS(12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = yes; +)set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes); +set spanner.read_only_staleness='MAX_STALENESS 12s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)yes; +set spanner.read_only_staleness='MAX_STALENESS)12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = yes; +-set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes-; +set spanner.read_only_staleness='MAX_STALENESS 12s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-yes; +set spanner.read_only_staleness='MAX_STALENESS-12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = yes; ++set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes+; +set spanner.read_only_staleness='MAX_STALENESS 12s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+yes; +set spanner.read_only_staleness='MAX_STALENESS+12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = yes; +-#set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes-#; +set spanner.read_only_staleness='MAX_STALENESS 12s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#yes; +set spanner.read_only_staleness='MAX_STALENESS-#12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = yes; +/set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes/; +set spanner.read_only_staleness='MAX_STALENESS 12s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/yes; +set spanner.read_only_staleness='MAX_STALENESS/12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = yes; +\set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes\; +set spanner.read_only_staleness='MAX_STALENESS 12s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\yes; +set spanner.read_only_staleness='MAX_STALENESS\12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = yes; +?set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes?; +set spanner.read_only_staleness='MAX_STALENESS 12s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?yes; +set spanner.read_only_staleness='MAX_STALENESS?12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = yes; +-/set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes-/; +set spanner.read_only_staleness='MAX_STALENESS 12s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/yes; +set spanner.read_only_staleness='MAX_STALENESS-/12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = yes; +/#set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes/#; +set spanner.read_only_staleness='MAX_STALENESS 12s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#yes; +set spanner.read_only_staleness='MAX_STALENESS/#12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = yes; +/-set spanner.read_only_staleness='MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = yes/-; +set spanner.read_only_staleness='MAX_STALENESS 12s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-yes; +set spanner.read_only_staleness='MAX_STALENESS/-12s'; NEW_CONNECTION; -set default_transaction_read_only = no; +set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = NO; +SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100MS'; NEW_CONNECTION; -set default_transaction_read_only = no; +set spanner.read_only_staleness='max_staleness 100ms'; NEW_CONNECTION; - set default_transaction_read_only = no; + set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; - set default_transaction_read_only = no; + set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -set default_transaction_read_only = no; +set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -set default_transaction_read_only = no ; +set spanner.read_only_staleness='MAX_STALENESS 100ms' ; NEW_CONNECTION; -set default_transaction_read_only = no ; +set spanner.read_only_staleness='MAX_STALENESS 100ms' ; NEW_CONNECTION; -set default_transaction_read_only = no +set spanner.read_only_staleness='MAX_STALENESS 100ms' ; NEW_CONNECTION; -set default_transaction_read_only = no; +set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; -set default_transaction_read_only = no; +set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; set -default_transaction_read_only -= -no; +spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = no; +foo set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no bar; +set spanner.read_only_staleness='MAX_STALENESS 100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = no; +%set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no%; +set spanner.read_only_staleness='MAX_STALENESS 100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%no; +set spanner.read_only_staleness='MAX_STALENESS%100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = no; +_set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no_; +set spanner.read_only_staleness='MAX_STALENESS 100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_no; +set spanner.read_only_staleness='MAX_STALENESS_100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = no; +&set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no&; +set spanner.read_only_staleness='MAX_STALENESS 100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&no; +set spanner.read_only_staleness='MAX_STALENESS&100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = no; +$set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no$; +set spanner.read_only_staleness='MAX_STALENESS 100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$no; +set spanner.read_only_staleness='MAX_STALENESS$100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = no; +@set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no@; +set spanner.read_only_staleness='MAX_STALENESS 100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@no; +set spanner.read_only_staleness='MAX_STALENESS@100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = no; +!set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no!; +set spanner.read_only_staleness='MAX_STALENESS 100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!no; +set spanner.read_only_staleness='MAX_STALENESS!100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = no; +*set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no*; +set spanner.read_only_staleness='MAX_STALENESS 100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*no; +set spanner.read_only_staleness='MAX_STALENESS*100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = no; +(set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no(; +set spanner.read_only_staleness='MAX_STALENESS 100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(no; +set spanner.read_only_staleness='MAX_STALENESS(100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = no; +)set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no); +set spanner.read_only_staleness='MAX_STALENESS 100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)no; +set spanner.read_only_staleness='MAX_STALENESS)100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = no; +-set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no-; +set spanner.read_only_staleness='MAX_STALENESS 100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-no; +set spanner.read_only_staleness='MAX_STALENESS-100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = no; ++set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no+; +set spanner.read_only_staleness='MAX_STALENESS 100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+no; +set spanner.read_only_staleness='MAX_STALENESS+100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = no; +-#set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no-#; +set spanner.read_only_staleness='MAX_STALENESS 100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#no; +set spanner.read_only_staleness='MAX_STALENESS-#100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = no; +/set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no/; +set spanner.read_only_staleness='MAX_STALENESS 100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/no; +set spanner.read_only_staleness='MAX_STALENESS/100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = no; +\set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no\; +set spanner.read_only_staleness='MAX_STALENESS 100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\no; +set spanner.read_only_staleness='MAX_STALENESS\100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = no; +?set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no?; +set spanner.read_only_staleness='MAX_STALENESS 100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?no; +set spanner.read_only_staleness='MAX_STALENESS?100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = no; +-/set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no-/; +set spanner.read_only_staleness='MAX_STALENESS 100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/no; +set spanner.read_only_staleness='MAX_STALENESS-/100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = no; +/#set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no/#; +set spanner.read_only_staleness='MAX_STALENESS 100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#no; +set spanner.read_only_staleness='MAX_STALENESS/#100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = no; +/-set spanner.read_only_staleness='MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = no/-; +set spanner.read_only_staleness='MAX_STALENESS 100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-no; +set spanner.read_only_staleness='MAX_STALENESS/-100ms'; NEW_CONNECTION; -set default_transaction_read_only = y; +set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = Y; +SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 99999US'; NEW_CONNECTION; -set default_transaction_read_only = y; +set spanner.read_only_staleness='max_staleness 99999us'; NEW_CONNECTION; - set default_transaction_read_only = y; + set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; - set default_transaction_read_only = y; + set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -set default_transaction_read_only = y; +set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -set default_transaction_read_only = y ; +set spanner.read_only_staleness='MAX_STALENESS 99999us' ; NEW_CONNECTION; -set default_transaction_read_only = y ; +set spanner.read_only_staleness='MAX_STALENESS 99999us' ; NEW_CONNECTION; -set default_transaction_read_only = y +set spanner.read_only_staleness='MAX_STALENESS 99999us' ; NEW_CONNECTION; -set default_transaction_read_only = y; +set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; -set default_transaction_read_only = y; +set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; set -default_transaction_read_only -= -y; +spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = y; +foo set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y bar; +set spanner.read_only_staleness='MAX_STALENESS 99999us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = y; +%set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y%; +set spanner.read_only_staleness='MAX_STALENESS 99999us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%y; +set spanner.read_only_staleness='MAX_STALENESS%99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = y; +_set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y_; +set spanner.read_only_staleness='MAX_STALENESS 99999us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_y; +set spanner.read_only_staleness='MAX_STALENESS_99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = y; +&set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y&; +set spanner.read_only_staleness='MAX_STALENESS 99999us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&y; +set spanner.read_only_staleness='MAX_STALENESS&99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = y; +$set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y$; +set spanner.read_only_staleness='MAX_STALENESS 99999us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$y; +set spanner.read_only_staleness='MAX_STALENESS$99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = y; +@set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y@; +set spanner.read_only_staleness='MAX_STALENESS 99999us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@y; +set spanner.read_only_staleness='MAX_STALENESS@99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = y; +!set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y!; +set spanner.read_only_staleness='MAX_STALENESS 99999us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!y; +set spanner.read_only_staleness='MAX_STALENESS!99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = y; +*set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y*; +set spanner.read_only_staleness='MAX_STALENESS 99999us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*y; +set spanner.read_only_staleness='MAX_STALENESS*99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = y; +(set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y(; +set spanner.read_only_staleness='MAX_STALENESS 99999us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(y; +set spanner.read_only_staleness='MAX_STALENESS(99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = y; +)set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y); +set spanner.read_only_staleness='MAX_STALENESS 99999us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)y; +set spanner.read_only_staleness='MAX_STALENESS)99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = y; +-set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y-; +set spanner.read_only_staleness='MAX_STALENESS 99999us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-y; +set spanner.read_only_staleness='MAX_STALENESS-99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = y; ++set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y+; +set spanner.read_only_staleness='MAX_STALENESS 99999us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+y; +set spanner.read_only_staleness='MAX_STALENESS+99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = y; +-#set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y-#; +set spanner.read_only_staleness='MAX_STALENESS 99999us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#y; +set spanner.read_only_staleness='MAX_STALENESS-#99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = y; +/set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y/; +set spanner.read_only_staleness='MAX_STALENESS 99999us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/y; +set spanner.read_only_staleness='MAX_STALENESS/99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = y; +\set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y\; +set spanner.read_only_staleness='MAX_STALENESS 99999us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\y; +set spanner.read_only_staleness='MAX_STALENESS\99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = y; +?set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y?; +set spanner.read_only_staleness='MAX_STALENESS 99999us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?y; +set spanner.read_only_staleness='MAX_STALENESS?99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = y; +-/set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y-/; +set spanner.read_only_staleness='MAX_STALENESS 99999us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/y; +set spanner.read_only_staleness='MAX_STALENESS-/99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = y; +/#set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y/#; +set spanner.read_only_staleness='MAX_STALENESS 99999us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#y; +set spanner.read_only_staleness='MAX_STALENESS/#99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = y; +/-set spanner.read_only_staleness='MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = y/-; +set spanner.read_only_staleness='MAX_STALENESS 99999us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-y; +set spanner.read_only_staleness='MAX_STALENESS/-99999us'; NEW_CONNECTION; -set default_transaction_read_only = n; +set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -SET DEFAULT_TRANSACTION_READ_ONLY = N; +SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10NS'; NEW_CONNECTION; -set default_transaction_read_only = n; +set spanner.read_only_staleness='max_staleness 10ns'; NEW_CONNECTION; - set default_transaction_read_only = n; + set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; - set default_transaction_read_only = n; + set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -set default_transaction_read_only = n; +set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -set default_transaction_read_only = n ; +set spanner.read_only_staleness='MAX_STALENESS 10ns' ; NEW_CONNECTION; -set default_transaction_read_only = n ; +set spanner.read_only_staleness='MAX_STALENESS 10ns' ; NEW_CONNECTION; -set default_transaction_read_only = n +set spanner.read_only_staleness='MAX_STALENESS 10ns' ; NEW_CONNECTION; -set default_transaction_read_only = n; +set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; -set default_transaction_read_only = n; +set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; set -default_transaction_read_only -= -n; +spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set default_transaction_read_only = n; +foo set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n bar; +set spanner.read_only_staleness='MAX_STALENESS 10ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set default_transaction_read_only = n; +%set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n%; +set spanner.read_only_staleness='MAX_STALENESS 10ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =%n; +set spanner.read_only_staleness='MAX_STALENESS%10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set default_transaction_read_only = n; +_set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n_; +set spanner.read_only_staleness='MAX_STALENESS 10ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =_n; +set spanner.read_only_staleness='MAX_STALENESS_10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set default_transaction_read_only = n; +&set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n&; +set spanner.read_only_staleness='MAX_STALENESS 10ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =&n; +set spanner.read_only_staleness='MAX_STALENESS&10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set default_transaction_read_only = n; +$set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n$; +set spanner.read_only_staleness='MAX_STALENESS 10ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =$n; +set spanner.read_only_staleness='MAX_STALENESS$10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set default_transaction_read_only = n; +@set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n@; +set spanner.read_only_staleness='MAX_STALENESS 10ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =@n; +set spanner.read_only_staleness='MAX_STALENESS@10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set default_transaction_read_only = n; +!set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n!; +set spanner.read_only_staleness='MAX_STALENESS 10ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =!n; +set spanner.read_only_staleness='MAX_STALENESS!10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set default_transaction_read_only = n; +*set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n*; +set spanner.read_only_staleness='MAX_STALENESS 10ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =*n; +set spanner.read_only_staleness='MAX_STALENESS*10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set default_transaction_read_only = n; +(set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n(; +set spanner.read_only_staleness='MAX_STALENESS 10ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =(n; +set spanner.read_only_staleness='MAX_STALENESS(10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set default_transaction_read_only = n; +)set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n); +set spanner.read_only_staleness='MAX_STALENESS 10ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =)n; +set spanner.read_only_staleness='MAX_STALENESS)10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set default_transaction_read_only = n; +-set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n-; +set spanner.read_only_staleness='MAX_STALENESS 10ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-n; +set spanner.read_only_staleness='MAX_STALENESS-10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set default_transaction_read_only = n; ++set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n+; +set spanner.read_only_staleness='MAX_STALENESS 10ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =+n; +set spanner.read_only_staleness='MAX_STALENESS+10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set default_transaction_read_only = n; +-#set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n-#; +set spanner.read_only_staleness='MAX_STALENESS 10ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-#n; +set spanner.read_only_staleness='MAX_STALENESS-#10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set default_transaction_read_only = n; +/set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n/; +set spanner.read_only_staleness='MAX_STALENESS 10ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/n; +set spanner.read_only_staleness='MAX_STALENESS/10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set default_transaction_read_only = n; +\set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n\; +set spanner.read_only_staleness='MAX_STALENESS 10ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =\n; +set spanner.read_only_staleness='MAX_STALENESS\10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set default_transaction_read_only = n; +?set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n?; +set spanner.read_only_staleness='MAX_STALENESS 10ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =?n; +set spanner.read_only_staleness='MAX_STALENESS?10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set default_transaction_read_only = n; +-/set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n-/; +set spanner.read_only_staleness='MAX_STALENESS 10ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =-/n; +set spanner.read_only_staleness='MAX_STALENESS-/10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set default_transaction_read_only = n; +/#set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n/#; +set spanner.read_only_staleness='MAX_STALENESS 10ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/#n; +set spanner.read_only_staleness='MAX_STALENESS/#10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set default_transaction_read_only = n; +/-set spanner.read_only_staleness='MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only = n/-; +set spanner.read_only_staleness='MAX_STALENESS 10ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set default_transaction_read_only =/-n; +set spanner.read_only_staleness='MAX_STALENESS/-10ns'; NEW_CONNECTION; -set spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='STRONG'; +SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 15S'; NEW_CONNECTION; -set spanner.read_only_staleness='strong'; +set spanner.read_only_staleness='exact_staleness 15s'; NEW_CONNECTION; - set spanner.read_only_staleness='STRONG'; + set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; - set spanner.read_only_staleness='STRONG'; + set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -set spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -set spanner.read_only_staleness='STRONG' ; +set spanner.read_only_staleness='EXACT_STALENESS 15s' ; NEW_CONNECTION; -set spanner.read_only_staleness='STRONG' ; +set spanner.read_only_staleness='EXACT_STALENESS 15s' ; NEW_CONNECTION; -set spanner.read_only_staleness='STRONG' +set spanner.read_only_staleness='EXACT_STALENESS 15s' ; NEW_CONNECTION; -set spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; -set spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; set -spanner.read_only_staleness='STRONG'; +spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='STRONG'; +foo set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG' bar; +set spanner.read_only_staleness='EXACT_STALENESS 15s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='STRONG'; +%set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'%; +set spanner.read_only_staleness='EXACT_STALENESS 15s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS%15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='STRONG'; +_set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'_; +set spanner.read_only_staleness='EXACT_STALENESS 15s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS_15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='STRONG'; +&set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'&; +set spanner.read_only_staleness='EXACT_STALENESS 15s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS&15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='STRONG'; +$set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'$; +set spanner.read_only_staleness='EXACT_STALENESS 15s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS$15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='STRONG'; +@set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'@; +set spanner.read_only_staleness='EXACT_STALENESS 15s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS@15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='STRONG'; +!set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'!; +set spanner.read_only_staleness='EXACT_STALENESS 15s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS!15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='STRONG'; +*set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'*; +set spanner.read_only_staleness='EXACT_STALENESS 15s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS*15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='STRONG'; +(set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'(; +set spanner.read_only_staleness='EXACT_STALENESS 15s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS(15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='STRONG'; +)set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'); +set spanner.read_only_staleness='EXACT_STALENESS 15s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS)15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='STRONG'; +-set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'-; +set spanner.read_only_staleness='EXACT_STALENESS 15s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS-15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='STRONG'; ++set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'+; +set spanner.read_only_staleness='EXACT_STALENESS 15s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS+15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='STRONG'; +-#set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'-#; +set spanner.read_only_staleness='EXACT_STALENESS 15s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS-#15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='STRONG'; +/set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'/; +set spanner.read_only_staleness='EXACT_STALENESS 15s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS/15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='STRONG'; +\set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'\; +set spanner.read_only_staleness='EXACT_STALENESS 15s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS\15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='STRONG'; +?set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'?; +set spanner.read_only_staleness='EXACT_STALENESS 15s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS?15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='STRONG'; +-/set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'-/; +set spanner.read_only_staleness='EXACT_STALENESS 15s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS-/15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='STRONG'; +/#set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'/#; +set spanner.read_only_staleness='EXACT_STALENESS 15s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS/#15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='STRONG'; +/-set spanner.read_only_staleness='EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='STRONG'/-; +set spanner.read_only_staleness='EXACT_STALENESS 15s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.read_only_staleness='STRONG'; +set spanner.read_only_staleness='EXACT_STALENESS/-15s'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1500MS'; NEW_CONNECTION; -set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123-08:00'; +set spanner.read_only_staleness='exact_staleness 1500ms'; NEW_CONNECTION; - set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; + set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; - set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; + set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' +set spanner.read_only_staleness='EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; set -spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +foo set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +%set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS%1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +_set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS_1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +&set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS&1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +$set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS$1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +@set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS@1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +!set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS!1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +*set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS*1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +(set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS(1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +)set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'); +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS)1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS-1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; ++set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS+1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-#set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS-#1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS/1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +\set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS\1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +?set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS?1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-/set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS-/1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/#set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS/#1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/-set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-; +set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness='EXACT_STALENESS/-1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 15000000US'; NEW_CONNECTION; -set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123z'; +set spanner.read_only_staleness='exact_staleness 15000000us'; NEW_CONNECTION; - set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; + set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; - set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; + set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' +set spanner.read_only_staleness='EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; set -spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +foo set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +%set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS%15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +_set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS_15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +&set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS&15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +$set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS$15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +@set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS@15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +!set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS!15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +*set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS*15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +(set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS(15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +)set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'); +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS)15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS-15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; ++set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS+15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-#set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS-#15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS/15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +\set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS\15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +?set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS?15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-/set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS-/15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/#set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS/#15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/-set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-; +set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness='EXACT_STALENESS/-15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 9999NS'; NEW_CONNECTION; -set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123+07:45'; +set spanner.read_only_staleness='exact_staleness 9999ns'; NEW_CONNECTION; - set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; + set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; - set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; + set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' +set spanner.read_only_staleness='EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; set -spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +foo set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +%set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS%9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +_set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS_9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +&set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS&9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +$set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS$9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +@set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS@9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +!set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS!9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +*set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS*9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +(set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS(9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +)set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'); +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS)9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS-9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; ++set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS+9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-#set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS-#9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS/9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +\set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS\9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +?set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS?9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-/set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS-/9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/#set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS/#9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/-set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-; +set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness='EXACT_STALENESS/-9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +SET SPANNER.READ_ONLY_STALENESS TO 'STRONG'; NEW_CONNECTION; -set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321-07:00'; +set spanner.read_only_staleness to 'strong'; NEW_CONNECTION; - set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; + set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; - set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; + set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; +set spanner.read_only_staleness to 'STRONG' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; +set spanner.read_only_staleness to 'STRONG' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' +set spanner.read_only_staleness to 'STRONG' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; set -spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +spanner.read_only_staleness +to +'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +foo set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar; +set spanner.read_only_staleness to 'STRONG' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +%set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%; +set spanner.read_only_staleness to 'STRONG'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to%'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +_set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_; +set spanner.read_only_staleness to 'STRONG'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to_'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +&set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&; +set spanner.read_only_staleness to 'STRONG'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to&'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +$set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$; +set spanner.read_only_staleness to 'STRONG'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to$'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +@set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@; +set spanner.read_only_staleness to 'STRONG'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to@'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +!set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!; +set spanner.read_only_staleness to 'STRONG'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to!'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +*set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*; +set spanner.read_only_staleness to 'STRONG'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to*'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +(set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(; +set spanner.read_only_staleness to 'STRONG'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to('STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +)set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'); +set spanner.read_only_staleness to 'STRONG'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to)'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-; +set spanner.read_only_staleness to 'STRONG'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to-'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; ++set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+; +set spanner.read_only_staleness to 'STRONG'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to+'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-#set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#; +set spanner.read_only_staleness to 'STRONG'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to-#'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/; +set spanner.read_only_staleness to 'STRONG'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to/'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +\set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\; +set spanner.read_only_staleness to 'STRONG'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to\'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +?set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?; +set spanner.read_only_staleness to 'STRONG'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to?'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-/set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/; +set spanner.read_only_staleness to 'STRONG'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to-/'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/#set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#; +set spanner.read_only_staleness to 'STRONG'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to/#'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/-set spanner.read_only_staleness to 'STRONG'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-; +set spanner.read_only_staleness to 'STRONG'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to/-'STRONG'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321z'; +set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123-08:00'; NEW_CONNECTION; - set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; + set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; - set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; + set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; set -spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +spanner.read_only_staleness +to +'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'); +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; ++set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123z'; NEW_CONNECTION; - set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; + set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; - set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; + set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; set -spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +spanner.read_only_staleness +to +'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'); +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; ++set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 12S'; +SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set spanner.read_only_staleness='max_staleness 12s'; +set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123+07:45'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 12s'; + set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 12s'; + set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 12s' ; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 12s' ; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 12s' +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; set -spanner.read_only_staleness='MAX_STALENESS 12s'; +spanner.read_only_staleness +to +'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='MAX_STALENESS 12s'; +foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s' bar; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='MAX_STALENESS 12s'; +%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'%; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS%12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='MAX_STALENESS 12s'; +_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'_; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS_12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='MAX_STALENESS 12s'; +&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'&; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS&12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='MAX_STALENESS 12s'; +$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'$; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS$12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='MAX_STALENESS 12s'; +@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'@; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS@12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='MAX_STALENESS 12s'; +!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'!; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS!12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='MAX_STALENESS 12s'; +*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'*; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS*12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='MAX_STALENESS 12s'; +(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'(; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS(12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='MAX_STALENESS 12s'; +)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'); +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS)12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='MAX_STALENESS 12s'; +-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'-; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='MAX_STALENESS 12s'; ++set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'+; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS+12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='MAX_STALENESS 12s'; +-#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'-#; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-#12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='MAX_STALENESS 12s'; +/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'/; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='MAX_STALENESS 12s'; +\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'\; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS\12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='MAX_STALENESS 12s'; +?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'?; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS?12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='MAX_STALENESS 12s'; +-/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'-/; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-/12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='MAX_STALENESS 12s'; +/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'/#; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/#12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='MAX_STALENESS 12s'; +/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 12s'/-; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/-12s'; +set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100MS'; +SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set spanner.read_only_staleness='max_staleness 100ms'; +set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321-07:00'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 100ms'; + set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 100ms'; + set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 100ms' ; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 100ms' ; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 100ms' +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; set -spanner.read_only_staleness='MAX_STALENESS 100ms'; +spanner.read_only_staleness +to +'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='MAX_STALENESS 100ms'; +foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms' bar; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='MAX_STALENESS 100ms'; +%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'%; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS%100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='MAX_STALENESS 100ms'; +_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'_; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS_100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='MAX_STALENESS 100ms'; +&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'&; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS&100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='MAX_STALENESS 100ms'; +$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'$; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS$100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='MAX_STALENESS 100ms'; +@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'@; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS@100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='MAX_STALENESS 100ms'; +!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'!; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS!100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='MAX_STALENESS 100ms'; +*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'*; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS*100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='MAX_STALENESS 100ms'; +(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'(; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS(100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='MAX_STALENESS 100ms'; +)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'); +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS)100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='MAX_STALENESS 100ms'; +-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'-; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='MAX_STALENESS 100ms'; ++set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'+; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS+100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='MAX_STALENESS 100ms'; +-#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'-#; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-#100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='MAX_STALENESS 100ms'; +/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'/; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='MAX_STALENESS 100ms'; +\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'\; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS\100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='MAX_STALENESS 100ms'; +?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'?; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS?100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='MAX_STALENESS 100ms'; +-/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'-/; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-/100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='MAX_STALENESS 100ms'; +/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'/#; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/#100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='MAX_STALENESS 100ms'; +/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 100ms'/-; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/-100ms'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 99999US'; +SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set spanner.read_only_staleness='max_staleness 99999us'; +set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321z'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 99999us'; + set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 99999us'; + set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 99999us' ; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 99999us' ; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 99999us' +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; set -spanner.read_only_staleness='MAX_STALENESS 99999us'; +spanner.read_only_staleness +to +'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='MAX_STALENESS 99999us'; +foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us' bar; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='MAX_STALENESS 99999us'; +%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'%; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS%99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='MAX_STALENESS 99999us'; +_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'_; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS_99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='MAX_STALENESS 99999us'; +&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'&; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS&99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='MAX_STALENESS 99999us'; +$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'$; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS$99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='MAX_STALENESS 99999us'; +@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'@; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS@99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='MAX_STALENESS 99999us'; +!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'!; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS!99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='MAX_STALENESS 99999us'; +*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'*; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS*99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='MAX_STALENESS 99999us'; +(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'(; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS(99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='MAX_STALENESS 99999us'; +)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'); +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS)99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='MAX_STALENESS 99999us'; +-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'-; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='MAX_STALENESS 99999us'; ++set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'+; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS+99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='MAX_STALENESS 99999us'; +-#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'-#; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-#99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='MAX_STALENESS 99999us'; +/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'/; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='MAX_STALENESS 99999us'; +\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'\; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS\99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='MAX_STALENESS 99999us'; +?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'?; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS?99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='MAX_STALENESS 99999us'; +-/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'-/; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-/99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='MAX_STALENESS 99999us'; +/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'/#; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/#99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='MAX_STALENESS 99999us'; +/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 99999us'/-; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/-99999us'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10NS'; +SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set spanner.read_only_staleness='max_staleness 10ns'; +set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321+05:30'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 10ns'; + set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; - set spanner.read_only_staleness='MAX_STALENESS 10ns'; + set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 10ns' ; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 10ns' ; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 10ns' +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set spanner.read_only_staleness='MAX_STALENESS 10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; set -spanner.read_only_staleness='MAX_STALENESS 10ns'; +spanner.read_only_staleness +to +'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='MAX_STALENESS 10ns'; +foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns' bar; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='MAX_STALENESS 10ns'; +%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'%; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS%10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='MAX_STALENESS 10ns'; +_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'_; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS_10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='MAX_STALENESS 10ns'; +&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'&; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS&10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='MAX_STALENESS 10ns'; +$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'$; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS$10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='MAX_STALENESS 10ns'; +@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'@; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS@10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='MAX_STALENESS 10ns'; +!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'!; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS!10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='MAX_STALENESS 10ns'; +*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'*; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS*10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='MAX_STALENESS 10ns'; +(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'(; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS(10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='MAX_STALENESS 10ns'; +)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'); +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS)10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='MAX_STALENESS 10ns'; +-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'-; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='MAX_STALENESS 10ns'; ++set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'+; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS+10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='MAX_STALENESS 10ns'; +-#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'-#; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-#10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='MAX_STALENESS 10ns'; +/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'/; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='MAX_STALENESS 10ns'; +\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'\; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS\10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='MAX_STALENESS 10ns'; +?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'?; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS?10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='MAX_STALENESS 10ns'; +-/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'-/; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS-/10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='MAX_STALENESS 10ns'; +/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'/#; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/#10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='MAX_STALENESS 10ns'; +/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS 10ns'/-; +set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='MAX_STALENESS/-10ns'; +set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15s'; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 15S'; +SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 12S'; NEW_CONNECTION; -set spanner.read_only_staleness='exact_staleness 15s'; +set spanner.read_only_staleness to 'max_staleness 12s'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 15s'; + set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 15s'; + set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15s'; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15s' ; +set spanner.read_only_staleness to 'MAX_STALENESS 12s' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15s' ; +set spanner.read_only_staleness to 'MAX_STALENESS 12s' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15s' +set spanner.read_only_staleness to 'MAX_STALENESS 12s' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15s'; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15s'; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; set -spanner.read_only_staleness='EXACT_STALENESS 15s'; +spanner.read_only_staleness +to +'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='EXACT_STALENESS 15s'; +foo set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s' bar; +set spanner.read_only_staleness to 'MAX_STALENESS 12s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='EXACT_STALENESS 15s'; +%set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'%; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS%15s'; +set spanner.read_only_staleness to 'MAX_STALENESS%12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='EXACT_STALENESS 15s'; +_set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'_; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS_15s'; +set spanner.read_only_staleness to 'MAX_STALENESS_12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='EXACT_STALENESS 15s'; +&set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'&; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS&15s'; +set spanner.read_only_staleness to 'MAX_STALENESS&12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='EXACT_STALENESS 15s'; +$set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'$; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS$15s'; +set spanner.read_only_staleness to 'MAX_STALENESS$12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='EXACT_STALENESS 15s'; +@set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'@; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS@15s'; +set spanner.read_only_staleness to 'MAX_STALENESS@12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='EXACT_STALENESS 15s'; +!set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'!; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS!15s'; +set spanner.read_only_staleness to 'MAX_STALENESS!12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='EXACT_STALENESS 15s'; +*set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'*; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS*15s'; +set spanner.read_only_staleness to 'MAX_STALENESS*12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='EXACT_STALENESS 15s'; +(set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'(; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS(15s'; +set spanner.read_only_staleness to 'MAX_STALENESS(12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='EXACT_STALENESS 15s'; +)set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'); +set spanner.read_only_staleness to 'MAX_STALENESS 12s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS)15s'; +set spanner.read_only_staleness to 'MAX_STALENESS)12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='EXACT_STALENESS 15s'; +-set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'-; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-15s'; +set spanner.read_only_staleness to 'MAX_STALENESS-12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='EXACT_STALENESS 15s'; ++set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'+; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS+15s'; +set spanner.read_only_staleness to 'MAX_STALENESS+12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='EXACT_STALENESS 15s'; +-#set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'-#; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-#15s'; +set spanner.read_only_staleness to 'MAX_STALENESS-#12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='EXACT_STALENESS 15s'; +/set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'/; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/15s'; +set spanner.read_only_staleness to 'MAX_STALENESS/12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='EXACT_STALENESS 15s'; +\set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'\; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS\15s'; +set spanner.read_only_staleness to 'MAX_STALENESS\12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='EXACT_STALENESS 15s'; +?set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'?; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS?15s'; +set spanner.read_only_staleness to 'MAX_STALENESS?12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='EXACT_STALENESS 15s'; +-/set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'-/; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-/15s'; +set spanner.read_only_staleness to 'MAX_STALENESS-/12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='EXACT_STALENESS 15s'; +/#set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'/#; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/#15s'; +set spanner.read_only_staleness to 'MAX_STALENESS/#12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='EXACT_STALENESS 15s'; +/-set spanner.read_only_staleness to 'MAX_STALENESS 12s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15s'/-; +set spanner.read_only_staleness to 'MAX_STALENESS 12s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/-15s'; +set spanner.read_only_staleness to 'MAX_STALENESS/-12s'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1500MS'; +SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 100MS'; NEW_CONNECTION; -set spanner.read_only_staleness='exact_staleness 1500ms'; +set spanner.read_only_staleness to 'max_staleness 100ms'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; + set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; + set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 1500ms' ; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 1500ms' ; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 1500ms' +set spanner.read_only_staleness to 'MAX_STALENESS 100ms' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; set -spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +spanner.read_only_staleness +to +'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +foo set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms' bar; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +%set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'%; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS%1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS%100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +_set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'_; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS_1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS_100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +&set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'&; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS&1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS&100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +$set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'$; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS$1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS$100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +@set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'@; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS@1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS@100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +!set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'!; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS!1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS!100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +*set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'*; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS*1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS*100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +(set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'(; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS(1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS(100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +)set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'); +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS)1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS)100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +-set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS-100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; ++set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'+; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS+1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS+100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +-#set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-#; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-#1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS-#100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +/set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS/100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +\set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'\; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS\1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS\100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +?set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'?; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS?1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS?100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +-/set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-/; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-/1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS-/100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +/#set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/#; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/#1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS/#100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='EXACT_STALENESS 1500ms'; +/-set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/-; +set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/-1500ms'; +set spanner.read_only_staleness to 'MAX_STALENESS/-100ms'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 15000000US'; +SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 99999US'; NEW_CONNECTION; -set spanner.read_only_staleness='exact_staleness 15000000us'; +set spanner.read_only_staleness to 'max_staleness 99999us'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; + set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; + set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15000000us' ; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15000000us' ; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15000000us' +set spanner.read_only_staleness to 'MAX_STALENESS 99999us' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; set -spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +spanner.read_only_staleness +to +'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +foo set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us' bar; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +%set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'%; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS%15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS%99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +_set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'_; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS_15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS_99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +&set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'&; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS&15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS&99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +$set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'$; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS$15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS$99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +@set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'@; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS@15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS@99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +!set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'!; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS!15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS!99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +*set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'*; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS*15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS*99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +(set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'(; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS(15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS(99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +)set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'); +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS)15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS)99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +-set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS-99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; ++set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'+; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS+15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS+99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +-#set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-#; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-#15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS-#99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +/set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS/99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +\set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'\; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS\15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS\99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +?set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'?; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS?15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS?99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +-/set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-/; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-/15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS-/99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +/#set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/#; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/#15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS/#99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='EXACT_STALENESS 15000000us'; +/-set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/-; +set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/-15000000us'; +set spanner.read_only_staleness to 'MAX_STALENESS/-99999us'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 9999NS'; +SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 10NS'; NEW_CONNECTION; -set spanner.read_only_staleness='exact_staleness 9999ns'; +set spanner.read_only_staleness to 'max_staleness 10ns'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; + set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; - set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; + set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 9999ns' ; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 9999ns' ; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 9999ns' +set spanner.read_only_staleness to 'MAX_STALENESS 10ns' ; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; set -spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +spanner.read_only_staleness +to +'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +foo set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns' bar; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +%set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'%; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS%9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS%10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +_set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'_; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS_9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS_10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +&set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'&; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS&9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS&10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +$set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'$; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS$9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS$10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +@set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'@; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS@9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS@10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +!set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'!; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS!9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS!10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +*set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'*; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS*9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS*10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +(set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'(; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS(9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS(10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +)set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'); +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS)9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS)10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +-set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS-10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; ++set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'+; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS+9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS+10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +-#set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-#; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-#9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS-#10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +/set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS/10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +\set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'\; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS\9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS\10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +?set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'?; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS?9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS?10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +-/set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-/; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS-/9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS-/10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +/#set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/#; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/#9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS/#10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness='EXACT_STALENESS 9999ns'; +/-set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/-; +set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness='EXACT_STALENESS/-9999ns'; +set spanner.read_only_staleness to 'MAX_STALENESS/-10ns'; NEW_CONNECTION; -set spanner.read_only_staleness to 'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'STRONG'; +SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 15S'; NEW_CONNECTION; -set spanner.read_only_staleness to 'strong'; +set spanner.read_only_staleness to 'exact_staleness 15s'; NEW_CONNECTION; - set spanner.read_only_staleness to 'STRONG'; + set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; - set spanner.read_only_staleness to 'STRONG'; + set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; -set spanner.read_only_staleness to 'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; -set spanner.read_only_staleness to 'STRONG' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'STRONG' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'STRONG' +set spanner.read_only_staleness to 'EXACT_STALENESS 15s' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; -set spanner.read_only_staleness to 'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; set spanner.read_only_staleness to -'STRONG'; +'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'STRONG'; +foo set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG' bar; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'STRONG'; +%set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'%; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to%'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS%15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'STRONG'; +_set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'_; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to_'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS_15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'STRONG'; +&set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'&; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to&'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS&15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'STRONG'; +$set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'$; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to$'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS$15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'STRONG'; +@set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'@; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to@'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS@15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'STRONG'; +!set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'!; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to!'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS!15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'STRONG'; +*set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'*; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to*'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS*15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'STRONG'; +(set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'(; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to('STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS(15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'STRONG'; +)set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'); +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to)'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS)15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'STRONG'; +-set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'-; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to-'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS-15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'STRONG'; ++set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'+; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to+'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS+15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'STRONG'; +-#set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'-#; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to-#'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS-#15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'STRONG'; +/set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'/; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to/'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS/15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'STRONG'; +\set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'\; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to\'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS\15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'STRONG'; +?set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'?; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to?'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS?15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'STRONG'; +-/set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'-/; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to-/'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS-/15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'STRONG'; +/#set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'/#; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to/#'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS/#15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'STRONG'; +/-set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'STRONG'/-; +set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to/-'STRONG'; +set spanner.read_only_staleness to 'EXACT_STALENESS/-15s'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 1500MS'; NEW_CONNECTION; -set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123-08:00'; +set spanner.read_only_staleness to 'exact_staleness 1500ms'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; + set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; + set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; set spanner.read_only_staleness to -'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +foo set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +%set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS%1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +_set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS_1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +&set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS&1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +$set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS$1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +@set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS@1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +!set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS!1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +*set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS*1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +(set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS(1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +)set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'); +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS)1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS-1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; ++set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS+1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-#set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS-#1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS/1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +\set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS\1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +?set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS?1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +-/set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS-/1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/#set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS/#1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'; +/-set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-; +set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS/-1500ms'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 15000000US'; NEW_CONNECTION; -set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123z'; +set spanner.read_only_staleness to 'exact_staleness 15000000us'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; + set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; + set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; set spanner.read_only_staleness to -'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +foo set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +%set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS%15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +_set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS_15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +&set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS&15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +$set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS$15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +@set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS@15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +!set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS!15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +*set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS*15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +(set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS(15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +)set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'); +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS)15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS-15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; ++set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS+15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-#set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS-#15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS/15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +\set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS\15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +?set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS?15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +-/set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS-/15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/#set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS/#15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'; +/-set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-; +set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z'; +set spanner.read_only_staleness to 'EXACT_STALENESS/-15000000us'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 9999NS'; NEW_CONNECTION; -set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123+07:45'; +set spanner.read_only_staleness to 'exact_staleness 9999ns'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; + set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; + set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; set spanner.read_only_staleness to -'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +foo set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +%set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS%9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +_set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS_9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +&set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS&9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +$set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS$9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +@set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS@9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +!set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS!9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +*set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS*9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +(set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS(9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +)set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'); +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS)9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS-9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; ++set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS+9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-#set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS-#9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS/9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +\set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS\9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +?set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS?9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +-/set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS-/9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/#set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45'; +set spanner.read_only_staleness to 'EXACT_STALENESS/#9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'; +/-set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-; +set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45'; -NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; -NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.read_only_staleness to 'EXACT_STALENESS/-9999ns'; NEW_CONNECTION; -set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321-07:00'; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; - set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; + set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; - set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; + set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set -spanner.read_only_staleness -to -'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +set +spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +foo set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +%set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00'; +set%spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +_set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00'; +set_spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +&set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00'; +set&spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +$set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00'; +set$spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +@set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00'; +set@spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +!set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00'; +set!spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +*set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00'; +set*spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +(set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00'; +set(spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +)set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'); +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00'; +set)spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00'; +set-spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; ++set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00'; +set+spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-#set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00'; +set-#spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00'; +set/spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +\set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00'; +set\spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +?set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00'; +set?spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +-/set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00'; +set-/spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/#set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00'; +set/#spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'; +/-set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00'; -NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; -NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set/-spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; NEW_CONNECTION; -set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321z'; +set spanner.directed_read=''; NEW_CONNECTION; - set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; + set spanner.directed_read=''; NEW_CONNECTION; - set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; + set spanner.directed_read=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set spanner.directed_read=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; +set spanner.directed_read='' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ; +set spanner.directed_read='' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' +set spanner.directed_read='' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set spanner.directed_read=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +set spanner.directed_read=''; NEW_CONNECTION; set -spanner.read_only_staleness -to -'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +foo set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar; +set spanner.directed_read='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +%set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%; +set spanner.directed_read=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321Z'; +set%spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +_set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_; +set spanner.directed_read=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321Z'; +set_spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +&set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&; +set spanner.directed_read=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321Z'; +set&spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +$set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$; +set spanner.directed_read=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321Z'; +set$spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +@set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@; +set spanner.directed_read=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321Z'; +set@spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +!set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!; +set spanner.directed_read=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321Z'; +set!spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +*set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*; +set spanner.directed_read=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321Z'; +set*spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +(set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(; +set spanner.directed_read=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321Z'; +set(spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +)set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'); +set spanner.directed_read=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321Z'; +set)spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-; +set spanner.directed_read=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321Z'; +set-spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; ++set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+; +set spanner.directed_read=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321Z'; +set+spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-#set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#; +set spanner.directed_read=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z'; +set-#spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/; +set spanner.directed_read=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321Z'; +set/spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +\set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\; +set spanner.directed_read=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321Z'; +set\spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +?set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?; +set spanner.directed_read=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321Z'; +set?spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +-/set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/; +set spanner.directed_read=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z'; +set-/spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/#set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#; +set spanner.directed_read=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z'; +set/#spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'; +/-set spanner.directed_read=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-; +set spanner.directed_read=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z'; +set/-spanner.directed_read=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.optimizer_version='1'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +SET SPANNER.OPTIMIZER_VERSION='1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321+05:30'; +set spanner.optimizer_version='1'; NEW_CONNECTION; - set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; + set spanner.optimizer_version='1'; NEW_CONNECTION; - set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; + set spanner.optimizer_version='1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.optimizer_version='1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; +set spanner.optimizer_version='1' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ; +set spanner.optimizer_version='1' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' +set spanner.optimizer_version='1' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.optimizer_version='1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +set spanner.optimizer_version='1'; NEW_CONNECTION; set -spanner.read_only_staleness -to -'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +foo set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar; +set spanner.optimizer_version='1' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +%set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%; +set spanner.optimizer_version='1'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30'; +set%spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +_set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_; +set spanner.optimizer_version='1'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30'; +set_spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +&set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&; +set spanner.optimizer_version='1'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30'; +set&spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +$set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$; +set spanner.optimizer_version='1'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30'; +set$spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +@set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@; +set spanner.optimizer_version='1'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30'; +set@spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +!set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!; +set spanner.optimizer_version='1'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30'; +set!spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +*set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*; +set spanner.optimizer_version='1'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30'; +set*spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +(set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(; +set spanner.optimizer_version='1'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30'; +set(spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +)set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'); +set spanner.optimizer_version='1'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30'; +set)spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-; +set spanner.optimizer_version='1'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30'; +set-spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; ++set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+; +set spanner.optimizer_version='1'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30'; +set+spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-#set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#; +set spanner.optimizer_version='1'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30'; +set-#spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/; +set spanner.optimizer_version='1'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30'; +set/spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +\set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\; +set spanner.optimizer_version='1'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30'; +set\spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +?set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?; +set spanner.optimizer_version='1'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30'; +set?spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +-/set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/; +set spanner.optimizer_version='1'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30'; +set-/spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/#set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#; +set spanner.optimizer_version='1'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30'; +set/#spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'; +/-set spanner.optimizer_version='1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-; +set spanner.optimizer_version='1'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30'; +set/-spanner.optimizer_version='1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +set spanner.optimizer_version='200'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 12S'; +SET SPANNER.OPTIMIZER_VERSION='200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'max_staleness 12s'; +set spanner.optimizer_version='200'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 12s'; + set spanner.optimizer_version='200'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 12s'; + set spanner.optimizer_version='200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +set spanner.optimizer_version='200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 12s' ; +set spanner.optimizer_version='200' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 12s' ; +set spanner.optimizer_version='200' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 12s' +set spanner.optimizer_version='200' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +set spanner.optimizer_version='200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +set spanner.optimizer_version='200'; NEW_CONNECTION; set -spanner.read_only_staleness -to -'MAX_STALENESS 12s'; +spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +foo set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s' bar; +set spanner.optimizer_version='200' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +%set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'%; +set spanner.optimizer_version='200'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS%12s'; +set%spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +_set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'_; +set spanner.optimizer_version='200'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS_12s'; +set_spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +&set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'&; +set spanner.optimizer_version='200'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS&12s'; +set&spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +$set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'$; +set spanner.optimizer_version='200'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS$12s'; +set$spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +@set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'@; +set spanner.optimizer_version='200'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS@12s'; +set@spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +!set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'!; +set spanner.optimizer_version='200'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS!12s'; +set!spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +*set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'*; +set spanner.optimizer_version='200'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS*12s'; +set*spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +(set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'(; +set spanner.optimizer_version='200'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS(12s'; +set(spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +)set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'); +set spanner.optimizer_version='200'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS)12s'; +set)spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +-set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'-; +set spanner.optimizer_version='200'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-12s'; +set-spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'MAX_STALENESS 12s'; ++set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'+; +set spanner.optimizer_version='200'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS+12s'; +set+spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +-#set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'-#; +set spanner.optimizer_version='200'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-#12s'; +set-#spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +/set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'/; +set spanner.optimizer_version='200'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/12s'; +set/spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +\set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'\; +set spanner.optimizer_version='200'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS\12s'; +set\spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +?set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'?; +set spanner.optimizer_version='200'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS?12s'; +set?spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +-/set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'-/; +set spanner.optimizer_version='200'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-/12s'; +set-/spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +/#set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'/#; +set spanner.optimizer_version='200'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/#12s'; +set/#spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'MAX_STALENESS 12s'; +/-set spanner.optimizer_version='200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 12s'/-; +set spanner.optimizer_version='200'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/-12s'; +set/-spanner.optimizer_version='200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +set spanner.optimizer_version='LATEST'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 100MS'; +SET SPANNER.OPTIMIZER_VERSION='LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'max_staleness 100ms'; +set spanner.optimizer_version='latest'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; + set spanner.optimizer_version='LATEST'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; + set spanner.optimizer_version='LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +set spanner.optimizer_version='LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 100ms' ; +set spanner.optimizer_version='LATEST' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 100ms' ; +set spanner.optimizer_version='LATEST' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 100ms' +set spanner.optimizer_version='LATEST' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +set spanner.optimizer_version='LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +set spanner.optimizer_version='LATEST'; NEW_CONNECTION; set -spanner.read_only_staleness -to -'MAX_STALENESS 100ms'; +spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +foo set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms' bar; +set spanner.optimizer_version='LATEST' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +%set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'%; +set spanner.optimizer_version='LATEST'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS%100ms'; +set%spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +_set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'_; +set spanner.optimizer_version='LATEST'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS_100ms'; +set_spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +&set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'&; +set spanner.optimizer_version='LATEST'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS&100ms'; +set&spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +$set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'$; +set spanner.optimizer_version='LATEST'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS$100ms'; +set$spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +@set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'@; +set spanner.optimizer_version='LATEST'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS@100ms'; +set@spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +!set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'!; +set spanner.optimizer_version='LATEST'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS!100ms'; +set!spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +*set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'*; +set spanner.optimizer_version='LATEST'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS*100ms'; +set*spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +(set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'(; +set spanner.optimizer_version='LATEST'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS(100ms'; +set(spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +)set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'); +set spanner.optimizer_version='LATEST'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS)100ms'; +set)spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +-set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-; +set spanner.optimizer_version='LATEST'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-100ms'; +set-spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; ++set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'+; +set spanner.optimizer_version='LATEST'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS+100ms'; +set+spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +-#set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-#; +set spanner.optimizer_version='LATEST'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-#100ms'; +set-#spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +/set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/; +set spanner.optimizer_version='LATEST'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/100ms'; +set/spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +\set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'\; +set spanner.optimizer_version='LATEST'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS\100ms'; +set\spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +?set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'?; +set spanner.optimizer_version='LATEST'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS?100ms'; +set?spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +-/set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-/; +set spanner.optimizer_version='LATEST'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-/100ms'; +set-/spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +/#set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/#; +set spanner.optimizer_version='LATEST'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/#100ms'; +set/#spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'MAX_STALENESS 100ms'; +/-set spanner.optimizer_version='LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/-; +set spanner.optimizer_version='LATEST'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/-100ms'; +set/-spanner.optimizer_version='LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +set spanner.optimizer_version=''; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 99999US'; +SET SPANNER.OPTIMIZER_VERSION=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'max_staleness 99999us'; +set spanner.optimizer_version=''; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; + set spanner.optimizer_version=''; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; + set spanner.optimizer_version=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +set spanner.optimizer_version=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 99999us' ; +set spanner.optimizer_version='' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 99999us' ; +set spanner.optimizer_version='' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 99999us' +set spanner.optimizer_version='' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +set spanner.optimizer_version=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +set spanner.optimizer_version=''; NEW_CONNECTION; set -spanner.read_only_staleness -to -'MAX_STALENESS 99999us'; +spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +foo set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us' bar; +set spanner.optimizer_version='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +%set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'%; +set spanner.optimizer_version=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS%99999us'; +set%spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +_set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'_; +set spanner.optimizer_version=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS_99999us'; +set_spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +&set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'&; +set spanner.optimizer_version=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS&99999us'; +set&spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +$set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'$; +set spanner.optimizer_version=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS$99999us'; +set$spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +@set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'@; +set spanner.optimizer_version=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS@99999us'; +set@spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +!set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'!; +set spanner.optimizer_version=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS!99999us'; +set!spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +*set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'*; +set spanner.optimizer_version=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS*99999us'; +set*spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +(set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'(; +set spanner.optimizer_version=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS(99999us'; +set(spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +)set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'); +set spanner.optimizer_version=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS)99999us'; +set)spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +-set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-; +set spanner.optimizer_version=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-99999us'; +set-spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; ++set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'+; +set spanner.optimizer_version=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS+99999us'; +set+spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +-#set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-#; +set spanner.optimizer_version=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-#99999us'; +set-#spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +/set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/; +set spanner.optimizer_version=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/99999us'; +set/spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +\set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'\; +set spanner.optimizer_version=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS\99999us'; +set\spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +?set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'?; +set spanner.optimizer_version=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS?99999us'; +set?spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +-/set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-/; +set spanner.optimizer_version=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-/99999us'; +set-/spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +/#set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/#; +set spanner.optimizer_version=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/#99999us'; +set/#spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'MAX_STALENESS 99999us'; +/-set spanner.optimizer_version=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/-; +set spanner.optimizer_version=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/-99999us'; +set/-spanner.optimizer_version=''; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +set spanner.optimizer_version to '1'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 10NS'; +SET SPANNER.OPTIMIZER_VERSION TO '1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'max_staleness 10ns'; +set spanner.optimizer_version to '1'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; + set spanner.optimizer_version to '1'; NEW_CONNECTION; - set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; + set spanner.optimizer_version to '1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +set spanner.optimizer_version to '1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 10ns' ; +set spanner.optimizer_version to '1' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 10ns' ; +set spanner.optimizer_version to '1' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 10ns' +set spanner.optimizer_version to '1' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +set spanner.optimizer_version to '1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +set spanner.optimizer_version to '1'; NEW_CONNECTION; set -spanner.read_only_staleness +spanner.optimizer_version to -'MAX_STALENESS 10ns'; +'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +foo set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns' bar; +set spanner.optimizer_version to '1' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +%set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'%; +set spanner.optimizer_version to '1'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS%10ns'; +set spanner.optimizer_version to%'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +_set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'_; +set spanner.optimizer_version to '1'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS_10ns'; +set spanner.optimizer_version to_'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +&set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'&; +set spanner.optimizer_version to '1'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS&10ns'; +set spanner.optimizer_version to&'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +$set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'$; +set spanner.optimizer_version to '1'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS$10ns'; +set spanner.optimizer_version to$'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +@set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'@; +set spanner.optimizer_version to '1'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS@10ns'; +set spanner.optimizer_version to@'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +!set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'!; +set spanner.optimizer_version to '1'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS!10ns'; +set spanner.optimizer_version to!'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +*set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'*; +set spanner.optimizer_version to '1'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS*10ns'; +set spanner.optimizer_version to*'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +(set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'(; +set spanner.optimizer_version to '1'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS(10ns'; +set spanner.optimizer_version to('1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +)set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'); +set spanner.optimizer_version to '1'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS)10ns'; +set spanner.optimizer_version to)'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +-set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-; +set spanner.optimizer_version to '1'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-10ns'; +set spanner.optimizer_version to-'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; ++set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'+; +set spanner.optimizer_version to '1'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS+10ns'; +set spanner.optimizer_version to+'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +-#set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-#; +set spanner.optimizer_version to '1'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-#10ns'; +set spanner.optimizer_version to-#'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +/set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/; +set spanner.optimizer_version to '1'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/10ns'; +set spanner.optimizer_version to/'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +\set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'\; +set spanner.optimizer_version to '1'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS\10ns'; +set spanner.optimizer_version to\'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +?set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'?; +set spanner.optimizer_version to '1'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS?10ns'; +set spanner.optimizer_version to?'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +-/set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-/; +set spanner.optimizer_version to '1'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS-/10ns'; +set spanner.optimizer_version to-/'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +/#set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/#; +set spanner.optimizer_version to '1'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/#10ns'; +set spanner.optimizer_version to/#'1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'MAX_STALENESS 10ns'; +/-set spanner.optimizer_version to '1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/-; +set spanner.optimizer_version to '1'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'MAX_STALENESS/-10ns'; +set spanner.optimizer_version to/-'1'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +set spanner.optimizer_version to '200'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 15S'; +SET SPANNER.OPTIMIZER_VERSION TO '200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'exact_staleness 15s'; +set spanner.optimizer_version to '200'; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; + set spanner.optimizer_version to '200'; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; + set spanner.optimizer_version to '200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +set spanner.optimizer_version to '200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15s' ; +set spanner.optimizer_version to '200' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15s' ; +set spanner.optimizer_version to '200' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15s' +set spanner.optimizer_version to '200' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +set spanner.optimizer_version to '200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +set spanner.optimizer_version to '200'; NEW_CONNECTION; set -spanner.read_only_staleness +spanner.optimizer_version to -'EXACT_STALENESS 15s'; +'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +foo set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s' bar; +set spanner.optimizer_version to '200' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +%set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'%; +set spanner.optimizer_version to '200'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS%15s'; +set spanner.optimizer_version to%'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +_set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'_; +set spanner.optimizer_version to '200'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS_15s'; +set spanner.optimizer_version to_'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +&set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'&; +set spanner.optimizer_version to '200'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS&15s'; +set spanner.optimizer_version to&'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +$set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'$; +set spanner.optimizer_version to '200'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS$15s'; +set spanner.optimizer_version to$'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +@set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'@; +set spanner.optimizer_version to '200'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS@15s'; +set spanner.optimizer_version to@'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +!set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'!; +set spanner.optimizer_version to '200'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS!15s'; +set spanner.optimizer_version to!'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +*set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'*; +set spanner.optimizer_version to '200'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS*15s'; +set spanner.optimizer_version to*'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +(set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'(; +set spanner.optimizer_version to '200'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS(15s'; +set spanner.optimizer_version to('200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +)set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'); +set spanner.optimizer_version to '200'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS)15s'; +set spanner.optimizer_version to)'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +-set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-; +set spanner.optimizer_version to '200'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-15s'; +set spanner.optimizer_version to-'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; ++set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'+; +set spanner.optimizer_version to '200'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS+15s'; +set spanner.optimizer_version to+'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +-#set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-#; +set spanner.optimizer_version to '200'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-#15s'; +set spanner.optimizer_version to-#'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +/set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/; +set spanner.optimizer_version to '200'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/15s'; +set spanner.optimizer_version to/'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +\set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'\; +set spanner.optimizer_version to '200'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS\15s'; +set spanner.optimizer_version to\'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +?set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'?; +set spanner.optimizer_version to '200'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS?15s'; +set spanner.optimizer_version to?'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +-/set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-/; +set spanner.optimizer_version to '200'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-/15s'; +set spanner.optimizer_version to-/'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +/#set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/#; +set spanner.optimizer_version to '200'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/#15s'; +set spanner.optimizer_version to/#'200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'EXACT_STALENESS 15s'; +/-set spanner.optimizer_version to '200'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/-; +set spanner.optimizer_version to '200'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/-15s'; +set spanner.optimizer_version to/-'200'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 1500MS'; +SET SPANNER.OPTIMIZER_VERSION TO 'LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'exact_staleness 1500ms'; +set spanner.optimizer_version to 'latest'; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; + set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; + set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' ; +set spanner.optimizer_version to 'LATEST' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' ; +set spanner.optimizer_version to 'LATEST' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' +set spanner.optimizer_version to 'LATEST' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; set -spanner.read_only_staleness +spanner.optimizer_version to -'EXACT_STALENESS 1500ms'; +'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +foo set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' bar; +set spanner.optimizer_version to 'LATEST' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +%set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'%; +set spanner.optimizer_version to 'LATEST'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS%1500ms'; +set spanner.optimizer_version to%'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +_set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'_; +set spanner.optimizer_version to 'LATEST'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS_1500ms'; +set spanner.optimizer_version to_'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +&set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'&; +set spanner.optimizer_version to 'LATEST'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS&1500ms'; +set spanner.optimizer_version to&'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +$set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'$; +set spanner.optimizer_version to 'LATEST'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS$1500ms'; +set spanner.optimizer_version to$'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +@set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'@; +set spanner.optimizer_version to 'LATEST'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS@1500ms'; +set spanner.optimizer_version to@'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +!set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'!; +set spanner.optimizer_version to 'LATEST'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS!1500ms'; +set spanner.optimizer_version to!'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +*set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'*; +set spanner.optimizer_version to 'LATEST'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS*1500ms'; +set spanner.optimizer_version to*'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +(set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'(; +set spanner.optimizer_version to 'LATEST'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS(1500ms'; +set spanner.optimizer_version to('LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +)set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'); +set spanner.optimizer_version to 'LATEST'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS)1500ms'; +set spanner.optimizer_version to)'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +-set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-; +set spanner.optimizer_version to 'LATEST'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-1500ms'; +set spanner.optimizer_version to-'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; ++set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'+; +set spanner.optimizer_version to 'LATEST'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS+1500ms'; +set spanner.optimizer_version to+'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +-#set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-#; +set spanner.optimizer_version to 'LATEST'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-#1500ms'; +set spanner.optimizer_version to-#'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +/set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/; +set spanner.optimizer_version to 'LATEST'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/1500ms'; +set spanner.optimizer_version to/'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +\set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'\; +set spanner.optimizer_version to 'LATEST'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS\1500ms'; +set spanner.optimizer_version to\'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +?set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'?; +set spanner.optimizer_version to 'LATEST'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS?1500ms'; +set spanner.optimizer_version to?'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +-/set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-/; +set spanner.optimizer_version to 'LATEST'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-/1500ms'; +set spanner.optimizer_version to-/'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +/#set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/#; +set spanner.optimizer_version to 'LATEST'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/#1500ms'; +set spanner.optimizer_version to/#'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'; +/-set spanner.optimizer_version to 'LATEST'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/-; +set spanner.optimizer_version to 'LATEST'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/-1500ms'; +set spanner.optimizer_version to/-'LATEST'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +set spanner.optimizer_version to ''; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 15000000US'; +SET SPANNER.OPTIMIZER_VERSION TO ''; NEW_CONNECTION; -set spanner.read_only_staleness to 'exact_staleness 15000000us'; +set spanner.optimizer_version to ''; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; + set spanner.optimizer_version to ''; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; + set spanner.optimizer_version to ''; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +set spanner.optimizer_version to ''; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' ; +set spanner.optimizer_version to '' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' ; +set spanner.optimizer_version to '' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' +set spanner.optimizer_version to '' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +set spanner.optimizer_version to ''; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +set spanner.optimizer_version to ''; NEW_CONNECTION; set -spanner.read_only_staleness +spanner.optimizer_version to -'EXACT_STALENESS 15000000us'; +''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +foo set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' bar; +set spanner.optimizer_version to '' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +%set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'%; +set spanner.optimizer_version to ''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS%15000000us'; +set spanner.optimizer_version to%''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +_set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'_; +set spanner.optimizer_version to ''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS_15000000us'; +set spanner.optimizer_version to_''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +&set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'&; +set spanner.optimizer_version to ''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS&15000000us'; +set spanner.optimizer_version to&''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +$set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'$; +set spanner.optimizer_version to ''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS$15000000us'; +set spanner.optimizer_version to$''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +@set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'@; +set spanner.optimizer_version to ''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS@15000000us'; +set spanner.optimizer_version to@''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +!set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'!; +set spanner.optimizer_version to ''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS!15000000us'; +set spanner.optimizer_version to!''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +*set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'*; +set spanner.optimizer_version to ''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS*15000000us'; +set spanner.optimizer_version to*''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +(set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'(; +set spanner.optimizer_version to ''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS(15000000us'; +set spanner.optimizer_version to(''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +)set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'); +set spanner.optimizer_version to ''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS)15000000us'; +set spanner.optimizer_version to)''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +-set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-; +set spanner.optimizer_version to ''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-15000000us'; +set spanner.optimizer_version to-''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; ++set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'+; +set spanner.optimizer_version to ''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS+15000000us'; +set spanner.optimizer_version to+''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +-#set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-#; +set spanner.optimizer_version to ''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-#15000000us'; +set spanner.optimizer_version to-#''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +/set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/; +set spanner.optimizer_version to ''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/15000000us'; +set spanner.optimizer_version to/''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +\set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'\; +set spanner.optimizer_version to ''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS\15000000us'; +set spanner.optimizer_version to\''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +?set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'?; +set spanner.optimizer_version to ''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS?15000000us'; +set spanner.optimizer_version to?''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +-/set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-/; +set spanner.optimizer_version to ''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-/15000000us'; +set spanner.optimizer_version to-/''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +/#set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/#; +set spanner.optimizer_version to ''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/#15000000us'; +set spanner.optimizer_version to/#''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'; +/-set spanner.optimizer_version to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/-; +set spanner.optimizer_version to ''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/-15000000us'; +set spanner.optimizer_version to/-''; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 9999NS'; +SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='AUTO_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.read_only_staleness to 'exact_staleness 9999ns'; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22utc'; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; + set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; - set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; + set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' ; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' ; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; set -spanner.read_only_staleness -to -'EXACT_STALENESS 9999ns'; +spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +foo set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' bar; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +%set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'%; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS%9999ns'; +set%spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +_set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'_; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS_9999ns'; +set_spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +&set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'&; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS&9999ns'; +set&spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +$set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'$; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS$9999ns'; +set$spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +@set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'@; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS@9999ns'; +set@spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +!set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'!; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS!9999ns'; +set!spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +*set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'*; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS*9999ns'; +set*spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +(set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'(; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS(9999ns'; +set(spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +)set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'); +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS)9999ns'; +set)spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +-set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-9999ns'; +set-spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; ++set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'+; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS+9999ns'; +set+spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +-#set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-#; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-#9999ns'; +set-#spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +/set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/9999ns'; +set/spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +\set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'\; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS\9999ns'; +set\spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +?set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'?; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS?9999ns'; +set?spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +-/set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-/; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS-/9999ns'; +set-/spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +/#set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/#; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/#9999ns'; +set/#spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'; +/-set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/-; +set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.read_only_staleness to 'EXACT_STALENESS/-9999ns'; +set/-spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set spanner.optimizer_statistics_package=''; NEW_CONNECTION; - set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE=''; NEW_CONNECTION; - set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set spanner.optimizer_statistics_package=''; +NEW_CONNECTION; + set spanner.optimizer_statistics_package=''; +NEW_CONNECTION; + set spanner.optimizer_statistics_package=''; NEW_CONNECTION; -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set spanner.optimizer_statistics_package=''; NEW_CONNECTION; -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +set spanner.optimizer_statistics_package='' ; NEW_CONNECTION; -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +set spanner.optimizer_statistics_package='' ; NEW_CONNECTION; -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' +set spanner.optimizer_statistics_package='' ; NEW_CONNECTION; -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set spanner.optimizer_statistics_package=''; NEW_CONNECTION; -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set spanner.optimizer_statistics_package=''; NEW_CONNECTION; set -spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +foo set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' bar; +set spanner.optimizer_statistics_package='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +%set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'%; +set spanner.optimizer_statistics_package=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set%spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +_set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'_; +set spanner.optimizer_statistics_package=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set_spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +&set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'&; +set spanner.optimizer_statistics_package=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set&spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +$set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'$; +set spanner.optimizer_statistics_package=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set$spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +@set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'@; +set spanner.optimizer_statistics_package=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set@spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +!set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'!; +set spanner.optimizer_statistics_package=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set!spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +*set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'*; +set spanner.optimizer_statistics_package=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set*spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +(set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'(; +set spanner.optimizer_statistics_package=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set(spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +)set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'); +set spanner.optimizer_statistics_package=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set)spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +-set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-; +set spanner.optimizer_statistics_package=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set-spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; ++set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'+; +set spanner.optimizer_statistics_package=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set+spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +-#set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-#; +set spanner.optimizer_statistics_package=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set-#spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +/set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/; +set spanner.optimizer_statistics_package=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set/spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +\set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'\; +set spanner.optimizer_statistics_package=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set\spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +?set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'?; +set spanner.optimizer_statistics_package=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set?spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +-/set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-/; +set spanner.optimizer_statistics_package=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set-/spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +/#set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/#; +set spanner.optimizer_statistics_package=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set/#spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +/-set spanner.optimizer_statistics_package=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/-; +set spanner.optimizer_statistics_package=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +set/-spanner.optimizer_statistics_package=''; NEW_CONNECTION; -set spanner.directed_read=''; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; - set spanner.directed_read=''; +SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE TO 'AUTO_20191128_14_47_22UTC'; NEW_CONNECTION; - set spanner.directed_read=''; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22utc'; +NEW_CONNECTION; + set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +NEW_CONNECTION; + set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.directed_read=''; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.directed_read='' ; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set spanner.directed_read='' ; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set spanner.directed_read='' +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' ; NEW_CONNECTION; -set spanner.directed_read=''; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.directed_read=''; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; set -spanner.directed_read=''; +spanner.optimizer_statistics_package +to +'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.directed_read=''; +foo set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read='' bar; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.directed_read=''; +%set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''%; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.directed_read=''; +set spanner.optimizer_statistics_package to%'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.directed_read=''; +_set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''_; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.directed_read=''; +set spanner.optimizer_statistics_package to_'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.directed_read=''; +&set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''&; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.directed_read=''; +set spanner.optimizer_statistics_package to&'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.directed_read=''; +$set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''$; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.directed_read=''; +set spanner.optimizer_statistics_package to$'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.directed_read=''; +@set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''@; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.directed_read=''; +set spanner.optimizer_statistics_package to@'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.directed_read=''; +!set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''!; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.directed_read=''; +set spanner.optimizer_statistics_package to!'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.directed_read=''; +*set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''*; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.directed_read=''; +set spanner.optimizer_statistics_package to*'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.directed_read=''; +(set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''(; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.directed_read=''; +set spanner.optimizer_statistics_package to('auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.directed_read=''; +)set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''); +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.directed_read=''; +set spanner.optimizer_statistics_package to)'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.directed_read=''; +-set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''-; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.directed_read=''; +set spanner.optimizer_statistics_package to-'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.directed_read=''; ++set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''+; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.directed_read=''; +set spanner.optimizer_statistics_package to+'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.directed_read=''; +-#set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''-#; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.directed_read=''; +set spanner.optimizer_statistics_package to-#'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.directed_read=''; +/set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''/; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.directed_read=''; +set spanner.optimizer_statistics_package to/'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.directed_read=''; +\set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''\; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.directed_read=''; +set spanner.optimizer_statistics_package to\'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.directed_read=''; +?set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''?; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.directed_read=''; +set spanner.optimizer_statistics_package to?'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.directed_read=''; +-/set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''-/; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.directed_read=''; +set spanner.optimizer_statistics_package to-/'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.directed_read=''; +/#set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''/#; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.directed_read=''; +set spanner.optimizer_statistics_package to/#'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.directed_read=''; +/-set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.directed_read=''/-; +set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.directed_read=''; +set spanner.optimizer_statistics_package to/-'auto_20191128_14_47_22UTC'; NEW_CONNECTION; -set spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION='1'; +SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE TO ''; NEW_CONNECTION; -set spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; - set spanner.optimizer_version='1'; + set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; - set spanner.optimizer_version='1'; + set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; -set spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; -set spanner.optimizer_version='1' ; +set spanner.optimizer_statistics_package to '' ; NEW_CONNECTION; -set spanner.optimizer_version='1' ; +set spanner.optimizer_statistics_package to '' ; NEW_CONNECTION; -set spanner.optimizer_version='1' +set spanner.optimizer_statistics_package to '' ; NEW_CONNECTION; -set spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; -set spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; set -spanner.optimizer_version='1'; +spanner.optimizer_statistics_package +to +''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version='1'; +foo set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1' bar; +set spanner.optimizer_statistics_package to '' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version='1'; +%set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'%; +set spanner.optimizer_statistics_package to ''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to%''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version='1'; +_set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'_; +set spanner.optimizer_statistics_package to ''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to_''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version='1'; +&set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'&; +set spanner.optimizer_statistics_package to ''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to&''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version='1'; +$set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'$; +set spanner.optimizer_statistics_package to ''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to$''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version='1'; +@set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'@; +set spanner.optimizer_statistics_package to ''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to@''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version='1'; +!set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'!; +set spanner.optimizer_statistics_package to ''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to!''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version='1'; +*set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'*; +set spanner.optimizer_statistics_package to ''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to*''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version='1'; +(set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'(; +set spanner.optimizer_statistics_package to ''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to(''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version='1'; +)set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'); +set spanner.optimizer_statistics_package to ''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to)''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version='1'; +-set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'-; +set spanner.optimizer_statistics_package to ''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to-''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version='1'; ++set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'+; +set spanner.optimizer_statistics_package to ''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to+''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version='1'; +-#set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'-#; +set spanner.optimizer_statistics_package to ''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to-#''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version='1'; +/set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'/; +set spanner.optimizer_statistics_package to ''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to/''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version='1'; +\set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'\; +set spanner.optimizer_statistics_package to ''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to\''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version='1'; +?set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'?; +set spanner.optimizer_statistics_package to ''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to?''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version='1'; +-/set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'-/; +set spanner.optimizer_statistics_package to ''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to-/''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version='1'; +/#set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'/#; +set spanner.optimizer_statistics_package to ''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to/#''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version='1'; +/-set spanner.optimizer_statistics_package to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='1'/-; +set spanner.optimizer_statistics_package to ''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.optimizer_version='1'; +set spanner.optimizer_statistics_package to/-''; NEW_CONNECTION; -set spanner.optimizer_version='200'; +set spanner.return_commit_stats = true; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION='200'; +SET SPANNER.RETURN_COMMIT_STATS = TRUE; NEW_CONNECTION; -set spanner.optimizer_version='200'; +set spanner.return_commit_stats = true; NEW_CONNECTION; - set spanner.optimizer_version='200'; + set spanner.return_commit_stats = true; NEW_CONNECTION; - set spanner.optimizer_version='200'; + set spanner.return_commit_stats = true; NEW_CONNECTION; -set spanner.optimizer_version='200'; +set spanner.return_commit_stats = true; NEW_CONNECTION; -set spanner.optimizer_version='200' ; +set spanner.return_commit_stats = true ; NEW_CONNECTION; -set spanner.optimizer_version='200' ; +set spanner.return_commit_stats = true ; NEW_CONNECTION; -set spanner.optimizer_version='200' +set spanner.return_commit_stats = true ; NEW_CONNECTION; -set spanner.optimizer_version='200'; +set spanner.return_commit_stats = true; NEW_CONNECTION; -set spanner.optimizer_version='200'; +set spanner.return_commit_stats = true; NEW_CONNECTION; set -spanner.optimizer_version='200'; +spanner.return_commit_stats += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version='200'; +foo set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200' bar; +set spanner.return_commit_stats = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version='200'; +%set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'%; +set spanner.return_commit_stats = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.optimizer_version='200'; +set spanner.return_commit_stats =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version='200'; +_set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'_; +set spanner.return_commit_stats = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.optimizer_version='200'; +set spanner.return_commit_stats =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version='200'; +&set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'&; +set spanner.return_commit_stats = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.optimizer_version='200'; +set spanner.return_commit_stats =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version='200'; +$set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'$; +set spanner.return_commit_stats = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.optimizer_version='200'; +set spanner.return_commit_stats =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version='200'; +@set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'@; +set spanner.return_commit_stats = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.optimizer_version='200'; +set spanner.return_commit_stats =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version='200'; +!set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'!; +set spanner.return_commit_stats = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.optimizer_version='200'; +set spanner.return_commit_stats =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version='200'; +*set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'*; +set spanner.return_commit_stats = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.optimizer_version='200'; +set spanner.return_commit_stats =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version='200'; +(set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'(; +set spanner.return_commit_stats = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.optimizer_version='200'; +set spanner.return_commit_stats =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version='200'; +)set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'); +set spanner.return_commit_stats = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.optimizer_version='200'; +set spanner.return_commit_stats =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version='200'; +-set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'-; +set spanner.return_commit_stats = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.optimizer_version='200'; +set spanner.return_commit_stats =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version='200'; ++set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'+; +set spanner.return_commit_stats = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.optimizer_version='200'; +set spanner.return_commit_stats =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version='200'; +-#set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'-#; +set spanner.return_commit_stats = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.optimizer_version='200'; +set spanner.return_commit_stats =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version='200'; +/set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'/; +set spanner.return_commit_stats = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.optimizer_version='200'; +set spanner.return_commit_stats =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version='200'; +\set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'\; +set spanner.return_commit_stats = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.optimizer_version='200'; +set spanner.return_commit_stats =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version='200'; +?set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'?; +set spanner.return_commit_stats = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.optimizer_version='200'; +set spanner.return_commit_stats =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version='200'; +-/set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'-/; +set spanner.return_commit_stats = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.optimizer_version='200'; +set spanner.return_commit_stats =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version='200'; +/#set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'/#; +set spanner.return_commit_stats = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.optimizer_version='200'; +set spanner.return_commit_stats =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version='200'; +/-set spanner.return_commit_stats = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='200'/-; +set spanner.return_commit_stats = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.optimizer_version='200'; +set spanner.return_commit_stats =/-true; NEW_CONNECTION; -set spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats = false; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION='LATEST'; +SET SPANNER.RETURN_COMMIT_STATS = FALSE; NEW_CONNECTION; -set spanner.optimizer_version='latest'; +set spanner.return_commit_stats = false; NEW_CONNECTION; - set spanner.optimizer_version='LATEST'; + set spanner.return_commit_stats = false; NEW_CONNECTION; - set spanner.optimizer_version='LATEST'; + set spanner.return_commit_stats = false; NEW_CONNECTION; -set spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats = false; NEW_CONNECTION; -set spanner.optimizer_version='LATEST' ; +set spanner.return_commit_stats = false ; NEW_CONNECTION; -set spanner.optimizer_version='LATEST' ; +set spanner.return_commit_stats = false ; NEW_CONNECTION; -set spanner.optimizer_version='LATEST' +set spanner.return_commit_stats = false ; NEW_CONNECTION; -set spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats = false; NEW_CONNECTION; -set spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats = false; NEW_CONNECTION; set -spanner.optimizer_version='LATEST'; +spanner.return_commit_stats += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version='LATEST'; +foo set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST' bar; +set spanner.return_commit_stats = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version='LATEST'; +%set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'%; +set spanner.return_commit_stats = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version='LATEST'; +_set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'_; +set spanner.return_commit_stats = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version='LATEST'; +&set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'&; +set spanner.return_commit_stats = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version='LATEST'; +$set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'$; +set spanner.return_commit_stats = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version='LATEST'; +@set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'@; +set spanner.return_commit_stats = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version='LATEST'; +!set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'!; +set spanner.return_commit_stats = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version='LATEST'; +*set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'*; +set spanner.return_commit_stats = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version='LATEST'; +(set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'(; +set spanner.return_commit_stats = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version='LATEST'; +)set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'); +set spanner.return_commit_stats = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version='LATEST'; +-set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'-; +set spanner.return_commit_stats = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version='LATEST'; ++set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'+; +set spanner.return_commit_stats = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version='LATEST'; +-#set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'-#; +set spanner.return_commit_stats = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version='LATEST'; +/set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'/; +set spanner.return_commit_stats = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version='LATEST'; +\set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'\; +set spanner.return_commit_stats = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version='LATEST'; +?set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'?; +set spanner.return_commit_stats = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version='LATEST'; +-/set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'-/; +set spanner.return_commit_stats = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version='LATEST'; +/#set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'/#; +set spanner.return_commit_stats = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version='LATEST'; +/-set spanner.return_commit_stats = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='LATEST'/-; +set spanner.return_commit_stats = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.optimizer_version='LATEST'; +set spanner.return_commit_stats =/-false; NEW_CONNECTION; -set spanner.optimizer_version=''; +set spanner.return_commit_stats to true; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION=''; +SET SPANNER.RETURN_COMMIT_STATS TO TRUE; NEW_CONNECTION; -set spanner.optimizer_version=''; +set spanner.return_commit_stats to true; NEW_CONNECTION; - set spanner.optimizer_version=''; + set spanner.return_commit_stats to true; NEW_CONNECTION; - set spanner.optimizer_version=''; + set spanner.return_commit_stats to true; NEW_CONNECTION; -set spanner.optimizer_version=''; +set spanner.return_commit_stats to true; NEW_CONNECTION; -set spanner.optimizer_version='' ; +set spanner.return_commit_stats to true ; NEW_CONNECTION; -set spanner.optimizer_version='' ; +set spanner.return_commit_stats to true ; NEW_CONNECTION; -set spanner.optimizer_version='' +set spanner.return_commit_stats to true ; NEW_CONNECTION; -set spanner.optimizer_version=''; +set spanner.return_commit_stats to true; NEW_CONNECTION; -set spanner.optimizer_version=''; +set spanner.return_commit_stats to true; NEW_CONNECTION; set -spanner.optimizer_version=''; +spanner.return_commit_stats +to +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version=''; +foo set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version='' bar; +set spanner.return_commit_stats to true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version=''; +%set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''%; +set spanner.return_commit_stats to true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.optimizer_version=''; +set spanner.return_commit_stats to%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version=''; +_set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''_; +set spanner.return_commit_stats to true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.optimizer_version=''; +set spanner.return_commit_stats to_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version=''; +&set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''&; +set spanner.return_commit_stats to true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.optimizer_version=''; +set spanner.return_commit_stats to&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version=''; +$set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''$; +set spanner.return_commit_stats to true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.optimizer_version=''; +set spanner.return_commit_stats to$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version=''; +@set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''@; +set spanner.return_commit_stats to true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.optimizer_version=''; +set spanner.return_commit_stats to@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version=''; +!set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''!; +set spanner.return_commit_stats to true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.optimizer_version=''; +set spanner.return_commit_stats to!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version=''; +*set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''*; +set spanner.return_commit_stats to true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.optimizer_version=''; +set spanner.return_commit_stats to*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version=''; +(set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''(; +set spanner.return_commit_stats to true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.optimizer_version=''; +set spanner.return_commit_stats to(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version=''; +)set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''); +set spanner.return_commit_stats to true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.optimizer_version=''; +set spanner.return_commit_stats to)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version=''; +-set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''-; +set spanner.return_commit_stats to true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.optimizer_version=''; +set spanner.return_commit_stats to-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version=''; ++set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''+; +set spanner.return_commit_stats to true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.optimizer_version=''; +set spanner.return_commit_stats to+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version=''; +-#set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''-#; +set spanner.return_commit_stats to true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.optimizer_version=''; +set spanner.return_commit_stats to-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version=''; +/set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''/; +set spanner.return_commit_stats to true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.optimizer_version=''; +set spanner.return_commit_stats to/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version=''; +\set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''\; +set spanner.return_commit_stats to true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.optimizer_version=''; +set spanner.return_commit_stats to\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version=''; +?set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''?; +set spanner.return_commit_stats to true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.optimizer_version=''; +set spanner.return_commit_stats to?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version=''; +-/set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''-/; +set spanner.return_commit_stats to true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.optimizer_version=''; +set spanner.return_commit_stats to-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version=''; +/#set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''/#; +set spanner.return_commit_stats to true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.optimizer_version=''; +set spanner.return_commit_stats to/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version=''; +/-set spanner.return_commit_stats to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version=''/-; +set spanner.return_commit_stats to true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.optimizer_version=''; +set spanner.return_commit_stats to/-true; NEW_CONNECTION; -set spanner.optimizer_version to '1'; +set spanner.return_commit_stats to false; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION TO '1'; +SET SPANNER.RETURN_COMMIT_STATS TO FALSE; NEW_CONNECTION; -set spanner.optimizer_version to '1'; +set spanner.return_commit_stats to false; NEW_CONNECTION; - set spanner.optimizer_version to '1'; + set spanner.return_commit_stats to false; NEW_CONNECTION; - set spanner.optimizer_version to '1'; + set spanner.return_commit_stats to false; NEW_CONNECTION; -set spanner.optimizer_version to '1'; +set spanner.return_commit_stats to false; NEW_CONNECTION; -set spanner.optimizer_version to '1' ; +set spanner.return_commit_stats to false ; NEW_CONNECTION; -set spanner.optimizer_version to '1' ; +set spanner.return_commit_stats to false ; NEW_CONNECTION; -set spanner.optimizer_version to '1' +set spanner.return_commit_stats to false ; NEW_CONNECTION; -set spanner.optimizer_version to '1'; +set spanner.return_commit_stats to false; NEW_CONNECTION; -set spanner.optimizer_version to '1'; +set spanner.return_commit_stats to false; NEW_CONNECTION; set -spanner.optimizer_version +spanner.return_commit_stats to -'1'; +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version to '1'; +foo set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1' bar; +set spanner.return_commit_stats to false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version to '1'; +%set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'%; +set spanner.return_commit_stats to false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to%'1'; +set spanner.return_commit_stats to%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version to '1'; +_set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'_; +set spanner.return_commit_stats to false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to_'1'; +set spanner.return_commit_stats to_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version to '1'; +&set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'&; +set spanner.return_commit_stats to false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to&'1'; +set spanner.return_commit_stats to&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version to '1'; +$set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'$; +set spanner.return_commit_stats to false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to$'1'; +set spanner.return_commit_stats to$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version to '1'; +@set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'@; +set spanner.return_commit_stats to false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to@'1'; +set spanner.return_commit_stats to@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version to '1'; +!set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'!; +set spanner.return_commit_stats to false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to!'1'; +set spanner.return_commit_stats to!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version to '1'; +*set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'*; +set spanner.return_commit_stats to false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to*'1'; +set spanner.return_commit_stats to*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version to '1'; +(set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'(; +set spanner.return_commit_stats to false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to('1'; +set spanner.return_commit_stats to(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version to '1'; +)set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'); +set spanner.return_commit_stats to false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to)'1'; +set spanner.return_commit_stats to)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version to '1'; +-set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'-; +set spanner.return_commit_stats to false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-'1'; +set spanner.return_commit_stats to-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version to '1'; ++set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'+; +set spanner.return_commit_stats to false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to+'1'; +set spanner.return_commit_stats to+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version to '1'; +-#set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'-#; +set spanner.return_commit_stats to false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-#'1'; +set spanner.return_commit_stats to-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version to '1'; +/set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'/; +set spanner.return_commit_stats to false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/'1'; +set spanner.return_commit_stats to/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version to '1'; +\set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'\; +set spanner.return_commit_stats to false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to\'1'; +set spanner.return_commit_stats to\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version to '1'; +?set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'?; +set spanner.return_commit_stats to false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to?'1'; +set spanner.return_commit_stats to?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version to '1'; +-/set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'-/; +set spanner.return_commit_stats to false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-/'1'; +set spanner.return_commit_stats to-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version to '1'; +/#set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'/#; +set spanner.return_commit_stats to false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/#'1'; +set spanner.return_commit_stats to/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version to '1'; +/-set spanner.return_commit_stats to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '1'/-; +set spanner.return_commit_stats to false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/-'1'; +set spanner.return_commit_stats to/-false; NEW_CONNECTION; -set spanner.optimizer_version to '200'; +set spanner.max_commit_delay=null; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION TO '200'; +SET SPANNER.MAX_COMMIT_DELAY=NULL; NEW_CONNECTION; -set spanner.optimizer_version to '200'; +set spanner.max_commit_delay=null; NEW_CONNECTION; - set spanner.optimizer_version to '200'; + set spanner.max_commit_delay=null; NEW_CONNECTION; - set spanner.optimizer_version to '200'; + set spanner.max_commit_delay=null; NEW_CONNECTION; -set spanner.optimizer_version to '200'; +set spanner.max_commit_delay=null; NEW_CONNECTION; -set spanner.optimizer_version to '200' ; +set spanner.max_commit_delay=null ; NEW_CONNECTION; -set spanner.optimizer_version to '200' ; +set spanner.max_commit_delay=null ; NEW_CONNECTION; -set spanner.optimizer_version to '200' +set spanner.max_commit_delay=null ; NEW_CONNECTION; -set spanner.optimizer_version to '200'; +set spanner.max_commit_delay=null; NEW_CONNECTION; -set spanner.optimizer_version to '200'; +set spanner.max_commit_delay=null; NEW_CONNECTION; set -spanner.optimizer_version -to -'200'; +spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version to '200'; +foo set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200' bar; +set spanner.max_commit_delay=null bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version to '200'; +%set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'%; +set spanner.max_commit_delay=null%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to%'200'; +set%spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version to '200'; +_set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'_; +set spanner.max_commit_delay=null_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to_'200'; +set_spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version to '200'; +&set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'&; +set spanner.max_commit_delay=null&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to&'200'; +set&spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version to '200'; +$set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'$; +set spanner.max_commit_delay=null$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to$'200'; +set$spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version to '200'; +@set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'@; +set spanner.max_commit_delay=null@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to@'200'; +set@spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version to '200'; +!set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'!; +set spanner.max_commit_delay=null!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to!'200'; +set!spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version to '200'; +*set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'*; +set spanner.max_commit_delay=null*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to*'200'; +set*spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version to '200'; +(set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'(; +set spanner.max_commit_delay=null(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to('200'; +set(spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version to '200'; +)set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'); +set spanner.max_commit_delay=null); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to)'200'; +set)spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version to '200'; +-set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'-; +set spanner.max_commit_delay=null-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-'200'; +set-spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version to '200'; ++set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'+; +set spanner.max_commit_delay=null+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to+'200'; +set+spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version to '200'; +-#set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'-#; +set spanner.max_commit_delay=null-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-#'200'; +set-#spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version to '200'; +/set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'/; +set spanner.max_commit_delay=null/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/'200'; +set/spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version to '200'; +\set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'\; +set spanner.max_commit_delay=null\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to\'200'; +set\spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version to '200'; +?set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'?; +set spanner.max_commit_delay=null?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to?'200'; +set?spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version to '200'; +-/set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'-/; +set spanner.max_commit_delay=null-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-/'200'; +set-/spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version to '200'; +/#set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'/#; +set spanner.max_commit_delay=null/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/#'200'; +set/#spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version to '200'; +/-set spanner.max_commit_delay=null; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '200'/-; +set spanner.max_commit_delay=null/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/-'200'; +set/-spanner.max_commit_delay=null; NEW_CONNECTION; -set spanner.optimizer_version to 'LATEST'; +set spanner.max_commit_delay = NULL; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION TO 'LATEST'; +SET SPANNER.MAX_COMMIT_DELAY = NULL; NEW_CONNECTION; -set spanner.optimizer_version to 'latest'; +set spanner.max_commit_delay = null; NEW_CONNECTION; - set spanner.optimizer_version to 'LATEST'; + set spanner.max_commit_delay = NULL; NEW_CONNECTION; - set spanner.optimizer_version to 'LATEST'; + set spanner.max_commit_delay = NULL; NEW_CONNECTION; -set spanner.optimizer_version to 'LATEST'; +set spanner.max_commit_delay = NULL; NEW_CONNECTION; -set spanner.optimizer_version to 'LATEST' ; +set spanner.max_commit_delay = NULL ; NEW_CONNECTION; -set spanner.optimizer_version to 'LATEST' ; +set spanner.max_commit_delay = NULL ; NEW_CONNECTION; -set spanner.optimizer_version to 'LATEST' +set spanner.max_commit_delay = NULL ; NEW_CONNECTION; -set spanner.optimizer_version to 'LATEST'; +set spanner.max_commit_delay = NULL; NEW_CONNECTION; -set spanner.optimizer_version to 'LATEST'; +set spanner.max_commit_delay = NULL; NEW_CONNECTION; set -spanner.optimizer_version -to -'LATEST'; +spanner.max_commit_delay += +NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version to 'LATEST'; +foo set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST' bar; +set spanner.max_commit_delay = NULL bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version to 'LATEST'; +%set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'%; +set spanner.max_commit_delay = NULL%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to%'LATEST'; +set spanner.max_commit_delay =%NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version to 'LATEST'; +_set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'_; +set spanner.max_commit_delay = NULL_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to_'LATEST'; +set spanner.max_commit_delay =_NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version to 'LATEST'; +&set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'&; +set spanner.max_commit_delay = NULL&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to&'LATEST'; +set spanner.max_commit_delay =&NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version to 'LATEST'; +$set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'$; +set spanner.max_commit_delay = NULL$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to$'LATEST'; +set spanner.max_commit_delay =$NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version to 'LATEST'; +@set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'@; +set spanner.max_commit_delay = NULL@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to@'LATEST'; +set spanner.max_commit_delay =@NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version to 'LATEST'; +!set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'!; +set spanner.max_commit_delay = NULL!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to!'LATEST'; +set spanner.max_commit_delay =!NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version to 'LATEST'; +*set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'*; +set spanner.max_commit_delay = NULL*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to*'LATEST'; +set spanner.max_commit_delay =*NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version to 'LATEST'; +(set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'(; +set spanner.max_commit_delay = NULL(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to('LATEST'; +set spanner.max_commit_delay =(NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version to 'LATEST'; +)set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'); +set spanner.max_commit_delay = NULL); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to)'LATEST'; +set spanner.max_commit_delay =)NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version to 'LATEST'; +-set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'-; +set spanner.max_commit_delay = NULL-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-'LATEST'; +set spanner.max_commit_delay =-NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version to 'LATEST'; ++set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'+; +set spanner.max_commit_delay = NULL+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to+'LATEST'; +set spanner.max_commit_delay =+NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version to 'LATEST'; +-#set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'-#; +set spanner.max_commit_delay = NULL-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-#'LATEST'; +set spanner.max_commit_delay =-#NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version to 'LATEST'; +/set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'/; +set spanner.max_commit_delay = NULL/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/'LATEST'; +set spanner.max_commit_delay =/NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version to 'LATEST'; +\set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'\; +set spanner.max_commit_delay = NULL\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to\'LATEST'; +set spanner.max_commit_delay =\NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version to 'LATEST'; +?set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'?; +set spanner.max_commit_delay = NULL?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to?'LATEST'; +set spanner.max_commit_delay =?NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version to 'LATEST'; +-/set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'-/; +set spanner.max_commit_delay = NULL-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-/'LATEST'; +set spanner.max_commit_delay =-/NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version to 'LATEST'; +/#set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'/#; +set spanner.max_commit_delay = NULL/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/#'LATEST'; +set spanner.max_commit_delay =/#NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version to 'LATEST'; +/-set spanner.max_commit_delay = NULL; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to 'LATEST'/-; +set spanner.max_commit_delay = NULL/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/-'LATEST'; +set spanner.max_commit_delay =/-NULL; NEW_CONNECTION; -set spanner.optimizer_version to ''; +set spanner.max_commit_delay = null ; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_VERSION TO ''; +SET SPANNER.MAX_COMMIT_DELAY = NULL ; NEW_CONNECTION; -set spanner.optimizer_version to ''; +set spanner.max_commit_delay = null ; NEW_CONNECTION; - set spanner.optimizer_version to ''; + set spanner.max_commit_delay = null ; NEW_CONNECTION; - set spanner.optimizer_version to ''; + set spanner.max_commit_delay = null ; NEW_CONNECTION; -set spanner.optimizer_version to ''; +set spanner.max_commit_delay = null ; NEW_CONNECTION; -set spanner.optimizer_version to '' ; +set spanner.max_commit_delay = null ; NEW_CONNECTION; -set spanner.optimizer_version to '' ; +set spanner.max_commit_delay = null ; NEW_CONNECTION; -set spanner.optimizer_version to '' +set spanner.max_commit_delay = null ; NEW_CONNECTION; -set spanner.optimizer_version to ''; +set spanner.max_commit_delay = null ; NEW_CONNECTION; -set spanner.optimizer_version to ''; +set spanner.max_commit_delay = null ; NEW_CONNECTION; set -spanner.optimizer_version -to -''; +spanner.max_commit_delay += +null +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_version to ''; +foo set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to '' bar; +set spanner.max_commit_delay = null bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_version to ''; +%set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''%; +set spanner.max_commit_delay = null %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to%''; +set spanner.max_commit_delay = null%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_version to ''; +_set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''_; +set spanner.max_commit_delay = null _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to_''; +set spanner.max_commit_delay = null_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_version to ''; +&set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''&; +set spanner.max_commit_delay = null &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to&''; +set spanner.max_commit_delay = null&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_version to ''; +$set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''$; +set spanner.max_commit_delay = null $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to$''; +set spanner.max_commit_delay = null$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_version to ''; +@set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''@; +set spanner.max_commit_delay = null @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to@''; +set spanner.max_commit_delay = null@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_version to ''; +!set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''!; +set spanner.max_commit_delay = null !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to!''; +set spanner.max_commit_delay = null!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_version to ''; +*set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''*; +set spanner.max_commit_delay = null *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to*''; +set spanner.max_commit_delay = null*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_version to ''; +(set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''(; +set spanner.max_commit_delay = null (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to(''; +set spanner.max_commit_delay = null(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_version to ''; +)set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''); +set spanner.max_commit_delay = null ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to)''; +set spanner.max_commit_delay = null); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_version to ''; +-set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''-; +set spanner.max_commit_delay = null -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-''; +set spanner.max_commit_delay = null-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_version to ''; ++set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''+; +set spanner.max_commit_delay = null +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to+''; +set spanner.max_commit_delay = null+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_version to ''; +-#set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''-#; +set spanner.max_commit_delay = null -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-#''; +set spanner.max_commit_delay = null-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_version to ''; +/set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''/; +set spanner.max_commit_delay = null /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/''; +set spanner.max_commit_delay = null/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_version to ''; +\set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''\; +set spanner.max_commit_delay = null \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to\''; +set spanner.max_commit_delay = null\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_version to ''; +?set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''?; +set spanner.max_commit_delay = null ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to?''; +set spanner.max_commit_delay = null?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_version to ''; +-/set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''-/; +set spanner.max_commit_delay = null -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to-/''; +set spanner.max_commit_delay = null-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_version to ''; +/#set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''/#; +set spanner.max_commit_delay = null /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/#''; +set spanner.max_commit_delay = null/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_version to ''; +/-set spanner.max_commit_delay = null ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to ''/-; +set spanner.max_commit_delay = null /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_version to/-''; +set spanner.max_commit_delay = null/-; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay='1s'; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='AUTO_20191128_14_47_22UTC'; +SET SPANNER.MAX_COMMIT_DELAY='1S'; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22utc'; +set spanner.max_commit_delay='1s'; NEW_CONNECTION; - set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; + set spanner.max_commit_delay='1s'; NEW_CONNECTION; - set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; + set spanner.max_commit_delay='1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay='1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' ; +set spanner.max_commit_delay='1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' ; +set spanner.max_commit_delay='1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' +set spanner.max_commit_delay='1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay='1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay='1s'; NEW_CONNECTION; set -spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +foo set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' bar; +set spanner.max_commit_delay='1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +%set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'%; +set spanner.max_commit_delay='1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set%spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +_set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'_; +set spanner.max_commit_delay='1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set_spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +&set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'&; +set spanner.max_commit_delay='1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set&spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +$set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'$; +set spanner.max_commit_delay='1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set$spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +@set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'@; +set spanner.max_commit_delay='1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set@spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +!set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'!; +set spanner.max_commit_delay='1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set!spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +*set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'*; +set spanner.max_commit_delay='1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set*spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +(set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'(; +set spanner.max_commit_delay='1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set(spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +)set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'); +set spanner.max_commit_delay='1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set)spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +-set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-; +set spanner.max_commit_delay='1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set-spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; ++set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'+; +set spanner.max_commit_delay='1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set+spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +-#set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-#; +set spanner.max_commit_delay='1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set-#spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +/set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/; +set spanner.max_commit_delay='1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set/spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +\set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'\; +set spanner.max_commit_delay='1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set\spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +?set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'?; +set spanner.max_commit_delay='1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set?spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +-/set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-/; +set spanner.max_commit_delay='1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set-/spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +/#set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/#; +set spanner.max_commit_delay='1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set/#spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +/-set spanner.max_commit_delay='1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/-; +set spanner.max_commit_delay='1s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'; +set/-spanner.max_commit_delay='1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay = '1s'; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE=''; +SET SPANNER.MAX_COMMIT_DELAY = '1S'; NEW_CONNECTION; -set spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay = '1s'; NEW_CONNECTION; - set spanner.optimizer_statistics_package=''; + set spanner.max_commit_delay = '1s'; NEW_CONNECTION; - set spanner.optimizer_statistics_package=''; + set spanner.max_commit_delay = '1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay = '1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package='' ; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package='' ; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package='' +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay = '1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay = '1s'; NEW_CONNECTION; set -spanner.optimizer_statistics_package=''; +spanner.max_commit_delay += +'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_statistics_package=''; +foo set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package='' bar; +set spanner.max_commit_delay = '1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_statistics_package=''; +%set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''%; +set spanner.max_commit_delay = '1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =%'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_statistics_package=''; +_set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''_; +set spanner.max_commit_delay = '1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =_'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_statistics_package=''; +&set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''&; +set spanner.max_commit_delay = '1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =&'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_statistics_package=''; +$set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''$; +set spanner.max_commit_delay = '1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =$'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_statistics_package=''; +@set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''@; +set spanner.max_commit_delay = '1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =@'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_statistics_package=''; +!set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''!; +set spanner.max_commit_delay = '1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =!'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_statistics_package=''; +*set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''*; +set spanner.max_commit_delay = '1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =*'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_statistics_package=''; +(set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''(; +set spanner.max_commit_delay = '1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =('1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_statistics_package=''; +)set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''); +set spanner.max_commit_delay = '1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =)'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_statistics_package=''; +-set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''-; +set spanner.max_commit_delay = '1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =-'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_statistics_package=''; ++set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''+; +set spanner.max_commit_delay = '1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =+'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_statistics_package=''; +-#set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''-#; +set spanner.max_commit_delay = '1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =-#'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_statistics_package=''; +/set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''/; +set spanner.max_commit_delay = '1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =/'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_statistics_package=''; +\set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''\; +set spanner.max_commit_delay = '1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =\'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_statistics_package=''; +?set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''?; +set spanner.max_commit_delay = '1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =?'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_statistics_package=''; +-/set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''-/; +set spanner.max_commit_delay = '1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =-/'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_statistics_package=''; +/#set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''/#; +set spanner.max_commit_delay = '1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =/#'1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_statistics_package=''; +/-set spanner.max_commit_delay = '1s'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package=''/-; +set spanner.max_commit_delay = '1s'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.optimizer_statistics_package=''; +set spanner.max_commit_delay =/-'1s'; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE TO 'AUTO_20191128_14_47_22UTC'; +SET SPANNER.MAX_COMMIT_DELAY = '1S' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22utc'; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; - set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; + set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; - set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; + set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' ; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' ; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; set -spanner.optimizer_statistics_package -to -'auto_20191128_14_47_22UTC'; +spanner.max_commit_delay += +'1s' +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +foo set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' bar; +set spanner.max_commit_delay = '1s' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +%set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'%; +set spanner.max_commit_delay = '1s' %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to%'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +_set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'_; +set spanner.max_commit_delay = '1s' _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to_'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +&set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'&; +set spanner.max_commit_delay = '1s' &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to&'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +$set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'$; +set spanner.max_commit_delay = '1s' $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to$'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +@set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'@; +set spanner.max_commit_delay = '1s' @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to@'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +!set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'!; +set spanner.max_commit_delay = '1s' !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to!'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +*set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'*; +set spanner.max_commit_delay = '1s' *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to*'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +(set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'(; +set spanner.max_commit_delay = '1s' (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to('auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +)set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'); +set spanner.max_commit_delay = '1s' ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to)'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +-set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-; +set spanner.max_commit_delay = '1s' -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to-'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; ++set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'+; +set spanner.max_commit_delay = '1s' +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to+'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +-#set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-#; +set spanner.max_commit_delay = '1s' -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to-#'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +/set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/; +set spanner.max_commit_delay = '1s' /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to/'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +\set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'\; +set spanner.max_commit_delay = '1s' \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to\'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +?set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'?; +set spanner.max_commit_delay = '1s' ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to?'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +-/set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-/; +set spanner.max_commit_delay = '1s' -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to-/'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +/#set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/#; +set spanner.max_commit_delay = '1s' /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to/#'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'; +/-set spanner.max_commit_delay = '1s' ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/-; +set spanner.max_commit_delay = '1s' /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to/-'auto_20191128_14_47_22UTC'; +set spanner.max_commit_delay = '1s'/-; NEW_CONNECTION; -set spanner.optimizer_statistics_package to ''; +set spanner.max_commit_delay=1000; NEW_CONNECTION; -SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE TO ''; +SET SPANNER.MAX_COMMIT_DELAY=1000; NEW_CONNECTION; -set spanner.optimizer_statistics_package to ''; +set spanner.max_commit_delay=1000; NEW_CONNECTION; - set spanner.optimizer_statistics_package to ''; + set spanner.max_commit_delay=1000; NEW_CONNECTION; - set spanner.optimizer_statistics_package to ''; + set spanner.max_commit_delay=1000; NEW_CONNECTION; -set spanner.optimizer_statistics_package to ''; +set spanner.max_commit_delay=1000; NEW_CONNECTION; -set spanner.optimizer_statistics_package to '' ; +set spanner.max_commit_delay=1000 ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to '' ; +set spanner.max_commit_delay=1000 ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to '' +set spanner.max_commit_delay=1000 ; NEW_CONNECTION; -set spanner.optimizer_statistics_package to ''; +set spanner.max_commit_delay=1000; NEW_CONNECTION; -set spanner.optimizer_statistics_package to ''; +set spanner.max_commit_delay=1000; NEW_CONNECTION; set -spanner.optimizer_statistics_package -to -''; +spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.optimizer_statistics_package to ''; +foo set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to '' bar; +set spanner.max_commit_delay=1000 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.optimizer_statistics_package to ''; +%set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''%; +set spanner.max_commit_delay=1000%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to%''; +set%spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.optimizer_statistics_package to ''; +_set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''_; +set spanner.max_commit_delay=1000_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to_''; +set_spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.optimizer_statistics_package to ''; +&set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''&; +set spanner.max_commit_delay=1000&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to&''; +set&spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.optimizer_statistics_package to ''; +$set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''$; +set spanner.max_commit_delay=1000$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to$''; +set$spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.optimizer_statistics_package to ''; +@set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''@; +set spanner.max_commit_delay=1000@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to@''; +set@spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.optimizer_statistics_package to ''; +!set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''!; +set spanner.max_commit_delay=1000!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to!''; +set!spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.optimizer_statistics_package to ''; +*set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''*; +set spanner.max_commit_delay=1000*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to*''; +set*spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.optimizer_statistics_package to ''; +(set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''(; +set spanner.max_commit_delay=1000(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to(''; +set(spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.optimizer_statistics_package to ''; +)set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''); +set spanner.max_commit_delay=1000); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to)''; +set)spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.optimizer_statistics_package to ''; +-set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''-; +set spanner.max_commit_delay=1000-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to-''; +set-spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.optimizer_statistics_package to ''; ++set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''+; +set spanner.max_commit_delay=1000+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to+''; +set+spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.optimizer_statistics_package to ''; +-#set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''-#; +set spanner.max_commit_delay=1000-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to-#''; +set-#spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.optimizer_statistics_package to ''; +/set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''/; +set spanner.max_commit_delay=1000/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to/''; +set/spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.optimizer_statistics_package to ''; +\set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''\; +set spanner.max_commit_delay=1000\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to\''; +set\spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.optimizer_statistics_package to ''; +?set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''?; +set spanner.max_commit_delay=1000?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to?''; +set?spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.optimizer_statistics_package to ''; +-/set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''-/; +set spanner.max_commit_delay=1000-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to-/''; +set-/spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.optimizer_statistics_package to ''; +/#set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''/#; +set spanner.max_commit_delay=1000/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to/#''; +set/#spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.optimizer_statistics_package to ''; +/-set spanner.max_commit_delay=1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to ''/-; +set spanner.max_commit_delay=1000/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.optimizer_statistics_package to/-''; +set/-spanner.max_commit_delay=1000; NEW_CONNECTION; -set spanner.return_commit_stats = true; +set spanner.max_commit_delay = 1000; NEW_CONNECTION; -SET SPANNER.RETURN_COMMIT_STATS = TRUE; +SET SPANNER.MAX_COMMIT_DELAY = 1000; NEW_CONNECTION; -set spanner.return_commit_stats = true; +set spanner.max_commit_delay = 1000; NEW_CONNECTION; - set spanner.return_commit_stats = true; + set spanner.max_commit_delay = 1000; NEW_CONNECTION; - set spanner.return_commit_stats = true; + set spanner.max_commit_delay = 1000; NEW_CONNECTION; -set spanner.return_commit_stats = true; +set spanner.max_commit_delay = 1000; NEW_CONNECTION; -set spanner.return_commit_stats = true ; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = true ; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = true +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = true; +set spanner.max_commit_delay = 1000; NEW_CONNECTION; -set spanner.return_commit_stats = true; +set spanner.max_commit_delay = 1000; NEW_CONNECTION; set -spanner.return_commit_stats +spanner.max_commit_delay = -true; +1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.return_commit_stats = true; +foo set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true bar; +set spanner.max_commit_delay = 1000 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.return_commit_stats = true; +%set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true%; +set spanner.max_commit_delay = 1000%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =%true; +set spanner.max_commit_delay =%1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.return_commit_stats = true; +_set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true_; +set spanner.max_commit_delay = 1000_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =_true; +set spanner.max_commit_delay =_1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.return_commit_stats = true; +&set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true&; +set spanner.max_commit_delay = 1000&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =&true; +set spanner.max_commit_delay =&1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.return_commit_stats = true; +$set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true$; +set spanner.max_commit_delay = 1000$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =$true; +set spanner.max_commit_delay =$1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.return_commit_stats = true; +@set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true@; +set spanner.max_commit_delay = 1000@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =@true; +set spanner.max_commit_delay =@1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.return_commit_stats = true; +!set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true!; +set spanner.max_commit_delay = 1000!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =!true; +set spanner.max_commit_delay =!1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.return_commit_stats = true; +*set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true*; +set spanner.max_commit_delay = 1000*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =*true; +set spanner.max_commit_delay =*1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.return_commit_stats = true; +(set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true(; +set spanner.max_commit_delay = 1000(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =(true; +set spanner.max_commit_delay =(1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.return_commit_stats = true; +)set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true); +set spanner.max_commit_delay = 1000); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =)true; +set spanner.max_commit_delay =)1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.return_commit_stats = true; +-set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true-; +set spanner.max_commit_delay = 1000-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =-true; +set spanner.max_commit_delay =-1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.return_commit_stats = true; ++set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true+; +set spanner.max_commit_delay = 1000+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =+true; +set spanner.max_commit_delay =+1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.return_commit_stats = true; +-#set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true-#; +set spanner.max_commit_delay = 1000-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =-#true; +set spanner.max_commit_delay =-#1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.return_commit_stats = true; +/set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true/; +set spanner.max_commit_delay = 1000/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =/true; +set spanner.max_commit_delay =/1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.return_commit_stats = true; +\set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true\; +set spanner.max_commit_delay = 1000\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =\true; +set spanner.max_commit_delay =\1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.return_commit_stats = true; +?set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true?; +set spanner.max_commit_delay = 1000?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =?true; +set spanner.max_commit_delay =?1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.return_commit_stats = true; +-/set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true-/; +set spanner.max_commit_delay = 1000-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =-/true; +set spanner.max_commit_delay =-/1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.return_commit_stats = true; +/#set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true/#; +set spanner.max_commit_delay = 1000/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =/#true; +set spanner.max_commit_delay =/#1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.return_commit_stats = true; +/-set spanner.max_commit_delay = 1000; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = true/-; +set spanner.max_commit_delay = 1000/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =/-true; +set spanner.max_commit_delay =/-1000; NEW_CONNECTION; -set spanner.return_commit_stats = false; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -SET SPANNER.RETURN_COMMIT_STATS = FALSE; +SET SPANNER.MAX_COMMIT_DELAY = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = false; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; - set spanner.return_commit_stats = false; + set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; - set spanner.return_commit_stats = false; + set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = false; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = false ; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = false ; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = false +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = false; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; -set spanner.return_commit_stats = false; +set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; set -spanner.return_commit_stats +spanner.max_commit_delay = -false; +1000 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.return_commit_stats = false; +foo set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false bar; +set spanner.max_commit_delay = 1000 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.return_commit_stats = false; +%set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false%; +set spanner.max_commit_delay = 1000 %; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =%false; +set spanner.max_commit_delay = 1000%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.return_commit_stats = false; +_set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false_; +set spanner.max_commit_delay = 1000 _; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =_false; +set spanner.max_commit_delay = 1000_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.return_commit_stats = false; +&set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false&; +set spanner.max_commit_delay = 1000 &; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =&false; +set spanner.max_commit_delay = 1000&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.return_commit_stats = false; +$set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false$; +set spanner.max_commit_delay = 1000 $; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =$false; +set spanner.max_commit_delay = 1000$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.return_commit_stats = false; +@set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false@; +set spanner.max_commit_delay = 1000 @; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =@false; +set spanner.max_commit_delay = 1000@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.return_commit_stats = false; +!set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false!; +set spanner.max_commit_delay = 1000 !; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =!false; +set spanner.max_commit_delay = 1000!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.return_commit_stats = false; +*set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false*; +set spanner.max_commit_delay = 1000 *; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =*false; +set spanner.max_commit_delay = 1000*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.return_commit_stats = false; +(set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false(; +set spanner.max_commit_delay = 1000 (; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =(false; +set spanner.max_commit_delay = 1000(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.return_commit_stats = false; +)set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false); +set spanner.max_commit_delay = 1000 ); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =)false; +set spanner.max_commit_delay = 1000); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.return_commit_stats = false; +-set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false-; +set spanner.max_commit_delay = 1000 -; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =-false; +set spanner.max_commit_delay = 1000-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.return_commit_stats = false; ++set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false+; +set spanner.max_commit_delay = 1000 +; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =+false; +set spanner.max_commit_delay = 1000+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.return_commit_stats = false; +-#set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false-#; +set spanner.max_commit_delay = 1000 -#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =-#false; +set spanner.max_commit_delay = 1000-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.return_commit_stats = false; +/set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false/; +set spanner.max_commit_delay = 1000 /; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =/false; +set spanner.max_commit_delay = 1000/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.return_commit_stats = false; +\set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false\; +set spanner.max_commit_delay = 1000 \; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =\false; +set spanner.max_commit_delay = 1000\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.return_commit_stats = false; +?set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false?; +set spanner.max_commit_delay = 1000 ?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =?false; +set spanner.max_commit_delay = 1000?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.return_commit_stats = false; +-/set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false-/; +set spanner.max_commit_delay = 1000 -/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =-/false; +set spanner.max_commit_delay = 1000-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.return_commit_stats = false; +/#set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false/#; +set spanner.max_commit_delay = 1000 /#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =/#false; +set spanner.max_commit_delay = 1000/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.return_commit_stats = false; +/-set spanner.max_commit_delay = 1000 ; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats = false/-; +set spanner.max_commit_delay = 1000 /-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats =/-false; +set spanner.max_commit_delay = 1000/-; NEW_CONNECTION; -set spanner.return_commit_stats to true; +set spanner.max_commit_delay='100ms'; NEW_CONNECTION; -SET SPANNER.RETURN_COMMIT_STATS TO TRUE; +SET SPANNER.MAX_COMMIT_DELAY='100MS'; NEW_CONNECTION; -set spanner.return_commit_stats to true; +set spanner.max_commit_delay='100ms'; NEW_CONNECTION; - set spanner.return_commit_stats to true; + set spanner.max_commit_delay='100ms'; NEW_CONNECTION; - set spanner.return_commit_stats to true; + set spanner.max_commit_delay='100ms'; NEW_CONNECTION; -set spanner.return_commit_stats to true; +set spanner.max_commit_delay='100ms'; NEW_CONNECTION; -set spanner.return_commit_stats to true ; +set spanner.max_commit_delay='100ms' ; NEW_CONNECTION; -set spanner.return_commit_stats to true ; +set spanner.max_commit_delay='100ms' ; NEW_CONNECTION; -set spanner.return_commit_stats to true +set spanner.max_commit_delay='100ms' ; NEW_CONNECTION; -set spanner.return_commit_stats to true; +set spanner.max_commit_delay='100ms'; NEW_CONNECTION; -set spanner.return_commit_stats to true; +set spanner.max_commit_delay='100ms'; NEW_CONNECTION; set -spanner.return_commit_stats -to -true; +spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.return_commit_stats to true; +foo set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true bar; +set spanner.max_commit_delay='100ms' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.return_commit_stats to true; +%set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true%; +set spanner.max_commit_delay='100ms'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to%true; +set%spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.return_commit_stats to true; +_set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true_; +set spanner.max_commit_delay='100ms'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to_true; +set_spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.return_commit_stats to true; +&set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true&; +set spanner.max_commit_delay='100ms'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to&true; +set&spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.return_commit_stats to true; +$set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true$; +set spanner.max_commit_delay='100ms'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to$true; +set$spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.return_commit_stats to true; +@set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true@; +set spanner.max_commit_delay='100ms'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to@true; +set@spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.return_commit_stats to true; +!set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true!; +set spanner.max_commit_delay='100ms'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to!true; +set!spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.return_commit_stats to true; +*set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true*; +set spanner.max_commit_delay='100ms'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to*true; +set*spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.return_commit_stats to true; +(set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true(; +set spanner.max_commit_delay='100ms'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to(true; +set(spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.return_commit_stats to true; +)set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true); +set spanner.max_commit_delay='100ms'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to)true; +set)spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.return_commit_stats to true; +-set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true-; +set spanner.max_commit_delay='100ms'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to-true; +set-spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.return_commit_stats to true; ++set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true+; +set spanner.max_commit_delay='100ms'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to+true; +set+spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.return_commit_stats to true; +-#set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true-#; +set spanner.max_commit_delay='100ms'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to-#true; +set-#spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.return_commit_stats to true; +/set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true/; +set spanner.max_commit_delay='100ms'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to/true; +set/spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.return_commit_stats to true; +\set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true\; +set spanner.max_commit_delay='100ms'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to\true; +set\spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.return_commit_stats to true; +?set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true?; +set spanner.max_commit_delay='100ms'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to?true; +set?spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.return_commit_stats to true; +-/set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true-/; +set spanner.max_commit_delay='100ms'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to-/true; +set-/spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.return_commit_stats to true; +/#set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true/#; +set spanner.max_commit_delay='100ms'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to/#true; +set/#spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.return_commit_stats to true; +/-set spanner.max_commit_delay='100ms'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to true/-; +set spanner.max_commit_delay='100ms'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to/-true; +set/-spanner.max_commit_delay='100ms'; NEW_CONNECTION; -set spanner.return_commit_stats to false; +set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; -SET SPANNER.RETURN_COMMIT_STATS TO FALSE; +SET SPANNER.MAX_COMMIT_DELAY TO '10000US'; NEW_CONNECTION; -set spanner.return_commit_stats to false; +set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; - set spanner.return_commit_stats to false; + set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; - set spanner.return_commit_stats to false; + set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; -set spanner.return_commit_stats to false; +set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; -set spanner.return_commit_stats to false ; +set spanner.max_commit_delay to '10000us' ; NEW_CONNECTION; -set spanner.return_commit_stats to false ; +set spanner.max_commit_delay to '10000us' ; NEW_CONNECTION; -set spanner.return_commit_stats to false +set spanner.max_commit_delay to '10000us' ; NEW_CONNECTION; -set spanner.return_commit_stats to false; +set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; -set spanner.return_commit_stats to false; +set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; set -spanner.return_commit_stats +spanner.max_commit_delay to -false; +'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.return_commit_stats to false; +foo set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false bar; +set spanner.max_commit_delay to '10000us' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.return_commit_stats to false; +%set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false%; +set spanner.max_commit_delay to '10000us'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to%false; +set spanner.max_commit_delay to%'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.return_commit_stats to false; +_set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false_; +set spanner.max_commit_delay to '10000us'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to_false; +set spanner.max_commit_delay to_'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.return_commit_stats to false; +&set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false&; +set spanner.max_commit_delay to '10000us'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to&false; +set spanner.max_commit_delay to&'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.return_commit_stats to false; +$set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false$; +set spanner.max_commit_delay to '10000us'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to$false; +set spanner.max_commit_delay to$'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.return_commit_stats to false; +@set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false@; +set spanner.max_commit_delay to '10000us'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to@false; +set spanner.max_commit_delay to@'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.return_commit_stats to false; +!set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false!; +set spanner.max_commit_delay to '10000us'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to!false; +set spanner.max_commit_delay to!'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.return_commit_stats to false; +*set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false*; +set spanner.max_commit_delay to '10000us'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to*false; +set spanner.max_commit_delay to*'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.return_commit_stats to false; +(set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false(; +set spanner.max_commit_delay to '10000us'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to(false; +set spanner.max_commit_delay to('10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.return_commit_stats to false; +)set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false); +set spanner.max_commit_delay to '10000us'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to)false; +set spanner.max_commit_delay to)'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.return_commit_stats to false; +-set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false-; +set spanner.max_commit_delay to '10000us'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to-false; +set spanner.max_commit_delay to-'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.return_commit_stats to false; ++set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false+; +set spanner.max_commit_delay to '10000us'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to+false; +set spanner.max_commit_delay to+'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.return_commit_stats to false; +-#set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false-#; +set spanner.max_commit_delay to '10000us'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to-#false; +set spanner.max_commit_delay to-#'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.return_commit_stats to false; +/set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false/; +set spanner.max_commit_delay to '10000us'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to/false; +set spanner.max_commit_delay to/'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.return_commit_stats to false; +\set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false\; +set spanner.max_commit_delay to '10000us'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to\false; +set spanner.max_commit_delay to\'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.return_commit_stats to false; +?set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false?; +set spanner.max_commit_delay to '10000us'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to?false; +set spanner.max_commit_delay to?'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.return_commit_stats to false; +-/set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false-/; +set spanner.max_commit_delay to '10000us'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to-/false; +set spanner.max_commit_delay to-/'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.return_commit_stats to false; +/#set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false/#; +set spanner.max_commit_delay to '10000us'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to/#false; +set spanner.max_commit_delay to/#'10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.return_commit_stats to false; +/-set spanner.max_commit_delay to '10000us'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to false/-; +set spanner.max_commit_delay to '10000us'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.return_commit_stats to/-false; +set spanner.max_commit_delay to/-'10000us'; NEW_CONNECTION; -set spanner.max_commit_delay=null; +set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY=NULL; +SET SPANNER.MAX_COMMIT_DELAY TO '9223372036854775807NS'; NEW_CONNECTION; -set spanner.max_commit_delay=null; +set spanner.max_commit_delay to '9223372036854775807ns'; NEW_CONNECTION; - set spanner.max_commit_delay=null; + set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; - set spanner.max_commit_delay=null; + set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; -set spanner.max_commit_delay=null; +set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; -set spanner.max_commit_delay=null ; +set spanner.max_commit_delay TO '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.max_commit_delay=null ; +set spanner.max_commit_delay TO '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.max_commit_delay=null +set spanner.max_commit_delay TO '9223372036854775807ns' ; NEW_CONNECTION; -set spanner.max_commit_delay=null; +set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; -set spanner.max_commit_delay=null; +set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; set -spanner.max_commit_delay=null; +spanner.max_commit_delay +TO +'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay=null; +foo set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null bar; +set spanner.max_commit_delay TO '9223372036854775807ns' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay=null; +%set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null%; +set spanner.max_commit_delay TO '9223372036854775807ns'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.max_commit_delay=null; +set spanner.max_commit_delay TO%'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay=null; +_set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null_; +set spanner.max_commit_delay TO '9223372036854775807ns'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.max_commit_delay=null; +set spanner.max_commit_delay TO_'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay=null; +&set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null&; +set spanner.max_commit_delay TO '9223372036854775807ns'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.max_commit_delay=null; +set spanner.max_commit_delay TO&'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay=null; +$set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null$; +set spanner.max_commit_delay TO '9223372036854775807ns'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.max_commit_delay=null; +set spanner.max_commit_delay TO$'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay=null; +@set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null@; +set spanner.max_commit_delay TO '9223372036854775807ns'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.max_commit_delay=null; +set spanner.max_commit_delay TO@'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay=null; +!set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null!; +set spanner.max_commit_delay TO '9223372036854775807ns'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.max_commit_delay=null; +set spanner.max_commit_delay TO!'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay=null; +*set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null*; +set spanner.max_commit_delay TO '9223372036854775807ns'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.max_commit_delay=null; +set spanner.max_commit_delay TO*'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay=null; +(set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null(; +set spanner.max_commit_delay TO '9223372036854775807ns'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.max_commit_delay=null; +set spanner.max_commit_delay TO('9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay=null; +)set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null); +set spanner.max_commit_delay TO '9223372036854775807ns'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.max_commit_delay=null; +set spanner.max_commit_delay TO)'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay=null; +-set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null-; +set spanner.max_commit_delay TO '9223372036854775807ns'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.max_commit_delay=null; +set spanner.max_commit_delay TO-'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay=null; ++set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null+; +set spanner.max_commit_delay TO '9223372036854775807ns'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.max_commit_delay=null; +set spanner.max_commit_delay TO+'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay=null; +-#set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null-#; +set spanner.max_commit_delay TO '9223372036854775807ns'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.max_commit_delay=null; +set spanner.max_commit_delay TO-#'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay=null; +/set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null/; +set spanner.max_commit_delay TO '9223372036854775807ns'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.max_commit_delay=null; +set spanner.max_commit_delay TO/'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay=null; +\set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null\; +set spanner.max_commit_delay TO '9223372036854775807ns'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.max_commit_delay=null; +set spanner.max_commit_delay TO\'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay=null; +?set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null?; +set spanner.max_commit_delay TO '9223372036854775807ns'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.max_commit_delay=null; +set spanner.max_commit_delay TO?'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay=null; +-/set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null-/; +set spanner.max_commit_delay TO '9223372036854775807ns'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.max_commit_delay=null; +set spanner.max_commit_delay TO-/'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay=null; +/#set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null/#; +set spanner.max_commit_delay TO '9223372036854775807ns'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.max_commit_delay=null; +set spanner.max_commit_delay TO/#'9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay=null; +/-set spanner.max_commit_delay TO '9223372036854775807ns'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=null/-; +set spanner.max_commit_delay TO '9223372036854775807ns'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.max_commit_delay=null; +set spanner.max_commit_delay TO/-'9223372036854775807ns'; NEW_CONNECTION; -set spanner.max_commit_delay = NULL; +set spanner.statement_tag='tag1'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY = NULL; +SET SPANNER.STATEMENT_TAG='TAG1'; NEW_CONNECTION; -set spanner.max_commit_delay = null; +set spanner.statement_tag='tag1'; NEW_CONNECTION; - set spanner.max_commit_delay = NULL; + set spanner.statement_tag='tag1'; NEW_CONNECTION; - set spanner.max_commit_delay = NULL; + set spanner.statement_tag='tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = NULL; +set spanner.statement_tag='tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = NULL ; +set spanner.statement_tag='tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = NULL ; +set spanner.statement_tag='tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = NULL +set spanner.statement_tag='tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = NULL; +set spanner.statement_tag='tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = NULL; +set spanner.statement_tag='tag1'; NEW_CONNECTION; set -spanner.max_commit_delay -= -NULL; +spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay = NULL; +foo set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL bar; +set spanner.statement_tag='tag1' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay = NULL; +%set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL%; +set spanner.statement_tag='tag1'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =%NULL; +set%spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay = NULL; +_set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL_; +set spanner.statement_tag='tag1'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =_NULL; +set_spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay = NULL; +&set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL&; +set spanner.statement_tag='tag1'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =&NULL; +set&spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay = NULL; +$set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL$; +set spanner.statement_tag='tag1'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =$NULL; +set$spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay = NULL; +@set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL@; +set spanner.statement_tag='tag1'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =@NULL; +set@spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay = NULL; +!set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL!; +set spanner.statement_tag='tag1'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =!NULL; +set!spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay = NULL; +*set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL*; +set spanner.statement_tag='tag1'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =*NULL; +set*spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay = NULL; +(set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL(; +set spanner.statement_tag='tag1'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =(NULL; +set(spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay = NULL; +)set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL); +set spanner.statement_tag='tag1'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =)NULL; +set)spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay = NULL; +-set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL-; +set spanner.statement_tag='tag1'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-NULL; +set-spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay = NULL; ++set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL+; +set spanner.statement_tag='tag1'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =+NULL; +set+spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay = NULL; +-#set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL-#; +set spanner.statement_tag='tag1'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-#NULL; +set-#spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay = NULL; +/set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL/; +set spanner.statement_tag='tag1'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/NULL; +set/spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay = NULL; +\set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL\; +set spanner.statement_tag='tag1'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =\NULL; +set\spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay = NULL; +?set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL?; +set spanner.statement_tag='tag1'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =?NULL; +set?spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay = NULL; +-/set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL-/; +set spanner.statement_tag='tag1'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-/NULL; +set-/spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay = NULL; +/#set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL/#; +set spanner.statement_tag='tag1'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/#NULL; +set/#spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay = NULL; +/-set spanner.statement_tag='tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = NULL/-; +set spanner.statement_tag='tag1'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/-NULL; +set/-spanner.statement_tag='tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = null ; +set spanner.statement_tag='tag2'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY = NULL ; +SET SPANNER.STATEMENT_TAG='TAG2'; NEW_CONNECTION; -set spanner.max_commit_delay = null ; +set spanner.statement_tag='tag2'; NEW_CONNECTION; - set spanner.max_commit_delay = null ; + set spanner.statement_tag='tag2'; NEW_CONNECTION; - set spanner.max_commit_delay = null ; + set spanner.statement_tag='tag2'; NEW_CONNECTION; -set spanner.max_commit_delay = null ; +set spanner.statement_tag='tag2'; NEW_CONNECTION; -set spanner.max_commit_delay = null ; +set spanner.statement_tag='tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay = null ; +set spanner.statement_tag='tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay = null +set spanner.statement_tag='tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay = null ; +set spanner.statement_tag='tag2'; NEW_CONNECTION; -set spanner.max_commit_delay = null ; +set spanner.statement_tag='tag2'; NEW_CONNECTION; set -spanner.max_commit_delay -= -null -; +spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay = null ; +foo set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null bar; +set spanner.statement_tag='tag2' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay = null ; +%set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null %; +set spanner.statement_tag='tag2'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null%; +set%spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay = null ; +_set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null _; +set spanner.statement_tag='tag2'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null_; +set_spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay = null ; +&set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null &; +set spanner.statement_tag='tag2'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null&; +set&spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay = null ; +$set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null $; +set spanner.statement_tag='tag2'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null$; +set$spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay = null ; +@set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null @; +set spanner.statement_tag='tag2'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null@; +set@spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay = null ; +!set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null !; +set spanner.statement_tag='tag2'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null!; +set!spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay = null ; +*set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null *; +set spanner.statement_tag='tag2'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null*; +set*spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay = null ; +(set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null (; +set spanner.statement_tag='tag2'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null(; +set(spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay = null ; +)set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null ); +set spanner.statement_tag='tag2'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null); +set)spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay = null ; +-set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null -; +set spanner.statement_tag='tag2'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null-; +set-spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay = null ; ++set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null +; +set spanner.statement_tag='tag2'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null+; +set+spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay = null ; +-#set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null -#; +set spanner.statement_tag='tag2'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null-#; +set-#spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay = null ; +/set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null /; +set spanner.statement_tag='tag2'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null/; +set/spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay = null ; +\set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null \; +set spanner.statement_tag='tag2'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null\; +set\spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay = null ; +?set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null ?; +set spanner.statement_tag='tag2'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null?; +set?spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay = null ; +-/set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null -/; +set spanner.statement_tag='tag2'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null-/; +set-/spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay = null ; +/#set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null /#; +set spanner.statement_tag='tag2'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null/#; +set/#spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay = null ; +/-set spanner.statement_tag='tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null /-; +set spanner.statement_tag='tag2'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = null/-; +set/-spanner.statement_tag='tag2'; NEW_CONNECTION; -set spanner.max_commit_delay='1s'; +set spanner.statement_tag=''; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY='1S'; +SET SPANNER.STATEMENT_TAG=''; NEW_CONNECTION; -set spanner.max_commit_delay='1s'; +set spanner.statement_tag=''; NEW_CONNECTION; - set spanner.max_commit_delay='1s'; + set spanner.statement_tag=''; NEW_CONNECTION; - set spanner.max_commit_delay='1s'; + set spanner.statement_tag=''; NEW_CONNECTION; -set spanner.max_commit_delay='1s'; +set spanner.statement_tag=''; NEW_CONNECTION; -set spanner.max_commit_delay='1s' ; +set spanner.statement_tag='' ; NEW_CONNECTION; -set spanner.max_commit_delay='1s' ; +set spanner.statement_tag='' ; NEW_CONNECTION; -set spanner.max_commit_delay='1s' +set spanner.statement_tag='' ; NEW_CONNECTION; -set spanner.max_commit_delay='1s'; +set spanner.statement_tag=''; NEW_CONNECTION; -set spanner.max_commit_delay='1s'; +set spanner.statement_tag=''; NEW_CONNECTION; set -spanner.max_commit_delay='1s'; +spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay='1s'; +foo set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s' bar; +set spanner.statement_tag='' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay='1s'; +%set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'%; +set spanner.statement_tag=''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.max_commit_delay='1s'; +set%spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay='1s'; +_set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'_; +set spanner.statement_tag=''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.max_commit_delay='1s'; +set_spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay='1s'; +&set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'&; +set spanner.statement_tag=''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.max_commit_delay='1s'; +set&spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay='1s'; +$set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'$; +set spanner.statement_tag=''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.max_commit_delay='1s'; +set$spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay='1s'; +@set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'@; +set spanner.statement_tag=''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.max_commit_delay='1s'; +set@spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay='1s'; +!set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'!; +set spanner.statement_tag=''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.max_commit_delay='1s'; +set!spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay='1s'; +*set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'*; +set spanner.statement_tag=''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.max_commit_delay='1s'; +set*spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay='1s'; +(set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'(; +set spanner.statement_tag=''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.max_commit_delay='1s'; +set(spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay='1s'; +)set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'); +set spanner.statement_tag=''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.max_commit_delay='1s'; +set)spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay='1s'; +-set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'-; +set spanner.statement_tag=''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.max_commit_delay='1s'; +set-spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay='1s'; ++set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'+; +set spanner.statement_tag=''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.max_commit_delay='1s'; +set+spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay='1s'; +-#set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'-#; +set spanner.statement_tag=''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.max_commit_delay='1s'; +set-#spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay='1s'; +/set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'/; +set spanner.statement_tag=''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.max_commit_delay='1s'; +set/spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay='1s'; +\set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'\; +set spanner.statement_tag=''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.max_commit_delay='1s'; +set\spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay='1s'; +?set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'?; +set spanner.statement_tag=''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.max_commit_delay='1s'; +set?spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay='1s'; +-/set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'-/; +set spanner.statement_tag=''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.max_commit_delay='1s'; +set-/spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay='1s'; +/#set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'/#; +set spanner.statement_tag=''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.max_commit_delay='1s'; +set/#spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay='1s'; +/-set spanner.statement_tag=''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='1s'/-; +set spanner.statement_tag=''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.max_commit_delay='1s'; +set/-spanner.statement_tag=''; NEW_CONNECTION; -set spanner.max_commit_delay = '1s'; +set spanner.statement_tag to 'tag1'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY = '1S'; +SET SPANNER.STATEMENT_TAG TO 'TAG1'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s'; +set spanner.statement_tag to 'tag1'; NEW_CONNECTION; - set spanner.max_commit_delay = '1s'; + set spanner.statement_tag to 'tag1'; NEW_CONNECTION; - set spanner.max_commit_delay = '1s'; + set spanner.statement_tag to 'tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s'; +set spanner.statement_tag to 'tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' +set spanner.statement_tag to 'tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = '1s'; +set spanner.statement_tag to 'tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s'; +set spanner.statement_tag to 'tag1'; NEW_CONNECTION; set -spanner.max_commit_delay -= -'1s'; +spanner.statement_tag +to +'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay = '1s'; +foo set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' bar; +set spanner.statement_tag to 'tag1' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay = '1s'; +%set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'%; +set spanner.statement_tag to 'tag1'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =%'1s'; +set spanner.statement_tag to%'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay = '1s'; +_set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'_; +set spanner.statement_tag to 'tag1'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =_'1s'; +set spanner.statement_tag to_'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay = '1s'; +&set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'&; +set spanner.statement_tag to 'tag1'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =&'1s'; +set spanner.statement_tag to&'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay = '1s'; +$set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'$; +set spanner.statement_tag to 'tag1'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =$'1s'; +set spanner.statement_tag to$'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay = '1s'; +@set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'@; +set spanner.statement_tag to 'tag1'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =@'1s'; +set spanner.statement_tag to@'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay = '1s'; +!set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'!; +set spanner.statement_tag to 'tag1'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =!'1s'; +set spanner.statement_tag to!'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay = '1s'; +*set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'*; +set spanner.statement_tag to 'tag1'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =*'1s'; +set spanner.statement_tag to*'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay = '1s'; +(set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'(; +set spanner.statement_tag to 'tag1'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =('1s'; +set spanner.statement_tag to('tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay = '1s'; +)set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'); +set spanner.statement_tag to 'tag1'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =)'1s'; +set spanner.statement_tag to)'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay = '1s'; +-set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'-; +set spanner.statement_tag to 'tag1'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-'1s'; +set spanner.statement_tag to-'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay = '1s'; ++set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'+; +set spanner.statement_tag to 'tag1'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =+'1s'; +set spanner.statement_tag to+'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay = '1s'; +-#set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'-#; +set spanner.statement_tag to 'tag1'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-#'1s'; +set spanner.statement_tag to-#'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay = '1s'; +/set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'/; +set spanner.statement_tag to 'tag1'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/'1s'; +set spanner.statement_tag to/'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay = '1s'; +\set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'\; +set spanner.statement_tag to 'tag1'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =\'1s'; +set spanner.statement_tag to\'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay = '1s'; +?set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'?; +set spanner.statement_tag to 'tag1'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =?'1s'; +set spanner.statement_tag to?'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay = '1s'; +-/set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'-/; +set spanner.statement_tag to 'tag1'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-/'1s'; +set spanner.statement_tag to-/'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay = '1s'; +/#set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'/#; +set spanner.statement_tag to 'tag1'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/#'1s'; +set spanner.statement_tag to/#'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay = '1s'; +/-set spanner.statement_tag to 'tag1'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'/-; +set spanner.statement_tag to 'tag1'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/-'1s'; +set spanner.statement_tag to/-'tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag2'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY = '1S' ; +SET SPANNER.STATEMENT_TAG TO 'TAG2'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag2'; NEW_CONNECTION; - set spanner.max_commit_delay = '1s' ; + set spanner.statement_tag to 'tag2'; NEW_CONNECTION; - set spanner.max_commit_delay = '1s' ; + set spanner.statement_tag to 'tag2'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag2'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' +set spanner.statement_tag to 'tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag2'; NEW_CONNECTION; -set spanner.max_commit_delay = '1s' ; +set spanner.statement_tag to 'tag2'; NEW_CONNECTION; set -spanner.max_commit_delay -= -'1s' -; +spanner.statement_tag +to +'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay = '1s' ; +foo set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' bar; +set spanner.statement_tag to 'tag2' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay = '1s' ; +%set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' %; +set spanner.statement_tag to 'tag2'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'%; +set spanner.statement_tag to%'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay = '1s' ; +_set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' _; +set spanner.statement_tag to 'tag2'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'_; +set spanner.statement_tag to_'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay = '1s' ; +&set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' &; +set spanner.statement_tag to 'tag2'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'&; +set spanner.statement_tag to&'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay = '1s' ; +$set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' $; +set spanner.statement_tag to 'tag2'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'$; +set spanner.statement_tag to$'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay = '1s' ; +@set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' @; +set spanner.statement_tag to 'tag2'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'@; +set spanner.statement_tag to@'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay = '1s' ; +!set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' !; +set spanner.statement_tag to 'tag2'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'!; +set spanner.statement_tag to!'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay = '1s' ; +*set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' *; +set spanner.statement_tag to 'tag2'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'*; +set spanner.statement_tag to*'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay = '1s' ; +(set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' (; +set spanner.statement_tag to 'tag2'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'(; +set spanner.statement_tag to('tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay = '1s' ; +)set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' ); +set spanner.statement_tag to 'tag2'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'); +set spanner.statement_tag to)'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay = '1s' ; +-set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' -; +set spanner.statement_tag to 'tag2'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'-; +set spanner.statement_tag to-'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay = '1s' ; ++set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' +; +set spanner.statement_tag to 'tag2'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'+; +set spanner.statement_tag to+'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay = '1s' ; +-#set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' -#; +set spanner.statement_tag to 'tag2'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'-#; +set spanner.statement_tag to-#'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay = '1s' ; +/set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' /; +set spanner.statement_tag to 'tag2'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'/; +set spanner.statement_tag to/'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay = '1s' ; +\set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' \; +set spanner.statement_tag to 'tag2'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'\; +set spanner.statement_tag to\'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay = '1s' ; +?set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' ?; +set spanner.statement_tag to 'tag2'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'?; +set spanner.statement_tag to?'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay = '1s' ; +-/set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' -/; +set spanner.statement_tag to 'tag2'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'-/; +set spanner.statement_tag to-/'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay = '1s' ; +/#set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' /#; +set spanner.statement_tag to 'tag2'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'/#; +set spanner.statement_tag to/#'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay = '1s' ; +/-set spanner.statement_tag to 'tag2'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s' /-; +set spanner.statement_tag to 'tag2'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = '1s'/-; +set spanner.statement_tag to/-'tag2'; NEW_CONNECTION; -set spanner.max_commit_delay=1000; +set spanner.statement_tag to ''; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY=1000; +SET SPANNER.STATEMENT_TAG TO ''; NEW_CONNECTION; -set spanner.max_commit_delay=1000; +set spanner.statement_tag to ''; NEW_CONNECTION; - set spanner.max_commit_delay=1000; + set spanner.statement_tag to ''; NEW_CONNECTION; - set spanner.max_commit_delay=1000; + set spanner.statement_tag to ''; NEW_CONNECTION; -set spanner.max_commit_delay=1000; +set spanner.statement_tag to ''; NEW_CONNECTION; -set spanner.max_commit_delay=1000 ; +set spanner.statement_tag to '' ; NEW_CONNECTION; -set spanner.max_commit_delay=1000 ; +set spanner.statement_tag to '' ; NEW_CONNECTION; -set spanner.max_commit_delay=1000 +set spanner.statement_tag to '' ; NEW_CONNECTION; -set spanner.max_commit_delay=1000; +set spanner.statement_tag to ''; NEW_CONNECTION; -set spanner.max_commit_delay=1000; +set spanner.statement_tag to ''; NEW_CONNECTION; set -spanner.max_commit_delay=1000; +spanner.statement_tag +to +''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay=1000; +foo set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000 bar; +set spanner.statement_tag to '' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay=1000; +%set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000%; +set spanner.statement_tag to ''%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.max_commit_delay=1000; +set spanner.statement_tag to%''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay=1000; +_set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000_; +set spanner.statement_tag to ''_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.max_commit_delay=1000; +set spanner.statement_tag to_''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay=1000; +&set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000&; +set spanner.statement_tag to ''&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.max_commit_delay=1000; +set spanner.statement_tag to&''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay=1000; +$set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000$; +set spanner.statement_tag to ''$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.max_commit_delay=1000; +set spanner.statement_tag to$''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay=1000; +@set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000@; +set spanner.statement_tag to ''@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.max_commit_delay=1000; +set spanner.statement_tag to@''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay=1000; +!set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000!; +set spanner.statement_tag to ''!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.max_commit_delay=1000; +set spanner.statement_tag to!''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay=1000; +*set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000*; +set spanner.statement_tag to ''*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.max_commit_delay=1000; +set spanner.statement_tag to*''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay=1000; +(set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000(; +set spanner.statement_tag to ''(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.max_commit_delay=1000; +set spanner.statement_tag to(''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay=1000; +)set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000); +set spanner.statement_tag to ''); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.max_commit_delay=1000; +set spanner.statement_tag to)''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay=1000; +-set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000-; +set spanner.statement_tag to ''-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.max_commit_delay=1000; +set spanner.statement_tag to-''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay=1000; ++set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000+; +set spanner.statement_tag to ''+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.max_commit_delay=1000; +set spanner.statement_tag to+''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay=1000; +-#set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000-#; +set spanner.statement_tag to ''-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.max_commit_delay=1000; +set spanner.statement_tag to-#''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay=1000; +/set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000/; +set spanner.statement_tag to ''/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.max_commit_delay=1000; +set spanner.statement_tag to/''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay=1000; +\set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000\; +set spanner.statement_tag to ''\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.max_commit_delay=1000; +set spanner.statement_tag to\''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay=1000; +?set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000?; +set spanner.statement_tag to ''?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.max_commit_delay=1000; +set spanner.statement_tag to?''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay=1000; +-/set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000-/; +set spanner.statement_tag to ''-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.max_commit_delay=1000; +set spanner.statement_tag to-/''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay=1000; +/#set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000/#; +set spanner.statement_tag to ''/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.max_commit_delay=1000; +set spanner.statement_tag to/#''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay=1000; +/-set spanner.statement_tag to ''; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay=1000/-; +set spanner.statement_tag to ''/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.max_commit_delay=1000; +set spanner.statement_tag to/-''; NEW_CONNECTION; -set spanner.max_commit_delay = 1000; +set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY = 1000; +SET SPANNER.STATEMENT_TAG TO 'TEST_TAG'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000; +set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; - set spanner.max_commit_delay = 1000; + set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; - set spanner.max_commit_delay = 1000; + set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000; +set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set spanner.statement_tag to 'test_tag' ; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set spanner.statement_tag to 'test_tag' ; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 +set spanner.statement_tag to 'test_tag' ; NEW_CONNECTION; -set spanner.max_commit_delay = 1000; +set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000; +set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; set -spanner.max_commit_delay -= -1000; +spanner.statement_tag +to +'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay = 1000; +foo set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 bar; +set spanner.statement_tag to 'test_tag' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay = 1000; +%set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000%; +set spanner.statement_tag to 'test_tag'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =%1000; +set spanner.statement_tag to%'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay = 1000; +_set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000_; +set spanner.statement_tag to 'test_tag'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =_1000; +set spanner.statement_tag to_'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay = 1000; +&set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000&; +set spanner.statement_tag to 'test_tag'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =&1000; +set spanner.statement_tag to&'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay = 1000; +$set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000$; +set spanner.statement_tag to 'test_tag'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =$1000; +set spanner.statement_tag to$'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay = 1000; +@set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000@; +set spanner.statement_tag to 'test_tag'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =@1000; +set spanner.statement_tag to@'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay = 1000; +!set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000!; +set spanner.statement_tag to 'test_tag'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =!1000; +set spanner.statement_tag to!'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay = 1000; +*set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000*; +set spanner.statement_tag to 'test_tag'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =*1000; +set spanner.statement_tag to*'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay = 1000; +(set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000(; +set spanner.statement_tag to 'test_tag'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =(1000; +set spanner.statement_tag to('test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay = 1000; +)set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000); +set spanner.statement_tag to 'test_tag'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =)1000; +set spanner.statement_tag to)'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay = 1000; +-set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000-; +set spanner.statement_tag to 'test_tag'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-1000; +set spanner.statement_tag to-'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay = 1000; ++set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000+; +set spanner.statement_tag to 'test_tag'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =+1000; +set spanner.statement_tag to+'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay = 1000; +-#set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000-#; +set spanner.statement_tag to 'test_tag'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-#1000; +set spanner.statement_tag to-#'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay = 1000; +/set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000/; +set spanner.statement_tag to 'test_tag'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/1000; +set spanner.statement_tag to/'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay = 1000; +\set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000\; +set spanner.statement_tag to 'test_tag'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =\1000; +set spanner.statement_tag to\'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay = 1000; +?set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000?; +set spanner.statement_tag to 'test_tag'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =?1000; +set spanner.statement_tag to?'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay = 1000; +-/set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000-/; +set spanner.statement_tag to 'test_tag'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =-/1000; +set spanner.statement_tag to-/'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay = 1000; +/#set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000/#; +set spanner.statement_tag to 'test_tag'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/#1000; +set spanner.statement_tag to/#'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay = 1000; +/-set spanner.statement_tag to 'test_tag'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000/-; +set spanner.statement_tag to 'test_tag'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay =/-1000; +set spanner.statement_tag to/-'test_tag'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set autocommit = false; +set spanner.transaction_tag='tag1'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY = 1000 ; +set autocommit = false; +SET SPANNER.TRANSACTION_TAG='TAG1'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set autocommit = false; +set spanner.transaction_tag='tag1'; NEW_CONNECTION; - set spanner.max_commit_delay = 1000 ; +set autocommit = false; + set spanner.transaction_tag='tag1'; NEW_CONNECTION; - set spanner.max_commit_delay = 1000 ; +set autocommit = false; + set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; -set spanner.max_commit_delay = 1000 ; +set spanner.transaction_tag='tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set autocommit = false; +set spanner.transaction_tag='tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set autocommit = false; +set spanner.transaction_tag='tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 +set autocommit = false; +set spanner.transaction_tag='tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set autocommit = false; +set spanner.transaction_tag='tag1'; NEW_CONNECTION; -set spanner.max_commit_delay = 1000 ; +set autocommit = false; +set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; set -spanner.max_commit_delay -= -1000 -; +spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay = 1000 ; +foo set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 bar; +set spanner.transaction_tag='tag1' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay = 1000 ; +%set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 %; +set spanner.transaction_tag='tag1'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000%; +set%spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay = 1000 ; +_set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 _; +set spanner.transaction_tag='tag1'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000_; +set_spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay = 1000 ; +&set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 &; +set spanner.transaction_tag='tag1'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000&; +set&spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay = 1000 ; +$set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 $; +set spanner.transaction_tag='tag1'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000$; +set$spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay = 1000 ; +@set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 @; +set spanner.transaction_tag='tag1'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000@; +set@spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay = 1000 ; +!set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 !; +set spanner.transaction_tag='tag1'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000!; +set!spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay = 1000 ; +*set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 *; +set spanner.transaction_tag='tag1'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000*; +set*spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay = 1000 ; +(set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 (; +set spanner.transaction_tag='tag1'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000(; +set(spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay = 1000 ; +)set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 ); +set spanner.transaction_tag='tag1'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000); +set)spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay = 1000 ; +-set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 -; +set spanner.transaction_tag='tag1'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000-; +set-spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay = 1000 ; ++set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 +; +set spanner.transaction_tag='tag1'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000+; +set+spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay = 1000 ; +-#set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 -#; +set spanner.transaction_tag='tag1'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000-#; +set-#spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay = 1000 ; +/set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 /; +set spanner.transaction_tag='tag1'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000/; +set/spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay = 1000 ; +\set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 \; +set spanner.transaction_tag='tag1'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000\; +set\spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay = 1000 ; +?set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 ?; +set spanner.transaction_tag='tag1'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000?; +set?spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay = 1000 ; +-/set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 -/; +set spanner.transaction_tag='tag1'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000-/; +set-/spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay = 1000 ; +/#set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 /#; +set spanner.transaction_tag='tag1'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000/#; +set/#spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay = 1000 ; +/-set spanner.transaction_tag='tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000 /-; +set spanner.transaction_tag='tag1'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay = 1000/-; +set/-spanner.transaction_tag='tag1'; NEW_CONNECTION; -set spanner.max_commit_delay='100ms'; +set autocommit = false; +set spanner.transaction_tag='tag2'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY='100MS'; +set autocommit = false; +SET SPANNER.TRANSACTION_TAG='TAG2'; NEW_CONNECTION; -set spanner.max_commit_delay='100ms'; +set autocommit = false; +set spanner.transaction_tag='tag2'; NEW_CONNECTION; - set spanner.max_commit_delay='100ms'; +set autocommit = false; + set spanner.transaction_tag='tag2'; NEW_CONNECTION; - set spanner.max_commit_delay='100ms'; +set autocommit = false; + set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; -set spanner.max_commit_delay='100ms'; +set spanner.transaction_tag='tag2'; NEW_CONNECTION; -set spanner.max_commit_delay='100ms' ; +set autocommit = false; +set spanner.transaction_tag='tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay='100ms' ; +set autocommit = false; +set spanner.transaction_tag='tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay='100ms' +set autocommit = false; +set spanner.transaction_tag='tag2' ; NEW_CONNECTION; -set spanner.max_commit_delay='100ms'; +set autocommit = false; +set spanner.transaction_tag='tag2'; NEW_CONNECTION; -set spanner.max_commit_delay='100ms'; +set autocommit = false; +set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; set -spanner.max_commit_delay='100ms'; +spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay='100ms'; +foo set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms' bar; +set spanner.transaction_tag='tag2' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay='100ms'; +%set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'%; +set spanner.transaction_tag='tag2'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.max_commit_delay='100ms'; +set%spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay='100ms'; +_set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'_; +set spanner.transaction_tag='tag2'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.max_commit_delay='100ms'; +set_spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay='100ms'; +&set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'&; +set spanner.transaction_tag='tag2'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.max_commit_delay='100ms'; +set&spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay='100ms'; +$set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'$; +set spanner.transaction_tag='tag2'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.max_commit_delay='100ms'; +set$spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay='100ms'; +@set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'@; +set spanner.transaction_tag='tag2'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.max_commit_delay='100ms'; +set@spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay='100ms'; +!set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'!; +set spanner.transaction_tag='tag2'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.max_commit_delay='100ms'; +set!spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay='100ms'; +*set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'*; +set spanner.transaction_tag='tag2'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.max_commit_delay='100ms'; +set*spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay='100ms'; +(set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'(; +set spanner.transaction_tag='tag2'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.max_commit_delay='100ms'; +set(spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay='100ms'; +)set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'); +set spanner.transaction_tag='tag2'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.max_commit_delay='100ms'; +set)spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay='100ms'; +-set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'-; +set spanner.transaction_tag='tag2'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.max_commit_delay='100ms'; +set-spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay='100ms'; ++set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'+; +set spanner.transaction_tag='tag2'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.max_commit_delay='100ms'; +set+spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay='100ms'; +-#set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'-#; +set spanner.transaction_tag='tag2'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.max_commit_delay='100ms'; +set-#spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay='100ms'; +/set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'/; +set spanner.transaction_tag='tag2'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.max_commit_delay='100ms'; +set/spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay='100ms'; +\set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'\; +set spanner.transaction_tag='tag2'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.max_commit_delay='100ms'; +set\spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay='100ms'; +?set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'?; +set spanner.transaction_tag='tag2'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.max_commit_delay='100ms'; +set?spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay='100ms'; +-/set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'-/; +set spanner.transaction_tag='tag2'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.max_commit_delay='100ms'; +set-/spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay='100ms'; +/#set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'/#; +set spanner.transaction_tag='tag2'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.max_commit_delay='100ms'; +set/#spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay='100ms'; +/-set spanner.transaction_tag='tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay='100ms'/-; +set spanner.transaction_tag='tag2'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.max_commit_delay='100ms'; +set/-spanner.transaction_tag='tag2'; NEW_CONNECTION; -set spanner.max_commit_delay to '10000us'; +set autocommit = false; +set spanner.transaction_tag=''; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY TO '10000US'; +set autocommit = false; +SET SPANNER.TRANSACTION_TAG=''; NEW_CONNECTION; -set spanner.max_commit_delay to '10000us'; +set autocommit = false; +set spanner.transaction_tag=''; NEW_CONNECTION; - set spanner.max_commit_delay to '10000us'; +set autocommit = false; + set spanner.transaction_tag=''; NEW_CONNECTION; - set spanner.max_commit_delay to '10000us'; +set autocommit = false; + set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; -set spanner.max_commit_delay to '10000us'; +set spanner.transaction_tag=''; NEW_CONNECTION; -set spanner.max_commit_delay to '10000us' ; +set autocommit = false; +set spanner.transaction_tag='' ; NEW_CONNECTION; -set spanner.max_commit_delay to '10000us' ; +set autocommit = false; +set spanner.transaction_tag='' ; NEW_CONNECTION; -set spanner.max_commit_delay to '10000us' +set autocommit = false; +set spanner.transaction_tag='' ; NEW_CONNECTION; -set spanner.max_commit_delay to '10000us'; +set autocommit = false; +set spanner.transaction_tag=''; NEW_CONNECTION; -set spanner.max_commit_delay to '10000us'; +set autocommit = false; +set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; set -spanner.max_commit_delay -to -'10000us'; +spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay to '10000us'; +foo set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us' bar; +set spanner.transaction_tag='' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay to '10000us'; +%set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'%; +set spanner.transaction_tag=''%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to%'10000us'; +set%spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay to '10000us'; +_set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'_; +set spanner.transaction_tag=''_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to_'10000us'; +set_spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay to '10000us'; +&set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'&; +set spanner.transaction_tag=''&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to&'10000us'; +set&spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay to '10000us'; +$set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'$; +set spanner.transaction_tag=''$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to$'10000us'; +set$spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay to '10000us'; +@set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'@; +set spanner.transaction_tag=''@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to@'10000us'; +set@spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay to '10000us'; +!set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'!; +set spanner.transaction_tag=''!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to!'10000us'; +set!spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay to '10000us'; +*set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'*; +set spanner.transaction_tag=''*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to*'10000us'; +set*spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay to '10000us'; +(set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'(; +set spanner.transaction_tag=''(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to('10000us'; +set(spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay to '10000us'; +)set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'); +set spanner.transaction_tag=''); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to)'10000us'; +set)spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay to '10000us'; +-set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'-; +set spanner.transaction_tag=''-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to-'10000us'; +set-spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay to '10000us'; ++set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'+; +set spanner.transaction_tag=''+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to+'10000us'; +set+spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay to '10000us'; +-#set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'-#; +set spanner.transaction_tag=''-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to-#'10000us'; +set-#spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay to '10000us'; +/set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'/; +set spanner.transaction_tag=''/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to/'10000us'; +set/spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay to '10000us'; +\set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'\; +set spanner.transaction_tag=''\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to\'10000us'; +set\spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay to '10000us'; +?set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'?; +set spanner.transaction_tag=''?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to?'10000us'; +set?spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay to '10000us'; +-/set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'-/; +set spanner.transaction_tag=''-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to-/'10000us'; +set-/spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay to '10000us'; +/#set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'/#; +set spanner.transaction_tag=''/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to/#'10000us'; +set/#spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay to '10000us'; +/-set spanner.transaction_tag=''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to '10000us'/-; +set spanner.transaction_tag=''/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay to/-'10000us'; +set/-spanner.transaction_tag=''; NEW_CONNECTION; -set spanner.max_commit_delay TO '9223372036854775807ns'; +set autocommit = false; +set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; -SET SPANNER.MAX_COMMIT_DELAY TO '9223372036854775807NS'; +set autocommit = false; +SET SPANNER.TRANSACTION_TAG TO 'TAG1'; NEW_CONNECTION; -set spanner.max_commit_delay to '9223372036854775807ns'; +set autocommit = false; +set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; - set spanner.max_commit_delay TO '9223372036854775807ns'; +set autocommit = false; + set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; - set spanner.max_commit_delay TO '9223372036854775807ns'; +set autocommit = false; + set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; -set spanner.max_commit_delay TO '9223372036854775807ns'; +set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; -set spanner.max_commit_delay TO '9223372036854775807ns' ; +set autocommit = false; +set spanner.transaction_tag to 'tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay TO '9223372036854775807ns' ; +set autocommit = false; +set spanner.transaction_tag to 'tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay TO '9223372036854775807ns' +set autocommit = false; +set spanner.transaction_tag to 'tag1' ; NEW_CONNECTION; -set spanner.max_commit_delay TO '9223372036854775807ns'; +set autocommit = false; +set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; -set spanner.max_commit_delay TO '9223372036854775807ns'; +set autocommit = false; +set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; set -spanner.max_commit_delay -TO -'9223372036854775807ns'; +spanner.transaction_tag +to +'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.max_commit_delay TO '9223372036854775807ns'; +foo set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns' bar; +set spanner.transaction_tag to 'tag1' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.max_commit_delay TO '9223372036854775807ns'; +%set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'%; +set spanner.transaction_tag to 'tag1'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO%'9223372036854775807ns'; +set spanner.transaction_tag to%'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.max_commit_delay TO '9223372036854775807ns'; +_set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'_; +set spanner.transaction_tag to 'tag1'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO_'9223372036854775807ns'; +set spanner.transaction_tag to_'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.max_commit_delay TO '9223372036854775807ns'; +&set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'&; +set spanner.transaction_tag to 'tag1'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO&'9223372036854775807ns'; +set spanner.transaction_tag to&'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.max_commit_delay TO '9223372036854775807ns'; +$set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'$; +set spanner.transaction_tag to 'tag1'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO$'9223372036854775807ns'; +set spanner.transaction_tag to$'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.max_commit_delay TO '9223372036854775807ns'; +@set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'@; +set spanner.transaction_tag to 'tag1'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO@'9223372036854775807ns'; +set spanner.transaction_tag to@'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.max_commit_delay TO '9223372036854775807ns'; +!set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'!; +set spanner.transaction_tag to 'tag1'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO!'9223372036854775807ns'; +set spanner.transaction_tag to!'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.max_commit_delay TO '9223372036854775807ns'; +*set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'*; +set spanner.transaction_tag to 'tag1'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO*'9223372036854775807ns'; +set spanner.transaction_tag to*'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.max_commit_delay TO '9223372036854775807ns'; +(set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'(; +set spanner.transaction_tag to 'tag1'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO('9223372036854775807ns'; +set spanner.transaction_tag to('tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.max_commit_delay TO '9223372036854775807ns'; +)set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'); +set spanner.transaction_tag to 'tag1'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO)'9223372036854775807ns'; +set spanner.transaction_tag to)'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.max_commit_delay TO '9223372036854775807ns'; +-set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'-; +set spanner.transaction_tag to 'tag1'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO-'9223372036854775807ns'; +set spanner.transaction_tag to-'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.max_commit_delay TO '9223372036854775807ns'; ++set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'+; +set spanner.transaction_tag to 'tag1'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO+'9223372036854775807ns'; +set spanner.transaction_tag to+'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.max_commit_delay TO '9223372036854775807ns'; +-#set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'-#; +set spanner.transaction_tag to 'tag1'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO-#'9223372036854775807ns'; +set spanner.transaction_tag to-#'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.max_commit_delay TO '9223372036854775807ns'; +/set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'/; +set spanner.transaction_tag to 'tag1'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO/'9223372036854775807ns'; +set spanner.transaction_tag to/'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.max_commit_delay TO '9223372036854775807ns'; +\set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'\; +set spanner.transaction_tag to 'tag1'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO\'9223372036854775807ns'; +set spanner.transaction_tag to\'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.max_commit_delay TO '9223372036854775807ns'; +?set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'?; +set spanner.transaction_tag to 'tag1'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO?'9223372036854775807ns'; +set spanner.transaction_tag to?'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.max_commit_delay TO '9223372036854775807ns'; +-/set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'-/; +set spanner.transaction_tag to 'tag1'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO-/'9223372036854775807ns'; +set spanner.transaction_tag to-/'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.max_commit_delay TO '9223372036854775807ns'; +/#set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'/#; +set spanner.transaction_tag to 'tag1'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO/#'9223372036854775807ns'; +set spanner.transaction_tag to/#'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.max_commit_delay TO '9223372036854775807ns'; +/-set spanner.transaction_tag to 'tag1'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO '9223372036854775807ns'/-; +set spanner.transaction_tag to 'tag1'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.max_commit_delay TO/-'9223372036854775807ns'; +set spanner.transaction_tag to/-'tag1'; NEW_CONNECTION; -set spanner.statement_tag='tag1'; +set autocommit = false; +set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; -SET SPANNER.STATEMENT_TAG='TAG1'; +set autocommit = false; +SET SPANNER.TRANSACTION_TAG TO 'TAG2'; NEW_CONNECTION; -set spanner.statement_tag='tag1'; +set autocommit = false; +set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; - set spanner.statement_tag='tag1'; +set autocommit = false; + set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; - set spanner.statement_tag='tag1'; +set autocommit = false; + set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; -set spanner.statement_tag='tag1'; +set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; -set spanner.statement_tag='tag1' ; +set autocommit = false; +set spanner.transaction_tag to 'tag2' ; NEW_CONNECTION; -set spanner.statement_tag='tag1' ; +set autocommit = false; +set spanner.transaction_tag to 'tag2' ; NEW_CONNECTION; -set spanner.statement_tag='tag1' +set autocommit = false; +set spanner.transaction_tag to 'tag2' ; NEW_CONNECTION; -set spanner.statement_tag='tag1'; +set autocommit = false; +set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; -set spanner.statement_tag='tag1'; +set autocommit = false; +set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; set -spanner.statement_tag='tag1'; +spanner.transaction_tag +to +'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.statement_tag='tag1'; +foo set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1' bar; +set spanner.transaction_tag to 'tag2' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.statement_tag='tag1'; +%set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'%; +set spanner.transaction_tag to 'tag2'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.statement_tag='tag1'; +set spanner.transaction_tag to%'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.statement_tag='tag1'; +_set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'_; +set spanner.transaction_tag to 'tag2'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.statement_tag='tag1'; +set spanner.transaction_tag to_'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.statement_tag='tag1'; +&set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'&; +set spanner.transaction_tag to 'tag2'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.statement_tag='tag1'; +set spanner.transaction_tag to&'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.statement_tag='tag1'; +$set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'$; +set spanner.transaction_tag to 'tag2'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.statement_tag='tag1'; +set spanner.transaction_tag to$'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.statement_tag='tag1'; +@set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'@; +set spanner.transaction_tag to 'tag2'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.statement_tag='tag1'; +set spanner.transaction_tag to@'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.statement_tag='tag1'; +!set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'!; +set spanner.transaction_tag to 'tag2'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.statement_tag='tag1'; +set spanner.transaction_tag to!'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.statement_tag='tag1'; +*set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'*; +set spanner.transaction_tag to 'tag2'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.statement_tag='tag1'; +set spanner.transaction_tag to*'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.statement_tag='tag1'; +(set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'(; +set spanner.transaction_tag to 'tag2'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.statement_tag='tag1'; +set spanner.transaction_tag to('tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.statement_tag='tag1'; +)set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'); +set spanner.transaction_tag to 'tag2'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.statement_tag='tag1'; +set spanner.transaction_tag to)'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.statement_tag='tag1'; +-set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'-; +set spanner.transaction_tag to 'tag2'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.statement_tag='tag1'; +set spanner.transaction_tag to-'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.statement_tag='tag1'; ++set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'+; +set spanner.transaction_tag to 'tag2'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.statement_tag='tag1'; +set spanner.transaction_tag to+'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.statement_tag='tag1'; +-#set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'-#; +set spanner.transaction_tag to 'tag2'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.statement_tag='tag1'; +set spanner.transaction_tag to-#'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.statement_tag='tag1'; +/set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'/; +set spanner.transaction_tag to 'tag2'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.statement_tag='tag1'; +set spanner.transaction_tag to/'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.statement_tag='tag1'; +\set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'\; +set spanner.transaction_tag to 'tag2'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.statement_tag='tag1'; +set spanner.transaction_tag to\'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.statement_tag='tag1'; +?set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'?; +set spanner.transaction_tag to 'tag2'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.statement_tag='tag1'; +set spanner.transaction_tag to?'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.statement_tag='tag1'; +-/set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'-/; +set spanner.transaction_tag to 'tag2'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.statement_tag='tag1'; +set spanner.transaction_tag to-/'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.statement_tag='tag1'; +/#set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'/#; +set spanner.transaction_tag to 'tag2'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.statement_tag='tag1'; +set spanner.transaction_tag to/#'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.statement_tag='tag1'; +/-set spanner.transaction_tag to 'tag2'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag1'/-; +set spanner.transaction_tag to 'tag2'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.statement_tag='tag1'; +set spanner.transaction_tag to/-'tag2'; NEW_CONNECTION; -set spanner.statement_tag='tag2'; +set autocommit = false; +set spanner.transaction_tag to ''; NEW_CONNECTION; -SET SPANNER.STATEMENT_TAG='TAG2'; +set autocommit = false; +SET SPANNER.TRANSACTION_TAG TO ''; NEW_CONNECTION; -set spanner.statement_tag='tag2'; +set autocommit = false; +set spanner.transaction_tag to ''; NEW_CONNECTION; - set spanner.statement_tag='tag2'; +set autocommit = false; + set spanner.transaction_tag to ''; NEW_CONNECTION; - set spanner.statement_tag='tag2'; +set autocommit = false; + set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; -set spanner.statement_tag='tag2'; +set spanner.transaction_tag to ''; NEW_CONNECTION; -set spanner.statement_tag='tag2' ; +set autocommit = false; +set spanner.transaction_tag to '' ; NEW_CONNECTION; -set spanner.statement_tag='tag2' ; +set autocommit = false; +set spanner.transaction_tag to '' ; NEW_CONNECTION; -set spanner.statement_tag='tag2' +set autocommit = false; +set spanner.transaction_tag to '' ; NEW_CONNECTION; -set spanner.statement_tag='tag2'; +set autocommit = false; +set spanner.transaction_tag to ''; NEW_CONNECTION; -set spanner.statement_tag='tag2'; +set autocommit = false; +set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; set -spanner.statement_tag='tag2'; +spanner.transaction_tag +to +''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.statement_tag='tag2'; +foo set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2' bar; +set spanner.transaction_tag to '' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.statement_tag='tag2'; +%set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'%; +set spanner.transaction_tag to ''%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.statement_tag='tag2'; +set spanner.transaction_tag to%''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.statement_tag='tag2'; +_set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'_; +set spanner.transaction_tag to ''_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.statement_tag='tag2'; +set spanner.transaction_tag to_''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.statement_tag='tag2'; +&set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'&; +set spanner.transaction_tag to ''&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.statement_tag='tag2'; +set spanner.transaction_tag to&''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.statement_tag='tag2'; +$set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'$; +set spanner.transaction_tag to ''$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.statement_tag='tag2'; +set spanner.transaction_tag to$''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.statement_tag='tag2'; +@set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'@; +set spanner.transaction_tag to ''@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.statement_tag='tag2'; +set spanner.transaction_tag to@''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.statement_tag='tag2'; +!set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'!; +set spanner.transaction_tag to ''!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.statement_tag='tag2'; +set spanner.transaction_tag to!''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.statement_tag='tag2'; +*set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'*; +set spanner.transaction_tag to ''*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.statement_tag='tag2'; +set spanner.transaction_tag to*''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.statement_tag='tag2'; +(set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'(; +set spanner.transaction_tag to ''(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.statement_tag='tag2'; +set spanner.transaction_tag to(''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.statement_tag='tag2'; +)set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'); +set spanner.transaction_tag to ''); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.statement_tag='tag2'; +set spanner.transaction_tag to)''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.statement_tag='tag2'; +-set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'-; +set spanner.transaction_tag to ''-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.statement_tag='tag2'; +set spanner.transaction_tag to-''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.statement_tag='tag2'; ++set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'+; +set spanner.transaction_tag to ''+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.statement_tag='tag2'; +set spanner.transaction_tag to+''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.statement_tag='tag2'; +-#set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'-#; +set spanner.transaction_tag to ''-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.statement_tag='tag2'; +set spanner.transaction_tag to-#''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.statement_tag='tag2'; +/set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'/; +set spanner.transaction_tag to ''/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.statement_tag='tag2'; +set spanner.transaction_tag to/''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.statement_tag='tag2'; +\set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'\; +set spanner.transaction_tag to ''\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.statement_tag='tag2'; +set spanner.transaction_tag to\''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.statement_tag='tag2'; +?set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'?; +set spanner.transaction_tag to ''?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.statement_tag='tag2'; +set spanner.transaction_tag to?''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.statement_tag='tag2'; +-/set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'-/; +set spanner.transaction_tag to ''-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.statement_tag='tag2'; +set spanner.transaction_tag to-/''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.statement_tag='tag2'; +/#set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'/#; +set spanner.transaction_tag to ''/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.statement_tag='tag2'; +set spanner.transaction_tag to/#''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.statement_tag='tag2'; +/-set spanner.transaction_tag to ''; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='tag2'/-; +set spanner.transaction_tag to ''/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.statement_tag='tag2'; +set spanner.transaction_tag to/-''; NEW_CONNECTION; -set spanner.statement_tag=''; +set autocommit = false; +set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; -SET SPANNER.STATEMENT_TAG=''; +set autocommit = false; +SET SPANNER.TRANSACTION_TAG TO 'TEST_TAG'; NEW_CONNECTION; -set spanner.statement_tag=''; +set autocommit = false; +set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; - set spanner.statement_tag=''; +set autocommit = false; + set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; - set spanner.statement_tag=''; +set autocommit = false; + set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; -set spanner.statement_tag=''; +set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; -set spanner.statement_tag='' ; +set autocommit = false; +set spanner.transaction_tag to 'test_tag' ; NEW_CONNECTION; -set spanner.statement_tag='' ; +set autocommit = false; +set spanner.transaction_tag to 'test_tag' ; NEW_CONNECTION; -set spanner.statement_tag='' +set autocommit = false; +set spanner.transaction_tag to 'test_tag' ; NEW_CONNECTION; -set spanner.statement_tag=''; +set autocommit = false; +set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; -set spanner.statement_tag=''; +set autocommit = false; +set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; set -spanner.statement_tag=''; +spanner.transaction_tag +to +'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.statement_tag=''; +foo set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag='' bar; +set spanner.transaction_tag to 'test_tag' bar; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.statement_tag=''; +%set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''%; +set spanner.transaction_tag to 'test_tag'%; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.statement_tag=''; +set spanner.transaction_tag to%'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.statement_tag=''; +_set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''_; +set spanner.transaction_tag to 'test_tag'_; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.statement_tag=''; +set spanner.transaction_tag to_'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.statement_tag=''; +&set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''&; +set spanner.transaction_tag to 'test_tag'&; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.statement_tag=''; +set spanner.transaction_tag to&'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.statement_tag=''; +$set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''$; +set spanner.transaction_tag to 'test_tag'$; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.statement_tag=''; +set spanner.transaction_tag to$'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.statement_tag=''; +@set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''@; +set spanner.transaction_tag to 'test_tag'@; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.statement_tag=''; +set spanner.transaction_tag to@'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.statement_tag=''; +!set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''!; +set spanner.transaction_tag to 'test_tag'!; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.statement_tag=''; +set spanner.transaction_tag to!'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.statement_tag=''; +*set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''*; +set spanner.transaction_tag to 'test_tag'*; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.statement_tag=''; +set spanner.transaction_tag to*'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.statement_tag=''; +(set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''(; +set spanner.transaction_tag to 'test_tag'(; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.statement_tag=''; +set spanner.transaction_tag to('test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.statement_tag=''; +)set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''); +set spanner.transaction_tag to 'test_tag'); NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.statement_tag=''; +set spanner.transaction_tag to)'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.statement_tag=''; +-set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''-; +set spanner.transaction_tag to 'test_tag'-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.statement_tag=''; +set spanner.transaction_tag to-'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.statement_tag=''; ++set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''+; +set spanner.transaction_tag to 'test_tag'+; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.statement_tag=''; +set spanner.transaction_tag to+'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.statement_tag=''; +-#set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''-#; +set spanner.transaction_tag to 'test_tag'-#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.statement_tag=''; +set spanner.transaction_tag to-#'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.statement_tag=''; +/set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''/; +set spanner.transaction_tag to 'test_tag'/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.statement_tag=''; +set spanner.transaction_tag to/'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.statement_tag=''; +\set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''\; +set spanner.transaction_tag to 'test_tag'\; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.statement_tag=''; +set spanner.transaction_tag to\'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.statement_tag=''; +?set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''?; +set spanner.transaction_tag to 'test_tag'?; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.statement_tag=''; +set spanner.transaction_tag to?'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.statement_tag=''; +-/set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''-/; +set spanner.transaction_tag to 'test_tag'-/; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.statement_tag=''; +set spanner.transaction_tag to-/'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.statement_tag=''; +/#set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''/#; +set spanner.transaction_tag to 'test_tag'/#; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.statement_tag=''; +set spanner.transaction_tag to/#'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.statement_tag=''; +/-set spanner.transaction_tag to 'test_tag'; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag=''/-; +set spanner.transaction_tag to 'test_tag'/-; NEW_CONNECTION; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.statement_tag=''; +set spanner.transaction_tag to/-'test_tag'; NEW_CONNECTION; -set spanner.statement_tag to 'tag1'; +set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; -SET SPANNER.STATEMENT_TAG TO 'TAG1'; +SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS = TRUE; NEW_CONNECTION; -set spanner.statement_tag to 'tag1'; +set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; - set spanner.statement_tag to 'tag1'; + set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; - set spanner.statement_tag to 'tag1'; + set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; -set spanner.statement_tag to 'tag1'; +set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; -set spanner.statement_tag to 'tag1' ; +set spanner.exclude_txn_from_change_streams = true ; NEW_CONNECTION; -set spanner.statement_tag to 'tag1' ; +set spanner.exclude_txn_from_change_streams = true ; NEW_CONNECTION; -set spanner.statement_tag to 'tag1' +set spanner.exclude_txn_from_change_streams = true ; NEW_CONNECTION; -set spanner.statement_tag to 'tag1'; +set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; -set spanner.statement_tag to 'tag1'; +set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; set -spanner.statement_tag -to -'tag1'; +spanner.exclude_txn_from_change_streams += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.statement_tag to 'tag1'; +foo set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1' bar; +set spanner.exclude_txn_from_change_streams = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.statement_tag to 'tag1'; +%set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'%; +set spanner.exclude_txn_from_change_streams = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to%'tag1'; +set spanner.exclude_txn_from_change_streams =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.statement_tag to 'tag1'; +_set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'_; +set spanner.exclude_txn_from_change_streams = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to_'tag1'; +set spanner.exclude_txn_from_change_streams =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.statement_tag to 'tag1'; +&set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'&; +set spanner.exclude_txn_from_change_streams = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to&'tag1'; +set spanner.exclude_txn_from_change_streams =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.statement_tag to 'tag1'; +$set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'$; +set spanner.exclude_txn_from_change_streams = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to$'tag1'; +set spanner.exclude_txn_from_change_streams =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.statement_tag to 'tag1'; +@set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'@; +set spanner.exclude_txn_from_change_streams = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to@'tag1'; +set spanner.exclude_txn_from_change_streams =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.statement_tag to 'tag1'; +!set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'!; +set spanner.exclude_txn_from_change_streams = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to!'tag1'; +set spanner.exclude_txn_from_change_streams =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.statement_tag to 'tag1'; +*set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'*; +set spanner.exclude_txn_from_change_streams = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to*'tag1'; +set spanner.exclude_txn_from_change_streams =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.statement_tag to 'tag1'; +(set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'(; +set spanner.exclude_txn_from_change_streams = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to('tag1'; +set spanner.exclude_txn_from_change_streams =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.statement_tag to 'tag1'; +)set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'); +set spanner.exclude_txn_from_change_streams = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to)'tag1'; +set spanner.exclude_txn_from_change_streams =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.statement_tag to 'tag1'; +-set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'-; +set spanner.exclude_txn_from_change_streams = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-'tag1'; +set spanner.exclude_txn_from_change_streams =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.statement_tag to 'tag1'; ++set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'+; +set spanner.exclude_txn_from_change_streams = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to+'tag1'; +set spanner.exclude_txn_from_change_streams =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.statement_tag to 'tag1'; +-#set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'-#; +set spanner.exclude_txn_from_change_streams = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-#'tag1'; +set spanner.exclude_txn_from_change_streams =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.statement_tag to 'tag1'; +/set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'/; +set spanner.exclude_txn_from_change_streams = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/'tag1'; +set spanner.exclude_txn_from_change_streams =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.statement_tag to 'tag1'; +\set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'\; +set spanner.exclude_txn_from_change_streams = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to\'tag1'; +set spanner.exclude_txn_from_change_streams =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.statement_tag to 'tag1'; +?set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'?; +set spanner.exclude_txn_from_change_streams = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to?'tag1'; +set spanner.exclude_txn_from_change_streams =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.statement_tag to 'tag1'; +-/set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'-/; +set spanner.exclude_txn_from_change_streams = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-/'tag1'; +set spanner.exclude_txn_from_change_streams =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.statement_tag to 'tag1'; +/#set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'/#; +set spanner.exclude_txn_from_change_streams = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/#'tag1'; +set spanner.exclude_txn_from_change_streams =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.statement_tag to 'tag1'; +/-set spanner.exclude_txn_from_change_streams = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag1'/-; +set spanner.exclude_txn_from_change_streams = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/-'tag1'; +set spanner.exclude_txn_from_change_streams =/-true; NEW_CONNECTION; -set spanner.statement_tag to 'tag2'; +set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; -SET SPANNER.STATEMENT_TAG TO 'TAG2'; +SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS = FALSE; NEW_CONNECTION; -set spanner.statement_tag to 'tag2'; +set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; - set spanner.statement_tag to 'tag2'; + set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; - set spanner.statement_tag to 'tag2'; + set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; -set spanner.statement_tag to 'tag2'; +set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; -set spanner.statement_tag to 'tag2' ; +set spanner.exclude_txn_from_change_streams = false ; NEW_CONNECTION; -set spanner.statement_tag to 'tag2' ; +set spanner.exclude_txn_from_change_streams = false ; NEW_CONNECTION; -set spanner.statement_tag to 'tag2' +set spanner.exclude_txn_from_change_streams = false ; NEW_CONNECTION; -set spanner.statement_tag to 'tag2'; +set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; -set spanner.statement_tag to 'tag2'; +set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; set -spanner.statement_tag -to -'tag2'; +spanner.exclude_txn_from_change_streams += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.statement_tag to 'tag2'; +foo set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2' bar; +set spanner.exclude_txn_from_change_streams = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.statement_tag to 'tag2'; +%set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'%; +set spanner.exclude_txn_from_change_streams = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to%'tag2'; +set spanner.exclude_txn_from_change_streams =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.statement_tag to 'tag2'; +_set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'_; +set spanner.exclude_txn_from_change_streams = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to_'tag2'; +set spanner.exclude_txn_from_change_streams =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.statement_tag to 'tag2'; +&set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'&; +set spanner.exclude_txn_from_change_streams = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to&'tag2'; +set spanner.exclude_txn_from_change_streams =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.statement_tag to 'tag2'; +$set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'$; +set spanner.exclude_txn_from_change_streams = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to$'tag2'; +set spanner.exclude_txn_from_change_streams =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.statement_tag to 'tag2'; +@set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'@; +set spanner.exclude_txn_from_change_streams = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to@'tag2'; +set spanner.exclude_txn_from_change_streams =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.statement_tag to 'tag2'; +!set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'!; +set spanner.exclude_txn_from_change_streams = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to!'tag2'; +set spanner.exclude_txn_from_change_streams =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.statement_tag to 'tag2'; +*set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'*; +set spanner.exclude_txn_from_change_streams = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to*'tag2'; +set spanner.exclude_txn_from_change_streams =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.statement_tag to 'tag2'; +(set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'(; +set spanner.exclude_txn_from_change_streams = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to('tag2'; +set spanner.exclude_txn_from_change_streams =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.statement_tag to 'tag2'; +)set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'); +set spanner.exclude_txn_from_change_streams = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to)'tag2'; +set spanner.exclude_txn_from_change_streams =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.statement_tag to 'tag2'; +-set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'-; +set spanner.exclude_txn_from_change_streams = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-'tag2'; +set spanner.exclude_txn_from_change_streams =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.statement_tag to 'tag2'; ++set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'+; +set spanner.exclude_txn_from_change_streams = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to+'tag2'; +set spanner.exclude_txn_from_change_streams =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.statement_tag to 'tag2'; +-#set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'-#; +set spanner.exclude_txn_from_change_streams = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-#'tag2'; +set spanner.exclude_txn_from_change_streams =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.statement_tag to 'tag2'; +/set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'/; +set spanner.exclude_txn_from_change_streams = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/'tag2'; +set spanner.exclude_txn_from_change_streams =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.statement_tag to 'tag2'; +\set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'\; +set spanner.exclude_txn_from_change_streams = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to\'tag2'; +set spanner.exclude_txn_from_change_streams =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.statement_tag to 'tag2'; +?set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'?; +set spanner.exclude_txn_from_change_streams = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to?'tag2'; +set spanner.exclude_txn_from_change_streams =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.statement_tag to 'tag2'; +-/set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'-/; +set spanner.exclude_txn_from_change_streams = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-/'tag2'; +set spanner.exclude_txn_from_change_streams =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.statement_tag to 'tag2'; +/#set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'/#; +set spanner.exclude_txn_from_change_streams = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/#'tag2'; +set spanner.exclude_txn_from_change_streams =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.statement_tag to 'tag2'; +/-set spanner.exclude_txn_from_change_streams = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'tag2'/-; +set spanner.exclude_txn_from_change_streams = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/-'tag2'; +set spanner.exclude_txn_from_change_streams =/-false; NEW_CONNECTION; -set spanner.statement_tag to ''; +set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; -SET SPANNER.STATEMENT_TAG TO ''; +SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS TO TRUE; NEW_CONNECTION; -set spanner.statement_tag to ''; +set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; - set spanner.statement_tag to ''; + set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; - set spanner.statement_tag to ''; + set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; -set spanner.statement_tag to ''; +set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; -set spanner.statement_tag to '' ; +set spanner.exclude_txn_from_change_streams to true ; NEW_CONNECTION; -set spanner.statement_tag to '' ; +set spanner.exclude_txn_from_change_streams to true ; NEW_CONNECTION; -set spanner.statement_tag to '' +set spanner.exclude_txn_from_change_streams to true ; NEW_CONNECTION; -set spanner.statement_tag to ''; +set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; -set spanner.statement_tag to ''; +set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; set -spanner.statement_tag +spanner.exclude_txn_from_change_streams to -''; +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.statement_tag to ''; +foo set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to '' bar; +set spanner.exclude_txn_from_change_streams to true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.statement_tag to ''; +%set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''%; +set spanner.exclude_txn_from_change_streams to true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to%''; +set spanner.exclude_txn_from_change_streams to%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.statement_tag to ''; +_set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''_; +set spanner.exclude_txn_from_change_streams to true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to_''; +set spanner.exclude_txn_from_change_streams to_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.statement_tag to ''; +&set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''&; +set spanner.exclude_txn_from_change_streams to true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to&''; +set spanner.exclude_txn_from_change_streams to&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.statement_tag to ''; +$set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''$; +set spanner.exclude_txn_from_change_streams to true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to$''; +set spanner.exclude_txn_from_change_streams to$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.statement_tag to ''; +@set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''@; +set spanner.exclude_txn_from_change_streams to true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to@''; +set spanner.exclude_txn_from_change_streams to@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.statement_tag to ''; +!set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''!; +set spanner.exclude_txn_from_change_streams to true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to!''; +set spanner.exclude_txn_from_change_streams to!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.statement_tag to ''; +*set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''*; +set spanner.exclude_txn_from_change_streams to true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to*''; +set spanner.exclude_txn_from_change_streams to*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.statement_tag to ''; +(set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''(; +set spanner.exclude_txn_from_change_streams to true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to(''; +set spanner.exclude_txn_from_change_streams to(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.statement_tag to ''; +)set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''); +set spanner.exclude_txn_from_change_streams to true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to)''; +set spanner.exclude_txn_from_change_streams to)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.statement_tag to ''; +-set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''-; +set spanner.exclude_txn_from_change_streams to true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-''; +set spanner.exclude_txn_from_change_streams to-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.statement_tag to ''; ++set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''+; +set spanner.exclude_txn_from_change_streams to true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to+''; +set spanner.exclude_txn_from_change_streams to+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.statement_tag to ''; +-#set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''-#; +set spanner.exclude_txn_from_change_streams to true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-#''; +set spanner.exclude_txn_from_change_streams to-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.statement_tag to ''; +/set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''/; +set spanner.exclude_txn_from_change_streams to true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/''; +set spanner.exclude_txn_from_change_streams to/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.statement_tag to ''; +\set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''\; +set spanner.exclude_txn_from_change_streams to true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to\''; +set spanner.exclude_txn_from_change_streams to\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.statement_tag to ''; +?set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''?; +set spanner.exclude_txn_from_change_streams to true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to?''; +set spanner.exclude_txn_from_change_streams to?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.statement_tag to ''; +-/set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''-/; +set spanner.exclude_txn_from_change_streams to true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-/''; +set spanner.exclude_txn_from_change_streams to-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.statement_tag to ''; +/#set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''/#; +set spanner.exclude_txn_from_change_streams to true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/#''; +set spanner.exclude_txn_from_change_streams to/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.statement_tag to ''; +/-set spanner.exclude_txn_from_change_streams to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to ''/-; +set spanner.exclude_txn_from_change_streams to true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/-''; +set spanner.exclude_txn_from_change_streams to/-true; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag'; +set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; -SET SPANNER.STATEMENT_TAG TO 'TEST_TAG'; +SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS TO FALSE; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag'; +set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; - set spanner.statement_tag to 'test_tag'; + set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; - set spanner.statement_tag to 'test_tag'; + set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag'; +set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag' ; +set spanner.exclude_txn_from_change_streams to false ; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag' ; +set spanner.exclude_txn_from_change_streams to false ; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag' +set spanner.exclude_txn_from_change_streams to false ; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag'; +set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; -set spanner.statement_tag to 'test_tag'; +set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; set -spanner.statement_tag +spanner.exclude_txn_from_change_streams to -'test_tag'; +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.statement_tag to 'test_tag'; +foo set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag' bar; +set spanner.exclude_txn_from_change_streams to false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.statement_tag to 'test_tag'; +%set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'%; +set spanner.exclude_txn_from_change_streams to false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to%'test_tag'; +set spanner.exclude_txn_from_change_streams to%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.statement_tag to 'test_tag'; +_set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'_; +set spanner.exclude_txn_from_change_streams to false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to_'test_tag'; +set spanner.exclude_txn_from_change_streams to_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.statement_tag to 'test_tag'; +&set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'&; +set spanner.exclude_txn_from_change_streams to false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to&'test_tag'; +set spanner.exclude_txn_from_change_streams to&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.statement_tag to 'test_tag'; +$set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'$; +set spanner.exclude_txn_from_change_streams to false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to$'test_tag'; +set spanner.exclude_txn_from_change_streams to$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.statement_tag to 'test_tag'; +@set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'@; +set spanner.exclude_txn_from_change_streams to false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to@'test_tag'; +set spanner.exclude_txn_from_change_streams to@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.statement_tag to 'test_tag'; +!set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'!; +set spanner.exclude_txn_from_change_streams to false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to!'test_tag'; +set spanner.exclude_txn_from_change_streams to!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.statement_tag to 'test_tag'; +*set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'*; +set spanner.exclude_txn_from_change_streams to false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to*'test_tag'; +set spanner.exclude_txn_from_change_streams to*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.statement_tag to 'test_tag'; +(set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'(; +set spanner.exclude_txn_from_change_streams to false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to('test_tag'; +set spanner.exclude_txn_from_change_streams to(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.statement_tag to 'test_tag'; +)set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'); +set spanner.exclude_txn_from_change_streams to false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to)'test_tag'; +set spanner.exclude_txn_from_change_streams to)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.statement_tag to 'test_tag'; +-set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'-; +set spanner.exclude_txn_from_change_streams to false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-'test_tag'; +set spanner.exclude_txn_from_change_streams to-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.statement_tag to 'test_tag'; ++set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'+; +set spanner.exclude_txn_from_change_streams to false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to+'test_tag'; +set spanner.exclude_txn_from_change_streams to+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.statement_tag to 'test_tag'; +-#set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'-#; +set spanner.exclude_txn_from_change_streams to false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-#'test_tag'; +set spanner.exclude_txn_from_change_streams to-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.statement_tag to 'test_tag'; +/set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'/; +set spanner.exclude_txn_from_change_streams to false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/'test_tag'; +set spanner.exclude_txn_from_change_streams to/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.statement_tag to 'test_tag'; +\set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'\; +set spanner.exclude_txn_from_change_streams to false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to\'test_tag'; +set spanner.exclude_txn_from_change_streams to\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.statement_tag to 'test_tag'; +?set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'?; +set spanner.exclude_txn_from_change_streams to false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to?'test_tag'; +set spanner.exclude_txn_from_change_streams to?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.statement_tag to 'test_tag'; +-/set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'-/; +set spanner.exclude_txn_from_change_streams to false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to-/'test_tag'; +set spanner.exclude_txn_from_change_streams to-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.statement_tag to 'test_tag'; +/#set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'/#; +set spanner.exclude_txn_from_change_streams to false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/#'test_tag'; +set spanner.exclude_txn_from_change_streams to/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.statement_tag to 'test_tag'; +/-set spanner.exclude_txn_from_change_streams to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to 'test_tag'/-; +set spanner.exclude_txn_from_change_streams to false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.statement_tag to/-'test_tag'; +set spanner.exclude_txn_from_change_streams to/-false; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1'; +set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; -SET SPANNER.TRANSACTION_TAG='TAG1'; +SET SPANNER.RPC_PRIORITY='HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1'; +set spanner.rpc_priority='high'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag='tag1'; + set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag='tag1'; + set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1'; +set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1' ; +set spanner.rpc_priority='HIGH' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1' ; +set spanner.rpc_priority='HIGH' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1' +set spanner.rpc_priority='HIGH' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1'; +set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag1'; +set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; set -spanner.transaction_tag='tag1'; +spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.transaction_tag='tag1'; +foo set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1' bar; +set spanner.rpc_priority='HIGH' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.transaction_tag='tag1'; +%set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'%; +set spanner.rpc_priority='HIGH'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.transaction_tag='tag1'; +set%spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.transaction_tag='tag1'; +_set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'_; +set spanner.rpc_priority='HIGH'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.transaction_tag='tag1'; +set_spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.transaction_tag='tag1'; +&set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'&; +set spanner.rpc_priority='HIGH'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.transaction_tag='tag1'; +set&spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.transaction_tag='tag1'; +$set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'$; +set spanner.rpc_priority='HIGH'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.transaction_tag='tag1'; +set$spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.transaction_tag='tag1'; +@set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'@; +set spanner.rpc_priority='HIGH'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.transaction_tag='tag1'; +set@spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.transaction_tag='tag1'; +!set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'!; +set spanner.rpc_priority='HIGH'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.transaction_tag='tag1'; +set!spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.transaction_tag='tag1'; +*set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'*; +set spanner.rpc_priority='HIGH'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.transaction_tag='tag1'; +set*spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.transaction_tag='tag1'; +(set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'(; +set spanner.rpc_priority='HIGH'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.transaction_tag='tag1'; +set(spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.transaction_tag='tag1'; +)set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'); +set spanner.rpc_priority='HIGH'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.transaction_tag='tag1'; +set)spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.transaction_tag='tag1'; +-set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'-; +set spanner.rpc_priority='HIGH'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.transaction_tag='tag1'; +set-spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.transaction_tag='tag1'; ++set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'+; +set spanner.rpc_priority='HIGH'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.transaction_tag='tag1'; +set+spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.transaction_tag='tag1'; +-#set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'-#; +set spanner.rpc_priority='HIGH'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.transaction_tag='tag1'; +set-#spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.transaction_tag='tag1'; +/set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'/; +set spanner.rpc_priority='HIGH'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.transaction_tag='tag1'; +set/spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.transaction_tag='tag1'; +\set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'\; +set spanner.rpc_priority='HIGH'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.transaction_tag='tag1'; +set\spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.transaction_tag='tag1'; +?set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'?; +set spanner.rpc_priority='HIGH'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.transaction_tag='tag1'; +set?spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.transaction_tag='tag1'; +-/set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'-/; +set spanner.rpc_priority='HIGH'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.transaction_tag='tag1'; +set-/spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.transaction_tag='tag1'; +/#set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'/#; +set spanner.rpc_priority='HIGH'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.transaction_tag='tag1'; +set/#spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.transaction_tag='tag1'; +/-set spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag1'/-; +set spanner.rpc_priority='HIGH'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.transaction_tag='tag1'; +set/-spanner.rpc_priority='HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2'; +set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; -SET SPANNER.TRANSACTION_TAG='TAG2'; +SET SPANNER.RPC_PRIORITY='MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2'; +set spanner.rpc_priority='medium'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag='tag2'; + set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag='tag2'; + set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2'; +set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2' ; +set spanner.rpc_priority='MEDIUM' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2' ; +set spanner.rpc_priority='MEDIUM' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2' +set spanner.rpc_priority='MEDIUM' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2'; +set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='tag2'; +set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; set -spanner.transaction_tag='tag2'; +spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.transaction_tag='tag2'; +foo set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2' bar; +set spanner.rpc_priority='MEDIUM' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.transaction_tag='tag2'; +%set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'%; +set spanner.rpc_priority='MEDIUM'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.transaction_tag='tag2'; +set%spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.transaction_tag='tag2'; +_set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'_; +set spanner.rpc_priority='MEDIUM'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.transaction_tag='tag2'; +set_spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.transaction_tag='tag2'; +&set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'&; +set spanner.rpc_priority='MEDIUM'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.transaction_tag='tag2'; +set&spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.transaction_tag='tag2'; +$set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'$; +set spanner.rpc_priority='MEDIUM'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.transaction_tag='tag2'; +set$spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.transaction_tag='tag2'; +@set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'@; +set spanner.rpc_priority='MEDIUM'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.transaction_tag='tag2'; +set@spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.transaction_tag='tag2'; +!set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'!; +set spanner.rpc_priority='MEDIUM'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.transaction_tag='tag2'; +set!spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.transaction_tag='tag2'; +*set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'*; +set spanner.rpc_priority='MEDIUM'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.transaction_tag='tag2'; +set*spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.transaction_tag='tag2'; +(set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'(; +set spanner.rpc_priority='MEDIUM'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.transaction_tag='tag2'; +set(spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.transaction_tag='tag2'; +)set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'); +set spanner.rpc_priority='MEDIUM'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.transaction_tag='tag2'; +set)spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.transaction_tag='tag2'; +-set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'-; +set spanner.rpc_priority='MEDIUM'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.transaction_tag='tag2'; +set-spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.transaction_tag='tag2'; ++set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'+; +set spanner.rpc_priority='MEDIUM'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.transaction_tag='tag2'; +set+spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.transaction_tag='tag2'; +-#set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'-#; +set spanner.rpc_priority='MEDIUM'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.transaction_tag='tag2'; +set-#spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.transaction_tag='tag2'; +/set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'/; +set spanner.rpc_priority='MEDIUM'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.transaction_tag='tag2'; +set/spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.transaction_tag='tag2'; +\set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'\; +set spanner.rpc_priority='MEDIUM'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.transaction_tag='tag2'; +set\spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.transaction_tag='tag2'; +?set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'?; +set spanner.rpc_priority='MEDIUM'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.transaction_tag='tag2'; +set?spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.transaction_tag='tag2'; +-/set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'-/; +set spanner.rpc_priority='MEDIUM'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.transaction_tag='tag2'; +set-/spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.transaction_tag='tag2'; +/#set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'/#; +set spanner.rpc_priority='MEDIUM'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.transaction_tag='tag2'; +set/#spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.transaction_tag='tag2'; +/-set spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='tag2'/-; +set spanner.rpc_priority='MEDIUM'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.transaction_tag='tag2'; +set/-spanner.rpc_priority='MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag=''; +set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -SET SPANNER.TRANSACTION_TAG=''; +SET SPANNER.RPC_PRIORITY='LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag=''; +set spanner.rpc_priority='low'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag=''; + set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag=''; + set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag=''; +set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='' ; +set spanner.rpc_priority='LOW' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='' ; +set spanner.rpc_priority='LOW' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag='' +set spanner.rpc_priority='LOW' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag=''; +set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag=''; +set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; set -spanner.transaction_tag=''; +spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.transaction_tag=''; +foo set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag='' bar; +set spanner.rpc_priority='LOW' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.transaction_tag=''; +%set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''%; +set spanner.rpc_priority='LOW'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.transaction_tag=''; +set%spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.transaction_tag=''; +_set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''_; +set spanner.rpc_priority='LOW'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.transaction_tag=''; +set_spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.transaction_tag=''; +&set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''&; +set spanner.rpc_priority='LOW'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.transaction_tag=''; +set&spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.transaction_tag=''; +$set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''$; +set spanner.rpc_priority='LOW'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.transaction_tag=''; +set$spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.transaction_tag=''; +@set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''@; +set spanner.rpc_priority='LOW'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.transaction_tag=''; +set@spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.transaction_tag=''; +!set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''!; +set spanner.rpc_priority='LOW'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.transaction_tag=''; +set!spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.transaction_tag=''; +*set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''*; +set spanner.rpc_priority='LOW'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.transaction_tag=''; +set*spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.transaction_tag=''; +(set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''(; +set spanner.rpc_priority='LOW'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.transaction_tag=''; +set(spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.transaction_tag=''; +)set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''); +set spanner.rpc_priority='LOW'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.transaction_tag=''; +set)spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.transaction_tag=''; +-set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''-; +set spanner.rpc_priority='LOW'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.transaction_tag=''; +set-spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.transaction_tag=''; ++set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''+; +set spanner.rpc_priority='LOW'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.transaction_tag=''; +set+spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.transaction_tag=''; +-#set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''-#; +set spanner.rpc_priority='LOW'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.transaction_tag=''; +set-#spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.transaction_tag=''; +/set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''/; +set spanner.rpc_priority='LOW'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.transaction_tag=''; +set/spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.transaction_tag=''; +\set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''\; +set spanner.rpc_priority='LOW'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.transaction_tag=''; +set\spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.transaction_tag=''; +?set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''?; +set spanner.rpc_priority='LOW'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.transaction_tag=''; +set?spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.transaction_tag=''; +-/set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''-/; +set spanner.rpc_priority='LOW'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.transaction_tag=''; +set-/spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.transaction_tag=''; +/#set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''/#; +set spanner.rpc_priority='LOW'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.transaction_tag=''; +set/#spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.transaction_tag=''; +/-set spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag=''/-; +set spanner.rpc_priority='LOW'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.transaction_tag=''; +set/-spanner.rpc_priority='LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1'; +set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -SET SPANNER.TRANSACTION_TAG TO 'TAG1'; +SET SPANNER.RPC_PRIORITY='NULL'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1'; +set spanner.rpc_priority='null'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to 'tag1'; + set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to 'tag1'; + set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1'; +set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1' ; +set spanner.rpc_priority='NULL' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1' ; +set spanner.rpc_priority='NULL' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1' +set spanner.rpc_priority='NULL' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1'; +set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag1'; +set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; set -spanner.transaction_tag -to -'tag1'; +spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.transaction_tag to 'tag1'; +foo set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1' bar; +set spanner.rpc_priority='NULL' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.transaction_tag to 'tag1'; +%set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'%; +set spanner.rpc_priority='NULL'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to%'tag1'; +set%spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.transaction_tag to 'tag1'; +_set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'_; +set spanner.rpc_priority='NULL'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to_'tag1'; +set_spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.transaction_tag to 'tag1'; +&set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'&; +set spanner.rpc_priority='NULL'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to&'tag1'; +set&spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.transaction_tag to 'tag1'; +$set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'$; +set spanner.rpc_priority='NULL'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to$'tag1'; +set$spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.transaction_tag to 'tag1'; +@set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'@; +set spanner.rpc_priority='NULL'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to@'tag1'; +set@spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.transaction_tag to 'tag1'; +!set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'!; +set spanner.rpc_priority='NULL'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to!'tag1'; +set!spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.transaction_tag to 'tag1'; +*set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'*; +set spanner.rpc_priority='NULL'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to*'tag1'; +set*spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.transaction_tag to 'tag1'; +(set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'(; +set spanner.rpc_priority='NULL'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to('tag1'; +set(spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.transaction_tag to 'tag1'; +)set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'); +set spanner.rpc_priority='NULL'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to)'tag1'; +set)spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.transaction_tag to 'tag1'; +-set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'-; +set spanner.rpc_priority='NULL'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-'tag1'; +set-spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.transaction_tag to 'tag1'; ++set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'+; +set spanner.rpc_priority='NULL'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to+'tag1'; +set+spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.transaction_tag to 'tag1'; +-#set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'-#; +set spanner.rpc_priority='NULL'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-#'tag1'; +set-#spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.transaction_tag to 'tag1'; +/set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'/; +set spanner.rpc_priority='NULL'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/'tag1'; +set/spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.transaction_tag to 'tag1'; +\set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'\; +set spanner.rpc_priority='NULL'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to\'tag1'; +set\spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.transaction_tag to 'tag1'; +?set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'?; +set spanner.rpc_priority='NULL'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to?'tag1'; +set?spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.transaction_tag to 'tag1'; +-/set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'-/; +set spanner.rpc_priority='NULL'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-/'tag1'; +set-/spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.transaction_tag to 'tag1'; +/#set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'/#; +set spanner.rpc_priority='NULL'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/#'tag1'; +set/#spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.transaction_tag to 'tag1'; +/-set spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag1'/-; +set spanner.rpc_priority='NULL'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/-'tag1'; +set/-spanner.rpc_priority='NULL'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2'; +set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; -SET SPANNER.TRANSACTION_TAG TO 'TAG2'; +SET SPANNER.RPC_PRIORITY TO 'HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2'; +set spanner.rpc_priority to 'high'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to 'tag2'; + set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to 'tag2'; + set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2'; +set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2' ; +set spanner.rpc_priority to 'HIGH' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2' ; +set spanner.rpc_priority to 'HIGH' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2' +set spanner.rpc_priority to 'HIGH' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2'; +set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'tag2'; +set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; set -spanner.transaction_tag +spanner.rpc_priority to -'tag2'; +'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.transaction_tag to 'tag2'; +foo set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2' bar; +set spanner.rpc_priority to 'HIGH' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.transaction_tag to 'tag2'; +%set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'%; +set spanner.rpc_priority to 'HIGH'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to%'tag2'; +set spanner.rpc_priority to%'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.transaction_tag to 'tag2'; +_set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'_; +set spanner.rpc_priority to 'HIGH'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to_'tag2'; +set spanner.rpc_priority to_'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.transaction_tag to 'tag2'; +&set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'&; +set spanner.rpc_priority to 'HIGH'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to&'tag2'; +set spanner.rpc_priority to&'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.transaction_tag to 'tag2'; +$set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'$; +set spanner.rpc_priority to 'HIGH'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to$'tag2'; +set spanner.rpc_priority to$'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.transaction_tag to 'tag2'; +@set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'@; +set spanner.rpc_priority to 'HIGH'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to@'tag2'; +set spanner.rpc_priority to@'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.transaction_tag to 'tag2'; +!set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'!; +set spanner.rpc_priority to 'HIGH'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to!'tag2'; +set spanner.rpc_priority to!'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.transaction_tag to 'tag2'; +*set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'*; +set spanner.rpc_priority to 'HIGH'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to*'tag2'; +set spanner.rpc_priority to*'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.transaction_tag to 'tag2'; +(set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'(; +set spanner.rpc_priority to 'HIGH'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to('tag2'; +set spanner.rpc_priority to('HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.transaction_tag to 'tag2'; +)set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'); +set spanner.rpc_priority to 'HIGH'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to)'tag2'; +set spanner.rpc_priority to)'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.transaction_tag to 'tag2'; +-set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'-; +set spanner.rpc_priority to 'HIGH'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-'tag2'; +set spanner.rpc_priority to-'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.transaction_tag to 'tag2'; ++set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'+; +set spanner.rpc_priority to 'HIGH'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to+'tag2'; +set spanner.rpc_priority to+'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.transaction_tag to 'tag2'; +-#set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'-#; +set spanner.rpc_priority to 'HIGH'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-#'tag2'; +set spanner.rpc_priority to-#'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.transaction_tag to 'tag2'; +/set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'/; +set spanner.rpc_priority to 'HIGH'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/'tag2'; +set spanner.rpc_priority to/'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.transaction_tag to 'tag2'; +\set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'\; +set spanner.rpc_priority to 'HIGH'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to\'tag2'; +set spanner.rpc_priority to\'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.transaction_tag to 'tag2'; +?set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'?; +set spanner.rpc_priority to 'HIGH'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to?'tag2'; +set spanner.rpc_priority to?'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.transaction_tag to 'tag2'; +-/set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'-/; +set spanner.rpc_priority to 'HIGH'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-/'tag2'; +set spanner.rpc_priority to-/'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.transaction_tag to 'tag2'; +/#set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'/#; +set spanner.rpc_priority to 'HIGH'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/#'tag2'; +set spanner.rpc_priority to/#'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.transaction_tag to 'tag2'; +/-set spanner.rpc_priority to 'HIGH'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'tag2'/-; +set spanner.rpc_priority to 'HIGH'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/-'tag2'; +set spanner.rpc_priority to/-'HIGH'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to ''; +set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; -SET SPANNER.TRANSACTION_TAG TO ''; +SET SPANNER.RPC_PRIORITY TO 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to ''; +set spanner.rpc_priority to 'medium'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to ''; + set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to ''; + set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to ''; +set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to '' ; +set spanner.rpc_priority to 'MEDIUM' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to '' ; +set spanner.rpc_priority to 'MEDIUM' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to '' +set spanner.rpc_priority to 'MEDIUM' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to ''; +set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to ''; +set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; set -spanner.transaction_tag +spanner.rpc_priority to -''; +'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.transaction_tag to ''; +foo set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to '' bar; +set spanner.rpc_priority to 'MEDIUM' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.transaction_tag to ''; +%set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''%; +set spanner.rpc_priority to 'MEDIUM'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to%''; +set spanner.rpc_priority to%'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.transaction_tag to ''; +_set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''_; +set spanner.rpc_priority to 'MEDIUM'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to_''; +set spanner.rpc_priority to_'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.transaction_tag to ''; +&set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''&; +set spanner.rpc_priority to 'MEDIUM'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to&''; +set spanner.rpc_priority to&'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.transaction_tag to ''; +$set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''$; +set spanner.rpc_priority to 'MEDIUM'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to$''; +set spanner.rpc_priority to$'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.transaction_tag to ''; +@set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''@; +set spanner.rpc_priority to 'MEDIUM'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to@''; +set spanner.rpc_priority to@'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.transaction_tag to ''; +!set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''!; +set spanner.rpc_priority to 'MEDIUM'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to!''; +set spanner.rpc_priority to!'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.transaction_tag to ''; +*set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''*; +set spanner.rpc_priority to 'MEDIUM'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to*''; +set spanner.rpc_priority to*'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.transaction_tag to ''; +(set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''(; +set spanner.rpc_priority to 'MEDIUM'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to(''; +set spanner.rpc_priority to('MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.transaction_tag to ''; +)set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''); +set spanner.rpc_priority to 'MEDIUM'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to)''; +set spanner.rpc_priority to)'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.transaction_tag to ''; +-set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''-; +set spanner.rpc_priority to 'MEDIUM'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-''; +set spanner.rpc_priority to-'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.transaction_tag to ''; ++set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''+; +set spanner.rpc_priority to 'MEDIUM'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to+''; +set spanner.rpc_priority to+'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.transaction_tag to ''; +-#set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''-#; +set spanner.rpc_priority to 'MEDIUM'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-#''; +set spanner.rpc_priority to-#'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.transaction_tag to ''; +/set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''/; +set spanner.rpc_priority to 'MEDIUM'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/''; +set spanner.rpc_priority to/'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.transaction_tag to ''; +\set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''\; +set spanner.rpc_priority to 'MEDIUM'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to\''; +set spanner.rpc_priority to\'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.transaction_tag to ''; +?set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''?; +set spanner.rpc_priority to 'MEDIUM'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to?''; +set spanner.rpc_priority to?'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.transaction_tag to ''; +-/set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''-/; +set spanner.rpc_priority to 'MEDIUM'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-/''; +set spanner.rpc_priority to-/'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.transaction_tag to ''; +/#set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''/#; +set spanner.rpc_priority to 'MEDIUM'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/#''; +set spanner.rpc_priority to/#'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.transaction_tag to ''; +/-set spanner.rpc_priority to 'MEDIUM'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to ''/-; +set spanner.rpc_priority to 'MEDIUM'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/-''; +set spanner.rpc_priority to/-'MEDIUM'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag'; +set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; -SET SPANNER.TRANSACTION_TAG TO 'TEST_TAG'; +SET SPANNER.RPC_PRIORITY TO 'LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag'; +set spanner.rpc_priority to 'low'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to 'test_tag'; + set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; - set spanner.transaction_tag to 'test_tag'; + set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag'; +set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag' ; +set spanner.rpc_priority to 'LOW' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag' ; +set spanner.rpc_priority to 'LOW' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag' +set spanner.rpc_priority to 'LOW' ; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag'; +set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; -set spanner.transaction_tag to 'test_tag'; +set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; set -spanner.transaction_tag +spanner.rpc_priority to -'test_tag'; +'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.transaction_tag to 'test_tag'; +foo set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag' bar; +set spanner.rpc_priority to 'LOW' bar; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.transaction_tag to 'test_tag'; +%set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'%; +set spanner.rpc_priority to 'LOW'%; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to%'test_tag'; +set spanner.rpc_priority to%'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.transaction_tag to 'test_tag'; +_set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'_; +set spanner.rpc_priority to 'LOW'_; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to_'test_tag'; +set spanner.rpc_priority to_'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.transaction_tag to 'test_tag'; +&set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'&; +set spanner.rpc_priority to 'LOW'&; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to&'test_tag'; +set spanner.rpc_priority to&'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.transaction_tag to 'test_tag'; +$set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'$; +set spanner.rpc_priority to 'LOW'$; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to$'test_tag'; +set spanner.rpc_priority to$'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.transaction_tag to 'test_tag'; +@set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'@; +set spanner.rpc_priority to 'LOW'@; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to@'test_tag'; +set spanner.rpc_priority to@'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.transaction_tag to 'test_tag'; +!set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'!; +set spanner.rpc_priority to 'LOW'!; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to!'test_tag'; +set spanner.rpc_priority to!'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.transaction_tag to 'test_tag'; +*set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'*; +set spanner.rpc_priority to 'LOW'*; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to*'test_tag'; +set spanner.rpc_priority to*'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.transaction_tag to 'test_tag'; +(set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'(; +set spanner.rpc_priority to 'LOW'(; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to('test_tag'; +set spanner.rpc_priority to('LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.transaction_tag to 'test_tag'; +)set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'); +set spanner.rpc_priority to 'LOW'); NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to)'test_tag'; +set spanner.rpc_priority to)'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.transaction_tag to 'test_tag'; +-set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'-; +set spanner.rpc_priority to 'LOW'-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-'test_tag'; +set spanner.rpc_priority to-'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.transaction_tag to 'test_tag'; ++set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'+; +set spanner.rpc_priority to 'LOW'+; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to+'test_tag'; +set spanner.rpc_priority to+'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.transaction_tag to 'test_tag'; +-#set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'-#; +set spanner.rpc_priority to 'LOW'-#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-#'test_tag'; +set spanner.rpc_priority to-#'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.transaction_tag to 'test_tag'; +/set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'/; +set spanner.rpc_priority to 'LOW'/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/'test_tag'; +set spanner.rpc_priority to/'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.transaction_tag to 'test_tag'; +\set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'\; +set spanner.rpc_priority to 'LOW'\; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to\'test_tag'; +set spanner.rpc_priority to\'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.transaction_tag to 'test_tag'; +?set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'?; +set spanner.rpc_priority to 'LOW'?; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to?'test_tag'; +set spanner.rpc_priority to?'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.transaction_tag to 'test_tag'; +-/set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'-/; +set spanner.rpc_priority to 'LOW'-/; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to-/'test_tag'; +set spanner.rpc_priority to-/'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.transaction_tag to 'test_tag'; +/#set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'/#; +set spanner.rpc_priority to 'LOW'/#; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/#'test_tag'; +set spanner.rpc_priority to/#'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.transaction_tag to 'test_tag'; +/-set spanner.rpc_priority to 'LOW'; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to 'test_tag'/-; +set spanner.rpc_priority to 'LOW'/-; NEW_CONNECTION; -set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.transaction_tag to/-'test_tag'; +set spanner.rpc_priority to/-'LOW'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true; +set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; -SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS = TRUE; +SET SPANNER.RPC_PRIORITY TO 'NULL'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true; +set spanner.rpc_priority to 'null'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams = true; + set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams = true; + set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true; +set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true ; +set spanner.rpc_priority to 'NULL' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true ; +set spanner.rpc_priority to 'NULL' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true +set spanner.rpc_priority to 'NULL' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true; +set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = true; +set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; set -spanner.exclude_txn_from_change_streams -= -true; +spanner.rpc_priority +to +'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.exclude_txn_from_change_streams = true; +foo set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true bar; +set spanner.rpc_priority to 'NULL' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.exclude_txn_from_change_streams = true; +%set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true%; +set spanner.rpc_priority to 'NULL'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =%true; +set spanner.rpc_priority to%'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.exclude_txn_from_change_streams = true; +_set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true_; +set spanner.rpc_priority to 'NULL'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =_true; +set spanner.rpc_priority to_'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.exclude_txn_from_change_streams = true; +&set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true&; +set spanner.rpc_priority to 'NULL'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =&true; +set spanner.rpc_priority to&'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.exclude_txn_from_change_streams = true; +$set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true$; +set spanner.rpc_priority to 'NULL'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =$true; +set spanner.rpc_priority to$'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.exclude_txn_from_change_streams = true; +@set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true@; +set spanner.rpc_priority to 'NULL'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =@true; +set spanner.rpc_priority to@'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.exclude_txn_from_change_streams = true; +!set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true!; +set spanner.rpc_priority to 'NULL'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =!true; +set spanner.rpc_priority to!'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.exclude_txn_from_change_streams = true; +*set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true*; +set spanner.rpc_priority to 'NULL'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =*true; +set spanner.rpc_priority to*'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.exclude_txn_from_change_streams = true; +(set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true(; +set spanner.rpc_priority to 'NULL'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =(true; +set spanner.rpc_priority to('NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.exclude_txn_from_change_streams = true; +)set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true); +set spanner.rpc_priority to 'NULL'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =)true; +set spanner.rpc_priority to)'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.exclude_txn_from_change_streams = true; +-set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true-; +set spanner.rpc_priority to 'NULL'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =-true; +set spanner.rpc_priority to-'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.exclude_txn_from_change_streams = true; ++set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true+; +set spanner.rpc_priority to 'NULL'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =+true; +set spanner.rpc_priority to+'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.exclude_txn_from_change_streams = true; +-#set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true-#; +set spanner.rpc_priority to 'NULL'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =-#true; +set spanner.rpc_priority to-#'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.exclude_txn_from_change_streams = true; +/set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true/; +set spanner.rpc_priority to 'NULL'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =/true; +set spanner.rpc_priority to/'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.exclude_txn_from_change_streams = true; +\set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true\; +set spanner.rpc_priority to 'NULL'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =\true; +set spanner.rpc_priority to\'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.exclude_txn_from_change_streams = true; +?set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true?; +set spanner.rpc_priority to 'NULL'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =?true; +set spanner.rpc_priority to?'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.exclude_txn_from_change_streams = true; +-/set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true-/; +set spanner.rpc_priority to 'NULL'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =-/true; +set spanner.rpc_priority to-/'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.exclude_txn_from_change_streams = true; +/#set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true/#; +set spanner.rpc_priority to 'NULL'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =/#true; +set spanner.rpc_priority to/#'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.exclude_txn_from_change_streams = true; +/-set spanner.rpc_priority to 'NULL'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = true/-; +set spanner.rpc_priority to 'NULL'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =/-true; +set spanner.rpc_priority to/-'NULL'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false; +set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; -SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS = FALSE; +SET SPANNER.SAVEPOINT_SUPPORT='ENABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false; +set spanner.savepoint_support='enabled'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams = false; + set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams = false; + set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false; +set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false ; +set spanner.savepoint_support='ENABLED' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false ; +set spanner.savepoint_support='ENABLED' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false +set spanner.savepoint_support='ENABLED' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false; +set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams = false; +set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; set -spanner.exclude_txn_from_change_streams -= -false; +spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.exclude_txn_from_change_streams = false; +foo set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false bar; +set spanner.savepoint_support='ENABLED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.exclude_txn_from_change_streams = false; +%set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false%; +set spanner.savepoint_support='ENABLED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =%false; +set%spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.exclude_txn_from_change_streams = false; +_set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false_; +set spanner.savepoint_support='ENABLED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =_false; +set_spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.exclude_txn_from_change_streams = false; +&set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false&; +set spanner.savepoint_support='ENABLED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =&false; +set&spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.exclude_txn_from_change_streams = false; +$set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false$; +set spanner.savepoint_support='ENABLED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =$false; +set$spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.exclude_txn_from_change_streams = false; +@set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false@; +set spanner.savepoint_support='ENABLED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =@false; +set@spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.exclude_txn_from_change_streams = false; +!set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false!; +set spanner.savepoint_support='ENABLED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =!false; +set!spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.exclude_txn_from_change_streams = false; +*set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false*; +set spanner.savepoint_support='ENABLED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =*false; +set*spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.exclude_txn_from_change_streams = false; +(set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false(; +set spanner.savepoint_support='ENABLED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =(false; +set(spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.exclude_txn_from_change_streams = false; +)set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false); +set spanner.savepoint_support='ENABLED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =)false; +set)spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.exclude_txn_from_change_streams = false; +-set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false-; +set spanner.savepoint_support='ENABLED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =-false; +set-spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.exclude_txn_from_change_streams = false; ++set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false+; +set spanner.savepoint_support='ENABLED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =+false; +set+spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.exclude_txn_from_change_streams = false; +-#set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false-#; +set spanner.savepoint_support='ENABLED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =-#false; +set-#spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.exclude_txn_from_change_streams = false; +/set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false/; +set spanner.savepoint_support='ENABLED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =/false; +set/spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.exclude_txn_from_change_streams = false; +\set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false\; +set spanner.savepoint_support='ENABLED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =\false; +set\spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.exclude_txn_from_change_streams = false; +?set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false?; +set spanner.savepoint_support='ENABLED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =?false; +set?spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.exclude_txn_from_change_streams = false; +-/set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false-/; +set spanner.savepoint_support='ENABLED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =-/false; +set-/spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.exclude_txn_from_change_streams = false; +/#set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false/#; +set spanner.savepoint_support='ENABLED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =/#false; +set/#spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.exclude_txn_from_change_streams = false; +/-set spanner.savepoint_support='ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams = false/-; +set spanner.savepoint_support='ENABLED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams =/-false; +set/-spanner.savepoint_support='ENABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS TO TRUE; +SET SPANNER.SAVEPOINT_SUPPORT='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true; +set spanner.savepoint_support='fail_after_rollback'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams to true; + set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams to true; + set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true ; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true ; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to true; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; set -spanner.exclude_txn_from_change_streams -to -true; +spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.exclude_txn_from_change_streams to true; +foo set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true bar; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.exclude_txn_from_change_streams to true; +%set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true%; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to%true; +set%spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.exclude_txn_from_change_streams to true; +_set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true_; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to_true; +set_spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.exclude_txn_from_change_streams to true; +&set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true&; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to&true; +set&spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.exclude_txn_from_change_streams to true; +$set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true$; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to$true; +set$spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.exclude_txn_from_change_streams to true; +@set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true@; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to@true; +set@spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.exclude_txn_from_change_streams to true; +!set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true!; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to!true; +set!spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.exclude_txn_from_change_streams to true; +*set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true*; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to*true; +set*spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.exclude_txn_from_change_streams to true; +(set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true(; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to(true; +set(spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.exclude_txn_from_change_streams to true; +)set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true); +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to)true; +set)spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.exclude_txn_from_change_streams to true; +-set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true-; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to-true; +set-spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.exclude_txn_from_change_streams to true; ++set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true+; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to+true; +set+spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.exclude_txn_from_change_streams to true; +-#set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true-#; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to-#true; +set-#spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.exclude_txn_from_change_streams to true; +/set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true/; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to/true; +set/spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.exclude_txn_from_change_streams to true; +\set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true\; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to\true; +set\spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.exclude_txn_from_change_streams to true; +?set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true?; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to?true; +set?spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.exclude_txn_from_change_streams to true; +-/set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true-/; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to-/true; +set-/spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.exclude_txn_from_change_streams to true; +/#set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true/#; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to/#true; +set/#spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.exclude_txn_from_change_streams to true; +/-set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to true/-; +set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to/-true; +set/-spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false; +set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; -SET SPANNER.EXCLUDE_TXN_FROM_CHANGE_STREAMS TO FALSE; +SET SPANNER.SAVEPOINT_SUPPORT='DISABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false; +set spanner.savepoint_support='disabled'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams to false; + set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; - set spanner.exclude_txn_from_change_streams to false; + set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false; +set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false ; +set spanner.savepoint_support='DISABLED' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false ; +set spanner.savepoint_support='DISABLED' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false +set spanner.savepoint_support='DISABLED' ; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false; +set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; -set spanner.exclude_txn_from_change_streams to false; +set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; set -spanner.exclude_txn_from_change_streams -to -false; +spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.exclude_txn_from_change_streams to false; +foo set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false bar; +set spanner.savepoint_support='DISABLED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.exclude_txn_from_change_streams to false; +%set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false%; +set spanner.savepoint_support='DISABLED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to%false; +set%spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.exclude_txn_from_change_streams to false; +_set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false_; +set spanner.savepoint_support='DISABLED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to_false; +set_spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.exclude_txn_from_change_streams to false; +&set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false&; +set spanner.savepoint_support='DISABLED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to&false; +set&spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.exclude_txn_from_change_streams to false; +$set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false$; +set spanner.savepoint_support='DISABLED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to$false; +set$spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.exclude_txn_from_change_streams to false; +@set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false@; +set spanner.savepoint_support='DISABLED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to@false; +set@spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.exclude_txn_from_change_streams to false; +!set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false!; +set spanner.savepoint_support='DISABLED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to!false; +set!spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.exclude_txn_from_change_streams to false; +*set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false*; +set spanner.savepoint_support='DISABLED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to*false; +set*spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.exclude_txn_from_change_streams to false; +(set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false(; +set spanner.savepoint_support='DISABLED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to(false; +set(spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.exclude_txn_from_change_streams to false; +)set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false); +set spanner.savepoint_support='DISABLED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to)false; +set)spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.exclude_txn_from_change_streams to false; +-set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false-; +set spanner.savepoint_support='DISABLED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to-false; +set-spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.exclude_txn_from_change_streams to false; ++set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false+; +set spanner.savepoint_support='DISABLED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to+false; +set+spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.exclude_txn_from_change_streams to false; +-#set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false-#; +set spanner.savepoint_support='DISABLED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to-#false; +set-#spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.exclude_txn_from_change_streams to false; +/set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false/; +set spanner.savepoint_support='DISABLED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to/false; +set/spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.exclude_txn_from_change_streams to false; +\set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false\; +set spanner.savepoint_support='DISABLED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to\false; +set\spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.exclude_txn_from_change_streams to false; +?set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false?; +set spanner.savepoint_support='DISABLED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to?false; +set?spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.exclude_txn_from_change_streams to false; +-/set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false-/; +set spanner.savepoint_support='DISABLED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to-/false; +set-/spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.exclude_txn_from_change_streams to false; +/#set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false/#; +set spanner.savepoint_support='DISABLED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to/#false; +set/#spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.exclude_txn_from_change_streams to false; +/-set spanner.savepoint_support='DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to false/-; +set spanner.savepoint_support='DISABLED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.exclude_txn_from_change_streams to/-false; +set/-spanner.savepoint_support='DISABLED'; NEW_CONNECTION; -set spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY='HIGH'; +SET SPANNER.SAVEPOINT_SUPPORT TO 'ENABLED'; NEW_CONNECTION; -set spanner.rpc_priority='high'; +set spanner.savepoint_support to 'enabled'; NEW_CONNECTION; - set spanner.rpc_priority='HIGH'; + set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; - set spanner.rpc_priority='HIGH'; + set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; -set spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; -set spanner.rpc_priority='HIGH' ; +set spanner.savepoint_support to 'ENABLED' ; NEW_CONNECTION; -set spanner.rpc_priority='HIGH' ; +set spanner.savepoint_support to 'ENABLED' ; NEW_CONNECTION; -set spanner.rpc_priority='HIGH' +set spanner.savepoint_support to 'ENABLED' ; NEW_CONNECTION; -set spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; -set spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; set -spanner.rpc_priority='HIGH'; +spanner.savepoint_support +to +'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority='HIGH'; +foo set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH' bar; +set spanner.savepoint_support to 'ENABLED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority='HIGH'; +%set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'%; +set spanner.savepoint_support to 'ENABLED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to%'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority='HIGH'; +_set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'_; +set spanner.savepoint_support to 'ENABLED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to_'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority='HIGH'; +&set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'&; +set spanner.savepoint_support to 'ENABLED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to&'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority='HIGH'; +$set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'$; +set spanner.savepoint_support to 'ENABLED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to$'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority='HIGH'; +@set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'@; +set spanner.savepoint_support to 'ENABLED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to@'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority='HIGH'; +!set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'!; +set spanner.savepoint_support to 'ENABLED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to!'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority='HIGH'; +*set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'*; +set spanner.savepoint_support to 'ENABLED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to*'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority='HIGH'; +(set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'(; +set spanner.savepoint_support to 'ENABLED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to('ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority='HIGH'; +)set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'); +set spanner.savepoint_support to 'ENABLED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to)'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority='HIGH'; +-set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'-; +set spanner.savepoint_support to 'ENABLED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to-'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority='HIGH'; ++set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'+; +set spanner.savepoint_support to 'ENABLED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to+'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority='HIGH'; +-#set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'-#; +set spanner.savepoint_support to 'ENABLED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to-#'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority='HIGH'; +/set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'/; +set spanner.savepoint_support to 'ENABLED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to/'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority='HIGH'; +\set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'\; +set spanner.savepoint_support to 'ENABLED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to\'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority='HIGH'; +?set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'?; +set spanner.savepoint_support to 'ENABLED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to?'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority='HIGH'; +-/set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'-/; +set spanner.savepoint_support to 'ENABLED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to-/'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority='HIGH'; +/#set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'/#; +set spanner.savepoint_support to 'ENABLED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to/#'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority='HIGH'; +/-set spanner.savepoint_support to 'ENABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='HIGH'/-; +set spanner.savepoint_support to 'ENABLED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.rpc_priority='HIGH'; +set spanner.savepoint_support to/-'ENABLED'; NEW_CONNECTION; -set spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY='MEDIUM'; +SET SPANNER.SAVEPOINT_SUPPORT TO 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.rpc_priority='medium'; +set spanner.savepoint_support to 'fail_after_rollback'; NEW_CONNECTION; - set spanner.rpc_priority='MEDIUM'; + set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; - set spanner.rpc_priority='MEDIUM'; + set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.rpc_priority='MEDIUM' ; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set spanner.rpc_priority='MEDIUM' ; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set spanner.rpc_priority='MEDIUM' +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' ; NEW_CONNECTION; -set spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; set -spanner.rpc_priority='MEDIUM'; +spanner.savepoint_support +to +'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority='MEDIUM'; +foo set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM' bar; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority='MEDIUM'; +%set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'%; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to%'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority='MEDIUM'; +_set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'_; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to_'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority='MEDIUM'; +&set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'&; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to&'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority='MEDIUM'; +$set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'$; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to$'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority='MEDIUM'; +@set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'@; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to@'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority='MEDIUM'; +!set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'!; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to!'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority='MEDIUM'; +*set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'*; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to*'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority='MEDIUM'; +(set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'(; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to('FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority='MEDIUM'; +)set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'); +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to)'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority='MEDIUM'; +-set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'-; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to-'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority='MEDIUM'; ++set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'+; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to+'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority='MEDIUM'; +-#set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'-#; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to-#'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority='MEDIUM'; +/set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'/; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to/'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority='MEDIUM'; +\set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'\; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to\'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority='MEDIUM'; +?set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'?; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to?'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority='MEDIUM'; +-/set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'-/; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to-/'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority='MEDIUM'; +/#set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'/#; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to/#'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority='MEDIUM'; +/-set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='MEDIUM'/-; +set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.rpc_priority='MEDIUM'; +set spanner.savepoint_support to/-'FAIL_AFTER_ROLLBACK'; NEW_CONNECTION; -set spanner.rpc_priority='LOW'; +set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY='LOW'; +SET SPANNER.SAVEPOINT_SUPPORT TO 'DISABLED'; NEW_CONNECTION; -set spanner.rpc_priority='low'; +set spanner.savepoint_support to 'disabled'; NEW_CONNECTION; - set spanner.rpc_priority='LOW'; + set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; - set spanner.rpc_priority='LOW'; + set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; -set spanner.rpc_priority='LOW'; +set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; -set spanner.rpc_priority='LOW' ; +set spanner.savepoint_support to 'DISABLED' ; NEW_CONNECTION; -set spanner.rpc_priority='LOW' ; +set spanner.savepoint_support to 'DISABLED' ; NEW_CONNECTION; -set spanner.rpc_priority='LOW' +set spanner.savepoint_support to 'DISABLED' ; NEW_CONNECTION; -set spanner.rpc_priority='LOW'; +set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; -set spanner.rpc_priority='LOW'; +set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; set -spanner.rpc_priority='LOW'; +spanner.savepoint_support +to +'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority='LOW'; +foo set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW' bar; +set spanner.savepoint_support to 'DISABLED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority='LOW'; +%set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'%; +set spanner.savepoint_support to 'DISABLED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.rpc_priority='LOW'; +set spanner.savepoint_support to%'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority='LOW'; +_set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'_; +set spanner.savepoint_support to 'DISABLED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.rpc_priority='LOW'; +set spanner.savepoint_support to_'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority='LOW'; +&set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'&; +set spanner.savepoint_support to 'DISABLED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.rpc_priority='LOW'; +set spanner.savepoint_support to&'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority='LOW'; +$set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'$; +set spanner.savepoint_support to 'DISABLED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.rpc_priority='LOW'; +set spanner.savepoint_support to$'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority='LOW'; +@set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'@; +set spanner.savepoint_support to 'DISABLED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.rpc_priority='LOW'; +set spanner.savepoint_support to@'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority='LOW'; +!set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'!; +set spanner.savepoint_support to 'DISABLED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.rpc_priority='LOW'; +set spanner.savepoint_support to!'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority='LOW'; +*set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'*; +set spanner.savepoint_support to 'DISABLED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.rpc_priority='LOW'; +set spanner.savepoint_support to*'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority='LOW'; +(set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'(; +set spanner.savepoint_support to 'DISABLED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.rpc_priority='LOW'; +set spanner.savepoint_support to('DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority='LOW'; +)set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'); +set spanner.savepoint_support to 'DISABLED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.rpc_priority='LOW'; +set spanner.savepoint_support to)'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority='LOW'; +-set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'-; +set spanner.savepoint_support to 'DISABLED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.rpc_priority='LOW'; +set spanner.savepoint_support to-'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority='LOW'; ++set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'+; +set spanner.savepoint_support to 'DISABLED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.rpc_priority='LOW'; +set spanner.savepoint_support to+'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority='LOW'; +-#set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'-#; +set spanner.savepoint_support to 'DISABLED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.rpc_priority='LOW'; +set spanner.savepoint_support to-#'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority='LOW'; +/set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'/; +set spanner.savepoint_support to 'DISABLED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.rpc_priority='LOW'; +set spanner.savepoint_support to/'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority='LOW'; +\set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'\; +set spanner.savepoint_support to 'DISABLED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.rpc_priority='LOW'; +set spanner.savepoint_support to\'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority='LOW'; +?set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'?; +set spanner.savepoint_support to 'DISABLED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.rpc_priority='LOW'; +set spanner.savepoint_support to?'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority='LOW'; +-/set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'-/; +set spanner.savepoint_support to 'DISABLED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.rpc_priority='LOW'; +set spanner.savepoint_support to-/'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority='LOW'; +/#set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'/#; +set spanner.savepoint_support to 'DISABLED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.rpc_priority='LOW'; +set spanner.savepoint_support to/#'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority='LOW'; +/-set spanner.savepoint_support to 'DISABLED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='LOW'/-; +set spanner.savepoint_support to 'DISABLED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.rpc_priority='LOW'; +set spanner.savepoint_support to/-'DISABLED'; NEW_CONNECTION; -set spanner.rpc_priority='NULL'; +set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY='NULL'; +SET SPANNER.READ_LOCK_MODE='OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority='null'; +set spanner.read_lock_mode='optimistic'; NEW_CONNECTION; - set spanner.rpc_priority='NULL'; + set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; - set spanner.rpc_priority='NULL'; + set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority='NULL'; +set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority='NULL' ; +set spanner.read_lock_mode='OPTIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority='NULL' ; +set spanner.read_lock_mode='OPTIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority='NULL' +set spanner.read_lock_mode='OPTIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority='NULL'; +set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority='NULL'; +set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; set -spanner.rpc_priority='NULL'; +spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority='NULL'; +foo set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL' bar; +set spanner.read_lock_mode='OPTIMISTIC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority='NULL'; +%set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'%; +set spanner.read_lock_mode='OPTIMISTIC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.rpc_priority='NULL'; +set%spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority='NULL'; +_set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'_; +set spanner.read_lock_mode='OPTIMISTIC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.rpc_priority='NULL'; +set_spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority='NULL'; +&set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'&; +set spanner.read_lock_mode='OPTIMISTIC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.rpc_priority='NULL'; +set&spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority='NULL'; +$set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'$; +set spanner.read_lock_mode='OPTIMISTIC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.rpc_priority='NULL'; +set$spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority='NULL'; +@set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'@; +set spanner.read_lock_mode='OPTIMISTIC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.rpc_priority='NULL'; +set@spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority='NULL'; +!set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'!; +set spanner.read_lock_mode='OPTIMISTIC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.rpc_priority='NULL'; +set!spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority='NULL'; +*set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'*; +set spanner.read_lock_mode='OPTIMISTIC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.rpc_priority='NULL'; +set*spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority='NULL'; +(set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'(; +set spanner.read_lock_mode='OPTIMISTIC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.rpc_priority='NULL'; +set(spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority='NULL'; +)set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'); +set spanner.read_lock_mode='OPTIMISTIC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.rpc_priority='NULL'; +set)spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority='NULL'; +-set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'-; +set spanner.read_lock_mode='OPTIMISTIC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.rpc_priority='NULL'; +set-spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority='NULL'; ++set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'+; +set spanner.read_lock_mode='OPTIMISTIC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.rpc_priority='NULL'; +set+spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority='NULL'; +-#set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'-#; +set spanner.read_lock_mode='OPTIMISTIC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.rpc_priority='NULL'; +set-#spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority='NULL'; +/set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'/; +set spanner.read_lock_mode='OPTIMISTIC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.rpc_priority='NULL'; +set/spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority='NULL'; +\set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'\; +set spanner.read_lock_mode='OPTIMISTIC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.rpc_priority='NULL'; +set\spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority='NULL'; +?set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'?; +set spanner.read_lock_mode='OPTIMISTIC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.rpc_priority='NULL'; +set?spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority='NULL'; +-/set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'-/; +set spanner.read_lock_mode='OPTIMISTIC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.rpc_priority='NULL'; +set-/spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority='NULL'; +/#set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'/#; +set spanner.read_lock_mode='OPTIMISTIC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.rpc_priority='NULL'; +set/#spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority='NULL'; +/-set spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority='NULL'/-; +set spanner.read_lock_mode='OPTIMISTIC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.rpc_priority='NULL'; +set/-spanner.read_lock_mode='OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'HIGH'; +set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY TO 'HIGH'; +SET SPANNER.READ_LOCK_MODE='PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'high'; +set spanner.read_lock_mode='pessimistic'; NEW_CONNECTION; - set spanner.rpc_priority to 'HIGH'; + set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; - set spanner.rpc_priority to 'HIGH'; + set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'HIGH'; +set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'HIGH' ; +set spanner.read_lock_mode='PESSIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'HIGH' ; +set spanner.read_lock_mode='PESSIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'HIGH' +set spanner.read_lock_mode='PESSIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'HIGH'; +set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'HIGH'; +set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; set -spanner.rpc_priority -to -'HIGH'; +spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority to 'HIGH'; +foo set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH' bar; +set spanner.read_lock_mode='PESSIMISTIC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority to 'HIGH'; +%set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'%; +set spanner.read_lock_mode='PESSIMISTIC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to%'HIGH'; +set%spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority to 'HIGH'; +_set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'_; +set spanner.read_lock_mode='PESSIMISTIC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to_'HIGH'; +set_spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority to 'HIGH'; +&set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'&; +set spanner.read_lock_mode='PESSIMISTIC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to&'HIGH'; +set&spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority to 'HIGH'; +$set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'$; +set spanner.read_lock_mode='PESSIMISTIC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to$'HIGH'; +set$spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority to 'HIGH'; +@set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'@; +set spanner.read_lock_mode='PESSIMISTIC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to@'HIGH'; +set@spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority to 'HIGH'; +!set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'!; +set spanner.read_lock_mode='PESSIMISTIC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to!'HIGH'; +set!spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority to 'HIGH'; +*set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'*; +set spanner.read_lock_mode='PESSIMISTIC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to*'HIGH'; +set*spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority to 'HIGH'; +(set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'(; +set spanner.read_lock_mode='PESSIMISTIC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to('HIGH'; +set(spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority to 'HIGH'; +)set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'); +set spanner.read_lock_mode='PESSIMISTIC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to)'HIGH'; +set)spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority to 'HIGH'; +-set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'-; +set spanner.read_lock_mode='PESSIMISTIC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-'HIGH'; +set-spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority to 'HIGH'; ++set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'+; +set spanner.read_lock_mode='PESSIMISTIC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to+'HIGH'; +set+spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority to 'HIGH'; +-#set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'-#; +set spanner.read_lock_mode='PESSIMISTIC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-#'HIGH'; +set-#spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority to 'HIGH'; +/set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'/; +set spanner.read_lock_mode='PESSIMISTIC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/'HIGH'; +set/spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority to 'HIGH'; +\set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'\; +set spanner.read_lock_mode='PESSIMISTIC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to\'HIGH'; +set\spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority to 'HIGH'; +?set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'?; +set spanner.read_lock_mode='PESSIMISTIC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to?'HIGH'; +set?spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority to 'HIGH'; +-/set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'-/; +set spanner.read_lock_mode='PESSIMISTIC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-/'HIGH'; +set-/spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority to 'HIGH'; +/#set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'/#; +set spanner.read_lock_mode='PESSIMISTIC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/#'HIGH'; +set/#spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority to 'HIGH'; +/-set spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'HIGH'/-; +set spanner.read_lock_mode='PESSIMISTIC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/-'HIGH'; +set/-spanner.read_lock_mode='PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'MEDIUM'; +set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY TO 'MEDIUM'; +SET SPANNER.READ_LOCK_MODE='UNSPECIFIED'; NEW_CONNECTION; -set spanner.rpc_priority to 'medium'; +set spanner.read_lock_mode='unspecified'; NEW_CONNECTION; - set spanner.rpc_priority to 'MEDIUM'; + set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; - set spanner.rpc_priority to 'MEDIUM'; + set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -set spanner.rpc_priority to 'MEDIUM'; +set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -set spanner.rpc_priority to 'MEDIUM' ; +set spanner.read_lock_mode='UNSPECIFIED' ; NEW_CONNECTION; -set spanner.rpc_priority to 'MEDIUM' ; +set spanner.read_lock_mode='UNSPECIFIED' ; NEW_CONNECTION; -set spanner.rpc_priority to 'MEDIUM' +set spanner.read_lock_mode='UNSPECIFIED' ; NEW_CONNECTION; -set spanner.rpc_priority to 'MEDIUM'; +set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -set spanner.rpc_priority to 'MEDIUM'; +set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; set -spanner.rpc_priority -to -'MEDIUM'; +spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority to 'MEDIUM'; +foo set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM' bar; +set spanner.read_lock_mode='UNSPECIFIED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority to 'MEDIUM'; +%set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'%; +set spanner.read_lock_mode='UNSPECIFIED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to%'MEDIUM'; +set%spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority to 'MEDIUM'; +_set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'_; +set spanner.read_lock_mode='UNSPECIFIED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to_'MEDIUM'; +set_spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority to 'MEDIUM'; +&set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'&; +set spanner.read_lock_mode='UNSPECIFIED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to&'MEDIUM'; +set&spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority to 'MEDIUM'; +$set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'$; +set spanner.read_lock_mode='UNSPECIFIED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to$'MEDIUM'; +set$spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority to 'MEDIUM'; +@set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'@; +set spanner.read_lock_mode='UNSPECIFIED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to@'MEDIUM'; +set@spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority to 'MEDIUM'; +!set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'!; +set spanner.read_lock_mode='UNSPECIFIED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to!'MEDIUM'; +set!spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority to 'MEDIUM'; +*set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'*; +set spanner.read_lock_mode='UNSPECIFIED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to*'MEDIUM'; +set*spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority to 'MEDIUM'; +(set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'(; +set spanner.read_lock_mode='UNSPECIFIED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to('MEDIUM'; +set(spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority to 'MEDIUM'; +)set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'); +set spanner.read_lock_mode='UNSPECIFIED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to)'MEDIUM'; +set)spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority to 'MEDIUM'; +-set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'-; +set spanner.read_lock_mode='UNSPECIFIED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-'MEDIUM'; +set-spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority to 'MEDIUM'; ++set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'+; +set spanner.read_lock_mode='UNSPECIFIED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to+'MEDIUM'; +set+spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority to 'MEDIUM'; +-#set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'-#; +set spanner.read_lock_mode='UNSPECIFIED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-#'MEDIUM'; +set-#spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority to 'MEDIUM'; +/set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'/; +set spanner.read_lock_mode='UNSPECIFIED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/'MEDIUM'; +set/spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority to 'MEDIUM'; +\set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'\; +set spanner.read_lock_mode='UNSPECIFIED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to\'MEDIUM'; +set\spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority to 'MEDIUM'; +?set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'?; +set spanner.read_lock_mode='UNSPECIFIED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to?'MEDIUM'; +set?spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority to 'MEDIUM'; +-/set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'-/; +set spanner.read_lock_mode='UNSPECIFIED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-/'MEDIUM'; +set-/spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority to 'MEDIUM'; +/#set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'/#; +set spanner.read_lock_mode='UNSPECIFIED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/#'MEDIUM'; +set/#spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority to 'MEDIUM'; +/-set spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'MEDIUM'/-; +set spanner.read_lock_mode='UNSPECIFIED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/-'MEDIUM'; +set/-spanner.read_lock_mode='UNSPECIFIED'; NEW_CONNECTION; -set spanner.rpc_priority to 'LOW'; +set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY TO 'LOW'; +SET SPANNER.READ_LOCK_MODE TO 'OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'low'; +set spanner.read_lock_mode to 'optimistic'; NEW_CONNECTION; - set spanner.rpc_priority to 'LOW'; + set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; - set spanner.rpc_priority to 'LOW'; + set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'LOW'; +set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'LOW' ; +set spanner.read_lock_mode to 'OPTIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'LOW' ; +set spanner.read_lock_mode to 'OPTIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'LOW' +set spanner.read_lock_mode to 'OPTIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'LOW'; +set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'LOW'; +set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; set -spanner.rpc_priority +spanner.read_lock_mode to -'LOW'; +'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority to 'LOW'; +foo set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW' bar; +set spanner.read_lock_mode to 'OPTIMISTIC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority to 'LOW'; +%set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'%; +set spanner.read_lock_mode to 'OPTIMISTIC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to%'LOW'; +set spanner.read_lock_mode to%'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority to 'LOW'; +_set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'_; +set spanner.read_lock_mode to 'OPTIMISTIC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to_'LOW'; +set spanner.read_lock_mode to_'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority to 'LOW'; +&set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'&; +set spanner.read_lock_mode to 'OPTIMISTIC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to&'LOW'; +set spanner.read_lock_mode to&'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority to 'LOW'; +$set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'$; +set spanner.read_lock_mode to 'OPTIMISTIC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to$'LOW'; +set spanner.read_lock_mode to$'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority to 'LOW'; +@set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'@; +set spanner.read_lock_mode to 'OPTIMISTIC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to@'LOW'; +set spanner.read_lock_mode to@'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority to 'LOW'; +!set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'!; +set spanner.read_lock_mode to 'OPTIMISTIC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to!'LOW'; +set spanner.read_lock_mode to!'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority to 'LOW'; +*set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'*; +set spanner.read_lock_mode to 'OPTIMISTIC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to*'LOW'; +set spanner.read_lock_mode to*'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority to 'LOW'; +(set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'(; +set spanner.read_lock_mode to 'OPTIMISTIC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to('LOW'; +set spanner.read_lock_mode to('OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority to 'LOW'; +)set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'); +set spanner.read_lock_mode to 'OPTIMISTIC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to)'LOW'; +set spanner.read_lock_mode to)'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority to 'LOW'; +-set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'-; +set spanner.read_lock_mode to 'OPTIMISTIC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-'LOW'; +set spanner.read_lock_mode to-'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority to 'LOW'; ++set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'+; +set spanner.read_lock_mode to 'OPTIMISTIC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to+'LOW'; +set spanner.read_lock_mode to+'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority to 'LOW'; +-#set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'-#; +set spanner.read_lock_mode to 'OPTIMISTIC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-#'LOW'; +set spanner.read_lock_mode to-#'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority to 'LOW'; +/set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'/; +set spanner.read_lock_mode to 'OPTIMISTIC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/'LOW'; +set spanner.read_lock_mode to/'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority to 'LOW'; +\set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'\; +set spanner.read_lock_mode to 'OPTIMISTIC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to\'LOW'; +set spanner.read_lock_mode to\'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority to 'LOW'; +?set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'?; +set spanner.read_lock_mode to 'OPTIMISTIC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to?'LOW'; +set spanner.read_lock_mode to?'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority to 'LOW'; +-/set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'-/; +set spanner.read_lock_mode to 'OPTIMISTIC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-/'LOW'; +set spanner.read_lock_mode to-/'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority to 'LOW'; +/#set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'/#; +set spanner.read_lock_mode to 'OPTIMISTIC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/#'LOW'; +set spanner.read_lock_mode to/#'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority to 'LOW'; +/-set spanner.read_lock_mode to 'OPTIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'LOW'/-; +set spanner.read_lock_mode to 'OPTIMISTIC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/-'LOW'; +set spanner.read_lock_mode to/-'OPTIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'NULL'; +set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; -SET SPANNER.RPC_PRIORITY TO 'NULL'; +SET SPANNER.READ_LOCK_MODE TO 'PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'null'; +set spanner.read_lock_mode to 'pessimistic'; NEW_CONNECTION; - set spanner.rpc_priority to 'NULL'; + set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; - set spanner.rpc_priority to 'NULL'; + set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'NULL'; +set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'NULL' ; +set spanner.read_lock_mode to 'PESSIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'NULL' ; +set spanner.read_lock_mode to 'PESSIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'NULL' +set spanner.read_lock_mode to 'PESSIMISTIC' ; NEW_CONNECTION; -set spanner.rpc_priority to 'NULL'; +set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; -set spanner.rpc_priority to 'NULL'; +set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; set -spanner.rpc_priority +spanner.read_lock_mode to -'NULL'; +'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.rpc_priority to 'NULL'; +foo set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL' bar; +set spanner.read_lock_mode to 'PESSIMISTIC' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.rpc_priority to 'NULL'; +%set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'%; +set spanner.read_lock_mode to 'PESSIMISTIC'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to%'NULL'; +set spanner.read_lock_mode to%'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.rpc_priority to 'NULL'; +_set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'_; +set spanner.read_lock_mode to 'PESSIMISTIC'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to_'NULL'; +set spanner.read_lock_mode to_'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.rpc_priority to 'NULL'; +&set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'&; +set spanner.read_lock_mode to 'PESSIMISTIC'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to&'NULL'; +set spanner.read_lock_mode to&'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.rpc_priority to 'NULL'; +$set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'$; +set spanner.read_lock_mode to 'PESSIMISTIC'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to$'NULL'; +set spanner.read_lock_mode to$'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.rpc_priority to 'NULL'; +@set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'@; +set spanner.read_lock_mode to 'PESSIMISTIC'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to@'NULL'; +set spanner.read_lock_mode to@'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.rpc_priority to 'NULL'; +!set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'!; +set spanner.read_lock_mode to 'PESSIMISTIC'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to!'NULL'; +set spanner.read_lock_mode to!'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.rpc_priority to 'NULL'; +*set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'*; +set spanner.read_lock_mode to 'PESSIMISTIC'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to*'NULL'; +set spanner.read_lock_mode to*'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.rpc_priority to 'NULL'; +(set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'(; +set spanner.read_lock_mode to 'PESSIMISTIC'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to('NULL'; +set spanner.read_lock_mode to('PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.rpc_priority to 'NULL'; +)set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'); +set spanner.read_lock_mode to 'PESSIMISTIC'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to)'NULL'; +set spanner.read_lock_mode to)'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.rpc_priority to 'NULL'; +-set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'-; +set spanner.read_lock_mode to 'PESSIMISTIC'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-'NULL'; +set spanner.read_lock_mode to-'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.rpc_priority to 'NULL'; ++set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'+; +set spanner.read_lock_mode to 'PESSIMISTIC'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to+'NULL'; +set spanner.read_lock_mode to+'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.rpc_priority to 'NULL'; +-#set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'-#; +set spanner.read_lock_mode to 'PESSIMISTIC'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-#'NULL'; +set spanner.read_lock_mode to-#'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.rpc_priority to 'NULL'; +/set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'/; +set spanner.read_lock_mode to 'PESSIMISTIC'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/'NULL'; +set spanner.read_lock_mode to/'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.rpc_priority to 'NULL'; +\set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'\; +set spanner.read_lock_mode to 'PESSIMISTIC'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to\'NULL'; +set spanner.read_lock_mode to\'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.rpc_priority to 'NULL'; +?set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'?; +set spanner.read_lock_mode to 'PESSIMISTIC'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to?'NULL'; +set spanner.read_lock_mode to?'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.rpc_priority to 'NULL'; +-/set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'-/; +set spanner.read_lock_mode to 'PESSIMISTIC'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to-/'NULL'; +set spanner.read_lock_mode to-/'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.rpc_priority to 'NULL'; +/#set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'/#; +set spanner.read_lock_mode to 'PESSIMISTIC'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/#'NULL'; +set spanner.read_lock_mode to/#'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.rpc_priority to 'NULL'; +/-set spanner.read_lock_mode to 'PESSIMISTIC'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to 'NULL'/-; +set spanner.read_lock_mode to 'PESSIMISTIC'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.rpc_priority to/-'NULL'; +set spanner.read_lock_mode to/-'PESSIMISTIC'; NEW_CONNECTION; -set spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; -SET SPANNER.SAVEPOINT_SUPPORT='ENABLED'; +SET SPANNER.READ_LOCK_MODE TO 'UNSPECIFIED'; NEW_CONNECTION; -set spanner.savepoint_support='enabled'; +set spanner.read_lock_mode to 'unspecified'; NEW_CONNECTION; - set spanner.savepoint_support='ENABLED'; + set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; - set spanner.savepoint_support='ENABLED'; + set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; -set spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; -set spanner.savepoint_support='ENABLED' ; +set spanner.read_lock_mode to 'UNSPECIFIED' ; NEW_CONNECTION; -set spanner.savepoint_support='ENABLED' ; +set spanner.read_lock_mode to 'UNSPECIFIED' ; NEW_CONNECTION; -set spanner.savepoint_support='ENABLED' +set spanner.read_lock_mode to 'UNSPECIFIED' ; NEW_CONNECTION; -set spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; -set spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; set -spanner.savepoint_support='ENABLED'; +spanner.read_lock_mode +to +'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.savepoint_support='ENABLED'; +foo set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED' bar; +set spanner.read_lock_mode to 'UNSPECIFIED' bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.savepoint_support='ENABLED'; +%set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'%; +set spanner.read_lock_mode to 'UNSPECIFIED'%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to%'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.savepoint_support='ENABLED'; +_set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'_; +set spanner.read_lock_mode to 'UNSPECIFIED'_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to_'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.savepoint_support='ENABLED'; +&set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'&; +set spanner.read_lock_mode to 'UNSPECIFIED'&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to&'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.savepoint_support='ENABLED'; +$set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'$; +set spanner.read_lock_mode to 'UNSPECIFIED'$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to$'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.savepoint_support='ENABLED'; +@set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'@; +set spanner.read_lock_mode to 'UNSPECIFIED'@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to@'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.savepoint_support='ENABLED'; +!set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'!; +set spanner.read_lock_mode to 'UNSPECIFIED'!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to!'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.savepoint_support='ENABLED'; +*set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'*; +set spanner.read_lock_mode to 'UNSPECIFIED'*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to*'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.savepoint_support='ENABLED'; +(set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'(; +set spanner.read_lock_mode to 'UNSPECIFIED'(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to('UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.savepoint_support='ENABLED'; +)set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'); +set spanner.read_lock_mode to 'UNSPECIFIED'); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to)'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.savepoint_support='ENABLED'; +-set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'-; +set spanner.read_lock_mode to 'UNSPECIFIED'-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to-'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.savepoint_support='ENABLED'; ++set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'+; +set spanner.read_lock_mode to 'UNSPECIFIED'+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to+'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.savepoint_support='ENABLED'; +-#set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'-#; +set spanner.read_lock_mode to 'UNSPECIFIED'-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to-#'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.savepoint_support='ENABLED'; +/set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'/; +set spanner.read_lock_mode to 'UNSPECIFIED'/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to/'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.savepoint_support='ENABLED'; +\set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'\; +set spanner.read_lock_mode to 'UNSPECIFIED'\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to\'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.savepoint_support='ENABLED'; +?set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'?; +set spanner.read_lock_mode to 'UNSPECIFIED'?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to?'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.savepoint_support='ENABLED'; +-/set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'-/; +set spanner.read_lock_mode to 'UNSPECIFIED'-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to-/'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.savepoint_support='ENABLED'; +/#set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'/#; +set spanner.read_lock_mode to 'UNSPECIFIED'/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to/#'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.savepoint_support='ENABLED'; +/-set spanner.read_lock_mode to 'UNSPECIFIED'; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='ENABLED'/-; +set spanner.read_lock_mode to 'UNSPECIFIED'/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.savepoint_support='ENABLED'; +set spanner.read_lock_mode to/-'UNSPECIFIED'; NEW_CONNECTION; -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; -SET SPANNER.SAVEPOINT_SUPPORT='FAIL_AFTER_ROLLBACK'; +SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = TRUE; NEW_CONNECTION; -set spanner.savepoint_support='fail_after_rollback'; +set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; - set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; + set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; - set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; + set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' ; +set spanner.delay_transaction_start_until_first_write = true ; NEW_CONNECTION; -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' ; +set spanner.delay_transaction_start_until_first_write = true ; NEW_CONNECTION; -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' +set spanner.delay_transaction_start_until_first_write = true ; NEW_CONNECTION; -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; set -spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +spanner.delay_transaction_start_until_first_write += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +foo set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK' bar; +set spanner.delay_transaction_start_until_first_write = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +%set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'%; +set spanner.delay_transaction_start_until_first_write = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +_set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'_; +set spanner.delay_transaction_start_until_first_write = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +&set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'&; +set spanner.delay_transaction_start_until_first_write = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +$set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'$; +set spanner.delay_transaction_start_until_first_write = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +@set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'@; +set spanner.delay_transaction_start_until_first_write = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +!set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'!; +set spanner.delay_transaction_start_until_first_write = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +*set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'*; +set spanner.delay_transaction_start_until_first_write = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +(set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'(; +set spanner.delay_transaction_start_until_first_write = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +)set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'); +set spanner.delay_transaction_start_until_first_write = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +-set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'-; +set spanner.delay_transaction_start_until_first_write = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; ++set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'+; +set spanner.delay_transaction_start_until_first_write = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +-#set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'-#; +set spanner.delay_transaction_start_until_first_write = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +/set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'/; +set spanner.delay_transaction_start_until_first_write = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +\set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'\; +set spanner.delay_transaction_start_until_first_write = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +?set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'?; +set spanner.delay_transaction_start_until_first_write = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +-/set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'-/; +set spanner.delay_transaction_start_until_first_write = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +/#set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'/#; +set spanner.delay_transaction_start_until_first_write = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +/-set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='FAIL_AFTER_ROLLBACK'/-; +set spanner.delay_transaction_start_until_first_write = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.savepoint_support='FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write =/-true; NEW_CONNECTION; -set spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; -SET SPANNER.SAVEPOINT_SUPPORT='DISABLED'; +SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = FALSE; NEW_CONNECTION; -set spanner.savepoint_support='disabled'; +set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; - set spanner.savepoint_support='DISABLED'; + set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; - set spanner.savepoint_support='DISABLED'; + set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; -set spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; -set spanner.savepoint_support='DISABLED' ; +set spanner.delay_transaction_start_until_first_write = false ; NEW_CONNECTION; -set spanner.savepoint_support='DISABLED' ; +set spanner.delay_transaction_start_until_first_write = false ; NEW_CONNECTION; -set spanner.savepoint_support='DISABLED' +set spanner.delay_transaction_start_until_first_write = false ; NEW_CONNECTION; -set spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; -set spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; set -spanner.savepoint_support='DISABLED'; +spanner.delay_transaction_start_until_first_write += +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.savepoint_support='DISABLED'; +foo set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED' bar; +set spanner.delay_transaction_start_until_first_write = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.savepoint_support='DISABLED'; +%set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'%; +set spanner.delay_transaction_start_until_first_write = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set%spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.savepoint_support='DISABLED'; +_set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'_; +set spanner.delay_transaction_start_until_first_write = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set_spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.savepoint_support='DISABLED'; +&set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'&; +set spanner.delay_transaction_start_until_first_write = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set&spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.savepoint_support='DISABLED'; +$set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'$; +set spanner.delay_transaction_start_until_first_write = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set$spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.savepoint_support='DISABLED'; +@set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'@; +set spanner.delay_transaction_start_until_first_write = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set@spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.savepoint_support='DISABLED'; +!set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'!; +set spanner.delay_transaction_start_until_first_write = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set!spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.savepoint_support='DISABLED'; +*set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'*; +set spanner.delay_transaction_start_until_first_write = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set*spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.savepoint_support='DISABLED'; +(set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'(; +set spanner.delay_transaction_start_until_first_write = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set(spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.savepoint_support='DISABLED'; +)set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'); +set spanner.delay_transaction_start_until_first_write = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set)spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.savepoint_support='DISABLED'; +-set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'-; +set spanner.delay_transaction_start_until_first_write = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.savepoint_support='DISABLED'; ++set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'+; +set spanner.delay_transaction_start_until_first_write = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set+spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.savepoint_support='DISABLED'; +-#set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'-#; +set spanner.delay_transaction_start_until_first_write = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-#spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.savepoint_support='DISABLED'; +/set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'/; +set spanner.delay_transaction_start_until_first_write = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.savepoint_support='DISABLED'; +\set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'\; +set spanner.delay_transaction_start_until_first_write = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set\spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.savepoint_support='DISABLED'; +?set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'?; +set spanner.delay_transaction_start_until_first_write = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set?spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.savepoint_support='DISABLED'; +-/set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'-/; +set spanner.delay_transaction_start_until_first_write = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set-/spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.savepoint_support='DISABLED'; +/#set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'/#; +set spanner.delay_transaction_start_until_first_write = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/#spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.savepoint_support='DISABLED'; +/-set spanner.delay_transaction_start_until_first_write = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support='DISABLED'/-; +set spanner.delay_transaction_start_until_first_write = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set/-spanner.savepoint_support='DISABLED'; +set spanner.delay_transaction_start_until_first_write =/-false; NEW_CONNECTION; -set spanner.savepoint_support to 'ENABLED'; +set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; -SET SPANNER.SAVEPOINT_SUPPORT TO 'ENABLED'; +SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE TO TRUE; NEW_CONNECTION; -set spanner.savepoint_support to 'enabled'; +set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; - set spanner.savepoint_support to 'ENABLED'; + set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; - set spanner.savepoint_support to 'ENABLED'; + set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; -set spanner.savepoint_support to 'ENABLED'; +set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; -set spanner.savepoint_support to 'ENABLED' ; +set spanner.delay_transaction_start_until_first_write to true ; NEW_CONNECTION; -set spanner.savepoint_support to 'ENABLED' ; +set spanner.delay_transaction_start_until_first_write to true ; NEW_CONNECTION; -set spanner.savepoint_support to 'ENABLED' +set spanner.delay_transaction_start_until_first_write to true ; NEW_CONNECTION; -set spanner.savepoint_support to 'ENABLED'; +set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; -set spanner.savepoint_support to 'ENABLED'; +set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; set -spanner.savepoint_support +spanner.delay_transaction_start_until_first_write to -'ENABLED'; +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.savepoint_support to 'ENABLED'; +foo set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED' bar; +set spanner.delay_transaction_start_until_first_write to true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.savepoint_support to 'ENABLED'; +%set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'%; +set spanner.delay_transaction_start_until_first_write to true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to%'ENABLED'; +set spanner.delay_transaction_start_until_first_write to%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.savepoint_support to 'ENABLED'; +_set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'_; +set spanner.delay_transaction_start_until_first_write to true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to_'ENABLED'; +set spanner.delay_transaction_start_until_first_write to_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.savepoint_support to 'ENABLED'; +&set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'&; +set spanner.delay_transaction_start_until_first_write to true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to&'ENABLED'; +set spanner.delay_transaction_start_until_first_write to&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.savepoint_support to 'ENABLED'; +$set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'$; +set spanner.delay_transaction_start_until_first_write to true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to$'ENABLED'; +set spanner.delay_transaction_start_until_first_write to$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.savepoint_support to 'ENABLED'; +@set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'@; +set spanner.delay_transaction_start_until_first_write to true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to@'ENABLED'; +set spanner.delay_transaction_start_until_first_write to@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.savepoint_support to 'ENABLED'; +!set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'!; +set spanner.delay_transaction_start_until_first_write to true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to!'ENABLED'; +set spanner.delay_transaction_start_until_first_write to!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.savepoint_support to 'ENABLED'; +*set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'*; +set spanner.delay_transaction_start_until_first_write to true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to*'ENABLED'; +set spanner.delay_transaction_start_until_first_write to*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.savepoint_support to 'ENABLED'; +(set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'(; +set spanner.delay_transaction_start_until_first_write to true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to('ENABLED'; +set spanner.delay_transaction_start_until_first_write to(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.savepoint_support to 'ENABLED'; +)set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'); +set spanner.delay_transaction_start_until_first_write to true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to)'ENABLED'; +set spanner.delay_transaction_start_until_first_write to)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.savepoint_support to 'ENABLED'; +-set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'-; +set spanner.delay_transaction_start_until_first_write to true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-'ENABLED'; +set spanner.delay_transaction_start_until_first_write to-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.savepoint_support to 'ENABLED'; ++set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'+; +set spanner.delay_transaction_start_until_first_write to true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to+'ENABLED'; +set spanner.delay_transaction_start_until_first_write to+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.savepoint_support to 'ENABLED'; +-#set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'-#; +set spanner.delay_transaction_start_until_first_write to true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-#'ENABLED'; +set spanner.delay_transaction_start_until_first_write to-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.savepoint_support to 'ENABLED'; +/set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'/; +set spanner.delay_transaction_start_until_first_write to true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/'ENABLED'; +set spanner.delay_transaction_start_until_first_write to/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.savepoint_support to 'ENABLED'; +\set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'\; +set spanner.delay_transaction_start_until_first_write to true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to\'ENABLED'; +set spanner.delay_transaction_start_until_first_write to\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.savepoint_support to 'ENABLED'; +?set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'?; +set spanner.delay_transaction_start_until_first_write to true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to?'ENABLED'; +set spanner.delay_transaction_start_until_first_write to?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.savepoint_support to 'ENABLED'; +-/set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'-/; +set spanner.delay_transaction_start_until_first_write to true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-/'ENABLED'; +set spanner.delay_transaction_start_until_first_write to-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.savepoint_support to 'ENABLED'; +/#set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'/#; +set spanner.delay_transaction_start_until_first_write to true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/#'ENABLED'; +set spanner.delay_transaction_start_until_first_write to/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.savepoint_support to 'ENABLED'; +/-set spanner.delay_transaction_start_until_first_write to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'ENABLED'/-; +set spanner.delay_transaction_start_until_first_write to true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/-'ENABLED'; +set spanner.delay_transaction_start_until_first_write to/-true; NEW_CONNECTION; -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; -SET SPANNER.SAVEPOINT_SUPPORT TO 'FAIL_AFTER_ROLLBACK'; +SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE TO FALSE; NEW_CONNECTION; -set spanner.savepoint_support to 'fail_after_rollback'; +set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; - set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; + set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; - set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; + set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' ; +set spanner.delay_transaction_start_until_first_write to false ; NEW_CONNECTION; -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' ; +set spanner.delay_transaction_start_until_first_write to false ; NEW_CONNECTION; -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' +set spanner.delay_transaction_start_until_first_write to false ; NEW_CONNECTION; -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; set -spanner.savepoint_support +spanner.delay_transaction_start_until_first_write to -'FAIL_AFTER_ROLLBACK'; +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +foo set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK' bar; +set spanner.delay_transaction_start_until_first_write to false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +%set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'%; +set spanner.delay_transaction_start_until_first_write to false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to%'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +_set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'_; +set spanner.delay_transaction_start_until_first_write to false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to_'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +&set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'&; +set spanner.delay_transaction_start_until_first_write to false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to&'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +$set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'$; +set spanner.delay_transaction_start_until_first_write to false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to$'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +@set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'@; +set spanner.delay_transaction_start_until_first_write to false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to@'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +!set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'!; +set spanner.delay_transaction_start_until_first_write to false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to!'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +*set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'*; +set spanner.delay_transaction_start_until_first_write to false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to*'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +(set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'(; +set spanner.delay_transaction_start_until_first_write to false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to('FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +)set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'); +set spanner.delay_transaction_start_until_first_write to false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to)'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +-set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'-; +set spanner.delay_transaction_start_until_first_write to false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; ++set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'+; +set spanner.delay_transaction_start_until_first_write to false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to+'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +-#set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'-#; +set spanner.delay_transaction_start_until_first_write to false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-#'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +/set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'/; +set spanner.delay_transaction_start_until_first_write to false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +\set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'\; +set spanner.delay_transaction_start_until_first_write to false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to\'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +?set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'?; +set spanner.delay_transaction_start_until_first_write to false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to?'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +-/set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'-/; +set spanner.delay_transaction_start_until_first_write to false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-/'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +/#set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'/#; +set spanner.delay_transaction_start_until_first_write to false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/#'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'; +/-set spanner.delay_transaction_start_until_first_write to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'FAIL_AFTER_ROLLBACK'/-; +set spanner.delay_transaction_start_until_first_write to false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/-'FAIL_AFTER_ROLLBACK'; +set spanner.delay_transaction_start_until_first_write to/-false; NEW_CONNECTION; -set spanner.savepoint_support to 'DISABLED'; +set spanner.keep_transaction_alive = true; NEW_CONNECTION; -SET SPANNER.SAVEPOINT_SUPPORT TO 'DISABLED'; +SET SPANNER.KEEP_TRANSACTION_ALIVE = TRUE; NEW_CONNECTION; -set spanner.savepoint_support to 'disabled'; +set spanner.keep_transaction_alive = true; NEW_CONNECTION; - set spanner.savepoint_support to 'DISABLED'; + set spanner.keep_transaction_alive = true; NEW_CONNECTION; - set spanner.savepoint_support to 'DISABLED'; + set spanner.keep_transaction_alive = true; NEW_CONNECTION; -set spanner.savepoint_support to 'DISABLED'; +set spanner.keep_transaction_alive = true; NEW_CONNECTION; -set spanner.savepoint_support to 'DISABLED' ; +set spanner.keep_transaction_alive = true ; NEW_CONNECTION; -set spanner.savepoint_support to 'DISABLED' ; +set spanner.keep_transaction_alive = true ; NEW_CONNECTION; -set spanner.savepoint_support to 'DISABLED' +set spanner.keep_transaction_alive = true ; NEW_CONNECTION; -set spanner.savepoint_support to 'DISABLED'; +set spanner.keep_transaction_alive = true; NEW_CONNECTION; -set spanner.savepoint_support to 'DISABLED'; +set spanner.keep_transaction_alive = true; NEW_CONNECTION; set -spanner.savepoint_support -to -'DISABLED'; +spanner.keep_transaction_alive += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.savepoint_support to 'DISABLED'; +foo set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED' bar; +set spanner.keep_transaction_alive = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.savepoint_support to 'DISABLED'; +%set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'%; +set spanner.keep_transaction_alive = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to%'DISABLED'; +set spanner.keep_transaction_alive =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.savepoint_support to 'DISABLED'; +_set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'_; +set spanner.keep_transaction_alive = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to_'DISABLED'; +set spanner.keep_transaction_alive =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.savepoint_support to 'DISABLED'; +&set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'&; +set spanner.keep_transaction_alive = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to&'DISABLED'; +set spanner.keep_transaction_alive =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.savepoint_support to 'DISABLED'; +$set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'$; +set spanner.keep_transaction_alive = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to$'DISABLED'; +set spanner.keep_transaction_alive =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.savepoint_support to 'DISABLED'; +@set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'@; +set spanner.keep_transaction_alive = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to@'DISABLED'; +set spanner.keep_transaction_alive =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.savepoint_support to 'DISABLED'; +!set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'!; +set spanner.keep_transaction_alive = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to!'DISABLED'; +set spanner.keep_transaction_alive =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.savepoint_support to 'DISABLED'; +*set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'*; +set spanner.keep_transaction_alive = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to*'DISABLED'; +set spanner.keep_transaction_alive =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.savepoint_support to 'DISABLED'; +(set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'(; +set spanner.keep_transaction_alive = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to('DISABLED'; +set spanner.keep_transaction_alive =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.savepoint_support to 'DISABLED'; +)set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'); +set spanner.keep_transaction_alive = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to)'DISABLED'; +set spanner.keep_transaction_alive =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.savepoint_support to 'DISABLED'; +-set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'-; +set spanner.keep_transaction_alive = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-'DISABLED'; +set spanner.keep_transaction_alive =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.savepoint_support to 'DISABLED'; ++set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'+; +set spanner.keep_transaction_alive = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to+'DISABLED'; +set spanner.keep_transaction_alive =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.savepoint_support to 'DISABLED'; +-#set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'-#; +set spanner.keep_transaction_alive = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-#'DISABLED'; +set spanner.keep_transaction_alive =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.savepoint_support to 'DISABLED'; +/set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'/; +set spanner.keep_transaction_alive = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/'DISABLED'; +set spanner.keep_transaction_alive =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.savepoint_support to 'DISABLED'; +\set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'\; +set spanner.keep_transaction_alive = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to\'DISABLED'; +set spanner.keep_transaction_alive =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.savepoint_support to 'DISABLED'; +?set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'?; +set spanner.keep_transaction_alive = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to?'DISABLED'; +set spanner.keep_transaction_alive =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.savepoint_support to 'DISABLED'; +-/set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'-/; +set spanner.keep_transaction_alive = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to-/'DISABLED'; +set spanner.keep_transaction_alive =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.savepoint_support to 'DISABLED'; +/#set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'/#; +set spanner.keep_transaction_alive = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/#'DISABLED'; +set spanner.keep_transaction_alive =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.savepoint_support to 'DISABLED'; +/-set spanner.keep_transaction_alive = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to 'DISABLED'/-; +set spanner.keep_transaction_alive = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.savepoint_support to/-'DISABLED'; +set spanner.keep_transaction_alive =/-true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true; +set spanner.keep_transaction_alive = false; NEW_CONNECTION; -SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = TRUE; +SET SPANNER.KEEP_TRANSACTION_ALIVE = FALSE; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true; +set spanner.keep_transaction_alive = false; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write = true; + set spanner.keep_transaction_alive = false; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write = true; + set spanner.keep_transaction_alive = false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true; +set spanner.keep_transaction_alive = false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true ; +set spanner.keep_transaction_alive = false ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true ; +set spanner.keep_transaction_alive = false ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true +set spanner.keep_transaction_alive = false ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true; +set spanner.keep_transaction_alive = false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = true; +set spanner.keep_transaction_alive = false; NEW_CONNECTION; set -spanner.delay_transaction_start_until_first_write +spanner.keep_transaction_alive = -true; +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.delay_transaction_start_until_first_write = true; +foo set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true bar; +set spanner.keep_transaction_alive = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.delay_transaction_start_until_first_write = true; +%set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true%; +set spanner.keep_transaction_alive = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =%true; +set spanner.keep_transaction_alive =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.delay_transaction_start_until_first_write = true; +_set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true_; +set spanner.keep_transaction_alive = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =_true; +set spanner.keep_transaction_alive =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.delay_transaction_start_until_first_write = true; +&set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true&; +set spanner.keep_transaction_alive = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =&true; +set spanner.keep_transaction_alive =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.delay_transaction_start_until_first_write = true; +$set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true$; +set spanner.keep_transaction_alive = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =$true; +set spanner.keep_transaction_alive =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.delay_transaction_start_until_first_write = true; +@set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true@; +set spanner.keep_transaction_alive = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =@true; +set spanner.keep_transaction_alive =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.delay_transaction_start_until_first_write = true; +!set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true!; +set spanner.keep_transaction_alive = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =!true; +set spanner.keep_transaction_alive =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.delay_transaction_start_until_first_write = true; +*set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true*; +set spanner.keep_transaction_alive = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =*true; +set spanner.keep_transaction_alive =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.delay_transaction_start_until_first_write = true; +(set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true(; +set spanner.keep_transaction_alive = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =(true; +set spanner.keep_transaction_alive =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.delay_transaction_start_until_first_write = true; +)set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true); +set spanner.keep_transaction_alive = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =)true; +set spanner.keep_transaction_alive =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.delay_transaction_start_until_first_write = true; +-set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true-; +set spanner.keep_transaction_alive = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =-true; +set spanner.keep_transaction_alive =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.delay_transaction_start_until_first_write = true; ++set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true+; +set spanner.keep_transaction_alive = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =+true; +set spanner.keep_transaction_alive =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.delay_transaction_start_until_first_write = true; +-#set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true-#; +set spanner.keep_transaction_alive = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =-#true; +set spanner.keep_transaction_alive =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.delay_transaction_start_until_first_write = true; +/set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true/; +set spanner.keep_transaction_alive = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =/true; +set spanner.keep_transaction_alive =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.delay_transaction_start_until_first_write = true; +\set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true\; +set spanner.keep_transaction_alive = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =\true; +set spanner.keep_transaction_alive =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.delay_transaction_start_until_first_write = true; +?set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true?; +set spanner.keep_transaction_alive = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =?true; +set spanner.keep_transaction_alive =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.delay_transaction_start_until_first_write = true; +-/set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true-/; +set spanner.keep_transaction_alive = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =-/true; +set spanner.keep_transaction_alive =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.delay_transaction_start_until_first_write = true; +/#set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true/#; +set spanner.keep_transaction_alive = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =/#true; +set spanner.keep_transaction_alive =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.delay_transaction_start_until_first_write = true; +/-set spanner.keep_transaction_alive = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = true/-; +set spanner.keep_transaction_alive = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =/-true; +set spanner.keep_transaction_alive =/-false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false; +set spanner.keep_transaction_alive to true; NEW_CONNECTION; -SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = FALSE; +SET SPANNER.KEEP_TRANSACTION_ALIVE TO TRUE; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false; +set spanner.keep_transaction_alive to true; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write = false; + set spanner.keep_transaction_alive to true; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write = false; + set spanner.keep_transaction_alive to true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false; +set spanner.keep_transaction_alive to true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false ; +set spanner.keep_transaction_alive to true ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false ; +set spanner.keep_transaction_alive to true ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false +set spanner.keep_transaction_alive to true ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false; +set spanner.keep_transaction_alive to true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write = false; +set spanner.keep_transaction_alive to true; NEW_CONNECTION; set -spanner.delay_transaction_start_until_first_write -= -false; +spanner.keep_transaction_alive +to +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.delay_transaction_start_until_first_write = false; +foo set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false bar; +set spanner.keep_transaction_alive to true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.delay_transaction_start_until_first_write = false; +%set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false%; +set spanner.keep_transaction_alive to true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =%false; +set spanner.keep_transaction_alive to%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.delay_transaction_start_until_first_write = false; +_set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false_; +set spanner.keep_transaction_alive to true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =_false; +set spanner.keep_transaction_alive to_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.delay_transaction_start_until_first_write = false; +&set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false&; +set spanner.keep_transaction_alive to true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =&false; +set spanner.keep_transaction_alive to&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.delay_transaction_start_until_first_write = false; +$set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false$; +set spanner.keep_transaction_alive to true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =$false; +set spanner.keep_transaction_alive to$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.delay_transaction_start_until_first_write = false; +@set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false@; +set spanner.keep_transaction_alive to true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =@false; +set spanner.keep_transaction_alive to@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.delay_transaction_start_until_first_write = false; +!set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false!; +set spanner.keep_transaction_alive to true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =!false; +set spanner.keep_transaction_alive to!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.delay_transaction_start_until_first_write = false; +*set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false*; +set spanner.keep_transaction_alive to true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =*false; +set spanner.keep_transaction_alive to*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.delay_transaction_start_until_first_write = false; +(set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false(; +set spanner.keep_transaction_alive to true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =(false; +set spanner.keep_transaction_alive to(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.delay_transaction_start_until_first_write = false; +)set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false); +set spanner.keep_transaction_alive to true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =)false; +set spanner.keep_transaction_alive to)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.delay_transaction_start_until_first_write = false; +-set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false-; +set spanner.keep_transaction_alive to true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =-false; +set spanner.keep_transaction_alive to-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.delay_transaction_start_until_first_write = false; ++set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false+; +set spanner.keep_transaction_alive to true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =+false; +set spanner.keep_transaction_alive to+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.delay_transaction_start_until_first_write = false; +-#set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false-#; +set spanner.keep_transaction_alive to true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =-#false; +set spanner.keep_transaction_alive to-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.delay_transaction_start_until_first_write = false; +/set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false/; +set spanner.keep_transaction_alive to true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =/false; +set spanner.keep_transaction_alive to/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.delay_transaction_start_until_first_write = false; +\set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false\; +set spanner.keep_transaction_alive to true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =\false; +set spanner.keep_transaction_alive to\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.delay_transaction_start_until_first_write = false; +?set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false?; +set spanner.keep_transaction_alive to true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =?false; +set spanner.keep_transaction_alive to?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.delay_transaction_start_until_first_write = false; +-/set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false-/; +set spanner.keep_transaction_alive to true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =-/false; +set spanner.keep_transaction_alive to-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.delay_transaction_start_until_first_write = false; +/#set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false/#; +set spanner.keep_transaction_alive to true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =/#false; +set spanner.keep_transaction_alive to/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.delay_transaction_start_until_first_write = false; +/-set spanner.keep_transaction_alive to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write = false/-; +set spanner.keep_transaction_alive to true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write =/-false; +set spanner.keep_transaction_alive to/-true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true; +set spanner.keep_transaction_alive to false; NEW_CONNECTION; -SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE TO TRUE; +SET SPANNER.KEEP_TRANSACTION_ALIVE TO FALSE; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true; +set spanner.keep_transaction_alive to false; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write to true; + set spanner.keep_transaction_alive to false; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write to true; + set spanner.keep_transaction_alive to false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true; +set spanner.keep_transaction_alive to false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true ; +set spanner.keep_transaction_alive to false ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true ; +set spanner.keep_transaction_alive to false ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true +set spanner.keep_transaction_alive to false ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true; +set spanner.keep_transaction_alive to false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to true; +set spanner.keep_transaction_alive to false; NEW_CONNECTION; set -spanner.delay_transaction_start_until_first_write +spanner.keep_transaction_alive to -true; +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.delay_transaction_start_until_first_write to true; +foo set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true bar; +set spanner.keep_transaction_alive to false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.delay_transaction_start_until_first_write to true; +%set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true%; +set spanner.keep_transaction_alive to false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to%true; +set spanner.keep_transaction_alive to%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.delay_transaction_start_until_first_write to true; +_set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true_; +set spanner.keep_transaction_alive to false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to_true; +set spanner.keep_transaction_alive to_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.delay_transaction_start_until_first_write to true; +&set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true&; +set spanner.keep_transaction_alive to false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to&true; +set spanner.keep_transaction_alive to&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.delay_transaction_start_until_first_write to true; +$set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true$; +set spanner.keep_transaction_alive to false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to$true; +set spanner.keep_transaction_alive to$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.delay_transaction_start_until_first_write to true; +@set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true@; +set spanner.keep_transaction_alive to false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to@true; +set spanner.keep_transaction_alive to@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.delay_transaction_start_until_first_write to true; +!set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true!; +set spanner.keep_transaction_alive to false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to!true; +set spanner.keep_transaction_alive to!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.delay_transaction_start_until_first_write to true; +*set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true*; +set spanner.keep_transaction_alive to false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to*true; +set spanner.keep_transaction_alive to*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.delay_transaction_start_until_first_write to true; +(set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true(; +set spanner.keep_transaction_alive to false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to(true; +set spanner.keep_transaction_alive to(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.delay_transaction_start_until_first_write to true; +)set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true); +set spanner.keep_transaction_alive to false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to)true; +set spanner.keep_transaction_alive to)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.delay_transaction_start_until_first_write to true; +-set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true-; +set spanner.keep_transaction_alive to false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to-true; +set spanner.keep_transaction_alive to-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.delay_transaction_start_until_first_write to true; ++set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true+; +set spanner.keep_transaction_alive to false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to+true; +set spanner.keep_transaction_alive to+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.delay_transaction_start_until_first_write to true; +-#set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true-#; +set spanner.keep_transaction_alive to false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to-#true; +set spanner.keep_transaction_alive to-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.delay_transaction_start_until_first_write to true; +/set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true/; +set spanner.keep_transaction_alive to false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to/true; +set spanner.keep_transaction_alive to/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.delay_transaction_start_until_first_write to true; +\set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true\; +set spanner.keep_transaction_alive to false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to\true; +set spanner.keep_transaction_alive to\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.delay_transaction_start_until_first_write to true; +?set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true?; +set spanner.keep_transaction_alive to false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to?true; +set spanner.keep_transaction_alive to?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.delay_transaction_start_until_first_write to true; +-/set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true-/; +set spanner.keep_transaction_alive to false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to-/true; +set spanner.keep_transaction_alive to-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.delay_transaction_start_until_first_write to true; +/#set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true/#; +set spanner.keep_transaction_alive to false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to/#true; +set spanner.keep_transaction_alive to/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.delay_transaction_start_until_first_write to true; +/-set spanner.keep_transaction_alive to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to true/-; +set spanner.keep_transaction_alive to false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to/-true; +set spanner.keep_transaction_alive to/-false; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false; +set spanner.auto_batch_dml = true; NEW_CONNECTION; -SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE TO FALSE; +SET SPANNER.AUTO_BATCH_DML = TRUE; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false; +set spanner.auto_batch_dml = true; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write to false; + set spanner.auto_batch_dml = true; NEW_CONNECTION; - set spanner.delay_transaction_start_until_first_write to false; + set spanner.auto_batch_dml = true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false; +set spanner.auto_batch_dml = true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false ; +set spanner.auto_batch_dml = true ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false ; +set spanner.auto_batch_dml = true ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false +set spanner.auto_batch_dml = true ; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false; +set spanner.auto_batch_dml = true; NEW_CONNECTION; -set spanner.delay_transaction_start_until_first_write to false; +set spanner.auto_batch_dml = true; NEW_CONNECTION; set -spanner.delay_transaction_start_until_first_write -to -false; +spanner.auto_batch_dml += +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.delay_transaction_start_until_first_write to false; +foo set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false bar; +set spanner.auto_batch_dml = true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.delay_transaction_start_until_first_write to false; +%set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false%; +set spanner.auto_batch_dml = true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to%false; +set spanner.auto_batch_dml =%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.delay_transaction_start_until_first_write to false; +_set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false_; +set spanner.auto_batch_dml = true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to_false; +set spanner.auto_batch_dml =_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.delay_transaction_start_until_first_write to false; +&set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false&; +set spanner.auto_batch_dml = true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to&false; +set spanner.auto_batch_dml =&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.delay_transaction_start_until_first_write to false; +$set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false$; +set spanner.auto_batch_dml = true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to$false; +set spanner.auto_batch_dml =$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.delay_transaction_start_until_first_write to false; +@set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false@; +set spanner.auto_batch_dml = true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to@false; +set spanner.auto_batch_dml =@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.delay_transaction_start_until_first_write to false; +!set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false!; +set spanner.auto_batch_dml = true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to!false; +set spanner.auto_batch_dml =!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.delay_transaction_start_until_first_write to false; +*set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false*; +set spanner.auto_batch_dml = true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to*false; +set spanner.auto_batch_dml =*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.delay_transaction_start_until_first_write to false; +(set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false(; +set spanner.auto_batch_dml = true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to(false; +set spanner.auto_batch_dml =(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.delay_transaction_start_until_first_write to false; +)set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false); +set spanner.auto_batch_dml = true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to)false; +set spanner.auto_batch_dml =)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.delay_transaction_start_until_first_write to false; +-set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false-; +set spanner.auto_batch_dml = true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to-false; +set spanner.auto_batch_dml =-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.delay_transaction_start_until_first_write to false; ++set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false+; +set spanner.auto_batch_dml = true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to+false; +set spanner.auto_batch_dml =+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.delay_transaction_start_until_first_write to false; +-#set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false-#; +set spanner.auto_batch_dml = true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to-#false; +set spanner.auto_batch_dml =-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.delay_transaction_start_until_first_write to false; +/set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false/; +set spanner.auto_batch_dml = true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to/false; +set spanner.auto_batch_dml =/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.delay_transaction_start_until_first_write to false; +\set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false\; +set spanner.auto_batch_dml = true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to\false; +set spanner.auto_batch_dml =\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.delay_transaction_start_until_first_write to false; +?set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false?; +set spanner.auto_batch_dml = true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to?false; +set spanner.auto_batch_dml =?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.delay_transaction_start_until_first_write to false; +-/set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false-/; +set spanner.auto_batch_dml = true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to-/false; +set spanner.auto_batch_dml =-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.delay_transaction_start_until_first_write to false; +/#set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false/#; +set spanner.auto_batch_dml = true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to/#false; +set spanner.auto_batch_dml =/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.delay_transaction_start_until_first_write to false; +/-set spanner.auto_batch_dml = true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to false/-; +set spanner.auto_batch_dml = true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.delay_transaction_start_until_first_write to/-false; +set spanner.auto_batch_dml =/-true; NEW_CONNECTION; -set spanner.keep_transaction_alive = true; +set spanner.auto_batch_dml = false; NEW_CONNECTION; -SET SPANNER.KEEP_TRANSACTION_ALIVE = TRUE; +SET SPANNER.AUTO_BATCH_DML = FALSE; NEW_CONNECTION; -set spanner.keep_transaction_alive = true; +set spanner.auto_batch_dml = false; NEW_CONNECTION; - set spanner.keep_transaction_alive = true; + set spanner.auto_batch_dml = false; NEW_CONNECTION; - set spanner.keep_transaction_alive = true; + set spanner.auto_batch_dml = false; NEW_CONNECTION; -set spanner.keep_transaction_alive = true; +set spanner.auto_batch_dml = false; NEW_CONNECTION; -set spanner.keep_transaction_alive = true ; +set spanner.auto_batch_dml = false ; NEW_CONNECTION; -set spanner.keep_transaction_alive = true ; +set spanner.auto_batch_dml = false ; NEW_CONNECTION; -set spanner.keep_transaction_alive = true +set spanner.auto_batch_dml = false ; NEW_CONNECTION; -set spanner.keep_transaction_alive = true; +set spanner.auto_batch_dml = false; NEW_CONNECTION; -set spanner.keep_transaction_alive = true; +set spanner.auto_batch_dml = false; NEW_CONNECTION; set -spanner.keep_transaction_alive +spanner.auto_batch_dml = -true; +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.keep_transaction_alive = true; +foo set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true bar; +set spanner.auto_batch_dml = false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.keep_transaction_alive = true; +%set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true%; +set spanner.auto_batch_dml = false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =%true; +set spanner.auto_batch_dml =%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.keep_transaction_alive = true; +_set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true_; +set spanner.auto_batch_dml = false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =_true; +set spanner.auto_batch_dml =_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.keep_transaction_alive = true; +&set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true&; +set spanner.auto_batch_dml = false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =&true; +set spanner.auto_batch_dml =&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.keep_transaction_alive = true; +$set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true$; +set spanner.auto_batch_dml = false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =$true; +set spanner.auto_batch_dml =$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.keep_transaction_alive = true; +@set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true@; +set spanner.auto_batch_dml = false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =@true; +set spanner.auto_batch_dml =@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.keep_transaction_alive = true; +!set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true!; +set spanner.auto_batch_dml = false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =!true; +set spanner.auto_batch_dml =!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.keep_transaction_alive = true; +*set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true*; +set spanner.auto_batch_dml = false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =*true; +set spanner.auto_batch_dml =*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.keep_transaction_alive = true; +(set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true(; +set spanner.auto_batch_dml = false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =(true; +set spanner.auto_batch_dml =(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.keep_transaction_alive = true; +)set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true); +set spanner.auto_batch_dml = false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =)true; +set spanner.auto_batch_dml =)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.keep_transaction_alive = true; +-set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true-; +set spanner.auto_batch_dml = false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =-true; +set spanner.auto_batch_dml =-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.keep_transaction_alive = true; ++set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true+; +set spanner.auto_batch_dml = false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =+true; +set spanner.auto_batch_dml =+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.keep_transaction_alive = true; +-#set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true-#; +set spanner.auto_batch_dml = false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =-#true; +set spanner.auto_batch_dml =-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.keep_transaction_alive = true; +/set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true/; +set spanner.auto_batch_dml = false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =/true; +set spanner.auto_batch_dml =/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.keep_transaction_alive = true; +\set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true\; +set spanner.auto_batch_dml = false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =\true; +set spanner.auto_batch_dml =\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.keep_transaction_alive = true; +?set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true?; +set spanner.auto_batch_dml = false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =?true; +set spanner.auto_batch_dml =?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.keep_transaction_alive = true; +-/set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true-/; +set spanner.auto_batch_dml = false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =-/true; +set spanner.auto_batch_dml =-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.keep_transaction_alive = true; +/#set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true/#; +set spanner.auto_batch_dml = false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =/#true; +set spanner.auto_batch_dml =/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.keep_transaction_alive = true; +/-set spanner.auto_batch_dml = false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = true/-; +set spanner.auto_batch_dml = false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =/-true; +set spanner.auto_batch_dml =/-false; NEW_CONNECTION; -set spanner.keep_transaction_alive = false; +set spanner.auto_batch_dml to true; NEW_CONNECTION; -SET SPANNER.KEEP_TRANSACTION_ALIVE = FALSE; +SET SPANNER.AUTO_BATCH_DML TO TRUE; NEW_CONNECTION; -set spanner.keep_transaction_alive = false; +set spanner.auto_batch_dml to true; NEW_CONNECTION; - set spanner.keep_transaction_alive = false; + set spanner.auto_batch_dml to true; NEW_CONNECTION; - set spanner.keep_transaction_alive = false; + set spanner.auto_batch_dml to true; NEW_CONNECTION; -set spanner.keep_transaction_alive = false; +set spanner.auto_batch_dml to true; NEW_CONNECTION; -set spanner.keep_transaction_alive = false ; +set spanner.auto_batch_dml to true ; NEW_CONNECTION; -set spanner.keep_transaction_alive = false ; +set spanner.auto_batch_dml to true ; NEW_CONNECTION; -set spanner.keep_transaction_alive = false +set spanner.auto_batch_dml to true ; NEW_CONNECTION; -set spanner.keep_transaction_alive = false; +set spanner.auto_batch_dml to true; NEW_CONNECTION; -set spanner.keep_transaction_alive = false; +set spanner.auto_batch_dml to true; NEW_CONNECTION; set -spanner.keep_transaction_alive -= -false; +spanner.auto_batch_dml +to +true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.keep_transaction_alive = false; +foo set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false bar; +set spanner.auto_batch_dml to true bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.keep_transaction_alive = false; +%set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false%; +set spanner.auto_batch_dml to true%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =%false; +set spanner.auto_batch_dml to%true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.keep_transaction_alive = false; +_set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false_; +set spanner.auto_batch_dml to true_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =_false; +set spanner.auto_batch_dml to_true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.keep_transaction_alive = false; +&set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false&; +set spanner.auto_batch_dml to true&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =&false; +set spanner.auto_batch_dml to&true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.keep_transaction_alive = false; +$set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false$; +set spanner.auto_batch_dml to true$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =$false; +set spanner.auto_batch_dml to$true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.keep_transaction_alive = false; +@set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false@; +set spanner.auto_batch_dml to true@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =@false; +set spanner.auto_batch_dml to@true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.keep_transaction_alive = false; +!set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false!; +set spanner.auto_batch_dml to true!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =!false; +set spanner.auto_batch_dml to!true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.keep_transaction_alive = false; +*set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false*; +set spanner.auto_batch_dml to true*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =*false; +set spanner.auto_batch_dml to*true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.keep_transaction_alive = false; +(set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false(; +set spanner.auto_batch_dml to true(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =(false; +set spanner.auto_batch_dml to(true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.keep_transaction_alive = false; +)set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false); +set spanner.auto_batch_dml to true); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =)false; +set spanner.auto_batch_dml to)true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.keep_transaction_alive = false; +-set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false-; +set spanner.auto_batch_dml to true-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =-false; +set spanner.auto_batch_dml to-true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.keep_transaction_alive = false; ++set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false+; +set spanner.auto_batch_dml to true+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =+false; +set spanner.auto_batch_dml to+true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.keep_transaction_alive = false; +-#set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false-#; +set spanner.auto_batch_dml to true-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =-#false; +set spanner.auto_batch_dml to-#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.keep_transaction_alive = false; +/set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false/; +set spanner.auto_batch_dml to true/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =/false; +set spanner.auto_batch_dml to/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.keep_transaction_alive = false; +\set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false\; +set spanner.auto_batch_dml to true\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =\false; +set spanner.auto_batch_dml to\true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.keep_transaction_alive = false; +?set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false?; +set spanner.auto_batch_dml to true?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =?false; +set spanner.auto_batch_dml to?true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.keep_transaction_alive = false; +-/set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false-/; +set spanner.auto_batch_dml to true-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =-/false; +set spanner.auto_batch_dml to-/true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.keep_transaction_alive = false; +/#set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false/#; +set spanner.auto_batch_dml to true/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =/#false; +set spanner.auto_batch_dml to/#true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.keep_transaction_alive = false; +/-set spanner.auto_batch_dml to true; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive = false/-; +set spanner.auto_batch_dml to true/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive =/-false; +set spanner.auto_batch_dml to/-true; NEW_CONNECTION; -set spanner.keep_transaction_alive to true; +set spanner.auto_batch_dml to false; NEW_CONNECTION; -SET SPANNER.KEEP_TRANSACTION_ALIVE TO TRUE; +SET SPANNER.AUTO_BATCH_DML TO FALSE; NEW_CONNECTION; -set spanner.keep_transaction_alive to true; +set spanner.auto_batch_dml to false; NEW_CONNECTION; - set spanner.keep_transaction_alive to true; + set spanner.auto_batch_dml to false; NEW_CONNECTION; - set spanner.keep_transaction_alive to true; + set spanner.auto_batch_dml to false; NEW_CONNECTION; -set spanner.keep_transaction_alive to true; +set spanner.auto_batch_dml to false; NEW_CONNECTION; -set spanner.keep_transaction_alive to true ; +set spanner.auto_batch_dml to false ; NEW_CONNECTION; -set spanner.keep_transaction_alive to true ; +set spanner.auto_batch_dml to false ; NEW_CONNECTION; -set spanner.keep_transaction_alive to true +set spanner.auto_batch_dml to false ; NEW_CONNECTION; -set spanner.keep_transaction_alive to true; +set spanner.auto_batch_dml to false; NEW_CONNECTION; -set spanner.keep_transaction_alive to true; +set spanner.auto_batch_dml to false; NEW_CONNECTION; set -spanner.keep_transaction_alive +spanner.auto_batch_dml to -true; +false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.keep_transaction_alive to true; +foo set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true bar; +set spanner.auto_batch_dml to false bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.keep_transaction_alive to true; +%set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true%; +set spanner.auto_batch_dml to false%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to%true; +set spanner.auto_batch_dml to%false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.keep_transaction_alive to true; +_set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true_; +set spanner.auto_batch_dml to false_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to_true; +set spanner.auto_batch_dml to_false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.keep_transaction_alive to true; +&set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true&; +set spanner.auto_batch_dml to false&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to&true; +set spanner.auto_batch_dml to&false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.keep_transaction_alive to true; +$set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true$; +set spanner.auto_batch_dml to false$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to$true; +set spanner.auto_batch_dml to$false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.keep_transaction_alive to true; +@set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true@; +set spanner.auto_batch_dml to false@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to@true; +set spanner.auto_batch_dml to@false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.keep_transaction_alive to true; +!set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true!; +set spanner.auto_batch_dml to false!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to!true; +set spanner.auto_batch_dml to!false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.keep_transaction_alive to true; +*set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true*; +set spanner.auto_batch_dml to false*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to*true; +set spanner.auto_batch_dml to*false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.keep_transaction_alive to true; +(set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true(; +set spanner.auto_batch_dml to false(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to(true; +set spanner.auto_batch_dml to(false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.keep_transaction_alive to true; +)set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true); +set spanner.auto_batch_dml to false); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to)true; +set spanner.auto_batch_dml to)false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.keep_transaction_alive to true; +-set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true-; +set spanner.auto_batch_dml to false-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to-true; +set spanner.auto_batch_dml to-false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.keep_transaction_alive to true; ++set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true+; +set spanner.auto_batch_dml to false+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to+true; +set spanner.auto_batch_dml to+false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.keep_transaction_alive to true; +-#set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true-#; +set spanner.auto_batch_dml to false-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to-#true; +set spanner.auto_batch_dml to-#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.keep_transaction_alive to true; +/set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true/; +set spanner.auto_batch_dml to false/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to/true; +set spanner.auto_batch_dml to/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.keep_transaction_alive to true; +\set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true\; +set spanner.auto_batch_dml to false\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to\true; +set spanner.auto_batch_dml to\false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.keep_transaction_alive to true; +?set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true?; +set spanner.auto_batch_dml to false?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to?true; +set spanner.auto_batch_dml to?false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.keep_transaction_alive to true; +-/set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true-/; +set spanner.auto_batch_dml to false-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to-/true; +set spanner.auto_batch_dml to-/false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.keep_transaction_alive to true; +/#set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true/#; +set spanner.auto_batch_dml to false/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to/#true; +set spanner.auto_batch_dml to/#false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.keep_transaction_alive to true; +/-set spanner.auto_batch_dml to false; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to true/-; +set spanner.auto_batch_dml to false/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to/-true; +set spanner.auto_batch_dml to/-false; NEW_CONNECTION; -set spanner.keep_transaction_alive to false; +set spanner.auto_batch_dml to off; NEW_CONNECTION; -SET SPANNER.KEEP_TRANSACTION_ALIVE TO FALSE; +SET SPANNER.AUTO_BATCH_DML TO OFF; NEW_CONNECTION; -set spanner.keep_transaction_alive to false; +set spanner.auto_batch_dml to off; NEW_CONNECTION; - set spanner.keep_transaction_alive to false; + set spanner.auto_batch_dml to off; NEW_CONNECTION; - set spanner.keep_transaction_alive to false; + set spanner.auto_batch_dml to off; NEW_CONNECTION; -set spanner.keep_transaction_alive to false; +set spanner.auto_batch_dml to off; NEW_CONNECTION; -set spanner.keep_transaction_alive to false ; +set spanner.auto_batch_dml to off ; NEW_CONNECTION; -set spanner.keep_transaction_alive to false ; +set spanner.auto_batch_dml to off ; NEW_CONNECTION; -set spanner.keep_transaction_alive to false +set spanner.auto_batch_dml to off ; NEW_CONNECTION; -set spanner.keep_transaction_alive to false; +set spanner.auto_batch_dml to off; NEW_CONNECTION; -set spanner.keep_transaction_alive to false; +set spanner.auto_batch_dml to off; NEW_CONNECTION; set -spanner.keep_transaction_alive +spanner.auto_batch_dml to -false; +off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.keep_transaction_alive to false; +foo set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false bar; +set spanner.auto_batch_dml to off bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.keep_transaction_alive to false; +%set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false%; +set spanner.auto_batch_dml to off%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to%false; +set spanner.auto_batch_dml to%off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.keep_transaction_alive to false; +_set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false_; +set spanner.auto_batch_dml to off_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to_false; +set spanner.auto_batch_dml to_off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.keep_transaction_alive to false; +&set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false&; +set spanner.auto_batch_dml to off&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to&false; +set spanner.auto_batch_dml to&off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.keep_transaction_alive to false; +$set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false$; +set spanner.auto_batch_dml to off$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to$false; +set spanner.auto_batch_dml to$off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.keep_transaction_alive to false; +@set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false@; +set spanner.auto_batch_dml to off@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to@false; +set spanner.auto_batch_dml to@off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.keep_transaction_alive to false; +!set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false!; +set spanner.auto_batch_dml to off!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to!false; +set spanner.auto_batch_dml to!off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.keep_transaction_alive to false; +*set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false*; +set spanner.auto_batch_dml to off*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to*false; +set spanner.auto_batch_dml to*off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.keep_transaction_alive to false; +(set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false(; +set spanner.auto_batch_dml to off(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to(false; +set spanner.auto_batch_dml to(off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.keep_transaction_alive to false; +)set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false); +set spanner.auto_batch_dml to off); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to)false; +set spanner.auto_batch_dml to)off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.keep_transaction_alive to false; +-set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false-; +set spanner.auto_batch_dml to off-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to-false; +set spanner.auto_batch_dml to-off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.keep_transaction_alive to false; ++set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false+; +set spanner.auto_batch_dml to off+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to+false; +set spanner.auto_batch_dml to+off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.keep_transaction_alive to false; +-#set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false-#; +set spanner.auto_batch_dml to off-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to-#false; +set spanner.auto_batch_dml to-#off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.keep_transaction_alive to false; +/set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false/; +set spanner.auto_batch_dml to off/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to/false; +set spanner.auto_batch_dml to/off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.keep_transaction_alive to false; +\set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false\; +set spanner.auto_batch_dml to off\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to\false; +set spanner.auto_batch_dml to\off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.keep_transaction_alive to false; +?set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false?; +set spanner.auto_batch_dml to off?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to?false; +set spanner.auto_batch_dml to?off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.keep_transaction_alive to false; +-/set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false-/; +set spanner.auto_batch_dml to off-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to-/false; +set spanner.auto_batch_dml to-/off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.keep_transaction_alive to false; +/#set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false/#; +set spanner.auto_batch_dml to off/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to/#false; +set spanner.auto_batch_dml to/#off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.keep_transaction_alive to false; +/-set spanner.auto_batch_dml to off; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to false/-; +set spanner.auto_batch_dml to off/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.keep_transaction_alive to/-false; +set spanner.auto_batch_dml to/-off; NEW_CONNECTION; -set spanner.auto_batch_dml = true; +set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML = TRUE; +SET SPANNER.AUTO_BATCH_DML_UPDATE_COUNT = 0; NEW_CONNECTION; -set spanner.auto_batch_dml = true; +set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; - set spanner.auto_batch_dml = true; + set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; - set spanner.auto_batch_dml = true; + set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; -set spanner.auto_batch_dml = true; +set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; -set spanner.auto_batch_dml = true ; +set spanner.auto_batch_dml_update_count = 0 ; NEW_CONNECTION; -set spanner.auto_batch_dml = true ; +set spanner.auto_batch_dml_update_count = 0 ; NEW_CONNECTION; -set spanner.auto_batch_dml = true +set spanner.auto_batch_dml_update_count = 0 ; NEW_CONNECTION; -set spanner.auto_batch_dml = true; +set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; -set spanner.auto_batch_dml = true; +set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; set -spanner.auto_batch_dml +spanner.auto_batch_dml_update_count = -true; +0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml = true; +foo set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true bar; +set spanner.auto_batch_dml_update_count = 0 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml = true; +%set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true%; +set spanner.auto_batch_dml_update_count = 0%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =%true; +set spanner.auto_batch_dml_update_count =%0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml = true; +_set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true_; +set spanner.auto_batch_dml_update_count = 0_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =_true; +set spanner.auto_batch_dml_update_count =_0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml = true; +&set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true&; +set spanner.auto_batch_dml_update_count = 0&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =&true; +set spanner.auto_batch_dml_update_count =&0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml = true; +$set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true$; +set spanner.auto_batch_dml_update_count = 0$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =$true; +set spanner.auto_batch_dml_update_count =$0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml = true; +@set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true@; +set spanner.auto_batch_dml_update_count = 0@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =@true; +set spanner.auto_batch_dml_update_count =@0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml = true; +!set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true!; +set spanner.auto_batch_dml_update_count = 0!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =!true; +set spanner.auto_batch_dml_update_count =!0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml = true; +*set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true*; +set spanner.auto_batch_dml_update_count = 0*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =*true; +set spanner.auto_batch_dml_update_count =*0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml = true; +(set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true(; +set spanner.auto_batch_dml_update_count = 0(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =(true; +set spanner.auto_batch_dml_update_count =(0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml = true; +)set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true); +set spanner.auto_batch_dml_update_count = 0); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =)true; +set spanner.auto_batch_dml_update_count =)0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml = true; +-set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true-; +set spanner.auto_batch_dml_update_count = 0-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =-true; +set spanner.auto_batch_dml_update_count =-0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml = true; ++set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true+; +set spanner.auto_batch_dml_update_count = 0+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =+true; +set spanner.auto_batch_dml_update_count =+0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml = true; +-#set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true-#; +set spanner.auto_batch_dml_update_count = 0-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =-#true; +set spanner.auto_batch_dml_update_count =-#0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml = true; +/set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true/; +set spanner.auto_batch_dml_update_count = 0/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =/true; +set spanner.auto_batch_dml_update_count =/0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml = true; +\set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true\; +set spanner.auto_batch_dml_update_count = 0\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =\true; +set spanner.auto_batch_dml_update_count =\0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml = true; +?set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true?; +set spanner.auto_batch_dml_update_count = 0?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =?true; +set spanner.auto_batch_dml_update_count =?0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml = true; +-/set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true-/; +set spanner.auto_batch_dml_update_count = 0-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =-/true; +set spanner.auto_batch_dml_update_count =-/0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml = true; +/#set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true/#; +set spanner.auto_batch_dml_update_count = 0/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =/#true; +set spanner.auto_batch_dml_update_count =/#0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml = true; +/-set spanner.auto_batch_dml_update_count = 0; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = true/-; +set spanner.auto_batch_dml_update_count = 0/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =/-true; +set spanner.auto_batch_dml_update_count =/-0; NEW_CONNECTION; -set spanner.auto_batch_dml = false; +set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML = FALSE; +SET SPANNER.AUTO_BATCH_DML_UPDATE_COUNT = 100; NEW_CONNECTION; -set spanner.auto_batch_dml = false; +set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; - set spanner.auto_batch_dml = false; + set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; - set spanner.auto_batch_dml = false; + set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; -set spanner.auto_batch_dml = false; +set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; -set spanner.auto_batch_dml = false ; +set spanner.auto_batch_dml_update_count = 100 ; NEW_CONNECTION; -set spanner.auto_batch_dml = false ; +set spanner.auto_batch_dml_update_count = 100 ; NEW_CONNECTION; -set spanner.auto_batch_dml = false +set spanner.auto_batch_dml_update_count = 100 ; NEW_CONNECTION; -set spanner.auto_batch_dml = false; +set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; -set spanner.auto_batch_dml = false; +set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; set -spanner.auto_batch_dml +spanner.auto_batch_dml_update_count = -false; +100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml = false; +foo set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false bar; +set spanner.auto_batch_dml_update_count = 100 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml = false; +%set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false%; +set spanner.auto_batch_dml_update_count = 100%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =%false; +set spanner.auto_batch_dml_update_count =%100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml = false; +_set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false_; +set spanner.auto_batch_dml_update_count = 100_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =_false; +set spanner.auto_batch_dml_update_count =_100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml = false; +&set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false&; +set spanner.auto_batch_dml_update_count = 100&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =&false; +set spanner.auto_batch_dml_update_count =&100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml = false; +$set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false$; +set spanner.auto_batch_dml_update_count = 100$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =$false; +set spanner.auto_batch_dml_update_count =$100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml = false; +@set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false@; +set spanner.auto_batch_dml_update_count = 100@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =@false; +set spanner.auto_batch_dml_update_count =@100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml = false; +!set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false!; +set spanner.auto_batch_dml_update_count = 100!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =!false; +set spanner.auto_batch_dml_update_count =!100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml = false; +*set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false*; +set spanner.auto_batch_dml_update_count = 100*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =*false; +set spanner.auto_batch_dml_update_count =*100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml = false; +(set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false(; +set spanner.auto_batch_dml_update_count = 100(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =(false; +set spanner.auto_batch_dml_update_count =(100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml = false; +)set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false); +set spanner.auto_batch_dml_update_count = 100); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =)false; +set spanner.auto_batch_dml_update_count =)100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml = false; +-set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false-; +set spanner.auto_batch_dml_update_count = 100-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =-false; +set spanner.auto_batch_dml_update_count =-100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml = false; ++set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false+; +set spanner.auto_batch_dml_update_count = 100+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =+false; +set spanner.auto_batch_dml_update_count =+100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml = false; +-#set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false-#; +set spanner.auto_batch_dml_update_count = 100-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =-#false; +set spanner.auto_batch_dml_update_count =-#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml = false; +/set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false/; +set spanner.auto_batch_dml_update_count = 100/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =/false; +set spanner.auto_batch_dml_update_count =/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml = false; +\set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false\; +set spanner.auto_batch_dml_update_count = 100\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =\false; +set spanner.auto_batch_dml_update_count =\100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml = false; +?set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false?; +set spanner.auto_batch_dml_update_count = 100?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =?false; +set spanner.auto_batch_dml_update_count =?100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml = false; +-/set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false-/; +set spanner.auto_batch_dml_update_count = 100-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =-/false; +set spanner.auto_batch_dml_update_count =-/100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml = false; +/#set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false/#; +set spanner.auto_batch_dml_update_count = 100/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =/#false; +set spanner.auto_batch_dml_update_count =/#100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml = false; +/-set spanner.auto_batch_dml_update_count = 100; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml = false/-; +set spanner.auto_batch_dml_update_count = 100/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml =/-false; +set spanner.auto_batch_dml_update_count =/-100; NEW_CONNECTION; -set spanner.auto_batch_dml to true; +set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML TO TRUE; +SET SPANNER.AUTO_BATCH_DML_UPDATE_COUNT TO 1; NEW_CONNECTION; -set spanner.auto_batch_dml to true; +set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; - set spanner.auto_batch_dml to true; + set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; - set spanner.auto_batch_dml to true; + set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; -set spanner.auto_batch_dml to true; +set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; -set spanner.auto_batch_dml to true ; +set spanner.auto_batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml to true ; +set spanner.auto_batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml to true +set spanner.auto_batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml to true; +set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; -set spanner.auto_batch_dml to true; +set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; set -spanner.auto_batch_dml +spanner.auto_batch_dml_update_count to -true; +1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml to true; +foo set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true bar; +set spanner.auto_batch_dml_update_count to 1 bar; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml to true; +%set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true%; +set spanner.auto_batch_dml_update_count to 1%; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to%true; +set spanner.auto_batch_dml_update_count to%1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml to true; +_set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true_; +set spanner.auto_batch_dml_update_count to 1_; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to_true; +set spanner.auto_batch_dml_update_count to_1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml to true; +&set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true&; +set spanner.auto_batch_dml_update_count to 1&; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to&true; +set spanner.auto_batch_dml_update_count to&1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml to true; +$set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true$; +set spanner.auto_batch_dml_update_count to 1$; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to$true; +set spanner.auto_batch_dml_update_count to$1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml to true; +@set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true@; +set spanner.auto_batch_dml_update_count to 1@; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to@true; +set spanner.auto_batch_dml_update_count to@1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml to true; +!set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true!; +set spanner.auto_batch_dml_update_count to 1!; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to!true; +set spanner.auto_batch_dml_update_count to!1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml to true; +*set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true*; +set spanner.auto_batch_dml_update_count to 1*; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to*true; +set spanner.auto_batch_dml_update_count to*1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml to true; +(set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true(; +set spanner.auto_batch_dml_update_count to 1(; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to(true; +set spanner.auto_batch_dml_update_count to(1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml to true; +)set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true); +set spanner.auto_batch_dml_update_count to 1); NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to)true; +set spanner.auto_batch_dml_update_count to)1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml to true; +-set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true-; +set spanner.auto_batch_dml_update_count to 1-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-true; +set spanner.auto_batch_dml_update_count to-1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml to true; ++set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true+; +set spanner.auto_batch_dml_update_count to 1+; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to+true; +set spanner.auto_batch_dml_update_count to+1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml to true; +-#set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true-#; +set spanner.auto_batch_dml_update_count to 1-#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-#true; +set spanner.auto_batch_dml_update_count to-#1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml to true; +/set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true/; +set spanner.auto_batch_dml_update_count to 1/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/true; +set spanner.auto_batch_dml_update_count to/1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml to true; +\set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true\; +set spanner.auto_batch_dml_update_count to 1\; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to\true; +set spanner.auto_batch_dml_update_count to\1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml to true; +?set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true?; +set spanner.auto_batch_dml_update_count to 1?; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to?true; +set spanner.auto_batch_dml_update_count to?1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml to true; +-/set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true-/; +set spanner.auto_batch_dml_update_count to 1-/; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-/true; +set spanner.auto_batch_dml_update_count to-/1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml to true; +/#set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true/#; +set spanner.auto_batch_dml_update_count to 1/#; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/#true; +set spanner.auto_batch_dml_update_count to/#1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml to true; +/-set spanner.auto_batch_dml_update_count to 1; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to true/-; +set spanner.auto_batch_dml_update_count to 1/-; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/-true; +set spanner.auto_batch_dml_update_count to/-1; NEW_CONNECTION; -set spanner.auto_batch_dml to false; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML TO FALSE; +set spanner.readonly = false; +set autocommit = false; +SET LOCAL SPANNER.BATCH_DML_UPDATE_COUNT = 0; NEW_CONNECTION; -set spanner.auto_batch_dml to false; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; - set spanner.auto_batch_dml to false; +set spanner.readonly = false; +set autocommit = false; + set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; - set spanner.auto_batch_dml to false; +set spanner.readonly = false; +set autocommit = false; + set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; -set spanner.auto_batch_dml to false; +set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; -set spanner.auto_batch_dml to false ; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 0 ; NEW_CONNECTION; -set spanner.auto_batch_dml to false ; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 0 ; NEW_CONNECTION; -set spanner.auto_batch_dml to false +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 0 ; NEW_CONNECTION; -set spanner.auto_batch_dml to false; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; -set spanner.auto_batch_dml to false; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; set -spanner.auto_batch_dml -to -false; +local +spanner.batch_dml_update_count += +0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml to false; +foo set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false bar; +set local spanner.batch_dml_update_count = 0 bar; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml to false; +%set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false%; +set local spanner.batch_dml_update_count = 0%; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to%false; +set local spanner.batch_dml_update_count =%0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml to false; +_set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false_; +set local spanner.batch_dml_update_count = 0_; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to_false; +set local spanner.batch_dml_update_count =_0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml to false; +&set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false&; +set local spanner.batch_dml_update_count = 0&; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to&false; +set local spanner.batch_dml_update_count =&0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml to false; +$set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false$; +set local spanner.batch_dml_update_count = 0$; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to$false; +set local spanner.batch_dml_update_count =$0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml to false; +@set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false@; +set local spanner.batch_dml_update_count = 0@; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to@false; +set local spanner.batch_dml_update_count =@0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml to false; +!set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false!; +set local spanner.batch_dml_update_count = 0!; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to!false; +set local spanner.batch_dml_update_count =!0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml to false; +*set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false*; +set local spanner.batch_dml_update_count = 0*; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to*false; +set local spanner.batch_dml_update_count =*0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml to false; +(set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false(; +set local spanner.batch_dml_update_count = 0(; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to(false; +set local spanner.batch_dml_update_count =(0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml to false; +)set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false); +set local spanner.batch_dml_update_count = 0); NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to)false; +set local spanner.batch_dml_update_count =)0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml to false; +-set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false-; +set local spanner.batch_dml_update_count = 0-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-false; +set local spanner.batch_dml_update_count =-0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml to false; ++set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false+; +set local spanner.batch_dml_update_count = 0+; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to+false; +set local spanner.batch_dml_update_count =+0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml to false; +-#set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false-#; +set local spanner.batch_dml_update_count = 0-#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-#false; +set local spanner.batch_dml_update_count =-#0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml to false; +/set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false/; +set local spanner.batch_dml_update_count = 0/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/false; +set local spanner.batch_dml_update_count =/0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml to false; +\set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false\; +set local spanner.batch_dml_update_count = 0\; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to\false; +set local spanner.batch_dml_update_count =\0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml to false; +?set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false?; +set local spanner.batch_dml_update_count = 0?; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to?false; +set local spanner.batch_dml_update_count =?0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml to false; +-/set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false-/; +set local spanner.batch_dml_update_count = 0-/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-/false; +set local spanner.batch_dml_update_count =-/0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml to false; +/#set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false/#; +set local spanner.batch_dml_update_count = 0/#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/#false; +set local spanner.batch_dml_update_count =/#0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml to false; +/-set local spanner.batch_dml_update_count = 0; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to false/-; +set local spanner.batch_dml_update_count = 0/-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/-false; +set local spanner.batch_dml_update_count =/-0; NEW_CONNECTION; -set spanner.auto_batch_dml to off; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML TO OFF; +set spanner.readonly = false; +set autocommit = false; +SET LOCAL SPANNER.BATCH_DML_UPDATE_COUNT = 100; NEW_CONNECTION; -set spanner.auto_batch_dml to off; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; - set spanner.auto_batch_dml to off; +set spanner.readonly = false; +set autocommit = false; + set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; - set spanner.auto_batch_dml to off; +set spanner.readonly = false; +set autocommit = false; + set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; -set spanner.auto_batch_dml to off; +set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; -set spanner.auto_batch_dml to off ; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 100 ; NEW_CONNECTION; -set spanner.auto_batch_dml to off ; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 100 ; NEW_CONNECTION; -set spanner.auto_batch_dml to off +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 100 ; NEW_CONNECTION; -set spanner.auto_batch_dml to off; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; -set spanner.auto_batch_dml to off; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; set -spanner.auto_batch_dml -to -off; +local +spanner.batch_dml_update_count += +100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml to off; +foo set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off bar; +set local spanner.batch_dml_update_count = 100 bar; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml to off; +%set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off%; +set local spanner.batch_dml_update_count = 100%; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to%off; +set local spanner.batch_dml_update_count =%100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml to off; +_set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off_; +set local spanner.batch_dml_update_count = 100_; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to_off; +set local spanner.batch_dml_update_count =_100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml to off; +&set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off&; +set local spanner.batch_dml_update_count = 100&; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to&off; +set local spanner.batch_dml_update_count =&100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml to off; +$set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off$; +set local spanner.batch_dml_update_count = 100$; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to$off; +set local spanner.batch_dml_update_count =$100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml to off; +@set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off@; +set local spanner.batch_dml_update_count = 100@; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to@off; +set local spanner.batch_dml_update_count =@100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml to off; +!set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off!; +set local spanner.batch_dml_update_count = 100!; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to!off; +set local spanner.batch_dml_update_count =!100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml to off; +*set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off*; +set local spanner.batch_dml_update_count = 100*; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to*off; +set local spanner.batch_dml_update_count =*100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml to off; +(set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off(; +set local spanner.batch_dml_update_count = 100(; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to(off; +set local spanner.batch_dml_update_count =(100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml to off; +)set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off); +set local spanner.batch_dml_update_count = 100); NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to)off; +set local spanner.batch_dml_update_count =)100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml to off; +-set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off-; +set local spanner.batch_dml_update_count = 100-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-off; +set local spanner.batch_dml_update_count =-100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml to off; ++set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off+; +set local spanner.batch_dml_update_count = 100+; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to+off; +set local spanner.batch_dml_update_count =+100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml to off; +-#set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off-#; +set local spanner.batch_dml_update_count = 100-#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-#off; +set local spanner.batch_dml_update_count =-#100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml to off; +/set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off/; +set local spanner.batch_dml_update_count = 100/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/off; +set local spanner.batch_dml_update_count =/100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml to off; +\set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off\; +set local spanner.batch_dml_update_count = 100\; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to\off; +set local spanner.batch_dml_update_count =\100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml to off; +?set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off?; +set local spanner.batch_dml_update_count = 100?; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to?off; +set local spanner.batch_dml_update_count =?100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml to off; +-/set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off-/; +set local spanner.batch_dml_update_count = 100-/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to-/off; +set local spanner.batch_dml_update_count =-/100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml to off; +/#set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off/#; +set local spanner.batch_dml_update_count = 100/#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/#off; +set local spanner.batch_dml_update_count =/#100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml to off; +/-set local spanner.batch_dml_update_count = 100; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to off/-; +set local spanner.batch_dml_update_count = 100/-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml to/-off; +set local spanner.batch_dml_update_count =/-100; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 0; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML_UPDATE_COUNT = 0; +set spanner.readonly = false; +set autocommit = false; +SET LOCAL SPANNER.BATCH_DML_UPDATE_COUNT TO 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 0; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; - set spanner.auto_batch_dml_update_count = 0; +set spanner.readonly = false; +set autocommit = false; + set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; - set spanner.auto_batch_dml_update_count = 0; +set spanner.readonly = false; +set autocommit = false; + set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; -set spanner.auto_batch_dml_update_count = 0; +set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 0 ; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 0 ; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 0 +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 0; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 0; +set spanner.readonly = false; +set autocommit = false; +set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; set -spanner.auto_batch_dml_update_count -= -0; +local +spanner.batch_dml_update_count +to +1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml_update_count = 0; +foo set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0 bar; +set local spanner.batch_dml_update_count to 1 bar; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml_update_count = 0; +%set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0%; +set local spanner.batch_dml_update_count to 1%; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =%0; +set local spanner.batch_dml_update_count to%1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml_update_count = 0; +_set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0_; +set local spanner.batch_dml_update_count to 1_; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =_0; +set local spanner.batch_dml_update_count to_1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml_update_count = 0; +&set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0&; +set local spanner.batch_dml_update_count to 1&; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =&0; +set local spanner.batch_dml_update_count to&1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml_update_count = 0; +$set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0$; +set local spanner.batch_dml_update_count to 1$; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =$0; +set local spanner.batch_dml_update_count to$1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml_update_count = 0; +@set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0@; +set local spanner.batch_dml_update_count to 1@; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =@0; +set local spanner.batch_dml_update_count to@1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml_update_count = 0; +!set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0!; +set local spanner.batch_dml_update_count to 1!; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =!0; +set local spanner.batch_dml_update_count to!1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml_update_count = 0; +*set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0*; +set local spanner.batch_dml_update_count to 1*; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =*0; +set local spanner.batch_dml_update_count to*1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml_update_count = 0; +(set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0(; +set local spanner.batch_dml_update_count to 1(; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =(0; +set local spanner.batch_dml_update_count to(1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml_update_count = 0; +)set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0); +set local spanner.batch_dml_update_count to 1); NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =)0; +set local spanner.batch_dml_update_count to)1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml_update_count = 0; +-set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0-; +set local spanner.batch_dml_update_count to 1-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =-0; +set local spanner.batch_dml_update_count to-1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml_update_count = 0; ++set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0+; +set local spanner.batch_dml_update_count to 1+; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =+0; +set local spanner.batch_dml_update_count to+1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml_update_count = 0; +-#set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0-#; +set local spanner.batch_dml_update_count to 1-#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =-#0; +set local spanner.batch_dml_update_count to-#1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml_update_count = 0; +/set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0/; +set local spanner.batch_dml_update_count to 1/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =/0; +set local spanner.batch_dml_update_count to/1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml_update_count = 0; +\set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0\; +set local spanner.batch_dml_update_count to 1\; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =\0; +set local spanner.batch_dml_update_count to\1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml_update_count = 0; +?set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0?; +set local spanner.batch_dml_update_count to 1?; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =?0; +set local spanner.batch_dml_update_count to?1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml_update_count = 0; +-/set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0-/; +set local spanner.batch_dml_update_count to 1-/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =-/0; +set local spanner.batch_dml_update_count to-/1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml_update_count = 0; +/#set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0/#; +set local spanner.batch_dml_update_count to 1/#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =/#0; +set local spanner.batch_dml_update_count to/#1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml_update_count = 0; +/-set local spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 0/-; +set local spanner.batch_dml_update_count to 1/-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =/-0; +set local spanner.batch_dml_update_count to/-1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 100; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count to 1; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML_UPDATE_COUNT = 100; +set spanner.readonly = false; +set autocommit = false; +SET SPANNER.BATCH_DML_UPDATE_COUNT TO 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 100; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count to 1; NEW_CONNECTION; - set spanner.auto_batch_dml_update_count = 100; +set spanner.readonly = false; +set autocommit = false; + set spanner.batch_dml_update_count to 1; NEW_CONNECTION; - set spanner.auto_batch_dml_update_count = 100; +set spanner.readonly = false; +set autocommit = false; + set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; -set spanner.auto_batch_dml_update_count = 100; +set spanner.batch_dml_update_count to 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 100 ; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 100 ; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 100 +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count to 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 100; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count to 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count = 100; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; set -spanner.auto_batch_dml_update_count -= -100; +spanner.batch_dml_update_count +to +1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml_update_count = 100; +foo set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100 bar; +set spanner.batch_dml_update_count to 1 bar; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml_update_count = 100; +%set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100%; +set spanner.batch_dml_update_count to 1%; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =%100; +set spanner.batch_dml_update_count to%1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml_update_count = 100; +_set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100_; +set spanner.batch_dml_update_count to 1_; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =_100; +set spanner.batch_dml_update_count to_1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml_update_count = 100; +&set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100&; +set spanner.batch_dml_update_count to 1&; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =&100; +set spanner.batch_dml_update_count to&1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml_update_count = 100; +$set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100$; +set spanner.batch_dml_update_count to 1$; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =$100; +set spanner.batch_dml_update_count to$1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml_update_count = 100; +@set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100@; +set spanner.batch_dml_update_count to 1@; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =@100; +set spanner.batch_dml_update_count to@1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml_update_count = 100; +!set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100!; +set spanner.batch_dml_update_count to 1!; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =!100; +set spanner.batch_dml_update_count to!1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml_update_count = 100; +*set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100*; +set spanner.batch_dml_update_count to 1*; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =*100; +set spanner.batch_dml_update_count to*1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml_update_count = 100; +(set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100(; +set spanner.batch_dml_update_count to 1(; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =(100; +set spanner.batch_dml_update_count to(1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml_update_count = 100; +)set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100); +set spanner.batch_dml_update_count to 1); NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =)100; +set spanner.batch_dml_update_count to)1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml_update_count = 100; +-set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100-; +set spanner.batch_dml_update_count to 1-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =-100; +set spanner.batch_dml_update_count to-1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml_update_count = 100; ++set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100+; +set spanner.batch_dml_update_count to 1+; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =+100; +set spanner.batch_dml_update_count to+1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml_update_count = 100; +-#set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100-#; +set spanner.batch_dml_update_count to 1-#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =-#100; +set spanner.batch_dml_update_count to-#1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml_update_count = 100; +/set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100/; +set spanner.batch_dml_update_count to 1/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =/100; +set spanner.batch_dml_update_count to/1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml_update_count = 100; +\set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100\; +set spanner.batch_dml_update_count to 1\; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =\100; +set spanner.batch_dml_update_count to\1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml_update_count = 100; +?set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100?; +set spanner.batch_dml_update_count to 1?; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =?100; +set spanner.batch_dml_update_count to?1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml_update_count = 100; +-/set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100-/; +set spanner.batch_dml_update_count to 1-/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =-/100; +set spanner.batch_dml_update_count to-/1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml_update_count = 100; +/#set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100/#; +set spanner.batch_dml_update_count to 1/#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =/#100; +set spanner.batch_dml_update_count to/#1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml_update_count = 100; +/-set spanner.batch_dml_update_count to 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count = 100/-; +set spanner.batch_dml_update_count to 1/-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count =/-100; +set spanner.batch_dml_update_count to/-1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count to 1; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count = 1; NEW_CONNECTION; -SET SPANNER.AUTO_BATCH_DML_UPDATE_COUNT TO 1; +set spanner.readonly = false; +set autocommit = false; +SET SPANNER.BATCH_DML_UPDATE_COUNT = 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count to 1; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count = 1; NEW_CONNECTION; - set spanner.auto_batch_dml_update_count to 1; +set spanner.readonly = false; +set autocommit = false; + set spanner.batch_dml_update_count = 1; NEW_CONNECTION; - set spanner.auto_batch_dml_update_count to 1; +set spanner.readonly = false; +set autocommit = false; + set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; -set spanner.auto_batch_dml_update_count to 1; +set spanner.batch_dml_update_count = 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count to 1 ; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count = 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count to 1 ; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count = 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count to 1 +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count = 1 ; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count to 1; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count = 1; NEW_CONNECTION; -set spanner.auto_batch_dml_update_count to 1; +set spanner.readonly = false; +set autocommit = false; +set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; set -spanner.auto_batch_dml_update_count -to +spanner.batch_dml_update_count += 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -foo set spanner.auto_batch_dml_update_count to 1; +foo set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1 bar; +set spanner.batch_dml_update_count = 1 bar; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -%set spanner.auto_batch_dml_update_count to 1; +%set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1%; +set spanner.batch_dml_update_count = 1%; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to%1; +set spanner.batch_dml_update_count =%1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -_set spanner.auto_batch_dml_update_count to 1; +_set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1_; +set spanner.batch_dml_update_count = 1_; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to_1; +set spanner.batch_dml_update_count =_1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -&set spanner.auto_batch_dml_update_count to 1; +&set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1&; +set spanner.batch_dml_update_count = 1&; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to&1; +set spanner.batch_dml_update_count =&1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -$set spanner.auto_batch_dml_update_count to 1; +$set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1$; +set spanner.batch_dml_update_count = 1$; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to$1; +set spanner.batch_dml_update_count =$1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -@set spanner.auto_batch_dml_update_count to 1; +@set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1@; +set spanner.batch_dml_update_count = 1@; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to@1; +set spanner.batch_dml_update_count =@1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -!set spanner.auto_batch_dml_update_count to 1; +!set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1!; +set spanner.batch_dml_update_count = 1!; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to!1; +set spanner.batch_dml_update_count =!1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -*set spanner.auto_batch_dml_update_count to 1; +*set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1*; +set spanner.batch_dml_update_count = 1*; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to*1; +set spanner.batch_dml_update_count =*1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -(set spanner.auto_batch_dml_update_count to 1; +(set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1(; +set spanner.batch_dml_update_count = 1(; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to(1; +set spanner.batch_dml_update_count =(1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -)set spanner.auto_batch_dml_update_count to 1; +)set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1); +set spanner.batch_dml_update_count = 1); NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to)1; +set spanner.batch_dml_update_count =)1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --set spanner.auto_batch_dml_update_count to 1; +-set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1-; +set spanner.batch_dml_update_count = 1-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to-1; +set spanner.batch_dml_update_count =-1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -+set spanner.auto_batch_dml_update_count to 1; ++set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1+; +set spanner.batch_dml_update_count = 1+; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to+1; +set spanner.batch_dml_update_count =+1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --#set spanner.auto_batch_dml_update_count to 1; +-#set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1-#; +set spanner.batch_dml_update_count = 1-#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to-#1; +set spanner.batch_dml_update_count =-#1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/set spanner.auto_batch_dml_update_count to 1; +/set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1/; +set spanner.batch_dml_update_count = 1/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to/1; +set spanner.batch_dml_update_count =/1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -\set spanner.auto_batch_dml_update_count to 1; +\set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1\; +set spanner.batch_dml_update_count = 1\; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to\1; +set spanner.batch_dml_update_count =\1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -?set spanner.auto_batch_dml_update_count to 1; +?set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1?; +set spanner.batch_dml_update_count = 1?; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to?1; +set spanner.batch_dml_update_count =?1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT --/set spanner.auto_batch_dml_update_count to 1; +-/set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1-/; +set spanner.batch_dml_update_count = 1-/; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to-/1; +set spanner.batch_dml_update_count =-/1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/#set spanner.auto_batch_dml_update_count to 1; +/#set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1/#; +set spanner.batch_dml_update_count = 1/#; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to/#1; +set spanner.batch_dml_update_count =/#1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -/-set spanner.auto_batch_dml_update_count to 1; +/-set spanner.batch_dml_update_count = 1; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to 1/-; +set spanner.batch_dml_update_count = 1/-; NEW_CONNECTION; +set spanner.readonly = false; +set autocommit = false; @EXPECT EXCEPTION INVALID_ARGUMENT -set spanner.auto_batch_dml_update_count to/-1; +set spanner.batch_dml_update_count =/-1; NEW_CONNECTION; set spanner.auto_batch_dml_update_count_verification = true; NEW_CONNECTION; @@ -86093,7 +99711,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86102,7 +99720,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86111,7 +99729,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86120,7 +99738,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86129,7 +99747,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86138,7 +99756,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86147,7 +99765,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86156,7 +99774,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86165,7 +99783,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86174,7 +99792,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86183,7 +99801,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86192,7 +99810,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86201,7 +99819,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86210,7 +99828,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86219,7 +99837,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86228,7 +99846,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86237,7 +99855,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.data_boost_enabled; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -86246,7 +99864,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.data_boost_enabled/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.data_boost_enabled; NEW_CONNECTION; show variable spanner.data_boost_enabled; @@ -87290,7 +100908,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87299,7 +100917,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87308,7 +100926,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87317,7 +100935,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87326,7 +100944,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87335,7 +100953,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87344,7 +100962,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87353,7 +100971,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87362,7 +100980,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87371,7 +100989,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87380,7 +100998,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87389,7 +101007,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87398,7 +101016,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87407,7 +101025,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87416,7 +101034,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87425,7 +101043,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87434,7 +101052,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.auto_partition_mode; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -87443,7 +101061,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.auto_partition_mode/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.auto_partition_mode; NEW_CONNECTION; show variable spanner.auto_partition_mode; @@ -88487,7 +102105,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88496,7 +102114,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88505,7 +102123,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88514,7 +102132,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88523,7 +102141,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88532,7 +102150,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88541,7 +102159,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88550,7 +102168,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88559,7 +102177,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88568,7 +102186,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88577,7 +102195,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88586,7 +102204,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88595,7 +102213,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88604,7 +102222,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88613,7 +102231,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88622,7 +102240,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88631,7 +102249,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.max_partitions; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -88640,7 +102258,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitions/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.max_partitions; NEW_CONNECTION; show variable spanner.max_partitions; @@ -89684,7 +103302,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism%; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show%spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89693,7 +103311,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism_; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show_spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89702,7 +103320,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism&; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show&spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89711,7 +103329,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism$; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show$spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89720,7 +103338,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism@; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show@spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89729,7 +103347,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism!; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show!spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89738,7 +103356,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism*; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show*spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89747,7 +103365,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism(; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show(spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89756,7 +103374,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism); NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show)spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89765,7 +103383,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89774,7 +103392,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism+; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show+spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89783,7 +103401,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism-#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-#spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89792,7 +103410,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89801,7 +103419,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism\; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show\spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89810,7 +103428,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism?; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show?spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89819,7 +103437,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism-/; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show-/spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89828,7 +103446,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism/#; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/#spanner.max_partitioned_parallelism; NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT @@ -89837,7 +103455,7 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show spanner.max_partitioned_parallelism/-; NEW_CONNECTION; -@EXPECT EXCEPTION INVALID_ARGUMENT +@EXPECT EXCEPTION UNIMPLEMENTED show/-spanner.max_partitioned_parallelism; NEW_CONNECTION; show variable spanner.max_partitioned_parallelism; diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql index f5456bb55ee..72f50037384 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql @@ -160,15 +160,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.347000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.347000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.019000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.019000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.347000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.019000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -261,7 +261,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -271,7 +270,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -281,7 +279,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -291,7 +288,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -510,15 +506,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.458000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.458000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.115000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.115000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.458000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.115000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -611,7 +607,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -621,7 +616,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -631,7 +625,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -641,7 +634,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -950,8 +942,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.580000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.580000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.217000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.217000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -961,7 +953,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.580000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.217000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1096,7 +1088,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1106,7 +1097,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1116,7 +1106,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1126,7 +1115,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1462,8 +1450,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.692000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.692000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.309000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.309000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -1473,7 +1461,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.692000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.309000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1608,7 +1596,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1618,7 +1605,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1628,7 +1614,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1638,7 +1623,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1876,15 +1860,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.772000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:24.772000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.382000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.382000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.772000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.382000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1977,7 +1961,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1987,7 +1970,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -1997,7 +1979,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2007,7 +1988,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2243,14 +2223,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.857000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.457000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.857000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.457000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2355,7 +2335,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2365,7 +2344,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2375,7 +2353,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2385,7 +2362,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2600,13 +2576,13 @@ SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:24.942000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.532000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:24.942000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.532000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2697,7 +2673,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2707,7 +2682,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2717,7 +2691,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2727,7 +2700,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -2910,14 +2882,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.018000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.018000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.593000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.593000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.018000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.593000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2996,7 +2968,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3006,7 +2977,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3016,7 +2986,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3026,7 +2995,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3245,15 +3213,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.111000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.111000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.668000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.668000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.111000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.668000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3346,7 +3314,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3356,7 +3323,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3366,7 +3332,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3376,7 +3341,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3662,8 +3626,8 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.187000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.187000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.729000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.729000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -3672,7 +3636,7 @@ START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.187000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.729000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3793,7 +3757,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3803,7 +3766,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3813,7 +3775,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -3823,7 +3784,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4081,14 +4041,14 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.253000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.785000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.253000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.785000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4193,7 +4153,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4203,7 +4162,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4213,7 +4171,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4223,7 +4180,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4438,13 +4394,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.315000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.837000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.315000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.837000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4535,7 +4491,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4545,7 +4500,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4555,7 +4509,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4565,7 +4518,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -4877,8 +4829,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.390000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.390000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.895000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.895000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -4888,7 +4840,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.390000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.895000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5023,7 +4975,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5033,7 +4984,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5043,7 +4993,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5053,7 +5002,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5288,15 +5236,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.454000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.454000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.947000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.947000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.454000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.947000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5389,7 +5337,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5399,7 +5346,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5409,7 +5355,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5419,7 +5364,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5641,15 +5585,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.519000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.519000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:18.998000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:18.998000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.519000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:18.998000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5742,7 +5686,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5752,7 +5695,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5762,7 +5704,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -5772,7 +5713,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6088,8 +6028,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.597000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.597000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.059000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.059000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6099,7 +6039,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.597000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.059000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6234,7 +6174,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6244,7 +6183,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6254,7 +6192,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6264,7 +6201,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6607,8 +6543,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.689000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.689000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.130000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.130000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6618,7 +6554,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.689000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.130000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6753,7 +6689,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6763,7 +6698,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6773,7 +6707,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -6783,7 +6716,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7023,15 +6955,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.755000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.755000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.186000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.186000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.755000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.186000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7124,7 +7056,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7134,7 +7065,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7144,7 +7074,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7154,7 +7083,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7394,14 +7322,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.829000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.247000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.829000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.247000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7506,7 +7434,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7516,7 +7443,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7526,7 +7452,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7536,7 +7461,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7756,13 +7680,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.906000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.307000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.906000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.307000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7853,7 +7777,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7863,7 +7786,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7873,7 +7795,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -7883,7 +7804,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8075,14 +7995,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:25.970000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:25.970000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.360000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.360000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:25.970000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.360000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8161,7 +8081,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8171,7 +8090,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8181,7 +8099,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8191,7 +8108,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8392,13 +8308,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.028000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.409000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.028000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.409000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8489,7 +8405,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8499,7 +8414,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8509,7 +8423,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8519,7 +8432,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8753,8 +8665,8 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.091000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.091000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.459000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.459000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -8762,7 +8674,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.091000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.459000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8869,7 +8781,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8879,7 +8790,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8889,7 +8799,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -8899,7 +8808,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9200,8 +9108,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.165000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.165000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.522000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.522000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -9209,8 +9117,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.165000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.165000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.522000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.522000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -9333,7 +9241,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9343,7 +9250,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9353,7 +9259,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9363,7 +9268,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9596,15 +9500,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.228000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.228000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.575000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.575000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.228000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.575000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9697,7 +9601,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9707,7 +9610,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9717,7 +9619,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9727,7 +9628,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -9958,15 +9858,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.292000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.292000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.627000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.627000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.292000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.292000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.627000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.627000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10061,7 +9961,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10071,7 +9970,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10081,7 +9979,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10091,7 +9988,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10329,15 +10225,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.357000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.357000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.683000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.683000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.357000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.357000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.683000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.683000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10432,7 +10328,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10442,7 +10337,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10452,7 +10346,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10462,7 +10355,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10730,16 +10622,16 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.423000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.423000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.742000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.742000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.423000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.423000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.742000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.742000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10848,7 +10740,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10858,7 +10749,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10868,7 +10758,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -10878,7 +10767,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11125,15 +11013,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.492000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.492000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.797000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.797000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.492000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.492000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.797000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.797000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11228,7 +11116,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11238,7 +11125,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11248,7 +11134,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11258,7 +11143,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11466,14 +11350,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.567000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.567000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.849000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.849000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.567000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.567000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.849000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.849000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11554,7 +11438,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11564,7 +11447,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11574,7 +11456,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11584,7 +11465,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11796,15 +11676,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.626000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.626000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.898000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.898000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.626000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.626000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.898000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.898000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -11899,7 +11779,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11909,7 +11788,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11919,7 +11797,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -11929,7 +11806,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12211,8 +12087,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.692000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.692000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:19.954000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:19.954000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12220,8 +12096,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.692000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.692000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:19.954000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:19.954000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12344,7 +12220,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12354,7 +12229,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12364,7 +12238,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12374,7 +12247,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12604,15 +12476,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.751000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.751000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:20.005000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:20.005000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.751000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:20.005000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -12705,7 +12577,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12715,7 +12586,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12725,7 +12595,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12735,7 +12604,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -12950,15 +12818,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.812000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.812000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:20.057000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:20.057000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.812000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.812000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:20.057000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:20.057000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -13053,7 +12921,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13063,7 +12930,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13073,7 +12939,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13083,7 +12948,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13305,15 +13169,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.875000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.875000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:20.111000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:20.111000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.875000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.875000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:20.111000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:20.111000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -13408,7 +13272,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13418,7 +13281,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13428,7 +13290,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13438,7 +13299,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13630,14 +13490,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-12-07T16:05:26.931000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-12-07T16:05:26.931000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2026-01-05T11:33:20.160000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2026-01-05T11:33:20.160000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-12-07T16:05:26.931000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-12-07T16:05:26.931000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2026-01-05T11:33:20.160000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2026-01-05T11:33:20.160000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -13718,7 +13578,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0s'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13728,7 +13587,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ms'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13738,7 +13596,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0us'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; @@ -13748,7 +13605,6 @@ SHOW VARIABLE STATEMENT_TIMEOUT; SET STATEMENT_TIMEOUT=DEFAULT; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; -@EXPECT EXCEPTION INVALID_ARGUMENT SET STATEMENT_TIMEOUT='0ns'; @EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0' SHOW VARIABLE STATEMENT_TIMEOUT; diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/jmh/jmh-baseline.json b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/jmh/jmh-baseline.json new file mode 100644 index 00000000000..fc05eb0016a --- /dev/null +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/jmh/jmh-baseline.json @@ -0,0 +1,22 @@ +{ + "benchmarkResultMap": { + "com.google.cloud.spanner.benchmarking.ReadBenchmark.queryBenchmark": { + "scorePercentiles": [ + { + "percentile": "50.0", + "baseline": "450", + "difference": "20" + } + ] + }, + "com.google.cloud.spanner.benchmarking.ReadBenchmark.readBenchmark": { + "scorePercentiles": [ + { + "percentile": "50.0", + "baseline": "450", + "difference": "20" + } + ] + } + } +} \ No newline at end of file diff --git a/google-cloud-spanner/src/test/resources/finder_test.textproto b/google-cloud-spanner/src/test/resources/finder_test.textproto new file mode 100644 index 00000000000..5747c2aee0e --- /dev/null +++ b/google-cloud-spanner/src/test/resources/finder_test.textproto @@ -0,0 +1,10078 @@ +test_case { + name: "AllRows" + event { + name: "AllRows/0" + read { + session: "instances/default/databases/db15/sessions/Cj3BBOeD1dP3S66wHZkO00_A5Jv6pRbjR4ox3cktXTOs5bpIgRwIx6bn_QihOEOGGUqEAKU3o9rP5qcqhem-EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + all: true + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099527356417 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "AllRows/2" + read { + session: "instances/default/databases/db15/sessions/Cj3BBOeD1dP3S66wHZkO00_A5Jv6pRbjR4ox3cktXTOs5bpIgRwIx6bn_QihOEOGGUqEAKU3o9rP5qcqhem-EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + all: true + } + } + hint { + operation_uid: 1 + database_id: 1099527356417 + schema_generation: "\001\001" + key: "A\206\310\002" + limit_key: "A\206\310\003" + } + } + event { + cache_update { + database_id: 1099527356417 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 155189249 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\364\207l" + } + group { + group_uid: 155189249 + tablets { + tablet_uid: 155189249 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\265" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t@\000\001" + } + key_recipes { + } + } + } + event { + name: "AllRows/4" + read { + session: "instances/default/databases/db15/sessions/Cj3BBOeD1dP3S66wHZkO00_A5Jv6pRbjR4ox3cktXTOs5bpIgRwIx6bn_QihOEOGGUqEAKU3o9rP5qcqhem-EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + all: true + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099527356417 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 155189249 + split_id: 14079378335067013120 + tablet_uid: 155189249 + } + } + event { + cache_update { + database_id: 1099527356417 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 155189249 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\366E\014" + } + group { + group_uid: 155189249 + tablets { + tablet_uid: 155189249 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\265" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t@\000\001" + } + key_recipes { + } + } + } + event { + name: "AllRows/6" + read { + session: "instances/default/databases/db15/sessions/Cj3BBOeD1dP3S66wHZkO00_A5Jv6pRbjR4ox3cktXTOs5bpIgRwIx6bn_QihOEOGGUqEAKU3o9rP5qcqhem-EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + all: true + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099527356417 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 155189249 + split_id: 14079378335067013120 + tablet_uid: 155189249 + } + } + event { + cache_update { + database_id: 1099527356417 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 155189249 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\366E\014" + } + group { + group_uid: 155189249 + tablets { + tablet_uid: 155189249 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\265" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t@\000\001" + } + key_recipes { + } + } + } +} +test_case { + name: "AllRows_Query" + event { + name: "AllRows_Query/0" + sql { + session: "instances/default/databases/db32/sessions/Cj0GojmEGR2hztX-uM5PHIWlsxPJCNXlqv0WGEwJaEEpQqxxDMvCPcsOzBlvYwUvgBO4B612WcYmbOzYYH8WEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T" + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099546230785 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 2 + } + } + } + } + } + event { + name: "AllRows_Query/2" + sql { + session: "instances/default/databases/db32/sessions/Cj0GojmEGR2hztX-uM5PHIWlsxPJCNXlqv0WGEwJaEEpQqxxDMvCPcsOzBlvYwUvgBO4B612WcYmbOzYYH8WEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T" + } + hint { + operation_uid: 1 + database_id: 1099546230785 + schema_generation: "\001\001" + key: "A\206\310\004" + } + } + event { + cache_update { + database_id: 1099546230785 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 277872641 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326\250#\026" + } + group { + group_uid: 277872641 + tablets { + tablet_uid: 277872641 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001\177" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\020\220\000\001" + } + key_recipes { + } + } + } + event { + name: "AllRows_Query/4" + sql { + session: "instances/default/databases/db32/sessions/Cj0GojmEGR2hztX-uM5PHIWlsxPJCNXlqv0WGEwJaEEpQqxxDMvCPcsOzBlvYwUvgBO4B612WcYmbOzYYH8WEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T" + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099546230785 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 277872641 + split_id: 14079378335067013120 + tablet_uid: 277872641 + } + } + event { + cache_update { + database_id: 1099546230785 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 277872641 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326\257X\261" + } + group { + group_uid: 277872641 + tablets { + tablet_uid: 277872641 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001\177" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\020\220\000\001" + } + key_recipes { + } + } + } + event { + name: "AllRows_Query/6" + sql { + session: "instances/default/databases/db32/sessions/Cj0GojmEGR2hztX-uM5PHIWlsxPJCNXlqv0WGEwJaEEpQqxxDMvCPcsOzBlvYwUvgBO4B612WcYmbOzYYH8WEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T" + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099546230785 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 277872641 + split_id: 14079378335067013120 + tablet_uid: 277872641 + } + } +} +test_case { + name: "DropDatabase" + event { + name: "DropDatabase/0" + read { + session: "instances/default/databases/db7/sessions/Cj0YdZkOhi1oPNIoTSIFvWggN4HPXnkgZ4pK1NcGXTEeUw8Fr-dTnvFKAeldTUxyzt1zTToerCe3T6XkSgAJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099517919233 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "DropDatabase/2" + read { + session: "instances/default/databases/db7/sessions/Cj0YdZkOhi1oPNIoTSIFvWggN4HPXnkgZ4pK1NcGXTEeUw8Fr-dTnvFKAeldTUxyzt1zTToerCe3T6XkSgAJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099517919233 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099517919233 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 95420417 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\314\260\211\000" + } + group { + group_uid: 95420417 + tablets { + tablet_uid: 95420417 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001r" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\005\260\000\001" + } + key_recipes { + } + } + } + event { + name: "DropDatabase/4" + read { + session: "instances/default/databases/db7/sessions/Cj0YdZkOhi1oPNIoTSIFvWggN4HPXnkgZ4pK1NcGXTEeUw8Fr-dTnvFKAeldTUxyzt1zTToerCe3T6XkSgAJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099517919233 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 95420417 + split_id: 14079378335067013120 + tablet_uid: 95420417 + } + } + event { + cache_update { + database_id: 1099517919233 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 95420417 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\314\267\020%" + } + group { + group_uid: 95420417 + tablets { + tablet_uid: 95420417 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001r" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\005\260\000\001" + } + key_recipes { + } + } + } + event { + name: "DropDatabase/6" + read { + session: "instances/default/databases/db7/sessions/Cj0YdZkOhi1oPNIoTSIFvWggN4HPXnkgZ4pK1NcGXTEeUw8Fr-dTnvFKAeldTUxyzt1zTToerCe3T6XkSgAJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099517919233 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 95420417 + split_id: 14079378335067013120 + tablet_uid: 95420417 + } + } + event { + name: "DropDatabase/7" + read { + session: "instances/default/databases/db7/sessions/Cj0YdZkOhi1oPNIoTSIFvWggN4HPXnkgZ4pK1NcGXTEeUw8Fr-dTnvFKAeldTUxyzt1zTToerCe3T6XkSgAJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099517919233 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 95420417 + split_id: 14079378335067013120 + tablet_uid: 95420417 + } + } + event { + name: "DropDatabase/8" + read { + session: "instances/default/databases/db7/sessions/Cj3TKzdKJxZRjiCmu4-t34VAf6hJX0jtVFwD_4r02LGDLemFeajxEvbL5uJRGI6n2tkzh90z28eBtGG4VMcoEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099517919233 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 95420417 + split_id: 14079378335067013120 + tablet_uid: 95420417 + } + } + event { + cache_update { + database_id: 1099518967809 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 101711873 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\316\230\264\322" + } + group { + group_uid: 101711873 + tablets { + tablet_uid: 101711873 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\201" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\006\020\000\001" + } + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "DropDatabase/10" + read { + session: "instances/default/databases/db7/sessions/Cj3TKzdKJxZRjiCmu4-t34VAf6hJX0jtVFwD_4r02LGDLemFeajxEvbL5uJRGI6n2tkzh90z28eBtGG4VMcoEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 2 + database_id: 1099518967809 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 101711873 + split_id: 14079378335067013120 + tablet_uid: 101711873 + } + } +} +test_case { + name: "DropDatabase_Query" + event { + name: "DropDatabase_Query/0" + sql { + session: "instances/default/databases/db24/sessions/CjzqkvN0XqNJI9149yzUSwfsCokOLsnhmDF8xt_O6U8cnWNvs1yXG4IZ_F3eDa-dooydAR1kFmsJuKR2MSQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099536793601 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "DropDatabase_Query/2" + sql { + session: "instances/default/databases/db24/sessions/CjzqkvN0XqNJI9149yzUSwfsCokOLsnhmDF8xt_O6U8cnWNvs1yXG4IZ_F3eDa-dooydAR1kFmsJuKR2MSQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099536793601 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099536793601 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 218103809 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\323T\204\035" + } + group { + group_uid: 218103809 + tablets { + tablet_uid: 218103809 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001<" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\r\000\000\001" + } + key_recipes { + } + } + } + event { + name: "DropDatabase_Query/4" + sql { + session: "instances/default/databases/db24/sessions/CjzqkvN0XqNJI9149yzUSwfsCokOLsnhmDF8xt_O6U8cnWNvs1yXG4IZ_F3eDa-dooydAR1kFmsJuKR2MSQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099536793601 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 218103809 + split_id: 14079378335067013120 + tablet_uid: 218103809 + } + } + event { + cache_update { + database_id: 1099536793601 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 218103809 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\323T\204\035" + } + group { + group_uid: 218103809 + tablets { + tablet_uid: 218103809 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001<" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\r\000\000\001" + } + key_recipes { + } + } + } + event { + name: "DropDatabase_Query/6" + sql { + session: "instances/default/databases/db24/sessions/CjzqkvN0XqNJI9149yzUSwfsCokOLsnhmDF8xt_O6U8cnWNvs1yXG4IZ_F3eDa-dooydAR1kFmsJuKR2MSQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099536793601 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 218103809 + split_id: 14079378335067013120 + tablet_uid: 218103809 + } + } + event { + name: "DropDatabase_Query/7" + sql { + session: "instances/default/databases/db24/sessions/CjzqkvN0XqNJI9149yzUSwfsCokOLsnhmDF8xt_O6U8cnWNvs1yXG4IZ_F3eDa-dooydAR1kFmsJuKR2MSQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099536793601 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 218103809 + split_id: 14079378335067013120 + tablet_uid: 218103809 + } + } + event { + name: "DropDatabase_Query/8" + sql { + session: "instances/default/databases/db24/sessions/Cj1CH8Frp6VtAXaqx0Y5Fzu4KF_6PgC0lDACO5O72-XqeiRXqDXIKo2L7jDSwWFe-x0k3b7v-OtJeJ2t-j5CEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099536793601 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 218103809 + split_id: 14079378335067013120 + tablet_uid: 218103809 + } + } + event { + cache_update { + database_id: 1099537842177 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 224395265 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\3258X\350" + } + group { + group_uid: 224395265 + tablets { + tablet_uid: 224395265 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001K" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\r`\000\001" + } + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "DropDatabase_Query/10" + sql { + session: "instances/default/databases/db24/sessions/Cj1CH8Frp6VtAXaqx0Y5Fzu4KF_6PgC0lDACO5O72-XqeiRXqDXIKo2L7jDSwWFe-x0k3b7v-OtJeJ2t-j5CEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 2 + database_id: 1099537842177 + schema_generation: "\001\001" + } + } + event { + cache_update { + database_id: 1099537842177 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 2 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "DropDatabase_Query/12" + sql { + session: "instances/default/databases/db24/sessions/Cj1CH8Frp6VtAXaqx0Y5Fzu4KF_6PgC0lDACO5O72-XqeiRXqDXIKo2L7jDSwWFe-x0k3b7v-OtJeJ2t-j5CEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 2 + database_id: 1099537842177 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 224395265 + split_id: 14079378335067013120 + tablet_uid: 224395265 + } + } +} +test_case { + name: "DropTable" + event { + name: "DropTable/0" + read { + session: "instances/default/databases/db6/sessions/Cjzdj2emR5Db0EijIRbqxYXobPqHRRjWoXCeGyYAUU45Q8eaxOgVRwqLfrWMjgE7RsVjd1MExsPuARm0k1QQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099516870657 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "DropTable/2" + read { + session: "instances/default/databases/db6/sessions/Cjzdj2emR5Db0EijIRbqxYXobPqHRRjWoXCeGyYAUU45Q8eaxOgVRwqLfrWMjgE7RsVjd1MExsPuARm0k1QQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099516870657 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099516870657 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 94371841 + split_id: 14079378335067013121 + generation: "\007\006C\314\314-\203[\007\006C\314\314-\217F" + } + group { + group_uid: 94371841 + tablets { + tablet_uid: 94371841 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\001p" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\005\240\000\001" + } + key_recipes { + } + } + } + event { + name: "DropTable/4" + read { + session: "instances/default/databases/db6/sessions/Cjzdj2emR5Db0EijIRbqxYXobPqHRRjWoXCeGyYAUU45Q8eaxOgVRwqLfrWMjgE7RsVjd1MExsPuARm0k1QQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099516870657 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 94371841 + split_id: 14079378335067013121 + tablet_uid: 94371841 + } + } + event { + name: "DropTable/5" + read { + session: "instances/default/databases/db6/sessions/Cjzdj2emR5Db0EijIRbqxYXobPqHRRjWoXCeGyYAUU45Q8eaxOgVRwqLfrWMjgE7RsVjd1MExsPuARm0k1QQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099516870657 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 94371841 + split_id: 14079378335067013121 + tablet_uid: 94371841 + } + } + event { + name: "DropTable/6" + read { + session: "instances/default/databases/db6/sessions/Cjzdj2emR5Db0EijIRbqxYXobPqHRRjWoXCeGyYAUU45Q8eaxOgVRwqLfrWMjgE7RsVjd1MExsPuARm0k1QQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099516870657 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 94371841 + split_id: 14079378335067013121 + tablet_uid: 94371841 + } + } +} +test_case { + name: "DropTable_Query" + event { + name: "DropTable_Query/0" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099535745025 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "DropTable_Query/2" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099535745025 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099535745025 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 216006657 + split_id: 14079378335067013121 + generation: "\007\006C\314\322\316\342\373\007\006C\314\322\317\n\241" + } + group { + group_uid: 216006657 + tablets { + tablet_uid: 216006657 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001:" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014\340\000\001" + } + key_recipes { + } + } + } + event { + name: "DropTable_Query/4" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099535745025 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 216006657 + split_id: 14079378335067013121 + tablet_uid: 216006657 + } + } + event { + cache_update { + database_id: 1099535745025 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 216006657 + split_id: 14079378335067013121 + generation: "\007\006C\314\322\316\342\373\007\006C\314\322\323Z\315" + } + group { + group_uid: 216006657 + tablets { + tablet_uid: 216006657 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001:" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014\340\000\001" + } + key_recipes { + } + } + } + event { + name: "DropTable_Query/6" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099535745025 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 216006657 + split_id: 14079378335067013121 + tablet_uid: 216006657 + } + } + event { + name: "DropTable_Query/7" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099535745025 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 216006657 + split_id: 14079378335067013121 + tablet_uid: 216006657 + } + } + event { + name: "DropTable_Query/8" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099535745025 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 216006657 + split_id: 14079378335067013121 + tablet_uid: 216006657 + } + } + event { + cache_update { + database_id: 1099535745025 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 216006657 + split_id: 14079378335067013121 + generation: "\007\006C\314\322\316\342\373\007\006C\314\322\323Z\315" + } + group { + group_uid: 216006657 + tablets { + tablet_uid: 216006657 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001:" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014\340\000\001" + } + key_recipes { + schema_generation: "\001\003" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 3 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "key" + } + } + } + } + } + event { + name: "DropTable_Query/10" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099535745025 + schema_generation: "\001\003" + key: "A\206\310\006\234\221\000" + } + } + event { + cache_update { + database_id: 1099535745025 + range { + start_key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 217055233 + split_id: 14079378335067013121 + generation: "\007\006C\314\322\316\342\373\007\006C\314\322\317\n\241" + } + group { + group_uid: 217055233 + tablets { + tablet_uid: 217055233 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001;" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014\360\000\001" + } + key_recipes { + } + } + } + event { + name: "DropTable_Query/12" + sql { + session: "instances/default/databases/db23/sessions/CjwOqvrExRJDRJJdVo2gAssby75h0g7V10Y5ZxDHqv0YeWUWDGwTfharjGH6t73iqG5m4GXUfjpkqQRVPxsQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099535745025 + schema_generation: "\001\003" + key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 217055233 + split_id: 14079378335067013121 + tablet_uid: 217055233 + } + } +} +test_case { + name: "GlobalIndex" + event { + name: "GlobalIndex/0" + read { + session: "instances/default/databases/db10/sessions/Cj2SfZKLzB4nnXuwwI1VKvjUXXTrygu1niE6w4W-OXraTsmoOUubuN4wizbc455aTUR5zoNDXT1KipdeF64TEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + index: "GlobalIndex" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0_0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099522113537 + key_recipes { + schema_generation: "\001\001" + recipe { + index_name: "GlobalIndex" + part { + tag: 50020 + } + part { + tag: 2 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "V0" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "GlobalIndex/2" + read { + session: "instances/default/databases/db10/sessions/Cj2SfZKLzB4nnXuwwI1VKvjUXXTrygu1niE6w4W-OXraTsmoOUubuN4wizbc455aTUR5zoNDXT1KipdeF64TEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + index: "GlobalIndex" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0_0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099522113537 + schema_generation: "\001\001" + key: "A\206\310\004\234\2310_0\000x" + limit_key: "A\206\310\004\234\2310_0\000y" + } + } + event { + cache_update { + database_id: 1099522113537 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 121634817 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317<\276\306" + } + group { + group_uid: 121634817 + tablets { + tablet_uid: 121634817 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\223" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\007@\000\001" + } + key_recipes { + } + } + } + event { + name: "GlobalIndex/4" + read { + session: "instances/default/databases/db10/sessions/Cj2SfZKLzB4nnXuwwI1VKvjUXXTrygu1niE6w4W-OXraTsmoOUubuN4wizbc455aTUR5zoNDXT1KipdeF64TEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + index: "GlobalIndex" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0_0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099522113537 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 121634817 + split_id: 14079378335067013120 + tablet_uid: 121634817 + } + } + event { + cache_update { + database_id: 1099522113537 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 121634817 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317>\330]" + } + group { + group_uid: 121634817 + tablets { + tablet_uid: 121634817 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\223" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\007@\000\001" + } + key_recipes { + } + } + } + event { + name: "GlobalIndex/6" + read { + session: "instances/default/databases/db10/sessions/Cj2SfZKLzB4nnXuwwI1VKvjUXXTrygu1niE6w4W-OXraTsmoOUubuN4wizbc455aTUR5zoNDXT1KipdeF64TEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + index: "GlobalIndex" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0_0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099522113537 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 121634817 + split_id: 14079378335067013120 + tablet_uid: 121634817 + } + } +} +test_case { + name: "GlobalIndex_Query" + event { + name: "GlobalIndex_Query/0" + sql { + session: "instances/default/databases/db27/sessions/Cj2j_zqkXN2mCtkbuUA7him868HfGm0ISHxO8OVhF7BawzQduQQE91KOAhYjolCxMK25z5Pkkss_6mBFsl6EEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=GlobalIndex} WHERE V0 = @v0" + params { + fields { + key: "v0" + value { + string_value: "0_0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099540987905 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 2 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "v0" + } + } + } + } + } + event { + name: "GlobalIndex_Query/2" + sql { + session: "instances/default/databases/db27/sessions/Cj2j_zqkXN2mCtkbuUA7him868HfGm0ISHxO8OVhF7BawzQduQQE91KOAhYjolCxMK25z5Pkkss_6mBFsl6EEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=GlobalIndex} WHERE V0 = @v0" + params { + fields { + key: "v0" + value { + string_value: "0_0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099540987905 + schema_generation: "\001\001" + key: "A\206\310\004\234\2310_0\000x" + } + } + event { + cache_update { + database_id: 1099540987905 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 244318209 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\325\373\036\334" + } + group { + group_uid: 244318209 + tablets { + tablet_uid: 244318209 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001_" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\016\220\000\001" + } + key_recipes { + } + } + } + event { + name: "GlobalIndex_Query/4" + sql { + session: "instances/default/databases/db27/sessions/Cj2j_zqkXN2mCtkbuUA7him868HfGm0ISHxO8OVhF7BawzQduQQE91KOAhYjolCxMK25z5Pkkss_6mBFsl6EEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=GlobalIndex} WHERE V0 = @v0" + params { + fields { + key: "v0" + value { + string_value: "0_0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099540987905 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 244318209 + split_id: 14079378335067013120 + tablet_uid: 244318209 + } + } + event { + cache_update { + database_id: 1099540987905 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 244318209 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\325\375\"\r" + } + group { + group_uid: 244318209 + tablets { + tablet_uid: 244318209 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001_" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\016\220\000\001" + } + key_recipes { + } + } + } + event { + name: "GlobalIndex_Query/6" + sql { + session: "instances/default/databases/db27/sessions/Cj2j_zqkXN2mCtkbuUA7him868HfGm0ISHxO8OVhF7BawzQduQQE91KOAhYjolCxMK25z5Pkkss_6mBFsl6EEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=GlobalIndex} WHERE V0 = @v0" + params { + fields { + key: "v0" + value { + string_value: "0_0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099540987905 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 244318209 + split_id: 14079378335067013120 + tablet_uid: 244318209 + } + } +} +test_case { + name: "GroupDeletion" + event { + name: "GroupDeletion/0" + read { + session: "instances/default/databases/db8/sessions/Cj2YTJ4-liCil_CTp2ldntWNe-Q1moGC2WmQds4wCmJl2G_XJKUi8wMd616zuX9h7ru-dDid2i4ez_62VO_FEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099520016385 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "GroupDeletion/2" + read { + session: "instances/default/databases/db8/sessions/Cj2YTJ4-liCil_CTp2ldntWNe-Q1moGC2WmQds4wCmJl2G_XJKUi8wMd616zuX9h7ru-dDid2i4ez_62VO_FEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099520016385 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099520016385 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 108003329 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\316\247-E" + } + group { + group_uid: 108003329 + tablets { + tablet_uid: 108003329 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\204" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\006p\000\001" + } + key_recipes { + } + } + } + event { + name: "GroupDeletion/4" + read { + session: "instances/default/databases/db8/sessions/Cj2YTJ4-liCil_CTp2ldntWNe-Q1moGC2WmQds4wCmJl2G_XJKUi8wMd616zuX9h7ru-dDid2i4ez_62VO_FEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099520016385 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 108003329 + split_id: 14079378335067013120 + tablet_uid: 108003329 + } + } + event { + cache_update { + database_id: 1099520016385 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 108003329 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\316\250\241\234" + } + group { + group_uid: 108003329 + tablets { + tablet_uid: 108003329 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\204" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\006p\000\001" + } + key_recipes { + } + } + } + event { + name: "GroupDeletion/6" + read { + session: "instances/default/databases/db8/sessions/Cj2YTJ4-liCil_CTp2ldntWNe-Q1moGC2WmQds4wCmJl2G_XJKUi8wMd616zuX9h7ru-dDid2i4ez_62VO_FEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099520016385 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 108003329 + split_id: 14079378335067013120 + tablet_uid: 108003329 + } + } + event { + name: "GroupDeletion/7" + read { + session: "instances/default/databases/db8/sessions/Cj2YTJ4-liCil_CTp2ldntWNe-Q1moGC2WmQds4wCmJl2G_XJKUi8wMd616zuX9h7ru-dDid2i4ez_62VO_FEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099520016385 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 108003329 + split_id: 14079378335067013120 + tablet_uid: 108003329 + } + } + event { + cache_update { + database_id: 1099520016385 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 114294785 + split_id: 14079378335067013124 + generation: "\007\006C\314\316\271~\231\007\006C\314\317\017\371\343" + } + group { + group_uid: 114294785 + tablets { + tablet_uid: 114294785 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\212" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\006\320\000\001" + } + key_recipes { + } + } + } + event { + name: "GroupDeletion/9" + read { + session: "instances/default/databases/db8/sessions/Cj2YTJ4-liCil_CTp2ldntWNe-Q1moGC2WmQds4wCmJl2G_XJKUi8wMd616zuX9h7ru-dDid2i4ez_62VO_FEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099520016385 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 114294785 + split_id: 14079378335067013124 + tablet_uid: 114294785 + } + } +} +test_case { + name: "GroupDeletion_Query" + event { + name: "GroupDeletion_Query/0" + sql { + session: "instances/default/databases/db25/sessions/CjzwZvNAsqeeS_4WyWSRcOTXyaGjdp8zV4mkj3qDu34yD2oxUb_znww6xxRwktfRVvNjgx_H0XP2um8W4WUQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099538890753 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "GroupDeletion_Query/2" + sql { + session: "instances/default/databases/db25/sessions/CjzwZvNAsqeeS_4WyWSRcOTXyaGjdp8zV4mkj3qDu34yD2oxUb_znww6xxRwktfRVvNjgx_H0XP2um8W4WUQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099538890753 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099538890753 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 230686721 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\325I\301\354" + } + group { + group_uid: 230686721 + tablets { + tablet_uid: 230686721 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001S" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\r\300\000\001" + } + key_recipes { + } + } + } + event { + name: "GroupDeletion_Query/4" + sql { + session: "instances/default/databases/db25/sessions/CjzwZvNAsqeeS_4WyWSRcOTXyaGjdp8zV4mkj3qDu34yD2oxUb_znww6xxRwktfRVvNjgx_H0XP2um8W4WUQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099538890753 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 230686721 + split_id: 14079378335067013120 + tablet_uid: 230686721 + } + } + event { + cache_update { + database_id: 1099538890753 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 230686721 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\325L\365\363" + } + group { + group_uid: 230686721 + tablets { + tablet_uid: 230686721 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001S" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\r\300\000\001" + } + key_recipes { + } + } + } + event { + name: "GroupDeletion_Query/6" + sql { + session: "instances/default/databases/db25/sessions/CjzwZvNAsqeeS_4WyWSRcOTXyaGjdp8zV4mkj3qDu34yD2oxUb_znww6xxRwktfRVvNjgx_H0XP2um8W4WUQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099538890753 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 230686721 + split_id: 14079378335067013120 + tablet_uid: 230686721 + } + } + event { + name: "GroupDeletion_Query/7" + sql { + session: "instances/default/databases/db25/sessions/CjzwZvNAsqeeS_4WyWSRcOTXyaGjdp8zV4mkj3qDu34yD2oxUb_znww6xxRwktfRVvNjgx_H0XP2um8W4WUQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099538890753 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 230686721 + split_id: 14079378335067013120 + tablet_uid: 230686721 + } + } + event { + cache_update { + database_id: 1099538890753 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 236978177 + split_id: 14079378335067013124 + generation: "\007\006C\314\325]\371r\007\006C\314\325\264y\234" + } + group { + group_uid: 236978177 + tablets { + tablet_uid: 236978177 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001V" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\016 \000\001" + } + key_recipes { + } + } + } + event { + name: "GroupDeletion_Query/9" + sql { + session: "instances/default/databases/db25/sessions/CjzwZvNAsqeeS_4WyWSRcOTXyaGjdp8zV4mkj3qDu34yD2oxUb_znww6xxRwktfRVvNjgx_H0XP2um8W4WUQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099538890753 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 236978177 + split_id: 14079378335067013124 + tablet_uid: 236978177 + } + } +} +test_case { + name: "Interleaved" + event { + name: "Interleaved/0" + read { + session: "instances/default/databases/db9/sessions/Cj159oUqLBjvyJBqNYV0pPwVz-a8ZuI6RNL-8C27MFNJ3faQKqSyzmgAttt98quBLgzWI-Z7RZAVzB2-RLz1EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "1" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099521064961 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "Interleaved" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + part { + tag: 5 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "Key2" + } + } + } + } + } + event { + name: "Interleaved/2" + read { + session: "instances/default/databases/db9/sessions/Cj159oUqLBjvyJBqNYV0pPwVz-a8ZuI6RNL-8C27MFNJ3faQKqSyzmgAttt98quBLgzWI-Z7RZAVzB2-RLz1EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "1" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099521064961 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x\n\234\221\002" + } + } + event { + cache_update { + database_id: 1099521064961 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 115343361 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\"1\357" + } + group { + group_uid: 115343361 + tablets { + tablet_uid: 115343361 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\213" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\006\340\000\001" + } + key_recipes { + } + } + } + event { + name: "Interleaved/4" + read { + session: "instances/default/databases/db9/sessions/Cj159oUqLBjvyJBqNYV0pPwVz-a8ZuI6RNL-8C27MFNJ3faQKqSyzmgAttt98quBLgzWI-Z7RZAVzB2-RLz1EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "1" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099521064961 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 115343361 + split_id: 14079378335067013120 + tablet_uid: 115343361 + } + } + event { + cache_update { + database_id: 1099521064961 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 115343361 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317$\325\264" + } + group { + group_uid: 115343361 + tablets { + tablet_uid: 115343361 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\213" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\006\340\000\001" + } + key_recipes { + } + } + } + event { + name: "Interleaved/6" + read { + session: "instances/default/databases/db9/sessions/Cj159oUqLBjvyJBqNYV0pPwVz-a8ZuI6RNL-8C27MFNJ3faQKqSyzmgAttt98quBLgzWI-Z7RZAVzB2-RLz1EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "1" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099521064961 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 115343361 + split_id: 14079378335067013120 + tablet_uid: 115343361 + } + } +} +test_case { + name: "Interleaved_Query" + event { + name: "Interleaved_Query/0" + sql { + session: "instances/default/databases/db26/sessions/CjwmKo7LqIFOF3-EZMw7pN1t5FHbWltIzxNurAxOo4YsPhpFVXTxgna7VKVy7lRt0OLwuunlyBtMuQwEtrkQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved WHERE Key = @k AND Key2 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "1" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099539939329 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + } + } + event { + name: "Interleaved_Query/2" + sql { + session: "instances/default/databases/db26/sessions/CjwmKo7LqIFOF3-EZMw7pN1t5FHbWltIzxNurAxOo4YsPhpFVXTxgna7VKVy7lRt0OLwuunlyBtMuQwEtrkQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved WHERE Key = @k AND Key2 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "1" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099539939329 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099539939329 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 238026753 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\325\326%\352" + } + group { + group_uid: 238026753 + tablets { + tablet_uid: 238026753 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001X" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\0160\000\001" + } + key_recipes { + } + } + } + event { + name: "Interleaved_Query/4" + sql { + session: "instances/default/databases/db26/sessions/CjwmKo7LqIFOF3-EZMw7pN1t5FHbWltIzxNurAxOo4YsPhpFVXTxgna7VKVy7lRt0OLwuunlyBtMuQwEtrkQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved WHERE Key = @k AND Key2 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "1" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099539939329 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 238026753 + split_id: 14079378335067013120 + tablet_uid: 238026753 + } + } + event { + cache_update { + database_id: 1099539939329 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 238026753 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\325\335\2640" + } + group { + group_uid: 238026753 + tablets { + tablet_uid: 238026753 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001X" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\0160\000\001" + } + key_recipes { + } + } + } + event { + name: "Interleaved_Query/6" + sql { + session: "instances/default/databases/db26/sessions/CjwmKo7LqIFOF3-EZMw7pN1t5FHbWltIzxNurAxOo4YsPhpFVXTxgna7VKVy7lRt0OLwuunlyBtMuQwEtrkQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved WHERE Key = @k AND Key2 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "1" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099539939329 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 238026753 + split_id: 14079378335067013120 + tablet_uid: 238026753 + } + } +} +test_case { + name: "LocalIndex" + event { + name: "LocalIndex/0" + read { + session: "instances/default/databases/db11/sessions/Cj3NnaSUOiCKsnC8U3zeivYI8gzlBVS8qGYPTllITW3XwUhaR_wRK0U54FmFFaV3e3_aq2SgWEvGuKldsQaUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + index: "LocalIndex" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "0_1_4" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099523162113 + key_recipes { + schema_generation: "\001\001" + recipe { + index_name: "LocalIndex" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + part { + tag: 6 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "V4" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "Key2" + } + } + } + } + } + event { + name: "LocalIndex/2" + read { + session: "instances/default/databases/db11/sessions/Cj3NnaSUOiCKsnC8U3zeivYI8gzlBVS8qGYPTllITW3XwUhaR_wRK0U54FmFFaV3e3_aq2SgWEvGuKldsQaUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + index: "LocalIndex" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "0_1_4" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099523162113 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x\014\234\2310_1_4\000x" + limit_key: "A\206\310\002\234\2310\000x\014\234\2310_1_4\000y" + } + } + event { + cache_update { + database_id: 1099523162113 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 127926273 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317Q\246\337" + } + group { + group_uid: 127926273 + tablets { + tablet_uid: 127926273 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\230" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\007\240\000\001" + } + key_recipes { + } + } + } + event { + name: "LocalIndex/4" + read { + session: "instances/default/databases/db11/sessions/Cj3NnaSUOiCKsnC8U3zeivYI8gzlBVS8qGYPTllITW3XwUhaR_wRK0U54FmFFaV3e3_aq2SgWEvGuKldsQaUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + index: "LocalIndex" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "0_1_4" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099523162113 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 127926273 + split_id: 14079378335067013120 + tablet_uid: 127926273 + } + } + event { + cache_update { + database_id: 1099523162113 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 127926273 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317W\220p" + } + group { + group_uid: 127926273 + tablets { + tablet_uid: 127926273 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\230" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\007\240\000\001" + } + key_recipes { + } + } + } + event { + name: "LocalIndex/6" + read { + session: "instances/default/databases/db11/sessions/Cj3NnaSUOiCKsnC8U3zeivYI8gzlBVS8qGYPTllITW3XwUhaR_wRK0U54FmFFaV3e3_aq2SgWEvGuKldsQaUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + index: "LocalIndex" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "0_1_4" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099523162113 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 127926273 + split_id: 14079378335067013120 + tablet_uid: 127926273 + } + } +} +test_case { + name: "LocalIndex_Query" + event { + name: "LocalIndex_Query/0" + sql { + session: "instances/default/databases/db28/sessions/CjzP21cJKRNtIN_GWjr6wiMTSt8dYLIfFJy3h4u1li9PDKDHfIZN3YU1zJMe5FZ7DlnXumM88ezT_abQ4cIQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved@{FORCE_INDEX=LocalIndex} WHERE Key = @k AND V4 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "0_1_4" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099542036481 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + } + } + event { + name: "LocalIndex_Query/2" + sql { + session: "instances/default/databases/db28/sessions/CjzP21cJKRNtIN_GWjr6wiMTSt8dYLIfFJy3h4u1li9PDKDHfIZN3YU1zJMe5FZ7DlnXumM88ezT_abQ4cIQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved@{FORCE_INDEX=LocalIndex} WHERE Key = @k AND V4 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "0_1_4" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099542036481 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099542036481 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 250609665 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326\020^\316" + } + group { + group_uid: 250609665 + tablets { + tablet_uid: 250609665 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001d" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\016\360\000\001" + } + key_recipes { + } + } + } + event { + name: "LocalIndex_Query/4" + sql { + session: "instances/default/databases/db28/sessions/CjzP21cJKRNtIN_GWjr6wiMTSt8dYLIfFJy3h4u1li9PDKDHfIZN3YU1zJMe5FZ7DlnXumM88ezT_abQ4cIQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved@{FORCE_INDEX=LocalIndex} WHERE Key = @k AND V4 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "0_1_4" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099542036481 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 250609665 + split_id: 14079378335067013120 + tablet_uid: 250609665 + } + } + event { + cache_update { + database_id: 1099542036481 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 250609665 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326\022\344\366" + } + group { + group_uid: 250609665 + tablets { + tablet_uid: 250609665 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001d" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\016\360\000\001" + } + key_recipes { + } + } + } + event { + name: "LocalIndex_Query/6" + sql { + session: "instances/default/databases/db28/sessions/CjzP21cJKRNtIN_GWjr6wiMTSt8dYLIfFJy3h4u1li9PDKDHfIZN3YU1zJMe5FZ7DlnXumM88ezT_abQ4cIQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved@{FORCE_INDEX=LocalIndex} WHERE Key = @k AND V4 = @k2" + params { + fields { + key: "k" + value { + string_value: "0" + } + } + fields { + key: "k2" + value { + string_value: "0_1_4" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099542036481 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 250609665 + split_id: 14079378335067013120 + tablet_uid: 250609665 + } + } +} +test_case { + name: "Merge" + event { + name: "Merge/0" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099515822081 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "Merge/2" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099515822081 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 78643201 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\313\356\324\233" + } + group { + group_uid: 78643201 + tablets { + tablet_uid: 78643201 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\001b" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\004\260\000\001" + } + key_recipes { + } + } + } + event { + name: "Merge/4" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 78643201 + split_id: 14079378335067013120 + tablet_uid: 78643201 + } + } + event { + name: "Merge/5" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 78643201 + split_id: 14079378335067013120 + tablet_uid: 78643201 + } + } + event { + cache_update { + database_id: 1099515822081 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 85983233 + split_id: 14079378335067013121 + generation: "\007\006C\314\313\377\336@\007\006C\314\313\377\360\270" + } + range { + start_key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 84934657 + split_id: 14079378335067013121 + generation: "\007\006C\314\313\377\336@\007\006C\314\313\377\360\270" + } + group { + group_uid: 85983233 + tablets { + tablet_uid: 85983233 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\001i" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\005 \000\001" + } + group { + group_uid: 84934657 + tablets { + tablet_uid: 84934657 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\001h" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\005\020\000\001" + } + key_recipes { + } + } + } + event { + name: "Merge/7" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 85983233 + split_id: 14079378335067013121 + tablet_uid: 85983233 + } + } + event { + name: "Merge/8" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "6" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 84934657 + split_id: 14079378335067013121 + tablet_uid: 84934657 + } + } + event { + name: "Merge/9" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 85983233 + split_id: 14079378335067013121 + tablet_uid: 85983233 + } + } + event { + cache_update { + database_id: 1099515822081 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 85983233 + split_id: 14079378335067013123 + generation: "\007\006C\314\314\003\324\213\007\006C\314\314\003\334\212" + } + group { + group_uid: 85983233 + tablets { + tablet_uid: 85983233 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\001i" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\005 \000\001" + } + key_recipes { + } + } + } + event { + name: "Merge/11" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 85983233 + split_id: 14079378335067013123 + tablet_uid: 85983233 + } + } + event { + name: "Merge/12" + read { + session: "instances/default/databases/db5/sessions/Cjz7xOXhdnzM3xT1oBtjGhhBHXBGsxj63sYo7p6OcsysOczYU7KkRu_Uv63jH_R97AUzW8qTn9BgpgC5ncMQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "6" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099515822081 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 85983233 + split_id: 14079378335067013123 + tablet_uid: 85983233 + } + } +} +test_case { + name: "Merge_Query" + event { + name: "Merge_Query/0" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099534696449 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "Merge_Query/2" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099534696449 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 201326593 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\3229\235\n" + } + group { + group_uid: 201326593 + tablets { + tablet_uid: 201326593 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\001," + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014\000\000\001" + } + key_recipes { + } + } + } + event { + name: "Merge_Query/4" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 201326593 + split_id: 14079378335067013120 + tablet_uid: 201326593 + } + } + event { + name: "Merge_Query/5" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 201326593 + split_id: 14079378335067013120 + tablet_uid: 201326593 + } + } + event { + cache_update { + database_id: 1099534696449 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 207618049 + split_id: 14079378335067013121 + generation: "\007\006C\314\322\234*\275\007\006C\314\322\2345\351" + } + range { + start_key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 208666625 + split_id: 14079378335067013121 + generation: "\007\006C\314\322\234*\275\007\006C\314\322\2345\351" + } + group { + group_uid: 207618049 + tablets { + tablet_uid: 207618049 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\0012" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014`\000\001" + } + group { + group_uid: 208666625 + tablets { + tablet_uid: 208666625 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\0013" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014p\000\001" + } + key_recipes { + } + } + } + event { + name: "Merge_Query/7" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 207618049 + split_id: 14079378335067013121 + tablet_uid: 207618049 + } + } + event { + name: "Merge_Query/8" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "6" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 208666625 + split_id: 14079378335067013121 + tablet_uid: 208666625 + } + } + event { + cache_update { + database_id: 1099534696449 + range { + start_key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 208666625 + split_id: 14079378335067013121 + generation: "\007\006C\314\322\234*\275\007\006C\314\322\235\007\356" + } + group { + group_uid: 208666625 + tablets { + tablet_uid: 208666625 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\0013" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014p\000\001" + } + key_recipes { + } + } + } + event { + name: "Merge_Query/10" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "6" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310\002\234\2315\000x" + limit_key: "A\206\311" + group_uid: 208666625 + split_id: 14079378335067013121 + tablet_uid: 208666625 + } + } + event { + name: "Merge_Query/11" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2315\000x" + group_uid: 207618049 + split_id: 14079378335067013121 + tablet_uid: 207618049 + } + } + event { + cache_update { + database_id: 1099534696449 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 207618049 + split_id: 14079378335067013123 + generation: "\007\006C\314\322\2435a\007\006C\314\322\243C\004" + } + group { + group_uid: 207618049 + tablets { + tablet_uid: 207618049 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\0012" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\014`\000\001" + } + key_recipes { + } + } + } + event { + name: "Merge_Query/13" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 207618049 + split_id: 14079378335067013123 + tablet_uid: 207618049 + } + } + event { + name: "Merge_Query/14" + sql { + session: "instances/default/databases/db22/sessions/Cj1iKobFlHIjFAAFmyl3O7-THtK7-TS4hiAm_v9p0ablflCYr9WEbYn0QSEVHUPKxTdHd7OxkQh5CPryVaIjEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "6" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099534696449 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 207618049 + split_id: 14079378335067013123 + tablet_uid: 207618049 + } + } +} +test_case { + name: "MixedQueryShapes" + event { + name: "MixedQueryShapes/0" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key = \'0\'" + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099549376513 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + value { + string_value: "0" + } + } + } + } + } + } + event { + name: "MixedQueryShapes/2" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key = \'0\'" + } + hint { + operation_uid: 1 + database_id: 1099549376513 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099549376513 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 298844161 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\327\014\177\223" + } + group { + group_uid: 298844161 + tablets { + tablet_uid: 298844161 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\001\222" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\021\320\000\001" + } + key_recipes { + } + } + } + event { + name: "MixedQueryShapes/4" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key = \'0\'" + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099549376513 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 298844161 + split_id: 14079378335067013120 + tablet_uid: 298844161 + } + } + event { + name: "MixedQueryShapes/5" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1 FROM T WHERE Key = \'0\'" + } + hint { + operation_uid: 2 + database_id: 1099549376513 + schema_generation: "\001\001" + } + } + event { + cache_update { + database_id: 1099549376513 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 2 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + value { + string_value: "0" + } + } + } + } + } + } + event { + name: "MixedQueryShapes/7" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1 FROM T WHERE Key = \'0\'" + } + server: "localhost:15000" + hint { + operation_uid: 2 + database_id: 1099549376513 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 298844161 + split_id: 14079378335067013120 + tablet_uid: 298844161 + } + } + event { + name: "MixedQueryShapes/8" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=GlobalIndex} WHERE V0 = \'0_0\'" + } + hint { + operation_uid: 3 + database_id: 1099549376513 + schema_generation: "\001\001" + } + } + event { + cache_update { + database_id: 1099549376513 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 3 + part { + tag: 50020 + } + part { + tag: 2 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + value { + string_value: "0_0" + } + } + } + } + } + } + event { + name: "MixedQueryShapes/10" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=GlobalIndex} WHERE V0 = \'0_0\'" + } + server: "localhost:15000" + hint { + operation_uid: 3 + database_id: 1099549376513 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 298844161 + split_id: 14079378335067013120 + tablet_uid: 298844161 + } + } + event { + name: "MixedQueryShapes/11" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved WHERE Key = \'0\' AND Key2 = 1" + } + hint { + operation_uid: 4 + database_id: 1099549376513 + schema_generation: "\001\001" + } + } + event { + cache_update { + database_id: 1099549376513 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 4 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + value { + string_value: "0" + } + } + } + } + } + } + event { + name: "MixedQueryShapes/13" + sql { + session: "instances/default/databases/db35/sessions/Cj1r5FdH5G6JlOfKUeNpQyDVAAIHtV3iukgB0FHLjQk9hiuK_K0e4iIsIE2ujs9fpktU9gs73sMb09dyQaxzEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, Key2, V4 FROM Interleaved WHERE Key = \'0\' AND Key2 = 1" + } + server: "localhost:15000" + hint { + operation_uid: 4 + database_id: 1099549376513 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 298844161 + split_id: 14079378335067013120 + tablet_uid: 298844161 + } + } +} +test_case { + name: "MixedReadShapes" + event { + name: "MixedReadShapes/0" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099529453569 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "MixedReadShapes/2" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099529453569 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099529453569 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 167772161 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\030\004\243" + } + group { + group_uid: 167772161 + tablets { + tablet_uid: 167772161 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\277" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\n\000\000\001" + } + key_recipes { + } + } + } + event { + name: "MixedReadShapes/4" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099529453569 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 167772161 + split_id: 14079378335067013120 + tablet_uid: 167772161 + } + } + event { + cache_update { + database_id: 1099529453569 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 167772161 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\032\370j" + } + group { + group_uid: 167772161 + tablets { + tablet_uid: 167772161 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\277" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\n\000\000\001" + } + key_recipes { + } + } + } + event { + name: "MixedReadShapes/6" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099529453569 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 167772161 + split_id: 14079378335067013120 + tablet_uid: 167772161 + } + } + event { + name: "MixedReadShapes/7" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 2 + database_id: 1099529453569 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 167772161 + split_id: 14079378335067013120 + tablet_uid: 167772161 + } + } + event { + name: "MixedReadShapes/8" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + index: "GlobalIndex" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0_0" + } + } + } + } + hint { + operation_uid: 3 + database_id: 1099529453569 + schema_generation: "\001\001" + } + } + event { + cache_update { + database_id: 1099529453569 + key_recipes { + schema_generation: "\001\001" + recipe { + index_name: "GlobalIndex" + part { + tag: 50020 + } + part { + tag: 2 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "V0" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "MixedReadShapes/10" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + index: "GlobalIndex" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0_0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 3 + database_id: 1099529453569 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 167772161 + split_id: 14079378335067013120 + tablet_uid: 167772161 + } + } + event { + name: "MixedReadShapes/11" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "1" + } + } + } + } + hint { + operation_uid: 4 + database_id: 1099529453569 + schema_generation: "\001\001" + } + } + event { + cache_update { + database_id: 1099529453569 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "Interleaved" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + part { + tag: 5 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "Key2" + } + } + } + } + } + event { + name: "MixedReadShapes/13" + read { + session: "instances/default/databases/db17/sessions/Cj11_K9Nwx32LGYbrWvyBBlWBUSPqjqsdLosEGdpzdOE2DuNonsyrDc4SAlBK3h5RDil8VD_xWE-0dpVmdBwEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "Interleaved" + columns: "Key" + columns: "Key2" + columns: "V4" + key_set { + keys { + values { + string_value: "0" + } + values { + string_value: "1" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 4 + database_id: 1099529453569 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 167772161 + split_id: 14079378335067013120 + tablet_uid: 167772161 + } + } +} +test_case { + name: "MultiPointQuery" + event { + name: "MultiPointQuery/0" + sql { + session: "instances/default/databases/db34/sessions/Cj1JEf_BWyeFh30JH_mbDYbGaUpAOVs2cu9NlDhT_gSLxCxvtNLzu5lDhZHUfV_f_IFjIiWfJp0YIuz9Rgk-EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key IN (\'0\', \'1\', \'2\')" + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099548327937 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + value { + string_value: "0" + } + } + } + } + } + } + event { + name: "MultiPointQuery/2" + sql { + session: "instances/default/databases/db34/sessions/Cj1JEf_BWyeFh30JH_mbDYbGaUpAOVs2cu9NlDhT_gSLxCxvtNLzu5lDhZHUfV_f_IFjIiWfJp0YIuz9Rgk-EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key IN (\'0\', \'1\', \'2\')" + } + hint { + operation_uid: 1 + database_id: 1099548327937 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099548327937 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 292552705 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326\362\241\323" + } + group { + group_uid: 292552705 + tablets { + tablet_uid: 292552705 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\001\214" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\021p\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiPointQuery/4" + sql { + session: "instances/default/databases/db34/sessions/Cj1JEf_BWyeFh30JH_mbDYbGaUpAOVs2cu9NlDhT_gSLxCxvtNLzu5lDhZHUfV_f_IFjIiWfJp0YIuz9Rgk-EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key IN (\'0\', \'1\', \'2\')" + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099548327937 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 292552705 + split_id: 14079378335067013120 + tablet_uid: 292552705 + } + } +} +test_case { + name: "MultiPointRead" + event { + name: "MultiPointRead/0" + read { + session: "instances/default/databases/db16/sessions/Cj1lBesOACZy5M0-XNPQK3sZKjFljpivNOp5UkVksA4i-P5_UszGIn1x3kLVQTGhWk3mC-vv0bTwS-RhC6JqEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + keys { + values { + string_value: "1" + } + } + keys { + values { + string_value: "2" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099528404993 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "MultiPointRead/2" + read { + session: "instances/default/databases/db16/sessions/Cj1lBesOACZy5M0-XNPQK3sZKjFljpivNOp5UkVksA4i-P5_UszGIn1x3kLVQTGhWk3mC-vv0bTwS-RhC6JqEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + keys { + values { + string_value: "1" + } + } + keys { + values { + string_value: "2" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099528404993 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + limit_key: "A\206\310\002\234\2312\000y" + } + } + event { + cache_update { + database_id: 1099528404993 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 161480705 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\0077\344" + } + group { + group_uid: 161480705 + tablets { + tablet_uid: 161480705 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\272" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t\240\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiPointRead/4" + read { + session: "instances/default/databases/db16/sessions/Cj1lBesOACZy5M0-XNPQK3sZKjFljpivNOp5UkVksA4i-P5_UszGIn1x3kLVQTGhWk3mC-vv0bTwS-RhC6JqEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + keys { + values { + string_value: "1" + } + } + keys { + values { + string_value: "2" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099528404993 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 161480705 + split_id: 14079378335067013120 + tablet_uid: 161480705 + } + } + event { + cache_update { + database_id: 1099528404993 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 161480705 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\010?\"" + } + group { + group_uid: 161480705 + tablets { + tablet_uid: 161480705 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\272" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t\240\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiPointRead/6" + read { + session: "instances/default/databases/db16/sessions/Cj1lBesOACZy5M0-XNPQK3sZKjFljpivNOp5UkVksA4i-P5_UszGIn1x3kLVQTGhWk3mC-vv0bTwS-RhC6JqEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + keys { + values { + string_value: "0" + } + } + keys { + values { + string_value: "1" + } + } + keys { + values { + string_value: "2" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099528404993 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 161480705 + split_id: 14079378335067013120 + tablet_uid: 161480705 + } + } + event { + cache_update { + database_id: 1099528404993 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 161480705 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\010?\"" + } + group { + group_uid: 161480705 + tablets { + tablet_uid: 161480705 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\272" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t\240\000\001" + } + key_recipes { + } + } + } +} +test_case { + name: "MultiSplitRangeQuery" + event { + name: "MultiSplitRangeQuery/0" + sql { + session: "instances/default/databases/db31/sessions/Cj26cAs4RD17PnwartOnEP5weRuWeJiGsWyw0p_woAWpI-qkh_vsgPdD99_nQRZyD9Ysr_UQGP1_b5NtZb-OEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099545182209 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "start" + } + } + } + } + } + event { + name: "MultiSplitRangeQuery/2" + sql { + session: "instances/default/databases/db31/sessions/Cj26cAs4RD17PnwartOnEP5weRuWeJiGsWyw0p_woAWpI-qkh_vsgPdD99_nQRZyD9Ysr_UQGP1_b5NtZb-OEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099545182209 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099545182209 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 269484033 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326\207\216s" + } + group { + group_uid: 269484033 + tablets { + tablet_uid: 269484033 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001w" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\020\020\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeQuery/4" + sql { + session: "instances/default/databases/db31/sessions/Cj26cAs4RD17PnwartOnEP5weRuWeJiGsWyw0p_woAWpI-qkh_vsgPdD99_nQRZyD9Ysr_UQGP1_b5NtZb-OEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099545182209 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 269484033 + split_id: 14079378335067013120 + tablet_uid: 269484033 + } + } + event { + cache_update { + database_id: 1099545182209 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 269484033 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326\207\216s" + } + group { + group_uid: 269484033 + tablets { + tablet_uid: 269484033 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001w" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\020\020\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeQuery/6" + sql { + session: "instances/default/databases/db31/sessions/Cj26cAs4RD17PnwartOnEP5weRuWeJiGsWyw0p_woAWpI-qkh_vsgPdD99_nQRZyD9Ysr_UQGP1_b5NtZb-OEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099545182209 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 269484033 + split_id: 14079378335067013120 + tablet_uid: 269484033 + } + } + event { + name: "MultiSplitRangeQuery/7" + sql { + session: "instances/default/databases/db31/sessions/Cj26cAs4RD17PnwartOnEP5weRuWeJiGsWyw0p_woAWpI-qkh_vsgPdD99_nQRZyD9Ysr_UQGP1_b5NtZb-OEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099545182209 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 269484033 + split_id: 14079378335067013120 + tablet_uid: 269484033 + } + } + event { + cache_update { + database_id: 1099545182209 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 275775489 + split_id: 14079378335067013121 + generation: "\007\006C\314\326\232H-\007\006C\314\326\232O\315" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 276824065 + split_id: 14079378335067013121 + generation: "\007\006C\314\326\232H-\007\006C\314\326\232O\315" + } + group { + group_uid: 275775489 + tablets { + tablet_uid: 275775489 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001}" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\020p\000\001" + } + group { + group_uid: 276824065 + tablets { + tablet_uid: 276824065 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001|" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\020\200\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeQuery/9" + sql { + session: "instances/default/databases/db31/sessions/Cj26cAs4RD17PnwartOnEP5weRuWeJiGsWyw0p_woAWpI-qkh_vsgPdD99_nQRZyD9Ysr_UQGP1_b5NtZb-OEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099545182209 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 275775489 + split_id: 14079378335067013121 + tablet_uid: 275775489 + } + } +} +test_case { + name: "MultiSplitRangeRead" + event { + name: "MultiSplitRangeRead/0" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099526307841 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "MultiSplitRangeRead/2" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099526307841 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + limit_key: "A\206\310\002\234\2315\000x" + } + } + event { + cache_update { + database_id: 1099526307841 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 146800641 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\324\266i" + } + group { + group_uid: 146800641 + tablets { + tablet_uid: 146800641 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\252" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\010\300\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeRead/4" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099526307841 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 146800641 + split_id: 14079378335067013120 + tablet_uid: 146800641 + } + } + event { + cache_update { + database_id: 1099526307841 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 146800641 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\327j\374" + } + group { + group_uid: 146800641 + tablets { + tablet_uid: 146800641 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\252" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\010\300\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeRead/6" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099526307841 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 146800641 + split_id: 14079378335067013120 + tablet_uid: 146800641 + } + } + event { + name: "MultiSplitRangeRead/7" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099526307841 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 146800641 + split_id: 14079378335067013120 + tablet_uid: 146800641 + } + } + event { + cache_update { + database_id: 1099526307841 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 153092097 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 154140673 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + group { + group_uid: 153092097 + tablets { + tablet_uid: 153092097 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\260" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t \000\001" + } + group { + group_uid: 154140673 + tablets { + tablet_uid: 154140673 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\261" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t0\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeRead/9" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099526307841 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + limit_key: "A\206\310\002\234\2315\000x" + } + } + event { + cache_update { + database_id: 1099526307841 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 153092097 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 154140673 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + group { + group_uid: 153092097 + tablets { + tablet_uid: 153092097 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\260" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t \000\001" + } + group { + group_uid: 154140673 + tablets { + tablet_uid: 154140673 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\261" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t0\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeRead/11" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099526307841 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + limit_key: "A\206\310\002\234\2315\000x" + } + } + event { + cache_update { + database_id: 1099526307841 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 153092097 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 154140673 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + group { + group_uid: 153092097 + tablets { + tablet_uid: 153092097 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\260" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t \000\001" + } + group { + group_uid: 154140673 + tablets { + tablet_uid: 154140673 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\261" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t0\000\001" + } + key_recipes { + } + } + } + event { + name: "MultiSplitRangeRead/13" + read { + session: "instances/default/databases/db14/sessions/Cj0o3nR5UFrOZg2SHTIXxry6YlztuIUCKChW73CDnur1iUntENeOIUCLJi1ON9ym2fIzfYOB0G4apCR5I4YQEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099526307841 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + limit_key: "A\206\310\002\234\2315\000x" + } + } + event { + cache_update { + database_id: 1099526307841 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 153092097 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 154140673 + split_id: 14079378335067013121 + generation: "\007\006C\314\317\345k\007\007\006C\314\317\345|{" + } + group { + group_uid: 153092097 + tablets { + tablet_uid: 153092097 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\260" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t \000\001" + } + group { + group_uid: 154140673 + tablets { + tablet_uid: 154140673 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\261" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\t0\000\001" + } + key_recipes { + } + } + } +} +test_case { + name: "PointQuery_MoveTablet" + event { + name: "PointQuery_MoveTablet/0" + sql { + session: "instances/default/databases/db20/sessions/Cj1N8sQ1mMXNR1g4jxOmUpJctw82dg0KcXzxZYKPIRwWsXqu0bhbi4E-_sLxODFwo_lYyhRy9bB8xBjMbn6MEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099532599297 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "PointQuery_MoveTablet/2" + sql { + session: "instances/default/databases/db20/sessions/Cj1N8sQ1mMXNR1g4jxOmUpJctw82dg0KcXzxZYKPIRwWsXqu0bhbi4E-_sLxODFwo_lYyhRy9bB8xBjMbn6MEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099532599297 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099532599297 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 188743681 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320r\274\204" + } + group { + group_uid: 188743681 + tablets { + tablet_uid: 188743681 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\323" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\013@\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_MoveTablet/4" + sql { + session: "instances/default/databases/db20/sessions/Cj1N8sQ1mMXNR1g4jxOmUpJctw82dg0KcXzxZYKPIRwWsXqu0bhbi4E-_sLxODFwo_lYyhRy9bB8xBjMbn6MEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099532599297 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 188743681 + split_id: 14079378335067013120 + tablet_uid: 188743681 + } + } + event { + cache_update { + database_id: 1099532599297 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 188743681 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320x\255_" + } + group { + group_uid: 188743681 + tablets { + tablet_uid: 188743681 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\323" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\013@\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_MoveTablet/6" + sql { + session: "instances/default/databases/db20/sessions/Cj1N8sQ1mMXNR1g4jxOmUpJctw82dg0KcXzxZYKPIRwWsXqu0bhbi4E-_sLxODFwo_lYyhRy9bB8xBjMbn6MEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099532599297 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 188743681 + split_id: 14079378335067013120 + tablet_uid: 188743681 + } + } + event { + name: "PointQuery_MoveTablet/7" + sql { + session: "instances/default/databases/db20/sessions/Cj1N8sQ1mMXNR1g4jxOmUpJctw82dg0KcXzxZYKPIRwWsXqu0bhbi4E-_sLxODFwo_lYyhRy9bB8xBjMbn6MEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099532599297 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 188743681 + split_id: 14079378335067013120 + tablet_uid: 188743681 + } + } +} +test_case { + name: "PointQuery_Split" + event { + name: "PointQuery_Split/0" + sql { + session: "instances/default/databases/db19/sessions/Cj2RvpMnHqQiSvRU_rl0CfvTHBYP-K9YWOZN0oPTqz_3o3UJkAV0kyMcVK_r3tClMWKYSJSK3tGn0llf-I56EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099531550721 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "PointQuery_Split/2" + sql { + session: "instances/default/databases/db19/sessions/Cj2RvpMnHqQiSvRU_rl0CfvTHBYP-K9YWOZN0oPTqz_3o3UJkAV0kyMcVK_r3tClMWKYSJSK3tGn0llf-I56EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099531550721 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099531550721 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 180355073 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320Op\220" + } + group { + group_uid: 180355073 + tablets { + tablet_uid: 180355073 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\315" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\n\300\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_Split/4" + sql { + session: "instances/default/databases/db19/sessions/Cj2RvpMnHqQiSvRU_rl0CfvTHBYP-K9YWOZN0oPTqz_3o3UJkAV0kyMcVK_r3tClMWKYSJSK3tGn0llf-I56EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099531550721 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 180355073 + split_id: 14079378335067013120 + tablet_uid: 180355073 + } + } + event { + cache_update { + database_id: 1099531550721 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 180355073 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320Q}h" + } + group { + group_uid: 180355073 + tablets { + tablet_uid: 180355073 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\315" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\n\300\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_Split/6" + sql { + session: "instances/default/databases/db19/sessions/Cj2RvpMnHqQiSvRU_rl0CfvTHBYP-K9YWOZN0oPTqz_3o3UJkAV0kyMcVK_r3tClMWKYSJSK3tGn0llf-I56EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099531550721 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 180355073 + split_id: 14079378335067013120 + tablet_uid: 180355073 + } + } + event { + name: "PointQuery_Split/7" + sql { + session: "instances/default/databases/db19/sessions/Cj2RvpMnHqQiSvRU_rl0CfvTHBYP-K9YWOZN0oPTqz_3o3UJkAV0kyMcVK_r3tClMWKYSJSK3tGn0llf-I56EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099531550721 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 180355073 + split_id: 14079378335067013120 + tablet_uid: 180355073 + } + } + event { + cache_update { + database_id: 1099531550721 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 186646529 + split_id: 14079378335067013121 + generation: "\007\006C\314\320c\021\014\007\006C\314\320c\026\345" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 187695105 + split_id: 14079378335067013121 + generation: "\007\006C\314\320c\021\014\007\006C\314\320c\026\345" + } + group { + group_uid: 186646529 + tablets { + tablet_uid: 186646529 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\320" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\013 \000\001" + } + group { + group_uid: 187695105 + tablets { + tablet_uid: 187695105 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\321" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\0130\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_Split/9" + sql { + session: "instances/default/databases/db19/sessions/Cj2RvpMnHqQiSvRU_rl0CfvTHBYP-K9YWOZN0oPTqz_3o3UJkAV0kyMcVK_r3tClMWKYSJSK3tGn0llf-I56EO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099531550721 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 186646529 + split_id: 14079378335067013121 + tablet_uid: 186646529 + } + } +} +test_case { + name: "PointQuery_StopServer" + event { + name: "PointQuery_StopServer/0" + sql { + session: "instances/default/databases/db21/sessions/Cj2mLhhl2TEML6_S76tM9oTQnNZWOUYSYTbcM0g1a235ck_wOuvrssPXtj6kS89DUYK3B9sJwmp3MAtsd0rKEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099533647873 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "PointQuery_StopServer/2" + sql { + session: "instances/default/databases/db21/sessions/Cj2mLhhl2TEML6_S76tM9oTQnNZWOUYSYTbcM0g1a235ck_wOuvrssPXtj6kS89DUYK3B9sJwmp3MAtsd0rKEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099533647873 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099533647873 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 195035137 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\223\232\214" + } + group { + group_uid: 195035137 + tablets { + tablet_uid: 195035137 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\331" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\013\240\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_StopServer/4" + sql { + session: "instances/default/databases/db21/sessions/Cj2mLhhl2TEML6_S76tM9oTQnNZWOUYSYTbcM0g1a235ck_wOuvrssPXtj6kS89DUYK3B9sJwmp3MAtsd0rKEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099533647873 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 195035137 + split_id: 14079378335067013120 + tablet_uid: 195035137 + } + } + event { + cache_update { + database_id: 1099533647873 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 195035137 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\232\312r" + } + group { + group_uid: 195035137 + tablets { + tablet_uid: 195035137 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\331" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\013\240\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_StopServer/6" + sql { + session: "instances/default/databases/db21/sessions/Cj2mLhhl2TEML6_S76tM9oTQnNZWOUYSYTbcM0g1a235ck_wOuvrssPXtj6kS89DUYK3B9sJwmp3MAtsd0rKEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099533647873 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 195035137 + split_id: 14079378335067013120 + tablet_uid: 195035137 + } + } + event { + name: "PointQuery_StopServer/7" + unhealthy_servers: "localhost:15100" + sql { + session: "instances/default/databases/db21/sessions/Cj2mLhhl2TEML6_S76tM9oTQnNZWOUYSYTbcM0g1a235ck_wOuvrssPXtj6kS89DUYK3B9sJwmp3MAtsd0rKEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099533647873 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 195035137 + split_id: 14079378335067013120 + skipped_tablet_uid { + tablet_uid: 195035137 + incarnation: "\001\331" + } + skipped_tablet_uid { + tablet_uid: 195035137 + incarnation: "\001\331" + } + } + } + event { + cache_update { + database_id: 1099533647873 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 195035137 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\320\223\232\214" + } + group { + group_uid: 195035137 + tablets { + tablet_uid: 195035137 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\001)" + } + generation: "\010\377\377\377\377\377\377\377\377\001\002\004\013\240\000\001" + } + key_recipes { + } + } + } + event { + name: "PointQuery_StopServer/9" + sql { + session: "instances/default/databases/db21/sessions/Cj2mLhhl2TEML6_S76tM9oTQnNZWOUYSYTbcM0g1a235ck_wOuvrssPXtj6kS89DUYK3B9sJwmp3MAtsd0rKEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099533647873 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 195035137 + split_id: 14079378335067013120 + tablet_uid: 195035137 + } + } +} +test_case { + name: "PointRead_Basic" + event { + name: "PointRead_Basic/0" + read { + session: "instances/default/databases/db1/sessions/Cj2dgaSCS1TIcsY03_rLwNkT4bcSD0rl96ymOmEs6St0gocLKdJ13KOcTUAr0hZzE7UgcFAH_pgoeDLs-gevEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099511627777 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "PointRead_Basic/2" + read { + session: "instances/default/databases/db1/sessions/Cj2dgaSCS1TIcsY03_rLwNkT4bcSD0rl96ymOmEs6St0gocLKdJ13KOcTUAr0hZzE7UgcFAH_pgoeDLs-gevEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099511627777 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099511627777 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 51380225 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\312\266\333\267" + } + group { + group_uid: 51380225 + tablets { + tablet_uid: 51380225 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\0014" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\003\020\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_Basic/4" + read { + session: "instances/default/databases/db1/sessions/Cj2dgaSCS1TIcsY03_rLwNkT4bcSD0rl96ymOmEs6St0gocLKdJ13KOcTUAr0hZzE7UgcFAH_pgoeDLs-gevEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099511627777 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 51380225 + split_id: 14079378335067013120 + tablet_uid: 51380225 + } + } + event { + name: "PointRead_Basic/5" + read { + session: "instances/default/databases/db1/sessions/Cj2dgaSCS1TIcsY03_rLwNkT4bcSD0rl96ymOmEs6St0gocLKdJ13KOcTUAr0hZzE7UgcFAH_pgoeDLs-gevEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "6" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099511627777 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 51380225 + split_id: 14079378335067013120 + tablet_uid: 51380225 + } + } + event { + name: "PointRead_Basic/6" + read { + session: "instances/default/databases/db1/sessions/Cj2dgaSCS1TIcsY03_rLwNkT4bcSD0rl96ymOmEs6St0gocLKdJ13KOcTUAr0hZzE7UgcFAH_pgoeDLs-gevEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "99" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099511627777 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 51380225 + split_id: 14079378335067013120 + tablet_uid: 51380225 + } + } +} +test_case { + name: "PointRead_MoveTablet" + event { + name: "PointRead_MoveTablet/0" + read { + session: "instances/default/databases/db3/sessions/Cj1AKsB4f6xVAxSo5B5BEa_WQta60iwvkBhF0_CO2ES-1CICxfRMDL5FaiFDCdlVa22_VEiq4S9xZWRU6fJuEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099513724929 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "PointRead_MoveTablet/2" + read { + session: "instances/default/databases/db3/sessions/Cj1AKsB4f6xVAxSo5B5BEa_WQta60iwvkBhF0_CO2ES-1CICxfRMDL5FaiFDCdlVa22_VEiq4S9xZWRU6fJuEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099513724929 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099513724929 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 66060289 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\312\371S\230" + } + group { + group_uid: 66060289 + tablets { + tablet_uid: 66060289 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001B" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\003\360\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_MoveTablet/4" + read { + session: "instances/default/databases/db3/sessions/Cj1AKsB4f6xVAxSo5B5BEa_WQta60iwvkBhF0_CO2ES-1CICxfRMDL5FaiFDCdlVa22_VEiq4S9xZWRU6fJuEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099513724929 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 66060289 + split_id: 14079378335067013120 + tablet_uid: 66060289 + } + } + event { + cache_update { + database_id: 1099513724929 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 66060289 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\312\377\310\024" + } + group { + group_uid: 66060289 + tablets { + tablet_uid: 66060289 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001B" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\003\360\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_MoveTablet/6" + read { + session: "instances/default/databases/db3/sessions/Cj1AKsB4f6xVAxSo5B5BEa_WQta60iwvkBhF0_CO2ES-1CICxfRMDL5FaiFDCdlVa22_VEiq4S9xZWRU6fJuEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099513724929 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 66060289 + split_id: 14079378335067013120 + tablet_uid: 66060289 + } + } + event { + name: "PointRead_MoveTablet/7" + read { + session: "instances/default/databases/db3/sessions/Cj1AKsB4f6xVAxSo5B5BEa_WQta60iwvkBhF0_CO2ES-1CICxfRMDL5FaiFDCdlVa22_VEiq4S9xZWRU6fJuEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099513724929 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 66060289 + split_id: 14079378335067013120 + tablet_uid: 66060289 + } + } +} +test_case { + name: "PointRead_Split" + event { + name: "PointRead_Split/0" + read { + session: "instances/default/databases/db2/sessions/Cj0P1CjTc1r75lf93ktX0nFIilgWPzLMlGnWTx-ZrjQo0Gf7-8YTsxgLsq7TFigkRjfOoY7s-KBDYRGUBOhtEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099512676353 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "PointRead_Split/2" + read { + session: "instances/default/databases/db2/sessions/Cj0P1CjTc1r75lf93ktX0nFIilgWPzLMlGnWTx-ZrjQo0Gf7-8YTsxgLsq7TFigkRjfOoY7s-KBDYRGUBOhtEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099512676353 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099512676353 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 57671681 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\312\320\311\201" + } + group { + group_uid: 57671681 + tablets { + tablet_uid: 57671681 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\0019" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\003p\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_Split/4" + read { + session: "instances/default/databases/db2/sessions/Cj0P1CjTc1r75lf93ktX0nFIilgWPzLMlGnWTx-ZrjQo0Gf7-8YTsxgLsq7TFigkRjfOoY7s-KBDYRGUBOhtEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099512676353 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 57671681 + split_id: 14079378335067013120 + tablet_uid: 57671681 + } + } + event { + cache_update { + database_id: 1099512676353 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 57671681 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\312\325J\"" + } + group { + group_uid: 57671681 + tablets { + tablet_uid: 57671681 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\0019" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\003p\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_Split/6" + read { + session: "instances/default/databases/db2/sessions/Cj0P1CjTc1r75lf93ktX0nFIilgWPzLMlGnWTx-ZrjQo0Gf7-8YTsxgLsq7TFigkRjfOoY7s-KBDYRGUBOhtEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099512676353 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 57671681 + split_id: 14079378335067013120 + tablet_uid: 57671681 + } + } + event { + name: "PointRead_Split/7" + read { + session: "instances/default/databases/db2/sessions/Cj0P1CjTc1r75lf93ktX0nFIilgWPzLMlGnWTx-ZrjQo0Gf7-8YTsxgLsq7TFigkRjfOoY7s-KBDYRGUBOhtEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099512676353 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 57671681 + split_id: 14079378335067013120 + tablet_uid: 57671681 + } + } + event { + cache_update { + database_id: 1099512676353 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 63963137 + split_id: 14079378335067013121 + generation: "\007\006C\314\312\346,\370\007\006C\314\312\346G\266" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 65011713 + split_id: 14079378335067013121 + generation: "\007\006C\314\312\346,\370\007\006C\314\312\346G\266" + } + group { + group_uid: 63963137 + tablets { + tablet_uid: 63963137 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001@" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\003\320\000\001" + } + group { + group_uid: 65011713 + tablets { + tablet_uid: 65011713 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001?" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\003\340\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_Split/9" + read { + session: "instances/default/databases/db2/sessions/Cj0P1CjTc1r75lf93ktX0nFIilgWPzLMlGnWTx-ZrjQo0Gf7-8YTsxgLsq7TFigkRjfOoY7s-KBDYRGUBOhtEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099512676353 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 63963137 + split_id: 14079378335067013121 + tablet_uid: 63963137 + } + } +} +test_case { + name: "PointRead_StopServer" + event { + name: "PointRead_StopServer/0" + read { + session: "instances/default/databases/db4/sessions/Cj06QaQcKhM5rNrSjoYJN6w9yW8QlrvlrAYbHThdJcgxiQOcxXv_urgbse66Ol2wnM36ddl7v6GMVjh0JXdJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099514773505 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "PointRead_StopServer/2" + read { + session: "instances/default/databases/db4/sessions/Cj06QaQcKhM5rNrSjoYJN6w9yW8QlrvlrAYbHThdJcgxiQOcxXv_urgbse66Ol2wnM36ddl7v6GMVjh0JXdJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099514773505 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099514773505 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 72351745 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\313\027\337?" + } + group { + group_uid: 72351745 + tablets { + tablet_uid: 72351745 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001H" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\004P\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_StopServer/4" + read { + session: "instances/default/databases/db4/sessions/Cj06QaQcKhM5rNrSjoYJN6w9yW8QlrvlrAYbHThdJcgxiQOcxXv_urgbse66Ol2wnM36ddl7v6GMVjh0JXdJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099514773505 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 72351745 + split_id: 14079378335067013120 + tablet_uid: 72351745 + } + } + event { + cache_update { + database_id: 1099514773505 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 72351745 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\313\030\343J" + } + group { + group_uid: 72351745 + tablets { + tablet_uid: 72351745 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001H" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\004P\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_StopServer/6" + read { + session: "instances/default/databases/db4/sessions/Cj06QaQcKhM5rNrSjoYJN6w9yW8QlrvlrAYbHThdJcgxiQOcxXv_urgbse66Ol2wnM36ddl7v6GMVjh0JXdJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099514773505 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 72351745 + split_id: 14079378335067013120 + tablet_uid: 72351745 + } + } + event { + name: "PointRead_StopServer/7" + unhealthy_servers: "localhost:15100" + read { + session: "instances/default/databases/db4/sessions/Cj06QaQcKhM5rNrSjoYJN6w9yW8QlrvlrAYbHThdJcgxiQOcxXv_urgbse66Ol2wnM36ddl7v6GMVjh0JXdJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099514773505 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 72351745 + split_id: 14079378335067013120 + skipped_tablet_uid { + tablet_uid: 72351745 + incarnation: "\001H" + } + skipped_tablet_uid { + tablet_uid: 72351745 + incarnation: "\001H" + } + } + } + event { + cache_update { + database_id: 1099514773505 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 72351745 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\313\027\337?" + } + group { + group_uid: 72351745 + tablets { + tablet_uid: 72351745 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\001_" + } + generation: "\010\377\377\377\377\377\377\377\377\001\001\004\004P\000\001" + } + key_recipes { + } + } + } + event { + name: "PointRead_StopServer/9" + read { + session: "instances/default/databases/db4/sessions/Cj06QaQcKhM5rNrSjoYJN6w9yW8QlrvlrAYbHThdJcgxiQOcxXv_urgbse66Ol2wnM36ddl7v6GMVjh0JXdJEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099514773505 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 72351745 + split_id: 14079378335067013120 + tablet_uid: 72351745 + } + } +} +test_case { + name: "Query_Basic" + event { + name: "Query_Basic/0" + sql { + session: "instances/default/databases/db18/sessions/Cj0AhIB1FQZ0mpfUyRe4RAdNeLsy8_3N0l6G0SYbTQH9L4Mo6SAJCEW0asR2_0Y2B_x-EQH5q3LXC8IqY_UUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099530502145 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "Query_Basic/2" + sql { + session: "instances/default/databases/db18/sessions/Cj0AhIB1FQZ0mpfUyRe4RAdNeLsy8_3N0l6G0SYbTQH9L4Mo6SAJCEW0asR2_0Y2B_x-EQH5q3LXC8IqY_UUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099530502145 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099530502145 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 174063617 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\3205D\321" + } + group { + group_uid: 174063617 + tablets { + tablet_uid: 174063617 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\304" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\n`\000\001" + } + key_recipes { + } + } + } + event { + name: "Query_Basic/4" + sql { + session: "instances/default/databases/db18/sessions/Cj0AhIB1FQZ0mpfUyRe4RAdNeLsy8_3N0l6G0SYbTQH9L4Mo6SAJCEW0asR2_0Y2B_x-EQH5q3LXC8IqY_UUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099530502145 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 174063617 + split_id: 14079378335067013120 + tablet_uid: 174063617 + } + } + event { + cache_update { + database_id: 1099530502145 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 174063617 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\3207\336\354" + } + group { + group_uid: 174063617 + tablets { + tablet_uid: 174063617 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\304" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\n`\000\001" + } + key_recipes { + } + } + } + event { + name: "Query_Basic/6" + sql { + session: "instances/default/databases/db18/sessions/Cj0AhIB1FQZ0mpfUyRe4RAdNeLsy8_3N0l6G0SYbTQH9L4Mo6SAJCEW0asR2_0Y2B_x-EQH5q3LXC8IqY_UUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099530502145 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 174063617 + split_id: 14079378335067013120 + tablet_uid: 174063617 + } + } + event { + name: "Query_Basic/7" + sql { + session: "instances/default/databases/db18/sessions/Cj0AhIB1FQZ0mpfUyRe4RAdNeLsy8_3N0l6G0SYbTQH9L4Mo6SAJCEW0asR2_0Y2B_x-EQH5q3LXC8IqY_UUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "6" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099530502145 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 174063617 + split_id: 14079378335067013120 + tablet_uid: 174063617 + } + } + event { + name: "Query_Basic/8" + sql { + session: "instances/default/databases/db18/sessions/Cj0AhIB1FQZ0mpfUyRe4RAdNeLsy8_3N0l6G0SYbTQH9L4Mo6SAJCEW0asR2_0Y2B_x-EQH5q3LXC8IqY_UUEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "99" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099530502145 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 174063617 + split_id: 14079378335067013120 + tablet_uid: 174063617 + } + } +} +test_case { + name: "Queryroot" + event { + name: "Queryroot/0" + sql { + session: "instances/default/databases/db36/sessions/Cj1-3deMwlMPSU3TUZjwEiTnCEx6ntNH_PgS62Q5Uq5SIJ7I3nvRImR3DuycWYdHyu_aL5pq9cpaUDBf3csWEO_3ts7M-ZAD" + sql: "SELECT TEXT_FINGERPRINT, TEXT, FROM SPANNER_SYS.OLDEST_ACTIVE_QUERIES" + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099550425089 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50016 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NOT_NULL + type { + code: INT64 + } + value { + string_value: "0" + } + } + } + } + } + } + event { + name: "Queryroot/2" + sql { + session: "instances/default/databases/db36/sessions/Cj1-3deMwlMPSU3TUZjwEiTnCEx6ntNH_PgS62Q5Uq5SIJ7I3nvRImR3DuycWYdHyu_aL5pq9cpaUDBf3csWEO_3ts7M-ZAD" + sql: "SELECT TEXT_FINGERPRINT, TEXT, FROM SPANNER_SYS.OLDEST_ACTIVE_QUERIES" + } + hint { + operation_uid: 1 + database_id: 1099550425089 + schema_generation: "\001\001" + key: "A\206\300\002\221\000" + } + } + event { + cache_update { + database_id: 1099550425089 + range { + start_key: "A\206\300" + limit_key: "A\206\301" + group_uid: 309329921 + split_id: 14078252435160170496 + generation: "\000\007\006C\314\3271\033z" + } + group { + group_uid: 309329921 + tablets { + tablet_uid: 309329921 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\001\232" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\022p\000\001" + } + key_recipes { + } + } + } + event { + name: "Queryroot/4" + sql { + session: "instances/default/databases/db36/sessions/Cj1-3deMwlMPSU3TUZjwEiTnCEx6ntNH_PgS62Q5Uq5SIJ7I3nvRImR3DuycWYdHyu_aL5pq9cpaUDBf3csWEO_3ts7M-ZAD" + sql: "SELECT TEXT_FINGERPRINT, TEXT, FROM SPANNER_SYS.OLDEST_ACTIVE_QUERIES" + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099550425089 + schema_generation: "\001\001" + key: "A\206\300" + limit_key: "A\206\301" + group_uid: 309329921 + split_id: 14078252435160170496 + tablet_uid: 309329921 + } + } +} +test_case { + name: "RandomSplitQuery" + event { + name: "RandomSplitQuery/0" + sql { + session: "instances/default/databases/db33/sessions/Cjx4AhBshfE8Wz_DweJPRclYklWrtNOgZU6SOL_5EY-RxIkB0O1k8mYR1tr1pYqNnVlVPFTrl1kJd9_Ho9sQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=_BASE_TABLE} WHERE Key IN UNNEST(@keys)" + params { + fields { + key: "keys" + value { + list_value { + values { + string_value: "0" + } + values { + string_value: "1" + } + values { + string_value: "2" + } + } + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099547279361 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "keys" + } + } + } + } + } + event { + name: "RandomSplitQuery/2" + sql { + session: "instances/default/databases/db33/sessions/Cjx4AhBshfE8Wz_DweJPRclYklWrtNOgZU6SOL_5EY-RxIkB0O1k8mYR1tr1pYqNnVlVPFTrl1kJd9_Ho9sQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=_BASE_TABLE} WHERE Key IN UNNEST(@keys)" + params { + fields { + key: "keys" + value { + list_value { + values { + string_value: "0" + } + values { + string_value: "1" + } + values { + string_value: "2" + } + } + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099547279361 + schema_generation: "\001\001" + key: "A\206\310\002" + limit_key: "A\206\310\003" + } + } + event { + cache_update { + database_id: 1099547279361 + range { + start_key: "A\206\310" + limit_key: "A\206\310\002\234\2311\000x" + group_uid: 290455553 + split_id: 14079378335067013121 + generation: "\007\006C\314\326\324z5\007\006C\314\326\325\300\240" + } + range { + start_key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 291504129 + split_id: 14079378335067013121 + generation: "\007\006C\314\326\324z5\007\006C\314\326\325\300\240" + } + group { + group_uid: 290455553 + tablets { + tablet_uid: 290455553 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001\212" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\021P\000\001" + } + group { + group_uid: 291504129 + tablets { + tablet_uid: 291504129 + server_address: "localhost:15000" + role: READ_WRITE + incarnation: "\002\001\213" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\021`\000\001" + } + key_recipes { + } + } + } + event { + name: "RandomSplitQuery/4" + sql { + session: "instances/default/databases/db33/sessions/Cjx4AhBshfE8Wz_DweJPRclYklWrtNOgZU6SOL_5EY-RxIkB0O1k8mYR1tr1pYqNnVlVPFTrl1kJd9_Ho9sQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T@{FORCE_INDEX=_BASE_TABLE} WHERE Key IN UNNEST(@keys)" + params { + fields { + key: "keys" + value { + list_value { + values { + string_value: "0" + } + values { + string_value: "1" + } + values { + string_value: "2" + } + } + } + } + } + } + server: "localhost:15000" + hint { + operation_uid: 1 + database_id: 1099547279361 + schema_generation: "\001\001" + key: "A\206\310\002\234\2311\000x" + limit_key: "A\206\311" + group_uid: 291504129 + split_id: 14079378335067013121 + tablet_uid: 291504129 + } + } +} +test_case { + name: "RangeQuery" + event { + name: "RangeQuery/0" + sql { + session: "instances/default/databases/db30/sessions/CjynQBcGQrjQeodWrxOhJQjQgAKxjCQ-leDzPdhgZW8QORrZibtwD7HWqz-U8RNelce3k2eYamxiIMIE2SQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099544133633 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "start" + } + } + } + } + } + event { + name: "RangeQuery/2" + sql { + session: "instances/default/databases/db30/sessions/CjynQBcGQrjQeodWrxOhJQjQgAKxjCQ-leDzPdhgZW8QORrZibtwD7HWqz-U8RNelce3k2eYamxiIMIE2SQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099544133633 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099544133633 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 263192577 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326o/\274" + } + group { + group_uid: 263192577 + tablets { + tablet_uid: 263192577 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001q" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\017\260\000\001" + } + key_recipes { + } + } + } + event { + name: "RangeQuery/4" + sql { + session: "instances/default/databases/db30/sessions/CjynQBcGQrjQeodWrxOhJQjQgAKxjCQ-leDzPdhgZW8QORrZibtwD7HWqz-U8RNelce3k2eYamxiIMIE2SQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099544133633 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 263192577 + split_id: 14079378335067013120 + tablet_uid: 263192577 + } + } + event { + cache_update { + database_id: 1099544133633 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 263192577 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326s\202\243" + } + group { + group_uid: 263192577 + tablets { + tablet_uid: 263192577 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001q" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\017\260\000\001" + } + key_recipes { + } + } + } + event { + name: "RangeQuery/6" + sql { + session: "instances/default/databases/db30/sessions/CjynQBcGQrjQeodWrxOhJQjQgAKxjCQ-leDzPdhgZW8QORrZibtwD7HWqz-U8RNelce3k2eYamxiIMIE2SQQ7_e2zsz5kAM" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0 FROM T WHERE Key >= @start AND Key < @limit" + params { + fields { + key: "limit" + value { + string_value: "5" + } + } + fields { + key: "start" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099544133633 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 263192577 + split_id: 14079378335067013120 + tablet_uid: 263192577 + } + } +} +test_case { + name: "RangeRead" + event { + name: "RangeRead/0" + read { + session: "instances/default/databases/db13/sessions/Cj3u91rLO503wDtURxIEP9XFEOjXODpgPD-THdCp1MX-LrLsBFNM7_IhP8F8Q3XzmyG1OGNoiDoCA0--eIvGEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099525259265 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "RangeRead/2" + read { + session: "instances/default/databases/db13/sessions/Cj3u91rLO503wDtURxIEP9XFEOjXODpgPD-THdCp1MX-LrLsBFNM7_IhP8F8Q3XzmyG1OGNoiDoCA0--eIvGEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099525259265 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + limit_key: "A\206\310\002\234\2315\000x" + } + } + event { + cache_update { + database_id: 1099525259265 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 140509185 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\270\342\357" + } + group { + group_uid: 140509185 + tablets { + tablet_uid: 140509185 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\244" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\010`\000\001" + } + key_recipes { + } + } + } + event { + name: "RangeRead/4" + read { + session: "instances/default/databases/db13/sessions/Cj3u91rLO503wDtURxIEP9XFEOjXODpgPD-THdCp1MX-LrLsBFNM7_IhP8F8Q3XzmyG1OGNoiDoCA0--eIvGEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099525259265 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 140509185 + split_id: 14079378335067013120 + tablet_uid: 140509185 + } + } + event { + cache_update { + database_id: 1099525259265 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 140509185 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317\270\342\357" + } + group { + group_uid: 140509185 + tablets { + tablet_uid: 140509185 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\244" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\010`\000\001" + } + key_recipes { + } + } + } + event { + name: "RangeRead/6" + read { + session: "instances/default/databases/db13/sessions/Cj3u91rLO503wDtURxIEP9XFEOjXODpgPD-THdCp1MX-LrLsBFNM7_IhP8F8Q3XzmyG1OGNoiDoCA0--eIvGEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + key_set { + ranges { + start_closed { + values { + string_value: "0" + } + } + end_open { + values { + string_value: "5" + } + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099525259265 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 140509185 + split_id: 14079378335067013120 + tablet_uid: 140509185 + } + } +} +test_case { + name: "SchemaChange" + event { + name: "SchemaChange/0" + read { + session: "instances/default/databases/db12/sessions/Cj3nfoJOAt2jL0sglk3NLsu54-3zpWp6CnodAvXgomtqQPO2naJaUHeFEOSVQCkj2_dfxCCOBf7YIL6QQT2eEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099524210689 + key_recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "Key" + } + } + } + } + } + event { + name: "SchemaChange/2" + read { + session: "instances/default/databases/db12/sessions/Cj3nfoJOAt2jL0sglk3NLsu54-3zpWp6CnodAvXgomtqQPO2naJaUHeFEOSVQCkj2_dfxCCOBf7YIL6QQT2eEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099524210689 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099524210689 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 134217729 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317k\222^" + } + group { + group_uid: 134217729 + tablets { + tablet_uid: 134217729 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\236" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\010\000\000\001" + } + key_recipes { + } + } + } + event { + name: "SchemaChange/4" + read { + session: "instances/default/databases/db12/sessions/Cj3nfoJOAt2jL0sglk3NLsu54-3zpWp6CnodAvXgomtqQPO2naJaUHeFEOSVQCkj2_dfxCCOBf7YIL6QQT2eEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099524210689 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 134217729 + split_id: 14079378335067013120 + tablet_uid: 134217729 + } + } + event { + cache_update { + database_id: 1099524210689 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 134217729 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\317m\306\322" + } + group { + group_uid: 134217729 + tablets { + tablet_uid: 134217729 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\001\236" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\010\000\000\001" + } + key_recipes { + } + } + } + event { + name: "SchemaChange/6" + read { + session: "instances/default/databases/db12/sessions/Cj3nfoJOAt2jL0sglk3NLsu54-3zpWp6CnodAvXgomtqQPO2naJaUHeFEOSVQCkj2_dfxCCOBf7YIL6QQT2eEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099524210689 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 134217729 + split_id: 14079378335067013120 + tablet_uid: 134217729 + } + } + event { + name: "SchemaChange/7" + read { + session: "instances/default/databases/db12/sessions/Cj3nfoJOAt2jL0sglk3NLsu54-3zpWp6CnodAvXgomtqQPO2naJaUHeFEOSVQCkj2_dfxCCOBf7YIL6QQT2eEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + columns: "V2" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099524210689 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 134217729 + split_id: 14079378335067013120 + tablet_uid: 134217729 + } + } + event { + name: "SchemaChange/8" + read { + session: "instances/default/databases/db12/sessions/Cj3nfoJOAt2jL0sglk3NLsu54-3zpWp6CnodAvXgomtqQPO2naJaUHeFEOSVQCkj2_dfxCCOBf7YIL6QQT2eEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + table: "T" + columns: "Key" + columns: "V0" + columns: "V1" + key_set { + keys { + values { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 2 + database_id: 1099524210689 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 134217729 + split_id: 14079378335067013120 + tablet_uid: 134217729 + } + } +} +test_case { + name: "SchemaChange_Query" + event { + name: "SchemaChange_Query/0" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + } + } + event { + cache_update { + database_id: 1099543085057 + key_recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 1 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "SchemaChange_Query/2" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 1 + database_id: 1099543085057 + schema_generation: "\001\001" + key: "A\206\310\002\234\2310\000x" + } + } + event { + cache_update { + database_id: 1099543085057 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326)\373>" + } + group { + group_uid: 256901121 + tablets { + tablet_uid: 256901121 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001k" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\017P\000\001" + } + key_recipes { + } + } + } + event { + name: "SchemaChange_Query/4" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099543085057 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + tablet_uid: 256901121 + } + } + event { + cache_update { + database_id: 1099543085057 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326+\204M" + } + group { + group_uid: 256901121 + tablets { + tablet_uid: 256901121 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001k" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\017P\000\001" + } + key_recipes { + } + } + } + event { + name: "SchemaChange_Query/6" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099543085057 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + tablet_uid: 256901121 + } + } + event { + name: "SchemaChange_Query/7" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1, V2 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 1 + database_id: 1099543085057 + schema_generation: "\001\001" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + tablet_uid: 256901121 + } + } + event { + name: "SchemaChange_Query/8" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + hint { + operation_uid: 2 + database_id: 1099543085057 + schema_generation: "\001\001" + } + } + event { + cache_update { + database_id: 1099543085057 + key_recipes { + schema_generation: "\001\002" + recipe { + operation_uid: 2 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "key" + } + } + } + } + } + event { + name: "SchemaChange_Query/10" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 2 + database_id: 1099543085057 + schema_generation: "\001\002" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + tablet_uid: 256901121 + } + } + event { + cache_update { + database_id: 1099543085057 + range { + start_key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + generation: "\000\007\006C\314\326+\204M" + } + group { + group_uid: 256901121 + tablets { + tablet_uid: 256901121 + server_address: "localhost:15100" + role: READ_WRITE + incarnation: "\002\001k" + } + generation: "\010\377\377\377\377\377\377\377\377\000\004\017P\000\001" + } + key_recipes { + } + } + } + event { + name: "SchemaChange_Query/12" + sql { + session: "instances/default/databases/db29/sessions/Cj3q6mix4HEACSTV7qfn-anCj6i3qJoPhAU9-97hUwZ_mBPgNQF9vRPFpH5onCRy5ZxWf8FuDJlYvcD-53bMEO_3ts7M-ZAD" + transaction { + single_use { + read_only { + strong: true + } + } + } + sql: "SELECT Key, V0, V1 FROM T WHERE Key = @key" + params { + fields { + key: "key" + value { + string_value: "0" + } + } + } + } + server: "localhost:15100" + hint { + operation_uid: 2 + database_id: 1099543085057 + schema_generation: "\001\002" + key: "A\206\310" + limit_key: "A\206\311" + group_uid: 256901121 + split_id: 14079378335067013120 + tablet_uid: 256901121 + } + } +} diff --git a/google-cloud-spanner/src/test/resources/logging.properties b/google-cloud-spanner/src/test/resources/logging.properties new file mode 100644 index 00000000000..c817ab7acd9 --- /dev/null +++ b/google-cloud-spanner/src/test/resources/logging.properties @@ -0,0 +1,7 @@ +.level=INFO +.handlers=java.util.logging.ConsoleHandler +java.util.logging.ConsoleHandler.level=INFO +java.util.logging.Logger.useParentHandlers=true + +# Set log level to WARN for SpannerImpl to prevent log spamming of the Spanner configuration. +com.google.cloud.spanner.SpannerImpl.LEVEL=WARN diff --git a/google-cloud-spanner/src/test/resources/range_cache_test.textproto b/google-cloud-spanner/src/test/resources/range_cache_test.textproto new file mode 100644 index 00000000000..70a5e1151d5 --- /dev/null +++ b/google-cloud-spanner/src/test/resources/range_cache_test.textproto @@ -0,0 +1,1204 @@ +test_case { + name: "no_key" + step { + test { + result { + } + } + } +} + +test_case { + name: "empty_key" + step { + test { + key: "" + result { + key: "" + } + } + } +} + +test_case { + name: "empty_cache" + step { + update { + } + test { + key: "a" + result { + key: "a" + } + } + } +} + +test_case { + name: "basic_cache_hit" + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 0 + skip: false + } + } + } + test { + key: "a" + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "z" + result { + key: "z" + } + } + } +} + +test_case { + name: "cache_math" + step { + # Start with [k..n)->split 3 + update { + range { + start_key: "k" + limit_key: "n" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + tablets { + tablet_uid: 4 + server_address: "server1" + } + } + } + test { + key: "k" + result { + key: "k" + limit_key: "n" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + } + # Insert [m..o)->4. Now: + # [k..m)->3 + # [m..o)->4 + step { + update { + range { + start_key: "m" + limit_key: "o" + group_uid: 2 + split_id: 4 + generation: "23" + } + } + test { + key: "k" + result { + key: "k" + limit_key: "m" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "m" + result { + key: "m" + limit_key: "o" + group_uid: 2 + split_id: 4 + tablet_uid: 4 + } + server: "server1" + } + } + # Insert [n..p)->5. Now: + # [k..m)->3 + # [m..o)->4 + # [o..p)->5 + step { + update { + range { + start_key: "n" + limit_key: "p" + group_uid: 2 + split_id: 5 + generation: "24" + } + } + test { + key: "k" + result { + key: "k" + limit_key: "m" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "m" + result { + key: "m" + limit_key: "n" + group_uid: 2 + split_id: 4 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "n" + result { + key: "n" + limit_key: "p" + group_uid: 2 + split_id: 5 + tablet_uid: 4 + } + server: "server1" + } + } + # Exact range replacement: Insert [m..n)->6 + step { + update { + range { + start_key: "m" + limit_key: "n" + group_uid: 2 + split_id: 6 + generation: "25" + } + } + test { + key: "k" + result { + key: "k" + limit_key: "m" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "m" + result { + key: "m" + limit_key: "n" + group_uid: 2 + split_id: 6 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "n" + result { + key: "n" + limit_key: "p" + group_uid: 2 + split_id: 5 + tablet_uid: 4 + } + server: "server1" + } + } + # Merge ranges, insert [k..o)->7. Now: + # [k..o)->7 + # [o..p)->5 + step { + update { + range { + start_key: "k" + limit_key: "o" + group_uid: 2 + split_id: 7 + generation: "26" + } + } + test { + key: "k" + result { + key: "k" + limit_key: "o" + group_uid: 2 + split_id: 7 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "n" + result { + key: "k" + limit_key: "o" + group_uid: 2 + split_id: 7 + tablet_uid: 4 + } + server: "server1" + } + test { + key: "o" + result { + key: "o" + limit_key: "p" + group_uid: 2 + split_id: 5 + tablet_uid: 4 + } + server: "server1" + } + } + # Inserting an old range does nothing. + step { + update { + range { + start_key: "k" + limit_key: "o" + group_uid: 2 + split_id: 8 + generation: "25" + } + } + test { + key: "k" + result { + key: "k" + limit_key: "o" + group_uid: 2 + split_id: 7 + tablet_uid: 4 + } + server: "server1" + } + } + # Old ranges that are bigger than the existing old ranges are also discarded. + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 8 + generation: "25" + } + } + test { + key: "k" + result { + key: "k" + limit_key: "o" + group_uid: 2 + split_id: 7 + tablet_uid: 4 + } + server: "server1" + } + } +} + +test_case { + name: "leader_selection" + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 0 + skip: false + } + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central1" + role: READ_WRITE + incarnation: "55" + distance: 1 + skip: false + } + tablets { + tablet_uid: 6 + server_address: "server3" + location: "us-central1" + role: READ_WRITE + incarnation: "66" + distance: 10 + skip: false + } + leader_index: 1 + } + } + test { + key: "a" + leader: true + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 5 + } + server: "server2" + } + } + # Update the leader to be tablet 4. + step { + update { + group { + group_uid: 2 + leader_index: 0 + generation: "23" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 0 + skip: false + } + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central1" + role: READ_WRITE + incarnation: "55" + distance: 1 + skip: false + } + tablets { + tablet_uid: 6 + server_address: "server3" + location: "us-central1" + role: READ_WRITE + incarnation: "66" + distance: 10 + skip: false + } + } + } + test { + key: "a" + leader: true + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + } + # Old generation updates are ignored. + step { + update { + group { + group_uid: 2 + leader_index: 1 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 0 + skip: false + } + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central1" + role: READ_WRITE + incarnation: "55" + distance: 1 + skip: false + } + tablets { + tablet_uid: 6 + server_address: "server3" + location: "us-central1" + role: READ_WRITE + incarnation: "66" + distance: 10 + skip: false + } + } + } + test { + key: "a" + leader: true + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + } +} + +# We should not use a leader that is too far away, and instead use a close +# non-leader replica. +test_case { + name: "far_away_leader" + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 5 + skip: false + } + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central1" + role: READ_WRITE + incarnation: "55" + distance: 6 + skip: false + } + leader_index: 1 + } + } + test { + key: "a" + leader: true + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + } +} + +# No leader - make sure we handle leader_index: -1 +test_case { + name: "no_leader" + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 0 + skip: false + } + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central1" + role: READ_WRITE + incarnation: "55" + distance: 1 + skip: false + } + leader_index: -1 + } + } + test { + key: "a" + leader: true + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + } +} + +test_case { + name: "tablet_location_updates" + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + incarnation: "33" + } + } + } + test { + key: "a" + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + } + step { + update { + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server2" + incarnation: "34" + } + } + } + test { + key: "a" + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server2" + } + } + # Distance updates are allowed with same incarnation. + step { + update { + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server2" + incarnation: "34" + distance: 6 + } + } + } + test { + key: "a" + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + } + } + } + step { + update { + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server2" + incarnation: "34" + distance: 2 + } + } + } + test { + key: "a" + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server2" + } + } +} + +test_case { + name: "replica_reshuffling" + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 0 + skip: false + } + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central1" + role: READ_WRITE + incarnation: "55" + distance: 1 + skip: false + } + } + } + test { + key: "a" + leader: true + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + } + # Reorder the replicas. The updates should apply correctly, and the new + # first replica should be used. + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central1" + role: READ_WRITE + incarnation: "55" + distance: 0 + skip: false + } + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 1 + skip: false + } + } + } + test { + key: "a" + leader: true + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 5 + } + server: "server2" + } + } +} + +# Directed read options: region picking +test_case { + name: "directed_read_options" + step { + update { + range { + start_key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + location: "us-central1" + role: READ_WRITE + incarnation: "44" + distance: 0 + skip: false + } + tablets { + tablet_uid: 5 + server_address: "server2" + location: "us-central2" + role: READ_WRITE + incarnation: "55" + distance: 1 + skip: false + } + tablets { + tablet_uid: 6 + server_address: "server3" + location: "us-central3" + role: READ_ONLY + incarnation: "66" + distance: 2 + skip: false + } + } + } + # Specific location + test { + key: "a" + directed_read_options { + include_replicas { + replica_selections { + location: "us-central2" + } + } + } + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 5 + } + server: "server2" + } + # Specific replica type + test { + key: "a" + directed_read_options { + include_replicas { + replica_selections { + type: READ_ONLY + } + } + } + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 6 + } + server: "server3" + } + # Specific location and replica type, match found. + test { + key: "a" + directed_read_options { + include_replicas { + replica_selections { + location: "us-central3" + type: READ_ONLY + } + } + } + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 6 + } + server: "server3" + } + # Specific location and replica type, no match found. + test { + key: "a" + directed_read_options { + include_replicas { + replica_selections { + location: "us-central2" + type: READ_ONLY + } + } + } + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + } + } + # Exclude a location + test { + key: "a" + directed_read_options { + exclude_replicas { + replica_selections { + location: "us-central1" + } + } + } + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 5 + } + server: "server2" + } + # Exclude a replica type + test { + key: "a" + directed_read_options { + exclude_replicas { + replica_selections { + type: READ_WRITE + } + } + } + result { + key: "a" + limit_key: "z" + group_uid: 2 + split_id: 3 + tablet_uid: 6 + } + server: "server3" + } + } +} + +test_case { + name: "range_calls" + step { + update { + range { + start_key: "b" + limit_key: "f" + group_uid: 2 + split_id: 3 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + incarnation: "44" + } + } + } + # Part of the range matching start. + test { + key: "b" + limit_key: "c" + result { + key: "b" + limit_key: "f" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + # Part of the range matching limit. + test { + key: "e" + limit_key: "f" + result { + key: "b" + limit_key: "f" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + # Exact range match. + test { + key: "b" + limit_key: "f" + result { + key: "b" + limit_key: "f" + group_uid: 2 + split_id: 3 + tablet_uid: 4 + } + server: "server1" + } + # Range does not overlap, start. + test { + key: "a" + limit_key: "f" + result { + key: "a" + limit_key: "f" + } + } + # Range does not overlap, limit. + test { + key: "b" + limit_key: "g" + result { + key: "b" + limit_key: "g" + } + } + # Range does not overlap, both sides. + test { + key: "a" + limit_key: "g" + result { + key: "a" + limit_key: "g" + } + } + } +} + +test_case { + name: "range_calls_random" + step { + update { + range { + start_key: "a" + limit_key: "c" + group_uid: 2 + split_id: 3 + generation: "22" + } + range { + start_key: "c" + limit_key: "e" + group_uid: 2 + split_id: 4 + generation: "22" + } + range { + start_key: "e" + limit_key: "g" + group_uid: 2 + split_id: 5 + generation: "22" + } + range { + start_key: "j" + limit_key: "l" + group_uid: 2 + split_id: 6 + generation: "22" + } + range { + start_key: "o" + limit_key: "q" + group_uid: 2 + split_id: 7 + generation: "22" + } + group { + group_uid: 2 + generation: "22" + tablets { + tablet_uid: 4 + server_address: "server1" + incarnation: "44" + } + } + } + # Requested range covers multiple splits with COVERING_SPLIT. + # Should pick nothing. + test { + key: "b" + limit_key: "f" + range_mode: COVERING_SPLIT + result { + key: "b" + limit_key: "f" + } + } + # With PICK_RANDOM, should get a random split that overlaps. + test { + key: "b" + limit_key: "f" + range_mode: PICK_RANDOM + result { + key: "c" + limit_key: "e" + group_uid: 2 + split_id: 4 + tablet_uid: 4 + } + server: "server1" + } + # There is a gap in the cache for the requested ranges, so we should pick + # nothing. Test gaps at the start, in the middle, at the end, and at + # the end of the entire cache. + test { + key: "g" # Matches the limit of prior split. + limit_key: "k" # Inside the next cached split after 'g'. + range_mode: PICK_RANDOM + result { + key: "g" + limit_key: "k" + } + } + test { + key: "h" # In a gap between cached splits. + limit_key: "k" # Inside the next cached split after 'h'. + range_mode: PICK_RANDOM + result { + key: "h" + limit_key: "k" + } + } + test { + key: "f" # Inside a cached split + limit_key: "k" # Inside another cached split, but a gap between f and k. + range_mode: PICK_RANDOM + result { + key: "f" + limit_key: "k" + } + } + test { + key: "k" # Inside a cached split. + limit_key: "m" # In a gap between the cached split and the next one. + range_mode: PICK_RANDOM + result { + key: "k" + limit_key: "m" + } + } + test { + key: "p" # In the last cached split in the cache. + limit_key: "z" # Should cause iteration to hit the end of the cache. + range_mode: PICK_RANDOM + result { + key: "p" + limit_key: "z" + } + } + # Gaps are okay if we have enough cached entries. + # Test the boundary condition first - we only have 5 entries in the cache. + test { + key: "a" + limit_key: "z" + range_mode: PICK_RANDOM + min_cache_entries_for_random_pick: 6 + result { + key: "a" + limit_key: "z" + } + } + test { + key: "a" + limit_key: "z" + range_mode: PICK_RANDOM + min_cache_entries_for_random_pick: 5 + result { + key: "e" + limit_key: "g" + group_uid: 2 + split_id: 5 + tablet_uid: 4 + } + server: "server1" + } + } +} + + diff --git a/google-cloud-spanner/src/test/resources/recipe_test.textproto b/google-cloud-spanner/src/test/resources/recipe_test.textproto new file mode 100644 index 00000000000..43fae04f5ec --- /dev/null +++ b/google-cloud-spanner/src/test/resources/recipe_test.textproto @@ -0,0 +1,3943 @@ +test_case { + name: "DataTypeTest_BOOL" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_BOOL" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: BOOL + } + identifier: "k" + } + } + } + test { + key { + values { + bool_value: false + } + } + start: "A\206\310\002\234\200\000" + } + test { + key { + values { + bool_value: true + } + } + start: "A\206\310\002\234\200\002" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + string_value: "true" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + number_value: 0 + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key_range { + start_closed { + values { + bool_value: false + } + } + end_open { + values { + bool_value: true + } + } + } + start: "A\206\310\002\234\200\000" + limit: "A\206\310\002\234\200\002" + } + test { + key_range { + start_open { + values { + bool_value: false + } + } + end_closed { + values { + bool_value: true + } + } + } + start: "A\206\310\002\234\200\001" + limit: "A\206\310\002\234\200\003" + } + test { + key_range { + start_closed { + values { + bool_value: false + } + } + end_closed { + values { + bool_value: true + } + } + } + start: "A\206\310\002\234\200\000" + limit: "A\206\310\002\234\200\003" + } + test { + key_range { + start_open { + values { + bool_value: false + } + } + end_open { + values { + bool_value: true + } + } + } + start: "A\206\310\002\234\200\001" + limit: "A\206\310\002\234\200\002" + } +} + +test_case { + name: "DataTypeTest_BOOL_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_BOOL_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: BOOL + } + identifier: "k" + } + } + } + test { + key { + values { + bool_value: true + } + } + start: "A\206\310\002\273\250\374" + } + test { + key { + values { + bool_value: false + } + } + start: "A\206\310\002\273\250\376" + } + test { + key_range { + start_closed { + values { + bool_value: true + } + } + end_open { + values { + bool_value: false + } + } + } + start: "A\206\310\002\273\250\374" + limit: "A\206\310\002\273\250\376" + } + test { + key_range { + start_open { + values { + bool_value: true + } + } + end_closed { + values { + bool_value: false + } + } + } + start: "A\206\310\002\273\250\375" + limit: "A\206\310\002\273\250\377" + } + test { + key_range { + start_closed { + values { + bool_value: true + } + } + end_closed { + values { + bool_value: false + } + } + } + start: "A\206\310\002\273\250\374" + limit: "A\206\310\002\273\250\377" + } + test { + key_range { + start_open { + values { + bool_value: true + } + } + end_open { + values { + bool_value: false + } + } + } + start: "A\206\310\002\273\250\375" + limit: "A\206\310\002\273\250\376" + } +} + +test_case { + name: "DataTypeTest_ENUM" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_ENUM" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: ENUM + proto_type_fqn: "spanner.test.TestEnum" + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "1" + } + } + start: "A\206\310\002\234\221\002" + } + test { + key { + values { + string_value: "2" + } + } + start: "A\206\310\002\234\221\004" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + string_value: "NUMBER_ONE" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + number_value: 0 + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key_range { + start_closed { + values { + string_value: "1" + } + } + end_open { + values { + string_value: "2" + } + } + } + start: "A\206\310\002\234\221\002" + limit: "A\206\310\002\234\221\004" + } + test { + key_range { + start_open { + values { + string_value: "1" + } + } + end_closed { + values { + string_value: "2" + } + } + } + start: "A\206\310\002\234\221\003" + limit: "A\206\310\002\234\221\005" + } + test { + key_range { + start_closed { + values { + string_value: "1" + } + } + end_closed { + values { + string_value: "2" + } + } + } + start: "A\206\310\002\234\221\002" + limit: "A\206\310\002\234\221\005" + } + test { + key_range { + start_open { + values { + string_value: "1" + } + } + end_open { + values { + string_value: "2" + } + } + } + start: "A\206\310\002\234\221\003" + limit: "A\206\310\002\234\221\004" + } +} + +test_case { + name: "DataTypeTest_ENUM_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_ENUM_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: ENUM + proto_type_fqn: "spanner.test.TestEnum" + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "2" + } + } + start: "A\206\310\002\273\260\372" + } + test { + key { + values { + string_value: "1" + } + } + start: "A\206\310\002\273\260\374" + } + test { + key_range { + start_closed { + values { + string_value: "2" + } + } + end_open { + values { + string_value: "1" + } + } + } + start: "A\206\310\002\273\260\372" + limit: "A\206\310\002\273\260\374" + } + test { + key_range { + start_open { + values { + string_value: "2" + } + } + end_closed { + values { + string_value: "1" + } + } + } + start: "A\206\310\002\273\260\373" + limit: "A\206\310\002\273\260\375" + } + test { + key_range { + start_closed { + values { + string_value: "2" + } + } + end_closed { + values { + string_value: "1" + } + } + } + start: "A\206\310\002\273\260\372" + limit: "A\206\310\002\273\260\375" + } + test { + key_range { + start_open { + values { + string_value: "2" + } + } + end_open { + values { + string_value: "1" + } + } + } + start: "A\206\310\002\273\260\373" + limit: "A\206\310\002\273\260\374" + } +} + +test_case { + name: "DataTypeTest_INT64" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_INT64" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "-9223372036854775808" + } + } + start: "A\206\310\002\234\211\000\000\000\000\000\000\000\000" + } + test { + key { + values { + string_value: "9223372036854775807" + } + } + start: "A\206\310\002\234\230\377\377\377\377\377\377\377\376" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + string_value: "0" + } + } + start: "A\206\310\002\234\221\000" + } + test { + key { + values { + string_value: "-1" + } + } + start: "A\206\310\002\234\220\376" + } + test { + key { + values { + string_value: "1" + } + } + start: "A\206\310\002\234\221\002" + } + test { + key { + values { + number_value: 1 + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "Infinity" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key_range { + start_closed { + values { + string_value: "-9223372036854775808" + } + } + end_open { + values { + string_value: "9223372036854775807" + } + } + } + start: "A\206\310\002\234\211\000\000\000\000\000\000\000\000" + limit: "A\206\310\002\234\230\377\377\377\377\377\377\377\376" + } + test { + key_range { + start_open { + values { + string_value: "-9223372036854775808" + } + } + end_closed { + values { + string_value: "9223372036854775807" + } + } + } + start: "A\206\310\002\234\211\000\000\000\000\000\000\000\001" + limit: "A\206\310\002\234\230\377\377\377\377\377\377\377\377" + } + test { + key_range { + start_closed { + values { + string_value: "-9223372036854775808" + } + } + end_closed { + values { + string_value: "9223372036854775807" + } + } + } + start: "A\206\310\002\234\211\000\000\000\000\000\000\000\000" + limit: "A\206\310\002\234\230\377\377\377\377\377\377\377\377" + } + test { + key_range { + start_open { + values { + string_value: "-9223372036854775808" + } + } + end_open { + values { + string_value: "9223372036854775807" + } + } + } + start: "A\206\310\002\234\211\000\000\000\000\000\000\000\001" + limit: "A\206\310\002\234\230\377\377\377\377\377\377\377\376" + } +} + +test_case { + name: "DataTypeTest_INT64_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_INT64_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: INT64 + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "9223372036854775807" + } + } + start: "A\206\310\002\273\251\000\000\000\000\000\000\000\000" + } + test { + key { + values { + string_value: "-9223372036854775808" + } + } + start: "A\206\310\002\273\270\377\377\377\377\377\377\377\376" + } + test { + key_range { + start_closed { + values { + string_value: "9223372036854775807" + } + } + end_open { + values { + string_value: "-9223372036854775808" + } + } + } + start: "A\206\310\002\273\251\000\000\000\000\000\000\000\000" + limit: "A\206\310\002\273\270\377\377\377\377\377\377\377\376" + } + test { + key_range { + start_open { + values { + string_value: "9223372036854775807" + } + } + end_closed { + values { + string_value: "-9223372036854775808" + } + } + } + start: "A\206\310\002\273\251\000\000\000\000\000\000\000\001" + limit: "A\206\310\002\273\270\377\377\377\377\377\377\377\377" + } + test { + key_range { + start_closed { + values { + string_value: "9223372036854775807" + } + } + end_closed { + values { + string_value: "-9223372036854775808" + } + } + } + start: "A\206\310\002\273\251\000\000\000\000\000\000\000\000" + limit: "A\206\310\002\273\270\377\377\377\377\377\377\377\377" + } + test { + key_range { + start_open { + values { + string_value: "9223372036854775807" + } + } + end_open { + values { + string_value: "-9223372036854775808" + } + } + } + start: "A\206\310\002\273\251\000\000\000\000\000\000\000\001" + limit: "A\206\310\002\273\270\377\377\377\377\377\377\377\376" + } +} + +test_case { + name: "DataTypeTest_FLOAT64" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_FLOAT64" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: FLOAT64 + } + identifier: "k" + } + } + } + test { + key { + values { + number_value: -1.7976931348623157e+308 + } + } + start: "A\206\310\002\234\302\000 \000\000\000\000\000\002" + } + test { + key { + values { + number_value: 1.7976931348623157e+308 + } + } + start: "A\206\310\002\234\321\377\337\377\377\377\377\377\376" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + number_value: 0 + } + } + start: "A\206\310\002\234\312\000" + } + test { + key { + values { + number_value: -1 + } + } + start: "A\206\310\002\234\302\200 \000\000\000\000\000\000" + } + test { + key { + values { + number_value: 1 + } + } + start: "A\206\310\002\234\321\177\340\000\000\000\000\000\000" + } + test { + key { + values { + string_value: "Infinity" + } + } + start: "A\206\310\002\234\321\377\340\000\000\000\000\000\000" + } + test { + key { + values { + string_value: "-Infinity" + } + } + start: "A\206\310\002\234\302\000 \000\000\000\000\000\000" + } + test { + key { + values { + string_value: "NaN" + } + } + start: "A\206\310\002\234\321\377\360\000\000\000\000\000\000" + } + test { + key { + values { + string_value: "UnexpectedString" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + bool_value: true + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key_range { + start_closed { + values { + number_value: -1.7976931348623157e+308 + } + } + end_open { + values { + number_value: 1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\234\302\000 \000\000\000\000\000\002" + limit: "A\206\310\002\234\321\377\337\377\377\377\377\377\376" + } + test { + key_range { + start_open { + values { + number_value: -1.7976931348623157e+308 + } + } + end_closed { + values { + number_value: 1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\234\302\000 \000\000\000\000\000\003" + limit: "A\206\310\002\234\321\377\337\377\377\377\377\377\377" + } + test { + key_range { + start_closed { + values { + number_value: -1.7976931348623157e+308 + } + } + end_closed { + values { + number_value: 1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\234\302\000 \000\000\000\000\000\002" + limit: "A\206\310\002\234\321\377\337\377\377\377\377\377\377" + } + test { + key_range { + start_open { + values { + number_value: -1.7976931348623157e+308 + } + } + end_open { + values { + number_value: 1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\234\302\000 \000\000\000\000\000\003" + limit: "A\206\310\002\234\321\377\337\377\377\377\377\377\376" + } +} + +test_case { + name: "DataTypeTest_FLOAT64_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_FLOAT64_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: FLOAT64 + } + identifier: "k" + } + } + } + test { + key { + values { + number_value: 1.7976931348623157e+308 + } + } + start: "A\206\310\002\273\322\000 \000\000\000\000\000\000" + } + test { + key { + values { + number_value: -1.7976931348623157e+308 + } + } + start: "A\206\310\002\273\341\377\337\377\377\377\377\377\374" + } + test { + key_range { + start_closed { + values { + number_value: 1.7976931348623157e+308 + } + } + end_open { + values { + number_value: -1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\273\322\000 \000\000\000\000\000\000" + limit: "A\206\310\002\273\341\377\337\377\377\377\377\377\374" + } + test { + key_range { + start_open { + values { + number_value: 1.7976931348623157e+308 + } + } + end_closed { + values { + number_value: -1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\273\322\000 \000\000\000\000\000\001" + limit: "A\206\310\002\273\341\377\337\377\377\377\377\377\375" + } + test { + key_range { + start_closed { + values { + number_value: 1.7976931348623157e+308 + } + } + end_closed { + values { + number_value: -1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\273\322\000 \000\000\000\000\000\000" + limit: "A\206\310\002\273\341\377\337\377\377\377\377\377\375" + } + test { + key_range { + start_open { + values { + number_value: 1.7976931348623157e+308 + } + } + end_open { + values { + number_value: -1.7976931348623157e+308 + } + } + } + start: "A\206\310\002\273\322\000 \000\000\000\000\000\001" + limit: "A\206\310\002\273\341\377\337\377\377\377\377\377\374" + } +} + +test_case { + name: "DataTypeTest_TIMESTAMP" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_TIMESTAMP" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: TIMESTAMP + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + start: "A\206\310\002\234\231\177\377\020\377\020\361\210n\t\000\360\000\360\000\360\000\360\000\360\000x" + } + test { + key { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + start: "A\206\310\002\234\231\200\000\360\000\360:\377\020\364A\177;\232\311\377\020\000x" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + string_value: "1970-01-01T00:00:00Z" + } + } + start: "A\206\310\002\234\231\200\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000x" + } + test { + key { + values { + string_value: "2023-10-26T10:00:00Z" + } + } + start: "A\206\310\002\234\231\200\000\360\000\360\000\360e:8\240\000\360\000\360\000\360\000\360\000x" + } + test { + key { + values { + string_value: "2023-10-26T10:00:00.1234567890Z" + } + } + start: "A\206\310\002\234\231\200\000\360\000\360\000\360e:8\240\007[\315\025\000x" + } + test { + key { + values { + string_value: "2023-10-26T10:00:00.1234567891Z" + } + } + start: "A\206\310\002\234\231\200\000\360\000\360\000\360e:8\240\007[\315\025\000x" + } + test { + key { + values { + string_value: "2023-10-26T10:00:00.1234567899Z" + } + } + start: "A\206\310\002\234\231\200\000\360\000\360\000\360e:8\240\007[\315\025\000x" + } + test { + key { + values { + string_value: "0000-10-26T10:00:00Z" + } + } + start: "A\206\310\002\234\231\177\377\020\377\020\361\210\026A \000\360\000\360\000\360\000\360\000x" + } + test { + key { + values { + string_value: "NOT A TIMESTAMP" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + number_value: 0 + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-10-26T10:00:00" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-10-26T10:00:00z" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-10-26T10:00:00+07:00" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-13-26T10:00:00Z" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-10-26T10:00:61Z" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-10-26 10:00:00Z" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "10000-10-26T10:00:00Z" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key_range { + start_closed { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + end_open { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + } + start: "A\206\310\002\234\231\177\377\020\377\020\361\210n\t\000\360\000\360\000\360\000\360\000\360\000x" + limit: "A\206\310\002\234\231\200\000\360\000\360:\377\020\364A\177;\232\311\377\020\000x" + } + test { + key_range { + start_open { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + end_closed { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + } + start: "A\206\310\002\234\231\177\377\020\377\020\361\210n\t\000\360\000\360\000\360\000\360\000\360\000y" + limit: "A\206\310\002\234\231\200\000\360\000\360:\377\020\364A\177;\232\311\377\020\000y" + } + test { + key_range { + start_closed { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + end_closed { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + } + start: "A\206\310\002\234\231\177\377\020\377\020\361\210n\t\000\360\000\360\000\360\000\360\000\360\000x" + limit: "A\206\310\002\234\231\200\000\360\000\360:\377\020\364A\177;\232\311\377\020\000y" + } + test { + key_range { + start_open { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + end_open { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + } + start: "A\206\310\002\234\231\177\377\020\377\020\361\210n\t\000\360\000\360\000\360\000\360\000\360\000y" + limit: "A\206\310\002\234\231\200\000\360\000\360:\377\020\364A\177;\232\311\377\020\000x" + } +} + +test_case { + name: "DataTypeTest_TIMESTAMP_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_TIMESTAMP_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: TIMESTAMP + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + start: "A\206\310\002\273\271\177\377\020\377\020\305\000\360\013\276\200\304e6\000\360\377x" + } + test { + key { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + start: "A\206\310\002\273\271\200\000\360\000\360\016w\221\366\377\020\377\020\377\020\377\020\377\020\377x" + } + test { + key_range { + start_closed { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + end_open { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + } + start: "A\206\310\002\273\271\177\377\020\377\020\305\000\360\013\276\200\304e6\000\360\377x" + limit: "A\206\310\002\273\271\200\000\360\000\360\016w\221\366\377\020\377\020\377\020\377\020\377\020\377x" + } + test { + key_range { + start_open { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + end_closed { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + } + start: "A\206\310\002\273\271\177\377\020\377\020\305\000\360\013\276\200\304e6\000\360\377y" + limit: "A\206\310\002\273\271\200\000\360\000\360\016w\221\366\377\020\377\020\377\020\377\020\377\020\377y" + } + test { + key_range { + start_closed { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + end_closed { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + } + start: "A\206\310\002\273\271\177\377\020\377\020\305\000\360\013\276\200\304e6\000\360\377x" + limit: "A\206\310\002\273\271\200\000\360\000\360\016w\221\366\377\020\377\020\377\020\377\020\377\020\377y" + } + test { + key_range { + start_open { + values { + string_value: "9999-12-31T23:59:59.999999999Z" + } + } + end_open { + values { + string_value: "0001-01-01T00:00:00Z" + } + } + } + start: "A\206\310\002\273\271\177\377\020\377\020\305\000\360\013\276\200\304e6\000\360\377y" + limit: "A\206\310\002\273\271\200\000\360\000\360\016w\221\366\377\020\377\020\377\020\377\020\377\020\377x" + } +} + +test_case { + name: "DataTypeTest_DATE" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_DATE" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: DATE + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "0000-01-01" + } + } + start: "A\206\310\002\234\216\352\n\260" + } + test { + key { + values { + string_value: "9999-12-31" + } + } + start: "A\206\310\002\234\223Y\201@" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + string_value: "1970-01-01" + } + } + start: "A\206\310\002\234\221\000" + } + test { + key { + values { + string_value: "2023-10-26" + } + } + start: "A\206\310\002\234\222\231\220" + } + test { + key { + values { + string_value: "NOT A DATE" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + number_value: 0 + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-13-01" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-12-32" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "10000-01-01" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-1-1" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-01-001" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023/01/01" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "2023-01-01T10:00:00Z" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key_range { + start_closed { + values { + string_value: "0000-01-01" + } + } + end_open { + values { + string_value: "9999-12-31" + } + } + } + start: "A\206\310\002\234\216\352\n\260" + limit: "A\206\310\002\234\223Y\201@" + } + test { + key_range { + start_open { + values { + string_value: "0000-01-01" + } + } + end_closed { + values { + string_value: "9999-12-31" + } + } + } + start: "A\206\310\002\234\216\352\n\261" + limit: "A\206\310\002\234\223Y\201A" + } + test { + key_range { + start_closed { + values { + string_value: "0000-01-01" + } + } + end_closed { + values { + string_value: "9999-12-31" + } + } + } + start: "A\206\310\002\234\216\352\n\260" + limit: "A\206\310\002\234\223Y\201A" + } + test { + key_range { + start_open { + values { + string_value: "0000-01-01" + } + } + end_open { + values { + string_value: "9999-12-31" + } + } + } + start: "A\206\310\002\234\216\352\n\261" + limit: "A\206\310\002\234\223Y\201@" + } +} + +test_case { + name: "DataTypeTest_DATE_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_DATE_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: DATE + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "9999-12-31" + } + } + start: "A\206\310\002\273\256\246~\276" + } + test { + key { + values { + string_value: "0000-01-01" + } + } + start: "A\206\310\002\273\263\025\365N" + } + test { + key_range { + start_closed { + values { + string_value: "9999-12-31" + } + } + end_open { + values { + string_value: "0000-01-01" + } + } + } + start: "A\206\310\002\273\256\246~\276" + limit: "A\206\310\002\273\263\025\365N" + } + test { + key_range { + start_open { + values { + string_value: "9999-12-31" + } + } + end_closed { + values { + string_value: "0000-01-01" + } + } + } + start: "A\206\310\002\273\256\246~\277" + limit: "A\206\310\002\273\263\025\365O" + } + test { + key_range { + start_closed { + values { + string_value: "9999-12-31" + } + } + end_closed { + values { + string_value: "0000-01-01" + } + } + } + start: "A\206\310\002\273\256\246~\276" + limit: "A\206\310\002\273\263\025\365O" + } + test { + key_range { + start_open { + values { + string_value: "9999-12-31" + } + } + end_open { + values { + string_value: "0000-01-01" + } + } + } + start: "A\206\310\002\273\256\246~\277" + limit: "A\206\310\002\273\263\025\365N" + } +} + +test_case { + name: "DataTypeTest_STRING" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_STRING" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "" + } + } + start: "A\206\310\002\234\231\000x" + } + test { + key { + values { + string_value: "ZZZZZZZ" + } + } + start: "A\206\310\002\234\231ZZZZZZZ\000x" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key_range { + start_closed { + values { + string_value: "" + } + } + end_open { + values { + string_value: "ZZZZZZZ" + } + } + } + start: "A\206\310\002\234\231\000x" + limit: "A\206\310\002\234\231ZZZZZZZ\000x" + } + test { + key_range { + start_open { + values { + string_value: "" + } + } + end_closed { + values { + string_value: "ZZZZZZZ" + } + } + } + start: "A\206\310\002\234\231\000y" + limit: "A\206\310\002\234\231ZZZZZZZ\000y" + } + test { + key_range { + start_closed { + values { + string_value: "" + } + } + end_closed { + values { + string_value: "ZZZZZZZ" + } + } + } + start: "A\206\310\002\234\231\000x" + limit: "A\206\310\002\234\231ZZZZZZZ\000y" + } + test { + key_range { + start_open { + values { + string_value: "" + } + } + end_open { + values { + string_value: "ZZZZZZZ" + } + } + } + start: "A\206\310\002\234\231\000y" + limit: "A\206\310\002\234\231ZZZZZZZ\000x" + } +} + +test_case { + name: "DataTypeTest_STRING_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_STRING_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "ZZZZZZZ" + } + } + start: "A\206\310\002\273\271\245\245\245\245\245\245\245\377x" + } + test { + key { + values { + string_value: "" + } + } + start: "A\206\310\002\273\271\377x" + } + test { + key_range { + start_closed { + values { + string_value: "ZZZZZZZ" + } + } + end_open { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\245\245\245\245\245\245\245\377x" + limit: "A\206\310\002\273\271\377x" + } + test { + key_range { + start_open { + values { + string_value: "ZZZZZZZ" + } + } + end_closed { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\245\245\245\245\245\245\245\377y" + limit: "A\206\310\002\273\271\377y" + } + test { + key_range { + start_closed { + values { + string_value: "ZZZZZZZ" + } + } + end_closed { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\245\245\245\245\245\245\245\377x" + limit: "A\206\310\002\273\271\377y" + } + test { + key_range { + start_open { + values { + string_value: "ZZZZZZZ" + } + } + end_open { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\245\245\245\245\245\245\245\377y" + limit: "A\206\310\002\273\271\377x" + } +} + +test_case { + name: "DataTypeTest_BYTES" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_BYTES" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: BYTES + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "" + } + } + start: "A\206\310\002\234\231\000x" + } + test { + key { + values { + string_value: "/////w==" + } + } + start: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\000x" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + string_value: "" + } + } + start: "A\206\310\002\234\231\000x" + } + test { + key_range { + start_closed { + values { + string_value: "" + } + } + end_open { + values { + string_value: "/////w==" + } + } + } + start: "A\206\310\002\234\231\000x" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\000x" + } + test { + key_range { + start_open { + values { + string_value: "" + } + } + end_closed { + values { + string_value: "/////w==" + } + } + } + start: "A\206\310\002\234\231\000y" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\000y" + } + test { + key_range { + start_closed { + values { + string_value: "" + } + } + end_closed { + values { + string_value: "/////w==" + } + } + } + start: "A\206\310\002\234\231\000x" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\000y" + } + test { + key_range { + start_open { + values { + string_value: "" + } + } + end_open { + values { + string_value: "/////w==" + } + } + } + start: "A\206\310\002\234\231\000y" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\000x" + } +} + +test_case { + name: "DataTypeTest_BYTES_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_BYTES_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: BYTES + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "/////w==" + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\377x" + } + test { + key { + values { + string_value: "" + } + } + start: "A\206\310\002\273\271\377x" + } + test { + key_range { + start_closed { + values { + string_value: "/////w==" + } + } + end_open { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\377x" + limit: "A\206\310\002\273\271\377x" + } + test { + key_range { + start_open { + values { + string_value: "/////w==" + } + } + end_closed { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\377y" + limit: "A\206\310\002\273\271\377y" + } + test { + key_range { + start_closed { + values { + string_value: "/////w==" + } + } + end_closed { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\377x" + limit: "A\206\310\002\273\271\377y" + } + test { + key_range { + start_open { + values { + string_value: "/////w==" + } + } + end_open { + values { + string_value: "" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\377y" + limit: "A\206\310\002\273\271\377x" + } +} + +test_case { + name: "NumericBasic" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "NumericBasic" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: NUMERIC + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "123" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + number_value: 123 + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } +} + +test_case { + name: "NumericMultiPart" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "NumericMultiPart" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "user_id" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: NUMERIC + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "123" + } + values { + string_value: "456" + } + } + start: "A\206\310\002\234\221\366" + limit: "A\206\310\002\234\221\367" + approximate: true + } +} + +test_case { + name: "DataTypeTest_UUID" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_UUID" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: UUID + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + start: "A\206\310\002\234\231\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000x" + } + test { + key { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + start: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\000x" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000" + } + test { + key { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + start: "A\206\310\002\234\231\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000x" + } + test { + key { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + start: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\000x" + } + test { + key { + values { + string_value: "12345678-1234-1234-1234-1234567890ab" + } + } + start: "A\206\310\002\234\231\0224Vx\0224\0224\0224\0224Vx\220\253\000x" + } + test { + key { + values { + string_value: "12345678-1234-1234-1234-1234567890AB" + } + } + start: "A\206\310\002\234\231\0224Vx\0224\0224\0224\0224Vx\220\253\000x" + } + test { + key { + values { + string_value: "{12345678-1234-1234-1234-1234567890ad}" + } + } + start: "A\206\310\002\234\231\0224Vx\0224\0224\0224\0224Vx\220\255\000x" + } + test { + key { + values { + string_value: "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" + } + } + start: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\000x" + } + test { + key { + values { + string_value: "NOT A UUID" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + number_value: 0 + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678x1234-1234-1234-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-1234-1234-1234-1234567890a" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-1234-1234-1234-1234567890abc" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-1234-1234-1234-1234567890ag" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "123456781234-1234-1234-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-12341234-1234-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-1234-12341234-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-1234-1234-12341234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "-12345678-1234-1234-1234-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-1234-1234-1234-1234567890ab-" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678--1234-1234-1234-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "{12345678-1234-1234-1234-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-1234-1234-1234-1234567890ab}" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "{{12345678-1234-1234-1234-1234567890ab}}" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key { + values { + string_value: "12345678-{1234-1234-1234}-1234567890ab" + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } + test { + key_range { + start_closed { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + end_open { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + } + start: "A\206\310\002\234\231\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000x" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\000x" + } + test { + key_range { + start_open { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + end_closed { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + } + start: "A\206\310\002\234\231\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000y" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\000y" + } + test { + key_range { + start_closed { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + end_closed { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + } + start: "A\206\310\002\234\231\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000x" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\000y" + } + test { + key_range { + start_open { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + end_open { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + } + start: "A\206\310\002\234\231\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000y" + limit: "A\206\310\002\234\231\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\000x" + } +} + +test_case { + name: "DataTypeTest_UUID_Desc" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "DataTypeTest_UUID_Desc" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: DESCENDING + null_order: NULLS_LAST + type { + code: UUID + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\377x" + } + test { + key { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + start: "A\206\310\002\273\271\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377x" + } + test { + key_range { + start_closed { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + end_open { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\377x" + limit: "A\206\310\002\273\271\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377x" + } + test { + key_range { + start_open { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + end_closed { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\377y" + limit: "A\206\310\002\273\271\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377y" + } + test { + key_range { + start_closed { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + end_closed { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\377x" + limit: "A\206\310\002\273\271\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377y" + } + test { + key_range { + start_open { + values { + string_value: "ffffffff-ffff-ffff-ffff-ffffffffffff" + } + } + end_open { + values { + string_value: "00000000-0000-0000-0000-000000000000" + } + } + } + start: "A\206\310\002\273\271\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\000\360\377y" + limit: "A\206\310\002\273\271\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377\020\377x" + } +} + +test_case { + name: "NotNull" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "NotNull" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NOT_NULL + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "" + } + } + start: "A\206\310\002\231\000x" + } + test { + key { + values { + string_value: "foo" + } + } + start: "A\206\310\002\231foo\000x" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } +} + +test_case { + name: "NullsLast" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "NullsLast" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_LAST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "" + } + } + start: "A\206\310\002\273\231\000x" + } + test { + key { + values { + string_value: "foo" + } + } + start: "A\206\310\002\273\231foo\000x" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\274\000" + } +} + +test_case { + name: "MultiPart" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "MultiPart" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k1" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k2" + } + } + } + test { + key { + values { + string_value: "foo" + } + values { + string_value: "8" + } + } + start: "A\206\310\002\234\231foo\000x\234\221\020" + } + test { + key { + values { + string_value: "foo" + } + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\234\231foo\000x\233\000" + } + test { + key { + values { + null_value: NULL_VALUE + } + values { + string_value: "8" + } + } + start: "A\206\310\002\233\000\234\221\020" + } + test { + key { + values { + null_value: NULL_VALUE + } + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000\233\000" + } + test { + key_range { + start_closed { + values { + string_value: "A" + } + } + end_closed { + values { + string_value: "Z" + } + } + } + start: "A\206\310\002\234\231A\000x" + limit: "A\206\310\002\234\231Z\000y" + } + test { + key_range { + start_closed { + values { + string_value: "A" + } + values { + string_value: "4" + } + } + end_closed { + values { + string_value: "A" + } + values { + string_value: "7" + } + } + } + start: "A\206\310\002\234\231A\000x\234\221\010" + limit: "A\206\310\002\234\231A\000x\234\221\017" + } +} + +test_case { + name: "Interleaved" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "C" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + part { + tag: 2 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k2" + } + } + } + test { + key { + values { + string_value: "foo" + } + values { + string_value: "99" + } + } + start: "A\206\310\002\234\231foo\000x\004\234\221\306" + } + test { + key { + values { + string_value: "foo" + } + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\234\231foo\000x\004\233\000" + } + test { + key { + values { + null_value: NULL_VALUE + } + values { + string_value: "99" + } + } + start: "A\206\310\002\233\000\004\234\221\306" + } + test { + key { + values { + null_value: NULL_VALUE + } + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000\004\233\000" + } + test { + key_range { + start_closed { + values { + string_value: "A" + } + } + end_closed { + values { + string_value: "Z" + } + } + } + start: "A\206\310\002\234\231A\000x\004" + limit: "A\206\310\002\234\231Z\000x\005" + } + test { + key_range { + start_closed { + values { + string_value: "A" + } + values { + string_value: "4" + } + } + end_closed { + values { + string_value: "A" + } + values { + string_value: "7" + } + } + } + start: "A\206\310\002\234\231A\000x\004\234\221\010" + limit: "A\206\310\002\234\231A\000x\004\234\221\017" + } +} + +test_case { + name: "GeneratedKeyColumns" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k3" + } + } + } + test { + key { + values { + string_value: "foo" + } + values { + string_value: "99" + } + } + start: "A\206\310\002\234\231foo\000x\234\221\306" + } + test { + key { + values { + string_value: "foo" + } + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\234\231foo\000x\233\000" + } + test { + key { + values { + null_value: NULL_VALUE + } + values { + string_value: "99" + } + } + start: "A\206\310\002\233\000\234\221\306" + } + test { + key { + values { + null_value: NULL_VALUE + } + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\233\000\233\000" + } + test { + key_range { + start_closed { + values { + string_value: "A" + } + values { + string_value: "4" + } + } + end_closed { + values { + string_value: "A" + } + values { + string_value: "7" + } + } + } + start: "A\206\310\002\234\231A\000x\234\221\010" + limit: "A\206\310\002\234\231A\000x\234\221\017" + } +} + +test_case { + name: "GlobalIndex" + recipes { + schema_generation: "\001\001" + recipe { + index_name: "I" + part { + tag: 1 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k2" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "8" + } + } + start: "\002\002\234\221\020" + limit: "\002\002\234\221\021" + } + test { + key { + values { + null_value: NULL_VALUE + } + } + start: "\002\002\233\000" + limit: "\002\002\233\001" + } +} + +test_case { + name: "LocalIndex" + recipes { + schema_generation: "\001\001" + recipe { + index_name: "I" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + part { + tag: 3 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k3" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k2" + } + } + } + test { + key { + values { + string_value: "foo" + } + values { + string_value: "8" + } + } + start: "A\206\310\002\234\231foo\000x\006\234\221\020" + limit: "A\206\310\002\234\231foo\000x\006\234\221\021" + } + test { + key { + values { + string_value: "foo" + } + values { + null_value: NULL_VALUE + } + } + start: "A\206\310\002\234\231foo\000x\006\233\000" + limit: "A\206\310\002\234\231foo\000x\006\233\001" + } +} + +test_case { + name: "KeySet" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "KeySet" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k" + } + } + } + test { + key_set { + keys { + values { + string_value: "99" + } + } + } + start: "A\206\310\002\234\221\306" + } + test { + key_set { + ranges { + start_closed { + values { + string_value: "1" + } + } + end_open { + values { + string_value: "10" + } + } + } + } + start: "A\206\310\002\234\221\002" + limit: "A\206\310\002\234\221\024" + } + test { + key_set { + keys { + values { + string_value: "99" + } + } + keys { + values { + string_value: "101" + } + } + } + start: "A\206\310\002\234\221\306" + limit: "A\206\310\002\234\221\313" + } + test { + key_set { + ranges { + start_closed { + values { + string_value: "1" + } + } + end_open { + values { + string_value: "10" + } + } + } + ranges { + start_closed { + values { + string_value: "20" + } + } + end_open { + values { + string_value: "30" + } + } + } + } + start: "A\206\310\002\234\221\002" + limit: "A\206\310\002\234\221<" + } + test { + key_set { + keys { + values { + string_value: "1" + } + } + ranges { + start_closed { + values { + string_value: "5" + } + } + end_open { + values { + string_value: "10" + } + } + } + } + start: "A\206\310\002\234\221\002" + limit: "A\206\310\002\234\221\024" + } + test { + key_set { + keys { + values { + string_value: "10" + } + } + ranges { + start_closed { + values { + string_value: "5" + } + } + end_open { + values { + string_value: "10" + } + } + } + } + start: "A\206\310\002\234\221\n" + limit: "A\206\310\002\234\221\025" + } +} + +test_case { + name: "KeySet_All" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key_set { + all: true + } + start: "A\206\310" + limit: "A\206\311" + } +} + +test_case { + name: "InvalidRecipe_EmptyPart" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "BadRecipe" + part { + tag: 50020 + } + part { + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "A" + } + } + start: "A\206\310" + limit: "A\206\311" + approximate: true + } +} + +test_case { + name: "InvalidRecipe_BadOrder" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "BadRecipe" + part { + tag: 50020 + } + part { + order: 99 + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k1" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "A" + } + } + start: "A\206\310" + limit: "A\206\311" + approximate: true + } +} + +test_case { + name: "InvalidRecipe_BadNullOrder" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "BadRecipe" + part { + tag: 50020 + } + part { + order: ASCENDING + null_order: 99 + type { + code: STRING + } + identifier: "k1" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "A" + } + } + start: "A\206\310" + limit: "A\206\311" + approximate: true + } +} + +test_case { + name: "InvalidRecipe_BadType" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "BadRecipe" + part { + tag: 50020 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: TOKENLIST + } + identifier: "k1" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + key { + values { + string_value: "A" + } + } + start: "A\206\310" + limit: "A\206\311" + approximate: true + } +} + +test_case { + name: "SimpleMutations" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "SimpleMutations" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k" + } + } + } + test { + mutation { + insert { + table: "SimpleMutations" + columns: "k" + values { + values { + string_value: "80" + } + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\241" + } + test { + mutation { + update { + table: "SimpleMutations" + columns: "k" + values { + values { + string_value: "80" + } + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\241" + } + test { + mutation { + insert_or_update { + table: "SimpleMutations" + columns: "k" + values { + values { + string_value: "80" + } + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\241" + } + test { + mutation { + replace { + table: "SimpleMutations" + columns: "k" + values { + values { + string_value: "80" + } + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\241" + } + test { + mutation { + delete { + table: "SimpleMutations" + key_set { + keys { + values { + string_value: "80" + } + } + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\241" + } + test { + mutation { + delete { + table: "SimpleMutations" + key_set { + ranges { + start_closed { + values { + string_value: "80" + } + } + end_open { + values { + string_value: "100" + } + } + } + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\310" + } +} + +test_case { + name: "QueueMutations" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "Q" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: INT64 + } + identifier: "k" + } + } + } + test { + mutation { + send { + queue: "Q" + key { + values { + string_value: "80" + } + } + payload { + string_value: "" + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\241" + } + test { + mutation { + ack { + queue: "Q" + key { + values { + string_value: "80" + } + } + } + } + start: "A\206\310\002\234\221\240" + limit: "A\206\310\002\234\221\241" + } +} + +test_case { + name: "CustomMutationCases" + recipes { + schema_generation: "\001\001" + recipe { + table_name: "T" + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "k" + } + } + } + test { + mutation { + } + start: "" + limit: "\377" + approximate: true + } + test { + mutation { + delete { + key_set { + all: true + } + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + } + test { + mutation { + delete { + key_set { + keys { + values { + string_value: "123" + } + } + keys { + values { + string_value: "456" + } + } + } + } + } + start: "A\206\310\002\234\231123\000x" + limit: "A\206\310\002\234\231456\000y" + } + test { + mutation { + delete { + key_set { + ranges { + start_closed { + values { + string_value: "123" + } + } + end_open { + values { + string_value: "456" + } + } + } + ranges { + start_closed { + values { + string_value: "100" + } + } + end_open { + values { + string_value: "200" + } + } + } + ranges { + start_closed { + values { + string_value: "150" + } + } + end_open { + values { + string_value: "500" + } + } + } + } + } + } + start: "A\206\310\002\234\231100\000x" + limit: "A\206\310\002\234\231500\000x" + } + test { + mutation { + delete { + key_set { + ranges { + start_closed { + values { + string_value: "123" + } + } + end_open { + values { + string_value: "456" + } + } + } + all: true + } + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + } + test { + mutation { + delete { + key_set { + keys { + values { + string_value: "123" + } + } + keys { + values { + number_value: 456 + } + } + } + } + } + start: "A\206\310\002" + limit: "A\206\310\003" + approximate: true + } +} + +test_case { + name: "QueryEncoding" + recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 6 + part { + tag: 50020 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "p1" + } + part { + order: ASCENDING + null_order: NULLS_FIRST + type { + code: STRING + } + identifier: "p0" + } + } + } + test { + query_params { + fields { + key: "p0" + value { + string_value: "foo" + } + } + fields { + key: "p1" + value { + string_value: "bar" + } + } + } + start: "A\206\310\002\234\231bar\000x\234\231foo\000x" + } + test { + query_params { + fields { + key: "p1" + value { + string_value: "bar" + } + } + } + start: "A\206\310\002\234\231bar\000x" + limit: "A\206\310\002\234\231bar\000y" + approximate: true + } +} + +test_case { + name: "RandomQueryroot" + recipes { + schema_generation: "\001\001" + recipe { + operation_uid: 7 + part { + tag: 50016 + } + part { + tag: 1 + } + part { + order: ASCENDING + null_order: NOT_NULL + type { + code: INT64 + } + random: true + } + } + } + test { + query_params { + } + start: "A\206\300\002\230\327\342\351\276\316\214%$" + } +} \ No newline at end of file diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml index 000a88b6261..5968a770f50 100644 --- a/grpc-google-cloud-spanner-admin-database-v1/pom.xml +++ b/grpc-google-cloud-spanner-admin-database-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.82.0 + 6.113.1-SNAPSHOT grpc-google-cloud-spanner-admin-database-v1 GRPC library for grpc-google-cloud-spanner-admin-database-v1 com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT diff --git a/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java b/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java index 01592c14be9..162a0cb9c52 100644 --- a/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java +++ b/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,9 +29,6 @@ * * restore a database from an existing backup *

                                */ -@javax.annotation.Generated( - value = "by gRPC proto compiler", - comments = "Source: google/spanner/admin/database/v1/spanner_database_admin.proto") @io.grpc.stub.annotations.GrpcGenerated public final class DatabaseAdminGrpc { @@ -943,6 +940,53 @@ private DatabaseAdminGrpc() {} return getListDatabaseRolesMethod; } + private static volatile io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.AddSplitPointsRequest, + com.google.spanner.admin.database.v1.AddSplitPointsResponse> + getAddSplitPointsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "AddSplitPoints", + requestType = com.google.spanner.admin.database.v1.AddSplitPointsRequest.class, + responseType = com.google.spanner.admin.database.v1.AddSplitPointsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.AddSplitPointsRequest, + com.google.spanner.admin.database.v1.AddSplitPointsResponse> + getAddSplitPointsMethod() { + io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.AddSplitPointsRequest, + com.google.spanner.admin.database.v1.AddSplitPointsResponse> + getAddSplitPointsMethod; + if ((getAddSplitPointsMethod = DatabaseAdminGrpc.getAddSplitPointsMethod) == null) { + synchronized (DatabaseAdminGrpc.class) { + if ((getAddSplitPointsMethod = DatabaseAdminGrpc.getAddSplitPointsMethod) == null) { + DatabaseAdminGrpc.getAddSplitPointsMethod = + getAddSplitPointsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "AddSplitPoints")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.admin.database.v1.AddSplitPointsRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.admin.database.v1.AddSplitPointsResponse + .getDefaultInstance())) + .setSchemaDescriptor( + new DatabaseAdminMethodDescriptorSupplier("AddSplitPoints")) + .build(); + } + } + } + return getAddSplitPointsMethod; + } + private static volatile io.grpc.MethodDescriptor< com.google.spanner.admin.database.v1.CreateBackupScheduleRequest, com.google.spanner.admin.database.v1.BackupSchedule> @@ -1185,6 +1229,59 @@ private DatabaseAdminGrpc() {} return getListBackupSchedulesMethod; } + private static volatile io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse> + getInternalUpdateGraphOperationMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "InternalUpdateGraphOperation", + requestType = com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest.class, + responseType = + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse> + getInternalUpdateGraphOperationMethod() { + io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse> + getInternalUpdateGraphOperationMethod; + if ((getInternalUpdateGraphOperationMethod = + DatabaseAdminGrpc.getInternalUpdateGraphOperationMethod) + == null) { + synchronized (DatabaseAdminGrpc.class) { + if ((getInternalUpdateGraphOperationMethod = + DatabaseAdminGrpc.getInternalUpdateGraphOperationMethod) + == null) { + DatabaseAdminGrpc.getInternalUpdateGraphOperationMethod = + getInternalUpdateGraphOperationMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName( + generateFullMethodName(SERVICE_NAME, "InternalUpdateGraphOperation")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.admin.database.v1 + .InternalUpdateGraphOperationRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.admin.database.v1 + .InternalUpdateGraphOperationResponse.getDefaultInstance())) + .setSchemaDescriptor( + new DatabaseAdminMethodDescriptorSupplier("InternalUpdateGraphOperation")) + .build(); + } + } + } + return getInternalUpdateGraphOperationMethod; + } + /** Creates a new async stub that supports all call types for the service */ public static DatabaseAdminStub newStub(io.grpc.Channel channel) { io.grpc.stub.AbstractStub.StubFactory factory = @@ -1198,6 +1295,19 @@ public DatabaseAdminStub newStub( return DatabaseAdminStub.newStub(factory, channel); } + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static DatabaseAdminBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DatabaseAdminBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatabaseAdminBlockingV2Stub(channel, callOptions); + } + }; + return DatabaseAdminBlockingV2Stub.newStub(factory, channel); + } + /** * Creates a new blocking-style stub that supports unary and streaming output calls on the service */ @@ -1657,6 +1767,21 @@ default void listDatabaseRoles( getListDatabaseRolesMethod(), responseObserver); } + /** + * + * + *
                                +     * Adds split points to specified tables, indexes of a database.
                                +     * 
                                + */ + default void addSplitPoints( + com.google.spanner.admin.database.v1.AddSplitPointsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getAddSplitPointsMethod(), responseObserver); + } + /** * * @@ -1731,6 +1856,23 @@ default void listBackupSchedules( io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( getListBackupSchedulesMethod(), responseObserver); } + + /** + * + * + *
                                +     * This is an internal API called by Spanner Graph jobs. You should never need
                                +     * to call this API directly.
                                +     * 
                                + */ + default void internalUpdateGraphOperation( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest request, + io.grpc.stub.StreamObserver< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse> + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getInternalUpdateGraphOperationMethod(), responseObserver); + } } /** @@ -2232,6 +2374,23 @@ public void listDatabaseRoles( responseObserver); } + /** + * + * + *
                                +     * Adds split points to specified tables, indexes of a database.
                                +     * 
                                + */ + public void addSplitPoints( + com.google.spanner.admin.database.v1.AddSplitPointsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getAddSplitPointsMethod(), getCallOptions()), + request, + responseObserver); + } + /** * * @@ -2316,6 +2475,25 @@ public void listBackupSchedules( request, responseObserver); } + + /** + * + * + *
                                +     * This is an internal API called by Spanner Graph jobs. You should never need
                                +     * to call this API directly.
                                +     * 
                                + */ + public void internalUpdateGraphOperation( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest request, + io.grpc.stub.StreamObserver< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse> + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getInternalUpdateGraphOperationMethod(), getCallOptions()), + request, + responseObserver); + } } /** @@ -2330,16 +2508,16 @@ public void listBackupSchedules( * * restore a database from an existing backup * */ - public static final class DatabaseAdminBlockingStub - extends io.grpc.stub.AbstractBlockingStub { - private DatabaseAdminBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + public static final class DatabaseAdminBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private DatabaseAdminBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { super(channel, callOptions); } @java.lang.Override - protected DatabaseAdminBlockingStub build( + protected DatabaseAdminBlockingV2Stub build( io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new DatabaseAdminBlockingStub(channel, callOptions); + return new DatabaseAdminBlockingV2Stub(channel, callOptions); } /** @@ -2350,8 +2528,9 @@ protected DatabaseAdminBlockingStub build( * */ public com.google.spanner.admin.database.v1.ListDatabasesResponse listDatabases( - com.google.spanner.admin.database.v1.ListDatabasesRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.ListDatabasesRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getListDatabasesMethod(), getCallOptions(), request); } @@ -2370,8 +2549,9 @@ public com.google.spanner.admin.database.v1.ListDatabasesResponse listDatabases( * */ public com.google.longrunning.Operation createDatabase( - com.google.spanner.admin.database.v1.CreateDatabaseRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.CreateDatabaseRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getCreateDatabaseMethod(), getCallOptions(), request); } @@ -2383,8 +2563,9 @@ public com.google.longrunning.Operation createDatabase( * */ public com.google.spanner.admin.database.v1.Database getDatabase( - com.google.spanner.admin.database.v1.GetDatabaseRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.GetDatabaseRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getGetDatabaseMethod(), getCallOptions(), request); } @@ -2426,8 +2607,9 @@ public com.google.spanner.admin.database.v1.Database getDatabase( * */ public com.google.longrunning.Operation updateDatabase( - com.google.spanner.admin.database.v1.UpdateDatabaseRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getUpdateDatabaseMethod(), getCallOptions(), request); } @@ -2446,8 +2628,9 @@ public com.google.longrunning.Operation updateDatabase( * */ public com.google.longrunning.Operation updateDatabaseDdl( - com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getUpdateDatabaseDdlMethod(), getCallOptions(), request); } @@ -2463,8 +2646,9 @@ public com.google.longrunning.Operation updateDatabaseDdl( * */ public com.google.protobuf.Empty dropDatabase( - com.google.spanner.admin.database.v1.DropDatabaseRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.DropDatabaseRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getDropDatabaseMethod(), getCallOptions(), request); } @@ -2478,8 +2662,9 @@ public com.google.protobuf.Empty dropDatabase( * */ public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse getDatabaseDdl( - com.google.spanner.admin.database.v1.GetDatabaseDdlRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.GetDatabaseDdlRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getGetDatabaseDdlMethod(), getCallOptions(), request); } @@ -2495,8 +2680,9 @@ public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse getDatabaseDd * permission on [resource][google.iam.v1.SetIamPolicyRequest.resource]. * */ - public com.google.iam.v1.Policy setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + public com.google.iam.v1.Policy setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getSetIamPolicyMethod(), getCallOptions(), request); } @@ -2513,8 +2699,9 @@ public com.google.iam.v1.Policy setIamPolicy(com.google.iam.v1.SetIamPolicyReque * permission on [resource][google.iam.v1.GetIamPolicyRequest.resource]. * */ - public com.google.iam.v1.Policy getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + public com.google.iam.v1.Policy getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getGetIamPolicyMethod(), getCallOptions(), request); } @@ -2534,8 +2721,8 @@ public com.google.iam.v1.Policy getIamPolicy(com.google.iam.v1.GetIamPolicyReque * */ public com.google.iam.v1.TestIamPermissionsResponse testIamPermissions( - com.google.iam.v1.TestIamPermissionsRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.iam.v1.TestIamPermissionsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getTestIamPermissionsMethod(), getCallOptions(), request); } @@ -2558,8 +2745,9 @@ public com.google.iam.v1.TestIamPermissionsResponse testIamPermissions( * */ public com.google.longrunning.Operation createBackup( - com.google.spanner.admin.database.v1.CreateBackupRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.CreateBackupRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getCreateBackupMethod(), getCallOptions(), request); } @@ -2583,8 +2771,9 @@ public com.google.longrunning.Operation createBackup( * */ public com.google.longrunning.Operation copyBackup( - com.google.spanner.admin.database.v1.CopyBackupRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.CopyBackupRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getCopyBackupMethod(), getCallOptions(), request); } @@ -2597,8 +2786,9 @@ public com.google.longrunning.Operation copyBackup( * */ public com.google.spanner.admin.database.v1.Backup getBackup( - com.google.spanner.admin.database.v1.GetBackupRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.GetBackupRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getGetBackupMethod(), getCallOptions(), request); } @@ -2611,8 +2801,9 @@ public com.google.spanner.admin.database.v1.Backup getBackup( * */ public com.google.spanner.admin.database.v1.Backup updateBackup( - com.google.spanner.admin.database.v1.UpdateBackupRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.UpdateBackupRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getUpdateBackupMethod(), getCallOptions(), request); } @@ -2625,8 +2816,9 @@ public com.google.spanner.admin.database.v1.Backup updateBackup( * */ public com.google.protobuf.Empty deleteBackup( - com.google.spanner.admin.database.v1.DeleteBackupRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.DeleteBackupRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getDeleteBackupMethod(), getCallOptions(), request); } @@ -2640,8 +2832,9 @@ public com.google.protobuf.Empty deleteBackup( * */ public com.google.spanner.admin.database.v1.ListBackupsResponse listBackups( - com.google.spanner.admin.database.v1.ListBackupsRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.ListBackupsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getListBackupsMethod(), getCallOptions(), request); } @@ -2669,8 +2862,9 @@ public com.google.spanner.admin.database.v1.ListBackupsResponse listBackups( * */ public com.google.longrunning.Operation restoreDatabase( - com.google.spanner.admin.database.v1.RestoreDatabaseRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.RestoreDatabaseRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getRestoreDatabaseMethod(), getCallOptions(), request); } @@ -2690,8 +2884,9 @@ public com.google.longrunning.Operation restoreDatabase( */ public com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse listDatabaseOperations( - com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getListDatabaseOperationsMethod(), getCallOptions(), request); } @@ -2712,8 +2907,9 @@ public com.google.longrunning.Operation restoreDatabase( * */ public com.google.spanner.admin.database.v1.ListBackupOperationsResponse listBackupOperations( - com.google.spanner.admin.database.v1.ListBackupOperationsRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.ListBackupOperationsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getListBackupOperationsMethod(), getCallOptions(), request); } @@ -2725,11 +2921,26 @@ public com.google.spanner.admin.database.v1.ListBackupOperationsResponse listBac * */ public com.google.spanner.admin.database.v1.ListDatabaseRolesResponse listDatabaseRoles( - com.google.spanner.admin.database.v1.ListDatabaseRolesRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.ListDatabaseRolesRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getListDatabaseRolesMethod(), getCallOptions(), request); } + /** + * + * + *
                                +     * Adds split points to specified tables, indexes of a database.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.AddSplitPointsResponse addSplitPoints( + com.google.spanner.admin.database.v1.AddSplitPointsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getAddSplitPointsMethod(), getCallOptions(), request); + } + /** * * @@ -2738,8 +2949,9 @@ public com.google.spanner.admin.database.v1.ListDatabaseRolesResponse listDataba * */ public com.google.spanner.admin.database.v1.BackupSchedule createBackupSchedule( - com.google.spanner.admin.database.v1.CreateBackupScheduleRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.CreateBackupScheduleRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getCreateBackupScheduleMethod(), getCallOptions(), request); } @@ -2751,8 +2963,9 @@ public com.google.spanner.admin.database.v1.BackupSchedule createBackupSchedule( * */ public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule( - com.google.spanner.admin.database.v1.GetBackupScheduleRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.GetBackupScheduleRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getGetBackupScheduleMethod(), getCallOptions(), request); } @@ -2764,8 +2977,9 @@ public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule( * */ public com.google.spanner.admin.database.v1.BackupSchedule updateBackupSchedule( - com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getUpdateBackupScheduleMethod(), getCallOptions(), request); } @@ -2777,8 +2991,9 @@ public com.google.spanner.admin.database.v1.BackupSchedule updateBackupSchedule( * */ public com.google.protobuf.Empty deleteBackupSchedule( - com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getDeleteBackupScheduleMethod(), getCallOptions(), request); } @@ -2790,14 +3005,31 @@ public com.google.protobuf.Empty deleteBackupSchedule( * */ public com.google.spanner.admin.database.v1.ListBackupSchedulesResponse listBackupSchedules( - com.google.spanner.admin.database.v1.ListBackupSchedulesRequest request) { - return io.grpc.stub.ClientCalls.blockingUnaryCall( + com.google.spanner.admin.database.v1.ListBackupSchedulesRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( getChannel(), getListBackupSchedulesMethod(), getCallOptions(), request); } + + /** + * + * + *
                                +     * This is an internal API called by Spanner Graph jobs. You should never need
                                +     * to call this API directly.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + internalUpdateGraphOperation( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getInternalUpdateGraphOperationMethod(), getCallOptions(), request); + } } /** - * A stub to allow clients to do ListenableFuture-style rpc calls to service DatabaseAdmin. + * A stub to allow clients to do limited synchronous rpc calls to service DatabaseAdmin. * *
                                    * Cloud Spanner Database Admin API
                                @@ -2808,16 +3040,16 @@ public com.google.spanner.admin.database.v1.ListBackupSchedulesResponse listBack
                                    *   * restore a database from an existing backup
                                    * 
                                */ - public static final class DatabaseAdminFutureStub - extends io.grpc.stub.AbstractFutureStub { - private DatabaseAdminFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + public static final class DatabaseAdminBlockingStub + extends io.grpc.stub.AbstractBlockingStub { + private DatabaseAdminBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { super(channel, callOptions); } @java.lang.Override - protected DatabaseAdminFutureStub build( + protected DatabaseAdminBlockingStub build( io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new DatabaseAdminFutureStub(channel, callOptions); + return new DatabaseAdminBlockingStub(channel, callOptions); } /** @@ -2827,11 +3059,10 @@ protected DatabaseAdminFutureStub build( * Lists Cloud Spanner databases. * */ - public com.google.common.util.concurrent.ListenableFuture< - com.google.spanner.admin.database.v1.ListDatabasesResponse> - listDatabases(com.google.spanner.admin.database.v1.ListDatabasesRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getListDatabasesMethod(), getCallOptions()), request); + public com.google.spanner.admin.database.v1.ListDatabasesResponse listDatabases( + com.google.spanner.admin.database.v1.ListDatabasesRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListDatabasesMethod(), getCallOptions(), request); } /** @@ -2848,10 +3079,10 @@ protected DatabaseAdminFutureStub build( * [Database][google.spanner.admin.database.v1.Database], if successful. * */ - public com.google.common.util.concurrent.ListenableFuture - createDatabase(com.google.spanner.admin.database.v1.CreateDatabaseRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getCreateDatabaseMethod(), getCallOptions()), request); + public com.google.longrunning.Operation createDatabase( + com.google.spanner.admin.database.v1.CreateDatabaseRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateDatabaseMethod(), getCallOptions(), request); } /** @@ -2861,11 +3092,10 @@ protected DatabaseAdminFutureStub build( * Gets the state of a Cloud Spanner database. * */ - public com.google.common.util.concurrent.ListenableFuture< - com.google.spanner.admin.database.v1.Database> - getDatabase(com.google.spanner.admin.database.v1.GetDatabaseRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getGetDatabaseMethod(), getCallOptions()), request); + public com.google.spanner.admin.database.v1.Database getDatabase( + com.google.spanner.admin.database.v1.GetDatabaseRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetDatabaseMethod(), getCallOptions(), request); } /** @@ -2905,10 +3135,10 @@ protected DatabaseAdminFutureStub build( * [Database][google.spanner.admin.database.v1.Database], if successful. * */ - public com.google.common.util.concurrent.ListenableFuture - updateDatabase(com.google.spanner.admin.database.v1.UpdateDatabaseRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getUpdateDatabaseMethod(), getCallOptions()), request); + public com.google.longrunning.Operation updateDatabase( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateDatabaseMethod(), getCallOptions(), request); } /** @@ -2925,10 +3155,10 @@ protected DatabaseAdminFutureStub build( * The operation has no response. * */ - public com.google.common.util.concurrent.ListenableFuture - updateDatabaseDdl(com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getUpdateDatabaseDdlMethod(), getCallOptions()), request); + public com.google.longrunning.Operation updateDatabaseDdl( + com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateDatabaseDdlMethod(), getCallOptions(), request); } /** @@ -2942,10 +3172,10 @@ protected DatabaseAdminFutureStub build( * after the database has been deleted. * */ - public com.google.common.util.concurrent.ListenableFuture - dropDatabase(com.google.spanner.admin.database.v1.DropDatabaseRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getDropDatabaseMethod(), getCallOptions()), request); + public com.google.protobuf.Empty dropDatabase( + com.google.spanner.admin.database.v1.DropDatabaseRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDropDatabaseMethod(), getCallOptions(), request); } /** @@ -2957,11 +3187,10 @@ protected DatabaseAdminFutureStub build( * be queried using the [Operations][google.longrunning.Operations] API. * */ - public com.google.common.util.concurrent.ListenableFuture< - com.google.spanner.admin.database.v1.GetDatabaseDdlResponse> - getDatabaseDdl(com.google.spanner.admin.database.v1.GetDatabaseDdlRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getGetDatabaseDdlMethod(), getCallOptions()), request); + public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse getDatabaseDdl( + com.google.spanner.admin.database.v1.GetDatabaseDdlRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetDatabaseDdlMethod(), getCallOptions(), request); } /** @@ -2976,10 +3205,9 @@ protected DatabaseAdminFutureStub build( * permission on [resource][google.iam.v1.SetIamPolicyRequest.resource]. * */ - public com.google.common.util.concurrent.ListenableFuture - setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getSetIamPolicyMethod(), getCallOptions()), request); + public com.google.iam.v1.Policy setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getSetIamPolicyMethod(), getCallOptions(), request); } /** @@ -2995,10 +3223,520 @@ protected DatabaseAdminFutureStub build( * permission on [resource][google.iam.v1.GetIamPolicyRequest.resource]. * */ - public com.google.common.util.concurrent.ListenableFuture - getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) { - return io.grpc.stub.ClientCalls.futureUnaryCall( - getChannel().newCall(getGetIamPolicyMethod(), getCallOptions()), request); + public com.google.iam.v1.Policy getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetIamPolicyMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Returns permissions that the caller has on the specified database or backup
                                +     * resource.
                                +     * Attempting this RPC on a non-existent Cloud Spanner database will
                                +     * result in a NOT_FOUND error if the user has
                                +     * `spanner.databases.list` permission on the containing Cloud
                                +     * Spanner instance. Otherwise returns an empty set of permissions.
                                +     * Calling this method on a backup that does not exist will
                                +     * result in a NOT_FOUND error if the user has
                                +     * `spanner.backups.list` permission on the containing instance.
                                +     * 
                                + */ + public com.google.iam.v1.TestIamPermissionsResponse testIamPermissions( + com.google.iam.v1.TestIamPermissionsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getTestIamPermissionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Starts creating a new Cloud Spanner Backup.
                                +     * The returned backup [long-running operation][google.longrunning.Operation]
                                +     * will have a name of the format
                                +     * `projects/<project>/instances/<instance>/backups/<backup>/operations/<operation_id>`
                                +     * and can be used to track creation of the backup. The
                                +     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
                                +     * The [response][google.longrunning.Operation.response] field type is
                                +     * [Backup][google.spanner.admin.database.v1.Backup], if successful.
                                +     * Cancelling the returned operation will stop the creation and delete the
                                +     * backup. There can be only one pending backup creation per database. Backup
                                +     * creation of different databases can run concurrently.
                                +     * 
                                + */ + public com.google.longrunning.Operation createBackup( + com.google.spanner.admin.database.v1.CreateBackupRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateBackupMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Starts copying a Cloud Spanner Backup.
                                +     * The returned backup [long-running operation][google.longrunning.Operation]
                                +     * will have a name of the format
                                +     * `projects/<project>/instances/<instance>/backups/<backup>/operations/<operation_id>`
                                +     * and can be used to track copying of the backup. The operation is associated
                                +     * with the destination backup.
                                +     * The [metadata][google.longrunning.Operation.metadata] field type is
                                +     * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
                                +     * The [response][google.longrunning.Operation.response] field type is
                                +     * [Backup][google.spanner.admin.database.v1.Backup], if successful.
                                +     * Cancelling the returned operation will stop the copying and delete the
                                +     * destination backup. Concurrent CopyBackup requests can run on the same
                                +     * source backup.
                                +     * 
                                + */ + public com.google.longrunning.Operation copyBackup( + com.google.spanner.admin.database.v1.CopyBackupRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCopyBackupMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Gets metadata on a pending or completed
                                +     * [Backup][google.spanner.admin.database.v1.Backup].
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.Backup getBackup( + com.google.spanner.admin.database.v1.GetBackupRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetBackupMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Updates a pending or completed
                                +     * [Backup][google.spanner.admin.database.v1.Backup].
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.Backup updateBackup( + com.google.spanner.admin.database.v1.UpdateBackupRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateBackupMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Deletes a pending or completed
                                +     * [Backup][google.spanner.admin.database.v1.Backup].
                                +     * 
                                + */ + public com.google.protobuf.Empty deleteBackup( + com.google.spanner.admin.database.v1.DeleteBackupRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteBackupMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists completed and pending backups.
                                +     * Backups returned are ordered by `create_time` in descending order,
                                +     * starting from the most recent `create_time`.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.ListBackupsResponse listBackups( + com.google.spanner.admin.database.v1.ListBackupsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListBackupsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Create a new database by restoring from a completed backup. The new
                                +     * database must be in the same project and in an instance with the same
                                +     * instance configuration as the instance containing
                                +     * the backup. The returned database [long-running
                                +     * operation][google.longrunning.Operation] has a name of the format
                                +     * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>`,
                                +     * and can be used to track the progress of the operation, and to cancel it.
                                +     * The [metadata][google.longrunning.Operation.metadata] field type is
                                +     * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata].
                                +     * The [response][google.longrunning.Operation.response] type
                                +     * is [Database][google.spanner.admin.database.v1.Database], if
                                +     * successful. Cancelling the returned operation will stop the restore and
                                +     * delete the database.
                                +     * There can be only one database being restored into an instance at a time.
                                +     * Once the restore operation completes, a new restore operation can be
                                +     * initiated, without waiting for the optimize operation associated with the
                                +     * first restore to complete.
                                +     * 
                                + */ + public com.google.longrunning.Operation restoreDatabase( + com.google.spanner.admin.database.v1.RestoreDatabaseRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRestoreDatabaseMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists database [longrunning-operations][google.longrunning.Operation].
                                +     * A database operation has a name of the form
                                +     * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation>`.
                                +     * The long-running operation
                                +     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * `metadata.type_url` describes the type of the metadata. Operations returned
                                +     * include those that have completed/failed/canceled within the last 7 days,
                                +     * and pending operations.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse + listDatabaseOperations( + com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListDatabaseOperationsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists the backup [long-running operations][google.longrunning.Operation] in
                                +     * the given instance. A backup operation has a name of the form
                                +     * `projects/<project>/instances/<instance>/backups/<backup>/operations/<operation>`.
                                +     * The long-running operation
                                +     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * `metadata.type_url` describes the type of the metadata. Operations returned
                                +     * include those that have completed/failed/canceled within the last 7 days,
                                +     * and pending operations. Operations returned are ordered by
                                +     * `operation.metadata.value.progress.start_time` in descending order starting
                                +     * from the most recently started operation.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.ListBackupOperationsResponse listBackupOperations( + com.google.spanner.admin.database.v1.ListBackupOperationsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListBackupOperationsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists Cloud Spanner database roles.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.ListDatabaseRolesResponse listDatabaseRoles( + com.google.spanner.admin.database.v1.ListDatabaseRolesRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListDatabaseRolesMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Adds split points to specified tables, indexes of a database.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.AddSplitPointsResponse addSplitPoints( + com.google.spanner.admin.database.v1.AddSplitPointsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getAddSplitPointsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Creates a new backup schedule.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.BackupSchedule createBackupSchedule( + com.google.spanner.admin.database.v1.CreateBackupScheduleRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateBackupScheduleMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Gets backup schedule for the input schedule name.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule( + com.google.spanner.admin.database.v1.GetBackupScheduleRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetBackupScheduleMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Updates a backup schedule.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.BackupSchedule updateBackupSchedule( + com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateBackupScheduleMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Deletes a backup schedule.
                                +     * 
                                + */ + public com.google.protobuf.Empty deleteBackupSchedule( + com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteBackupScheduleMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists all the backup schedules for the database.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.ListBackupSchedulesResponse listBackupSchedules( + com.google.spanner.admin.database.v1.ListBackupSchedulesRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListBackupSchedulesMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * This is an internal API called by Spanner Graph jobs. You should never need
                                +     * to call this API directly.
                                +     * 
                                + */ + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + internalUpdateGraphOperation( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getInternalUpdateGraphOperationMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do ListenableFuture-style rpc calls to service DatabaseAdmin. + * + *
                                +   * Cloud Spanner Database Admin API
                                +   * The Cloud Spanner Database Admin API can be used to:
                                +   *   * create, drop, and list databases
                                +   *   * update the schema of pre-existing databases
                                +   *   * create, delete, copy and list backups for a database
                                +   *   * restore a database from an existing backup
                                +   * 
                                + */ + public static final class DatabaseAdminFutureStub + extends io.grpc.stub.AbstractFutureStub { + private DatabaseAdminFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DatabaseAdminFutureStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatabaseAdminFutureStub(channel, callOptions); + } + + /** + * + * + *
                                +     * Lists Cloud Spanner databases.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.spanner.admin.database.v1.ListDatabasesResponse> + listDatabases(com.google.spanner.admin.database.v1.ListDatabasesRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListDatabasesMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Creates a new Cloud Spanner database and starts to prepare it for serving.
                                +     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * have a name of the format `<database_name>/operations/<operation_id>` and
                                +     * can be used to track preparation of the database. The
                                +     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * [CreateDatabaseMetadata][google.spanner.admin.database.v1.CreateDatabaseMetadata].
                                +     * The [response][google.longrunning.Operation.response] field type is
                                +     * [Database][google.spanner.admin.database.v1.Database], if successful.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture + createDatabase(com.google.spanner.admin.database.v1.CreateDatabaseRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreateDatabaseMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Gets the state of a Cloud Spanner database.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.spanner.admin.database.v1.Database> + getDatabase(com.google.spanner.admin.database.v1.GetDatabaseRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetDatabaseMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Updates a Cloud Spanner database. The returned
                                +     * [long-running operation][google.longrunning.Operation] can be used to track
                                +     * the progress of updating the database. If the named database does not
                                +     * exist, returns `NOT_FOUND`.
                                +     * While the operation is pending:
                                +     *   * The database's
                                +     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
                                +     *     field is set to true.
                                +     *   * Cancelling the operation is best-effort. If the cancellation succeeds,
                                +     *     the operation metadata's
                                +     *     [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time]
                                +     *     is set, the updates are reverted, and the operation terminates with a
                                +     *     `CANCELLED` status.
                                +     *   * New UpdateDatabase requests will return a `FAILED_PRECONDITION` error
                                +     *     until the pending operation is done (returns successfully or with
                                +     *     error).
                                +     *   * Reading the database via the API continues to give the pre-request
                                +     *     values.
                                +     * Upon completion of the returned operation:
                                +     *   * The new values are in effect and readable via the API.
                                +     *   * The database's
                                +     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
                                +     *     field becomes false.
                                +     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * have a name of the format
                                +     * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>`
                                +     * and can be used to track the database modification. The
                                +     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata].
                                +     * The [response][google.longrunning.Operation.response] field type is
                                +     * [Database][google.spanner.admin.database.v1.Database], if successful.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture + updateDatabase(com.google.spanner.admin.database.v1.UpdateDatabaseRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUpdateDatabaseMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Updates the schema of a Cloud Spanner database by
                                +     * creating/altering/dropping tables, columns, indexes, etc. The returned
                                +     * [long-running operation][google.longrunning.Operation] will have a name of
                                +     * the format `<database_name>/operations/<operation_id>` and can be used to
                                +     * track execution of the schema change(s). The
                                +     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * [UpdateDatabaseDdlMetadata][google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata].
                                +     * The operation has no response.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture + updateDatabaseDdl(com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUpdateDatabaseDdlMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Drops (aka deletes) a Cloud Spanner database.
                                +     * Completed backups for the database will be retained according to their
                                +     * `expire_time`.
                                +     * Note: Cloud Spanner might continue to accept requests for a few seconds
                                +     * after the database has been deleted.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture + dropDatabase(com.google.spanner.admin.database.v1.DropDatabaseRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDropDatabaseMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Returns the schema of a Cloud Spanner database as a list of formatted
                                +     * DDL statements. This method does not show pending schema updates, those may
                                +     * be queried using the [Operations][google.longrunning.Operations] API.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.spanner.admin.database.v1.GetDatabaseDdlResponse> + getDatabaseDdl(com.google.spanner.admin.database.v1.GetDatabaseDdlRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetDatabaseDdlMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Sets the access control policy on a database or backup resource.
                                +     * Replaces any existing policy.
                                +     * Authorization requires `spanner.databases.setIamPolicy`
                                +     * permission on [resource][google.iam.v1.SetIamPolicyRequest.resource].
                                +     * For backups, authorization requires `spanner.backups.setIamPolicy`
                                +     * permission on [resource][google.iam.v1.SetIamPolicyRequest.resource].
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture + setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getSetIamPolicyMethod(), getCallOptions()), request); + } + + /** + * + * + *
                                +     * Gets the access control policy for a database or backup resource.
                                +     * Returns an empty policy if a database or backup exists but does not have a
                                +     * policy set.
                                +     * Authorization requires `spanner.databases.getIamPolicy` permission on
                                +     * [resource][google.iam.v1.GetIamPolicyRequest.resource].
                                +     * For backups, authorization requires `spanner.backups.getIamPolicy`
                                +     * permission on [resource][google.iam.v1.GetIamPolicyRequest.resource].
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture + getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetIamPolicyMethod(), getCallOptions()), request); } /** @@ -3221,6 +3959,20 @@ protected DatabaseAdminFutureStub build( getChannel().newCall(getListDatabaseRolesMethod(), getCallOptions()), request); } + /** + * + * + *
                                +     * Adds split points to specified tables, indexes of a database.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.spanner.admin.database.v1.AddSplitPointsResponse> + addSplitPoints(com.google.spanner.admin.database.v1.AddSplitPointsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getAddSplitPointsMethod(), getCallOptions()), request); + } + /** * * @@ -3293,6 +4045,22 @@ protected DatabaseAdminFutureStub build( return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getListBackupSchedulesMethod(), getCallOptions()), request); } + + /** + * + * + *
                                +     * This is an internal API called by Spanner Graph jobs. You should never need
                                +     * to call this API directly.
                                +     * 
                                + */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse> + internalUpdateGraphOperation( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getInternalUpdateGraphOperationMethod(), getCallOptions()), request); + } } private static final int METHODID_LIST_DATABASES = 0; @@ -3315,11 +4083,13 @@ protected DatabaseAdminFutureStub build( private static final int METHODID_LIST_DATABASE_OPERATIONS = 17; private static final int METHODID_LIST_BACKUP_OPERATIONS = 18; private static final int METHODID_LIST_DATABASE_ROLES = 19; - private static final int METHODID_CREATE_BACKUP_SCHEDULE = 20; - private static final int METHODID_GET_BACKUP_SCHEDULE = 21; - private static final int METHODID_UPDATE_BACKUP_SCHEDULE = 22; - private static final int METHODID_DELETE_BACKUP_SCHEDULE = 23; - private static final int METHODID_LIST_BACKUP_SCHEDULES = 24; + private static final int METHODID_ADD_SPLIT_POINTS = 20; + private static final int METHODID_CREATE_BACKUP_SCHEDULE = 21; + private static final int METHODID_GET_BACKUP_SCHEDULE = 22; + private static final int METHODID_UPDATE_BACKUP_SCHEDULE = 23; + private static final int METHODID_DELETE_BACKUP_SCHEDULE = 24; + private static final int METHODID_LIST_BACKUP_SCHEDULES = 25; + private static final int METHODID_INTERNAL_UPDATE_GRAPH_OPERATION = 26; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -3454,6 +4224,13 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv com.google.spanner.admin.database.v1.ListDatabaseRolesResponse>) responseObserver); break; + case METHODID_ADD_SPLIT_POINTS: + serviceImpl.addSplitPoints( + (com.google.spanner.admin.database.v1.AddSplitPointsRequest) request, + (io.grpc.stub.StreamObserver< + com.google.spanner.admin.database.v1.AddSplitPointsResponse>) + responseObserver); + break; case METHODID_CREATE_BACKUP_SCHEDULE: serviceImpl.createBackupSchedule( (com.google.spanner.admin.database.v1.CreateBackupScheduleRequest) request, @@ -3484,6 +4261,13 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv com.google.spanner.admin.database.v1.ListBackupSchedulesResponse>) responseObserver); break; + case METHODID_INTERNAL_UPDATE_GRAPH_OPERATION: + serviceImpl.internalUpdateGraphOperation( + (com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) request, + (io.grpc.stub.StreamObserver< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse>) + responseObserver); + break; default: throw new AssertionError(); } @@ -3627,6 +4411,13 @@ public static final io.grpc.ServerServiceDefinition bindService(AsyncService ser com.google.spanner.admin.database.v1.ListDatabaseRolesRequest, com.google.spanner.admin.database.v1.ListDatabaseRolesResponse>( service, METHODID_LIST_DATABASE_ROLES))) + .addMethod( + getAddSplitPointsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.spanner.admin.database.v1.AddSplitPointsRequest, + com.google.spanner.admin.database.v1.AddSplitPointsResponse>( + service, METHODID_ADD_SPLIT_POINTS))) .addMethod( getCreateBackupScheduleMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -3661,6 +4452,13 @@ public static final io.grpc.ServerServiceDefinition bindService(AsyncService ser com.google.spanner.admin.database.v1.ListBackupSchedulesRequest, com.google.spanner.admin.database.v1.ListBackupSchedulesResponse>( service, METHODID_LIST_BACKUP_SCHEDULES))) + .addMethod( + getInternalUpdateGraphOperationMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse>( + service, METHODID_INTERNAL_UPDATE_GRAPH_OPERATION))) .build(); } @@ -3732,11 +4530,13 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() { .addMethod(getListDatabaseOperationsMethod()) .addMethod(getListBackupOperationsMethod()) .addMethod(getListDatabaseRolesMethod()) + .addMethod(getAddSplitPointsMethod()) .addMethod(getCreateBackupScheduleMethod()) .addMethod(getGetBackupScheduleMethod()) .addMethod(getUpdateBackupScheduleMethod()) .addMethod(getDeleteBackupScheduleMethod()) .addMethod(getListBackupSchedulesMethod()) + .addMethod(getInternalUpdateGraphOperationMethod()) .build(); } } diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml index b794aca19dd..4ae1ec48cb3 100644 --- a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml +++ b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.82.0 + 6.113.1-SNAPSHOT grpc-google-cloud-spanner-admin-instance-v1 GRPC library for grpc-google-cloud-spanner-admin-instance-v1 com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT diff --git a/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java b/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java index 81d08cb9dbe..093b6a45960 100644 --- a/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java +++ b/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,9 +41,6 @@ * databases in that instance, and their performance may suffer. * */ -@javax.annotation.Generated( - value = "by gRPC proto compiler", - comments = "Source: google/spanner/admin/instance/v1/spanner_instance_admin.proto") @io.grpc.stub.annotations.GrpcGenerated public final class InstanceAdminGrpc { @@ -1055,6 +1052,19 @@ public InstanceAdminStub newStub( return InstanceAdminStub.newStub(factory, channel); } + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static InstanceAdminBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public InstanceAdminBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new InstanceAdminBlockingV2Stub(channel, callOptions); + } + }; + return InstanceAdminBlockingV2Stub.newStub(factory, channel); + } + /** * Creates a new blocking-style stub that supports unary and streaming output calls on the service */ @@ -1114,6 +1124,8 @@ public interface AsyncService { * *
                                      * Lists the supported instance configurations for a given project.
                                +     * Returns both Google-managed configurations and user-managed
                                +     * configurations.
                                      * 
                                */ default void listInstanceConfigs( @@ -1145,7 +1157,7 @@ default void getInstanceConfig( * *
                                      * Creates an instance configuration and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance configuration. The instance configuration name is assigned by the
                                      * caller. If the named instance configuration already exists,
                                @@ -1165,13 +1177,13 @@ default void getInstanceConfig(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false. Its state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * creation of the instance configuration. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.create` permission on
                                @@ -1191,7 +1203,7 @@ default void createInstanceConfig(
                                      *
                                      * 
                                      * Updates an instance configuration. The returned
                                -     * [long-running operation][google.longrunning.Operation] can be used to track
                                +     * long-running operation can be used to track
                                      * the progress of updating the instance. If the named instance configuration
                                      * does not exist, returns `NOT_FOUND`.
                                      * Only user-managed configurations can be updated.
                                @@ -1214,13 +1226,13 @@ default void createInstanceConfig(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * the instance configuration modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.update` permission on
                                @@ -1257,12 +1269,12 @@ default void deleteInstanceConfig(
                                      *
                                      *
                                      * 
                                -     * Lists the user-managed instance configuration [long-running
                                -     * operations][google.longrunning.Operation] in the given project. An instance
                                +     * Lists the user-managed instance configuration long-running
                                +     * operations in the given project. An instance
                                      * configuration operation has a name of the form
                                      * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -1330,7 +1342,7 @@ default void getInstance(
                                      *
                                      * 
                                      * Creates an instance and begins preparing it to begin serving. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance. The instance name is assigned by the caller. If the
                                      * named instance already exists, `CreateInstance` returns
                                @@ -1349,12 +1361,12 @@ default void getInstance(
                                      *   * Databases can be created in the instance.
                                      *   * The instance's allocated resource levels are readable via the API.
                                      *   * The instance's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track creation of the instance.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * 
                                */ @@ -1370,8 +1382,7 @@ default void createInstance( * *
                                      * Updates an instance, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance. If the named instance does not
                                      * exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -1392,12 +1403,12 @@ default void createInstance(
                                      *   * All newly-reserved resources are available for serving the instance's
                                      *     tables.
                                      *   * The instance's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track the instance modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * Authorization requires `spanner.instances.update` permission on
                                      * the resource [name][google.spanner.admin.instance.v1.Instance.name].
                                @@ -1503,7 +1514,7 @@ default void getInstancePartition(
                                      *
                                      * 
                                      * Creates an instance partition and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new instance partition.
                                      * The instance partition name is assigned by the caller. If the named
                                      * instance partition already exists, `CreateInstancePartition` returns
                                @@ -1523,13 +1534,13 @@ default void getInstancePartition(
                                      *   * The instance partition's allocated resource levels are readable via the
                                      *     API.
                                      *   * The instance partition's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track creation of the instance partition.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * 
                                @@ -1565,8 +1576,7 @@ default void deleteInstancePartition( * *
                                      * Updates an instance partition, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance partition. If the named instance
                                      * partition does not exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -1588,13 +1598,13 @@ default void deleteInstancePartition(
                                      *   * All newly-reserved resources are available for serving the instance
                                      *     partition's tables.
                                      *   * The instance partition's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track the instance partition modification. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * Authorization requires `spanner.instancePartitions.update` permission on
                                @@ -1613,12 +1623,11 @@ default void updateInstancePartition(
                                      *
                                      *
                                      * 
                                -     * Lists instance partition [long-running
                                -     * operations][google.longrunning.Operation] in the given instance.
                                +     * Lists instance partition long-running operations in the given instance.
                                      * An instance partition operation has a name of the form
                                      * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -1643,7 +1652,7 @@ default void listInstancePartitionOperations(
                                      *
                                      * 
                                      * Moves an instance to the target instance configuration. You can use the
                                -     * returned [long-running operation][google.longrunning.Operation] to track
                                +     * returned long-running operation to track
                                      * the progress of moving the instance.
                                      * `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of
                                      * the following criteria:
                                @@ -1667,13 +1676,13 @@ default void listInstancePartitionOperations(
                                      *   * The instance might experience higher read-write latencies and a higher
                                      *     transaction abort rate. However, moving an instance doesn't cause any
                                      *     downtime.
                                -     * The returned [long-running operation][google.longrunning.Operation] has
                                +     * The returned long-running operation has
                                      * a name of the format
                                      * `<instance_name>/operations/<operation_id>` and can be used to track
                                      * the move instance operation. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance],
                                      * if successful.
                                      * Cancelling the operation sets its metadata's
                                @@ -1775,6 +1784,8 @@ protected InstanceAdminStub build(io.grpc.Channel channel, io.grpc.CallOptions c
                                      *
                                      * 
                                      * Lists the supported instance configurations for a given project.
                                +     * Returns both Google-managed configurations and user-managed
                                +     * configurations.
                                      * 
                                */ public void listInstanceConfigs( @@ -1810,7 +1821,7 @@ public void getInstanceConfig( * *
                                      * Creates an instance configuration and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance configuration. The instance configuration name is assigned by the
                                      * caller. If the named instance configuration already exists,
                                @@ -1830,13 +1841,13 @@ public void getInstanceConfig(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false. Its state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * creation of the instance configuration. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.create` permission on
                                @@ -1858,7 +1869,7 @@ public void createInstanceConfig(
                                      *
                                      * 
                                      * Updates an instance configuration. The returned
                                -     * [long-running operation][google.longrunning.Operation] can be used to track
                                +     * long-running operation can be used to track
                                      * the progress of updating the instance. If the named instance configuration
                                      * does not exist, returns `NOT_FOUND`.
                                      * Only user-managed configurations can be updated.
                                @@ -1881,13 +1892,13 @@ public void createInstanceConfig(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * the instance configuration modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.update` permission on
                                @@ -1928,12 +1939,12 @@ public void deleteInstanceConfig(
                                      *
                                      *
                                      * 
                                -     * Lists the user-managed instance configuration [long-running
                                -     * operations][google.longrunning.Operation] in the given project. An instance
                                +     * Lists the user-managed instance configuration long-running
                                +     * operations in the given project. An instance
                                      * configuration operation has a name of the form
                                      * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -2009,7 +2020,7 @@ public void getInstance(
                                      *
                                      * 
                                      * Creates an instance and begins preparing it to begin serving. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance. The instance name is assigned by the caller. If the
                                      * named instance already exists, `CreateInstance` returns
                                @@ -2028,12 +2039,12 @@ public void getInstance(
                                      *   * Databases can be created in the instance.
                                      *   * The instance's allocated resource levels are readable via the API.
                                      *   * The instance's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track creation of the instance.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * 
                                */ @@ -2051,8 +2062,7 @@ public void createInstance( * *
                                      * Updates an instance, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance. If the named instance does not
                                      * exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -2073,12 +2083,12 @@ public void createInstance(
                                      *   * All newly-reserved resources are available for serving the instance's
                                      *     tables.
                                      *   * The instance's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track the instance modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * Authorization requires `spanner.instances.update` permission on
                                      * the resource [name][google.spanner.admin.instance.v1.Instance.name].
                                @@ -2196,7 +2206,7 @@ public void getInstancePartition(
                                      *
                                      * 
                                      * Creates an instance partition and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new instance partition.
                                      * The instance partition name is assigned by the caller. If the named
                                      * instance partition already exists, `CreateInstancePartition` returns
                                @@ -2216,13 +2226,13 @@ public void getInstancePartition(
                                      *   * The instance partition's allocated resource levels are readable via the
                                      *     API.
                                      *   * The instance partition's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track creation of the instance partition.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * 
                                @@ -2262,8 +2272,7 @@ public void deleteInstancePartition( * *
                                      * Updates an instance partition, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance partition. If the named instance
                                      * partition does not exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -2285,13 +2294,13 @@ public void deleteInstancePartition(
                                      *   * All newly-reserved resources are available for serving the instance
                                      *     partition's tables.
                                      *   * The instance partition's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track the instance partition modification. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * Authorization requires `spanner.instancePartitions.update` permission on
                                @@ -2312,12 +2321,11 @@ public void updateInstancePartition(
                                      *
                                      *
                                      * 
                                -     * Lists instance partition [long-running
                                -     * operations][google.longrunning.Operation] in the given instance.
                                +     * Lists instance partition long-running operations in the given instance.
                                      * An instance partition operation has a name of the form
                                      * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -2344,7 +2352,7 @@ public void listInstancePartitionOperations(
                                      *
                                      * 
                                      * Moves an instance to the target instance configuration. You can use the
                                -     * returned [long-running operation][google.longrunning.Operation] to track
                                +     * returned long-running operation to track
                                      * the progress of moving the instance.
                                      * `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of
                                      * the following criteria:
                                @@ -2368,13 +2376,13 @@ public void listInstancePartitionOperations(
                                      *   * The instance might experience higher read-write latencies and a higher
                                      *     transaction abort rate. However, moving an instance doesn't cause any
                                      *     downtime.
                                -     * The returned [long-running operation][google.longrunning.Operation] has
                                +     * The returned long-running operation has
                                      * a name of the format
                                      * `<instance_name>/operations/<operation_id>` and can be used to track
                                      * the move instance operation. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance],
                                      * if successful.
                                      * Cancelling the operation sets its metadata's
                                @@ -2429,6 +2437,621 @@ public void moveInstance(
                                    * databases in that instance, and their performance may suffer.
                                    * 
                                */ + public static final class InstanceAdminBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private InstanceAdminBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected InstanceAdminBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new InstanceAdminBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
                                +     * Lists the supported instance configurations for a given project.
                                +     * Returns both Google-managed configurations and user-managed
                                +     * configurations.
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse listInstanceConfigs( + com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListInstanceConfigsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Gets information about a particular instance configuration.
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig( + com.google.spanner.admin.instance.v1.GetInstanceConfigRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetInstanceConfigMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Creates an instance configuration and begins preparing it to be used. The
                                +     * returned long-running operation
                                +     * can be used to track the progress of preparing the new
                                +     * instance configuration. The instance configuration name is assigned by the
                                +     * caller. If the named instance configuration already exists,
                                +     * `CreateInstanceConfig` returns `ALREADY_EXISTS`.
                                +     * Immediately after the request returns:
                                +     *   * The instance configuration is readable via the API, with all requested
                                +     *     attributes. The instance configuration's
                                +     *     [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                +     *     field is set to true. Its state is `CREATING`.
                                +     * While the operation is pending:
                                +     *   * Cancelling the operation renders the instance configuration immediately
                                +     *     unreadable via the API.
                                +     *   * Except for deleting the creating resource, all other attempts to modify
                                +     *     the instance configuration are rejected.
                                +     * Upon completion of the returned operation:
                                +     *   * Instances can be created using the instance configuration.
                                +     *   * The instance configuration's
                                +     *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                +     *   field becomes false. Its state becomes `READY`.
                                +     * The returned long-running operation will
                                +     * have a name of the format
                                +     * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                +     * creation of the instance configuration. The
                                +     * metadata field type is
                                +     * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata].
                                +     * The response field type is
                                +     * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                +     * successful.
                                +     * Authorization requires `spanner.instanceConfigs.create` permission on
                                +     * the resource
                                +     * [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent].
                                +     * 
                                + */ + public com.google.longrunning.Operation createInstanceConfig( + com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateInstanceConfigMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Updates an instance configuration. The returned
                                +     * long-running operation can be used to track
                                +     * the progress of updating the instance. If the named instance configuration
                                +     * does not exist, returns `NOT_FOUND`.
                                +     * Only user-managed configurations can be updated.
                                +     * Immediately after the request returns:
                                +     *   * The instance configuration's
                                +     *     [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                +     *     field is set to true.
                                +     * While the operation is pending:
                                +     *   * Cancelling the operation sets its metadata's
                                +     *     [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata.cancel_time].
                                +     *     The operation is guaranteed to succeed at undoing all changes, after
                                +     *     which point it terminates with a `CANCELLED` status.
                                +     *   * All other attempts to modify the instance configuration are rejected.
                                +     *   * Reading the instance configuration via the API continues to give the
                                +     *     pre-request values.
                                +     * Upon completion of the returned operation:
                                +     *   * Creating instances using the instance configuration uses the new
                                +     *     values.
                                +     *   * The new values of the instance configuration are readable via the API.
                                +     *   * The instance configuration's
                                +     *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                +     *   field becomes false.
                                +     * The returned long-running operation will
                                +     * have a name of the format
                                +     * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                +     * the instance configuration modification.  The
                                +     * metadata field type is
                                +     * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata].
                                +     * The response field type is
                                +     * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                +     * successful.
                                +     * Authorization requires `spanner.instanceConfigs.update` permission on
                                +     * the resource [name][google.spanner.admin.instance.v1.InstanceConfig.name].
                                +     * 
                                + */ + public com.google.longrunning.Operation updateInstanceConfig( + com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getUpdateInstanceConfigMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Deletes the instance configuration. Deletion is only allowed when no
                                +     * instances are using the configuration. If any instances are using
                                +     * the configuration, returns `FAILED_PRECONDITION`.
                                +     * Only user-managed configurations can be deleted.
                                +     * Authorization requires `spanner.instanceConfigs.delete` permission on
                                +     * the resource [name][google.spanner.admin.instance.v1.InstanceConfig.name].
                                +     * 
                                + */ + public com.google.protobuf.Empty deleteInstanceConfig( + com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteInstanceConfigMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists the user-managed instance configuration long-running
                                +     * operations in the given project. An instance
                                +     * configuration operation has a name of the form
                                +     * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`.
                                +     * The long-running operation
                                +     * metadata field type
                                +     * `metadata.type_url` describes the type of the metadata. Operations returned
                                +     * include those that have completed/failed/canceled within the last 7 days,
                                +     * and pending operations. Operations returned are ordered by
                                +     * `operation.metadata.value.start_time` in descending order starting
                                +     * from the most recently started operation.
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse + listInstanceConfigOperations( + com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListInstanceConfigOperationsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists all instances in the given project.
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.ListInstancesResponse listInstances( + com.google.spanner.admin.instance.v1.ListInstancesRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListInstancesMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists all instance partitions for the given instance.
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse + listInstancePartitions( + com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListInstancePartitionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Gets information about a particular instance.
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.Instance getInstance( + com.google.spanner.admin.instance.v1.GetInstanceRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetInstanceMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Creates an instance and begins preparing it to begin serving. The
                                +     * returned long-running operation
                                +     * can be used to track the progress of preparing the new
                                +     * instance. The instance name is assigned by the caller. If the
                                +     * named instance already exists, `CreateInstance` returns
                                +     * `ALREADY_EXISTS`.
                                +     * Immediately upon completion of this request:
                                +     *   * The instance is readable via the API, with all requested attributes
                                +     *     but no allocated resources. Its state is `CREATING`.
                                +     * Until completion of the returned operation:
                                +     *   * Cancelling the operation renders the instance immediately unreadable
                                +     *     via the API.
                                +     *   * The instance can be deleted.
                                +     *   * All other attempts to modify the instance are rejected.
                                +     * Upon completion of the returned operation:
                                +     *   * Billing for all successfully-allocated resources begins (some types
                                +     *     may have lower than the requested levels).
                                +     *   * Databases can be created in the instance.
                                +     *   * The instance's allocated resource levels are readable via the API.
                                +     *   * The instance's state becomes `READY`.
                                +     * The returned long-running operation will
                                +     * have a name of the format `<instance_name>/operations/<operation_id>` and
                                +     * can be used to track creation of the instance.  The
                                +     * metadata field type is
                                +     * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata].
                                +     * The response field type is
                                +     * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                +     * 
                                + */ + public com.google.longrunning.Operation createInstance( + com.google.spanner.admin.instance.v1.CreateInstanceRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateInstanceMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Updates an instance, and begins allocating or releasing resources
                                +     * as requested. The returned long-running operation can be used to track the
                                +     * progress of updating the instance. If the named instance does not
                                +     * exist, returns `NOT_FOUND`.
                                +     * Immediately upon completion of this request:
                                +     *   * For resource types for which a decrease in the instance's allocation
                                +     *     has been requested, billing is based on the newly-requested level.
                                +     * Until completion of the returned operation:
                                +     *   * Cancelling the operation sets its metadata's
                                +     *     [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceMetadata.cancel_time],
                                +     *     and begins restoring resources to their pre-request values. The
                                +     *     operation is guaranteed to succeed at undoing all resource changes,
                                +     *     after which point it terminates with a `CANCELLED` status.
                                +     *   * All other attempts to modify the instance are rejected.
                                +     *   * Reading the instance via the API continues to give the pre-request
                                +     *     resource levels.
                                +     * Upon completion of the returned operation:
                                +     *   * Billing begins for all successfully-allocated resources (some types
                                +     *     may have lower than the requested levels).
                                +     *   * All newly-reserved resources are available for serving the instance's
                                +     *     tables.
                                +     *   * The instance's new resource levels are readable via the API.
                                +     * The returned long-running operation will
                                +     * have a name of the format `<instance_name>/operations/<operation_id>` and
                                +     * can be used to track the instance modification.  The
                                +     * metadata field type is
                                +     * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata].
                                +     * The response field type is
                                +     * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                +     * Authorization requires `spanner.instances.update` permission on
                                +     * the resource [name][google.spanner.admin.instance.v1.Instance.name].
                                +     * 
                                + */ + public com.google.longrunning.Operation updateInstance( + com.google.spanner.admin.instance.v1.UpdateInstanceRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getUpdateInstanceMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Deletes an instance.
                                +     * Immediately upon completion of the request:
                                +     *   * Billing ceases for all of the instance's reserved resources.
                                +     * Soon afterward:
                                +     *   * The instance and *all of its databases* immediately and
                                +     *     irrevocably disappear from the API. All data in the databases
                                +     *     is permanently deleted.
                                +     * 
                                + */ + public com.google.protobuf.Empty deleteInstance( + com.google.spanner.admin.instance.v1.DeleteInstanceRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteInstanceMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Sets the access control policy on an instance resource. Replaces any
                                +     * existing policy.
                                +     * Authorization requires `spanner.instances.setIamPolicy` on
                                +     * [resource][google.iam.v1.SetIamPolicyRequest.resource].
                                +     * 
                                + */ + public com.google.iam.v1.Policy setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getSetIamPolicyMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Gets the access control policy for an instance resource. Returns an empty
                                +     * policy if an instance exists but does not have a policy set.
                                +     * Authorization requires `spanner.instances.getIamPolicy` on
                                +     * [resource][google.iam.v1.GetIamPolicyRequest.resource].
                                +     * 
                                + */ + public com.google.iam.v1.Policy getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetIamPolicyMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Returns permissions that the caller has on the specified instance resource.
                                +     * Attempting this RPC on a non-existent Cloud Spanner instance resource will
                                +     * result in a NOT_FOUND error if the user has `spanner.instances.list`
                                +     * permission on the containing Google Cloud Project. Otherwise returns an
                                +     * empty set of permissions.
                                +     * 
                                + */ + public com.google.iam.v1.TestIamPermissionsResponse testIamPermissions( + com.google.iam.v1.TestIamPermissionsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getTestIamPermissionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Gets information about a particular instance partition.
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartition( + com.google.spanner.admin.instance.v1.GetInstancePartitionRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetInstancePartitionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Creates an instance partition and begins preparing it to be used. The
                                +     * returned long-running operation
                                +     * can be used to track the progress of preparing the new instance partition.
                                +     * The instance partition name is assigned by the caller. If the named
                                +     * instance partition already exists, `CreateInstancePartition` returns
                                +     * `ALREADY_EXISTS`.
                                +     * Immediately upon completion of this request:
                                +     *   * The instance partition is readable via the API, with all requested
                                +     *     attributes but no allocated resources. Its state is `CREATING`.
                                +     * Until completion of the returned operation:
                                +     *   * Cancelling the operation renders the instance partition immediately
                                +     *     unreadable via the API.
                                +     *   * The instance partition can be deleted.
                                +     *   * All other attempts to modify the instance partition are rejected.
                                +     * Upon completion of the returned operation:
                                +     *   * Billing for all successfully-allocated resources begins (some types
                                +     *     may have lower than the requested levels).
                                +     *   * Databases can start using this instance partition.
                                +     *   * The instance partition's allocated resource levels are readable via the
                                +     *     API.
                                +     *   * The instance partition's state becomes `READY`.
                                +     * The returned long-running operation will
                                +     * have a name of the format
                                +     * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                +     * track creation of the instance partition.  The
                                +     * metadata field type is
                                +     * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata].
                                +     * The response field type is
                                +     * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                +     * successful.
                                +     * 
                                + */ + public com.google.longrunning.Operation createInstancePartition( + com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateInstancePartitionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Deletes an existing instance partition. Requires that the
                                +     * instance partition is not used by any database or backup and is not the
                                +     * default instance partition of an instance.
                                +     * Authorization requires `spanner.instancePartitions.delete` permission on
                                +     * the resource
                                +     * [name][google.spanner.admin.instance.v1.InstancePartition.name].
                                +     * 
                                + */ + public com.google.protobuf.Empty deleteInstancePartition( + com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteInstancePartitionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Updates an instance partition, and begins allocating or releasing resources
                                +     * as requested. The returned long-running operation can be used to track the
                                +     * progress of updating the instance partition. If the named instance
                                +     * partition does not exist, returns `NOT_FOUND`.
                                +     * Immediately upon completion of this request:
                                +     *   * For resource types for which a decrease in the instance partition's
                                +     *   allocation has been requested, billing is based on the newly-requested
                                +     *   level.
                                +     * Until completion of the returned operation:
                                +     *   * Cancelling the operation sets its metadata's
                                +     *     [cancel_time][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata.cancel_time],
                                +     *     and begins restoring resources to their pre-request values. The
                                +     *     operation is guaranteed to succeed at undoing all resource changes,
                                +     *     after which point it terminates with a `CANCELLED` status.
                                +     *   * All other attempts to modify the instance partition are rejected.
                                +     *   * Reading the instance partition via the API continues to give the
                                +     *     pre-request resource levels.
                                +     * Upon completion of the returned operation:
                                +     *   * Billing begins for all successfully-allocated resources (some types
                                +     *     may have lower than the requested levels).
                                +     *   * All newly-reserved resources are available for serving the instance
                                +     *     partition's tables.
                                +     *   * The instance partition's new resource levels are readable via the API.
                                +     * The returned long-running operation will
                                +     * have a name of the format
                                +     * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                +     * track the instance partition modification. The
                                +     * metadata field type is
                                +     * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata].
                                +     * The response field type is
                                +     * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                +     * successful.
                                +     * Authorization requires `spanner.instancePartitions.update` permission on
                                +     * the resource
                                +     * [name][google.spanner.admin.instance.v1.InstancePartition.name].
                                +     * 
                                + */ + public com.google.longrunning.Operation updateInstancePartition( + com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getUpdateInstancePartitionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists instance partition long-running operations in the given instance.
                                +     * An instance partition operation has a name of the form
                                +     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`.
                                +     * The long-running operation
                                +     * metadata field type
                                +     * `metadata.type_url` describes the type of the metadata. Operations returned
                                +     * include those that have completed/failed/canceled within the last 7 days,
                                +     * and pending operations. Operations returned are ordered by
                                +     * `operation.metadata.value.start_time` in descending order starting from the
                                +     * most recently started operation.
                                +     * Authorization requires `spanner.instancePartitionOperations.list`
                                +     * permission on the resource
                                +     * [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent].
                                +     * 
                                + */ + public com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse + listInstancePartitionOperations( + com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListInstancePartitionOperationsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Moves an instance to the target instance configuration. You can use the
                                +     * returned long-running operation to track
                                +     * the progress of moving the instance.
                                +     * `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of
                                +     * the following criteria:
                                +     *   * Is undergoing a move to a different instance configuration
                                +     *   * Has backups
                                +     *   * Has an ongoing update
                                +     *   * Contains any CMEK-enabled databases
                                +     *   * Is a free trial instance
                                +     * While the operation is pending:
                                +     *   * All other attempts to modify the instance, including changes to its
                                +     *     compute capacity, are rejected.
                                +     *   * The following database and backup admin operations are rejected:
                                +     *     * `DatabaseAdmin.CreateDatabase`
                                +     *     * `DatabaseAdmin.UpdateDatabaseDdl` (disabled if default_leader is
                                +     *        specified in the request.)
                                +     *     * `DatabaseAdmin.RestoreDatabase`
                                +     *     * `DatabaseAdmin.CreateBackup`
                                +     *     * `DatabaseAdmin.CopyBackup`
                                +     *   * Both the source and target instance configurations are subject to
                                +     *     hourly compute and storage charges.
                                +     *   * The instance might experience higher read-write latencies and a higher
                                +     *     transaction abort rate. However, moving an instance doesn't cause any
                                +     *     downtime.
                                +     * The returned long-running operation has
                                +     * a name of the format
                                +     * `<instance_name>/operations/<operation_id>` and can be used to track
                                +     * the move instance operation. The
                                +     * metadata field type is
                                +     * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata].
                                +     * The response field type is
                                +     * [Instance][google.spanner.admin.instance.v1.Instance],
                                +     * if successful.
                                +     * Cancelling the operation sets its metadata's
                                +     * [cancel_time][google.spanner.admin.instance.v1.MoveInstanceMetadata.cancel_time].
                                +     * Cancellation is not immediate because it involves moving any data
                                +     * previously moved to the target instance configuration back to the original
                                +     * instance configuration. You can use this operation to track the progress of
                                +     * the cancellation. Upon successful completion of the cancellation, the
                                +     * operation terminates with `CANCELLED` status.
                                +     * If not cancelled, upon completion of the returned operation:
                                +     *   * The instance successfully moves to the target instance
                                +     *     configuration.
                                +     *   * You are billed for compute and storage in target instance
                                +     *   configuration.
                                +     * Authorization requires the `spanner.instances.update` permission on
                                +     * the resource [instance][google.spanner.admin.instance.v1.Instance].
                                +     * For more details, see
                                +     * [Move an instance](https://cloud.google.com/spanner/docs/move-instance).
                                +     * 
                                + */ + public com.google.longrunning.Operation moveInstance( + com.google.spanner.admin.instance.v1.MoveInstanceRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getMoveInstanceMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service InstanceAdmin. + * + *
                                +   * Cloud Spanner Instance Admin API
                                +   * The Cloud Spanner Instance Admin API can be used to create, delete,
                                +   * modify and list instances. Instances are dedicated Cloud Spanner serving
                                +   * and storage resources to be used by Cloud Spanner databases.
                                +   * Each instance has a "configuration", which dictates where the
                                +   * serving resources for the Cloud Spanner instance are located (e.g.,
                                +   * US-central, Europe). Configurations are created by Google based on
                                +   * resource availability.
                                +   * Cloud Spanner billing is based on the instances that exist and their
                                +   * sizes. After an instance exists, there are no additional
                                +   * per-database or per-operation charges for use of the instance
                                +   * (though there may be additional network bandwidth charges).
                                +   * Instances offer isolation: problems with databases in one instance
                                +   * will not affect other instances. However, within an instance
                                +   * databases can affect each other. For example, if one database in an
                                +   * instance receives a lot of requests and consumes most of the
                                +   * instance resources, fewer resources are available for other
                                +   * databases in that instance, and their performance may suffer.
                                +   * 
                                + */ public static final class InstanceAdminBlockingStub extends io.grpc.stub.AbstractBlockingStub { private InstanceAdminBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { @@ -2446,6 +3069,8 @@ protected InstanceAdminBlockingStub build( * *
                                      * Lists the supported instance configurations for a given project.
                                +     * Returns both Google-managed configurations and user-managed
                                +     * configurations.
                                      * 
                                */ public com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse listInstanceConfigs( @@ -2472,7 +3097,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig( * *
                                      * Creates an instance configuration and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance configuration. The instance configuration name is assigned by the
                                      * caller. If the named instance configuration already exists,
                                @@ -2492,13 +3117,13 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false. Its state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * creation of the instance configuration. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.create` permission on
                                @@ -2517,7 +3142,7 @@ public com.google.longrunning.Operation createInstanceConfig(
                                      *
                                      * 
                                      * Updates an instance configuration. The returned
                                -     * [long-running operation][google.longrunning.Operation] can be used to track
                                +     * long-running operation can be used to track
                                      * the progress of updating the instance. If the named instance configuration
                                      * does not exist, returns `NOT_FOUND`.
                                      * Only user-managed configurations can be updated.
                                @@ -2540,13 +3165,13 @@ public com.google.longrunning.Operation createInstanceConfig(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * the instance configuration modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.update` permission on
                                @@ -2581,12 +3206,12 @@ public com.google.protobuf.Empty deleteInstanceConfig(
                                      *
                                      *
                                      * 
                                -     * Lists the user-managed instance configuration [long-running
                                -     * operations][google.longrunning.Operation] in the given project. An instance
                                +     * Lists the user-managed instance configuration long-running
                                +     * operations in the given project. An instance
                                      * configuration operation has a name of the form
                                      * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -2646,7 +3271,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance(
                                      *
                                      * 
                                      * Creates an instance and begins preparing it to begin serving. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance. The instance name is assigned by the caller. If the
                                      * named instance already exists, `CreateInstance` returns
                                @@ -2665,12 +3290,12 @@ public com.google.spanner.admin.instance.v1.Instance getInstance(
                                      *   * Databases can be created in the instance.
                                      *   * The instance's allocated resource levels are readable via the API.
                                      *   * The instance's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track creation of the instance.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * 
                                */ @@ -2685,8 +3310,7 @@ public com.google.longrunning.Operation createInstance( * *
                                      * Updates an instance, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance. If the named instance does not
                                      * exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -2707,12 +3331,12 @@ public com.google.longrunning.Operation createInstance(
                                      *   * All newly-reserved resources are available for serving the instance's
                                      *     tables.
                                      *   * The instance's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track the instance modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * Authorization requires `spanner.instances.update` permission on
                                      * the resource [name][google.spanner.admin.instance.v1.Instance.name].
                                @@ -2808,7 +3432,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti
                                      *
                                      * 
                                      * Creates an instance partition and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new instance partition.
                                      * The instance partition name is assigned by the caller. If the named
                                      * instance partition already exists, `CreateInstancePartition` returns
                                @@ -2828,13 +3452,13 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti
                                      *   * The instance partition's allocated resource levels are readable via the
                                      *     API.
                                      *   * The instance partition's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track creation of the instance partition.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * 
                                @@ -2868,8 +3492,7 @@ public com.google.protobuf.Empty deleteInstancePartition( * *
                                      * Updates an instance partition, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance partition. If the named instance
                                      * partition does not exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -2891,13 +3514,13 @@ public com.google.protobuf.Empty deleteInstancePartition(
                                      *   * All newly-reserved resources are available for serving the instance
                                      *     partition's tables.
                                      *   * The instance partition's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track the instance partition modification. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * Authorization requires `spanner.instancePartitions.update` permission on
                                @@ -2915,12 +3538,11 @@ public com.google.longrunning.Operation updateInstancePartition(
                                      *
                                      *
                                      * 
                                -     * Lists instance partition [long-running
                                -     * operations][google.longrunning.Operation] in the given instance.
                                +     * Lists instance partition long-running operations in the given instance.
                                      * An instance partition operation has a name of the form
                                      * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -2943,7 +3565,7 @@ public com.google.longrunning.Operation updateInstancePartition(
                                      *
                                      * 
                                      * Moves an instance to the target instance configuration. You can use the
                                -     * returned [long-running operation][google.longrunning.Operation] to track
                                +     * returned long-running operation to track
                                      * the progress of moving the instance.
                                      * `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of
                                      * the following criteria:
                                @@ -2967,13 +3589,13 @@ public com.google.longrunning.Operation updateInstancePartition(
                                      *   * The instance might experience higher read-write latencies and a higher
                                      *     transaction abort rate. However, moving an instance doesn't cause any
                                      *     downtime.
                                -     * The returned [long-running operation][google.longrunning.Operation] has
                                +     * The returned long-running operation has
                                      * a name of the format
                                      * `<instance_name>/operations/<operation_id>` and can be used to track
                                      * the move instance operation. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance],
                                      * if successful.
                                      * Cancelling the operation sets its metadata's
                                @@ -3042,6 +3664,8 @@ protected InstanceAdminFutureStub build(
                                      *
                                      * 
                                      * Lists the supported instance configurations for a given project.
                                +     * Returns both Google-managed configurations and user-managed
                                +     * configurations.
                                      * 
                                */ public com.google.common.util.concurrent.ListenableFuture< @@ -3071,7 +3695,7 @@ protected InstanceAdminFutureStub build( * *
                                      * Creates an instance configuration and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance configuration. The instance configuration name is assigned by the
                                      * caller. If the named instance configuration already exists,
                                @@ -3091,13 +3715,13 @@ protected InstanceAdminFutureStub build(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false. Its state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * creation of the instance configuration. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.create` permission on
                                @@ -3117,7 +3741,7 @@ protected InstanceAdminFutureStub build(
                                      *
                                      * 
                                      * Updates an instance configuration. The returned
                                -     * [long-running operation][google.longrunning.Operation] can be used to track
                                +     * long-running operation can be used to track
                                      * the progress of updating the instance. If the named instance configuration
                                      * does not exist, returns `NOT_FOUND`.
                                      * Only user-managed configurations can be updated.
                                @@ -3140,13 +3764,13 @@ protected InstanceAdminFutureStub build(
                                      *   * The instance configuration's
                                      *   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
                                      *   field becomes false.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_config_name>/operations/<operation_id>` and can be used to track
                                      * the instance configuration modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
                                      * successful.
                                      * Authorization requires `spanner.instanceConfigs.update` permission on
                                @@ -3183,12 +3807,12 @@ protected InstanceAdminFutureStub build(
                                      *
                                      *
                                      * 
                                -     * Lists the user-managed instance configuration [long-running
                                -     * operations][google.longrunning.Operation] in the given project. An instance
                                +     * Lists the user-managed instance configuration long-running
                                +     * operations in the given project. An instance
                                      * configuration operation has a name of the form
                                      * `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -3252,7 +3876,7 @@ protected InstanceAdminFutureStub build(
                                      *
                                      * 
                                      * Creates an instance and begins preparing it to begin serving. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new
                                      * instance. The instance name is assigned by the caller. If the
                                      * named instance already exists, `CreateInstance` returns
                                @@ -3271,12 +3895,12 @@ protected InstanceAdminFutureStub build(
                                      *   * Databases can be created in the instance.
                                      *   * The instance's allocated resource levels are readable via the API.
                                      *   * The instance's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track creation of the instance.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * 
                                */ @@ -3291,8 +3915,7 @@ protected InstanceAdminFutureStub build( * *
                                      * Updates an instance, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance. If the named instance does not
                                      * exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -3313,12 +3936,12 @@ protected InstanceAdminFutureStub build(
                                      *   * All newly-reserved resources are available for serving the instance's
                                      *     tables.
                                      *   * The instance's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format `<instance_name>/operations/<operation_id>` and
                                      * can be used to track the instance modification.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance], if successful.
                                      * Authorization requires `spanner.instances.update` permission on
                                      * the resource [name][google.spanner.admin.instance.v1.Instance.name].
                                @@ -3419,7 +4042,7 @@ protected InstanceAdminFutureStub build(
                                      *
                                      * 
                                      * Creates an instance partition and begins preparing it to be used. The
                                -     * returned [long-running operation][google.longrunning.Operation]
                                +     * returned long-running operation
                                      * can be used to track the progress of preparing the new instance partition.
                                      * The instance partition name is assigned by the caller. If the named
                                      * instance partition already exists, `CreateInstancePartition` returns
                                @@ -3439,13 +4062,13 @@ protected InstanceAdminFutureStub build(
                                      *   * The instance partition's allocated resource levels are readable via the
                                      *     API.
                                      *   * The instance partition's state becomes `READY`.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track creation of the instance partition.  The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * 
                                @@ -3481,8 +4104,7 @@ protected InstanceAdminFutureStub build( * *
                                      * Updates an instance partition, and begins allocating or releasing resources
                                -     * as requested. The returned [long-running
                                -     * operation][google.longrunning.Operation] can be used to track the
                                +     * as requested. The returned long-running operation can be used to track the
                                      * progress of updating the instance partition. If the named instance
                                      * partition does not exist, returns `NOT_FOUND`.
                                      * Immediately upon completion of this request:
                                @@ -3504,13 +4126,13 @@ protected InstanceAdminFutureStub build(
                                      *   * All newly-reserved resources are available for serving the instance
                                      *     partition's tables.
                                      *   * The instance partition's new resource levels are readable via the API.
                                -     * The returned [long-running operation][google.longrunning.Operation] will
                                +     * The returned long-running operation will
                                      * have a name of the format
                                      * `<instance_partition_name>/operations/<operation_id>` and can be used to
                                      * track the instance partition modification. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
                                      * successful.
                                      * Authorization requires `spanner.instancePartitions.update` permission on
                                @@ -3529,12 +4151,11 @@ protected InstanceAdminFutureStub build(
                                      *
                                      *
                                      * 
                                -     * Lists instance partition [long-running
                                -     * operations][google.longrunning.Operation] in the given instance.
                                +     * Lists instance partition long-running operations in the given instance.
                                      * An instance partition operation has a name of the form
                                      * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`.
                                      * The long-running operation
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata. Operations returned
                                      * include those that have completed/failed/canceled within the last 7 days,
                                      * and pending operations. Operations returned are ordered by
                                @@ -3559,7 +4180,7 @@ protected InstanceAdminFutureStub build(
                                      *
                                      * 
                                      * Moves an instance to the target instance configuration. You can use the
                                -     * returned [long-running operation][google.longrunning.Operation] to track
                                +     * returned long-running operation to track
                                      * the progress of moving the instance.
                                      * `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of
                                      * the following criteria:
                                @@ -3583,13 +4204,13 @@ protected InstanceAdminFutureStub build(
                                      *   * The instance might experience higher read-write latencies and a higher
                                      *     transaction abort rate. However, moving an instance doesn't cause any
                                      *     downtime.
                                -     * The returned [long-running operation][google.longrunning.Operation] has
                                +     * The returned long-running operation has
                                      * a name of the format
                                      * `<instance_name>/operations/<operation_id>` and can be used to track
                                      * the move instance operation. The
                                -     * [metadata][google.longrunning.Operation.metadata] field type is
                                +     * metadata field type is
                                      * [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata].
                                -     * The [response][google.longrunning.Operation.response] field type is
                                +     * The response field type is
                                      * [Instance][google.spanner.admin.instance.v1.Instance],
                                      * if successful.
                                      * Cancelling the operation sets its metadata's
                                diff --git a/grpc-google-cloud-spanner-executor-v1/pom.xml b/grpc-google-cloud-spanner-executor-v1/pom.xml
                                index b63e9bd6038..9c2e69a6636 100644
                                --- a/grpc-google-cloud-spanner-executor-v1/pom.xml
                                +++ b/grpc-google-cloud-spanner-executor-v1/pom.xml
                                @@ -4,13 +4,13 @@
                                   4.0.0
                                   com.google.api.grpc
                                   grpc-google-cloud-spanner-executor-v1
                                -  6.82.0
                                +  6.113.1-SNAPSHOT
                                   grpc-google-cloud-spanner-executor-v1
                                   GRPC library for google-cloud-spanner
                                   
                                     com.google.cloud
                                     google-cloud-spanner-parent
                                -    6.82.0
                                +    6.113.1-SNAPSHOT
                                   
                                   
                                     
                                diff --git a/grpc-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerExecutorProxyGrpc.java b/grpc-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerExecutorProxyGrpc.java
                                index c0b46bb0d38..b33fca41f1c 100644
                                --- a/grpc-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerExecutorProxyGrpc.java
                                +++ b/grpc-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerExecutorProxyGrpc.java
                                @@ -1,5 +1,5 @@
                                 /*
                                - * Copyright 2024 Google LLC
                                + * Copyright 2026 Google LLC
                                  *
                                  * Licensed under the Apache License, Version 2.0 (the "License");
                                  * you may not use this file except in compliance with the License.
                                @@ -24,9 +24,6 @@
                                  * Service that executes SpannerActions asynchronously.
                                  * 
                                */ -@javax.annotation.Generated( - value = "by gRPC proto compiler", - comments = "Source: google/spanner/executor/v1/cloud_executor.proto") @io.grpc.stub.annotations.GrpcGenerated public final class SpannerExecutorProxyGrpc { @@ -98,6 +95,19 @@ public SpannerExecutorProxyStub newStub( return SpannerExecutorProxyStub.newStub(factory, channel); } + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static SpannerExecutorProxyBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SpannerExecutorProxyBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerExecutorProxyBlockingV2Stub(channel, callOptions); + } + }; + return SpannerExecutorProxyBlockingV2Stub.newStub(factory, channel); + } + /** * Creates a new blocking-style stub that supports unary and streaming output calls on the service */ @@ -221,6 +231,49 @@ protected SpannerExecutorProxyStub build( * Service that executes SpannerActions asynchronously. *
                                */ + public static final class SpannerExecutorProxyBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private SpannerExecutorProxyBlockingV2Stub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SpannerExecutorProxyBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerExecutorProxyBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
                                +     * ExecuteActionAsync is a streaming call that starts executing a new Spanner
                                +     * action.
                                +     * For each request, the server will reply with one or more responses, but
                                +     * only the last response will contain status in the outcome.
                                +     * Responses can be matched to requests by action_id. It is allowed to have
                                +     * multiple actions in flight--in that case, actions are be executed in
                                +     * parallel.
                                +     * 
                                + */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall< + com.google.spanner.executor.v1.SpannerAsyncActionRequest, + com.google.spanner.executor.v1.SpannerAsyncActionResponse> + executeActionAsync() { + return io.grpc.stub.ClientCalls.blockingBidiStreamingCall( + getChannel(), getExecuteActionAsyncMethod(), getCallOptions()); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service SpannerExecutorProxy. + * + *
                                +   * Service that executes SpannerActions asynchronously.
                                +   * 
                                + */ public static final class SpannerExecutorProxyBlockingStub extends io.grpc.stub.AbstractBlockingStub { private SpannerExecutorProxyBlockingStub( diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml index dc1c2c1c936..26ba1244ac7 100644 --- a/grpc-google-cloud-spanner-v1/pom.xml +++ b/grpc-google-cloud-spanner-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.82.0 + 6.113.1-SNAPSHOT grpc-google-cloud-spanner-v1 GRPC library for grpc-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT diff --git a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java index ff9ea44f98f..4c280f1af90 100644 --- a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java +++ b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,9 +26,6 @@ * transactions on data stored in Cloud Spanner databases. *
                                */ -@javax.annotation.Generated( - value = "by gRPC proto compiler", - comments = "Source: google/spanner/v1/spanner.proto") @io.grpc.stub.annotations.GrpcGenerated public final class SpannerGrpc { @@ -705,6 +702,19 @@ public SpannerStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOpti return SpannerStub.newStub(factory, channel); } + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static SpannerBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SpannerBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerBlockingV2Stub(channel, callOptions); + } + }; + return SpannerBlockingV2Stub.newStub(factory, channel); + } + /** * Creates a new blocking-style stub that supports unary and streaming output calls on the service */ @@ -757,13 +767,13 @@ public interface AsyncService { * multiple sessions. Note that standalone reads and queries use a * transaction internally, and count toward the one transaction * limit. - * Active sessions use additional server resources, so it is a good idea to + * Active sessions use additional server resources, so it's a good idea to * delete idle and unneeded sessions. - * Aside from explicit deletes, Cloud Spanner may delete sessions for which no + * Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, * requests to it return `NOT_FOUND`. * Idle sessions can be kept alive by sending a trivial SQL query - * periodically, e.g., `"SELECT 1"`. + * periodically, for example, `"SELECT 1"`. *
                                */ default void createSession( @@ -794,7 +804,7 @@ default void batchCreateSessions( * * *
                                -     * Gets a session. Returns `NOT_FOUND` if the session does not exist.
                                +     * Gets a session. Returns `NOT_FOUND` if the session doesn't exist.
                                      * This is mainly useful for determining whether a session is still
                                      * alive.
                                      * 
                                @@ -823,9 +833,9 @@ default void listSessions( * * *
                                -     * Ends a session, releasing server resources associated with it. This will
                                -     * asynchronously trigger cancellation of any operations that are running with
                                -     * this session.
                                +     * Ends a session, releasing server resources associated with it. This
                                +     * asynchronously triggers the cancellation of any operations that are running
                                +     * with this session.
                                      * 
                                */ default void deleteSession( @@ -840,7 +850,7 @@ default void deleteSession( * *
                                      * Executes an SQL statement, returning all results in a single reply. This
                                -     * method cannot be used to return a result set larger than 10 MiB;
                                +     * method can't be used to return a result set larger than 10 MiB;
                                      * if the query yields more data than that, the query fails with
                                      * a `FAILED_PRECONDITION` error.
                                      * Operations inside read-write transactions might return `ABORTED`. If
                                @@ -850,6 +860,8 @@ default void deleteSession(
                                      * Larger result sets can be fetched in streaming fashion by calling
                                      * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql]
                                      * instead.
                                +     * The query string can be SQL or [Graph Query Language
                                +     * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro).
                                      * 
                                */ default void executeSql( @@ -867,6 +879,8 @@ default void executeSql( * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there is no limit on * the size of the returned result set. However, no individual row in the * result set can exceed 100 MiB, and no column value can exceed 10 MiB. + * The query string can be SQL or [Graph Query Language + * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). *
                                */ default void executeStreamingSql( @@ -906,7 +920,7 @@ default void executeBatchDml( *
                                      * Reads rows from the database using key lookups and scans, as a
                                      * simple key/value style alternative to
                                -     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].  This method cannot be
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be
                                      * used to return a result set larger than 10 MiB; if the read matches more
                                      * data than that, the read fails with a `FAILED_PRECONDITION`
                                      * error.
                                @@ -969,8 +983,8 @@ default void beginTransaction(
                                      * `Commit` might return an `ABORTED` error. This can occur at any time;
                                      * commonly, the cause is conflicts with concurrent
                                      * transactions. However, it can also happen for a variety of other
                                -     * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
                                -     * the transaction from the beginning, re-using the same session.
                                +     * reasons. If `Commit` returns `ABORTED`, the caller should retry
                                +     * the transaction from the beginning, reusing the same session.
                                      * On very rare occasions, `Commit` might return `UNKNOWN`. This can happen,
                                      * for example, if the client job experiences a 1+ hour networking failure.
                                      * At that point, Cloud Spanner has lost track of the transaction outcome and
                                @@ -988,13 +1002,13 @@ default void commit(
                                      *
                                      *
                                      * 
                                -     * Rolls back a transaction, releasing any locks it holds. It is a good
                                +     * Rolls back a transaction, releasing any locks it holds. It's a good
                                      * idea to call this for any transaction that includes one or more
                                      * [Read][google.spanner.v1.Spanner.Read] or
                                      * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately
                                      * decides not to commit.
                                      * `Rollback` returns `OK` if it successfully aborts the transaction, the
                                -     * transaction was already aborted, or the transaction is not
                                +     * transaction was already aborted, or the transaction isn't
                                      * found. `Rollback` never returns `ABORTED`.
                                      * 
                                */ @@ -1009,15 +1023,15 @@ default void rollback( * *
                                      * Creates a set of partition tokens that can be used to execute a query
                                -     * operation in parallel.  Each of the returned partition tokens can be used
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                      * by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to
                                -     * specify a subset of the query result to read.  The same session and
                                -     * read-only transaction must be used by the PartitionQueryRequest used to
                                -     * create the partition tokens and the ExecuteSqlRequests that use the
                                +     * specify a subset of the query result to read. The same session and
                                +     * read-only transaction must be used by the `PartitionQueryRequest` used to
                                +     * create the partition tokens and the `ExecuteSqlRequests` that use the
                                      * partition tokens.
                                      * Partition tokens become invalid when the session used to create them
                                      * is deleted, is idle for too long, begins a new transaction, or becomes too
                                -     * old.  When any of these happen, it is not possible to resume the query, and
                                +     * old. When any of these happen, it isn't possible to resume the query, and
                                      * the whole operation must be restarted from the beginning.
                                      * 
                                */ @@ -1033,17 +1047,17 @@ default void partitionQuery( * *
                                      * Creates a set of partition tokens that can be used to execute a read
                                -     * operation in parallel.  Each of the returned partition tokens can be used
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                      * by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a
                                -     * subset of the read result to read.  The same session and read-only
                                -     * transaction must be used by the PartitionReadRequest used to create the
                                -     * partition tokens and the ReadRequests that use the partition tokens.  There
                                -     * are no ordering guarantees on rows returned among the returned partition
                                -     * tokens, or even within each individual StreamingRead call issued with a
                                -     * partition_token.
                                +     * subset of the read result to read. The same session and read-only
                                +     * transaction must be used by the `PartitionReadRequest` used to create the
                                +     * partition tokens and the `ReadRequests` that use the partition tokens.
                                +     * There are no ordering guarantees on rows returned among the returned
                                +     * partition tokens, or even within each individual `StreamingRead` call
                                +     * issued with a `partition_token`.
                                      * Partition tokens become invalid when the session used to create them
                                      * is deleted, is idle for too long, begins a new transaction, or becomes too
                                -     * old.  When any of these happen, it is not possible to resume the read, and
                                +     * old. When any of these happen, it isn't possible to resume the read, and
                                      * the whole operation must be restarted from the beginning.
                                      * 
                                */ @@ -1062,14 +1076,14 @@ default void partitionRead( * transactions. All mutations in a group are committed atomically. However, * mutations across groups can be committed non-atomically in an unspecified * order and thus, they must be independent of each other. Partial failure is - * possible, i.e., some groups may have been committed successfully, while - * some may have failed. The results of individual batches are streamed into - * the response as the batches are applied. - * BatchWrite requests are not replay protected, meaning that each mutation - * group may be applied more than once. Replays of non-idempotent mutations - * may have undesirable effects. For example, replays of an insert mutation - * may produce an already exists error or if you use generated or commit - * timestamp-based keys, it may result in additional rows being added to the + * possible, that is, some groups might have been committed successfully, + * while some might have failed. The results of individual batches are + * streamed into the response as the batches are applied. + * `BatchWrite` requests are not replay protected, meaning that each mutation + * group can be applied more than once. Replays of non-idempotent mutations + * can have undesirable effects. For example, replays of an insert mutation + * can produce an already exists error or if you use generated or commit + * timestamp-based keys, it can result in additional rows being added to the * mutation's table. We recommend structuring your mutation groups to be * idempotent to avoid this issue. *
                                @@ -1130,13 +1144,13 @@ protected SpannerStub build(io.grpc.Channel channel, io.grpc.CallOptions callOpt * multiple sessions. Note that standalone reads and queries use a * transaction internally, and count toward the one transaction * limit. - * Active sessions use additional server resources, so it is a good idea to + * Active sessions use additional server resources, so it's a good idea to * delete idle and unneeded sessions. - * Aside from explicit deletes, Cloud Spanner may delete sessions for which no + * Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, * requests to it return `NOT_FOUND`. * Idle sessions can be kept alive by sending a trivial SQL query - * periodically, e.g., `"SELECT 1"`. + * periodically, for example, `"SELECT 1"`. *
                                */ public void createSession( @@ -1171,7 +1185,7 @@ public void batchCreateSessions( * * *
                                -     * Gets a session. Returns `NOT_FOUND` if the session does not exist.
                                +     * Gets a session. Returns `NOT_FOUND` if the session doesn't exist.
                                      * This is mainly useful for determining whether a session is still
                                      * alive.
                                      * 
                                @@ -1203,9 +1217,9 @@ public void listSessions( * * *
                                -     * Ends a session, releasing server resources associated with it. This will
                                -     * asynchronously trigger cancellation of any operations that are running with
                                -     * this session.
                                +     * Ends a session, releasing server resources associated with it. This
                                +     * asynchronously triggers the cancellation of any operations that are running
                                +     * with this session.
                                      * 
                                */ public void deleteSession( @@ -1222,7 +1236,7 @@ public void deleteSession( * *
                                      * Executes an SQL statement, returning all results in a single reply. This
                                -     * method cannot be used to return a result set larger than 10 MiB;
                                +     * method can't be used to return a result set larger than 10 MiB;
                                      * if the query yields more data than that, the query fails with
                                      * a `FAILED_PRECONDITION` error.
                                      * Operations inside read-write transactions might return `ABORTED`. If
                                @@ -1232,6 +1246,8 @@ public void deleteSession(
                                      * Larger result sets can be fetched in streaming fashion by calling
                                      * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql]
                                      * instead.
                                +     * The query string can be SQL or [Graph Query Language
                                +     * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro).
                                      * 
                                */ public void executeSql( @@ -1250,6 +1266,8 @@ public void executeSql( * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there is no limit on * the size of the returned result set. However, no individual row in the * result set can exceed 100 MiB, and no column value can exceed 10 MiB. + * The query string can be SQL or [Graph Query Language + * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). *
                                */ public void executeStreamingSql( @@ -1293,7 +1311,7 @@ public void executeBatchDml( *
                                      * Reads rows from the database using key lookups and scans, as a
                                      * simple key/value style alternative to
                                -     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].  This method cannot be
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be
                                      * used to return a result set larger than 10 MiB; if the read matches more
                                      * data than that, the read fails with a `FAILED_PRECONDITION`
                                      * error.
                                @@ -1361,8 +1379,8 @@ public void beginTransaction(
                                      * `Commit` might return an `ABORTED` error. This can occur at any time;
                                      * commonly, the cause is conflicts with concurrent
                                      * transactions. However, it can also happen for a variety of other
                                -     * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
                                -     * the transaction from the beginning, re-using the same session.
                                +     * reasons. If `Commit` returns `ABORTED`, the caller should retry
                                +     * the transaction from the beginning, reusing the same session.
                                      * On very rare occasions, `Commit` might return `UNKNOWN`. This can happen,
                                      * for example, if the client job experiences a 1+ hour networking failure.
                                      * At that point, Cloud Spanner has lost track of the transaction outcome and
                                @@ -1381,13 +1399,13 @@ public void commit(
                                      *
                                      *
                                      * 
                                -     * Rolls back a transaction, releasing any locks it holds. It is a good
                                +     * Rolls back a transaction, releasing any locks it holds. It's a good
                                      * idea to call this for any transaction that includes one or more
                                      * [Read][google.spanner.v1.Spanner.Read] or
                                      * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately
                                      * decides not to commit.
                                      * `Rollback` returns `OK` if it successfully aborts the transaction, the
                                -     * transaction was already aborted, or the transaction is not
                                +     * transaction was already aborted, or the transaction isn't
                                      * found. `Rollback` never returns `ABORTED`.
                                      * 
                                */ @@ -1403,15 +1421,15 @@ public void rollback( * *
                                      * Creates a set of partition tokens that can be used to execute a query
                                -     * operation in parallel.  Each of the returned partition tokens can be used
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                      * by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to
                                -     * specify a subset of the query result to read.  The same session and
                                -     * read-only transaction must be used by the PartitionQueryRequest used to
                                -     * create the partition tokens and the ExecuteSqlRequests that use the
                                +     * specify a subset of the query result to read. The same session and
                                +     * read-only transaction must be used by the `PartitionQueryRequest` used to
                                +     * create the partition tokens and the `ExecuteSqlRequests` that use the
                                      * partition tokens.
                                      * Partition tokens become invalid when the session used to create them
                                      * is deleted, is idle for too long, begins a new transaction, or becomes too
                                -     * old.  When any of these happen, it is not possible to resume the query, and
                                +     * old. When any of these happen, it isn't possible to resume the query, and
                                      * the whole operation must be restarted from the beginning.
                                      * 
                                */ @@ -1429,17 +1447,17 @@ public void partitionQuery( * *
                                      * Creates a set of partition tokens that can be used to execute a read
                                -     * operation in parallel.  Each of the returned partition tokens can be used
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                      * by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a
                                -     * subset of the read result to read.  The same session and read-only
                                -     * transaction must be used by the PartitionReadRequest used to create the
                                -     * partition tokens and the ReadRequests that use the partition tokens.  There
                                -     * are no ordering guarantees on rows returned among the returned partition
                                -     * tokens, or even within each individual StreamingRead call issued with a
                                -     * partition_token.
                                +     * subset of the read result to read. The same session and read-only
                                +     * transaction must be used by the `PartitionReadRequest` used to create the
                                +     * partition tokens and the `ReadRequests` that use the partition tokens.
                                +     * There are no ordering guarantees on rows returned among the returned
                                +     * partition tokens, or even within each individual `StreamingRead` call
                                +     * issued with a `partition_token`.
                                      * Partition tokens become invalid when the session used to create them
                                      * is deleted, is idle for too long, begins a new transaction, or becomes too
                                -     * old.  When any of these happen, it is not possible to resume the read, and
                                +     * old. When any of these happen, it isn't possible to resume the read, and
                                      * the whole operation must be restarted from the beginning.
                                      * 
                                */ @@ -1460,14 +1478,14 @@ public void partitionRead( * transactions. All mutations in a group are committed atomically. However, * mutations across groups can be committed non-atomically in an unspecified * order and thus, they must be independent of each other. Partial failure is - * possible, i.e., some groups may have been committed successfully, while - * some may have failed. The results of individual batches are streamed into - * the response as the batches are applied. - * BatchWrite requests are not replay protected, meaning that each mutation - * group may be applied more than once. Replays of non-idempotent mutations - * may have undesirable effects. For example, replays of an insert mutation - * may produce an already exists error or if you use generated or commit - * timestamp-based keys, it may result in additional rows being added to the + * possible, that is, some groups might have been committed successfully, + * while some might have failed. The results of individual batches are + * streamed into the response as the batches are applied. + * `BatchWrite` requests are not replay protected, meaning that each mutation + * group can be applied more than once. Replays of non-idempotent mutations + * can have undesirable effects. For example, replays of an insert mutation + * can produce an already exists error or if you use generated or commit + * timestamp-based keys, it can result in additional rows being added to the * mutation's table. We recommend structuring your mutation groups to be * idempotent to avoid this issue. *
                                @@ -1489,6 +1507,359 @@ public void batchWrite( * transactions on data stored in Cloud Spanner databases. *
                                */ + public static final class SpannerBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private SpannerBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SpannerBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
                                +     * Creates a new session. A session can be used to perform
                                +     * transactions that read and/or modify data in a Cloud Spanner database.
                                +     * Sessions are meant to be reused for many consecutive
                                +     * transactions.
                                +     * Sessions can only execute one transaction at a time. To execute
                                +     * multiple concurrent read-write/write-only transactions, create
                                +     * multiple sessions. Note that standalone reads and queries use a
                                +     * transaction internally, and count toward the one transaction
                                +     * limit.
                                +     * Active sessions use additional server resources, so it's a good idea to
                                +     * delete idle and unneeded sessions.
                                +     * Aside from explicit deletes, Cloud Spanner can delete sessions when no
                                +     * operations are sent for more than an hour. If a session is deleted,
                                +     * requests to it return `NOT_FOUND`.
                                +     * Idle sessions can be kept alive by sending a trivial SQL query
                                +     * periodically, for example, `"SELECT 1"`.
                                +     * 
                                + */ + public com.google.spanner.v1.Session createSession( + com.google.spanner.v1.CreateSessionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateSessionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Creates multiple new sessions.
                                +     * This API can be used to initialize a session cache on the clients.
                                +     * See https://goo.gl/TgSFN2 for best practices on session cache management.
                                +     * 
                                + */ + public com.google.spanner.v1.BatchCreateSessionsResponse batchCreateSessions( + com.google.spanner.v1.BatchCreateSessionsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getBatchCreateSessionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Gets a session. Returns `NOT_FOUND` if the session doesn't exist.
                                +     * This is mainly useful for determining whether a session is still
                                +     * alive.
                                +     * 
                                + */ + public com.google.spanner.v1.Session getSession(com.google.spanner.v1.GetSessionRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetSessionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Lists all sessions in a given database.
                                +     * 
                                + */ + public com.google.spanner.v1.ListSessionsResponse listSessions( + com.google.spanner.v1.ListSessionsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListSessionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Ends a session, releasing server resources associated with it. This
                                +     * asynchronously triggers the cancellation of any operations that are running
                                +     * with this session.
                                +     * 
                                + */ + public com.google.protobuf.Empty deleteSession( + com.google.spanner.v1.DeleteSessionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteSessionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Executes an SQL statement, returning all results in a single reply. This
                                +     * method can't be used to return a result set larger than 10 MiB;
                                +     * if the query yields more data than that, the query fails with
                                +     * a `FAILED_PRECONDITION` error.
                                +     * Operations inside read-write transactions might return `ABORTED`. If
                                +     * this occurs, the application should restart the transaction from
                                +     * the beginning. See [Transaction][google.spanner.v1.Transaction] for more
                                +     * details.
                                +     * Larger result sets can be fetched in streaming fashion by calling
                                +     * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql]
                                +     * instead.
                                +     * The query string can be SQL or [Graph Query Language
                                +     * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro).
                                +     * 
                                + */ + public com.google.spanner.v1.ResultSet executeSql( + com.google.spanner.v1.ExecuteSqlRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getExecuteSqlMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the
                                +     * result set as a stream. Unlike
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there is no limit on
                                +     * the size of the returned result set. However, no individual row in the
                                +     * result set can exceed 100 MiB, and no column value can exceed 10 MiB.
                                +     * The query string can be SQL or [Graph Query Language
                                +     * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro).
                                +     * 
                                + */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall + executeStreamingSql(com.google.spanner.v1.ExecuteSqlRequest request) { + return io.grpc.stub.ClientCalls.blockingV2ServerStreamingCall( + getChannel(), getExecuteStreamingSqlMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Executes a batch of SQL DML statements. This method allows many statements
                                +     * to be run with lower latency than submitting them sequentially with
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].
                                +     * Statements are executed in sequential order. A request can succeed even if
                                +     * a statement fails. The
                                +     * [ExecuteBatchDmlResponse.status][google.spanner.v1.ExecuteBatchDmlResponse.status]
                                +     * field in the response provides information about the statement that failed.
                                +     * Clients must inspect this field to determine whether an error occurred.
                                +     * Execution stops after the first failed statement; the remaining statements
                                +     * are not executed.
                                +     * 
                                + */ + public com.google.spanner.v1.ExecuteBatchDmlResponse executeBatchDml( + com.google.spanner.v1.ExecuteBatchDmlRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getExecuteBatchDmlMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Reads rows from the database using key lookups and scans, as a
                                +     * simple key/value style alternative to
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be
                                +     * used to return a result set larger than 10 MiB; if the read matches more
                                +     * data than that, the read fails with a `FAILED_PRECONDITION`
                                +     * error.
                                +     * Reads inside read-write transactions might return `ABORTED`. If
                                +     * this occurs, the application should restart the transaction from
                                +     * the beginning. See [Transaction][google.spanner.v1.Transaction] for more
                                +     * details.
                                +     * Larger result sets can be yielded in streaming fashion by calling
                                +     * [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead.
                                +     * 
                                + */ + public com.google.spanner.v1.ResultSet read(com.google.spanner.v1.ReadRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getReadMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Like [Read][google.spanner.v1.Spanner.Read], except returns the result set
                                +     * as a stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no
                                +     * limit on the size of the returned result set. However, no individual row in
                                +     * the result set can exceed 100 MiB, and no column value can exceed
                                +     * 10 MiB.
                                +     * 
                                + */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall streamingRead( + com.google.spanner.v1.ReadRequest request) { + return io.grpc.stub.ClientCalls.blockingV2ServerStreamingCall( + getChannel(), getStreamingReadMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Begins a new transaction. This step can often be skipped:
                                +     * [Read][google.spanner.v1.Spanner.Read],
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
                                +     * [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
                                +     * side-effect.
                                +     * 
                                + */ + public com.google.spanner.v1.Transaction beginTransaction( + com.google.spanner.v1.BeginTransactionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getBeginTransactionMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Commits a transaction. The request includes the mutations to be
                                +     * applied to rows in the database.
                                +     * `Commit` might return an `ABORTED` error. This can occur at any time;
                                +     * commonly, the cause is conflicts with concurrent
                                +     * transactions. However, it can also happen for a variety of other
                                +     * reasons. If `Commit` returns `ABORTED`, the caller should retry
                                +     * the transaction from the beginning, reusing the same session.
                                +     * On very rare occasions, `Commit` might return `UNKNOWN`. This can happen,
                                +     * for example, if the client job experiences a 1+ hour networking failure.
                                +     * At that point, Cloud Spanner has lost track of the transaction outcome and
                                +     * we recommend that you perform another read from the database to see the
                                +     * state of things as they are now.
                                +     * 
                                + */ + public com.google.spanner.v1.CommitResponse commit(com.google.spanner.v1.CommitRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCommitMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Rolls back a transaction, releasing any locks it holds. It's a good
                                +     * idea to call this for any transaction that includes one or more
                                +     * [Read][google.spanner.v1.Spanner.Read] or
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately
                                +     * decides not to commit.
                                +     * `Rollback` returns `OK` if it successfully aborts the transaction, the
                                +     * transaction was already aborted, or the transaction isn't
                                +     * found. `Rollback` never returns `ABORTED`.
                                +     * 
                                + */ + public com.google.protobuf.Empty rollback(com.google.spanner.v1.RollbackRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getRollbackMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Creates a set of partition tokens that can be used to execute a query
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                +     * by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to
                                +     * specify a subset of the query result to read. The same session and
                                +     * read-only transaction must be used by the `PartitionQueryRequest` used to
                                +     * create the partition tokens and the `ExecuteSqlRequests` that use the
                                +     * partition tokens.
                                +     * Partition tokens become invalid when the session used to create them
                                +     * is deleted, is idle for too long, begins a new transaction, or becomes too
                                +     * old. When any of these happen, it isn't possible to resume the query, and
                                +     * the whole operation must be restarted from the beginning.
                                +     * 
                                + */ + public com.google.spanner.v1.PartitionResponse partitionQuery( + com.google.spanner.v1.PartitionQueryRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getPartitionQueryMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Creates a set of partition tokens that can be used to execute a read
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                +     * by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a
                                +     * subset of the read result to read. The same session and read-only
                                +     * transaction must be used by the `PartitionReadRequest` used to create the
                                +     * partition tokens and the `ReadRequests` that use the partition tokens.
                                +     * There are no ordering guarantees on rows returned among the returned
                                +     * partition tokens, or even within each individual `StreamingRead` call
                                +     * issued with a `partition_token`.
                                +     * Partition tokens become invalid when the session used to create them
                                +     * is deleted, is idle for too long, begins a new transaction, or becomes too
                                +     * old. When any of these happen, it isn't possible to resume the read, and
                                +     * the whole operation must be restarted from the beginning.
                                +     * 
                                + */ + public com.google.spanner.v1.PartitionResponse partitionRead( + com.google.spanner.v1.PartitionReadRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getPartitionReadMethod(), getCallOptions(), request); + } + + /** + * + * + *
                                +     * Batches the supplied mutation groups in a collection of efficient
                                +     * transactions. All mutations in a group are committed atomically. However,
                                +     * mutations across groups can be committed non-atomically in an unspecified
                                +     * order and thus, they must be independent of each other. Partial failure is
                                +     * possible, that is, some groups might have been committed successfully,
                                +     * while some might have failed. The results of individual batches are
                                +     * streamed into the response as the batches are applied.
                                +     * `BatchWrite` requests are not replay protected, meaning that each mutation
                                +     * group can be applied more than once. Replays of non-idempotent mutations
                                +     * can have undesirable effects. For example, replays of an insert mutation
                                +     * can produce an already exists error or if you use generated or commit
                                +     * timestamp-based keys, it can result in additional rows being added to the
                                +     * mutation's table. We recommend structuring your mutation groups to be
                                +     * idempotent to avoid this issue.
                                +     * 
                                + */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall batchWrite( + com.google.spanner.v1.BatchWriteRequest request) { + return io.grpc.stub.ClientCalls.blockingV2ServerStreamingCall( + getChannel(), getBatchWriteMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service Spanner. + * + *
                                +   * Cloud Spanner API
                                +   * The Cloud Spanner API can be used to manage sessions and execute
                                +   * transactions on data stored in Cloud Spanner databases.
                                +   * 
                                + */ public static final class SpannerBlockingStub extends io.grpc.stub.AbstractBlockingStub { private SpannerBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { @@ -1513,13 +1884,13 @@ protected SpannerBlockingStub build(io.grpc.Channel channel, io.grpc.CallOptions * multiple sessions. Note that standalone reads and queries use a * transaction internally, and count toward the one transaction * limit. - * Active sessions use additional server resources, so it is a good idea to + * Active sessions use additional server resources, so it's a good idea to * delete idle and unneeded sessions. - * Aside from explicit deletes, Cloud Spanner may delete sessions for which no + * Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, * requests to it return `NOT_FOUND`. * Idle sessions can be kept alive by sending a trivial SQL query - * periodically, e.g., `"SELECT 1"`. + * periodically, for example, `"SELECT 1"`. *
                                */ public com.google.spanner.v1.Session createSession( @@ -1547,7 +1918,7 @@ public com.google.spanner.v1.BatchCreateSessionsResponse batchCreateSessions( * * *
                                -     * Gets a session. Returns `NOT_FOUND` if the session does not exist.
                                +     * Gets a session. Returns `NOT_FOUND` if the session doesn't exist.
                                      * This is mainly useful for determining whether a session is still
                                      * alive.
                                      * 
                                @@ -1575,9 +1946,9 @@ public com.google.spanner.v1.ListSessionsResponse listSessions( * * *
                                -     * Ends a session, releasing server resources associated with it. This will
                                -     * asynchronously trigger cancellation of any operations that are running with
                                -     * this session.
                                +     * Ends a session, releasing server resources associated with it. This
                                +     * asynchronously triggers the cancellation of any operations that are running
                                +     * with this session.
                                      * 
                                */ public com.google.protobuf.Empty deleteSession( @@ -1591,7 +1962,7 @@ public com.google.protobuf.Empty deleteSession( * *
                                      * Executes an SQL statement, returning all results in a single reply. This
                                -     * method cannot be used to return a result set larger than 10 MiB;
                                +     * method can't be used to return a result set larger than 10 MiB;
                                      * if the query yields more data than that, the query fails with
                                      * a `FAILED_PRECONDITION` error.
                                      * Operations inside read-write transactions might return `ABORTED`. If
                                @@ -1601,6 +1972,8 @@ public com.google.protobuf.Empty deleteSession(
                                      * Larger result sets can be fetched in streaming fashion by calling
                                      * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql]
                                      * instead.
                                +     * The query string can be SQL or [Graph Query Language
                                +     * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro).
                                      * 
                                */ public com.google.spanner.v1.ResultSet executeSql( @@ -1618,6 +1991,8 @@ public com.google.spanner.v1.ResultSet executeSql( * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there is no limit on * the size of the returned result set. However, no individual row in the * result set can exceed 100 MiB, and no column value can exceed 10 MiB. + * The query string can be SQL or [Graph Query Language + * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). *
                                */ public java.util.Iterator executeStreamingSql( @@ -1654,7 +2029,7 @@ public com.google.spanner.v1.ExecuteBatchDmlResponse executeBatchDml( *
                                      * Reads rows from the database using key lookups and scans, as a
                                      * simple key/value style alternative to
                                -     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].  This method cannot be
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be
                                      * used to return a result set larger than 10 MiB; if the read matches more
                                      * data than that, the read fails with a `FAILED_PRECONDITION`
                                      * error.
                                @@ -1714,8 +2089,8 @@ public com.google.spanner.v1.Transaction beginTransaction(
                                      * `Commit` might return an `ABORTED` error. This can occur at any time;
                                      * commonly, the cause is conflicts with concurrent
                                      * transactions. However, it can also happen for a variety of other
                                -     * reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
                                -     * the transaction from the beginning, re-using the same session.
                                +     * reasons. If `Commit` returns `ABORTED`, the caller should retry
                                +     * the transaction from the beginning, reusing the same session.
                                      * On very rare occasions, `Commit` might return `UNKNOWN`. This can happen,
                                      * for example, if the client job experiences a 1+ hour networking failure.
                                      * At that point, Cloud Spanner has lost track of the transaction outcome and
                                @@ -1733,13 +2108,13 @@ public com.google.spanner.v1.CommitResponse commit(
                                      *
                                      *
                                      * 
                                -     * Rolls back a transaction, releasing any locks it holds. It is a good
                                +     * Rolls back a transaction, releasing any locks it holds. It's a good
                                      * idea to call this for any transaction that includes one or more
                                      * [Read][google.spanner.v1.Spanner.Read] or
                                      * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately
                                      * decides not to commit.
                                      * `Rollback` returns `OK` if it successfully aborts the transaction, the
                                -     * transaction was already aborted, or the transaction is not
                                +     * transaction was already aborted, or the transaction isn't
                                      * found. `Rollback` never returns `ABORTED`.
                                      * 
                                */ @@ -1753,15 +2128,15 @@ public com.google.protobuf.Empty rollback(com.google.spanner.v1.RollbackRequest * *
                                      * Creates a set of partition tokens that can be used to execute a query
                                -     * operation in parallel.  Each of the returned partition tokens can be used
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                      * by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to
                                -     * specify a subset of the query result to read.  The same session and
                                -     * read-only transaction must be used by the PartitionQueryRequest used to
                                -     * create the partition tokens and the ExecuteSqlRequests that use the
                                +     * specify a subset of the query result to read. The same session and
                                +     * read-only transaction must be used by the `PartitionQueryRequest` used to
                                +     * create the partition tokens and the `ExecuteSqlRequests` that use the
                                      * partition tokens.
                                      * Partition tokens become invalid when the session used to create them
                                      * is deleted, is idle for too long, begins a new transaction, or becomes too
                                -     * old.  When any of these happen, it is not possible to resume the query, and
                                +     * old. When any of these happen, it isn't possible to resume the query, and
                                      * the whole operation must be restarted from the beginning.
                                      * 
                                */ @@ -1776,17 +2151,17 @@ public com.google.spanner.v1.PartitionResponse partitionQuery( * *
                                      * Creates a set of partition tokens that can be used to execute a read
                                -     * operation in parallel.  Each of the returned partition tokens can be used
                                +     * operation in parallel. Each of the returned partition tokens can be used
                                      * by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a
                                -     * subset of the read result to read.  The same session and read-only
                                -     * transaction must be used by the PartitionReadRequest used to create the
                                -     * partition tokens and the ReadRequests that use the partition tokens.  There
                                -     * are no ordering guarantees on rows returned among the returned partition
                                -     * tokens, or even within each individual StreamingRead call issued with a
                                -     * partition_token.
                                +     * subset of the read result to read. The same session and read-only
                                +     * transaction must be used by the `PartitionReadRequest` used to create the
                                +     * partition tokens and the `ReadRequests` that use the partition tokens.
                                +     * There are no ordering guarantees on rows returned among the returned
                                +     * partition tokens, or even within each individual `StreamingRead` call
                                +     * issued with a `partition_token`.
                                      * Partition tokens become invalid when the session used to create them
                                      * is deleted, is idle for too long, begins a new transaction, or becomes too
                                -     * old.  When any of these happen, it is not possible to resume the read, and
                                +     * old. When any of these happen, it isn't possible to resume the read, and
                                      * the whole operation must be restarted from the beginning.
                                      * 
                                */ @@ -1804,14 +2179,14 @@ public com.google.spanner.v1.PartitionResponse partitionRead( * transactions. All mutations in a group are committed atomically. However, * mutations across groups can be committed non-atomically in an unspecified * order and thus, they must be independent of each other. Partial failure is - * possible, i.e., some groups may have been committed successfully, while - * some may have failed. The results of individual batches are streamed into - * the response as the batches are applied. - * BatchWrite requests are not replay protected, meaning that each mutation - * group may be applied more than once. Replays of non-idempotent mutations - * may have undesirable effects. For example, replays of an insert mutation - * may produce an already exists error or if you use generated or commit - * timestamp-based keys, it may result in additional rows being added to the + * possible, that is, some groups might have been committed successfully, + * while some might have failed. The results of individual batches are + * streamed into the response as the batches are applied. + * `BatchWrite` requests are not replay protected, meaning that each mutation + * group can be applied more than once. Replays of non-idempotent mutations + * can have undesirable effects. For example, replays of an insert mutation + * can produce an already exists error or if you use generated or commit + * timestamp-based keys, it can result in additional rows being added to the * mutation's table. We recommend structuring your mutation groups to be * idempotent to avoid this issue. *
                                @@ -1856,13 +2231,13 @@ protected SpannerFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions c * multiple sessions. Note that standalone reads and queries use a * transaction internally, and count toward the one transaction * limit. - * Active sessions use additional server resources, so it is a good idea to + * Active sessions use additional server resources, so it's a good idea to * delete idle and unneeded sessions. - * Aside from explicit deletes, Cloud Spanner may delete sessions for which no + * Aside from explicit deletes, Cloud Spanner can delete sessions when no * operations are sent for more than an hour. If a session is deleted, * requests to it return `NOT_FOUND`. * Idle sessions can be kept alive by sending a trivial SQL query - * periodically, e.g., `"SELECT 1"`. + * periodically, for example, `"SELECT 1"`. *
                                */ public com.google.common.util.concurrent.ListenableFuture @@ -1891,7 +2266,7 @@ protected SpannerFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions c * * *
                                -     * Gets a session. Returns `NOT_FOUND` if the session does not exist.
                                +     * Gets a session. Returns `NOT_FOUND` if the session doesn't exist.
                                      * This is mainly useful for determining whether a session is still
                                      * alive.
                                      * 
                                @@ -1920,9 +2295,9 @@ protected SpannerFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions c * * *
                                -     * Ends a session, releasing server resources associated with it. This will
                                -     * asynchronously trigger cancellation of any operations that are running with
                                -     * this session.
                                +     * Ends a session, releasing server resources associated with it. This
                                +     * asynchronously triggers the cancellation of any operations that are running
                                +     * with this session.
                                      * 
                                */ public com.google.common.util.concurrent.ListenableFuture @@ -1936,7 +2311,7 @@ protected SpannerFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions c * *
                                      * Executes an SQL statement, returning all results in a single reply. This
                                -     * method cannot be used to return a result set larger than 10 MiB;
                                +     * method can't be used to return a result set larger than 10 MiB;
                                      * if the query yields more data than that, the query fails with
                                      * a `FAILED_PRECONDITION` error.
                                      * Operations inside read-write transactions might return `ABORTED`. If
                                @@ -1946,6 +2321,8 @@ protected SpannerFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions c
                                      * Larger result sets can be fetched in streaming fashion by calling
                                      * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql]
                                      * instead.
                                +     * The query string can be SQL or [Graph Query Language
                                +     * (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro).
                                      * 
                                */ public com.google.common.util.concurrent.ListenableFuture @@ -1983,7 +2360,7 @@ protected SpannerFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions c *
                                      * Reads rows from the database using key lookups and scans, as a
                                      * simple key/value style alternative to
                                -     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].  This method cannot be
                                +     * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be
                                      * used to return a result set larger than 10 MiB; if the read matches more
                                      * data than that, the read fails with a `FAILED_PRECONDITION`
                                      * error.
                                @@ -2027,8 +2404,8 @@ public com.google.common.util.concurrent.ListenableFuture
                                -     * Rolls back a transaction, releasing any locks it holds. It is a good
                                +     * Rolls back a transaction, releasing any locks it holds. It's a good
                                      * idea to call this for any transaction that includes one or more
                                      * [Read][google.spanner.v1.Spanner.Read] or
                                      * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately
                                      * decides not to commit.
                                      * `Rollback` returns `OK` if it successfully aborts the transaction, the
                                -     * transaction was already aborted, or the transaction is not
                                +     * transaction was already aborted, or the transaction isn't
                                      * found. `Rollback` never returns `ABORTED`.
                                      * 
                                */ @@ -2067,15 +2444,15 @@ public com.google.common.util.concurrent.ListenableFuture * Creates a set of partition tokens that can be used to execute a query - * operation in parallel. Each of the returned partition tokens can be used + * operation in parallel. Each of the returned partition tokens can be used * by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to - * specify a subset of the query result to read. The same session and - * read-only transaction must be used by the PartitionQueryRequest used to - * create the partition tokens and the ExecuteSqlRequests that use the + * specify a subset of the query result to read. The same session and + * read-only transaction must be used by the `PartitionQueryRequest` used to + * create the partition tokens and the `ExecuteSqlRequests` that use the * partition tokens. * Partition tokens become invalid when the session used to create them * is deleted, is idle for too long, begins a new transaction, or becomes too - * old. When any of these happen, it is not possible to resume the query, and + * old. When any of these happen, it isn't possible to resume the query, and * the whole operation must be restarted from the beginning. *
                                */ @@ -2091,17 +2468,17 @@ public com.google.common.util.concurrent.ListenableFuture * Creates a set of partition tokens that can be used to execute a read - * operation in parallel. Each of the returned partition tokens can be used + * operation in parallel. Each of the returned partition tokens can be used * by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a - * subset of the read result to read. The same session and read-only - * transaction must be used by the PartitionReadRequest used to create the - * partition tokens and the ReadRequests that use the partition tokens. There - * are no ordering guarantees on rows returned among the returned partition - * tokens, or even within each individual StreamingRead call issued with a - * partition_token. + * subset of the read result to read. The same session and read-only + * transaction must be used by the `PartitionReadRequest` used to create the + * partition tokens and the `ReadRequests` that use the partition tokens. + * There are no ordering guarantees on rows returned among the returned + * partition tokens, or even within each individual `StreamingRead` call + * issued with a `partition_token`. * Partition tokens become invalid when the session used to create them * is deleted, is idle for too long, begins a new transaction, or becomes too - * old. When any of these happen, it is not possible to resume the read, and + * old. When any of these happen, it isn't possible to resume the read, and * the whole operation must be restarted from the beginning. *
                                */ diff --git a/owlbot.py b/owlbot.py index bc9b537f818..6c654ed80a0 100644 --- a/owlbot.py +++ b/owlbot.py @@ -31,12 +31,8 @@ ".kokoro/nightly/samples.cfg", ".kokoro/build.bat", ".kokoro/presubmit/common.cfg", - ".kokoro/presubmit/java8-samples.cfg", - ".kokoro/presubmit/java11-samples.cfg", - ".kokoro/presubmit/samples.cfg", ".kokoro/presubmit/graalvm-native.cfg", ".kokoro/presubmit/graalvm-native-17.cfg", - ".kokoro/release/common.cfg", "samples/install-without-bom/pom.xml", "samples/snapshot/pom.xml", "samples/snippets/pom.xml", @@ -50,6 +46,7 @@ ".kokoro/build.sh", ".kokoro/dependencies.sh", ".kokoro/requirements.in", - ".kokoro/requirements.txt" + ".kokoro/requirements.txt", + "README.md" ] ) diff --git a/pom.xml b/pom.xml index 72a2a6797e3..b517ae83223 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-spanner-parent pom - 6.82.0 + 6.113.1-SNAPSHOT Google Cloud Spanner Parent https://github.com/googleapis/java-spanner @@ -14,7 +14,7 @@ com.google.cloud sdk-platform-java-config - 3.40.0 + 3.58.0 @@ -61,49 +61,48 @@ com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-executor-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-executor-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.82.0 + 6.113.1-SNAPSHOT com.google.cloud google-cloud-spanner - 6.82.0 + 6.113.1-SNAPSHOT - com.google.cloud google-cloud-shared-dependencies @@ -121,7 +120,7 @@ com.google.truth truth - 1.4.4 + 1.4.5 test @@ -153,7 +152,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.15.0 1.8 1.8 @@ -171,7 +170,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.8.0 + 3.9.0 diff --git a/proto-google-cloud-spanner-admin-database-v1/clirr-ignored-differences.xml b/proto-google-cloud-spanner-admin-database-v1/clirr-ignored-differences.xml index 3799fb341ac..fb64ee18470 100644 --- a/proto-google-cloud-spanner-admin-database-v1/clirr-ignored-differences.xml +++ b/proto-google-cloud-spanner-admin-database-v1/clirr-ignored-differences.xml @@ -17,7 +17,63 @@ boolean has*(*) - + + + + 5001 + com/google/spanner/admin/database/v1/* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/admin/database/v1/*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/admin/database/v1/*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/admin/database/v1/*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/admin/database/v1/*$*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/admin/database/v1/*$*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/admin/database/v1/*Proto + com/google/protobuf/GeneratedFile + + + + 7005 + com/google/spanner/admin/database/v1/** + * newBuilderForType(*) + ** + + + + 7006 + com/google/spanner/admin/database/v1/** + * internalGetFieldAccessorTable() + ** + + + + 7014 + com/google/spanner/admin/database/v1/** + * getDescriptor() + 7006 com/google/spanner/admin/database/v1/** diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml index 4d29a245a80..97f2f8b2da9 100644 --- a/proto-google-cloud-spanner-admin-database-v1/pom.xml +++ b/proto-google-cloud-spanner-admin-database-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.82.0 + 6.113.1-SNAPSHOT proto-google-cloud-spanner-admin-database-v1 PROTO library for proto-google-cloud-spanner-admin-database-v1 com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsRequest.java new file mode 100644 index 00000000000..93020429848 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsRequest.java @@ -0,0 +1,1414 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
                                + * The request for
                                + * [AddSplitPoints][google.spanner.admin.database.v1.DatabaseAdmin.AddSplitPoints].
                                + * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.AddSplitPointsRequest} + */ +@com.google.protobuf.Generated +public final class AddSplitPointsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.AddSplitPointsRequest) + AddSplitPointsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AddSplitPointsRequest"); + } + + // Use AddSplitPointsRequest.newBuilder() to construct. + private AddSplitPointsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AddSplitPointsRequest() { + database_ = ""; + splitPoints_ = java.util.Collections.emptyList(); + initiator_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.AddSplitPointsRequest.class, + com.google.spanner.admin.database.v1.AddSplitPointsRequest.Builder.class); + } + + public static final int DATABASE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object database_ = ""; + + /** + * + * + *
                                +   * Required. The database on whose tables/indexes split points are to be
                                +   * added. Values are of the form
                                +   * `projects/<project>/instances/<instance>/databases/<database>`.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The database. + */ + @java.lang.Override + public java.lang.String getDatabase() { + java.lang.Object ref = database_; + 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(); + database_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Required. The database on whose tables/indexes split points are to be
                                +   * added. Values are of the form
                                +   * `projects/<project>/instances/<instance>/databases/<database>`.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for database. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDatabaseBytes() { + java.lang.Object ref = database_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + database_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SPLIT_POINTS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private java.util.List splitPoints_; + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List getSplitPointsList() { + return splitPoints_; + } + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List + getSplitPointsOrBuilderList() { + return splitPoints_; + } + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public int getSplitPointsCount() { + return splitPoints_.size(); + } + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints getSplitPoints(int index) { + return splitPoints_.get(index); + } + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPointsOrBuilder getSplitPointsOrBuilder( + int index) { + return splitPoints_.get(index); + } + + public static final int INITIATOR_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object initiator_ = ""; + + /** + * + * + *
                                +   * Optional. A user-supplied tag associated with the split points.
                                +   * For example, "intital_data_load", "special_event_1".
                                +   * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +   * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +   * Only valid UTF8 characters are allowed.
                                +   * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The initiator. + */ + @java.lang.Override + public java.lang.String getInitiator() { + java.lang.Object ref = initiator_; + 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(); + initiator_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Optional. A user-supplied tag associated with the split points.
                                +   * For example, "intital_data_load", "special_event_1".
                                +   * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +   * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +   * Only valid UTF8 characters are allowed.
                                +   * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for initiator. + */ + @java.lang.Override + public com.google.protobuf.ByteString getInitiatorBytes() { + java.lang.Object ref = initiator_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + initiator_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); + } + for (int i = 0; i < splitPoints_.size(); i++) { + output.writeMessage(2, splitPoints_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(initiator_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, initiator_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); + } + for (int i = 0; i < splitPoints_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, splitPoints_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(initiator_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, initiator_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.AddSplitPointsRequest)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.AddSplitPointsRequest other = + (com.google.spanner.admin.database.v1.AddSplitPointsRequest) obj; + + if (!getDatabase().equals(other.getDatabase())) return false; + if (!getSplitPointsList().equals(other.getSplitPointsList())) return false; + if (!getInitiator().equals(other.getInitiator())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DATABASE_FIELD_NUMBER; + hash = (53 * hash) + getDatabase().hashCode(); + if (getSplitPointsCount() > 0) { + hash = (37 * hash) + SPLIT_POINTS_FIELD_NUMBER; + hash = (53 * hash) + getSplitPointsList().hashCode(); + } + hash = (37 * hash) + INITIATOR_FIELD_NUMBER; + hash = (53 * hash) + getInitiator().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.AddSplitPointsRequest 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * The request for
                                +   * [AddSplitPoints][google.spanner.admin.database.v1.DatabaseAdmin.AddSplitPoints].
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.AddSplitPointsRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.AddSplitPointsRequest) + com.google.spanner.admin.database.v1.AddSplitPointsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.AddSplitPointsRequest.class, + com.google.spanner.admin.database.v1.AddSplitPointsRequest.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.AddSplitPointsRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + database_ = ""; + if (splitPointsBuilder_ == null) { + splitPoints_ = java.util.Collections.emptyList(); + } else { + splitPoints_ = null; + splitPointsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + initiator_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsRequest getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.AddSplitPointsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsRequest build() { + com.google.spanner.admin.database.v1.AddSplitPointsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsRequest buildPartial() { + com.google.spanner.admin.database.v1.AddSplitPointsRequest result = + new com.google.spanner.admin.database.v1.AddSplitPointsRequest(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + com.google.spanner.admin.database.v1.AddSplitPointsRequest result) { + if (splitPointsBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + splitPoints_ = java.util.Collections.unmodifiableList(splitPoints_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.splitPoints_ = splitPoints_; + } else { + result.splitPoints_ = splitPointsBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.admin.database.v1.AddSplitPointsRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.database_ = database_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.initiator_ = initiator_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.AddSplitPointsRequest) { + return mergeFrom((com.google.spanner.admin.database.v1.AddSplitPointsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.AddSplitPointsRequest other) { + if (other == com.google.spanner.admin.database.v1.AddSplitPointsRequest.getDefaultInstance()) + return this; + if (!other.getDatabase().isEmpty()) { + database_ = other.database_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (splitPointsBuilder_ == null) { + if (!other.splitPoints_.isEmpty()) { + if (splitPoints_.isEmpty()) { + splitPoints_ = other.splitPoints_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureSplitPointsIsMutable(); + splitPoints_.addAll(other.splitPoints_); + } + onChanged(); + } + } else { + if (!other.splitPoints_.isEmpty()) { + if (splitPointsBuilder_.isEmpty()) { + splitPointsBuilder_.dispose(); + splitPointsBuilder_ = null; + splitPoints_ = other.splitPoints_; + bitField0_ = (bitField0_ & ~0x00000002); + splitPointsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSplitPointsFieldBuilder() + : null; + } else { + splitPointsBuilder_.addAllMessages(other.splitPoints_); + } + } + } + if (!other.getInitiator().isEmpty()) { + initiator_ = other.initiator_; + bitField0_ |= 0x00000004; + 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: + { + database_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + com.google.spanner.admin.database.v1.SplitPoints m = + input.readMessage( + com.google.spanner.admin.database.v1.SplitPoints.parser(), + extensionRegistry); + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.add(m); + } else { + splitPointsBuilder_.addMessage(m); + } + break; + } // case 18 + case 26: + { + initiator_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object database_ = ""; + + /** + * + * + *
                                +     * Required. The database on whose tables/indexes split points are to be
                                +     * added. Values are of the form
                                +     * `projects/<project>/instances/<instance>/databases/<database>`.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The database. + */ + public java.lang.String getDatabase() { + java.lang.Object ref = database_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + database_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Required. The database on whose tables/indexes split points are to be
                                +     * added. Values are of the form
                                +     * `projects/<project>/instances/<instance>/databases/<database>`.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for database. + */ + public com.google.protobuf.ByteString getDatabaseBytes() { + java.lang.Object ref = database_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + database_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Required. The database on whose tables/indexes split points are to be
                                +     * added. Values are of the form
                                +     * `projects/<project>/instances/<instance>/databases/<database>`.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The database to set. + * @return This builder for chaining. + */ + public Builder setDatabase(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + database_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Required. The database on whose tables/indexes split points are to be
                                +     * added. Values are of the form
                                +     * `projects/<project>/instances/<instance>/databases/<database>`.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearDatabase() { + database_ = getDefaultInstance().getDatabase(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Required. The database on whose tables/indexes split points are to be
                                +     * added. Values are of the form
                                +     * `projects/<project>/instances/<instance>/databases/<database>`.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for database to set. + * @return This builder for chaining. + */ + public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + database_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.util.List splitPoints_ = + java.util.Collections.emptyList(); + + private void ensureSplitPointsIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + splitPoints_ = + new java.util.ArrayList(splitPoints_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints, + com.google.spanner.admin.database.v1.SplitPoints.Builder, + com.google.spanner.admin.database.v1.SplitPointsOrBuilder> + splitPointsBuilder_; + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getSplitPointsList() { + if (splitPointsBuilder_ == null) { + return java.util.Collections.unmodifiableList(splitPoints_); + } else { + return splitPointsBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public int getSplitPointsCount() { + if (splitPointsBuilder_ == null) { + return splitPoints_.size(); + } else { + return splitPointsBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints getSplitPoints(int index) { + if (splitPointsBuilder_ == null) { + return splitPoints_.get(index); + } else { + return splitPointsBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints value) { + if (splitPointsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSplitPointsIsMutable(); + splitPoints_.set(index, value); + onChanged(); + } else { + splitPointsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints.Builder builderForValue) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.set(index, builderForValue.build()); + onChanged(); + } else { + splitPointsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addSplitPoints(com.google.spanner.admin.database.v1.SplitPoints value) { + if (splitPointsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSplitPointsIsMutable(); + splitPoints_.add(value); + onChanged(); + } else { + splitPointsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints value) { + if (splitPointsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSplitPointsIsMutable(); + splitPoints_.add(index, value); + onChanged(); + } else { + splitPointsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addSplitPoints( + com.google.spanner.admin.database.v1.SplitPoints.Builder builderForValue) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.add(builderForValue.build()); + onChanged(); + } else { + splitPointsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints.Builder builderForValue) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.add(index, builderForValue.build()); + onChanged(); + } else { + splitPointsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addAllSplitPoints( + java.lang.Iterable values) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, splitPoints_); + onChanged(); + } else { + splitPointsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearSplitPoints() { + if (splitPointsBuilder_ == null) { + splitPoints_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + splitPointsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder removeSplitPoints(int index) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.remove(index); + onChanged(); + } else { + splitPointsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.Builder getSplitPointsBuilder( + int index) { + return internalGetSplitPointsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPointsOrBuilder getSplitPointsOrBuilder( + int index) { + if (splitPointsBuilder_ == null) { + return splitPoints_.get(index); + } else { + return splitPointsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List + getSplitPointsOrBuilderList() { + if (splitPointsBuilder_ != null) { + return splitPointsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(splitPoints_); + } + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.Builder addSplitPointsBuilder() { + return internalGetSplitPointsFieldBuilder() + .addBuilder(com.google.spanner.admin.database.v1.SplitPoints.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.Builder addSplitPointsBuilder( + int index) { + return internalGetSplitPointsFieldBuilder() + .addBuilder(index, com.google.spanner.admin.database.v1.SplitPoints.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Required. The split points to add.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List + getSplitPointsBuilderList() { + return internalGetSplitPointsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints, + com.google.spanner.admin.database.v1.SplitPoints.Builder, + com.google.spanner.admin.database.v1.SplitPointsOrBuilder> + internalGetSplitPointsFieldBuilder() { + if (splitPointsBuilder_ == null) { + splitPointsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints, + com.google.spanner.admin.database.v1.SplitPoints.Builder, + com.google.spanner.admin.database.v1.SplitPointsOrBuilder>( + splitPoints_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean()); + splitPoints_ = null; + } + return splitPointsBuilder_; + } + + private java.lang.Object initiator_ = ""; + + /** + * + * + *
                                +     * Optional. A user-supplied tag associated with the split points.
                                +     * For example, "intital_data_load", "special_event_1".
                                +     * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +     * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +     * Only valid UTF8 characters are allowed.
                                +     * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The initiator. + */ + public java.lang.String getInitiator() { + java.lang.Object ref = initiator_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + initiator_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Optional. A user-supplied tag associated with the split points.
                                +     * For example, "intital_data_load", "special_event_1".
                                +     * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +     * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +     * Only valid UTF8 characters are allowed.
                                +     * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for initiator. + */ + public com.google.protobuf.ByteString getInitiatorBytes() { + java.lang.Object ref = initiator_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + initiator_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Optional. A user-supplied tag associated with the split points.
                                +     * For example, "intital_data_load", "special_event_1".
                                +     * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +     * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +     * Only valid UTF8 characters are allowed.
                                +     * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The initiator to set. + * @return This builder for chaining. + */ + public Builder setInitiator(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + initiator_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A user-supplied tag associated with the split points.
                                +     * For example, "intital_data_load", "special_event_1".
                                +     * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +     * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +     * Only valid UTF8 characters are allowed.
                                +     * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearInitiator() { + initiator_ = getDefaultInstance().getInitiator(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A user-supplied tag associated with the split points.
                                +     * For example, "intital_data_load", "special_event_1".
                                +     * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +     * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +     * Only valid UTF8 characters are allowed.
                                +     * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for initiator to set. + * @return This builder for chaining. + */ + public Builder setInitiatorBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + initiator_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.AddSplitPointsRequest) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.AddSplitPointsRequest) + private static final com.google.spanner.admin.database.v1.AddSplitPointsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.AddSplitPointsRequest(); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AddSplitPointsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsRequestOrBuilder.java new file mode 100644 index 00000000000..bbdc2efc8ae --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsRequestOrBuilder.java @@ -0,0 +1,162 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +@com.google.protobuf.Generated +public interface AddSplitPointsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.AddSplitPointsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * Required. The database on whose tables/indexes split points are to be
                                +   * added. Values are of the form
                                +   * `projects/<project>/instances/<instance>/databases/<database>`.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The database. + */ + java.lang.String getDatabase(); + + /** + * + * + *
                                +   * Required. The database on whose tables/indexes split points are to be
                                +   * added. Values are of the form
                                +   * `projects/<project>/instances/<instance>/databases/<database>`.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for database. + */ + com.google.protobuf.ByteString getDatabaseBytes(); + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getSplitPointsList(); + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.admin.database.v1.SplitPoints getSplitPoints(int index); + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + int getSplitPointsCount(); + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List + getSplitPointsOrBuilderList(); + + /** + * + * + *
                                +   * Required. The split points to add.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.admin.database.v1.SplitPointsOrBuilder getSplitPointsOrBuilder(int index); + + /** + * + * + *
                                +   * Optional. A user-supplied tag associated with the split points.
                                +   * For example, "intital_data_load", "special_event_1".
                                +   * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +   * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +   * Only valid UTF8 characters are allowed.
                                +   * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The initiator. + */ + java.lang.String getInitiator(); + + /** + * + * + *
                                +   * Optional. A user-supplied tag associated with the split points.
                                +   * For example, "intital_data_load", "special_event_1".
                                +   * Defaults to "CloudAddSplitPointsAPI" if not specified.
                                +   * The length of the tag must not exceed 50 characters,else will be trimmed.
                                +   * Only valid UTF8 characters are allowed.
                                +   * 
                                + * + * string initiator = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for initiator. + */ + com.google.protobuf.ByteString getInitiatorBytes(); +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsResponse.java new file mode 100644 index 00000000000..30eaaf424dc --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsResponse.java @@ -0,0 +1,399 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
                                + * The response for
                                + * [AddSplitPoints][google.spanner.admin.database.v1.DatabaseAdmin.AddSplitPoints].
                                + * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.AddSplitPointsResponse} + */ +@com.google.protobuf.Generated +public final class AddSplitPointsResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.AddSplitPointsResponse) + AddSplitPointsResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AddSplitPointsResponse"); + } + + // Use AddSplitPointsResponse.newBuilder() to construct. + private AddSplitPointsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AddSplitPointsResponse() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.AddSplitPointsResponse.class, + com.google.spanner.admin.database.v1.AddSplitPointsResponse.Builder.class); + } + + 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 { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.AddSplitPointsResponse)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.AddSplitPointsResponse other = + (com.google.spanner.admin.database.v1.AddSplitPointsResponse) obj; + + 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 = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.AddSplitPointsResponse 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * The response for
                                +   * [AddSplitPoints][google.spanner.admin.database.v1.DatabaseAdmin.AddSplitPoints].
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.AddSplitPointsResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.AddSplitPointsResponse) + com.google.spanner.admin.database.v1.AddSplitPointsResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.AddSplitPointsResponse.class, + com.google.spanner.admin.database.v1.AddSplitPointsResponse.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.AddSplitPointsResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsResponse getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.AddSplitPointsResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsResponse build() { + com.google.spanner.admin.database.v1.AddSplitPointsResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsResponse buildPartial() { + com.google.spanner.admin.database.v1.AddSplitPointsResponse result = + new com.google.spanner.admin.database.v1.AddSplitPointsResponse(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.AddSplitPointsResponse) { + return mergeFrom((com.google.spanner.admin.database.v1.AddSplitPointsResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.AddSplitPointsResponse other) { + if (other == com.google.spanner.admin.database.v1.AddSplitPointsResponse.getDefaultInstance()) + return this; + 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; + 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; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.AddSplitPointsResponse) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.AddSplitPointsResponse) + private static final com.google.spanner.admin.database.v1.AddSplitPointsResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.AddSplitPointsResponse(); + } + + public static com.google.spanner.admin.database.v1.AddSplitPointsResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AddSplitPointsResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.AddSplitPointsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsResponseOrBuilder.java new file mode 100644 index 00000000000..e94d9fb2f36 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/AddSplitPointsResponseOrBuilder.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +@com.google.protobuf.Generated +public interface AddSplitPointsResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.AddSplitPointsResponse) + com.google.protobuf.MessageOrBuilder {} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java index bbcb39c5f93..ccc75d55036 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.Backup} */ -public final class Backup extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Backup extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.Backup) BackupOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Backup"); + } + // Use Backup.newBuilder() to construct. - private Backup(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Backup(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -48,12 +61,7 @@ private Backup() { referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList(); backupSchedules_ = com.google.protobuf.LazyStringArrayList.emptyList(); incrementalBackupChainId_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Backup(); + instancePartitions_ = java.util.Collections.emptyList(); } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @@ -62,7 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_Backup_fieldAccessorTable @@ -115,6 +123,16 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + /** * * @@ -125,6 +143,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * STATE_UNSPECIFIED = 0; */ public static final int STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -136,6 +155,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * CREATING = 1; */ public static final int CREATING_VALUE = 1; + /** * * @@ -205,7 +225,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.Backup.getDescriptor().getEnumTypes().get(0); } @@ -235,6 +255,7 @@ private State(int value) { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -262,6 +283,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -292,6 +314,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public static final int VERSION_TIME_FIELD_NUMBER = 9; private com.google.protobuf.Timestamp versionTime_; + /** * * @@ -310,6 +333,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public boolean hasVersionTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -328,6 +352,7 @@ public boolean hasVersionTime() { public com.google.protobuf.Timestamp getVersionTime() { return versionTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : versionTime_; } + /** * * @@ -347,6 +372,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public static final int EXPIRE_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp expireTime_; + /** * * @@ -368,6 +394,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public boolean hasExpireTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -389,6 +416,7 @@ public boolean hasExpireTime() { public com.google.protobuf.Timestamp getExpireTime() { return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; } + /** * * @@ -413,6 +441,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -451,6 +480,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -492,6 +522,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int CREATE_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -511,6 +542,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -530,6 +562,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -550,6 +583,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public static final int SIZE_BYTES_FIELD_NUMBER = 5; private long sizeBytes_ = 0L; + /** * * @@ -568,6 +602,7 @@ public long getSizeBytes() { public static final int FREEABLE_SIZE_BYTES_FIELD_NUMBER = 15; private long freeableSizeBytes_ = 0L; + /** * * @@ -591,6 +626,7 @@ public long getFreeableSizeBytes() { public static final int EXCLUSIVE_SIZE_BYTES_FIELD_NUMBER = 16; private long exclusiveSizeBytes_ = 0L; + /** * * @@ -616,6 +652,7 @@ public long getExclusiveSizeBytes() { public static final int STATE_FIELD_NUMBER = 6; private int state_ = 0; + /** * * @@ -633,6 +670,7 @@ public long getExclusiveSizeBytes() { public int getStateValue() { return state_; } + /** * * @@ -658,6 +696,7 @@ public com.google.spanner.admin.database.v1.Backup.State getState() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -680,6 +719,7 @@ public com.google.spanner.admin.database.v1.Backup.State getState() { public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { return referencingDatabases_; } + /** * * @@ -702,6 +742,7 @@ public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { public int getReferencingDatabasesCount() { return referencingDatabases_.size(); } + /** * * @@ -725,6 +766,7 @@ public int getReferencingDatabasesCount() { public java.lang.String getReferencingDatabases(int index) { return referencingDatabases_.get(index); } + /** * * @@ -751,6 +793,7 @@ public com.google.protobuf.ByteString getReferencingDatabasesBytes(int index) { public static final int ENCRYPTION_INFO_FIELD_NUMBER = 8; private com.google.spanner.admin.database.v1.EncryptionInfo encryptionInfo_; + /** * * @@ -768,6 +811,7 @@ public com.google.protobuf.ByteString getReferencingDatabasesBytes(int index) { public boolean hasEncryptionInfo() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -787,6 +831,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo() { ? com.google.spanner.admin.database.v1.EncryptionInfo.getDefaultInstance() : encryptionInfo_; } + /** * * @@ -810,6 +855,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio @SuppressWarnings("serial") private java.util.List encryptionInformation_; + /** * * @@ -831,6 +877,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio getEncryptionInformationList() { return encryptionInformation_; } + /** * * @@ -852,6 +899,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio getEncryptionInformationOrBuilderList() { return encryptionInformation_; } + /** * * @@ -872,6 +920,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio public int getEncryptionInformationCount() { return encryptionInformation_.size(); } + /** * * @@ -892,6 +941,7 @@ public int getEncryptionInformationCount() { public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInformation(int index) { return encryptionInformation_.get(index); } + /** * * @@ -916,6 +966,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInformat public static final int DATABASE_DIALECT_FIELD_NUMBER = 10; private int databaseDialect_ = 0; + /** * * @@ -933,6 +984,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInformat public int getDatabaseDialectValue() { return databaseDialect_; } + /** * * @@ -960,6 +1012,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -982,6 +1035,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() public com.google.protobuf.ProtocolStringList getReferencingBackupsList() { return referencingBackups_; } + /** * * @@ -1004,6 +1058,7 @@ public com.google.protobuf.ProtocolStringList getReferencingBackupsList() { public int getReferencingBackupsCount() { return referencingBackups_.size(); } + /** * * @@ -1027,6 +1082,7 @@ public int getReferencingBackupsCount() { public java.lang.String getReferencingBackups(int index) { return referencingBackups_.get(index); } + /** * * @@ -1053,6 +1109,7 @@ public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) { public static final int MAX_EXPIRE_TIME_FIELD_NUMBER = 12; private com.google.protobuf.Timestamp maxExpireTime_; + /** * * @@ -1074,6 +1131,7 @@ public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) { public boolean hasMaxExpireTime() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1097,6 +1155,7 @@ public com.google.protobuf.Timestamp getMaxExpireTime() { ? com.google.protobuf.Timestamp.getDefaultInstance() : maxExpireTime_; } + /** * * @@ -1124,6 +1183,7 @@ public com.google.protobuf.TimestampOrBuilder getMaxExpireTimeOrBuilder() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList backupSchedules_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -1148,6 +1208,7 @@ public com.google.protobuf.TimestampOrBuilder getMaxExpireTimeOrBuilder() { public com.google.protobuf.ProtocolStringList getBackupSchedulesList() { return backupSchedules_; } + /** * * @@ -1172,6 +1233,7 @@ public com.google.protobuf.ProtocolStringList getBackupSchedulesList() { public int getBackupSchedulesCount() { return backupSchedules_.size(); } + /** * * @@ -1197,6 +1259,7 @@ public int getBackupSchedulesCount() { public java.lang.String getBackupSchedules(int index) { return backupSchedules_.get(index); } + /** * * @@ -1227,6 +1290,7 @@ public com.google.protobuf.ByteString getBackupSchedulesBytes(int index) { @SuppressWarnings("serial") private volatile java.lang.Object incrementalBackupChainId_ = ""; + /** * * @@ -1255,6 +1319,7 @@ public java.lang.String getIncrementalBackupChainId() { return s; } } + /** * * @@ -1286,6 +1351,7 @@ public com.google.protobuf.ByteString getIncrementalBackupChainIdBytes() { public static final int OLDEST_VERSION_TIME_FIELD_NUMBER = 18; private com.google.protobuf.Timestamp oldestVersionTime_; + /** * * @@ -1308,6 +1374,7 @@ public com.google.protobuf.ByteString getIncrementalBackupChainIdBytes() { public boolean hasOldestVersionTime() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1332,6 +1399,7 @@ public com.google.protobuf.Timestamp getOldestVersionTime() { ? com.google.protobuf.Timestamp.getDefaultInstance() : oldestVersionTime_; } + /** * * @@ -1355,6 +1423,112 @@ public com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder() { : oldestVersionTime_; } + public static final int INSTANCE_PARTITIONS_FIELD_NUMBER = 19; + + @SuppressWarnings("serial") + private java.util.List + instancePartitions_; + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public java.util.List + getInstancePartitionsList() { + return instancePartitions_; + } + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public java.util.List< + ? extends com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + getInstancePartitionsOrBuilderList() { + return instancePartitions_; + } + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public int getInstancePartitionsCount() { + return instancePartitions_.size(); + } + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition getInstancePartitions( + int index) { + return instancePartitions_.get(index); + } + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder + getInstancePartitionsOrBuilder(int index) { + return instancePartitions_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -1369,11 +1543,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, database_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(3, getExpireTime()); @@ -1388,8 +1562,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeEnum(6, state_); } for (int i = 0; i < referencingDatabases_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString( - output, 7, referencingDatabases_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 7, referencingDatabases_.getRaw(i)); } if (((bitField0_ & 0x00000008) != 0)) { output.writeMessage(8, getEncryptionInfo()); @@ -1403,7 +1576,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeEnum(10, databaseDialect_); } for (int i = 0; i < referencingBackups_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 11, referencingBackups_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 11, referencingBackups_.getRaw(i)); } if (((bitField0_ & 0x00000010) != 0)) { output.writeMessage(12, getMaxExpireTime()); @@ -1412,7 +1585,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeMessage(13, encryptionInformation_.get(i)); } for (int i = 0; i < backupSchedules_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 14, backupSchedules_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 14, backupSchedules_.getRaw(i)); } if (freeableSizeBytes_ != 0L) { output.writeInt64(15, freeableSizeBytes_); @@ -1420,12 +1593,15 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (exclusiveSizeBytes_ != 0L) { output.writeInt64(16, exclusiveSizeBytes_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(incrementalBackupChainId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 17, incrementalBackupChainId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(incrementalBackupChainId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 17, incrementalBackupChainId_); } if (((bitField0_ & 0x00000020) != 0)) { output.writeMessage(18, getOldestVersionTime()); } + for (int i = 0; i < instancePartitions_.size(); i++) { + output.writeMessage(19, instancePartitions_.get(i)); + } getUnknownFields().writeTo(output); } @@ -1435,11 +1611,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, database_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getExpireTime()); @@ -1502,13 +1678,16 @@ public int getSerializedSize() { if (exclusiveSizeBytes_ != 0L) { size += com.google.protobuf.CodedOutputStream.computeInt64Size(16, exclusiveSizeBytes_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(incrementalBackupChainId_)) { - size += - com.google.protobuf.GeneratedMessageV3.computeStringSize(17, incrementalBackupChainId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(incrementalBackupChainId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(17, incrementalBackupChainId_); } if (((bitField0_ & 0x00000020) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(18, getOldestVersionTime()); } + for (int i = 0; i < instancePartitions_.size(); i++) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(19, instancePartitions_.get(i)); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -1561,6 +1740,7 @@ public boolean equals(final java.lang.Object obj) { if (hasOldestVersionTime()) { if (!getOldestVersionTime().equals(other.getOldestVersionTime())) return false; } + if (!getInstancePartitionsList().equals(other.getInstancePartitionsList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -1628,6 +1808,10 @@ public int hashCode() { hash = (37 * hash) + OLDEST_VERSION_TIME_FIELD_NUMBER; hash = (53 * hash) + getOldestVersionTime().hashCode(); } + if (getInstancePartitionsCount() > 0) { + hash = (37 * hash) + INSTANCE_PARTITIONS_FIELD_NUMBER; + hash = (53 * hash) + getInstancePartitionsList().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -1670,38 +1854,38 @@ public static com.google.spanner.admin.database.v1.Backup parseFrom( public static com.google.spanner.admin.database.v1.Backup parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.Backup parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.Backup parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.Backup parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.Backup parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.Backup parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1724,10 +1908,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1737,7 +1922,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.Backup} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.Backup) com.google.spanner.admin.database.v1.BackupOrBuilder { @@ -1747,7 +1932,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_Backup_fieldAccessorTable @@ -1761,20 +1946,21 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getVersionTimeFieldBuilder(); - getExpireTimeFieldBuilder(); - getCreateTimeFieldBuilder(); - getEncryptionInfoFieldBuilder(); - getEncryptionInformationFieldBuilder(); - getMaxExpireTimeFieldBuilder(); - getOldestVersionTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetVersionTimeFieldBuilder(); + internalGetExpireTimeFieldBuilder(); + internalGetCreateTimeFieldBuilder(); + internalGetEncryptionInfoFieldBuilder(); + internalGetEncryptionInformationFieldBuilder(); + internalGetMaxExpireTimeFieldBuilder(); + internalGetOldestVersionTimeFieldBuilder(); + internalGetInstancePartitionsFieldBuilder(); } } @@ -1830,6 +2016,13 @@ public Builder clear() { oldestVersionTimeBuilder_.dispose(); oldestVersionTimeBuilder_ = null; } + if (instancePartitionsBuilder_ == null) { + instancePartitions_ = java.util.Collections.emptyList(); + } else { + instancePartitions_ = null; + instancePartitionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00040000); return this; } @@ -1875,6 +2068,15 @@ private void buildPartialRepeatedFields(com.google.spanner.admin.database.v1.Bac } else { result.encryptionInformation_ = encryptionInformationBuilder_.build(); } + if (instancePartitionsBuilder_ == null) { + if (((bitField0_ & 0x00040000) != 0)) { + instancePartitions_ = java.util.Collections.unmodifiableList(instancePartitions_); + bitField0_ = (bitField0_ & ~0x00040000); + } + result.instancePartitions_ = instancePartitions_; + } else { + result.instancePartitions_ = instancePartitionsBuilder_.build(); + } } private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) { @@ -1949,39 +2151,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.Backup) { @@ -2057,8 +2226,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) { encryptionInformation_ = other.encryptionInformation_; bitField0_ = (bitField0_ & ~0x00000800); encryptionInformationBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getEncryptionInformationFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetEncryptionInformationFieldBuilder() : null; } else { encryptionInformationBuilder_.addAllMessages(other.encryptionInformation_); @@ -2099,6 +2268,33 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) { if (other.hasOldestVersionTime()) { mergeOldestVersionTime(other.getOldestVersionTime()); } + if (instancePartitionsBuilder_ == null) { + if (!other.instancePartitions_.isEmpty()) { + if (instancePartitions_.isEmpty()) { + instancePartitions_ = other.instancePartitions_; + bitField0_ = (bitField0_ & ~0x00040000); + } else { + ensureInstancePartitionsIsMutable(); + instancePartitions_.addAll(other.instancePartitions_); + } + onChanged(); + } + } else { + if (!other.instancePartitions_.isEmpty()) { + if (instancePartitionsBuilder_.isEmpty()) { + instancePartitionsBuilder_.dispose(); + instancePartitionsBuilder_ = null; + instancePartitions_ = other.instancePartitions_; + bitField0_ = (bitField0_ & ~0x00040000); + instancePartitionsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetInstancePartitionsFieldBuilder() + : null; + } else { + instancePartitionsBuilder_.addAllMessages(other.instancePartitions_); + } + } + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -2139,13 +2335,15 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getCreateTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCreateTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 34 @@ -2170,13 +2368,15 @@ public Builder mergeFrom( } // case 58 case 66: { - input.readMessage(getEncryptionInfoFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetEncryptionInfoFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000400; break; } // case 66 case 74: { - input.readMessage(getVersionTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetVersionTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 74 @@ -2195,7 +2395,8 @@ public Builder mergeFrom( } // case 90 case 98: { - input.readMessage(getMaxExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMaxExpireTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00004000; break; } // case 98 @@ -2241,10 +2442,24 @@ public Builder mergeFrom( case 146: { input.readMessage( - getOldestVersionTimeFieldBuilder().getBuilder(), extensionRegistry); + internalGetOldestVersionTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00020000; break; } // case 146 + case 154: + { + com.google.spanner.admin.database.v1.BackupInstancePartition m = + input.readMessage( + com.google.spanner.admin.database.v1.BackupInstancePartition.parser(), + extensionRegistry); + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(m); + } else { + instancePartitionsBuilder_.addMessage(m); + } + break; + } // case 154 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -2265,6 +2480,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -2291,6 +2507,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -2317,6 +2534,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2342,6 +2560,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2363,6 +2582,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -2391,11 +2611,12 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp versionTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> versionTimeBuilder_; + /** * * @@ -2413,6 +2634,7 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { public boolean hasVersionTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -2436,6 +2658,7 @@ public com.google.protobuf.Timestamp getVersionTime() { return versionTimeBuilder_.getMessage(); } } + /** * * @@ -2461,6 +2684,7 @@ public Builder setVersionTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -2483,6 +2707,7 @@ public Builder setVersionTime(com.google.protobuf.Timestamp.Builder builderForVa onChanged(); return this; } + /** * * @@ -2513,6 +2738,7 @@ public Builder mergeVersionTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -2535,6 +2761,7 @@ public Builder clearVersionTime() { onChanged(); return this; } + /** * * @@ -2550,8 +2777,9 @@ public Builder clearVersionTime() { public com.google.protobuf.Timestamp.Builder getVersionTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getVersionTimeFieldBuilder().getBuilder(); + return internalGetVersionTimeFieldBuilder().getBuilder(); } + /** * * @@ -2573,6 +2801,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { : versionTime_; } } + /** * * @@ -2585,14 +2814,14 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { * * .google.protobuf.Timestamp version_time = 9; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getVersionTimeFieldBuilder() { + internalGetVersionTimeFieldBuilder() { if (versionTimeBuilder_ == null) { versionTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2603,11 +2832,12 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { } private com.google.protobuf.Timestamp expireTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> expireTimeBuilder_; + /** * * @@ -2628,6 +2858,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public boolean hasExpireTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -2654,6 +2885,7 @@ public com.google.protobuf.Timestamp getExpireTime() { return expireTimeBuilder_.getMessage(); } } + /** * * @@ -2682,6 +2914,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -2707,6 +2940,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -2740,6 +2974,7 @@ public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -2765,6 +3000,7 @@ public Builder clearExpireTime() { onChanged(); return this; } + /** * * @@ -2783,8 +3019,9 @@ public Builder clearExpireTime() { public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getExpireTimeFieldBuilder().getBuilder(); + return internalGetExpireTimeFieldBuilder().getBuilder(); } + /** * * @@ -2809,6 +3046,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { : expireTime_; } } + /** * * @@ -2824,14 +3062,14 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { * * .google.protobuf.Timestamp expire_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getExpireTimeFieldBuilder() { + internalGetExpireTimeFieldBuilder() { if (expireTimeBuilder_ == null) { expireTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2842,6 +3080,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { } private java.lang.Object name_ = ""; + /** * * @@ -2879,6 +3118,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -2916,6 +3156,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2952,6 +3193,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2984,6 +3226,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -3023,11 +3266,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp createTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -3047,6 +3291,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasCreateTime() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -3072,6 +3317,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -3099,6 +3345,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -3123,6 +3370,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -3155,6 +3403,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -3179,6 +3428,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -3196,8 +3446,9 @@ public Builder clearCreateTime() { public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getCreateTimeFieldBuilder().getBuilder(); + return internalGetCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -3221,6 +3472,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -3235,14 +3487,14 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * .google.protobuf.Timestamp create_time = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreateTimeFieldBuilder() { + internalGetCreateTimeFieldBuilder() { if (createTimeBuilder_ == null) { createTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -3253,6 +3505,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { } private long sizeBytes_; + /** * * @@ -3268,6 +3521,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public long getSizeBytes() { return sizeBytes_; } + /** * * @@ -3287,6 +3541,7 @@ public Builder setSizeBytes(long value) { onChanged(); return this; } + /** * * @@ -3306,6 +3561,7 @@ public Builder clearSizeBytes() { } private long freeableSizeBytes_; + /** * * @@ -3326,6 +3582,7 @@ public Builder clearSizeBytes() { public long getFreeableSizeBytes() { return freeableSizeBytes_; } + /** * * @@ -3350,6 +3607,7 @@ public Builder setFreeableSizeBytes(long value) { onChanged(); return this; } + /** * * @@ -3374,6 +3632,7 @@ public Builder clearFreeableSizeBytes() { } private long exclusiveSizeBytes_; + /** * * @@ -3396,6 +3655,7 @@ public Builder clearFreeableSizeBytes() { public long getExclusiveSizeBytes() { return exclusiveSizeBytes_; } + /** * * @@ -3422,6 +3682,7 @@ public Builder setExclusiveSizeBytes(long value) { onChanged(); return this; } + /** * * @@ -3448,6 +3709,7 @@ public Builder clearExclusiveSizeBytes() { } private int state_ = 0; + /** * * @@ -3465,6 +3727,7 @@ public Builder clearExclusiveSizeBytes() { public int getStateValue() { return state_; } + /** * * @@ -3485,6 +3748,7 @@ public Builder setStateValue(int value) { onChanged(); return this; } + /** * * @@ -3506,6 +3770,7 @@ public com.google.spanner.admin.database.v1.Backup.State getState() { ? com.google.spanner.admin.database.v1.Backup.State.UNRECOGNIZED : result; } + /** * * @@ -3529,6 +3794,7 @@ public Builder setState(com.google.spanner.admin.database.v1.Backup.State value) onChanged(); return this; } + /** * * @@ -3558,6 +3824,7 @@ private void ensureReferencingDatabasesIsMutable() { } bitField0_ |= 0x00000200; } + /** * * @@ -3581,6 +3848,7 @@ public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { referencingDatabases_.makeImmutable(); return referencingDatabases_; } + /** * * @@ -3603,6 +3871,7 @@ public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { public int getReferencingDatabasesCount() { return referencingDatabases_.size(); } + /** * * @@ -3626,6 +3895,7 @@ public int getReferencingDatabasesCount() { public java.lang.String getReferencingDatabases(int index) { return referencingDatabases_.get(index); } + /** * * @@ -3649,6 +3919,7 @@ public java.lang.String getReferencingDatabases(int index) { public com.google.protobuf.ByteString getReferencingDatabasesBytes(int index) { return referencingDatabases_.getByteString(index); } + /** * * @@ -3680,6 +3951,7 @@ public Builder setReferencingDatabases(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -3710,6 +3982,7 @@ public Builder addReferencingDatabases(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3737,6 +4010,7 @@ public Builder addAllReferencingDatabases(java.lang.Iterable v onChanged(); return this; } + /** * * @@ -3763,6 +4037,7 @@ public Builder clearReferencingDatabases() { onChanged(); return this; } + /** * * @@ -3796,11 +4071,12 @@ public Builder addReferencingDatabasesBytes(com.google.protobuf.ByteString value } private com.google.spanner.admin.database.v1.EncryptionInfo encryptionInfo_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder> encryptionInfoBuilder_; + /** * * @@ -3817,6 +4093,7 @@ public Builder addReferencingDatabasesBytes(com.google.protobuf.ByteString value public boolean hasEncryptionInfo() { return ((bitField0_ & 0x00000400) != 0); } + /** * * @@ -3839,6 +4116,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo() { return encryptionInfoBuilder_.getMessage(); } } + /** * * @@ -3863,6 +4141,7 @@ public Builder setEncryptionInfo(com.google.spanner.admin.database.v1.Encryption onChanged(); return this; } + /** * * @@ -3885,6 +4164,7 @@ public Builder setEncryptionInfo( onChanged(); return this; } + /** * * @@ -3915,6 +4195,7 @@ public Builder mergeEncryptionInfo(com.google.spanner.admin.database.v1.Encrypti } return this; } + /** * * @@ -3936,6 +4217,7 @@ public Builder clearEncryptionInfo() { onChanged(); return this; } + /** * * @@ -3950,8 +4232,9 @@ public Builder clearEncryptionInfo() { public com.google.spanner.admin.database.v1.EncryptionInfo.Builder getEncryptionInfoBuilder() { bitField0_ |= 0x00000400; onChanged(); - return getEncryptionInfoFieldBuilder().getBuilder(); + return internalGetEncryptionInfoFieldBuilder().getBuilder(); } + /** * * @@ -3973,6 +4256,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder getEncryption : encryptionInfo_; } } + /** * * @@ -3984,14 +4268,14 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder getEncryption * .google.spanner.admin.database.v1.EncryptionInfo encryption_info = 8 [(.google.api.field_behavior) = OUTPUT_ONLY]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder> - getEncryptionInfoFieldBuilder() { + internalGetEncryptionInfoFieldBuilder() { if (encryptionInfoBuilder_ == null) { encryptionInfoBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder>( @@ -4013,7 +4297,7 @@ private void ensureEncryptionInformationIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder> @@ -4043,6 +4327,7 @@ private void ensureEncryptionInformationIsMutable() { return encryptionInformationBuilder_.getMessageList(); } } + /** * * @@ -4066,6 +4351,7 @@ public int getEncryptionInformationCount() { return encryptionInformationBuilder_.getCount(); } } + /** * * @@ -4089,6 +4375,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInformat return encryptionInformationBuilder_.getMessage(index); } } + /** * * @@ -4119,6 +4406,7 @@ public Builder setEncryptionInformation( } return this; } + /** * * @@ -4146,6 +4434,7 @@ public Builder setEncryptionInformation( } return this; } + /** * * @@ -4176,6 +4465,7 @@ public Builder addEncryptionInformation( } return this; } + /** * * @@ -4206,6 +4496,7 @@ public Builder addEncryptionInformation( } return this; } + /** * * @@ -4233,6 +4524,7 @@ public Builder addEncryptionInformation( } return this; } + /** * * @@ -4260,6 +4552,7 @@ public Builder addEncryptionInformation( } return this; } + /** * * @@ -4287,6 +4580,7 @@ public Builder addAllEncryptionInformation( } return this; } + /** * * @@ -4313,6 +4607,7 @@ public Builder clearEncryptionInformation() { } return this; } + /** * * @@ -4339,6 +4634,7 @@ public Builder removeEncryptionInformation(int index) { } return this; } + /** * * @@ -4357,8 +4653,9 @@ public Builder removeEncryptionInformation(int index) { */ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder getEncryptionInformationBuilder(int index) { - return getEncryptionInformationFieldBuilder().getBuilder(index); + return internalGetEncryptionInformationFieldBuilder().getBuilder(index); } + /** * * @@ -4383,6 +4680,7 @@ public Builder removeEncryptionInformation(int index) { return encryptionInformationBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -4407,6 +4705,7 @@ public Builder removeEncryptionInformation(int index) { return java.util.Collections.unmodifiableList(encryptionInformation_); } } + /** * * @@ -4425,9 +4724,10 @@ public Builder removeEncryptionInformation(int index) { */ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryptionInformationBuilder() { - return getEncryptionInformationFieldBuilder() + return internalGetEncryptionInformationFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.EncryptionInfo.getDefaultInstance()); } + /** * * @@ -4446,10 +4746,11 @@ public Builder removeEncryptionInformation(int index) { */ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryptionInformationBuilder(int index) { - return getEncryptionInformationFieldBuilder() + return internalGetEncryptionInformationFieldBuilder() .addBuilder( index, com.google.spanner.admin.database.v1.EncryptionInfo.getDefaultInstance()); } + /** * * @@ -4468,17 +4769,17 @@ public Builder removeEncryptionInformation(int index) { */ public java.util.List getEncryptionInformationBuilderList() { - return getEncryptionInformationFieldBuilder().getBuilderList(); + return internalGetEncryptionInformationFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder> - getEncryptionInformationFieldBuilder() { + internalGetEncryptionInformationFieldBuilder() { if (encryptionInformationBuilder_ == null) { encryptionInformationBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder>( @@ -4492,6 +4793,7 @@ public Builder removeEncryptionInformation(int index) { } private int databaseDialect_ = 0; + /** * * @@ -4509,6 +4811,7 @@ public Builder removeEncryptionInformation(int index) { public int getDatabaseDialectValue() { return databaseDialect_; } + /** * * @@ -4529,6 +4832,7 @@ public Builder setDatabaseDialectValue(int value) { onChanged(); return this; } + /** * * @@ -4550,6 +4854,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() ? com.google.spanner.admin.database.v1.DatabaseDialect.UNRECOGNIZED : result; } + /** * * @@ -4573,6 +4878,7 @@ public Builder setDatabaseDialect(com.google.spanner.admin.database.v1.DatabaseD onChanged(); return this; } + /** * * @@ -4602,6 +4908,7 @@ private void ensureReferencingBackupsIsMutable() { } bitField0_ |= 0x00002000; } + /** * * @@ -4625,6 +4932,7 @@ public com.google.protobuf.ProtocolStringList getReferencingBackupsList() { referencingBackups_.makeImmutable(); return referencingBackups_; } + /** * * @@ -4647,6 +4955,7 @@ public com.google.protobuf.ProtocolStringList getReferencingBackupsList() { public int getReferencingBackupsCount() { return referencingBackups_.size(); } + /** * * @@ -4670,6 +4979,7 @@ public int getReferencingBackupsCount() { public java.lang.String getReferencingBackups(int index) { return referencingBackups_.get(index); } + /** * * @@ -4693,6 +5003,7 @@ public java.lang.String getReferencingBackups(int index) { public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) { return referencingBackups_.getByteString(index); } + /** * * @@ -4724,6 +5035,7 @@ public Builder setReferencingBackups(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -4754,6 +5066,7 @@ public Builder addReferencingBackups(java.lang.String value) { onChanged(); return this; } + /** * * @@ -4781,6 +5094,7 @@ public Builder addAllReferencingBackups(java.lang.Iterable val onChanged(); return this; } + /** * * @@ -4807,6 +5121,7 @@ public Builder clearReferencingBackups() { onChanged(); return this; } + /** * * @@ -4840,11 +5155,12 @@ public Builder addReferencingBackupsBytes(com.google.protobuf.ByteString value) } private com.google.protobuf.Timestamp maxExpireTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> maxExpireTimeBuilder_; + /** * * @@ -4865,6 +5181,7 @@ public Builder addReferencingBackupsBytes(com.google.protobuf.ByteString value) public boolean hasMaxExpireTime() { return ((bitField0_ & 0x00004000) != 0); } + /** * * @@ -4891,6 +5208,7 @@ public com.google.protobuf.Timestamp getMaxExpireTime() { return maxExpireTimeBuilder_.getMessage(); } } + /** * * @@ -4919,6 +5237,7 @@ public Builder setMaxExpireTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -4944,6 +5263,7 @@ public Builder setMaxExpireTime(com.google.protobuf.Timestamp.Builder builderFor onChanged(); return this; } + /** * * @@ -4977,6 +5297,7 @@ public Builder mergeMaxExpireTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -5002,6 +5323,7 @@ public Builder clearMaxExpireTime() { onChanged(); return this; } + /** * * @@ -5020,8 +5342,9 @@ public Builder clearMaxExpireTime() { public com.google.protobuf.Timestamp.Builder getMaxExpireTimeBuilder() { bitField0_ |= 0x00004000; onChanged(); - return getMaxExpireTimeFieldBuilder().getBuilder(); + return internalGetMaxExpireTimeFieldBuilder().getBuilder(); } + /** * * @@ -5046,6 +5369,7 @@ public com.google.protobuf.TimestampOrBuilder getMaxExpireTimeOrBuilder() { : maxExpireTime_; } } + /** * * @@ -5061,14 +5385,14 @@ public com.google.protobuf.TimestampOrBuilder getMaxExpireTimeOrBuilder() { * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getMaxExpireTimeFieldBuilder() { + internalGetMaxExpireTimeFieldBuilder() { if (maxExpireTimeBuilder_ == null) { maxExpireTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -5087,6 +5411,7 @@ private void ensureBackupSchedulesIsMutable() { } bitField0_ |= 0x00008000; } + /** * * @@ -5112,6 +5437,7 @@ public com.google.protobuf.ProtocolStringList getBackupSchedulesList() { backupSchedules_.makeImmutable(); return backupSchedules_; } + /** * * @@ -5136,6 +5462,7 @@ public com.google.protobuf.ProtocolStringList getBackupSchedulesList() { public int getBackupSchedulesCount() { return backupSchedules_.size(); } + /** * * @@ -5161,6 +5488,7 @@ public int getBackupSchedulesCount() { public java.lang.String getBackupSchedules(int index) { return backupSchedules_.get(index); } + /** * * @@ -5186,6 +5514,7 @@ public java.lang.String getBackupSchedules(int index) { public com.google.protobuf.ByteString getBackupSchedulesBytes(int index) { return backupSchedules_.getByteString(index); } + /** * * @@ -5219,6 +5548,7 @@ public Builder setBackupSchedules(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -5251,6 +5581,7 @@ public Builder addBackupSchedules(java.lang.String value) { onChanged(); return this; } + /** * * @@ -5280,6 +5611,7 @@ public Builder addAllBackupSchedules(java.lang.Iterable values onChanged(); return this; } + /** * * @@ -5308,6 +5640,7 @@ public Builder clearBackupSchedules() { onChanged(); return this; } + /** * * @@ -5343,6 +5676,7 @@ public Builder addBackupSchedulesBytes(com.google.protobuf.ByteString value) { } private java.lang.Object incrementalBackupChainId_ = ""; + /** * * @@ -5370,6 +5704,7 @@ public java.lang.String getIncrementalBackupChainId() { return (java.lang.String) ref; } } + /** * * @@ -5397,6 +5732,7 @@ public com.google.protobuf.ByteString getIncrementalBackupChainIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -5423,6 +5759,7 @@ public Builder setIncrementalBackupChainId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -5445,6 +5782,7 @@ public Builder clearIncrementalBackupChainId() { onChanged(); return this; } + /** * * @@ -5474,11 +5812,12 @@ public Builder setIncrementalBackupChainIdBytes(com.google.protobuf.ByteString v } private com.google.protobuf.Timestamp oldestVersionTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> oldestVersionTimeBuilder_; + /** * * @@ -5500,6 +5839,7 @@ public Builder setIncrementalBackupChainIdBytes(com.google.protobuf.ByteString v public boolean hasOldestVersionTime() { return ((bitField0_ & 0x00020000) != 0); } + /** * * @@ -5527,6 +5867,7 @@ public com.google.protobuf.Timestamp getOldestVersionTime() { return oldestVersionTimeBuilder_.getMessage(); } } + /** * * @@ -5556,6 +5897,7 @@ public Builder setOldestVersionTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -5582,6 +5924,7 @@ public Builder setOldestVersionTime(com.google.protobuf.Timestamp.Builder builde onChanged(); return this; } + /** * * @@ -5616,6 +5959,7 @@ public Builder mergeOldestVersionTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -5642,6 +5986,7 @@ public Builder clearOldestVersionTime() { onChanged(); return this; } + /** * * @@ -5661,8 +6006,9 @@ public Builder clearOldestVersionTime() { public com.google.protobuf.Timestamp.Builder getOldestVersionTimeBuilder() { bitField0_ |= 0x00020000; onChanged(); - return getOldestVersionTimeFieldBuilder().getBuilder(); + return internalGetOldestVersionTimeFieldBuilder().getBuilder(); } + /** * * @@ -5688,6 +6034,7 @@ public com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder() { : oldestVersionTime_; } } + /** * * @@ -5704,14 +6051,14 @@ public com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder() { * .google.protobuf.Timestamp oldest_version_time = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getOldestVersionTimeFieldBuilder() { + internalGetOldestVersionTimeFieldBuilder() { if (oldestVersionTimeBuilder_ == null) { oldestVersionTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -5721,15 +6068,482 @@ public com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder() { return oldestVersionTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private java.util.List + instancePartitions_ = java.util.Collections.emptyList(); + + private void ensureInstancePartitionsIsMutable() { + if (!((bitField0_ & 0x00040000) != 0)) { + instancePartitions_ = + new java.util.ArrayList( + instancePartitions_); + bitField0_ |= 0x00040000; + } } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.BackupInstancePartition, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder, + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + instancePartitionsBuilder_; + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public java.util.List + getInstancePartitionsList() { + if (instancePartitionsBuilder_ == null) { + return java.util.Collections.unmodifiableList(instancePartitions_); + } else { + return instancePartitionsBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public int getInstancePartitionsCount() { + if (instancePartitionsBuilder_ == null) { + return instancePartitions_.size(); + } else { + return instancePartitionsBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition getInstancePartitions( + int index) { + if (instancePartitionsBuilder_ == null) { + return instancePartitions_.get(index); + } else { + return instancePartitionsBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setInstancePartitions( + int index, com.google.spanner.admin.database.v1.BackupInstancePartition value) { + if (instancePartitionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstancePartitionsIsMutable(); + instancePartitions_.set(index, value); + onChanged(); + } else { + instancePartitionsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setInstancePartitions( + int index, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder builderForValue) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.set(index, builderForValue.build()); + onChanged(); + } else { + instancePartitionsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + com.google.spanner.admin.database.v1.BackupInstancePartition value) { + if (instancePartitionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(value); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + int index, com.google.spanner.admin.database.v1.BackupInstancePartition value) { + if (instancePartitionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(index, value); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder builderForValue) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(builderForValue.build()); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + int index, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder builderForValue) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(index, builderForValue.build()); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addAllInstancePartitions( + java.lang.Iterable + values) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, instancePartitions_); + onChanged(); + } else { + instancePartitionsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder clearInstancePartitions() { + if (instancePartitionsBuilder_ == null) { + instancePartitions_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00040000); + onChanged(); + } else { + instancePartitionsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder removeInstancePartitions(int index) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.remove(index); + onChanged(); + } else { + instancePartitionsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition.Builder + getInstancePartitionsBuilder(int index) { + return internalGetInstancePartitionsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder + getInstancePartitionsOrBuilder(int index) { + if (instancePartitionsBuilder_ == null) { + return instancePartitions_.get(index); + } else { + return instancePartitionsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public java.util.List< + ? extends com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + getInstancePartitionsOrBuilderList() { + if (instancePartitionsBuilder_ != null) { + return instancePartitionsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(instancePartitions_); + } + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition.Builder + addInstancePartitionsBuilder() { + return internalGetInstancePartitionsFieldBuilder() + .addBuilder( + com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition.Builder + addInstancePartitionsBuilder(int index) { + return internalGetInstancePartitionsFieldBuilder() + .addBuilder( + index, + com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Output only. The instance partition(s) storing the backup.
                                +     *
                                +     * This is the same as the list of the instance partition(s) that the database
                                +     * had footprint in at the backup's `version_time`.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public java.util.List + getInstancePartitionsBuilderList() { + return internalGetInstancePartitionsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.BackupInstancePartition, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder, + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + internalGetInstancePartitionsFieldBuilder() { + if (instancePartitionsBuilder_ == null) { + instancePartitionsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.BackupInstancePartition, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder, + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder>( + instancePartitions_, + ((bitField0_ & 0x00040000) != 0), + getParentForChildren(), + isClean()); + instancePartitions_ = null; + } + return instancePartitionsBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.Backup) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java index 82e0f8682bc..ce202a7a5a1 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.BackupInfo} */ -public final class BackupInfo extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BackupInfo extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.BackupInfo) BackupInfoOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BackupInfo"); + } + // Use BackupInfo.newBuilder() to construct. - private BackupInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BackupInfo(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private BackupInfo() { sourceDatabase_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BackupInfo(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_BackupInfo_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object backup_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getBackup() { return s; } } + /** * * @@ -118,6 +127,7 @@ public com.google.protobuf.ByteString getBackupBytes() { public static final int VERSION_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp versionTime_; + /** * * @@ -137,6 +147,7 @@ public com.google.protobuf.ByteString getBackupBytes() { public boolean hasVersionTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -156,6 +167,7 @@ public boolean hasVersionTime() { public com.google.protobuf.Timestamp getVersionTime() { return versionTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : versionTime_; } + /** * * @@ -176,6 +188,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public static final int CREATE_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -193,6 +206,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -210,6 +224,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -230,6 +245,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { @SuppressWarnings("serial") private volatile java.lang.Object sourceDatabase_ = ""; + /** * * @@ -253,6 +269,7 @@ public java.lang.String getSourceDatabase() { return s; } } + /** * * @@ -291,14 +308,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backup_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, backup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backup_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, backup_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(2, getCreateTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceDatabase_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, sourceDatabase_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceDatabase_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, sourceDatabase_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getVersionTime()); @@ -312,14 +329,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backup_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, backup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backup_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, backup_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getCreateTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceDatabase_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, sourceDatabase_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceDatabase_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, sourceDatabase_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getVersionTime()); @@ -415,38 +432,38 @@ public static com.google.spanner.admin.database.v1.BackupInfo parseFrom( public static com.google.spanner.admin.database.v1.BackupInfo parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupInfo parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.BackupInfo parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupInfo parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.BackupInfo parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupInfo parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -469,10 +486,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -482,7 +500,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.BackupInfo} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.BackupInfo) com.google.spanner.admin.database.v1.BackupInfoOrBuilder { @@ -492,7 +510,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_BackupInfo_fieldAccessorTable @@ -506,15 +524,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getVersionTimeFieldBuilder(); - getCreateTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetVersionTimeFieldBuilder(); + internalGetCreateTimeFieldBuilder(); } } @@ -589,39 +607,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.BackupInfo resul result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.BackupInfo) { @@ -685,7 +670,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getCreateTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCreateTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 18 @@ -697,7 +683,8 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getVersionTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetVersionTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 34 @@ -721,6 +708,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object backup_ = ""; + /** * * @@ -743,6 +731,7 @@ public java.lang.String getBackup() { return (java.lang.String) ref; } } + /** * * @@ -765,6 +754,7 @@ public com.google.protobuf.ByteString getBackupBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -786,6 +776,7 @@ public Builder setBackup(java.lang.String value) { onChanged(); return this; } + /** * * @@ -803,6 +794,7 @@ public Builder clearBackup() { onChanged(); return this; } + /** * * @@ -827,11 +819,12 @@ public Builder setBackupBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp versionTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> versionTimeBuilder_; + /** * * @@ -850,6 +843,7 @@ public Builder setBackupBytes(com.google.protobuf.ByteString value) { public boolean hasVersionTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -874,6 +868,7 @@ public com.google.protobuf.Timestamp getVersionTime() { return versionTimeBuilder_.getMessage(); } } + /** * * @@ -900,6 +895,7 @@ public Builder setVersionTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -923,6 +919,7 @@ public Builder setVersionTime(com.google.protobuf.Timestamp.Builder builderForVa onChanged(); return this; } + /** * * @@ -954,6 +951,7 @@ public Builder mergeVersionTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -977,6 +975,7 @@ public Builder clearVersionTime() { onChanged(); return this; } + /** * * @@ -993,8 +992,9 @@ public Builder clearVersionTime() { public com.google.protobuf.Timestamp.Builder getVersionTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getVersionTimeFieldBuilder().getBuilder(); + return internalGetVersionTimeFieldBuilder().getBuilder(); } + /** * * @@ -1017,6 +1017,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { : versionTime_; } } + /** * * @@ -1030,14 +1031,14 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { * * .google.protobuf.Timestamp version_time = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getVersionTimeFieldBuilder() { + internalGetVersionTimeFieldBuilder() { if (versionTimeBuilder_ == null) { versionTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1048,11 +1049,12 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { } private com.google.protobuf.Timestamp createTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -1069,6 +1071,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1091,6 +1094,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -1115,6 +1119,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1136,6 +1141,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1165,6 +1171,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1186,6 +1193,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -1200,8 +1208,9 @@ public Builder clearCreateTime() { public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCreateTimeFieldBuilder().getBuilder(); + return internalGetCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -1222,6 +1231,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -1233,14 +1243,14 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * * .google.protobuf.Timestamp create_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreateTimeFieldBuilder() { + internalGetCreateTimeFieldBuilder() { if (createTimeBuilder_ == null) { createTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1251,6 +1261,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { } private java.lang.Object sourceDatabase_ = ""; + /** * * @@ -1273,6 +1284,7 @@ public java.lang.String getSourceDatabase() { return (java.lang.String) ref; } } + /** * * @@ -1295,6 +1307,7 @@ public com.google.protobuf.ByteString getSourceDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1316,6 +1329,7 @@ public Builder setSourceDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1333,6 +1347,7 @@ public Builder clearSourceDatabase() { onChanged(); return this; } + /** * * @@ -1356,17 +1371,6 @@ public Builder setSourceDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.BackupInfo) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java index 7ec09b51162..02c959477ee 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface BackupInfoOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.BackupInfo) @@ -36,6 +38,7 @@ public interface BackupInfoOrBuilder * @return The backup. */ java.lang.String getBackup(); + /** * * @@ -65,6 +68,7 @@ public interface BackupInfoOrBuilder * @return Whether the versionTime field is set. */ boolean hasVersionTime(); + /** * * @@ -81,6 +85,7 @@ public interface BackupInfoOrBuilder * @return The versionTime. */ com.google.protobuf.Timestamp getVersionTime(); + /** * * @@ -110,6 +115,7 @@ public interface BackupInfoOrBuilder * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -124,6 +130,7 @@ public interface BackupInfoOrBuilder * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -149,6 +156,7 @@ public interface BackupInfoOrBuilder * @return The sourceDatabase. */ java.lang.String getSourceDatabase(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartition.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartition.java new file mode 100644 index 00000000000..c95133cddd8 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartition.java @@ -0,0 +1,608 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
                                + * Instance partition information for the backup.
                                + * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.BackupInstancePartition} + */ +@com.google.protobuf.Generated +public final class BackupInstancePartition extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.BackupInstancePartition) + BackupInstancePartitionOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BackupInstancePartition"); + } + + // Use BackupInstancePartition.newBuilder() to construct. + private BackupInstancePartition(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private BackupInstancePartition() { + instancePartition_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.BackupInstancePartition.class, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder.class); + } + + public static final int INSTANCE_PARTITION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object instancePartition_ = ""; + + /** + * + * + *
                                +   * A unique identifier for the instance partition. Values are of the form
                                +   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +   * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The instancePartition. + */ + @java.lang.Override + public java.lang.String getInstancePartition() { + java.lang.Object ref = instancePartition_; + 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(); + instancePartition_ = s; + return s; + } + } + + /** + * + * + *
                                +   * A unique identifier for the instance partition. Values are of the form
                                +   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +   * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for instancePartition. + */ + @java.lang.Override + public com.google.protobuf.ByteString getInstancePartitionBytes() { + java.lang.Object ref = instancePartition_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + instancePartition_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instancePartition_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instancePartition_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instancePartition_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instancePartition_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.BackupInstancePartition)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.BackupInstancePartition other = + (com.google.spanner.admin.database.v1.BackupInstancePartition) obj; + + if (!getInstancePartition().equals(other.getInstancePartition())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + INSTANCE_PARTITION_FIELD_NUMBER; + hash = (53 * hash) + getInstancePartition().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.BackupInstancePartition 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * Instance partition information for the backup.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.BackupInstancePartition} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.BackupInstancePartition) + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.BackupInstancePartition.class, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.BackupInstancePartition.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + instancePartition_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition + getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition build() { + com.google.spanner.admin.database.v1.BackupInstancePartition result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition buildPartial() { + com.google.spanner.admin.database.v1.BackupInstancePartition result = + new com.google.spanner.admin.database.v1.BackupInstancePartition(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.admin.database.v1.BackupInstancePartition result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.instancePartition_ = instancePartition_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.BackupInstancePartition) { + return mergeFrom((com.google.spanner.admin.database.v1.BackupInstancePartition) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.BackupInstancePartition other) { + if (other + == com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance()) + return this; + if (!other.getInstancePartition().isEmpty()) { + instancePartition_ = other.instancePartition_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + instancePartition_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object instancePartition_ = ""; + + /** + * + * + *
                                +     * A unique identifier for the instance partition. Values are of the form
                                +     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +     * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The instancePartition. + */ + public java.lang.String getInstancePartition() { + java.lang.Object ref = instancePartition_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + instancePartition_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * A unique identifier for the instance partition. Values are of the form
                                +     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +     * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for instancePartition. + */ + public com.google.protobuf.ByteString getInstancePartitionBytes() { + java.lang.Object ref = instancePartition_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + instancePartition_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * A unique identifier for the instance partition. Values are of the form
                                +     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +     * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @param value The instancePartition to set. + * @return This builder for chaining. + */ + public Builder setInstancePartition(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + instancePartition_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A unique identifier for the instance partition. Values are of the form
                                +     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +     * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return This builder for chaining. + */ + public Builder clearInstancePartition() { + instancePartition_ = getDefaultInstance().getInstancePartition(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A unique identifier for the instance partition. Values are of the form
                                +     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +     * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @param value The bytes for instancePartition to set. + * @return This builder for chaining. + */ + public Builder setInstancePartitionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + instancePartition_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.BackupInstancePartition) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.BackupInstancePartition) + private static final com.google.spanner.admin.database.v1.BackupInstancePartition + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.BackupInstancePartition(); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BackupInstancePartition parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartitionOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartitionOrBuilder.java new file mode 100644 index 00000000000..8a2856c7b80 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartitionOrBuilder.java @@ -0,0 +1,56 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +@com.google.protobuf.Generated +public interface BackupInstancePartitionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.BackupInstancePartition) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * A unique identifier for the instance partition. Values are of the form
                                +   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +   * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The instancePartition. + */ + java.lang.String getInstancePartition(); + + /** + * + * + *
                                +   * A unique identifier for the instance partition. Values are of the form
                                +   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
                                +   * 
                                + * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for instancePartition. + */ + com.google.protobuf.ByteString getInstancePartitionBytes(); +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupName.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupName.java index 8eb85db8c7a..da90c9f8401 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupName.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java index 2cdc262624f..1366d6d0c05 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface BackupOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.Backup) @@ -40,6 +42,7 @@ public interface BackupOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * @@ -72,6 +75,7 @@ public interface BackupOrBuilder * @return Whether the versionTime field is set. */ boolean hasVersionTime(); + /** * * @@ -87,6 +91,7 @@ public interface BackupOrBuilder * @return The versionTime. */ com.google.protobuf.Timestamp getVersionTime(); + /** * * @@ -119,6 +124,7 @@ public interface BackupOrBuilder * @return Whether the expireTime field is set. */ boolean hasExpireTime(); + /** * * @@ -137,6 +143,7 @@ public interface BackupOrBuilder * @return The expireTime. */ com.google.protobuf.Timestamp getExpireTime(); + /** * * @@ -181,6 +188,7 @@ public interface BackupOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -225,6 +233,7 @@ public interface BackupOrBuilder * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -241,6 +250,7 @@ public interface BackupOrBuilder * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -321,6 +331,7 @@ public interface BackupOrBuilder * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * @@ -356,6 +367,7 @@ public interface BackupOrBuilder * @return A list containing the referencingDatabases. */ java.util.List getReferencingDatabasesList(); + /** * * @@ -376,6 +388,7 @@ public interface BackupOrBuilder * @return The count of referencingDatabases. */ int getReferencingDatabasesCount(); + /** * * @@ -397,6 +410,7 @@ public interface BackupOrBuilder * @return The referencingDatabases at the given index. */ java.lang.String getReferencingDatabases(int index); + /** * * @@ -433,6 +447,7 @@ public interface BackupOrBuilder * @return Whether the encryptionInfo field is set. */ boolean hasEncryptionInfo(); + /** * * @@ -447,6 +462,7 @@ public interface BackupOrBuilder * @return The encryptionInfo. */ com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(); + /** * * @@ -478,6 +494,7 @@ public interface BackupOrBuilder */ java.util.List getEncryptionInformationList(); + /** * * @@ -495,6 +512,7 @@ public interface BackupOrBuilder * */ com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInformation(int index); + /** * * @@ -512,6 +530,7 @@ public interface BackupOrBuilder * */ int getEncryptionInformationCount(); + /** * * @@ -530,6 +549,7 @@ public interface BackupOrBuilder */ java.util.List getEncryptionInformationOrBuilderList(); + /** * * @@ -563,6 +583,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The enum numeric value on the wire for databaseDialect. */ int getDatabaseDialectValue(); + /** * * @@ -598,6 +619,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return A list containing the referencingBackups. */ java.util.List getReferencingBackupsList(); + /** * * @@ -618,6 +640,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The count of referencingBackups. */ int getReferencingBackupsCount(); + /** * * @@ -639,6 +662,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The referencingBackups at the given index. */ java.lang.String getReferencingBackups(int index); + /** * * @@ -679,6 +703,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return Whether the maxExpireTime field is set. */ boolean hasMaxExpireTime(); + /** * * @@ -697,6 +722,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The maxExpireTime. */ com.google.protobuf.Timestamp getMaxExpireTime(); + /** * * @@ -736,6 +762,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return A list containing the backupSchedules. */ java.util.List getBackupSchedulesList(); + /** * * @@ -758,6 +785,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The count of backupSchedules. */ int getBackupSchedulesCount(); + /** * * @@ -781,6 +809,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The backupSchedules at the given index. */ java.lang.String getBackupSchedules(int index); + /** * * @@ -822,6 +851,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The incrementalBackupChainId. */ java.lang.String getIncrementalBackupChainId(); + /** * * @@ -859,6 +889,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return Whether the oldestVersionTime field is set. */ boolean hasOldestVersionTime(); + /** * * @@ -878,6 +909,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * @return The oldestVersionTime. */ com.google.protobuf.Timestamp getOldestVersionTime(); + /** * * @@ -895,4 +927,87 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * */ com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder(); + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + java.util.List + getInstancePartitionsList(); + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.spanner.admin.database.v1.BackupInstancePartition getInstancePartitions(int index); + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + int getInstancePartitionsCount(); + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + java.util.List + getInstancePartitionsOrBuilderList(); + + /** + * + * + *
                                +   * Output only. The instance partition(s) storing the backup.
                                +   *
                                +   * This is the same as the list of the instance partition(s) that the database
                                +   * had footprint in at the backup's `version_time`.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder + getInstancePartitionsOrBuilder(int index); } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java index 2d095ff5420..38d648d0892 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; -public final class BackupProto { +@com.google.protobuf.Generated +public final class BackupProto extends com.google.protobuf.GeneratedFile { private BackupProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BackupProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,72 +42,76 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_Backup_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_Backup_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CreateBackupRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_GetBackupRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListBackupsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListBackupsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_BackupInfo_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_FullBackupSpec_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_FullBackupSpec_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { return descriptor; @@ -112,7 +128,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "g/operations.proto\032 google/protobuf/fiel" + "d_mask.proto\032\037google/protobuf/timestamp." + "proto\032-google/spanner/admin/database/v1/" - + "common.proto\"\220\t\n\006Backup\0226\n\010database\030\002 \001(" + + "common.proto\"\355\t\n\006Backup\0226\n\010database\030\002 \001(" + "\tB$\372A!\n\037spanner.googleapis.com/Database\022" + "0\n\014version_time\030\t \001(\0132\032.google.protobuf." + "Timestamp\022/\n\013expire_time\030\003 \001(\0132\032.google." @@ -137,92 +153,97 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\tB-\340A\003\372A\'\n%spanner.googleapis.com/Backup" + "Schedule\022(\n\033incremental_backup_chain_id\030" + "\021 \001(\tB\003\340A\003\022<\n\023oldest_version_time\030\022 \001(\0132" - + "\032.google.protobuf.TimestampB\003\340A\003\"7\n\005Stat" - + "e\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t" - + "\n\005READY\020\002:\\\352AY\n\035spanner.googleapis.com/B" - + "ackup\0228projects/{project}/instances/{ins" - + "tance}/backups/{backup}\"\205\002\n\023CreateBackup" - + "Request\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner" - + ".googleapis.com/Instance\022\026\n\tbackup_id\030\002 " - + "\001(\tB\003\340A\002\022=\n\006backup\030\003 \001(\0132(.google.spanne" - + "r.admin.database.v1.BackupB\003\340A\002\022^\n\021encry" - + "ption_config\030\004 \001(\0132>.google.spanner.admi" - + "n.database.v1.CreateBackupEncryptionConf" - + "igB\003\340A\001\"\370\001\n\024CreateBackupMetadata\0220\n\004name" - + "\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Back" - + "up\0226\n\010database\030\002 \001(\tB$\372A!\n\037spanner.googl" - + "eapis.com/Database\022E\n\010progress\030\003 \001(\01323.g" - + "oogle.spanner.admin.database.v1.Operatio" - + "nProgress\022/\n\013cancel_time\030\004 \001(\0132\032.google." - + "protobuf.Timestamp\"\266\002\n\021CopyBackupRequest" + + "\032.google.protobuf.TimestampB\003\340A\003\022[\n\023inst" + + "ance_partitions\030\023 \003(\01329.google.spanner.a" + + "dmin.database.v1.BackupInstancePartition" + + "B\003\340A\003\"7\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n" + + "\010CREATING\020\001\022\t\n\005READY\020\002:\\\352AY\n\035spanner.goo" + + "gleapis.com/Backup\0228projects/{project}/i" + + "nstances/{instance}/backups/{backup}\"\205\002\n" + + "\023CreateBackupRequest\0227\n\006parent\030\001 \001(\tB\'\340A" + + "\002\372A!\n\037spanner.googleapis.com/Instance\022\026\n" + + "\tbackup_id\030\002 \001(\tB\003\340A\002\022=\n\006backup\030\003 \001(\0132(." + + "google.spanner.admin.database.v1.BackupB" + + "\003\340A\002\022^\n\021encryption_config\030\004 \001(\0132>.google" + + ".spanner.admin.database.v1.CreateBackupE" + + "ncryptionConfigB\003\340A\001\"\370\001\n\024CreateBackupMet" + + "adata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035spanner.google" + + "apis.com/Backup\0226\n\010database\030\002 \001(\tB$\372A!\n\037" + + "spanner.googleapis.com/Database\022E\n\010progr" + + "ess\030\003 \001(\01323.google.spanner.admin.databas" + + "e.v1.OperationProgress\022/\n\013cancel_time\030\004 " + + "\001(\0132\032.google.protobuf.Timestamp\"\266\002\n\021Copy" + + "BackupRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037s" + + "panner.googleapis.com/Instance\022\026\n\tbackup" + + "_id\030\002 \001(\tB\003\340A\002\022<\n\rsource_backup\030\003 \001(\tB%\340" + + "A\002\372A\037\n\035spanner.googleapis.com/Backup\0224\n\013" + + "expire_time\030\004 \001(\0132\032.google.protobuf.Time" + + "stampB\003\340A\002\022\\\n\021encryption_config\030\005 \001(\0132<." + + "google.spanner.admin.database.v1.CopyBac" + + "kupEncryptionConfigB\003\340A\001\"\371\001\n\022CopyBackupM" + + "etadata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035spanner.goog" + + "leapis.com/Backup\0229\n\rsource_backup\030\002 \001(\t" + + "B\"\372A\037\n\035spanner.googleapis.com/Backup\022E\n\010" + + "progress\030\003 \001(\01323.google.spanner.admin.da" + + "tabase.v1.OperationProgress\022/\n\013cancel_ti" + + "me\030\004 \001(\0132\032.google.protobuf.Timestamp\"\212\001\n" + + "\023UpdateBackupRequest\022=\n\006backup\030\001 \001(\0132(.g" + + "oogle.spanner.admin.database.v1.BackupB\003" + + "\340A\002\0224\n\013update_mask\030\002 \001(\0132\032.google.protob" + + "uf.FieldMaskB\003\340A\002\"G\n\020GetBackupRequest\0223\n" + + "\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spanner.googleapis." + + "com/Backup\"J\n\023DeleteBackupRequest\0223\n\004nam" + + "e\030\001 \001(\tB%\340A\002\372A\037\n\035spanner.googleapis.com/" + + "Backup\"\204\001\n\022ListBackupsRequest\0227\n\006parent\030" + + "\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/In" + + "stance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(" + + "\005\022\022\n\npage_token\030\004 \001(\t\"i\n\023ListBackupsResp" + + "onse\0229\n\007backups\030\001 \003(\0132(.google.spanner.a" + + "dmin.database.v1.Backup\022\027\n\017next_page_tok" + + "en\030\002 \001(\t\"\215\001\n\033ListBackupOperationsRequest" + "\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.google" - + "apis.com/Instance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A" - + "\002\022<\n\rsource_backup\030\003 \001(\tB%\340A\002\372A\037\n\035spanne" - + "r.googleapis.com/Backup\0224\n\013expire_time\030\004" - + " \001(\0132\032.google.protobuf.TimestampB\003\340A\002\022\\\n" - + "\021encryption_config\030\005 \001(\0132<.google.spanne" - + "r.admin.database.v1.CopyBackupEncryption" - + "ConfigB\003\340A\001\"\371\001\n\022CopyBackupMetadata\0220\n\004na" - + "me\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Ba" - + "ckup\0229\n\rsource_backup\030\002 \001(\tB\"\372A\037\n\035spanne" - + "r.googleapis.com/Backup\022E\n\010progress\030\003 \001(" - + "\01323.google.spanner.admin.database.v1.Ope" - + "rationProgress\022/\n\013cancel_time\030\004 \001(\0132\032.go" - + "ogle.protobuf.Timestamp\"\212\001\n\023UpdateBackup" - + "Request\022=\n\006backup\030\001 \001(\0132(.google.spanner" - + ".admin.database.v1.BackupB\003\340A\002\0224\n\013update" - + "_mask\030\002 \001(\0132\032.google.protobuf.FieldMaskB" - + "\003\340A\002\"G\n\020GetBackupRequest\0223\n\004name\030\001 \001(\tB%" - + "\340A\002\372A\037\n\035spanner.googleapis.com/Backup\"J\n" - + "\023DeleteBackupRequest\0223\n\004name\030\001 \001(\tB%\340A\002\372" - + "A\037\n\035spanner.googleapis.com/Backup\"\204\001\n\022Li" - + "stBackupsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!" - + "\n\037spanner.googleapis.com/Instance\022\016\n\006fil" - + "ter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_tok" - + "en\030\004 \001(\t\"i\n\023ListBackupsResponse\0229\n\007backu" - + "ps\030\001 \003(\0132(.google.spanner.admin.database" - + ".v1.Backup\022\027\n\017next_page_token\030\002 \001(\t\"\215\001\n\033" - + "ListBackupOperationsRequest\0227\n\006parent\030\001 " - + "\001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Inst" - + "ance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022" - + "\022\n\npage_token\030\004 \001(\t\"j\n\034ListBackupOperati" - + "onsResponse\0221\n\noperations\030\001 \003(\0132\035.google" - + ".longrunning.Operation\022\027\n\017next_page_toke" - + "n\030\002 \001(\t\"\342\001\n\nBackupInfo\0222\n\006backup\030\001 \001(\tB\"" - + "\372A\037\n\035spanner.googleapis.com/Backup\0220\n\014ve" - + "rsion_time\030\004 \001(\0132\032.google.protobuf.Times" - + "tamp\022/\n\013create_time\030\002 \001(\0132\032.google.proto" - + "buf.Timestamp\022=\n\017source_database\030\003 \001(\tB$" - + "\372A!\n\037spanner.googleapis.com/Database\"\237\003\n" - + "\034CreateBackupEncryptionConfig\022k\n\017encrypt" - + "ion_type\030\001 \001(\0162M.google.spanner.admin.da" - + "tabase.v1.CreateBackupEncryptionConfig.E" - + "ncryptionTypeB\003\340A\002\022?\n\014kms_key_name\030\002 \001(\t" - + "B)\340A\001\372A#\n!cloudkms.googleapis.com/Crypto" - + "Key\022@\n\rkms_key_names\030\003 \003(\tB)\340A\001\372A#\n!clou" - + "dkms.googleapis.com/CryptoKey\"\216\001\n\016Encryp" - + "tionType\022\037\n\033ENCRYPTION_TYPE_UNSPECIFIED\020" - + "\000\022\033\n\027USE_DATABASE_ENCRYPTION\020\001\022\035\n\031GOOGLE" - + "_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MANAGE" - + "D_ENCRYPTION\020\003\"\253\003\n\032CopyBackupEncryptionC" - + "onfig\022i\n\017encryption_type\030\001 \001(\0162K.google." - + "spanner.admin.database.v1.CopyBackupEncr" - + "yptionConfig.EncryptionTypeB\003\340A\002\022?\n\014kms_" - + "key_name\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.googlea" - + "pis.com/CryptoKey\022@\n\rkms_key_names\030\003 \003(\t" - + "B)\340A\001\372A#\n!cloudkms.googleapis.com/Crypto" - + "Key\"\236\001\n\016EncryptionType\022\037\n\033ENCRYPTION_TYP" - + "E_UNSPECIFIED\020\000\022+\n\'USE_CONFIG_DEFAULT_OR" - + "_BACKUP_ENCRYPTION\020\001\022\035\n\031GOOGLE_DEFAULT_E" - + "NCRYPTION\020\002\022\037\n\033CUSTOMER_MANAGED_ENCRYPTI" - + "ON\020\003\"\020\n\016FullBackupSpec\"\027\n\025IncrementalBac" - + "kupSpecB\375\001\n$com.google.spanner.admin.dat" - + "abase.v1B\013BackupProtoP\001ZFcloud.google.co" - + "m/go/spanner/admin/database/apiv1/databa" - + "sepb;databasepb\252\002&Google.Cloud.Spanner.A" - + "dmin.Database.V1\312\002&Google\\Cloud\\Spanner\\" - + "Admin\\Database\\V1\352\002+Google::Cloud::Spann" - + "er::Admin::Database::V1b\006proto3" + + "apis.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpag" + + "e_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"j\n\034List" + + "BackupOperationsResponse\0221\n\noperations\030\001" + + " \003(\0132\035.google.longrunning.Operation\022\027\n\017n" + + "ext_page_token\030\002 \001(\t\"\342\001\n\nBackupInfo\0222\n\006b" + + "ackup\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com" + + "/Backup\0220\n\014version_time\030\004 \001(\0132\032.google.p" + + "rotobuf.Timestamp\022/\n\013create_time\030\002 \001(\0132\032" + + ".google.protobuf.Timestamp\022=\n\017source_dat" + + "abase\030\003 \001(\tB$\372A!\n\037spanner.googleapis.com" + + "/Database\"\237\003\n\034CreateBackupEncryptionConf" + + "ig\022k\n\017encryption_type\030\001 \001(\0162M.google.spa" + + "nner.admin.database.v1.CreateBackupEncry" + + "ptionConfig.EncryptionTypeB\003\340A\002\022?\n\014kms_k" + + "ey_name\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.googleap" + + "is.com/CryptoKey\022@\n\rkms_key_names\030\003 \003(\tB" + + ")\340A\001\372A#\n!cloudkms.googleapis.com/CryptoK" + + "ey\"\216\001\n\016EncryptionType\022\037\n\033ENCRYPTION_TYPE" + + "_UNSPECIFIED\020\000\022\033\n\027USE_DATABASE_ENCRYPTIO" + + "N\020\001\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CU" + + "STOMER_MANAGED_ENCRYPTION\020\003\"\253\003\n\032CopyBack" + + "upEncryptionConfig\022i\n\017encryption_type\030\001 " + + "\001(\0162K.google.spanner.admin.database.v1.C" + + "opyBackupEncryptionConfig.EncryptionType" + + "B\003\340A\002\022?\n\014kms_key_name\030\002 \001(\tB)\340A\001\372A#\n!clo" + + "udkms.googleapis.com/CryptoKey\022@\n\rkms_ke" + + "y_names\030\003 \003(\tB)\340A\001\372A#\n!cloudkms.googleap" + + "is.com/CryptoKey\"\236\001\n\016EncryptionType\022\037\n\033E" + + "NCRYPTION_TYPE_UNSPECIFIED\020\000\022+\n\'USE_CONF" + + "IG_DEFAULT_OR_BACKUP_ENCRYPTION\020\001\022\035\n\031GOO" + + "GLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MAN" + + "AGED_ENCRYPTION\020\003\"\020\n\016FullBackupSpec\"\027\n\025I" + + "ncrementalBackupSpec\"d\n\027BackupInstancePa" + + "rtition\022I\n\022instance_partition\030\001 \001(\tB-\372A*" + + "\n(spanner.googleapis.com/InstancePartiti" + + "onB\375\001\n$com.google.spanner.admin.database" + + ".v1B\013BackupProtoP\001ZFcloud.google.com/go/" + + "spanner/admin/database/apiv1/databasepb;" + + "databasepb\252\002&Google.Cloud.Spanner.Admin." + + "Database.V1\312\002&Google\\Cloud\\Spanner\\Admin" + + "\\Database\\V1\352\002+Google::Cloud::Spanner::A" + + "dmin::Database::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -236,9 +257,9 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.spanner.admin.database.v1.CommonProto.getDescriptor(), }); internal_static_google_spanner_admin_database_v1_Backup_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_admin_database_v1_Backup_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_Backup_descriptor, new java.lang.String[] { "Database", @@ -259,131 +280,147 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "BackupSchedules", "IncrementalBackupChainId", "OldestVersionTime", + "InstancePartitions", }); internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_admin_database_v1_CreateBackupRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor, new java.lang.String[] { "Parent", "BackupId", "Backup", "EncryptionConfig", }); internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_descriptor, new java.lang.String[] { "Name", "Database", "Progress", "CancelTime", }); internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageType(3); internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor, new java.lang.String[] { "Parent", "BackupId", "SourceBackup", "ExpireTime", "EncryptionConfig", }); internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor = - getDescriptor().getMessageTypes().get(4); + getDescriptor().getMessageType(4); internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor, new java.lang.String[] { "Name", "SourceBackup", "Progress", "CancelTime", }); internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor = - getDescriptor().getMessageTypes().get(5); + getDescriptor().getMessageType(5); internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor, new java.lang.String[] { "Backup", "UpdateMask", }); internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor = - getDescriptor().getMessageTypes().get(6); + getDescriptor().getMessageType(6); internal_static_google_spanner_admin_database_v1_GetBackupRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor = - getDescriptor().getMessageTypes().get(7); + getDescriptor().getMessageType(7); internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageType(8); internal_static_google_spanner_admin_database_v1_ListBackupsRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor, new java.lang.String[] { "Parent", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor = - getDescriptor().getMessageTypes().get(9); + getDescriptor().getMessageType(9); internal_static_google_spanner_admin_database_v1_ListBackupsResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor, new java.lang.String[] { "Backups", "NextPageToken", }); internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor = - getDescriptor().getMessageTypes().get(10); + getDescriptor().getMessageType(10); internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor, new java.lang.String[] { "Parent", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor = - getDescriptor().getMessageTypes().get(11); + getDescriptor().getMessageType(11); internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor, new java.lang.String[] { "Operations", "NextPageToken", }); internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageType(12); internal_static_google_spanner_admin_database_v1_BackupInfo_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor, new java.lang.String[] { "Backup", "VersionTime", "CreateTime", "SourceDatabase", }); internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor = - getDescriptor().getMessageTypes().get(13); + getDescriptor().getMessageType(13); internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor, new java.lang.String[] { "EncryptionType", "KmsKeyName", "KmsKeyNames", }); internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor = - getDescriptor().getMessageTypes().get(14); + getDescriptor().getMessageType(14); internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor, new java.lang.String[] { "EncryptionType", "KmsKeyName", "KmsKeyNames", }); internal_static_google_spanner_admin_database_v1_FullBackupSpec_descriptor = - getDescriptor().getMessageTypes().get(15); + getDescriptor().getMessageType(15); internal_static_google_spanner_admin_database_v1_FullBackupSpec_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_FullBackupSpec_descriptor, new java.lang.String[] {}); internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_descriptor = - getDescriptor().getMessageTypes().get(16); + getDescriptor().getMessageType(16); internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_descriptor, new java.lang.String[] {}); + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor = + getDescriptor().getMessageType(17); + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor, + new java.lang.String[] { + "InstancePartition", + }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.api.ResourceProto.getDescriptor(); + com.google.longrunning.OperationsProto.getDescriptor(); + com.google.protobuf.FieldMaskProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.spanner.admin.database.v1.CommonProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); @@ -391,12 +428,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { registry.add(com.google.api.ResourceProto.resourceReference); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.FieldBehaviorProto.getDescriptor(); - com.google.api.ResourceProto.getDescriptor(); - com.google.longrunning.OperationsProto.getDescriptor(); - com.google.protobuf.FieldMaskProto.getDescriptor(); - com.google.protobuf.TimestampProto.getDescriptor(); - com.google.spanner.admin.database.v1.CommonProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupSchedule.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupSchedule.java index 71c543a23f1..ef07225e99b 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupSchedule.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupSchedule.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -30,13 +31,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.BackupSchedule} */ -public final class BackupSchedule extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BackupSchedule extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.BackupSchedule) BackupScheduleOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BackupSchedule"); + } + // Use BackupSchedule.newBuilder() to construct. - private BackupSchedule(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BackupSchedule(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private BackupSchedule() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BackupSchedule(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_BackupSchedule_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_BackupSchedule_fieldAccessorTable @@ -83,6 +90,7 @@ public enum BackupTypeSpecCase private BackupTypeSpecCase(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 +127,7 @@ public BackupTypeSpecCase getBackupTypeSpecCase() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -150,6 +159,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -184,6 +194,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int SPEC_FIELD_NUMBER = 6; private com.google.spanner.admin.database.v1.BackupScheduleSpec spec_; + /** * * @@ -202,6 +213,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasSpec() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -222,6 +234,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpec getSpec() { ? com.google.spanner.admin.database.v1.BackupScheduleSpec.getDefaultInstance() : spec_; } + /** * * @@ -243,6 +256,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder getSpecO public static final int RETENTION_DURATION_FIELD_NUMBER = 3; private com.google.protobuf.Duration retentionDuration_; + /** * * @@ -262,6 +276,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder getSpecO public boolean hasRetentionDuration() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -283,6 +298,7 @@ public com.google.protobuf.Duration getRetentionDuration() { ? com.google.protobuf.Duration.getDefaultInstance() : retentionDuration_; } + /** * * @@ -305,6 +321,7 @@ public com.google.protobuf.DurationOrBuilder getRetentionDurationOrBuilder() { public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig encryptionConfig_; + /** * * @@ -324,6 +341,7 @@ public com.google.protobuf.DurationOrBuilder getRetentionDurationOrBuilder() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -345,6 +363,7 @@ public com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncr ? com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -367,6 +386,7 @@ public com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncr } public static final int FULL_BACKUP_SPEC_FIELD_NUMBER = 7; + /** * * @@ -382,6 +402,7 @@ public com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncr public boolean hasFullBackupSpec() { return backupTypeSpecCase_ == 7; } + /** * * @@ -400,6 +421,7 @@ public com.google.spanner.admin.database.v1.FullBackupSpec getFullBackupSpec() { } return com.google.spanner.admin.database.v1.FullBackupSpec.getDefaultInstance(); } + /** * * @@ -418,6 +440,7 @@ public com.google.spanner.admin.database.v1.FullBackupSpecOrBuilder getFullBacku } public static final int INCREMENTAL_BACKUP_SPEC_FIELD_NUMBER = 8; + /** * * @@ -434,6 +457,7 @@ public com.google.spanner.admin.database.v1.FullBackupSpecOrBuilder getFullBacku public boolean hasIncrementalBackupSpec() { return backupTypeSpecCase_ == 8; } + /** * * @@ -453,6 +477,7 @@ public com.google.spanner.admin.database.v1.IncrementalBackupSpec getIncremental } return com.google.spanner.admin.database.v1.IncrementalBackupSpec.getDefaultInstance(); } + /** * * @@ -474,6 +499,7 @@ public com.google.spanner.admin.database.v1.IncrementalBackupSpec getIncremental public static final int UPDATE_TIME_FIELD_NUMBER = 9; private com.google.protobuf.Timestamp updateTime_; + /** * * @@ -492,6 +518,7 @@ public com.google.spanner.admin.database.v1.IncrementalBackupSpec getIncremental public boolean hasUpdateTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -510,6 +537,7 @@ public boolean hasUpdateTime() { public com.google.protobuf.Timestamp getUpdateTime() { return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_; } + /** * * @@ -541,8 +569,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(3, getRetentionDuration()); @@ -572,8 +600,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getRetentionDuration()); @@ -724,38 +752,38 @@ public static com.google.spanner.admin.database.v1.BackupSchedule parseFrom( public static com.google.spanner.admin.database.v1.BackupSchedule parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupSchedule parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.BackupSchedule parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupSchedule parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.BackupSchedule parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupSchedule parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -778,10 +806,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -793,7 +822,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.BackupSchedule} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.BackupSchedule) com.google.spanner.admin.database.v1.BackupScheduleOrBuilder { @@ -803,7 +832,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_BackupSchedule_fieldAccessorTable @@ -817,17 +846,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getSpecFieldBuilder(); - getRetentionDurationFieldBuilder(); - getEncryptionConfigFieldBuilder(); - getUpdateTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSpecFieldBuilder(); + internalGetRetentionDurationFieldBuilder(); + internalGetEncryptionConfigFieldBuilder(); + internalGetUpdateTimeFieldBuilder(); } } @@ -939,39 +968,6 @@ private void buildPartialOneofs(com.google.spanner.admin.database.v1.BackupSched } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.BackupSchedule) { @@ -1053,39 +1049,41 @@ public Builder mergeFrom( case 26: { input.readMessage( - getRetentionDurationFieldBuilder().getBuilder(), extensionRegistry); + internalGetRetentionDurationFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 case 50: { - input.readMessage(getSpecFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetSpecFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 50 case 58: { - input.readMessage(getFullBackupSpecFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetFullBackupSpecFieldBuilder().getBuilder(), extensionRegistry); backupTypeSpecCase_ = 7; break; } // case 58 case 66: { input.readMessage( - getIncrementalBackupSpecFieldBuilder().getBuilder(), extensionRegistry); + internalGetIncrementalBackupSpecFieldBuilder().getBuilder(), extensionRegistry); backupTypeSpecCase_ = 8; break; } // case 66 case 74: { - input.readMessage(getUpdateTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetUpdateTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000040; break; } // case 74 @@ -1123,6 +1121,7 @@ public Builder clearBackupTypeSpec() { private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -1153,6 +1152,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1183,6 +1183,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1212,6 +1213,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1237,6 +1239,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -1269,11 +1272,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.BackupScheduleSpec spec_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupScheduleSpec, com.google.spanner.admin.database.v1.BackupScheduleSpec.Builder, com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder> specBuilder_; + /** * * @@ -1291,6 +1295,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasSpec() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1314,6 +1319,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpec getSpec() { return specBuilder_.getMessage(); } } + /** * * @@ -1339,6 +1345,7 @@ public Builder setSpec(com.google.spanner.admin.database.v1.BackupScheduleSpec v onChanged(); return this; } + /** * * @@ -1362,6 +1369,7 @@ public Builder setSpec( onChanged(); return this; } + /** * * @@ -1393,6 +1401,7 @@ public Builder mergeSpec(com.google.spanner.admin.database.v1.BackupScheduleSpec } return this; } + /** * * @@ -1415,6 +1424,7 @@ public Builder clearSpec() { onChanged(); return this; } + /** * * @@ -1430,8 +1440,9 @@ public Builder clearSpec() { public com.google.spanner.admin.database.v1.BackupScheduleSpec.Builder getSpecBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getSpecFieldBuilder().getBuilder(); + return internalGetSpecFieldBuilder().getBuilder(); } + /** * * @@ -1453,6 +1464,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder getSpecO : spec_; } } + /** * * @@ -1465,14 +1477,14 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder getSpecO * .google.spanner.admin.database.v1.BackupScheduleSpec spec = 6 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupScheduleSpec, com.google.spanner.admin.database.v1.BackupScheduleSpec.Builder, com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder> - getSpecFieldBuilder() { + internalGetSpecFieldBuilder() { if (specBuilder_ == null) { specBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupScheduleSpec, com.google.spanner.admin.database.v1.BackupScheduleSpec.Builder, com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder>( @@ -1483,11 +1495,12 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder getSpecO } private com.google.protobuf.Duration retentionDuration_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> retentionDurationBuilder_; + /** * * @@ -1506,6 +1519,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder getSpecO public boolean hasRetentionDuration() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1530,6 +1544,7 @@ public com.google.protobuf.Duration getRetentionDuration() { return retentionDurationBuilder_.getMessage(); } } + /** * * @@ -1556,6 +1571,7 @@ public Builder setRetentionDuration(com.google.protobuf.Duration value) { onChanged(); return this; } + /** * * @@ -1579,6 +1595,7 @@ public Builder setRetentionDuration(com.google.protobuf.Duration.Builder builder onChanged(); return this; } + /** * * @@ -1610,6 +1627,7 @@ public Builder mergeRetentionDuration(com.google.protobuf.Duration value) { } return this; } + /** * * @@ -1633,6 +1651,7 @@ public Builder clearRetentionDuration() { onChanged(); return this; } + /** * * @@ -1649,8 +1668,9 @@ public Builder clearRetentionDuration() { public com.google.protobuf.Duration.Builder getRetentionDurationBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getRetentionDurationFieldBuilder().getBuilder(); + return internalGetRetentionDurationFieldBuilder().getBuilder(); } + /** * * @@ -1673,6 +1693,7 @@ public com.google.protobuf.DurationOrBuilder getRetentionDurationOrBuilder() { : retentionDuration_; } } + /** * * @@ -1686,14 +1707,14 @@ public com.google.protobuf.DurationOrBuilder getRetentionDurationOrBuilder() { * .google.protobuf.Duration retention_duration = 3 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> - getRetentionDurationFieldBuilder() { + internalGetRetentionDurationFieldBuilder() { if (retentionDurationBuilder_ == null) { retentionDurationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>( @@ -1704,11 +1725,12 @@ public com.google.protobuf.DurationOrBuilder getRetentionDurationOrBuilder() { } private com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1727,6 +1749,7 @@ public com.google.protobuf.DurationOrBuilder getRetentionDurationOrBuilder() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1751,6 +1774,7 @@ public com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncr return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1778,6 +1802,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1802,6 +1827,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1836,6 +1862,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1859,6 +1886,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1876,8 +1904,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1901,6 +1930,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1914,14 +1944,14 @@ public Builder clearEncryptionConfig() { * .google.spanner.admin.database.v1.CreateBackupEncryptionConfig encryption_config = 4 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfigOrBuilder>( @@ -1931,11 +1961,12 @@ public Builder clearEncryptionConfig() { return encryptionConfigBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.FullBackupSpec, com.google.spanner.admin.database.v1.FullBackupSpec.Builder, com.google.spanner.admin.database.v1.FullBackupSpecOrBuilder> fullBackupSpecBuilder_; + /** * * @@ -1951,6 +1982,7 @@ public Builder clearEncryptionConfig() { public boolean hasFullBackupSpec() { return backupTypeSpecCase_ == 7; } + /** * * @@ -1976,6 +2008,7 @@ public com.google.spanner.admin.database.v1.FullBackupSpec getFullBackupSpec() { return com.google.spanner.admin.database.v1.FullBackupSpec.getDefaultInstance(); } } + /** * * @@ -1998,6 +2031,7 @@ public Builder setFullBackupSpec(com.google.spanner.admin.database.v1.FullBackup backupTypeSpecCase_ = 7; return this; } + /** * * @@ -2018,6 +2052,7 @@ public Builder setFullBackupSpec( backupTypeSpecCase_ = 7; return this; } + /** * * @@ -2051,6 +2086,7 @@ public Builder mergeFullBackupSpec(com.google.spanner.admin.database.v1.FullBack backupTypeSpecCase_ = 7; return this; } + /** * * @@ -2076,6 +2112,7 @@ public Builder clearFullBackupSpec() { } return this; } + /** * * @@ -2086,8 +2123,9 @@ public Builder clearFullBackupSpec() { * .google.spanner.admin.database.v1.FullBackupSpec full_backup_spec = 7; */ public com.google.spanner.admin.database.v1.FullBackupSpec.Builder getFullBackupSpecBuilder() { - return getFullBackupSpecFieldBuilder().getBuilder(); + return internalGetFullBackupSpecFieldBuilder().getBuilder(); } + /** * * @@ -2109,6 +2147,7 @@ public com.google.spanner.admin.database.v1.FullBackupSpec.Builder getFullBackup return com.google.spanner.admin.database.v1.FullBackupSpec.getDefaultInstance(); } } + /** * * @@ -2118,18 +2157,18 @@ public com.google.spanner.admin.database.v1.FullBackupSpec.Builder getFullBackup * * .google.spanner.admin.database.v1.FullBackupSpec full_backup_spec = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.FullBackupSpec, com.google.spanner.admin.database.v1.FullBackupSpec.Builder, com.google.spanner.admin.database.v1.FullBackupSpecOrBuilder> - getFullBackupSpecFieldBuilder() { + internalGetFullBackupSpecFieldBuilder() { if (fullBackupSpecBuilder_ == null) { if (!(backupTypeSpecCase_ == 7)) { backupTypeSpec_ = com.google.spanner.admin.database.v1.FullBackupSpec.getDefaultInstance(); } fullBackupSpecBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.FullBackupSpec, com.google.spanner.admin.database.v1.FullBackupSpec.Builder, com.google.spanner.admin.database.v1.FullBackupSpecOrBuilder>( @@ -2143,11 +2182,12 @@ public com.google.spanner.admin.database.v1.FullBackupSpec.Builder getFullBackup return fullBackupSpecBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.IncrementalBackupSpec, com.google.spanner.admin.database.v1.IncrementalBackupSpec.Builder, com.google.spanner.admin.database.v1.IncrementalBackupSpecOrBuilder> incrementalBackupSpecBuilder_; + /** * * @@ -2164,6 +2204,7 @@ public com.google.spanner.admin.database.v1.FullBackupSpec.Builder getFullBackup public boolean hasIncrementalBackupSpec() { return backupTypeSpecCase_ == 8; } + /** * * @@ -2190,6 +2231,7 @@ public com.google.spanner.admin.database.v1.IncrementalBackupSpec getIncremental return com.google.spanner.admin.database.v1.IncrementalBackupSpec.getDefaultInstance(); } } + /** * * @@ -2214,6 +2256,7 @@ public Builder setIncrementalBackupSpec( backupTypeSpecCase_ = 8; return this; } + /** * * @@ -2235,6 +2278,7 @@ public Builder setIncrementalBackupSpec( backupTypeSpecCase_ = 8; return this; } + /** * * @@ -2271,6 +2315,7 @@ public Builder mergeIncrementalBackupSpec( backupTypeSpecCase_ = 8; return this; } + /** * * @@ -2297,6 +2342,7 @@ public Builder clearIncrementalBackupSpec() { } return this; } + /** * * @@ -2309,8 +2355,9 @@ public Builder clearIncrementalBackupSpec() { */ public com.google.spanner.admin.database.v1.IncrementalBackupSpec.Builder getIncrementalBackupSpecBuilder() { - return getIncrementalBackupSpecFieldBuilder().getBuilder(); + return internalGetIncrementalBackupSpecFieldBuilder().getBuilder(); } + /** * * @@ -2333,6 +2380,7 @@ public Builder clearIncrementalBackupSpec() { return com.google.spanner.admin.database.v1.IncrementalBackupSpec.getDefaultInstance(); } } + /** * * @@ -2343,18 +2391,18 @@ public Builder clearIncrementalBackupSpec() { * .google.spanner.admin.database.v1.IncrementalBackupSpec incremental_backup_spec = 8; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.IncrementalBackupSpec, com.google.spanner.admin.database.v1.IncrementalBackupSpec.Builder, com.google.spanner.admin.database.v1.IncrementalBackupSpecOrBuilder> - getIncrementalBackupSpecFieldBuilder() { + internalGetIncrementalBackupSpecFieldBuilder() { if (incrementalBackupSpecBuilder_ == null) { if (!(backupTypeSpecCase_ == 8)) { backupTypeSpec_ = com.google.spanner.admin.database.v1.IncrementalBackupSpec.getDefaultInstance(); } incrementalBackupSpecBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.IncrementalBackupSpec, com.google.spanner.admin.database.v1.IncrementalBackupSpec.Builder, com.google.spanner.admin.database.v1.IncrementalBackupSpecOrBuilder>( @@ -2369,11 +2417,12 @@ public Builder clearIncrementalBackupSpec() { } private com.google.protobuf.Timestamp updateTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updateTimeBuilder_; + /** * * @@ -2392,6 +2441,7 @@ public Builder clearIncrementalBackupSpec() { public boolean hasUpdateTime() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -2416,6 +2466,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { return updateTimeBuilder_.getMessage(); } } + /** * * @@ -2442,6 +2493,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -2465,6 +2517,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -2496,6 +2549,7 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -2519,6 +2573,7 @@ public Builder clearUpdateTime() { onChanged(); return this; } + /** * * @@ -2535,8 +2590,9 @@ public Builder clearUpdateTime() { public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() { bitField0_ |= 0x00000040; onChanged(); - return getUpdateTimeFieldBuilder().getBuilder(); + return internalGetUpdateTimeFieldBuilder().getBuilder(); } + /** * * @@ -2559,6 +2615,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { : updateTime_; } } + /** * * @@ -2572,14 +2629,14 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { * .google.protobuf.Timestamp update_time = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getUpdateTimeFieldBuilder() { + internalGetUpdateTimeFieldBuilder() { if (updateTimeBuilder_ == null) { updateTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2589,17 +2646,6 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { return updateTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.BackupSchedule) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleName.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleName.java index 4ab35282678..0fd9b79cd7a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleName.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleOrBuilder.java index c4320e1dcfd..4e5a79ab54c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface BackupScheduleOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.BackupSchedule) @@ -44,6 +46,7 @@ public interface BackupScheduleOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -80,6 +83,7 @@ public interface BackupScheduleOrBuilder * @return Whether the spec field is set. */ boolean hasSpec(); + /** * * @@ -95,6 +99,7 @@ public interface BackupScheduleOrBuilder * @return The spec. */ com.google.spanner.admin.database.v1.BackupScheduleSpec getSpec(); + /** * * @@ -125,6 +130,7 @@ public interface BackupScheduleOrBuilder * @return Whether the retentionDuration field is set. */ boolean hasRetentionDuration(); + /** * * @@ -141,6 +147,7 @@ public interface BackupScheduleOrBuilder * @return The retentionDuration. */ com.google.protobuf.Duration getRetentionDuration(); + /** * * @@ -172,6 +179,7 @@ public interface BackupScheduleOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -188,6 +196,7 @@ public interface BackupScheduleOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncryptionConfig(); + /** * * @@ -216,6 +225,7 @@ public interface BackupScheduleOrBuilder * @return Whether the fullBackupSpec field is set. */ boolean hasFullBackupSpec(); + /** * * @@ -228,6 +238,7 @@ public interface BackupScheduleOrBuilder * @return The fullBackupSpec. */ com.google.spanner.admin.database.v1.FullBackupSpec getFullBackupSpec(); + /** * * @@ -252,6 +263,7 @@ public interface BackupScheduleOrBuilder * @return Whether the incrementalBackupSpec field is set. */ boolean hasIncrementalBackupSpec(); + /** * * @@ -265,6 +277,7 @@ public interface BackupScheduleOrBuilder * @return The incrementalBackupSpec. */ com.google.spanner.admin.database.v1.IncrementalBackupSpec getIncrementalBackupSpec(); + /** * * @@ -293,6 +306,7 @@ public interface BackupScheduleOrBuilder * @return Whether the updateTime field is set. */ boolean hasUpdateTime(); + /** * * @@ -308,6 +322,7 @@ public interface BackupScheduleOrBuilder * @return The updateTime. */ com.google.protobuf.Timestamp getUpdateTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleProto.java index bd19430f813..e5cdc336c62 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; -public final class BackupScheduleProto { +@com.google.protobuf.Generated +public final class BackupScheduleProto extends com.google.protobuf.GeneratedFile { private BackupScheduleProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BackupScheduleProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,39 +42,39 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_BackupSchedule_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_BackupSchedule_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CrontabSpec_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CrontabSpec_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -73,64 +85,70 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n6google/spanner/admin/database/v1/backu" - + "p_schedule.proto\022 google.spanner.admin.d" + "\n" + + "6google/spanner/admin/database/v1/backup_schedule.proto\022 google.spanner.admin.d" + "atabase.v1\032\037google/api/field_behavior.pr" - + "oto\032\031google/api/resource.proto\032\036google/p" - + "rotobuf/duration.proto\032 google/protobuf/" - + "field_mask.proto\032\037google/protobuf/timest" - + "amp.proto\032-google/spanner/admin/database" - + "/v1/backup.proto\"i\n\022BackupScheduleSpec\022B" - + "\n\tcron_spec\030\001 \001(\0132-.google.spanner.admin" - + ".database.v1.CrontabSpecH\000B\017\n\rschedule_s" - + "pec\"\244\005\n\016BackupSchedule\022\021\n\004name\030\001 \001(\tB\003\340A" - + "\010\022G\n\004spec\030\006 \001(\01324.google.spanner.admin.d" - + "atabase.v1.BackupScheduleSpecB\003\340A\001\022:\n\022re" - + "tention_duration\030\003 \001(\0132\031.google.protobuf" - + ".DurationB\003\340A\001\022^\n\021encryption_config\030\004 \001(" - + "\0132>.google.spanner.admin.database.v1.Cre" - + "ateBackupEncryptionConfigB\003\340A\001\022L\n\020full_b" - + "ackup_spec\030\007 \001(\01320.google.spanner.admin." - + "database.v1.FullBackupSpecH\000\022Z\n\027incremen" - + "tal_backup_spec\030\010 \001(\01327.google.spanner.a" - + "dmin.database.v1.IncrementalBackupSpecH\000" - + "\0224\n\013update_time\030\t \001(\0132\032.google.protobuf." - + "TimestampB\003\340A\003:\245\001\352A\241\001\n%spanner.googleapi" - + "s.com/BackupSchedule\022Wprojects/{project}" + + "oto\032\031google/api/resource.proto\032\036google/protobuf/duration.proto\032" + + " google/protobuf/field_mask.proto\032\037google/protobuf/timest" + + "amp.proto\032-google/spanner/admin/database/v1/backup.proto\"i\n" + + "\022BackupScheduleSpec\022B\n" + + "\tcron_spec\030\001" + + " \001(\0132-.google.spanner.admin.database.v1.CrontabSpecH\000B\017\n\r" + + "schedule_spec\"\244\005\n" + + "\016BackupSchedule\022\021\n" + + "\004name\030\001 \001(\tB\003\340A\010\022G\n" + + "\004spec\030\006" + + " \001(\01324.google.spanner.admin.database.v1.BackupScheduleSpecB\003\340A\001\022:\n" + + "\022retention_duration\030\003" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\001\022^\n" + + "\021encryption_config\030\004 \001(" + + "\0132>.google.spanner.admin.database.v1.CreateBackupEncryptionConfigB\003\340A\001\022L\n" + + "\020full_backup_spec\030\007" + + " \001(\01320.google.spanner.admin.database.v1.FullBackupSpecH\000\022Z\n" + + "\027incremental_backup_spec\030\010 \001(\01327.google.spanner.a" + + "dmin.database.v1.IncrementalBackupSpecH\000\0224\n" + + "\013update_time\030\t" + + " \001(\0132\032.google.protobuf.TimestampB\003\340A\003:\245\001\352A\241\001\n" + + "%spanner.googleapis.com/BackupSchedule\022Wprojects/{project}" + "/instances/{instance}/databases/{databas" - + "e}/backupSchedules/{schedule}*\017backupSch" - + "edules2\016backupScheduleB\022\n\020backup_type_sp" - + "ec\"q\n\013CrontabSpec\022\021\n\004text\030\001 \001(\tB\003\340A\002\022\026\n\t" - + "time_zone\030\002 \001(\tB\003\340A\003\0227\n\017creation_window\030" - + "\003 \001(\0132\031.google.protobuf.DurationB\003\340A\003\"\307\001" - + "\n\033CreateBackupScheduleRequest\0227\n\006parent\030" - + "\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Da" - + "tabase\022\037\n\022backup_schedule_id\030\002 \001(\tB\003\340A\002\022" - + "N\n\017backup_schedule\030\003 \001(\01320.google.spanne" - + "r.admin.database.v1.BackupScheduleB\003\340A\002\"" - + "W\n\030GetBackupScheduleRequest\022;\n\004name\030\001 \001(" - + "\tB-\340A\002\372A\'\n%spanner.googleapis.com/Backup" - + "Schedule\"Z\n\033DeleteBackupScheduleRequest\022" - + ";\n\004name\030\001 \001(\tB-\340A\002\372A\'\n%spanner.googleapi" - + "s.com/BackupSchedule\"\206\001\n\032ListBackupSched" - + "ulesRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spa" - + "nner.googleapis.com/Database\022\026\n\tpage_siz" - + "e\030\002 \001(\005B\003\340A\001\022\027\n\npage_token\030\004 \001(\tB\003\340A\001\"\202\001" - + "\n\033ListBackupSchedulesResponse\022J\n\020backup_" - + "schedules\030\001 \003(\01320.google.spanner.admin.d" - + "atabase.v1.BackupSchedule\022\027\n\017next_page_t" - + "oken\030\002 \001(\t\"\243\001\n\033UpdateBackupScheduleReque" - + "st\022N\n\017backup_schedule\030\001 \001(\01320.google.spa" - + "nner.admin.database.v1.BackupScheduleB\003\340" - + "A\002\0224\n\013update_mask\030\002 \001(\0132\032.google.protobu" - + "f.FieldMaskB\003\340A\002B\205\002\n$com.google.spanner." - + "admin.database.v1B\023BackupScheduleProtoP\001" - + "ZFcloud.google.com/go/spanner/admin/data" - + "base/apiv1/databasepb;databasepb\252\002&Googl" + + "e}/backupSchedules/{schedule}*\017backupSchedules2\016backupScheduleB\022\n" + + "\020backup_type_spec\"q\n" + + "\013CrontabSpec\022\021\n" + + "\004text\030\001 \001(\tB\003\340A\002\022\026\n" + + "\ttime_zone\030\002 \001(\tB\003\340A\003\0227\n" + + "\017creation_window\030\003" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\003\"\307\001\n" + + "\033CreateBackupScheduleRequest\0227\n" + + "\006parent\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Database\022\037\n" + + "\022backup_schedule_id\030\002 \001(\tB\003\340A\002\022N\n" + + "\017backup_schedule\030\003 \001(\01320.google.spanne" + + "r.admin.database.v1.BackupScheduleB\003\340A\002\"W\n" + + "\030GetBackupScheduleRequest\022;\n" + + "\004name\030\001 \001(\tB-\340A\002\372A\'\n" + + "%spanner.googleapis.com/BackupSchedule\"Z\n" + + "\033DeleteBackupScheduleRequest\022;\n" + + "\004name\030\001 \001(\tB-\340A\002\372A\'\n" + + "%spanner.googleapis.com/BackupSchedule\"\206\001\n" + + "\032ListBackupSchedulesRequest\0227\n" + + "\006parent\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Database\022\026\n" + + "\tpage_size\030\002 \001(\005B\003\340A\001\022\027\n\n" + + "page_token\030\004 \001(\tB\003\340A\001\"\202\001\n" + + "\033ListBackupSchedulesResponse\022J\n" + + "\020backup_schedules\030\001" + + " \003(\01320.google.spanner.admin.database.v1.BackupSchedule\022\027\n" + + "\017next_page_token\030\002 \001(\t\"\243\001\n" + + "\033UpdateBackupScheduleRequest\022N\n" + + "\017backup_schedule\030\001 \001(\01320.google.spa" + + "nner.admin.database.v1.BackupScheduleB\003\340A\002\0224\n" + + "\013update_mask\030\002" + + " \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002B\205\002\n" + + "$com.google.spanner.admin.database.v1B\023BackupScheduleProtoP\001" + + "ZFcloud.google.com/go/spanner/admin/database/apiv1/databasepb;databasepb\252\002&Googl" + "e.Cloud.Spanner.Admin.Database.V1\312\002&Goog" + "le\\Cloud\\Spanner\\Admin\\Database\\V1\352\002+Goo" - + "gle::Cloud::Spanner::Admin::Database::V1" - + "b\006proto3" + + "gle::Cloud::Spanner::Admin::Database::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -144,17 +162,17 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.spanner.admin.database.v1.BackupProto.getDescriptor(), }); internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_descriptor, new java.lang.String[] { "CronSpec", "ScheduleSpec", }); internal_static_google_spanner_admin_database_v1_BackupSchedule_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_admin_database_v1_BackupSchedule_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_BackupSchedule_descriptor, new java.lang.String[] { "Name", @@ -167,61 +185,68 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "BackupTypeSpec", }); internal_static_google_spanner_admin_database_v1_CrontabSpec_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_admin_database_v1_CrontabSpec_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CrontabSpec_descriptor, new java.lang.String[] { "Text", "TimeZone", "CreationWindow", }); internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageType(3); internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_descriptor, new java.lang.String[] { "Parent", "BackupScheduleId", "BackupSchedule", }); internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_descriptor = - getDescriptor().getMessageTypes().get(4); + getDescriptor().getMessageType(4); internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_descriptor = - getDescriptor().getMessageTypes().get(5); + getDescriptor().getMessageType(5); internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_descriptor = - getDescriptor().getMessageTypes().get(6); + getDescriptor().getMessageType(6); internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_descriptor, new java.lang.String[] { "Parent", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_descriptor = - getDescriptor().getMessageTypes().get(7); + getDescriptor().getMessageType(7); internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_descriptor, new java.lang.String[] { "BackupSchedules", "NextPageToken", }); internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageType(8); internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_descriptor, new java.lang.String[] { "BackupSchedule", "UpdateMask", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.api.ResourceProto.getDescriptor(); + com.google.protobuf.DurationProto.getDescriptor(); + com.google.protobuf.FieldMaskProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.spanner.admin.database.v1.BackupProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); @@ -229,12 +254,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { registry.add(com.google.api.ResourceProto.resourceReference); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.FieldBehaviorProto.getDescriptor(); - com.google.api.ResourceProto.getDescriptor(); - com.google.protobuf.DurationProto.getDescriptor(); - com.google.protobuf.FieldMaskProto.getDescriptor(); - com.google.protobuf.TimestampProto.getDescriptor(); - com.google.spanner.admin.database.v1.BackupProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpec.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpec.java index 8b09abda5f2..22075bdc46a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpec.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpec.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.BackupScheduleSpec} */ -public final class BackupScheduleSpec extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BackupScheduleSpec extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.BackupScheduleSpec) BackupScheduleSpecOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BackupScheduleSpec"); + } + // Use BackupScheduleSpec.newBuilder() to construct. - private BackupScheduleSpec(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BackupScheduleSpec(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private BackupScheduleSpec() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BackupScheduleSpec(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_fieldAccessorTable @@ -77,6 +84,7 @@ public enum ScheduleSpecCase private ScheduleSpecCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -108,6 +116,7 @@ public ScheduleSpecCase getScheduleSpecCase() { } public static final int CRON_SPEC_FIELD_NUMBER = 1; + /** * * @@ -123,6 +132,7 @@ public ScheduleSpecCase getScheduleSpecCase() { public boolean hasCronSpec() { return scheduleSpecCase_ == 1; } + /** * * @@ -141,6 +151,7 @@ public com.google.spanner.admin.database.v1.CrontabSpec getCronSpec() { } return com.google.spanner.admin.database.v1.CrontabSpec.getDefaultInstance(); } + /** * * @@ -274,38 +285,38 @@ public static com.google.spanner.admin.database.v1.BackupScheduleSpec parseFrom( public static com.google.spanner.admin.database.v1.BackupScheduleSpec parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupScheduleSpec parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.BackupScheduleSpec parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupScheduleSpec parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.BackupScheduleSpec parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.BackupScheduleSpec parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -329,10 +340,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -342,7 +354,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.BackupScheduleSpec} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.BackupScheduleSpec) com.google.spanner.admin.database.v1.BackupScheduleSpecOrBuilder { @@ -352,7 +364,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_BackupScheduleSpec_fieldAccessorTable @@ -364,7 +376,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.BackupScheduleSpec.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -425,39 +437,6 @@ private void buildPartialOneofs( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.BackupScheduleSpec) { @@ -510,7 +489,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getCronSpecFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCronSpecFieldBuilder().getBuilder(), extensionRegistry); scheduleSpecCase_ = 1; break; } // case 10 @@ -547,11 +527,12 @@ public Builder clearScheduleSpec() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CrontabSpec, com.google.spanner.admin.database.v1.CrontabSpec.Builder, com.google.spanner.admin.database.v1.CrontabSpecOrBuilder> cronSpecBuilder_; + /** * * @@ -567,6 +548,7 @@ public Builder clearScheduleSpec() { public boolean hasCronSpec() { return scheduleSpecCase_ == 1; } + /** * * @@ -592,6 +574,7 @@ public com.google.spanner.admin.database.v1.CrontabSpec getCronSpec() { return com.google.spanner.admin.database.v1.CrontabSpec.getDefaultInstance(); } } + /** * * @@ -614,6 +597,7 @@ public Builder setCronSpec(com.google.spanner.admin.database.v1.CrontabSpec valu scheduleSpecCase_ = 1; return this; } + /** * * @@ -634,6 +618,7 @@ public Builder setCronSpec( scheduleSpecCase_ = 1; return this; } + /** * * @@ -667,6 +652,7 @@ public Builder mergeCronSpec(com.google.spanner.admin.database.v1.CrontabSpec va scheduleSpecCase_ = 1; return this; } + /** * * @@ -692,6 +678,7 @@ public Builder clearCronSpec() { } return this; } + /** * * @@ -702,8 +689,9 @@ public Builder clearCronSpec() { * .google.spanner.admin.database.v1.CrontabSpec cron_spec = 1; */ public com.google.spanner.admin.database.v1.CrontabSpec.Builder getCronSpecBuilder() { - return getCronSpecFieldBuilder().getBuilder(); + return internalGetCronSpecFieldBuilder().getBuilder(); } + /** * * @@ -724,6 +712,7 @@ public com.google.spanner.admin.database.v1.CrontabSpecOrBuilder getCronSpecOrBu return com.google.spanner.admin.database.v1.CrontabSpec.getDefaultInstance(); } } + /** * * @@ -733,17 +722,17 @@ public com.google.spanner.admin.database.v1.CrontabSpecOrBuilder getCronSpecOrBu * * .google.spanner.admin.database.v1.CrontabSpec cron_spec = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CrontabSpec, com.google.spanner.admin.database.v1.CrontabSpec.Builder, com.google.spanner.admin.database.v1.CrontabSpecOrBuilder> - getCronSpecFieldBuilder() { + internalGetCronSpecFieldBuilder() { if (cronSpecBuilder_ == null) { if (!(scheduleSpecCase_ == 1)) { scheduleSpec_ = com.google.spanner.admin.database.v1.CrontabSpec.getDefaultInstance(); } cronSpecBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CrontabSpec, com.google.spanner.admin.database.v1.CrontabSpec.Builder, com.google.spanner.admin.database.v1.CrontabSpecOrBuilder>( @@ -757,17 +746,6 @@ public com.google.spanner.admin.database.v1.CrontabSpecOrBuilder getCronSpecOrBu return cronSpecBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.BackupScheduleSpec) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpecOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpecOrBuilder.java index fbab5446011..0109d54758b 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpecOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupScheduleSpecOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface BackupScheduleSpecOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.BackupScheduleSpec) @@ -36,6 +38,7 @@ public interface BackupScheduleSpecOrBuilder * @return Whether the cronSpec field is set. */ boolean hasCronSpec(); + /** * * @@ -48,6 +51,7 @@ public interface BackupScheduleSpecOrBuilder * @return The cronSpec. */ com.google.spanner.admin.database.v1.CrontabSpec getCronSpec(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java index 762b30ba4f7..fcbb39dc095 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; -public final class CommonProto { +@com.google.protobuf.Generated +public final class CommonProto extends com.google.protobuf.GeneratedFile { private CommonProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CommonProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,15 +42,15 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_OperationProgress_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_OperationProgress_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_EncryptionConfig_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_EncryptionConfig_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_EncryptionInfo_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_EncryptionInfo_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -97,29 +109,34 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.rpc.StatusProto.getDescriptor(), }); internal_static_google_spanner_admin_database_v1_OperationProgress_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_admin_database_v1_OperationProgress_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_OperationProgress_descriptor, new java.lang.String[] { "ProgressPercent", "StartTime", "EndTime", }); internal_static_google_spanner_admin_database_v1_EncryptionConfig_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_admin_database_v1_EncryptionConfig_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_EncryptionConfig_descriptor, new java.lang.String[] { "KmsKeyName", "KmsKeyNames", }); internal_static_google_spanner_admin_database_v1_EncryptionInfo_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_admin_database_v1_EncryptionInfo_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_EncryptionInfo_descriptor, new java.lang.String[] { "EncryptionType", "EncryptionStatus", "KmsKeyVersion", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.api.ResourceProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.rpc.StatusProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); @@ -127,10 +144,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { registry.add(com.google.api.ResourceProto.resourceReference); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.FieldBehaviorProto.getDescriptor(); - com.google.api.ResourceProto.getDescriptor(); - com.google.protobuf.TimestampProto.getDescriptor(); - com.google.rpc.StatusProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java index efe179261d9..a03493f9269 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupEncryptionConfig} */ -public final class CopyBackupEncryptionConfig extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CopyBackupEncryptionConfig extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CopyBackupEncryptionConfig) CopyBackupEncryptionConfigOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CopyBackupEncryptionConfig"); + } + // Use CopyBackupEncryptionConfig.newBuilder() to construct. - private CopyBackupEncryptionConfig(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CopyBackupEncryptionConfig(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CopyBackupEncryptionConfig() { kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CopyBackupEncryptionConfig(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable @@ -126,6 +133,16 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "EncryptionType"); + } + /** * * @@ -136,6 +153,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * ENCRYPTION_TYPE_UNSPECIFIED = 0; */ public static final int ENCRYPTION_TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -152,6 +170,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION = 1; */ public static final int USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION_VALUE = 1; + /** * * @@ -162,6 +181,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * GOOGLE_DEFAULT_ENCRYPTION = 2; */ public static final int GOOGLE_DEFAULT_ENCRYPTION_VALUE = 2; + /** * * @@ -234,7 +254,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDescriptor() .getEnumTypes() .get(0); @@ -263,6 +283,7 @@ private EncryptionType(int value) { public static final int ENCRYPTION_TYPE_FIELD_NUMBER = 1; private int encryptionType_ = 0; + /** * * @@ -280,6 +301,7 @@ private EncryptionType(int value) { public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -309,6 +331,7 @@ public int getEncryptionTypeValue() { @SuppressWarnings("serial") private volatile java.lang.Object kmsKeyName_ = ""; + /** * * @@ -338,6 +361,7 @@ public java.lang.String getKmsKeyName() { return s; } } + /** * * @@ -373,6 +397,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -404,6 +429,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { return kmsKeyNames_; } + /** * * @@ -435,6 +461,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -467,6 +494,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -520,11 +548,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io .getNumber()) { output.writeEnum(1, encryptionType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, kmsKeyName_); } for (int i = 0; i < kmsKeyNames_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, kmsKeyNames_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, kmsKeyNames_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -541,8 +569,8 @@ public int getSerializedSize() { .getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, encryptionType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, kmsKeyName_); } { int dataSize = 0; @@ -632,38 +660,38 @@ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig pa public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -687,10 +715,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -700,7 +729,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupEncryptionConfig} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CopyBackupEncryptionConfig) com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder { @@ -710,7 +739,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable @@ -722,7 +751,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -783,39 +812,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig) { @@ -914,6 +910,7 @@ public Builder mergeFrom( private int bitField0_; private int encryptionType_ = 0; + /** * * @@ -931,6 +928,7 @@ public Builder mergeFrom( public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -951,6 +949,7 @@ public Builder setEncryptionTypeValue(int value) { onChanged(); return this; } + /** * * @@ -975,6 +974,7 @@ public Builder setEncryptionTypeValue(int value) { .UNRECOGNIZED : result; } + /** * * @@ -999,6 +999,7 @@ public Builder setEncryptionType( onChanged(); return this; } + /** * * @@ -1020,6 +1021,7 @@ public Builder clearEncryptionType() { } private java.lang.Object kmsKeyName_ = ""; + /** * * @@ -1048,6 +1050,7 @@ public java.lang.String getKmsKeyName() { return (java.lang.String) ref; } } + /** * * @@ -1076,6 +1079,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1103,6 +1107,7 @@ public Builder setKmsKeyName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1126,6 +1131,7 @@ public Builder clearKmsKeyName() { onChanged(); return this; } + /** * * @@ -1164,6 +1170,7 @@ private void ensureKmsKeyNamesIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -1196,6 +1203,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { kmsKeyNames_.makeImmutable(); return kmsKeyNames_; } + /** * * @@ -1227,6 +1235,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -1259,6 +1268,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -1291,6 +1301,7 @@ public java.lang.String getKmsKeyNames(int index) { public com.google.protobuf.ByteString getKmsKeyNamesBytes(int index) { return kmsKeyNames_.getByteString(index); } + /** * * @@ -1331,6 +1342,7 @@ public Builder setKmsKeyNames(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1370,6 +1382,7 @@ public Builder addKmsKeyNames(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1406,6 +1419,7 @@ public Builder addAllKmsKeyNames(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1441,6 +1455,7 @@ public Builder clearKmsKeyNames() { onChanged(); return this; } + /** * * @@ -1482,17 +1497,6 @@ public Builder addKmsKeyNamesBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CopyBackupEncryptionConfig) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java index 8dd6c0ac244..ef10e01d28e 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CopyBackupEncryptionConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CopyBackupEncryptionConfig) @@ -38,6 +40,7 @@ public interface CopyBackupEncryptionConfigOrBuilder * @return The enum numeric value on the wire for encryptionType. */ int getEncryptionTypeValue(); + /** * * @@ -72,6 +75,7 @@ public interface CopyBackupEncryptionConfigOrBuilder * @return The kmsKeyName. */ java.lang.String getKmsKeyName(); + /** * * @@ -120,6 +124,7 @@ public interface CopyBackupEncryptionConfigOrBuilder * @return A list containing the kmsKeyNames. */ java.util.List getKmsKeyNamesList(); + /** * * @@ -149,6 +154,7 @@ public interface CopyBackupEncryptionConfigOrBuilder * @return The count of kmsKeyNames. */ int getKmsKeyNamesCount(); + /** * * @@ -179,6 +185,7 @@ public interface CopyBackupEncryptionConfigOrBuilder * @return The kmsKeyNames at the given index. */ java.lang.String getKmsKeyNames(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java index bd91d0a8d44..7151a3520b0 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupMetadata} */ -public final class CopyBackupMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CopyBackupMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CopyBackupMetadata) CopyBackupMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CopyBackupMetadata"); + } + // Use CopyBackupMetadata.newBuilder() to construct. - private CopyBackupMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CopyBackupMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CopyBackupMetadata() { sourceBackup_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CopyBackupMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -125,6 +134,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object sourceBackup_ = ""; + /** * * @@ -150,6 +160,7 @@ public java.lang.String getSourceBackup() { return s; } } + /** * * @@ -178,6 +189,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { public static final int PROGRESS_FIELD_NUMBER = 3; private com.google.spanner.admin.database.v1.OperationProgress progress_; + /** * * @@ -195,6 +207,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { public boolean hasProgress() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -214,6 +227,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -234,6 +248,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public static final int CANCEL_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -260,6 +275,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -286,6 +302,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -325,11 +342,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, sourceBackup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceBackup_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, sourceBackup_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getProgress()); @@ -346,11 +363,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, sourceBackup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceBackup_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, sourceBackup_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getProgress()); @@ -449,38 +466,38 @@ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom( public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -504,10 +521,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -518,7 +536,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CopyBackupMetadata) com.google.spanner.admin.database.v1.CopyBackupMetadataOrBuilder { @@ -528,7 +546,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable @@ -542,15 +560,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getProgressFieldBuilder(); - getCancelTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetProgressFieldBuilder(); + internalGetCancelTimeFieldBuilder(); } } @@ -624,39 +642,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CopyBackupMetada result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CopyBackupMetadata) { @@ -726,13 +711,15 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -756,6 +743,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -780,6 +768,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -804,6 +793,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -827,6 +817,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -846,6 +837,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -872,6 +864,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object sourceBackup_ = ""; + /** * * @@ -896,6 +889,7 @@ public java.lang.String getSourceBackup() { return (java.lang.String) ref; } } + /** * * @@ -920,6 +914,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -943,6 +938,7 @@ public Builder setSourceBackup(java.lang.String value) { onChanged(); return this; } + /** * * @@ -962,6 +958,7 @@ public Builder clearSourceBackup() { onChanged(); return this; } + /** * * @@ -988,11 +985,12 @@ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -1009,6 +1007,7 @@ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) { public boolean hasProgress() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1031,6 +1030,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -1055,6 +1055,7 @@ public Builder setProgress(com.google.spanner.admin.database.v1.OperationProgres onChanged(); return this; } + /** * * @@ -1077,6 +1078,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -1107,6 +1109,7 @@ public Builder mergeProgress(com.google.spanner.admin.database.v1.OperationProgr } return this; } + /** * * @@ -1128,6 +1131,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -1142,8 +1146,9 @@ public Builder clearProgress() { public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -1164,6 +1169,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -1175,14 +1181,14 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.database.v1.OperationProgress progress = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder>( @@ -1193,11 +1199,12 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1223,6 +1230,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1254,6 +1262,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1287,6 +1296,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1317,6 +1327,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1355,6 +1366,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1385,6 +1397,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1408,8 +1421,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1439,6 +1453,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1459,14 +1474,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1476,17 +1491,6 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { return cancelTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CopyBackupMetadata) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java index 2f3dbd90c55..81ce31fb4e7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CopyBackupMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CopyBackupMetadata) @@ -38,6 +40,7 @@ public interface CopyBackupMetadataOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -67,6 +70,7 @@ public interface CopyBackupMetadataOrBuilder * @return The sourceBackup. */ java.lang.String getSourceBackup(); + /** * * @@ -96,6 +100,7 @@ public interface CopyBackupMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -110,6 +115,7 @@ public interface CopyBackupMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.database.v1.OperationProgress getProgress(); + /** * * @@ -146,6 +152,7 @@ public interface CopyBackupMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -169,6 +176,7 @@ public interface CopyBackupMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java index ba3850d1c52..981f13a37f7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupRequest} */ -public final class CopyBackupRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CopyBackupRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CopyBackupRequest) CopyBackupRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CopyBackupRequest"); + } + // Use CopyBackupRequest.newBuilder() to construct. - private CopyBackupRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CopyBackupRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private CopyBackupRequest() { sourceBackup_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CopyBackupRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -97,6 +105,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -128,6 +137,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -153,6 +163,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -183,6 +194,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object sourceBackup_ = ""; + /** * * @@ -213,6 +225,7 @@ public java.lang.String getSourceBackup() { return s; } } + /** * * @@ -246,6 +259,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { public static final int EXPIRE_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp expireTime_; + /** * * @@ -266,6 +280,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { public boolean hasExpireTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -286,6 +301,7 @@ public boolean hasExpireTime() { public com.google.protobuf.Timestamp getExpireTime() { return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; } + /** * * @@ -307,6 +323,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 5; private com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryptionConfig_; + /** * * @@ -328,6 +345,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -351,6 +369,7 @@ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig getEncryp ? com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -388,14 +407,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, sourceBackup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceBackup_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, sourceBackup_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getExpireTime()); @@ -412,14 +431,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, sourceBackup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceBackup_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, sourceBackup_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getExpireTime()); @@ -521,38 +540,38 @@ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom( public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CopyBackupRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -576,10 +595,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -590,7 +610,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CopyBackupRequest) com.google.spanner.admin.database.v1.CopyBackupRequestOrBuilder { @@ -600,7 +620,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable @@ -614,15 +634,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getExpireTimeFieldBuilder(); - getEncryptionConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetExpireTimeFieldBuilder(); + internalGetEncryptionConfigFieldBuilder(); } } @@ -701,39 +721,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CopyBackupReques result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CopyBackupRequest) { @@ -814,14 +801,15 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 case 42: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -845,6 +833,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -870,6 +859,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -895,6 +885,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -919,6 +910,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -939,6 +931,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -966,6 +959,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -990,6 +984,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -1014,6 +1009,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1037,6 +1033,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1056,6 +1053,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -1082,6 +1080,7 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object sourceBackup_ = ""; + /** * * @@ -1111,6 +1110,7 @@ public java.lang.String getSourceBackup() { return (java.lang.String) ref; } } + /** * * @@ -1140,6 +1140,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1168,6 +1169,7 @@ public Builder setSourceBackup(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1192,6 +1194,7 @@ public Builder clearSourceBackup() { onChanged(); return this; } + /** * * @@ -1223,11 +1226,12 @@ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp expireTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> expireTimeBuilder_; + /** * * @@ -1247,6 +1251,7 @@ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) { public boolean hasExpireTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1272,6 +1277,7 @@ public com.google.protobuf.Timestamp getExpireTime() { return expireTimeBuilder_.getMessage(); } } + /** * * @@ -1299,6 +1305,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1323,6 +1330,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1355,6 +1363,7 @@ public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1379,6 +1388,7 @@ public Builder clearExpireTime() { onChanged(); return this; } + /** * * @@ -1396,8 +1406,9 @@ public Builder clearExpireTime() { public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getExpireTimeFieldBuilder().getBuilder(); + return internalGetExpireTimeFieldBuilder().getBuilder(); } + /** * * @@ -1421,6 +1432,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { : expireTime_; } } + /** * * @@ -1435,14 +1447,14 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getExpireTimeFieldBuilder() { + internalGetExpireTimeFieldBuilder() { if (expireTimeBuilder_ == null) { expireTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1453,11 +1465,12 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { } private com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig, com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1478,6 +1491,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1504,6 +1518,7 @@ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig getEncryp return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1533,6 +1548,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1559,6 +1575,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1595,6 +1612,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1620,6 +1638,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1639,8 +1658,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1666,6 +1686,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1681,14 +1702,14 @@ public Builder clearEncryptionConfig() { * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig, com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig, com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder>( @@ -1698,17 +1719,6 @@ public Builder clearEncryptionConfig() { return encryptionConfigBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CopyBackupRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java index 785c4487eef..3eae68b598f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CopyBackupRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CopyBackupRequest) @@ -39,6 +41,7 @@ public interface CopyBackupRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -69,6 +72,7 @@ public interface CopyBackupRequestOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * @@ -103,6 +107,7 @@ public interface CopyBackupRequestOrBuilder * @return The sourceBackup. */ java.lang.String getSourceBackup(); + /** * * @@ -140,6 +145,7 @@ public interface CopyBackupRequestOrBuilder * @return Whether the expireTime field is set. */ boolean hasExpireTime(); + /** * * @@ -157,6 +163,7 @@ public interface CopyBackupRequestOrBuilder * @return The expireTime. */ com.google.protobuf.Timestamp getExpireTime(); + /** * * @@ -191,6 +198,7 @@ public interface CopyBackupRequestOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -209,6 +217,7 @@ public interface CopyBackupRequestOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig getEncryptionConfig(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java index 1b0104e81ec..1540a3abc7c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupEncryptionConfig} */ -public final class CreateBackupEncryptionConfig extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateBackupEncryptionConfig extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CreateBackupEncryptionConfig) CreateBackupEncryptionConfigOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateBackupEncryptionConfig"); + } + // Use CreateBackupEncryptionConfig.newBuilder() to construct. - private CreateBackupEncryptionConfig(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateBackupEncryptionConfig(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CreateBackupEncryptionConfig() { kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateBackupEncryptionConfig(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_fieldAccessorTable @@ -125,6 +132,16 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "EncryptionType"); + } + /** * * @@ -135,6 +152,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * ENCRYPTION_TYPE_UNSPECIFIED = 0; */ public static final int ENCRYPTION_TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -150,6 +168,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * USE_DATABASE_ENCRYPTION = 1; */ public static final int USE_DATABASE_ENCRYPTION_VALUE = 1; + /** * * @@ -160,6 +179,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * GOOGLE_DEFAULT_ENCRYPTION = 2; */ public static final int GOOGLE_DEFAULT_ENCRYPTION_VALUE = 2; + /** * * @@ -232,7 +252,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.getDescriptor() .getEnumTypes() .get(0); @@ -261,6 +281,7 @@ private EncryptionType(int value) { public static final int ENCRYPTION_TYPE_FIELD_NUMBER = 1; private int encryptionType_ = 0; + /** * * @@ -278,6 +299,7 @@ private EncryptionType(int value) { public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -307,6 +329,7 @@ public int getEncryptionTypeValue() { @SuppressWarnings("serial") private volatile java.lang.Object kmsKeyName_ = ""; + /** * * @@ -336,6 +359,7 @@ public java.lang.String getKmsKeyName() { return s; } } + /** * * @@ -371,6 +395,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -401,6 +426,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { return kmsKeyNames_; } + /** * * @@ -431,6 +457,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -462,6 +489,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -514,11 +542,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io .getNumber()) { output.writeEnum(1, encryptionType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, kmsKeyName_); } for (int i = 0; i < kmsKeyNames_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, kmsKeyNames_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, kmsKeyNames_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -535,8 +563,8 @@ public int getSerializedSize() { .getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, encryptionType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, kmsKeyName_); } { int dataSize = 0; @@ -626,39 +654,39 @@ public static com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig public static com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -682,10 +710,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -695,7 +724,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupEncryptionConfig} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CreateBackupEncryptionConfig) com.google.spanner.admin.database.v1.CreateBackupEncryptionConfigOrBuilder { @@ -705,7 +734,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_fieldAccessorTable @@ -718,7 +747,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -779,39 +808,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig) { @@ -910,6 +906,7 @@ public Builder mergeFrom( private int bitField0_; private int encryptionType_ = 0; + /** * * @@ -927,6 +924,7 @@ public Builder mergeFrom( public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -947,6 +945,7 @@ public Builder setEncryptionTypeValue(int value) { onChanged(); return this; } + /** * * @@ -971,6 +970,7 @@ public Builder setEncryptionTypeValue(int value) { .UNRECOGNIZED : result; } + /** * * @@ -995,6 +995,7 @@ public Builder setEncryptionType( onChanged(); return this; } + /** * * @@ -1016,6 +1017,7 @@ public Builder clearEncryptionType() { } private java.lang.Object kmsKeyName_ = ""; + /** * * @@ -1044,6 +1046,7 @@ public java.lang.String getKmsKeyName() { return (java.lang.String) ref; } } + /** * * @@ -1072,6 +1075,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1099,6 +1103,7 @@ public Builder setKmsKeyName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1122,6 +1127,7 @@ public Builder clearKmsKeyName() { onChanged(); return this; } + /** * * @@ -1160,6 +1166,7 @@ private void ensureKmsKeyNamesIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -1191,6 +1198,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { kmsKeyNames_.makeImmutable(); return kmsKeyNames_; } + /** * * @@ -1221,6 +1229,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -1252,6 +1261,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -1283,6 +1293,7 @@ public java.lang.String getKmsKeyNames(int index) { public com.google.protobuf.ByteString getKmsKeyNamesBytes(int index) { return kmsKeyNames_.getByteString(index); } + /** * * @@ -1322,6 +1333,7 @@ public Builder setKmsKeyNames(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1360,6 +1372,7 @@ public Builder addKmsKeyNames(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1395,6 +1408,7 @@ public Builder addAllKmsKeyNames(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1429,6 +1443,7 @@ public Builder clearKmsKeyNames() { onChanged(); return this; } + /** * * @@ -1469,17 +1484,6 @@ public Builder addKmsKeyNamesBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CreateBackupEncryptionConfig) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java index 526b314d184..abd7c65b69b 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CreateBackupEncryptionConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CreateBackupEncryptionConfig) @@ -38,6 +40,7 @@ public interface CreateBackupEncryptionConfigOrBuilder * @return The enum numeric value on the wire for encryptionType. */ int getEncryptionTypeValue(); + /** * * @@ -72,6 +75,7 @@ public interface CreateBackupEncryptionConfigOrBuilder * @return The kmsKeyName. */ java.lang.String getKmsKeyName(); + /** * * @@ -119,6 +123,7 @@ public interface CreateBackupEncryptionConfigOrBuilder * @return A list containing the kmsKeyNames. */ java.util.List getKmsKeyNamesList(); + /** * * @@ -147,6 +152,7 @@ public interface CreateBackupEncryptionConfigOrBuilder * @return The count of kmsKeyNames. */ int getKmsKeyNamesCount(); + /** * * @@ -176,6 +182,7 @@ public interface CreateBackupEncryptionConfigOrBuilder * @return The kmsKeyNames at the given index. */ java.lang.String getKmsKeyNames(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java index a8272a520ad..1bab9d15b76 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupMetadata} */ -public final class CreateBackupMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateBackupMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CreateBackupMetadata) CreateBackupMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateBackupMetadata"); + } + // Use CreateBackupMetadata.newBuilder() to construct. - private CreateBackupMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateBackupMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CreateBackupMetadata() { database_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateBackupMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -144,6 +154,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -170,6 +181,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public static final int PROGRESS_FIELD_NUMBER = 3; private com.google.spanner.admin.database.v1.OperationProgress progress_; + /** * * @@ -187,6 +199,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public boolean hasProgress() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -206,6 +219,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -226,6 +240,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public static final int CANCEL_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -252,6 +267,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -278,6 +294,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -317,11 +334,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, database_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getProgress()); @@ -338,11 +355,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, database_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getProgress()); @@ -441,38 +458,38 @@ public static com.google.spanner.admin.database.v1.CreateBackupMetadata parseFro public static com.google.spanner.admin.database.v1.CreateBackupMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -496,10 +513,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -510,7 +528,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CreateBackupMetadata) com.google.spanner.admin.database.v1.CreateBackupMetadataOrBuilder { @@ -520,7 +538,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_fieldAccessorTable @@ -534,15 +552,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getProgressFieldBuilder(); - getCancelTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetProgressFieldBuilder(); + internalGetCancelTimeFieldBuilder(); } } @@ -616,39 +634,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CreateBackupMeta result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CreateBackupMetadata) { @@ -718,13 +703,15 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -748,6 +735,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -770,6 +758,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -792,6 +781,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -813,6 +803,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -830,6 +821,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -854,6 +846,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object database_ = ""; + /** * * @@ -876,6 +869,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -898,6 +892,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -919,6 +914,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -936,6 +932,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -960,11 +957,12 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -981,6 +979,7 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { public boolean hasProgress() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1003,6 +1002,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -1027,6 +1027,7 @@ public Builder setProgress(com.google.spanner.admin.database.v1.OperationProgres onChanged(); return this; } + /** * * @@ -1049,6 +1050,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -1079,6 +1081,7 @@ public Builder mergeProgress(com.google.spanner.admin.database.v1.OperationProgr } return this; } + /** * * @@ -1100,6 +1103,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -1114,8 +1118,9 @@ public Builder clearProgress() { public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -1136,6 +1141,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -1147,14 +1153,14 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.database.v1.OperationProgress progress = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder>( @@ -1165,11 +1171,12 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1195,6 +1202,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1226,6 +1234,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1259,6 +1268,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1289,6 +1299,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1327,6 +1338,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1357,6 +1369,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1380,8 +1393,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1411,6 +1425,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1431,14 +1446,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1448,17 +1463,6 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { return cancelTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CreateBackupMetadata) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java index 43b55e5b139..61ebc10cc35 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CreateBackupMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CreateBackupMetadata) @@ -36,6 +38,7 @@ public interface CreateBackupMetadataOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -61,6 +64,7 @@ public interface CreateBackupMetadataOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * @@ -88,6 +92,7 @@ public interface CreateBackupMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -102,6 +107,7 @@ public interface CreateBackupMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.database.v1.OperationProgress getProgress(); + /** * * @@ -138,6 +144,7 @@ public interface CreateBackupMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -161,6 +168,7 @@ public interface CreateBackupMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java index 61f93dc4347..5b825bf82f7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupRequest} */ -public final class CreateBackupRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateBackupRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CreateBackupRequest) CreateBackupRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateBackupRequest"); + } + // Use CreateBackupRequest.newBuilder() to construct. - private CreateBackupRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateBackupRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CreateBackupRequest() { backupId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateBackupRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupRequest_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -100,6 +108,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -135,6 +144,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -160,6 +170,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -188,6 +199,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { public static final int BACKUP_FIELD_NUMBER = 3; private com.google.spanner.admin.database.v1.Backup backup_; + /** * * @@ -205,6 +217,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { public boolean hasBackup() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -224,6 +237,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { ? com.google.spanner.admin.database.v1.Backup.getDefaultInstance() : backup_; } + /** * * @@ -244,6 +258,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig encryptionConfig_; + /** * * @@ -265,6 +280,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -288,6 +304,7 @@ public com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncr ? com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -325,11 +342,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, backupId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getBackup()); @@ -346,11 +363,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, backupId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getBackup()); @@ -449,38 +466,38 @@ public static com.google.spanner.admin.database.v1.CreateBackupRequest parseFrom public static com.google.spanner.admin.database.v1.CreateBackupRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -504,10 +521,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -518,7 +536,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CreateBackupRequest) com.google.spanner.admin.database.v1.CreateBackupRequestOrBuilder { @@ -528,7 +546,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_CreateBackupRequest_fieldAccessorTable @@ -542,15 +560,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getBackupFieldBuilder(); - getEncryptionConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetBackupFieldBuilder(); + internalGetEncryptionConfigFieldBuilder(); } } @@ -625,39 +643,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CreateBackupRequ result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CreateBackupRequest) { @@ -727,14 +712,14 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getBackupFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetBackupFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -758,6 +743,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -787,6 +773,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -816,6 +803,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -844,6 +832,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -868,6 +857,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -899,6 +889,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -923,6 +914,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -947,6 +939,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -970,6 +963,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -989,6 +983,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -1015,11 +1010,12 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.Backup backup_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> backupBuilder_; + /** * * @@ -1036,6 +1032,7 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { public boolean hasBackup() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1058,6 +1055,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { return backupBuilder_.getMessage(); } } + /** * * @@ -1082,6 +1080,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup value) { onChanged(); return this; } + /** * * @@ -1103,6 +1102,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup.Builder bui onChanged(); return this; } + /** * * @@ -1132,6 +1132,7 @@ public Builder mergeBackup(com.google.spanner.admin.database.v1.Backup value) { } return this; } + /** * * @@ -1153,6 +1154,7 @@ public Builder clearBackup() { onChanged(); return this; } + /** * * @@ -1167,8 +1169,9 @@ public Builder clearBackup() { public com.google.spanner.admin.database.v1.Backup.Builder getBackupBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getBackupFieldBuilder().getBuilder(); + return internalGetBackupFieldBuilder().getBuilder(); } + /** * * @@ -1189,6 +1192,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() : backup_; } } + /** * * @@ -1200,14 +1204,14 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() * .google.spanner.admin.database.v1.Backup backup = 3 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> - getBackupFieldBuilder() { + internalGetBackupFieldBuilder() { if (backupBuilder_ == null) { backupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder>( @@ -1218,11 +1222,12 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() } private com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1243,6 +1248,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1269,6 +1275,7 @@ public com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncr return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1298,6 +1305,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1324,6 +1332,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1360,6 +1369,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1385,6 +1395,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1404,8 +1415,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1431,6 +1443,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1446,14 +1459,14 @@ public Builder clearEncryptionConfig() { * .google.spanner.admin.database.v1.CreateBackupEncryptionConfig encryption_config = 4 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig.Builder, com.google.spanner.admin.database.v1.CreateBackupEncryptionConfigOrBuilder>( @@ -1463,17 +1476,6 @@ public Builder clearEncryptionConfig() { return encryptionConfigBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CreateBackupRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java index bcd63fc198b..99882444f66 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CreateBackupRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CreateBackupRequest) @@ -43,6 +45,7 @@ public interface CreateBackupRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -77,6 +80,7 @@ public interface CreateBackupRequestOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * @@ -106,6 +110,7 @@ public interface CreateBackupRequestOrBuilder * @return Whether the backup field is set. */ boolean hasBackup(); + /** * * @@ -120,6 +125,7 @@ public interface CreateBackupRequestOrBuilder * @return The backup. */ com.google.spanner.admin.database.v1.Backup getBackup(); + /** * * @@ -151,6 +157,7 @@ public interface CreateBackupRequestOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -169,6 +176,7 @@ public interface CreateBackupRequestOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.CreateBackupEncryptionConfig getEncryptionConfig(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequest.java index 023efe0cc73..6b0726c36e1 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupScheduleRequest} */ -public final class CreateBackupScheduleRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateBackupScheduleRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CreateBackupScheduleRequest) CreateBackupScheduleRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateBackupScheduleRequest"); + } + // Use CreateBackupScheduleRequest.newBuilder() to construct. - private CreateBackupScheduleRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateBackupScheduleRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CreateBackupScheduleRequest() { backupScheduleId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateBackupScheduleRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -125,6 +134,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupScheduleId_ = ""; + /** * * @@ -150,6 +160,7 @@ public java.lang.String getBackupScheduleId() { return s; } } + /** * * @@ -178,6 +189,7 @@ public com.google.protobuf.ByteString getBackupScheduleIdBytes() { public static final int BACKUP_SCHEDULE_FIELD_NUMBER = 3; private com.google.spanner.admin.database.v1.BackupSchedule backupSchedule_; + /** * * @@ -195,6 +207,7 @@ public com.google.protobuf.ByteString getBackupScheduleIdBytes() { public boolean hasBackupSchedule() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -214,6 +227,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule() { ? com.google.spanner.admin.database.v1.BackupSchedule.getDefaultInstance() : backupSchedule_; } + /** * * @@ -246,11 +260,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupScheduleId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, backupScheduleId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupScheduleId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, backupScheduleId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getBackupSchedule()); @@ -264,11 +278,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupScheduleId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, backupScheduleId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupScheduleId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, backupScheduleId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getBackupSchedule()); @@ -356,38 +370,38 @@ public static com.google.spanner.admin.database.v1.CreateBackupScheduleRequest p public static com.google.spanner.admin.database.v1.CreateBackupScheduleRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupScheduleRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -411,10 +425,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -425,7 +440,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CreateBackupScheduleRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CreateBackupScheduleRequest) com.google.spanner.admin.database.v1.CreateBackupScheduleRequestOrBuilder { @@ -435,7 +450,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_CreateBackupScheduleRequest_fieldAccessorTable @@ -449,14 +464,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getBackupScheduleFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetBackupScheduleFieldBuilder(); } } @@ -524,39 +539,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CreateBackupScheduleRequest) { @@ -625,7 +607,8 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getBackupScheduleFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetBackupScheduleFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -649,6 +632,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -673,6 +657,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -697,6 +682,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -720,6 +706,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -739,6 +726,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -765,6 +753,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupScheduleId_ = ""; + /** * * @@ -789,6 +778,7 @@ public java.lang.String getBackupScheduleId() { return (java.lang.String) ref; } } + /** * * @@ -813,6 +803,7 @@ public com.google.protobuf.ByteString getBackupScheduleIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -836,6 +827,7 @@ public Builder setBackupScheduleId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -855,6 +847,7 @@ public Builder clearBackupScheduleId() { onChanged(); return this; } + /** * * @@ -881,11 +874,12 @@ public Builder setBackupScheduleIdBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.BackupSchedule backupSchedule_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder> backupScheduleBuilder_; + /** * * @@ -902,6 +896,7 @@ public Builder setBackupScheduleIdBytes(com.google.protobuf.ByteString value) { public boolean hasBackupSchedule() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -924,6 +919,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule() { return backupScheduleBuilder_.getMessage(); } } + /** * * @@ -948,6 +944,7 @@ public Builder setBackupSchedule(com.google.spanner.admin.database.v1.BackupSche onChanged(); return this; } + /** * * @@ -970,6 +967,7 @@ public Builder setBackupSchedule( onChanged(); return this; } + /** * * @@ -1000,6 +998,7 @@ public Builder mergeBackupSchedule(com.google.spanner.admin.database.v1.BackupSc } return this; } + /** * * @@ -1021,6 +1020,7 @@ public Builder clearBackupSchedule() { onChanged(); return this; } + /** * * @@ -1035,8 +1035,9 @@ public Builder clearBackupSchedule() { public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupScheduleBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getBackupScheduleFieldBuilder().getBuilder(); + return internalGetBackupScheduleFieldBuilder().getBuilder(); } + /** * * @@ -1058,6 +1059,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSche : backupSchedule_; } } + /** * * @@ -1069,14 +1071,14 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSche * .google.spanner.admin.database.v1.BackupSchedule backup_schedule = 3 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder> - getBackupScheduleFieldBuilder() { + internalGetBackupScheduleFieldBuilder() { if (backupScheduleBuilder_ == null) { backupScheduleBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder>( @@ -1086,17 +1088,6 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSche return backupScheduleBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CreateBackupScheduleRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequestOrBuilder.java index 76e3acbdcaa..b72bf7410d3 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupScheduleRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CreateBackupScheduleRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CreateBackupScheduleRequest) @@ -38,6 +40,7 @@ public interface CreateBackupScheduleRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -67,6 +70,7 @@ public interface CreateBackupScheduleRequestOrBuilder * @return The backupScheduleId. */ java.lang.String getBackupScheduleId(); + /** * * @@ -96,6 +100,7 @@ public interface CreateBackupScheduleRequestOrBuilder * @return Whether the backupSchedule field is set. */ boolean hasBackupSchedule(); + /** * * @@ -110,6 +115,7 @@ public interface CreateBackupScheduleRequestOrBuilder * @return The backupSchedule. */ com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java index cde7548fd07..106765ec363 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CreateDatabaseMetadata} */ -public final class CreateDatabaseMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateDatabaseMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CreateDatabaseMetadata) CreateDatabaseMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateDatabaseMetadata"); + } + // Use CreateDatabaseMetadata.newBuilder() to construct. - private CreateDatabaseMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateDatabaseMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private CreateDatabaseMetadata() { database_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateDatabaseMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -91,6 +99,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -129,8 +138,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } getUnknownFields().writeTo(output); } @@ -141,8 +150,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -216,38 +225,38 @@ public static com.google.spanner.admin.database.v1.CreateDatabaseMetadata parseF public static com.google.spanner.admin.database.v1.CreateDatabaseMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateDatabaseMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateDatabaseMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateDatabaseMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -271,10 +280,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -285,7 +295,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CreateDatabaseMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CreateDatabaseMetadata) com.google.spanner.admin.database.v1.CreateDatabaseMetadataOrBuilder { @@ -295,7 +305,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_fieldAccessorTable @@ -307,7 +317,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.CreateDatabaseMetadata.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -357,39 +367,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CreateDatabaseMe } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CreateDatabaseMetadata) { @@ -460,6 +437,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -482,6 +460,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -504,6 +483,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -525,6 +505,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -542,6 +523,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -565,17 +547,6 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CreateDatabaseMetadata) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java index f2fea84cb35..05e67b26858 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CreateDatabaseMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CreateDatabaseMetadata) @@ -36,6 +38,7 @@ public interface CreateDatabaseMetadataOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java index 0ff1ec29481..37ff9fa76c1 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CreateDatabaseRequest} */ -public final class CreateDatabaseRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateDatabaseRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CreateDatabaseRequest) CreateDatabaseRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateDatabaseRequest"); + } + // Use CreateDatabaseRequest.newBuilder() to construct. - private CreateDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateDatabaseRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +60,13 @@ private CreateDatabaseRequest() { protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateDatabaseRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_fieldAccessorTable @@ -73,6 +80,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -99,6 +107,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -130,6 +139,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object createStatement_ = ""; + /** * * @@ -157,6 +167,7 @@ public java.lang.String getCreateStatement() { return s; } } + /** * * @@ -190,6 +201,7 @@ public com.google.protobuf.ByteString getCreateStatementBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList extraStatements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -207,6 +219,7 @@ public com.google.protobuf.ByteString getCreateStatementBytes() { public com.google.protobuf.ProtocolStringList getExtraStatementsList() { return extraStatements_; } + /** * * @@ -224,6 +237,7 @@ public com.google.protobuf.ProtocolStringList getExtraStatementsList() { public int getExtraStatementsCount() { return extraStatements_.size(); } + /** * * @@ -242,6 +256,7 @@ public int getExtraStatementsCount() { public java.lang.String getExtraStatements(int index) { return extraStatements_.get(index); } + /** * * @@ -263,6 +278,7 @@ public com.google.protobuf.ByteString getExtraStatementsBytes(int index) { public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; + /** * * @@ -282,6 +298,7 @@ public com.google.protobuf.ByteString getExtraStatementsBytes(int index) { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -303,6 +320,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig ? com.google.spanner.admin.database.v1.EncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -326,6 +344,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig public static final int DATABASE_DIALECT_FIELD_NUMBER = 5; private int databaseDialect_ = 0; + /** * * @@ -343,6 +362,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig public int getDatabaseDialectValue() { return databaseDialect_; } + /** * * @@ -367,6 +387,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() public static final int PROTO_DESCRIPTORS_FIELD_NUMBER = 6; private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -380,9 +401,9 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -411,14 +432,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(createStatement_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, createStatement_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(createStatement_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, createStatement_); } for (int i = 0; i < extraStatements_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, extraStatements_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, extraStatements_.getRaw(i)); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getEncryptionConfig()); @@ -440,11 +461,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(createStatement_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, createStatement_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(createStatement_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, createStatement_); } { int dataSize = 0; @@ -559,38 +580,38 @@ public static com.google.spanner.admin.database.v1.CreateDatabaseRequest parseFr public static com.google.spanner.admin.database.v1.CreateDatabaseRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateDatabaseRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateDatabaseRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateDatabaseRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CreateDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CreateDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -614,10 +635,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -628,7 +650,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CreateDatabaseRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CreateDatabaseRequest) com.google.spanner.admin.database.v1.CreateDatabaseRequestOrBuilder { @@ -638,7 +660,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_fieldAccessorTable @@ -652,14 +674,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getEncryptionConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetEncryptionConfigFieldBuilder(); } } @@ -738,39 +760,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CreateDatabaseRe result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CreateDatabaseRequest) { @@ -810,7 +799,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.CreateDatabaseRequ if (other.databaseDialect_ != 0) { setDatabaseDialectValue(other.getDatabaseDialectValue()); } - if (other.getProtoDescriptors() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getProtoDescriptors().isEmpty()) { setProtoDescriptors(other.getProtoDescriptors()); } this.mergeUnknownFields(other.getUnknownFields()); @@ -861,7 +850,7 @@ public Builder mergeFrom( case 34: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -897,6 +886,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -922,6 +912,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -947,6 +938,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -971,6 +963,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -991,6 +984,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -1018,6 +1012,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object createStatement_ = ""; + /** * * @@ -1044,6 +1039,7 @@ public java.lang.String getCreateStatement() { return (java.lang.String) ref; } } + /** * * @@ -1070,6 +1066,7 @@ public com.google.protobuf.ByteString getCreateStatementBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1095,6 +1092,7 @@ public Builder setCreateStatement(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1116,6 +1114,7 @@ public Builder clearCreateStatement() { onChanged(); return this; } + /** * * @@ -1152,6 +1151,7 @@ private void ensureExtraStatementsIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -1170,6 +1170,7 @@ public com.google.protobuf.ProtocolStringList getExtraStatementsList() { extraStatements_.makeImmutable(); return extraStatements_; } + /** * * @@ -1187,6 +1188,7 @@ public com.google.protobuf.ProtocolStringList getExtraStatementsList() { public int getExtraStatementsCount() { return extraStatements_.size(); } + /** * * @@ -1205,6 +1207,7 @@ public int getExtraStatementsCount() { public java.lang.String getExtraStatements(int index) { return extraStatements_.get(index); } + /** * * @@ -1223,6 +1226,7 @@ public java.lang.String getExtraStatements(int index) { public com.google.protobuf.ByteString getExtraStatementsBytes(int index) { return extraStatements_.getByteString(index); } + /** * * @@ -1249,6 +1253,7 @@ public Builder setExtraStatements(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1274,6 +1279,7 @@ public Builder addExtraStatements(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1296,6 +1302,7 @@ public Builder addAllExtraStatements(java.lang.Iterable values onChanged(); return this; } + /** * * @@ -1317,6 +1324,7 @@ public Builder clearExtraStatements() { onChanged(); return this; } + /** * * @@ -1345,11 +1353,12 @@ public Builder addExtraStatementsBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1368,6 +1377,7 @@ public Builder addExtraStatementsBytes(com.google.protobuf.ByteString value) { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1392,6 +1402,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1419,6 +1430,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1443,6 +1455,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1476,6 +1489,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1499,6 +1513,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1516,8 +1531,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1541,6 +1557,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1554,14 +1571,14 @@ public Builder clearEncryptionConfig() { * .google.spanner.admin.database.v1.EncryptionConfig encryption_config = 4 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder>( @@ -1572,6 +1589,7 @@ public Builder clearEncryptionConfig() { } private int databaseDialect_ = 0; + /** * * @@ -1589,6 +1607,7 @@ public Builder clearEncryptionConfig() { public int getDatabaseDialectValue() { return databaseDialect_; } + /** * * @@ -1609,6 +1628,7 @@ public Builder setDatabaseDialectValue(int value) { onChanged(); return this; } + /** * * @@ -1630,6 +1650,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() ? com.google.spanner.admin.database.v1.DatabaseDialect.UNRECOGNIZED : result; } + /** * * @@ -1653,6 +1674,7 @@ public Builder setDatabaseDialect(com.google.spanner.admin.database.v1.DatabaseD onChanged(); return this; } + /** * * @@ -1674,6 +1696,7 @@ public Builder clearDatabaseDialect() { } private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1687,9 +1710,9 @@ public Builder clearDatabaseDialect() { * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -1703,6 +1726,7 @@ public Builder clearDatabaseDialect() { public com.google.protobuf.ByteString getProtoDescriptors() { return protoDescriptors_; } + /** * * @@ -1716,9 +1740,9 @@ public com.google.protobuf.ByteString getProtoDescriptors() { * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -1738,6 +1762,7 @@ public Builder setProtoDescriptors(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1751,9 +1776,9 @@ public Builder setProtoDescriptors(com.google.protobuf.ByteString value) { * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -1770,17 +1795,6 @@ public Builder clearProtoDescriptors() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CreateDatabaseRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java index 8abc8920f33..4e20351bf43 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CreateDatabaseRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CreateDatabaseRequest) @@ -39,6 +41,7 @@ public interface CreateDatabaseRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -71,6 +74,7 @@ public interface CreateDatabaseRequestOrBuilder * @return The createStatement. */ java.lang.String getCreateStatement(); + /** * * @@ -103,6 +107,7 @@ public interface CreateDatabaseRequestOrBuilder * @return A list containing the extraStatements. */ java.util.List getExtraStatementsList(); + /** * * @@ -118,6 +123,7 @@ public interface CreateDatabaseRequestOrBuilder * @return The count of extraStatements. */ int getExtraStatementsCount(); + /** * * @@ -134,6 +140,7 @@ public interface CreateDatabaseRequestOrBuilder * @return The extraStatements at the given index. */ java.lang.String getExtraStatements(int index); + /** * * @@ -167,6 +174,7 @@ public interface CreateDatabaseRequestOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -183,6 +191,7 @@ public interface CreateDatabaseRequestOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig(); + /** * * @@ -212,6 +221,7 @@ public interface CreateDatabaseRequestOrBuilder * @return The enum numeric value on the wire for databaseDialect. */ int getDatabaseDialectValue(); + /** * * @@ -240,9 +250,9 @@ public interface CreateDatabaseRequestOrBuilder * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpec.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpec.java index d1d27938879..fea9434cd1e 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpec.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpec.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.CrontabSpec} */ -public final class CrontabSpec extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CrontabSpec extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CrontabSpec) CrontabSpecOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CrontabSpec"); + } + // Use CrontabSpec.newBuilder() to construct. - private CrontabSpec(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CrontabSpec(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CrontabSpec() { timeZone_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CrontabSpec(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_CrontabSpec_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_CrontabSpec_fieldAccessorTable @@ -70,22 +77,23 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object text_ = ""; + /** * * *
                                    * Required. Textual representation of the crontab. User can customize the
                                    * backup frequency and the backup version time using the cron
                                -   * expression. The version time must be in UTC timzeone.
                                +   * expression. The version time must be in UTC timezone.
                                    *
                                    * The backup will contain an externally consistent copy of the
                                    * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                    * 1 week and 1 month. Examples of valid cron specifications:
                                -   *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -   *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -   *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -   *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -   *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +   * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +   * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +   * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +   * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +   * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                    * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -104,22 +112,23 @@ public java.lang.String getText() { return s; } } + /** * * *
                                    * Required. Textual representation of the crontab. User can customize the
                                    * backup frequency and the backup version time using the cron
                                -   * expression. The version time must be in UTC timzeone.
                                +   * expression. The version time must be in UTC timezone.
                                    *
                                    * The backup will contain an externally consistent copy of the
                                    * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                    * 1 week and 1 month. Examples of valid cron specifications:
                                -   *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -   *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -   *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -   *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -   *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +   * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +   * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +   * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +   * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +   * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                    * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -143,6 +152,7 @@ public com.google.protobuf.ByteString getTextBytes() { @SuppressWarnings("serial") private volatile java.lang.Object timeZone_ = ""; + /** * * @@ -167,6 +177,7 @@ public java.lang.String getTimeZone() { return s; } } + /** * * @@ -194,6 +205,7 @@ public com.google.protobuf.ByteString getTimeZoneBytes() { public static final int CREATION_WINDOW_FIELD_NUMBER = 3; private com.google.protobuf.Duration creationWindow_; + /** * * @@ -217,6 +229,7 @@ public com.google.protobuf.ByteString getTimeZoneBytes() { public boolean hasCreationWindow() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -242,6 +255,7 @@ public com.google.protobuf.Duration getCreationWindow() { ? com.google.protobuf.Duration.getDefaultInstance() : creationWindow_; } + /** * * @@ -280,11 +294,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(text_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, text_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(text_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, text_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeZone_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timeZone_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(timeZone_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, timeZone_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getCreationWindow()); @@ -298,11 +312,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(text_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, text_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(text_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, text_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeZone_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timeZone_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(timeZone_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, timeZone_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getCreationWindow()); @@ -390,38 +404,38 @@ public static com.google.spanner.admin.database.v1.CrontabSpec parseFrom( public static com.google.spanner.admin.database.v1.CrontabSpec parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CrontabSpec parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CrontabSpec parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CrontabSpec parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.CrontabSpec parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.CrontabSpec parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -444,10 +458,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -458,7 +473,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.CrontabSpec} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CrontabSpec) com.google.spanner.admin.database.v1.CrontabSpecOrBuilder { @@ -468,7 +483,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_CrontabSpec_fieldAccessorTable @@ -482,14 +497,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getCreationWindowFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetCreationWindowFieldBuilder(); } } @@ -555,39 +570,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CrontabSpec resu result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.CrontabSpec) { @@ -654,7 +636,8 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getCreationWindowFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCreationWindowFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -678,22 +661,23 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object text_ = ""; + /** * * *
                                      * Required. Textual representation of the crontab. User can customize the
                                      * backup frequency and the backup version time using the cron
                                -     * expression. The version time must be in UTC timzeone.
                                +     * expression. The version time must be in UTC timezone.
                                      *
                                      * The backup will contain an externally consistent copy of the
                                      * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                      * 1 week and 1 month. Examples of valid cron specifications:
                                -     *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -     *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -     *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -     *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -     *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +     * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +     * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +     * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +     * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +     * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                      * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -711,22 +695,23 @@ public java.lang.String getText() { return (java.lang.String) ref; } } + /** * * *
                                      * Required. Textual representation of the crontab. User can customize the
                                      * backup frequency and the backup version time using the cron
                                -     * expression. The version time must be in UTC timzeone.
                                +     * expression. The version time must be in UTC timezone.
                                      *
                                      * The backup will contain an externally consistent copy of the
                                      * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                      * 1 week and 1 month. Examples of valid cron specifications:
                                -     *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -     *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -     *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -     *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -     *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +     * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +     * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +     * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +     * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +     * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                      * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -744,22 +729,23 @@ public com.google.protobuf.ByteString getTextBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                      * Required. Textual representation of the crontab. User can customize the
                                      * backup frequency and the backup version time using the cron
                                -     * expression. The version time must be in UTC timzeone.
                                +     * expression. The version time must be in UTC timezone.
                                      *
                                      * The backup will contain an externally consistent copy of the
                                      * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                      * 1 week and 1 month. Examples of valid cron specifications:
                                -     *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -     *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -     *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -     *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -     *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +     * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +     * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +     * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +     * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +     * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                      * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -776,22 +762,23 @@ public Builder setText(java.lang.String value) { onChanged(); return this; } + /** * * *
                                      * Required. Textual representation of the crontab. User can customize the
                                      * backup frequency and the backup version time using the cron
                                -     * expression. The version time must be in UTC timzeone.
                                +     * expression. The version time must be in UTC timezone.
                                      *
                                      * The backup will contain an externally consistent copy of the
                                      * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                      * 1 week and 1 month. Examples of valid cron specifications:
                                -     *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -     *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -     *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -     *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -     *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +     * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +     * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +     * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +     * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +     * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                      * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -804,22 +791,23 @@ public Builder clearText() { onChanged(); return this; } + /** * * *
                                      * Required. Textual representation of the crontab. User can customize the
                                      * backup frequency and the backup version time using the cron
                                -     * expression. The version time must be in UTC timzeone.
                                +     * expression. The version time must be in UTC timezone.
                                      *
                                      * The backup will contain an externally consistent copy of the
                                      * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                      * 1 week and 1 month. Examples of valid cron specifications:
                                -     *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -     *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -     *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -     *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -     *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +     * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +     * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +     * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +     * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +     * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                      * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -839,6 +827,7 @@ public Builder setTextBytes(com.google.protobuf.ByteString value) { } private java.lang.Object timeZone_ = ""; + /** * * @@ -862,6 +851,7 @@ public java.lang.String getTimeZone() { return (java.lang.String) ref; } } + /** * * @@ -885,6 +875,7 @@ public com.google.protobuf.ByteString getTimeZoneBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -907,6 +898,7 @@ public Builder setTimeZone(java.lang.String value) { onChanged(); return this; } + /** * * @@ -925,6 +917,7 @@ public Builder clearTimeZone() { onChanged(); return this; } + /** * * @@ -950,11 +943,12 @@ public Builder setTimeZoneBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Duration creationWindow_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> creationWindowBuilder_; + /** * * @@ -977,6 +971,7 @@ public Builder setTimeZoneBytes(com.google.protobuf.ByteString value) { public boolean hasCreationWindow() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1005,6 +1000,7 @@ public com.google.protobuf.Duration getCreationWindow() { return creationWindowBuilder_.getMessage(); } } + /** * * @@ -1035,6 +1031,7 @@ public Builder setCreationWindow(com.google.protobuf.Duration value) { onChanged(); return this; } + /** * * @@ -1062,6 +1059,7 @@ public Builder setCreationWindow(com.google.protobuf.Duration.Builder builderFor onChanged(); return this; } + /** * * @@ -1097,6 +1095,7 @@ public Builder mergeCreationWindow(com.google.protobuf.Duration value) { } return this; } + /** * * @@ -1124,6 +1123,7 @@ public Builder clearCreationWindow() { onChanged(); return this; } + /** * * @@ -1144,8 +1144,9 @@ public Builder clearCreationWindow() { public com.google.protobuf.Duration.Builder getCreationWindowBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCreationWindowFieldBuilder().getBuilder(); + return internalGetCreationWindowFieldBuilder().getBuilder(); } + /** * * @@ -1172,6 +1173,7 @@ public com.google.protobuf.DurationOrBuilder getCreationWindowOrBuilder() { : creationWindow_; } } + /** * * @@ -1189,14 +1191,14 @@ public com.google.protobuf.DurationOrBuilder getCreationWindowOrBuilder() { * .google.protobuf.Duration creation_window = 3 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> - getCreationWindowFieldBuilder() { + internalGetCreationWindowFieldBuilder() { if (creationWindowBuilder_ == null) { creationWindowBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>( @@ -1206,17 +1208,6 @@ public com.google.protobuf.DurationOrBuilder getCreationWindowOrBuilder() { return creationWindowBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CrontabSpec) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpecOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpecOrBuilder.java index 2365789b94f..03c7ce8580d 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpecOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CrontabSpecOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface CrontabSpecOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CrontabSpec) @@ -30,16 +32,16 @@ public interface CrontabSpecOrBuilder *
                                    * Required. Textual representation of the crontab. User can customize the
                                    * backup frequency and the backup version time using the cron
                                -   * expression. The version time must be in UTC timzeone.
                                +   * expression. The version time must be in UTC timezone.
                                    *
                                    * The backup will contain an externally consistent copy of the
                                    * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                    * 1 week and 1 month. Examples of valid cron specifications:
                                -   *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -   *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -   *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -   *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -   *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +   * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +   * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +   * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +   * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +   * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                    * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -47,22 +49,23 @@ public interface CrontabSpecOrBuilder * @return The text. */ java.lang.String getText(); + /** * * *
                                    * Required. Textual representation of the crontab. User can customize the
                                    * backup frequency and the backup version time using the cron
                                -   * expression. The version time must be in UTC timzeone.
                                +   * expression. The version time must be in UTC timezone.
                                    *
                                    * The backup will contain an externally consistent copy of the
                                    * database at the version time. Allowed frequencies are 12 hour, 1 day,
                                    * 1 week and 1 month. Examples of valid cron specifications:
                                -   *   * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                -   *   * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                -   *   * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                -   *   * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                -   *   * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                +   * * `0 2/12 * * * ` : every 12 hours at (2, 14) hours past midnight in UTC.
                                +   * * `0 2,14 * * * ` : every 12 hours at (2,14) hours past midnight in UTC.
                                +   * * `0 2 * * * `    : once a day at 2 past midnight in UTC.
                                +   * * `0 2 * * 0 `    : once a week every Sunday at 2 past midnight in UTC.
                                +   * * `0 2 8 * * `    : once a month on 8th day at 2 past midnight in UTC.
                                    * 
                                * * string text = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -84,6 +87,7 @@ public interface CrontabSpecOrBuilder * @return The timeZone. */ java.lang.String getTimeZone(); + /** * * @@ -118,6 +122,7 @@ public interface CrontabSpecOrBuilder * @return Whether the creationWindow field is set. */ boolean hasCreationWindow(); + /** * * @@ -138,6 +143,7 @@ public interface CrontabSpecOrBuilder * @return The creationWindow. */ com.google.protobuf.Duration getCreationWindow(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java index 402b842c1b7..6afbcbbf51e 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.Database} */ -public final class Database extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Database extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.Database) DatabaseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Database"); + } + // Use Database.newBuilder() to construct. - private Database(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Database(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +60,13 @@ private Database() { databaseDialect_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Database(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_Database_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_Database_fieldAccessorTable @@ -129,6 +136,16 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + /** * * @@ -139,6 +156,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * STATE_UNSPECIFIED = 0; */ public static final int STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -150,6 +168,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * CREATING = 1; */ public static final int CREATING_VALUE = 1; + /** * * @@ -160,6 +179,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * READY = 2; */ public static final int READY_VALUE = 2; + /** * * @@ -238,7 +258,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.Database.getDescriptor().getEnumTypes().get(0); } @@ -268,6 +288,7 @@ private State(int value) { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -295,6 +316,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -325,6 +347,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int STATE_FIELD_NUMBER = 2; private int state_ = 0; + /** * * @@ -342,6 +365,7 @@ public com.google.protobuf.ByteString getNameBytes() { public int getStateValue() { return state_; } + /** * * @@ -366,6 +390,7 @@ public com.google.spanner.admin.database.v1.Database.State getState() { public static final int CREATE_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -382,6 +407,7 @@ public com.google.spanner.admin.database.v1.Database.State getState() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -398,6 +424,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -415,6 +442,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public static final int RESTORE_INFO_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.RestoreInfo restoreInfo_; + /** * * @@ -433,6 +461,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasRestoreInfo() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -453,6 +482,7 @@ public com.google.spanner.admin.database.v1.RestoreInfo getRestoreInfo() { ? com.google.spanner.admin.database.v1.RestoreInfo.getDefaultInstance() : restoreInfo_; } + /** * * @@ -474,6 +504,7 @@ public com.google.spanner.admin.database.v1.RestoreInfoOrBuilder getRestoreInfoO public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 5; private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; + /** * * @@ -494,6 +525,7 @@ public com.google.spanner.admin.database.v1.RestoreInfoOrBuilder getRestoreInfoO public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -516,6 +548,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig ? com.google.spanner.admin.database.v1.EncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -542,6 +575,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig @SuppressWarnings("serial") private java.util.List encryptionInfo_; + /** * * @@ -567,6 +601,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig getEncryptionInfoList() { return encryptionInfo_; } + /** * * @@ -592,6 +627,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig getEncryptionInfoOrBuilderList() { return encryptionInfo_; } + /** * * @@ -616,6 +652,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig public int getEncryptionInfoCount() { return encryptionInfo_.size(); } + /** * * @@ -640,6 +677,7 @@ public int getEncryptionInfoCount() { public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(int index) { return encryptionInfo_.get(index); } + /** * * @@ -670,6 +708,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio @SuppressWarnings("serial") private volatile java.lang.Object versionRetentionPeriod_ = ""; + /** * * @@ -697,6 +736,7 @@ public java.lang.String getVersionRetentionPeriod() { return s; } } + /** * * @@ -727,6 +767,7 @@ public com.google.protobuf.ByteString getVersionRetentionPeriodBytes() { public static final int EARLIEST_VERSION_TIME_FIELD_NUMBER = 7; private com.google.protobuf.Timestamp earliestVersionTime_; + /** * * @@ -748,6 +789,7 @@ public com.google.protobuf.ByteString getVersionRetentionPeriodBytes() { public boolean hasEarliestVersionTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -771,6 +813,7 @@ public com.google.protobuf.Timestamp getEarliestVersionTime() { ? com.google.protobuf.Timestamp.getDefaultInstance() : earliestVersionTime_; } + /** * * @@ -797,6 +840,7 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() @SuppressWarnings("serial") private volatile java.lang.Object defaultLeader_ = ""; + /** * * @@ -825,6 +869,7 @@ public java.lang.String getDefaultLeader() { return s; } } + /** * * @@ -856,6 +901,7 @@ public com.google.protobuf.ByteString getDefaultLeaderBytes() { public static final int DATABASE_DIALECT_FIELD_NUMBER = 10; private int databaseDialect_ = 0; + /** * * @@ -873,6 +919,7 @@ public com.google.protobuf.ByteString getDefaultLeaderBytes() { public int getDatabaseDialectValue() { return databaseDialect_; } + /** * * @@ -897,6 +944,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() public static final int ENABLE_DROP_PROTECTION_FIELD_NUMBER = 11; private boolean enableDropProtection_ = false; + /** * * @@ -918,6 +966,7 @@ public boolean getEnableDropProtection() { public static final int RECONCILING_FIELD_NUMBER = 12; private boolean reconciling_ = false; + /** * * @@ -949,8 +998,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (state_ != com.google.spanner.admin.database.v1.Database.State.STATE_UNSPECIFIED.getNumber()) { @@ -965,8 +1014,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(5, getEncryptionConfig()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(versionRetentionPeriod_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 6, versionRetentionPeriod_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(versionRetentionPeriod_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 6, versionRetentionPeriod_); } if (((bitField0_ & 0x00000008) != 0)) { output.writeMessage(7, getEarliestVersionTime()); @@ -974,8 +1023,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < encryptionInfo_.size(); i++) { output.writeMessage(8, encryptionInfo_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(defaultLeader_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 9, defaultLeader_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(defaultLeader_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 9, defaultLeader_); } if (databaseDialect_ != com.google.spanner.admin.database.v1.DatabaseDialect.DATABASE_DIALECT_UNSPECIFIED @@ -997,8 +1046,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (state_ != com.google.spanner.admin.database.v1.Database.State.STATE_UNSPECIFIED.getNumber()) { @@ -1013,8 +1062,8 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getEncryptionConfig()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(versionRetentionPeriod_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, versionRetentionPeriod_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(versionRetentionPeriod_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(6, versionRetentionPeriod_); } if (((bitField0_ & 0x00000008) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, getEarliestVersionTime()); @@ -1022,8 +1071,8 @@ public int getSerializedSize() { for (int i = 0; i < encryptionInfo_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, encryptionInfo_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(defaultLeader_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, defaultLeader_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(defaultLeader_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(9, defaultLeader_); } if (databaseDialect_ != com.google.spanner.admin.database.v1.DatabaseDialect.DATABASE_DIALECT_UNSPECIFIED @@ -1163,38 +1212,38 @@ public static com.google.spanner.admin.database.v1.Database parseFrom( public static com.google.spanner.admin.database.v1.Database parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.Database parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.Database parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.Database parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.Database parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.Database parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1217,10 +1266,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1230,7 +1280,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.Database} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.Database) com.google.spanner.admin.database.v1.DatabaseOrBuilder { @@ -1240,7 +1290,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_Database_fieldAccessorTable @@ -1254,18 +1304,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getCreateTimeFieldBuilder(); - getRestoreInfoFieldBuilder(); - getEncryptionConfigFieldBuilder(); - getEncryptionInfoFieldBuilder(); - getEarliestVersionTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetCreateTimeFieldBuilder(); + internalGetRestoreInfoFieldBuilder(); + internalGetEncryptionConfigFieldBuilder(); + internalGetEncryptionInfoFieldBuilder(); + internalGetEarliestVersionTimeFieldBuilder(); } } @@ -1402,39 +1452,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.Database result) result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.Database) { @@ -1483,8 +1500,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Database other) { encryptionInfo_ = other.encryptionInfo_; bitField0_ = (bitField0_ & ~0x00000020); encryptionInfoBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getEncryptionInfoFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetEncryptionInfoFieldBuilder() : null; } else { encryptionInfoBuilder_.addAllMessages(other.encryptionInfo_); @@ -1553,20 +1570,22 @@ public Builder mergeFrom( } // case 16 case 26: { - input.readMessage(getCreateTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCreateTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getRestoreInfoFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetRestoreInfoFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 case 42: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -1579,7 +1598,7 @@ public Builder mergeFrom( case 58: { input.readMessage( - getEarliestVersionTimeFieldBuilder().getBuilder(), extensionRegistry); + internalGetEarliestVersionTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000080; break; } // case 58 @@ -1641,6 +1660,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -1667,6 +1687,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1693,6 +1714,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1718,6 +1740,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1739,6 +1762,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -1767,6 +1791,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private int state_ = 0; + /** * * @@ -1784,6 +1809,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public int getStateValue() { return state_; } + /** * * @@ -1804,6 +1830,7 @@ public Builder setStateValue(int value) { onChanged(); return this; } + /** * * @@ -1825,6 +1852,7 @@ public com.google.spanner.admin.database.v1.Database.State getState() { ? com.google.spanner.admin.database.v1.Database.State.UNRECOGNIZED : result; } + /** * * @@ -1848,6 +1876,7 @@ public Builder setState(com.google.spanner.admin.database.v1.Database.State valu onChanged(); return this; } + /** * * @@ -1869,11 +1898,12 @@ public Builder clearState() { } private com.google.protobuf.Timestamp createTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -1890,6 +1920,7 @@ public Builder clearState() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1912,6 +1943,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -1936,6 +1968,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1957,6 +1990,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1986,6 +2020,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -2007,6 +2042,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -2021,8 +2057,9 @@ public Builder clearCreateTime() { public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCreateTimeFieldBuilder().getBuilder(); + return internalGetCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -2043,6 +2080,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -2054,14 +2092,14 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * .google.protobuf.Timestamp create_time = 3 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreateTimeFieldBuilder() { + internalGetCreateTimeFieldBuilder() { if (createTimeBuilder_ == null) { createTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2072,11 +2110,12 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { } private com.google.spanner.admin.database.v1.RestoreInfo restoreInfo_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.RestoreInfo, com.google.spanner.admin.database.v1.RestoreInfo.Builder, com.google.spanner.admin.database.v1.RestoreInfoOrBuilder> restoreInfoBuilder_; + /** * * @@ -2094,6 +2133,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasRestoreInfo() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -2117,6 +2157,7 @@ public com.google.spanner.admin.database.v1.RestoreInfo getRestoreInfo() { return restoreInfoBuilder_.getMessage(); } } + /** * * @@ -2142,6 +2183,7 @@ public Builder setRestoreInfo(com.google.spanner.admin.database.v1.RestoreInfo v onChanged(); return this; } + /** * * @@ -2165,6 +2207,7 @@ public Builder setRestoreInfo( onChanged(); return this; } + /** * * @@ -2196,6 +2239,7 @@ public Builder mergeRestoreInfo(com.google.spanner.admin.database.v1.RestoreInfo } return this; } + /** * * @@ -2218,6 +2262,7 @@ public Builder clearRestoreInfo() { onChanged(); return this; } + /** * * @@ -2233,8 +2278,9 @@ public Builder clearRestoreInfo() { public com.google.spanner.admin.database.v1.RestoreInfo.Builder getRestoreInfoBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getRestoreInfoFieldBuilder().getBuilder(); + return internalGetRestoreInfoFieldBuilder().getBuilder(); } + /** * * @@ -2256,6 +2302,7 @@ public com.google.spanner.admin.database.v1.RestoreInfoOrBuilder getRestoreInfoO : restoreInfo_; } } + /** * * @@ -2268,14 +2315,14 @@ public com.google.spanner.admin.database.v1.RestoreInfoOrBuilder getRestoreInfoO * .google.spanner.admin.database.v1.RestoreInfo restore_info = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.RestoreInfo, com.google.spanner.admin.database.v1.RestoreInfo.Builder, com.google.spanner.admin.database.v1.RestoreInfoOrBuilder> - getRestoreInfoFieldBuilder() { + internalGetRestoreInfoFieldBuilder() { if (restoreInfoBuilder_ == null) { restoreInfoBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.RestoreInfo, com.google.spanner.admin.database.v1.RestoreInfo.Builder, com.google.spanner.admin.database.v1.RestoreInfoOrBuilder>( @@ -2286,11 +2333,12 @@ public com.google.spanner.admin.database.v1.RestoreInfoOrBuilder getRestoreInfoO } private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -2310,6 +2358,7 @@ public com.google.spanner.admin.database.v1.RestoreInfoOrBuilder getRestoreInfoO public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -2335,6 +2384,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -2363,6 +2413,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -2388,6 +2439,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -2422,6 +2474,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -2446,6 +2499,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -2464,8 +2518,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -2490,6 +2545,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -2504,14 +2560,14 @@ public Builder clearEncryptionConfig() { * .google.spanner.admin.database.v1.EncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder>( @@ -2533,7 +2589,7 @@ private void ensureEncryptionInfoIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder> @@ -2567,6 +2623,7 @@ private void ensureEncryptionInfoIsMutable() { return encryptionInfoBuilder_.getMessageList(); } } + /** * * @@ -2594,6 +2651,7 @@ public int getEncryptionInfoCount() { return encryptionInfoBuilder_.getCount(); } } + /** * * @@ -2621,6 +2679,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(int return encryptionInfoBuilder_.getMessage(index); } } + /** * * @@ -2655,6 +2714,7 @@ public Builder setEncryptionInfo( } return this; } + /** * * @@ -2686,6 +2746,7 @@ public Builder setEncryptionInfo( } return this; } + /** * * @@ -2719,6 +2780,7 @@ public Builder addEncryptionInfo(com.google.spanner.admin.database.v1.Encryption } return this; } + /** * * @@ -2753,6 +2815,7 @@ public Builder addEncryptionInfo( } return this; } + /** * * @@ -2784,6 +2847,7 @@ public Builder addEncryptionInfo( } return this; } + /** * * @@ -2815,6 +2879,7 @@ public Builder addEncryptionInfo( } return this; } + /** * * @@ -2846,6 +2911,7 @@ public Builder addAllEncryptionInfo( } return this; } + /** * * @@ -2876,6 +2942,7 @@ public Builder clearEncryptionInfo() { } return this; } + /** * * @@ -2906,6 +2973,7 @@ public Builder removeEncryptionInfo(int index) { } return this; } + /** * * @@ -2928,8 +2996,9 @@ public Builder removeEncryptionInfo(int index) { */ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder getEncryptionInfoBuilder( int index) { - return getEncryptionInfoFieldBuilder().getBuilder(index); + return internalGetEncryptionInfoFieldBuilder().getBuilder(index); } + /** * * @@ -2958,6 +3027,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio return encryptionInfoBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2986,6 +3056,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio return java.util.Collections.unmodifiableList(encryptionInfo_); } } + /** * * @@ -3007,9 +3078,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio * */ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryptionInfoBuilder() { - return getEncryptionInfoFieldBuilder() + return internalGetEncryptionInfoFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.EncryptionInfo.getDefaultInstance()); } + /** * * @@ -3032,10 +3104,11 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryption */ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryptionInfoBuilder( int index) { - return getEncryptionInfoFieldBuilder() + return internalGetEncryptionInfoFieldBuilder() .addBuilder( index, com.google.spanner.admin.database.v1.EncryptionInfo.getDefaultInstance()); } + /** * * @@ -3058,17 +3131,17 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryption */ public java.util.List getEncryptionInfoBuilderList() { - return getEncryptionInfoFieldBuilder().getBuilderList(); + return internalGetEncryptionInfoFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder> - getEncryptionInfoFieldBuilder() { + internalGetEncryptionInfoFieldBuilder() { if (encryptionInfoBuilder_ == null) { encryptionInfoBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.EncryptionInfo, com.google.spanner.admin.database.v1.EncryptionInfo.Builder, com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder>( @@ -3082,6 +3155,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryption } private java.lang.Object versionRetentionPeriod_ = ""; + /** * * @@ -3109,6 +3183,7 @@ public java.lang.String getVersionRetentionPeriod() { return (java.lang.String) ref; } } + /** * * @@ -3136,6 +3211,7 @@ public com.google.protobuf.ByteString getVersionRetentionPeriodBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3162,6 +3238,7 @@ public Builder setVersionRetentionPeriod(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3184,6 +3261,7 @@ public Builder clearVersionRetentionPeriod() { onChanged(); return this; } + /** * * @@ -3213,11 +3291,12 @@ public Builder setVersionRetentionPeriodBytes(com.google.protobuf.ByteString val } private com.google.protobuf.Timestamp earliestVersionTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> earliestVersionTimeBuilder_; + /** * * @@ -3238,6 +3317,7 @@ public Builder setVersionRetentionPeriodBytes(com.google.protobuf.ByteString val public boolean hasEarliestVersionTime() { return ((bitField0_ & 0x00000080) != 0); } + /** * * @@ -3264,6 +3344,7 @@ public com.google.protobuf.Timestamp getEarliestVersionTime() { return earliestVersionTimeBuilder_.getMessage(); } } + /** * * @@ -3292,6 +3373,7 @@ public Builder setEarliestVersionTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -3317,6 +3399,7 @@ public Builder setEarliestVersionTime(com.google.protobuf.Timestamp.Builder buil onChanged(); return this; } + /** * * @@ -3350,6 +3433,7 @@ public Builder mergeEarliestVersionTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -3375,6 +3459,7 @@ public Builder clearEarliestVersionTime() { onChanged(); return this; } + /** * * @@ -3393,8 +3478,9 @@ public Builder clearEarliestVersionTime() { public com.google.protobuf.Timestamp.Builder getEarliestVersionTimeBuilder() { bitField0_ |= 0x00000080; onChanged(); - return getEarliestVersionTimeFieldBuilder().getBuilder(); + return internalGetEarliestVersionTimeFieldBuilder().getBuilder(); } + /** * * @@ -3419,6 +3505,7 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() : earliestVersionTime_; } } + /** * * @@ -3434,14 +3521,14 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() * .google.protobuf.Timestamp earliest_version_time = 7 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEarliestVersionTimeFieldBuilder() { + internalGetEarliestVersionTimeFieldBuilder() { if (earliestVersionTimeBuilder_ == null) { earliestVersionTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -3452,6 +3539,7 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() } private java.lang.Object defaultLeader_ = ""; + /** * * @@ -3479,6 +3567,7 @@ public java.lang.String getDefaultLeader() { return (java.lang.String) ref; } } + /** * * @@ -3506,6 +3595,7 @@ public com.google.protobuf.ByteString getDefaultLeaderBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3532,6 +3622,7 @@ public Builder setDefaultLeader(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3554,6 +3645,7 @@ public Builder clearDefaultLeader() { onChanged(); return this; } + /** * * @@ -3583,6 +3675,7 @@ public Builder setDefaultLeaderBytes(com.google.protobuf.ByteString value) { } private int databaseDialect_ = 0; + /** * * @@ -3600,6 +3693,7 @@ public Builder setDefaultLeaderBytes(com.google.protobuf.ByteString value) { public int getDatabaseDialectValue() { return databaseDialect_; } + /** * * @@ -3620,6 +3714,7 @@ public Builder setDatabaseDialectValue(int value) { onChanged(); return this; } + /** * * @@ -3641,6 +3736,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() ? com.google.spanner.admin.database.v1.DatabaseDialect.UNRECOGNIZED : result; } + /** * * @@ -3664,6 +3760,7 @@ public Builder setDatabaseDialect(com.google.spanner.admin.database.v1.DatabaseD onChanged(); return this; } + /** * * @@ -3685,6 +3782,7 @@ public Builder clearDatabaseDialect() { } private boolean enableDropProtection_; + /** * * @@ -3703,6 +3801,7 @@ public Builder clearDatabaseDialect() { public boolean getEnableDropProtection() { return enableDropProtection_; } + /** * * @@ -3725,6 +3824,7 @@ public Builder setEnableDropProtection(boolean value) { onChanged(); return this; } + /** * * @@ -3747,6 +3847,7 @@ public Builder clearEnableDropProtection() { } private boolean reconciling_; + /** * * @@ -3763,6 +3864,7 @@ public Builder clearEnableDropProtection() { public boolean getReconciling() { return reconciling_; } + /** * * @@ -3783,6 +3885,7 @@ public Builder setReconciling(boolean value) { onChanged(); return this; } + /** * * @@ -3802,17 +3905,6 @@ public Builder clearReconciling() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.Database) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java index e4c35ad41f9..aa4a8200db7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,6 +29,7 @@ * * Protobuf enum {@code google.spanner.admin.database.v1.DatabaseDialect} */ +@com.google.protobuf.Generated public enum DatabaseDialect implements com.google.protobuf.ProtocolMessageEnum { /** * @@ -63,6 +65,16 @@ public enum DatabaseDialect implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DatabaseDialect"); + } + /** * * @@ -74,6 +86,7 @@ public enum DatabaseDialect implements com.google.protobuf.ProtocolMessageEnum { * DATABASE_DIALECT_UNSPECIFIED = 0; */ public static final int DATABASE_DIALECT_UNSPECIFIED_VALUE = 0; + /** * * @@ -84,6 +97,7 @@ public enum DatabaseDialect implements com.google.protobuf.ProtocolMessageEnum { * GOOGLE_STANDARD_SQL = 1; */ public static final int GOOGLE_STANDARD_SQL_VALUE = 1; + /** * * @@ -153,7 +167,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto.getDescriptor().getEnumTypes().get(0); } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseName.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseName.java index 2de1c15c9aa..55973a0c023 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseName.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java index a55aba751c2..530c25d0ff5 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface DatabaseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.Database) @@ -40,6 +42,7 @@ public interface DatabaseOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -71,6 +74,7 @@ public interface DatabaseOrBuilder * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * @@ -99,6 +103,7 @@ public interface DatabaseOrBuilder * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -112,6 +117,7 @@ public interface DatabaseOrBuilder * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -139,6 +145,7 @@ public interface DatabaseOrBuilder * @return Whether the restoreInfo field is set. */ boolean hasRestoreInfo(); + /** * * @@ -154,6 +161,7 @@ public interface DatabaseOrBuilder * @return The restoreInfo. */ com.google.spanner.admin.database.v1.RestoreInfo getRestoreInfo(); + /** * * @@ -185,6 +193,7 @@ public interface DatabaseOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -202,6 +211,7 @@ public interface DatabaseOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig(); + /** * * @@ -239,6 +249,7 @@ public interface DatabaseOrBuilder * */ java.util.List getEncryptionInfoList(); + /** * * @@ -260,6 +271,7 @@ public interface DatabaseOrBuilder * */ com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(int index); + /** * * @@ -281,6 +293,7 @@ public interface DatabaseOrBuilder * */ int getEncryptionInfoCount(); + /** * * @@ -303,6 +316,7 @@ public interface DatabaseOrBuilder */ java.util.List getEncryptionInfoOrBuilderList(); + /** * * @@ -342,6 +356,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr * @return The versionRetentionPeriod. */ java.lang.String getVersionRetentionPeriod(); + /** * * @@ -377,6 +392,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr * @return Whether the earliestVersionTime field is set. */ boolean hasEarliestVersionTime(); + /** * * @@ -395,6 +411,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr * @return The earliestVersionTime. */ com.google.protobuf.Timestamp getEarliestVersionTime(); + /** * * @@ -429,6 +446,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr * @return The defaultLeader. */ java.lang.String getDefaultLeader(); + /** * * @@ -461,6 +479,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr * @return The enum numeric value on the wire for databaseDialect. */ int getDatabaseDialectValue(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java index 7120de00d7b..b31034c9ab6 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.DatabaseRole} */ -public final class DatabaseRole extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DatabaseRole extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.DatabaseRole) DatabaseRoleOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DatabaseRole"); + } + // Use DatabaseRole.newBuilder() to construct. - private DatabaseRole(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DatabaseRole(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private DatabaseRole() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DatabaseRole(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DatabaseRole_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -132,8 +141,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -144,8 +153,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -219,38 +228,38 @@ public static com.google.spanner.admin.database.v1.DatabaseRole parseFrom( public static com.google.spanner.admin.database.v1.DatabaseRole parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DatabaseRole parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DatabaseRole parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DatabaseRole parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DatabaseRole parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DatabaseRole parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -273,10 +282,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -286,7 +296,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.DatabaseRole} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.DatabaseRole) com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder { @@ -296,7 +306,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DatabaseRole_fieldAccessorTable @@ -308,7 +318,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.DatabaseRole.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -358,39 +368,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.DatabaseRole res } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.DatabaseRole) { @@ -461,6 +438,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -485,6 +463,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -509,6 +488,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -532,6 +512,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -551,6 +532,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -576,17 +558,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.DatabaseRole) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java index 1b9e8e65cb7..d7a8f2303e1 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface DatabaseRoleOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.DatabaseRole) @@ -38,6 +40,7 @@ public interface DatabaseRoleOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java index cd72e2717ce..ab70fe88307 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -30,13 +31,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.DdlStatementActionInfo} */ -public final class DdlStatementActionInfo extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DdlStatementActionInfo extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.DdlStatementActionInfo) DdlStatementActionInfoOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DdlStatementActionInfo"); + } + // Use DdlStatementActionInfo.newBuilder() to construct. - private DdlStatementActionInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DdlStatementActionInfo(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +59,13 @@ private DdlStatementActionInfo() { entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DdlStatementActionInfo(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object action_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getAction() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getActionBytes() { @SuppressWarnings("serial") private volatile java.lang.Object entityType_ = ""; + /** * * @@ -149,6 +159,7 @@ public java.lang.String getEntityType() { return s; } } + /** * * @@ -180,6 +191,7 @@ public com.google.protobuf.ByteString getEntityTypeBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -198,6 +210,7 @@ public com.google.protobuf.ByteString getEntityTypeBytes() { public com.google.protobuf.ProtocolStringList getEntityNamesList() { return entityNames_; } + /** * * @@ -216,6 +229,7 @@ public com.google.protobuf.ProtocolStringList getEntityNamesList() { public int getEntityNamesCount() { return entityNames_.size(); } + /** * * @@ -235,6 +249,7 @@ public int getEntityNamesCount() { public java.lang.String getEntityNames(int index) { return entityNames_.get(index); } + /** * * @@ -269,14 +284,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(action_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, action_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(action_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, action_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(entityType_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, entityType_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(entityType_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, entityType_); } for (int i = 0; i < entityNames_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, entityNames_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, entityNames_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -287,11 +302,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(action_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, action_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(action_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, action_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(entityType_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, entityType_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(entityType_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, entityType_); } { int dataSize = 0; @@ -381,38 +396,38 @@ public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseF public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -436,10 +451,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -451,7 +467,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.DdlStatementActionInfo} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.DdlStatementActionInfo) com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder { @@ -461,7 +477,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable @@ -473,7 +489,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.DdlStatementActionInfo.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -532,39 +548,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.DdlStatementActi } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.DdlStatementActionInfo) { @@ -663,6 +646,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object action_ = ""; + /** * * @@ -686,6 +670,7 @@ public java.lang.String getAction() { return (java.lang.String) ref; } } + /** * * @@ -709,6 +694,7 @@ public com.google.protobuf.ByteString getActionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -731,6 +717,7 @@ public Builder setAction(java.lang.String value) { onChanged(); return this; } + /** * * @@ -749,6 +736,7 @@ public Builder clearAction() { onChanged(); return this; } + /** * * @@ -774,6 +762,7 @@ public Builder setActionBytes(com.google.protobuf.ByteString value) { } private java.lang.Object entityType_ = ""; + /** * * @@ -798,6 +787,7 @@ public java.lang.String getEntityType() { return (java.lang.String) ref; } } + /** * * @@ -822,6 +812,7 @@ public com.google.protobuf.ByteString getEntityTypeBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -845,6 +836,7 @@ public Builder setEntityType(java.lang.String value) { onChanged(); return this; } + /** * * @@ -864,6 +856,7 @@ public Builder clearEntityType() { onChanged(); return this; } + /** * * @@ -898,6 +891,7 @@ private void ensureEntityNamesIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -917,6 +911,7 @@ public com.google.protobuf.ProtocolStringList getEntityNamesList() { entityNames_.makeImmutable(); return entityNames_; } + /** * * @@ -935,6 +930,7 @@ public com.google.protobuf.ProtocolStringList getEntityNamesList() { public int getEntityNamesCount() { return entityNames_.size(); } + /** * * @@ -954,6 +950,7 @@ public int getEntityNamesCount() { public java.lang.String getEntityNames(int index) { return entityNames_.get(index); } + /** * * @@ -973,6 +970,7 @@ public java.lang.String getEntityNames(int index) { public com.google.protobuf.ByteString getEntityNamesBytes(int index) { return entityNames_.getByteString(index); } + /** * * @@ -1000,6 +998,7 @@ public Builder setEntityNames(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1026,6 +1025,7 @@ public Builder addEntityNames(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1049,6 +1049,7 @@ public Builder addAllEntityNames(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1071,6 +1072,7 @@ public Builder clearEntityNames() { onChanged(); return this; } + /** * * @@ -1099,17 +1101,6 @@ public Builder addEntityNamesBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.DdlStatementActionInfo) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java index 2e17d981b63..b70586cbe47 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface DdlStatementActionInfoOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.DdlStatementActionInfo) @@ -37,6 +39,7 @@ public interface DdlStatementActionInfoOrBuilder * @return The action. */ java.lang.String getAction(); + /** * * @@ -65,6 +68,7 @@ public interface DdlStatementActionInfoOrBuilder * @return The entityType. */ java.lang.String getEntityType(); + /** * * @@ -96,6 +100,7 @@ public interface DdlStatementActionInfoOrBuilder * @return A list containing the entityNames. */ java.util.List getEntityNamesList(); + /** * * @@ -112,6 +117,7 @@ public interface DdlStatementActionInfoOrBuilder * @return The count of entityNames. */ int getEntityNamesCount(); + /** * * @@ -129,6 +135,7 @@ public interface DdlStatementActionInfoOrBuilder * @return The entityNames at the given index. */ java.lang.String getEntityNames(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java index 14c49f95d71..0d51c9bcb18 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.DeleteBackupRequest} */ -public final class DeleteBackupRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteBackupRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.DeleteBackupRequest) DeleteBackupRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteBackupRequest"); + } + // Use DeleteBackupRequest.newBuilder() to construct. - private DeleteBackupRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteBackupRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private DeleteBackupRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteBackupRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -137,8 +146,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -149,8 +158,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -224,38 +233,38 @@ public static com.google.spanner.admin.database.v1.DeleteBackupRequest parseFrom public static com.google.spanner.admin.database.v1.DeleteBackupRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DeleteBackupRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DeleteBackupRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DeleteBackupRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DeleteBackupRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DeleteBackupRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -279,10 +288,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -293,7 +303,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.DeleteBackupRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.DeleteBackupRequest) com.google.spanner.admin.database.v1.DeleteBackupRequestOrBuilder { @@ -303,7 +313,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_fieldAccessorTable @@ -315,7 +325,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.DeleteBackupRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -365,39 +375,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.DeleteBackupRequ } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.DeleteBackupRequest) { @@ -468,6 +445,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -494,6 +472,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -520,6 +499,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -545,6 +525,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -566,6 +547,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -593,17 +575,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.DeleteBackupRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java index a80fc15aee4..07a259a9d34 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface DeleteBackupRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.DeleteBackupRequest) @@ -40,6 +42,7 @@ public interface DeleteBackupRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequest.java index cff5ce2a814..41fec9e9f7d 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.DeleteBackupScheduleRequest} */ -public final class DeleteBackupScheduleRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteBackupScheduleRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.DeleteBackupScheduleRequest) DeleteBackupScheduleRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteBackupScheduleRequest"); + } + // Use DeleteBackupScheduleRequest.newBuilder() to construct. - private DeleteBackupScheduleRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteBackupScheduleRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private DeleteBackupScheduleRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteBackupScheduleRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -137,8 +146,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -149,8 +158,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -224,38 +233,38 @@ public static com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest p public static com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -279,10 +288,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -293,7 +303,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.DeleteBackupScheduleRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.DeleteBackupScheduleRequest) com.google.spanner.admin.database.v1.DeleteBackupScheduleRequestOrBuilder { @@ -303,7 +313,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_DeleteBackupScheduleRequest_fieldAccessorTable @@ -315,7 +325,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -367,39 +377,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.DeleteBackupScheduleRequest) { @@ -472,6 +449,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -498,6 +476,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -524,6 +503,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -549,6 +529,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -570,6 +551,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -597,17 +579,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.DeleteBackupScheduleRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequestOrBuilder.java index f67464c23fb..277431696b7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupScheduleRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface DeleteBackupScheduleRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.DeleteBackupScheduleRequest) @@ -40,6 +42,7 @@ public interface DeleteBackupScheduleRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java index 1e8979c919e..eee9562f465 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.DropDatabaseRequest} */ -public final class DropDatabaseRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DropDatabaseRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.DropDatabaseRequest) DropDatabaseRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DropDatabaseRequest"); + } + // Use DropDatabaseRequest.newBuilder() to construct. - private DropDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DropDatabaseRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private DropDatabaseRequest() { database_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DropDatabaseRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -133,8 +142,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } getUnknownFields().writeTo(output); } @@ -145,8 +154,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -220,38 +229,38 @@ public static com.google.spanner.admin.database.v1.DropDatabaseRequest parseFrom public static com.google.spanner.admin.database.v1.DropDatabaseRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DropDatabaseRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DropDatabaseRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DropDatabaseRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.DropDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.DropDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -275,10 +284,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -289,7 +299,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.DropDatabaseRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.DropDatabaseRequest) com.google.spanner.admin.database.v1.DropDatabaseRequestOrBuilder { @@ -299,7 +309,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_fieldAccessorTable @@ -311,7 +321,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.DropDatabaseRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -361,39 +371,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.DropDatabaseRequ } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.DropDatabaseRequest) { @@ -464,6 +441,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -488,6 +466,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -512,6 +491,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -535,6 +515,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -554,6 +535,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -579,17 +561,6 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.DropDatabaseRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java index f68694371a0..ac33421ba89 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface DropDatabaseRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.DropDatabaseRequest) @@ -38,6 +40,7 @@ public interface DropDatabaseRequestOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java index 3115406df99..67e2abb32d8 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.EncryptionConfig} */ -public final class EncryptionConfig extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class EncryptionConfig extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.EncryptionConfig) EncryptionConfigOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "EncryptionConfig"); + } + // Use EncryptionConfig.newBuilder() to construct. - private EncryptionConfig(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private EncryptionConfig(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private EncryptionConfig() { kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new EncryptionConfig(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionConfig_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionConfig_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object kmsKeyName_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getKmsKeyName() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -152,6 +162,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { return kmsKeyNames_; } + /** * * @@ -180,6 +191,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -209,6 +221,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -253,11 +266,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, kmsKeyName_); } for (int i = 0; i < kmsKeyNames_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, kmsKeyNames_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, kmsKeyNames_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -268,8 +281,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, kmsKeyName_); } { int dataSize = 0; @@ -356,38 +369,38 @@ public static com.google.spanner.admin.database.v1.EncryptionConfig parseFrom( public static com.google.spanner.admin.database.v1.EncryptionConfig parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.EncryptionConfig parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.EncryptionConfig parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.EncryptionConfig parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.EncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.EncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -411,10 +424,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -424,7 +438,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.EncryptionConfig} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.EncryptionConfig) com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder { @@ -434,7 +448,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionConfig_fieldAccessorTable @@ -446,7 +460,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.EncryptionConfig.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -501,39 +515,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.EncryptionConfig } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.EncryptionConfig) { @@ -621,6 +602,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object kmsKeyName_ = ""; + /** * * @@ -645,6 +627,7 @@ public java.lang.String getKmsKeyName() { return (java.lang.String) ref; } } + /** * * @@ -669,6 +652,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -692,6 +676,7 @@ public Builder setKmsKeyName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -711,6 +696,7 @@ public Builder clearKmsKeyName() { onChanged(); return this; } + /** * * @@ -745,6 +731,7 @@ private void ensureKmsKeyNamesIsMutable() { } bitField0_ |= 0x00000002; } + /** * * @@ -774,6 +761,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { kmsKeyNames_.makeImmutable(); return kmsKeyNames_; } + /** * * @@ -802,6 +790,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -831,6 +820,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -860,6 +850,7 @@ public java.lang.String getKmsKeyNames(int index) { public com.google.protobuf.ByteString getKmsKeyNamesBytes(int index) { return kmsKeyNames_.getByteString(index); } + /** * * @@ -897,6 +888,7 @@ public Builder setKmsKeyNames(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -933,6 +925,7 @@ public Builder addKmsKeyNames(java.lang.String value) { onChanged(); return this; } + /** * * @@ -966,6 +959,7 @@ public Builder addAllKmsKeyNames(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -998,6 +992,7 @@ public Builder clearKmsKeyNames() { onChanged(); return this; } + /** * * @@ -1036,17 +1031,6 @@ public Builder addKmsKeyNamesBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.EncryptionConfig) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java index 2d24ffb1393..7f197529ce7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface EncryptionConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.EncryptionConfig) @@ -38,6 +40,7 @@ public interface EncryptionConfigOrBuilder * @return The kmsKeyName. */ java.lang.String getKmsKeyName(); + /** * * @@ -79,6 +82,7 @@ public interface EncryptionConfigOrBuilder * @return A list containing the kmsKeyNames. */ java.util.List getKmsKeyNamesList(); + /** * * @@ -105,6 +109,7 @@ public interface EncryptionConfigOrBuilder * @return The count of kmsKeyNames. */ int getKmsKeyNamesCount(); + /** * * @@ -132,6 +137,7 @@ public interface EncryptionConfigOrBuilder * @return The kmsKeyNames at the given index. */ java.lang.String getKmsKeyNames(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java index 9c3113e6ccf..384fafb9cfd 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.EncryptionInfo} */ -public final class EncryptionInfo extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class EncryptionInfo extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.EncryptionInfo) EncryptionInfoOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "EncryptionInfo"); + } + // Use EncryptionInfo.newBuilder() to construct. - private EncryptionInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private EncryptionInfo(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private EncryptionInfo() { kmsKeyVersion_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new EncryptionInfo(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionInfo_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionInfo_fieldAccessorTable @@ -111,6 +118,16 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Type"); + } + /** * * @@ -121,6 +138,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * TYPE_UNSPECIFIED = 0; */ public static final int TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -133,6 +151,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * GOOGLE_DEFAULT_ENCRYPTION = 1; */ public static final int GOOGLE_DEFAULT_ENCRYPTION_VALUE = 1; + /** * * @@ -204,7 +223,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.EncryptionInfo.getDescriptor() .getEnumTypes() .get(0); @@ -234,6 +253,7 @@ private Type(int value) { private int bitField0_; public static final int ENCRYPTION_TYPE_FIELD_NUMBER = 3; private int encryptionType_ = 0; + /** * * @@ -251,6 +271,7 @@ private Type(int value) { public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -275,6 +296,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Type getEncryptionTyp public static final int ENCRYPTION_STATUS_FIELD_NUMBER = 4; private com.google.rpc.Status encryptionStatus_; + /** * * @@ -293,6 +315,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Type getEncryptionTyp public boolean hasEncryptionStatus() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -313,6 +336,7 @@ public com.google.rpc.Status getEncryptionStatus() { ? com.google.rpc.Status.getDefaultInstance() : encryptionStatus_; } + /** * * @@ -336,6 +360,7 @@ public com.google.rpc.StatusOrBuilder getEncryptionStatusOrBuilder() { @SuppressWarnings("serial") private volatile java.lang.Object kmsKeyVersion_ = ""; + /** * * @@ -362,6 +387,7 @@ public java.lang.String getKmsKeyVersion() { return s; } } + /** * * @@ -403,8 +429,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyVersion_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kmsKeyVersion_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyVersion_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, kmsKeyVersion_); } if (encryptionType_ != com.google.spanner.admin.database.v1.EncryptionInfo.Type.TYPE_UNSPECIFIED.getNumber()) { @@ -422,8 +448,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyVersion_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kmsKeyVersion_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyVersion_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, kmsKeyVersion_); } if (encryptionType_ != com.google.spanner.admin.database.v1.EncryptionInfo.Type.TYPE_UNSPECIFIED.getNumber()) { @@ -515,38 +541,38 @@ public static com.google.spanner.admin.database.v1.EncryptionInfo parseFrom( public static com.google.spanner.admin.database.v1.EncryptionInfo parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.EncryptionInfo parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.EncryptionInfo parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.EncryptionInfo parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.EncryptionInfo parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.EncryptionInfo parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -569,10 +595,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -582,7 +609,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.EncryptionInfo} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.EncryptionInfo) com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder { @@ -592,7 +619,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionInfo_fieldAccessorTable @@ -606,14 +633,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getEncryptionStatusFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetEncryptionStatusFieldBuilder(); } } @@ -679,39 +706,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.EncryptionInfo r result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.EncryptionInfo) { @@ -777,7 +771,7 @@ public Builder mergeFrom( case 34: { input.readMessage( - getEncryptionStatusFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionStatusFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 34 @@ -801,6 +795,7 @@ public Builder mergeFrom( private int bitField0_; private int encryptionType_ = 0; + /** * * @@ -818,6 +813,7 @@ public Builder mergeFrom( public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -838,6 +834,7 @@ public Builder setEncryptionTypeValue(int value) { onChanged(); return this; } + /** * * @@ -859,6 +856,7 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Type getEncryptionTyp ? com.google.spanner.admin.database.v1.EncryptionInfo.Type.UNRECOGNIZED : result; } + /** * * @@ -883,6 +881,7 @@ public Builder setEncryptionType( onChanged(); return this; } + /** * * @@ -904,9 +903,10 @@ public Builder clearEncryptionType() { } private com.google.rpc.Status encryptionStatus_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> encryptionStatusBuilder_; + /** * * @@ -924,6 +924,7 @@ public Builder clearEncryptionType() { public boolean hasEncryptionStatus() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -947,6 +948,7 @@ public com.google.rpc.Status getEncryptionStatus() { return encryptionStatusBuilder_.getMessage(); } } + /** * * @@ -972,6 +974,7 @@ public Builder setEncryptionStatus(com.google.rpc.Status value) { onChanged(); return this; } + /** * * @@ -994,6 +997,7 @@ public Builder setEncryptionStatus(com.google.rpc.Status.Builder builderForValue onChanged(); return this; } + /** * * @@ -1024,6 +1028,7 @@ public Builder mergeEncryptionStatus(com.google.rpc.Status value) { } return this; } + /** * * @@ -1046,6 +1051,7 @@ public Builder clearEncryptionStatus() { onChanged(); return this; } + /** * * @@ -1061,8 +1067,9 @@ public Builder clearEncryptionStatus() { public com.google.rpc.Status.Builder getEncryptionStatusBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getEncryptionStatusFieldBuilder().getBuilder(); + return internalGetEncryptionStatusFieldBuilder().getBuilder(); } + /** * * @@ -1084,6 +1091,7 @@ public com.google.rpc.StatusOrBuilder getEncryptionStatusOrBuilder() { : encryptionStatus_; } } + /** * * @@ -1096,12 +1104,12 @@ public com.google.rpc.StatusOrBuilder getEncryptionStatusOrBuilder() { * .google.rpc.Status encryption_status = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> - getEncryptionStatusFieldBuilder() { + internalGetEncryptionStatusFieldBuilder() { if (encryptionStatusBuilder_ == null) { encryptionStatusBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder>( @@ -1112,6 +1120,7 @@ public com.google.rpc.StatusOrBuilder getEncryptionStatusOrBuilder() { } private java.lang.Object kmsKeyVersion_ = ""; + /** * * @@ -1137,6 +1146,7 @@ public java.lang.String getKmsKeyVersion() { return (java.lang.String) ref; } } + /** * * @@ -1162,6 +1172,7 @@ public com.google.protobuf.ByteString getKmsKeyVersionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1186,6 +1197,7 @@ public Builder setKmsKeyVersion(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1206,6 +1218,7 @@ public Builder clearKmsKeyVersion() { onChanged(); return this; } + /** * * @@ -1232,17 +1245,6 @@ public Builder setKmsKeyVersionBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.EncryptionInfo) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java index bd281d5d7e0..be33d9db1d8 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface EncryptionInfoOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.EncryptionInfo) @@ -38,6 +40,7 @@ public interface EncryptionInfoOrBuilder * @return The enum numeric value on the wire for encryptionType. */ int getEncryptionTypeValue(); + /** * * @@ -68,6 +71,7 @@ public interface EncryptionInfoOrBuilder * @return Whether the encryptionStatus field is set. */ boolean hasEncryptionStatus(); + /** * * @@ -83,6 +87,7 @@ public interface EncryptionInfoOrBuilder * @return The encryptionStatus. */ com.google.rpc.Status getEncryptionStatus(); + /** * * @@ -112,6 +117,7 @@ public interface EncryptionInfoOrBuilder * @return The kmsKeyVersion. */ java.lang.String getKmsKeyVersion(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpec.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpec.java index 6c5e6b9c47a..4846177aa30 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpec.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpec.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -30,31 +31,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.FullBackupSpec} */ -public final class FullBackupSpec extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class FullBackupSpec extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.FullBackupSpec) FullBackupSpecOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "FullBackupSpec"); + } + // Use FullBackupSpec.newBuilder() to construct. - private FullBackupSpec(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private FullBackupSpec(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private FullBackupSpec() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new FullBackupSpec(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_FullBackupSpec_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_FullBackupSpec_fieldAccessorTable @@ -155,38 +162,38 @@ public static com.google.spanner.admin.database.v1.FullBackupSpec parseFrom( public static com.google.spanner.admin.database.v1.FullBackupSpec parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.FullBackupSpec parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.FullBackupSpec parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.FullBackupSpec parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.FullBackupSpec parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.FullBackupSpec parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -209,10 +216,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -224,7 +232,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.FullBackupSpec} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.FullBackupSpec) com.google.spanner.admin.database.v1.FullBackupSpecOrBuilder { @@ -234,7 +242,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_FullBackupSpec_fieldAccessorTable @@ -246,7 +254,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.FullBackupSpec.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -284,39 +292,6 @@ public com.google.spanner.admin.database.v1.FullBackupSpec buildPartial() { return result; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.FullBackupSpec) { @@ -373,17 +348,6 @@ public Builder mergeFrom( return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.FullBackupSpec) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpecOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpecOrBuilder.java index 814fd9f6377..bdcd4d1c743 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpecOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/FullBackupSpecOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface FullBackupSpecOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.FullBackupSpec) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java index 595c1d41ee6..0542dcaa64e 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.GetBackupRequest} */ -public final class GetBackupRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetBackupRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.GetBackupRequest) GetBackupRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetBackupRequest"); + } + // Use GetBackupRequest.newBuilder() to construct. - private GetBackupRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetBackupRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetBackupRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetBackupRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_GetBackupRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -137,8 +146,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -149,8 +158,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -224,38 +233,38 @@ public static com.google.spanner.admin.database.v1.GetBackupRequest parseFrom( public static com.google.spanner.admin.database.v1.GetBackupRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetBackupRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetBackupRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetBackupRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetBackupRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetBackupRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -279,10 +288,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -293,7 +303,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.GetBackupRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.GetBackupRequest) com.google.spanner.admin.database.v1.GetBackupRequestOrBuilder { @@ -303,7 +313,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_GetBackupRequest_fieldAccessorTable @@ -315,7 +325,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.GetBackupRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -365,39 +375,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.GetBackupRequest } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.GetBackupRequest) { @@ -468,6 +445,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -494,6 +472,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -520,6 +499,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -545,6 +525,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -566,6 +547,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -593,17 +575,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.GetBackupRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java index 329b84341fc..0bc8d59dc0a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface GetBackupRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.GetBackupRequest) @@ -40,6 +42,7 @@ public interface GetBackupRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequest.java index f345cb2e1d5..43130fde2cb 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.GetBackupScheduleRequest} */ -public final class GetBackupScheduleRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetBackupScheduleRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.GetBackupScheduleRequest) GetBackupScheduleRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetBackupScheduleRequest"); + } + // Use GetBackupScheduleRequest.newBuilder() to construct. - private GetBackupScheduleRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetBackupScheduleRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetBackupScheduleRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetBackupScheduleRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -137,8 +146,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -149,8 +158,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -224,38 +233,38 @@ public static com.google.spanner.admin.database.v1.GetBackupScheduleRequest pars public static com.google.spanner.admin.database.v1.GetBackupScheduleRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetBackupScheduleRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -279,10 +288,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -293,7 +303,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.GetBackupScheduleRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.GetBackupScheduleRequest) com.google.spanner.admin.database.v1.GetBackupScheduleRequestOrBuilder { @@ -303,7 +313,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_GetBackupScheduleRequest_fieldAccessorTable @@ -315,7 +325,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.GetBackupScheduleRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -367,39 +377,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.GetBackupScheduleRequest) { @@ -471,6 +448,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -497,6 +475,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -523,6 +502,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -548,6 +528,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -569,6 +550,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -596,17 +578,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.GetBackupScheduleRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequestOrBuilder.java index 855a69b57df..1eaf5055ae4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupScheduleRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface GetBackupScheduleRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.GetBackupScheduleRequest) @@ -40,6 +42,7 @@ public interface GetBackupScheduleRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java index b871a491f66..a65174c9b14 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.GetDatabaseDdlRequest} */ -public final class GetDatabaseDdlRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetDatabaseDdlRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.GetDatabaseDdlRequest) GetDatabaseDdlRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetDatabaseDdlRequest"); + } + // Use GetDatabaseDdlRequest.newBuilder() to construct. - private GetDatabaseDdlRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetDatabaseDdlRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetDatabaseDdlRequest() { database_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetDatabaseDdlRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -137,8 +146,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } getUnknownFields().writeTo(output); } @@ -149,8 +158,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -224,38 +233,38 @@ public static com.google.spanner.admin.database.v1.GetDatabaseDdlRequest parseFr public static com.google.spanner.admin.database.v1.GetDatabaseDdlRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -279,10 +288,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -293,7 +303,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.GetDatabaseDdlRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.GetDatabaseDdlRequest) com.google.spanner.admin.database.v1.GetDatabaseDdlRequestOrBuilder { @@ -303,7 +313,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_fieldAccessorTable @@ -315,7 +325,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.GetDatabaseDdlRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -365,39 +375,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.GetDatabaseDdlRe } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.GetDatabaseDdlRequest) { @@ -468,6 +445,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -494,6 +472,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -520,6 +499,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -545,6 +525,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -566,6 +547,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -593,17 +575,6 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.GetDatabaseDdlRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java index 63c9f230943..6056b044d99 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface GetDatabaseDdlRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.GetDatabaseDdlRequest) @@ -40,6 +42,7 @@ public interface GetDatabaseDdlRequestOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java index 0581dcfa7dd..9215a815e3c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.GetDatabaseDdlResponse} */ -public final class GetDatabaseDdlResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetDatabaseDdlResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.GetDatabaseDdlResponse) GetDatabaseDdlResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetDatabaseDdlResponse"); + } + // Use GetDatabaseDdlResponse.newBuilder() to construct. - private GetDatabaseDdlResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetDatabaseDdlResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private GetDatabaseDdlResponse() { protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetDatabaseDdlResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -85,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public com.google.protobuf.ProtocolStringList getStatementsList() { return statements_; } + /** * * @@ -100,6 +109,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { public int getStatementsCount() { return statements_.size(); } + /** * * @@ -116,6 +126,7 @@ public int getStatementsCount() { public java.lang.String getStatements(int index) { return statements_.get(index); } + /** * * @@ -135,6 +146,7 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { public static final int PROTO_DESCRIPTORS_FIELD_NUMBER = 2; private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -170,7 +182,7 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { for (int i = 0; i < statements_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, statements_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 1, statements_.getRaw(i)); } if (!protoDescriptors_.isEmpty()) { output.writeBytes(2, protoDescriptors_); @@ -272,38 +284,38 @@ public static com.google.spanner.admin.database.v1.GetDatabaseDdlResponse parseF public static com.google.spanner.admin.database.v1.GetDatabaseDdlResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseDdlResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -327,10 +339,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -341,7 +354,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.GetDatabaseDdlResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.GetDatabaseDdlResponse) com.google.spanner.admin.database.v1.GetDatabaseDdlResponseOrBuilder { @@ -351,7 +364,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_fieldAccessorTable @@ -363,7 +376,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.GetDatabaseDdlResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -418,39 +431,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.GetDatabaseDdlRe } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.GetDatabaseDdlResponse) { @@ -474,7 +454,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.GetDatabaseDdlResp } onChanged(); } - if (other.getProtoDescriptors() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getProtoDescriptors().isEmpty()) { setProtoDescriptors(other.getProtoDescriptors()); } this.mergeUnknownFields(other.getUnknownFields()); @@ -544,6 +524,7 @@ private void ensureStatementsIsMutable() { } bitField0_ |= 0x00000001; } + /** * * @@ -560,6 +541,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { statements_.makeImmutable(); return statements_; } + /** * * @@ -575,6 +557,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { public int getStatementsCount() { return statements_.size(); } + /** * * @@ -591,6 +574,7 @@ public int getStatementsCount() { public java.lang.String getStatements(int index) { return statements_.get(index); } + /** * * @@ -607,6 +591,7 @@ public java.lang.String getStatements(int index) { public com.google.protobuf.ByteString getStatementsBytes(int index) { return statements_.getByteString(index); } + /** * * @@ -631,6 +616,7 @@ public Builder setStatements(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -654,6 +640,7 @@ public Builder addStatements(java.lang.String value) { onChanged(); return this; } + /** * * @@ -674,6 +661,7 @@ public Builder addAllStatements(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -693,6 +681,7 @@ public Builder clearStatements() { onChanged(); return this; } + /** * * @@ -719,6 +708,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -738,6 +728,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { public com.google.protobuf.ByteString getProtoDescriptors() { return protoDescriptors_; } + /** * * @@ -763,6 +754,7 @@ public Builder setProtoDescriptors(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -785,17 +777,6 @@ public Builder clearProtoDescriptors() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.GetDatabaseDdlResponse) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java index 8fd736e032d..8404df27654 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface GetDatabaseDdlResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.GetDatabaseDdlResponse) @@ -37,6 +39,7 @@ public interface GetDatabaseDdlResponseOrBuilder * @return A list containing the statements. */ java.util.List getStatementsList(); + /** * * @@ -50,6 +53,7 @@ public interface GetDatabaseDdlResponseOrBuilder * @return The count of statements. */ int getStatementsCount(); + /** * * @@ -64,6 +68,7 @@ public interface GetDatabaseDdlResponseOrBuilder * @return The statements at the given index. */ java.lang.String getStatements(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java index c7ff65e5cd9..66ba99f8662 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.GetDatabaseRequest} */ -public final class GetDatabaseRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetDatabaseRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.GetDatabaseRequest) GetDatabaseRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetDatabaseRequest"); + } + // Use GetDatabaseRequest.newBuilder() to construct. - private GetDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetDatabaseRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetDatabaseRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetDatabaseRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -135,8 +144,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -147,8 +156,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -222,38 +231,38 @@ public static com.google.spanner.admin.database.v1.GetDatabaseRequest parseFrom( public static com.google.spanner.admin.database.v1.GetDatabaseRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetDatabaseRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.GetDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.GetDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -277,10 +286,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -291,7 +301,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.GetDatabaseRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.GetDatabaseRequest) com.google.spanner.admin.database.v1.GetDatabaseRequestOrBuilder { @@ -301,7 +311,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_fieldAccessorTable @@ -313,7 +323,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.GetDatabaseRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -363,39 +373,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.GetDatabaseReque } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.GetDatabaseRequest) { @@ -466,6 +443,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -491,6 +469,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -516,6 +495,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -540,6 +520,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -560,6 +541,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -586,17 +568,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.GetDatabaseRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java index 20184567075..75afb8431e3 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface GetDatabaseRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.GetDatabaseRequest) @@ -39,6 +41,7 @@ public interface GetDatabaseRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpec.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpec.java index 05db35c91a5..159e18a5b71 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpec.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpec.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -33,31 +34,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.IncrementalBackupSpec} */ -public final class IncrementalBackupSpec extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class IncrementalBackupSpec extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.IncrementalBackupSpec) IncrementalBackupSpecOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "IncrementalBackupSpec"); + } + // Use IncrementalBackupSpec.newBuilder() to construct. - private IncrementalBackupSpec(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private IncrementalBackupSpec(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private IncrementalBackupSpec() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new IncrementalBackupSpec(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_fieldAccessorTable @@ -158,38 +165,38 @@ public static com.google.spanner.admin.database.v1.IncrementalBackupSpec parseFr public static com.google.spanner.admin.database.v1.IncrementalBackupSpec parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.IncrementalBackupSpec parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.IncrementalBackupSpec parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.IncrementalBackupSpec parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.IncrementalBackupSpec parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.IncrementalBackupSpec parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -213,10 +220,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -231,7 +239,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.IncrementalBackupSpec} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.IncrementalBackupSpec) com.google.spanner.admin.database.v1.IncrementalBackupSpecOrBuilder { @@ -241,7 +249,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_fieldAccessorTable @@ -253,7 +261,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.IncrementalBackupSpec.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -291,39 +299,6 @@ public com.google.spanner.admin.database.v1.IncrementalBackupSpec buildPartial() return result; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.IncrementalBackupSpec) { @@ -380,17 +355,6 @@ public Builder mergeFrom( return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.IncrementalBackupSpec) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpecOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpecOrBuilder.java index 081548943b6..46ed7d32797 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpecOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/IncrementalBackupSpecOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface IncrementalBackupSpecOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.IncrementalBackupSpec) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InstanceName.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InstanceName.java index 3eb8a8dd67b..0c1510da67d 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InstanceName.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InstanceName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationRequest.java new file mode 100644 index 00000000000..bafd0df94a6 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationRequest.java @@ -0,0 +1,1385 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
                                + * Internal request proto, do not use directly.
                                + * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest} + */ +@com.google.protobuf.Generated +public final class InternalUpdateGraphOperationRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) + InternalUpdateGraphOperationRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "InternalUpdateGraphOperationRequest"); + } + + // Use InternalUpdateGraphOperationRequest.newBuilder() to construct. + private InternalUpdateGraphOperationRequest( + com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private InternalUpdateGraphOperationRequest() { + database_ = ""; + operationId_ = ""; + vmIdentityToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest.class, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest.Builder.class); + } + + private int bitField0_; + public static final int DATABASE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object database_ = ""; + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The database. + */ + @java.lang.Override + public java.lang.String getDatabase() { + java.lang.Object ref = database_; + 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(); + database_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for database. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDatabaseBytes() { + java.lang.Object ref = database_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + database_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int OPERATION_ID_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object operationId_ = ""; + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The operationId. + */ + @java.lang.Override + public java.lang.String getOperationId() { + java.lang.Object ref = operationId_; + 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(); + operationId_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for operationId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getOperationIdBytes() { + java.lang.Object ref = operationId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + operationId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int VM_IDENTITY_TOKEN_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object vmIdentityToken_ = ""; + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The vmIdentityToken. + */ + @java.lang.Override + public java.lang.String getVmIdentityToken() { + java.lang.Object ref = vmIdentityToken_; + 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(); + vmIdentityToken_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for vmIdentityToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getVmIdentityTokenBytes() { + java.lang.Object ref = vmIdentityToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + vmIdentityToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PROGRESS_FIELD_NUMBER = 3; + private double progress_ = 0D; + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * double progress = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The progress. + */ + @java.lang.Override + public double getProgress() { + return progress_; + } + + public static final int STATUS_FIELD_NUMBER = 6; + private com.google.rpc.Status status_; + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the status field is set. + */ + @java.lang.Override + public boolean hasStatus() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The status. + */ + @java.lang.Override + public com.google.rpc.Status getStatus() { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } + + 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.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operationId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, operationId_); + } + if (java.lang.Double.doubleToRawLongBits(progress_) != 0) { + output.writeDouble(3, progress_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(vmIdentityToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, vmIdentityToken_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(6, getStatus()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operationId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, operationId_); + } + if (java.lang.Double.doubleToRawLongBits(progress_) != 0) { + size += com.google.protobuf.CodedOutputStream.computeDoubleSize(3, progress_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(vmIdentityToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, vmIdentityToken_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getStatus()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest other = + (com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) obj; + + if (!getDatabase().equals(other.getDatabase())) return false; + if (!getOperationId().equals(other.getOperationId())) return false; + if (!getVmIdentityToken().equals(other.getVmIdentityToken())) return false; + if (java.lang.Double.doubleToLongBits(getProgress()) + != java.lang.Double.doubleToLongBits(other.getProgress())) return false; + if (hasStatus() != other.hasStatus()) return false; + if (hasStatus()) { + if (!getStatus().equals(other.getStatus())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DATABASE_FIELD_NUMBER; + hash = (53 * hash) + getDatabase().hashCode(); + hash = (37 * hash) + OPERATION_ID_FIELD_NUMBER; + hash = (53 * hash) + getOperationId().hashCode(); + hash = (37 * hash) + VM_IDENTITY_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getVmIdentityToken().hashCode(); + hash = (37 * hash) + PROGRESS_FIELD_NUMBER; + hash = + (53 * hash) + + com.google.protobuf.Internal.hashLong( + java.lang.Double.doubleToLongBits(getProgress())); + if (hasStatus()) { + hash = (37 * hash) + STATUS_FIELD_NUMBER; + hash = (53 * hash) + getStatus().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * Internal request proto, do not use directly.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest.class, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest.Builder + .class); + } + + // Construct using + // com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStatusFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + database_ = ""; + operationId_ = ""; + vmIdentityToken_ = ""; + progress_ = 0D; + status_ = null; + if (statusBuilder_ != null) { + statusBuilder_.dispose(); + statusBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest build() { + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest buildPartial() { + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest result = + new com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.database_ = database_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.operationId_ = operationId_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.vmIdentityToken_ = vmIdentityToken_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.progress_ = progress_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000010) != 0)) { + result.status_ = statusBuilder_ == null ? status_ : statusBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) { + return mergeFrom( + (com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest other) { + if (other + == com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + .getDefaultInstance()) return this; + if (!other.getDatabase().isEmpty()) { + database_ = other.database_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getOperationId().isEmpty()) { + operationId_ = other.operationId_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getVmIdentityToken().isEmpty()) { + vmIdentityToken_ = other.vmIdentityToken_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (java.lang.Double.doubleToRawLongBits(other.getProgress()) != 0) { + setProgress(other.getProgress()); + } + if (other.hasStatus()) { + mergeStatus(other.getStatus()); + } + 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: + { + database_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + operationId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 25: + { + progress_ = input.readDouble(); + bitField0_ |= 0x00000008; + break; + } // case 25 + case 42: + { + vmIdentityToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 42 + case 50: + { + input.readMessage(internalGetStatusFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + 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 java.lang.Object database_ = ""; + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The database. + */ + public java.lang.String getDatabase() { + java.lang.Object ref = database_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + database_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for database. + */ + public com.google.protobuf.ByteString getDatabaseBytes() { + java.lang.Object ref = database_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + database_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The database to set. + * @return This builder for chaining. + */ + public Builder setDatabase(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + database_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearDatabase() { + database_ = getDefaultInstance().getDatabase(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for database to set. + * @return This builder for chaining. + */ + public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + database_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object operationId_ = ""; + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The operationId. + */ + public java.lang.String getOperationId() { + java.lang.Object ref = operationId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + operationId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for operationId. + */ + public com.google.protobuf.ByteString getOperationIdBytes() { + java.lang.Object ref = operationId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + operationId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The operationId to set. + * @return This builder for chaining. + */ + public Builder setOperationId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + operationId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearOperationId() { + operationId_ = getDefaultInstance().getOperationId(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for operationId to set. + * @return This builder for chaining. + */ + public Builder setOperationIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + operationId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object vmIdentityToken_ = ""; + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The vmIdentityToken. + */ + public java.lang.String getVmIdentityToken() { + java.lang.Object ref = vmIdentityToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + vmIdentityToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for vmIdentityToken. + */ + public com.google.protobuf.ByteString getVmIdentityTokenBytes() { + java.lang.Object ref = vmIdentityToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + vmIdentityToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The vmIdentityToken to set. + * @return This builder for chaining. + */ + public Builder setVmIdentityToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + vmIdentityToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearVmIdentityToken() { + vmIdentityToken_ = getDefaultInstance().getVmIdentityToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for vmIdentityToken to set. + * @return This builder for chaining. + */ + public Builder setVmIdentityTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + vmIdentityToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private double progress_; + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * double progress = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The progress. + */ + @java.lang.Override + public double getProgress() { + return progress_; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * double progress = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The progress to set. + * @return This builder for chaining. + */ + public Builder setProgress(double value) { + + progress_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * double progress = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearProgress() { + bitField0_ = (bitField0_ & ~0x00000008); + progress_ = 0D; + onChanged(); + return this; + } + + private com.google.rpc.Status status_; + private com.google.protobuf.SingleFieldBuilder< + com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> + statusBuilder_; + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the status field is set. + */ + public boolean hasStatus() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The status. + */ + public com.google.rpc.Status getStatus() { + if (statusBuilder_ == null) { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } else { + return statusBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder setStatus(com.google.rpc.Status value) { + if (statusBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + status_ = value; + } else { + statusBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder setStatus(com.google.rpc.Status.Builder builderForValue) { + if (statusBuilder_ == null) { + status_ = builderForValue.build(); + } else { + statusBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder mergeStatus(com.google.rpc.Status value) { + if (statusBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && status_ != null + && status_ != com.google.rpc.Status.getDefaultInstance()) { + getStatusBuilder().mergeFrom(value); + } else { + status_ = value; + } + } else { + statusBuilder_.mergeFrom(value); + } + if (status_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder clearStatus() { + bitField0_ = (bitField0_ & ~0x00000010); + status_ = null; + if (statusBuilder_ != null) { + statusBuilder_.dispose(); + statusBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + public com.google.rpc.Status.Builder getStatusBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return internalGetStatusFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { + if (statusBuilder_ != null) { + return statusBuilder_.getMessageOrBuilder(); + } else { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } + } + + /** + * + * + *
                                +     * Internal field, do not use directly.
                                +     * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> + internalGetStatusFieldBuilder() { + if (statusBuilder_ == null) { + statusBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.rpc.Status, + com.google.rpc.Status.Builder, + com.google.rpc.StatusOrBuilder>(getStatus(), getParentForChildren(), isClean()); + status_ = null; + } + return statusBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) + private static final com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest(); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public InternalUpdateGraphOperationRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationRequestOrBuilder.java new file mode 100644 index 00000000000..025fc44530e --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationRequestOrBuilder.java @@ -0,0 +1,160 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +@com.google.protobuf.Generated +public interface InternalUpdateGraphOperationRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.InternalUpdateGraphOperationRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The database. + */ + java.lang.String getDatabase(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * + * string database = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for database. + */ + com.google.protobuf.ByteString getDatabaseBytes(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The operationId. + */ + java.lang.String getOperationId(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string operation_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for operationId. + */ + com.google.protobuf.ByteString getOperationIdBytes(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The vmIdentityToken. + */ + java.lang.String getVmIdentityToken(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * string vm_identity_token = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for vmIdentityToken. + */ + com.google.protobuf.ByteString getVmIdentityTokenBytes(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * double progress = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The progress. + */ + double getProgress(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the status field is set. + */ + boolean hasStatus(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The status. + */ + com.google.rpc.Status getStatus(); + + /** + * + * + *
                                +   * Internal field, do not use directly.
                                +   * 
                                + * + * .google.rpc.Status status = 6 [(.google.api.field_behavior) = OPTIONAL]; + */ + com.google.rpc.StatusOrBuilder getStatusOrBuilder(); +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationResponse.java new file mode 100644 index 00000000000..e4c6f7589c1 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationResponse.java @@ -0,0 +1,415 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
                                + * Internal response proto, do not use directly.
                                + * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse} + */ +@com.google.protobuf.Generated +public final class InternalUpdateGraphOperationResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) + InternalUpdateGraphOperationResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "InternalUpdateGraphOperationResponse"); + } + + // Use InternalUpdateGraphOperationResponse.newBuilder() to construct. + private InternalUpdateGraphOperationResponse( + com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private InternalUpdateGraphOperationResponse() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse.class, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse.Builder + .class); + } + + 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 { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse other = + (com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) obj; + + 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 = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * Internal response proto, do not use directly.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse.class, + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse.Builder + .class); + } + + // Construct using + // com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse build() { + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + buildPartial() { + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse result = + new com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) { + return mergeFrom( + (com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse other) { + if (other + == com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + .getDefaultInstance()) return this; + 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; + 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; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) + private static final com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse(); + } + + public static com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public InternalUpdateGraphOperationResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationResponseOrBuilder.java new file mode 100644 index 00000000000..17538af31a4 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/InternalUpdateGraphOperationResponseOrBuilder.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +@com.google.protobuf.Generated +public interface InternalUpdateGraphOperationResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.InternalUpdateGraphOperationResponse) + com.google.protobuf.MessageOrBuilder {} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java index a9b50cb29c2..2371ce6326f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupOperationsRequest} */ -public final class ListBackupOperationsRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListBackupOperationsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListBackupOperationsRequest) ListBackupOperationsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListBackupOperationsRequest"); + } + // Use ListBackupOperationsRequest.newBuilder() to construct. - private ListBackupOperationsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListBackupOperationsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private ListBackupOperationsRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListBackupOperationsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -127,6 +136,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -142,19 +152,19 @@ public com.google.protobuf.ByteString getParentBytes() { * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -162,45 +172,45 @@ public com.google.protobuf.ByteString getParentBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -219,6 +229,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -234,19 +245,19 @@ public java.lang.String getFilter() { * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -254,45 +265,45 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -314,6 +325,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -335,6 +347,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -362,6 +375,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -404,17 +418,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, filter_); } if (pageSize_ != 0) { output.writeInt32(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -425,17 +439,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -518,38 +532,38 @@ public static com.google.spanner.admin.database.v1.ListBackupOperationsRequest p public static com.google.spanner.admin.database.v1.ListBackupOperationsRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupOperationsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupOperationsRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupOperationsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupOperationsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupOperationsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -573,10 +587,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -587,7 +602,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupOperationsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListBackupOperationsRequest) com.google.spanner.admin.database.v1.ListBackupOperationsRequestOrBuilder { @@ -597,7 +612,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_fieldAccessorTable @@ -609,7 +624,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListBackupOperationsRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -673,39 +688,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListBackupOperationsRequest) { @@ -809,6 +791,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -834,6 +817,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -859,6 +843,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -883,6 +868,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -903,6 +889,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -930,6 +917,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -945,19 +933,19 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -965,45 +953,45 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1021,6 +1009,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -1036,19 +1025,19 @@ public java.lang.String getFilter() { * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -1056,45 +1045,45 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1112,6 +1101,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1127,19 +1117,19 @@ public com.google.protobuf.ByteString getFilterBytes() { * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -1147,45 +1137,45 @@ public com.google.protobuf.ByteString getFilterBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1202,6 +1192,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1217,19 +1208,19 @@ public Builder setFilter(java.lang.String value) { * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -1237,45 +1228,45 @@ public Builder setFilter(java.lang.String value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1288,6 +1279,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1303,19 +1295,19 @@ public Builder clearFilter() { * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -1323,45 +1315,45 @@ public Builder clearFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1381,6 +1373,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1397,6 +1390,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1417,6 +1411,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1437,6 +1432,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1463,6 +1459,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1489,6 +1486,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1514,6 +1512,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1535,6 +1534,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1562,17 +1562,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListBackupOperationsRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java index 9cc01d96cc8..8d952b07ec4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListBackupOperationsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListBackupOperationsRequest) @@ -39,6 +41,7 @@ public interface ListBackupOperationsRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -70,19 +73,19 @@ public interface ListBackupOperationsRequestOrBuilder * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -90,45 +93,45 @@ public interface ListBackupOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -136,6 +139,7 @@ public interface ListBackupOperationsRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -151,19 +155,19 @@ public interface ListBackupOperationsRequestOrBuilder * The following fields in the [operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -171,45 +175,45 @@ public interface ListBackupOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `metadata.database:prod` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The source database name of backup contains the string "prod". - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.name:howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. - * * The backup name contains the string "howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ - * `(metadata.source_backup:test) AND` \ - * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. - * * The source backup name contains the string "test". - * * The operation started before 2022-01-18T14:50:00Z. - * * The operation resulted in an error. - * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ - * `(metadata.database:test_db)) OR` \ - * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) - * AND` \ - * `(metadata.source_backup:test_bkp)) AND` \ - * `(error:*)` - Returns operations where: - * * The operation's metadata matches either of criteria: - * * The operation's metadata type is - * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] - * AND the source database name of the backup contains the string - * "test_db" - * * The operation's metadata type is - * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] - * AND the source backup name contains the string "test_bkp" - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `metadata.database:prod` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The source database name of backup contains the string "prod". + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.name:howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. + * * The backup name contains the string "howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \ + * `(metadata.source_backup:test) AND` \ + * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata]. + * * The source backup name contains the string "test". + * * The operation started before 2022-01-18T14:50:00Z. + * * The operation resulted in an error. + * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \ + * `(metadata.database:test_db)) OR` \ + * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) + * AND` \ + * `(metadata.source_backup:test_bkp)) AND` \ + * `(error:*)` - Returns operations where: + * * The operation's metadata matches either of criteria: + * * The operation's metadata type is + * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] + * AND the source database name of the backup contains the string + * "test_db" + * * The operation's metadata type is + * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] + * AND the source backup name contains the string "test_bkp" + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -248,6 +252,7 @@ public interface ListBackupOperationsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java index 8dd2402d3ac..78cb6b16347 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupOperationsResponse} */ -public final class ListBackupOperationsResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListBackupOperationsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListBackupOperationsResponse) ListBackupOperationsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListBackupOperationsResponse"); + } + // Use ListBackupOperationsResponse.newBuilder() to construct. - private ListBackupOperationsResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListBackupOperationsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListBackupOperationsResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListBackupOperationsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List operations_; + /** * * @@ -90,6 +98,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getOperationsList() { return operations_; } + /** * * @@ -112,6 +121,7 @@ public java.util.List getOperationsList() { getOperationsOrBuilderList() { return operations_; } + /** * * @@ -133,6 +143,7 @@ public java.util.List getOperationsList() { public int getOperationsCount() { return operations_.size(); } + /** * * @@ -154,6 +165,7 @@ public int getOperationsCount() { public com.google.longrunning.Operation getOperations(int index) { return operations_.get(index); } + /** * * @@ -180,6 +192,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -205,6 +218,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -248,8 +262,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < operations_.size(); i++) { output.writeMessage(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -263,8 +277,8 @@ public int getSerializedSize() { for (int i = 0; i < operations_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -343,39 +357,39 @@ public static com.google.spanner.admin.database.v1.ListBackupOperationsResponse public static com.google.spanner.admin.database.v1.ListBackupOperationsResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupOperationsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupOperationsResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupOperationsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupOperationsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupOperationsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -399,10 +413,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -413,7 +428,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupOperationsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListBackupOperationsResponse) com.google.spanner.admin.database.v1.ListBackupOperationsResponseOrBuilder { @@ -423,7 +438,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_fieldAccessorTable @@ -436,7 +451,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.database.v1.ListBackupOperationsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -509,39 +524,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListBackupOperationsResponse) { @@ -576,8 +558,8 @@ public Builder mergeFrom( operations_ = other.operations_; bitField0_ = (bitField0_ & ~0x00000001); operationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getOperationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetOperationsFieldBuilder() : null; } else { operationsBuilder_.addAllMessages(other.operations_); @@ -662,7 +644,7 @@ private void ensureOperationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> @@ -692,6 +674,7 @@ public java.util.List getOperationsList() { return operationsBuilder_.getMessageList(); } } + /** * * @@ -716,6 +699,7 @@ public int getOperationsCount() { return operationsBuilder_.getCount(); } } + /** * * @@ -740,6 +724,7 @@ public com.google.longrunning.Operation getOperations(int index) { return operationsBuilder_.getMessage(index); } } + /** * * @@ -770,6 +755,7 @@ public Builder setOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * @@ -798,6 +784,7 @@ public Builder setOperations( } return this; } + /** * * @@ -828,6 +815,7 @@ public Builder addOperations(com.google.longrunning.Operation value) { } return this; } + /** * * @@ -858,6 +846,7 @@ public Builder addOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * @@ -885,6 +874,7 @@ public Builder addOperations(com.google.longrunning.Operation.Builder builderFor } return this; } + /** * * @@ -913,6 +903,7 @@ public Builder addOperations( } return this; } + /** * * @@ -941,6 +932,7 @@ public Builder addAllOperations( } return this; } + /** * * @@ -968,6 +960,7 @@ public Builder clearOperations() { } return this; } + /** * * @@ -995,6 +988,7 @@ public Builder removeOperations(int index) { } return this; } + /** * * @@ -1013,8 +1007,9 @@ public Builder removeOperations(int index) { * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder getOperationsBuilder(int index) { - return getOperationsFieldBuilder().getBuilder(index); + return internalGetOperationsFieldBuilder().getBuilder(index); } + /** * * @@ -1039,6 +1034,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return operationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1064,6 +1060,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return java.util.Collections.unmodifiableList(operations_); } } + /** * * @@ -1082,9 +1079,10 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder() { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1103,9 +1101,10 @@ public com.google.longrunning.Operation.Builder addOperationsBuilder() { * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder(int index) { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(index, com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1124,17 +1123,17 @@ public com.google.longrunning.Operation.Builder addOperationsBuilder(int index) * repeated .google.longrunning.Operation operations = 1; */ public java.util.List getOperationsBuilderList() { - return getOperationsFieldBuilder().getBuilderList(); + return internalGetOperationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getOperationsFieldBuilder() { + internalGetOperationsFieldBuilder() { if (operationsBuilder_ == null) { operationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1145,6 +1144,7 @@ public java.util.List getOperationsBui } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1169,6 +1169,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1193,6 +1194,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1216,6 +1218,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1235,6 +1238,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1260,17 +1264,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListBackupOperationsResponse) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java index a7b07c0739a..6bc4c85b6f8 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListBackupOperationsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListBackupOperationsResponse) @@ -42,6 +44,7 @@ public interface ListBackupOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsList(); + /** * * @@ -60,6 +63,7 @@ public interface ListBackupOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ com.google.longrunning.Operation getOperations(int index); + /** * * @@ -78,6 +82,7 @@ public interface ListBackupOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ int getOperationsCount(); + /** * * @@ -96,6 +101,7 @@ public interface ListBackupOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsOrBuilderList(); + /** * * @@ -129,6 +135,7 @@ public interface ListBackupOperationsResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequest.java index ee49c05d120..a142c9ba925 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupSchedulesRequest} */ -public final class ListBackupSchedulesRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListBackupSchedulesRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListBackupSchedulesRequest) ListBackupSchedulesRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListBackupSchedulesRequest"); + } + // Use ListBackupSchedulesRequest.newBuilder() to construct. - private ListBackupSchedulesRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListBackupSchedulesRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListBackupSchedulesRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListBackupSchedulesRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -126,6 +135,7 @@ public com.google.protobuf.ByteString getParentBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 2; private int pageSize_ = 0; + /** * * @@ -147,6 +157,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -174,6 +185,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -216,14 +228,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } if (pageSize_ != 0) { output.writeInt32(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -234,14 +246,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -321,38 +333,38 @@ public static com.google.spanner.admin.database.v1.ListBackupSchedulesRequest pa public static com.google.spanner.admin.database.v1.ListBackupSchedulesRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -376,10 +388,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -390,7 +403,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupSchedulesRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListBackupSchedulesRequest) com.google.spanner.admin.database.v1.ListBackupSchedulesRequestOrBuilder { @@ -400,7 +413,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_ListBackupSchedulesRequest_fieldAccessorTable @@ -412,7 +425,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListBackupSchedulesRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -472,39 +485,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListBackupSchedulesRequest) { @@ -597,6 +577,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -623,6 +604,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -649,6 +631,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -674,6 +657,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -695,6 +679,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -723,6 +708,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -739,6 +725,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -759,6 +746,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -779,6 +767,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -805,6 +794,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -831,6 +821,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -856,6 +847,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -877,6 +869,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -904,17 +897,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListBackupSchedulesRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequestOrBuilder.java index 814e0381050..87cd5b69bce 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListBackupSchedulesRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListBackupSchedulesRequest) @@ -40,6 +42,7 @@ public interface ListBackupSchedulesRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -87,6 +90,7 @@ public interface ListBackupSchedulesRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponse.java index d393318524c..8f7675d63b6 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupSchedulesResponse} */ -public final class ListBackupSchedulesResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListBackupSchedulesResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListBackupSchedulesResponse) ListBackupSchedulesResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListBackupSchedulesResponse"); + } + // Use ListBackupSchedulesResponse.newBuilder() to construct. - private ListBackupSchedulesResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListBackupSchedulesResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListBackupSchedulesResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListBackupSchedulesResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List backupSchedules_; + /** * * @@ -83,6 +91,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getBackupSchedulesList() { return backupSchedules_; } + /** * * @@ -97,6 +106,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getBackupSchedulesOrBuilderList() { return backupSchedules_; } + /** * * @@ -110,6 +120,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getBackupSchedulesCount() { return backupSchedules_.size(); } + /** * * @@ -123,6 +134,7 @@ public int getBackupSchedulesCount() { public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedules(int index) { return backupSchedules_.get(index); } + /** * * @@ -142,6 +154,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleOrBuilder getBackupSch @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -167,6 +180,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -210,8 +224,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < backupSchedules_.size(); i++) { output.writeMessage(1, backupSchedules_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -225,8 +239,8 @@ public int getSerializedSize() { for (int i = 0; i < backupSchedules_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, backupSchedules_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -305,38 +319,38 @@ public static com.google.spanner.admin.database.v1.ListBackupSchedulesResponse p public static com.google.spanner.admin.database.v1.ListBackupSchedulesResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupSchedulesResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -360,10 +374,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -374,7 +389,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupSchedulesResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListBackupSchedulesResponse) com.google.spanner.admin.database.v1.ListBackupSchedulesResponseOrBuilder { @@ -384,7 +399,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_ListBackupSchedulesResponse_fieldAccessorTable @@ -396,7 +411,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListBackupSchedulesResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -469,39 +484,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListBackupSchedulesResponse) { @@ -536,8 +518,8 @@ public Builder mergeFrom( backupSchedules_ = other.backupSchedules_; bitField0_ = (bitField0_ & ~0x00000001); backupSchedulesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getBackupSchedulesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetBackupSchedulesFieldBuilder() : null; } else { backupSchedulesBuilder_.addAllMessages(other.backupSchedules_); @@ -626,7 +608,7 @@ private void ensureBackupSchedulesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder> @@ -649,6 +631,7 @@ private void ensureBackupSchedulesIsMutable() { return backupSchedulesBuilder_.getMessageList(); } } + /** * * @@ -665,6 +648,7 @@ public int getBackupSchedulesCount() { return backupSchedulesBuilder_.getCount(); } } + /** * * @@ -681,6 +665,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedules(in return backupSchedulesBuilder_.getMessage(index); } } + /** * * @@ -704,6 +689,7 @@ public Builder setBackupSchedules( } return this; } + /** * * @@ -724,6 +710,7 @@ public Builder setBackupSchedules( } return this; } + /** * * @@ -746,6 +733,7 @@ public Builder addBackupSchedules(com.google.spanner.admin.database.v1.BackupSch } return this; } + /** * * @@ -769,6 +757,7 @@ public Builder addBackupSchedules( } return this; } + /** * * @@ -789,6 +778,7 @@ public Builder addBackupSchedules( } return this; } + /** * * @@ -809,6 +799,7 @@ public Builder addBackupSchedules( } return this; } + /** * * @@ -829,6 +820,7 @@ public Builder addAllBackupSchedules( } return this; } + /** * * @@ -848,6 +840,7 @@ public Builder clearBackupSchedules() { } return this; } + /** * * @@ -867,6 +860,7 @@ public Builder removeBackupSchedules(int index) { } return this; } + /** * * @@ -878,8 +872,9 @@ public Builder removeBackupSchedules(int index) { */ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSchedulesBuilder( int index) { - return getBackupSchedulesFieldBuilder().getBuilder(index); + return internalGetBackupSchedulesFieldBuilder().getBuilder(index); } + /** * * @@ -897,6 +892,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleOrBuilder getBackupSch return backupSchedulesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -914,6 +910,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleOrBuilder getBackupSch return java.util.Collections.unmodifiableList(backupSchedules_); } } + /** * * @@ -924,9 +921,10 @@ public com.google.spanner.admin.database.v1.BackupScheduleOrBuilder getBackupSch * repeated .google.spanner.admin.database.v1.BackupSchedule backup_schedules = 1; */ public com.google.spanner.admin.database.v1.BackupSchedule.Builder addBackupSchedulesBuilder() { - return getBackupSchedulesFieldBuilder() + return internalGetBackupSchedulesFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.BackupSchedule.getDefaultInstance()); } + /** * * @@ -938,10 +936,11 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder addBackupSche */ public com.google.spanner.admin.database.v1.BackupSchedule.Builder addBackupSchedulesBuilder( int index) { - return getBackupSchedulesFieldBuilder() + return internalGetBackupSchedulesFieldBuilder() .addBuilder( index, com.google.spanner.admin.database.v1.BackupSchedule.getDefaultInstance()); } + /** * * @@ -953,17 +952,17 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder addBackupSche */ public java.util.List getBackupSchedulesBuilderList() { - return getBackupSchedulesFieldBuilder().getBuilderList(); + return internalGetBackupSchedulesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder> - getBackupSchedulesFieldBuilder() { + internalGetBackupSchedulesFieldBuilder() { if (backupSchedulesBuilder_ == null) { backupSchedulesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder>( @@ -977,6 +976,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder addBackupSche } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1001,6 +1001,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1025,6 +1026,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1048,6 +1050,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1067,6 +1070,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1092,17 +1096,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListBackupSchedulesResponse) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponseOrBuilder.java index c7866312b67..dbf7578a161 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupSchedulesResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListBackupSchedulesResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListBackupSchedulesResponse) @@ -34,6 +36,7 @@ public interface ListBackupSchedulesResponseOrBuilder * repeated .google.spanner.admin.database.v1.BackupSchedule backup_schedules = 1; */ java.util.List getBackupSchedulesList(); + /** * * @@ -44,6 +47,7 @@ public interface ListBackupSchedulesResponseOrBuilder * repeated .google.spanner.admin.database.v1.BackupSchedule backup_schedules = 1; */ com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedules(int index); + /** * * @@ -54,6 +58,7 @@ public interface ListBackupSchedulesResponseOrBuilder * repeated .google.spanner.admin.database.v1.BackupSchedule backup_schedules = 1; */ int getBackupSchedulesCount(); + /** * * @@ -65,6 +70,7 @@ public interface ListBackupSchedulesResponseOrBuilder */ java.util.List getBackupSchedulesOrBuilderList(); + /** * * @@ -91,6 +97,7 @@ com.google.spanner.admin.database.v1.BackupScheduleOrBuilder getBackupSchedulesO * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java index 0bb010ea335..127d17c86e8 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupsRequest} */ -public final class ListBackupsRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListBackupsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListBackupsRequest) ListBackupsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListBackupsRequest"); + } + // Use ListBackupsRequest.newBuilder() to construct. - private ListBackupsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListBackupsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private ListBackupsRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListBackupsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupsRequest_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -127,6 +136,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -143,14 +153,14 @@ public com.google.protobuf.ByteString getParentBytes() { * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -158,19 +168,19 @@ public com.google.protobuf.ByteString getParentBytes() { * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. *
                                * * string filter = 2; @@ -189,6 +199,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -205,14 +216,14 @@ public java.lang.String getFilter() { * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -220,19 +231,19 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. *
                                * * string filter = 2; @@ -254,6 +265,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -275,6 +287,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -302,6 +315,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -344,17 +358,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, filter_); } if (pageSize_ != 0) { output.writeInt32(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -365,17 +379,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -458,38 +472,38 @@ public static com.google.spanner.admin.database.v1.ListBackupsRequest parseFrom( public static com.google.spanner.admin.database.v1.ListBackupsRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupsRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -513,10 +527,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -527,7 +542,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListBackupsRequest) com.google.spanner.admin.database.v1.ListBackupsRequestOrBuilder { @@ -537,7 +552,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupsRequest_fieldAccessorTable @@ -549,7 +564,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListBackupsRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -611,39 +626,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.ListBackupsReque } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListBackupsRequest) { @@ -745,6 +727,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -770,6 +753,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -795,6 +779,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -819,6 +804,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -839,6 +825,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -866,6 +853,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -882,14 +870,14 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -897,19 +885,19 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. *
                                * * string filter = 2; @@ -927,6 +915,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -943,14 +932,14 @@ public java.lang.String getFilter() { * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -958,19 +947,19 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. *
                                * * string filter = 2; @@ -988,6 +977,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1004,14 +994,14 @@ public com.google.protobuf.ByteString getFilterBytes() { * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -1019,19 +1009,19 @@ public com.google.protobuf.ByteString getFilterBytes() { * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. *
                                * * string filter = 2; @@ -1048,6 +1038,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1064,14 +1055,14 @@ public Builder setFilter(java.lang.String value) { * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -1079,19 +1070,19 @@ public Builder setFilter(java.lang.String value) { * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. * * * string filter = 2; @@ -1104,6 +1095,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1120,14 +1112,14 @@ public Builder clearFilter() { * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -1135,19 +1127,19 @@ public Builder clearFilter() { * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. * * * string filter = 2; @@ -1167,6 +1159,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1183,6 +1176,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1203,6 +1197,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1223,6 +1218,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1249,6 +1245,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1275,6 +1272,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1300,6 +1298,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1321,6 +1320,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1348,17 +1348,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListBackupsRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java index 834fcbdd9c4..91a9f969202 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListBackupsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListBackupsRequest) @@ -39,6 +41,7 @@ public interface ListBackupsRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -71,14 +74,14 @@ public interface ListBackupsRequestOrBuilder * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -86,19 +89,19 @@ public interface ListBackupsRequestOrBuilder * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. * * * string filter = 2; @@ -106,6 +109,7 @@ public interface ListBackupsRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -122,14 +126,14 @@ public interface ListBackupsRequestOrBuilder * [Backup][google.spanner.admin.database.v1.Backup] are eligible for * filtering: * - * * `name` - * * `database` - * * `state` - * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) - * * `size_bytes` - * * `backup_schedules` + * * `name` + * * `database` + * * `state` + * * `create_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `expire_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ) + * * `size_bytes` + * * `backup_schedules` * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic, but @@ -137,19 +141,19 @@ public interface ListBackupsRequestOrBuilder * * Here are a few examples: * - * * `name:Howl` - The backup's name contains the string "howl". - * * `database:prod` - * - The database's name contains the string "prod". - * * `state:CREATING` - The backup is pending creation. - * * `state:READY` - The backup is fully created and ready for use. - * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` - * - The backup name contains the string "howl" and `create_time` - * of the backup is before 2018-03-28T14:50:00Z. - * * `expire_time < \"2018-03-28T14:50:00Z\"` - * - The backup `expire_time` is before 2018-03-28T14:50:00Z. - * * `size_bytes > 10000000000` - The backup's size is greater than 10GB - * * `backup_schedules:daily` - * - The backup is created from a schedule with "daily" in its name. + * * `name:Howl` - The backup's name contains the string "howl". + * * `database:prod` + * - The database's name contains the string "prod". + * * `state:CREATING` - The backup is pending creation. + * * `state:READY` - The backup is fully created and ready for use. + * * `(name:howl) AND (create_time < \"2018-03-28T14:50:00Z\")` + * - The backup name contains the string "howl" and `create_time` + * of the backup is before 2018-03-28T14:50:00Z. + * * `expire_time < \"2018-03-28T14:50:00Z\"` + * - The backup `expire_time` is before 2018-03-28T14:50:00Z. + * * `size_bytes > 10000000000` - The backup's size is greater than 10GB + * * `backup_schedules:daily` + * - The backup is created from a schedule with "daily" in its name. * * * string filter = 2; @@ -188,6 +192,7 @@ public interface ListBackupsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java index 575092a046a..4def48cc8a9 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupsResponse} */ -public final class ListBackupsResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListBackupsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListBackupsResponse) ListBackupsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListBackupsResponse"); + } + // Use ListBackupsResponse.newBuilder() to construct. - private ListBackupsResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListBackupsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListBackupsResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListBackupsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupsResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List backups_; + /** * * @@ -83,6 +91,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getBackupsList() { return backups_; } + /** * * @@ -98,6 +107,7 @@ public java.util.List getBackupsLis getBackupsOrBuilderList() { return backups_; } + /** * * @@ -112,6 +122,7 @@ public java.util.List getBackupsLis public int getBackupsCount() { return backups_.size(); } + /** * * @@ -126,6 +137,7 @@ public int getBackupsCount() { public com.google.spanner.admin.database.v1.Backup getBackups(int index) { return backups_.get(index); } + /** * * @@ -145,6 +157,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupsOrBuilder( @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -170,6 +183,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -213,8 +227,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < backups_.size(); i++) { output.writeMessage(1, backups_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -228,8 +242,8 @@ public int getSerializedSize() { for (int i = 0; i < backups_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, backups_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -308,38 +322,38 @@ public static com.google.spanner.admin.database.v1.ListBackupsResponse parseFrom public static com.google.spanner.admin.database.v1.ListBackupsResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupsResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListBackupsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListBackupsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -363,10 +377,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -377,7 +392,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListBackupsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListBackupsResponse) com.google.spanner.admin.database.v1.ListBackupsResponseOrBuilder { @@ -387,7 +402,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupsResponse_fieldAccessorTable @@ -399,7 +414,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListBackupsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -470,39 +485,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.ListBackupsRespo } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListBackupsResponse) { @@ -535,8 +517,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.ListBackupsRespons backups_ = other.backups_; bitField0_ = (bitField0_ & ~0x00000001); backupsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getBackupsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetBackupsFieldBuilder() : null; } else { backupsBuilder_.addAllMessages(other.backups_); @@ -622,7 +604,7 @@ private void ensureBackupsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> @@ -645,6 +627,7 @@ public java.util.List getBackupsLis return backupsBuilder_.getMessageList(); } } + /** * * @@ -662,6 +645,7 @@ public int getBackupsCount() { return backupsBuilder_.getCount(); } } + /** * * @@ -679,6 +663,7 @@ public com.google.spanner.admin.database.v1.Backup getBackups(int index) { return backupsBuilder_.getMessage(index); } } + /** * * @@ -702,6 +687,7 @@ public Builder setBackups(int index, com.google.spanner.admin.database.v1.Backup } return this; } + /** * * @@ -723,6 +709,7 @@ public Builder setBackups( } return this; } + /** * * @@ -746,6 +733,7 @@ public Builder addBackups(com.google.spanner.admin.database.v1.Backup value) { } return this; } + /** * * @@ -769,6 +757,7 @@ public Builder addBackups(int index, com.google.spanner.admin.database.v1.Backup } return this; } + /** * * @@ -789,6 +778,7 @@ public Builder addBackups(com.google.spanner.admin.database.v1.Backup.Builder bu } return this; } + /** * * @@ -810,6 +800,7 @@ public Builder addBackups( } return this; } + /** * * @@ -831,6 +822,7 @@ public Builder addAllBackups( } return this; } + /** * * @@ -851,6 +843,7 @@ public Builder clearBackups() { } return this; } + /** * * @@ -871,6 +864,7 @@ public Builder removeBackups(int index) { } return this; } + /** * * @@ -882,8 +876,9 @@ public Builder removeBackups(int index) { * repeated .google.spanner.admin.database.v1.Backup backups = 1; */ public com.google.spanner.admin.database.v1.Backup.Builder getBackupsBuilder(int index) { - return getBackupsFieldBuilder().getBuilder(index); + return internalGetBackupsFieldBuilder().getBuilder(index); } + /** * * @@ -901,6 +896,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupsOrBuilder( return backupsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -919,6 +915,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupsOrBuilder( return java.util.Collections.unmodifiableList(backups_); } } + /** * * @@ -930,9 +927,10 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupsOrBuilder( * repeated .google.spanner.admin.database.v1.Backup backups = 1; */ public com.google.spanner.admin.database.v1.Backup.Builder addBackupsBuilder() { - return getBackupsFieldBuilder() + return internalGetBackupsFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.Backup.getDefaultInstance()); } + /** * * @@ -944,9 +942,10 @@ public com.google.spanner.admin.database.v1.Backup.Builder addBackupsBuilder() { * repeated .google.spanner.admin.database.v1.Backup backups = 1; */ public com.google.spanner.admin.database.v1.Backup.Builder addBackupsBuilder(int index) { - return getBackupsFieldBuilder() + return internalGetBackupsFieldBuilder() .addBuilder(index, com.google.spanner.admin.database.v1.Backup.getDefaultInstance()); } + /** * * @@ -959,17 +958,17 @@ public com.google.spanner.admin.database.v1.Backup.Builder addBackupsBuilder(int */ public java.util.List getBackupsBuilderList() { - return getBackupsFieldBuilder().getBuilderList(); + return internalGetBackupsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> - getBackupsFieldBuilder() { + internalGetBackupsFieldBuilder() { if (backupsBuilder_ == null) { backupsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder>( @@ -980,6 +979,7 @@ public com.google.spanner.admin.database.v1.Backup.Builder addBackupsBuilder(int } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1004,6 +1004,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1028,6 +1029,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1051,6 +1053,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1070,6 +1073,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1095,17 +1099,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListBackupsResponse) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java index 89dacd534d1..c829ea06507 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListBackupsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListBackupsResponse) @@ -35,6 +37,7 @@ public interface ListBackupsResponseOrBuilder * repeated .google.spanner.admin.database.v1.Backup backups = 1; */ java.util.List getBackupsList(); + /** * * @@ -46,6 +49,7 @@ public interface ListBackupsResponseOrBuilder * repeated .google.spanner.admin.database.v1.Backup backups = 1; */ com.google.spanner.admin.database.v1.Backup getBackups(int index); + /** * * @@ -57,6 +61,7 @@ public interface ListBackupsResponseOrBuilder * repeated .google.spanner.admin.database.v1.Backup backups = 1; */ int getBackupsCount(); + /** * * @@ -69,6 +74,7 @@ public interface ListBackupsResponseOrBuilder */ java.util.List getBackupsOrBuilderList(); + /** * * @@ -95,6 +101,7 @@ public interface ListBackupsResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java index 61bd575ac45..7b2ab5ab931 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseOperationsRequest} */ -public final class ListDatabaseOperationsRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListDatabaseOperationsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListDatabaseOperationsRequest) ListDatabaseOperationsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListDatabaseOperationsRequest"); + } + // Use ListDatabaseOperationsRequest.newBuilder() to construct. - private ListDatabaseOperationsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListDatabaseOperationsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private ListDatabaseOperationsRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListDatabaseOperationsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -127,6 +136,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -142,19 +152,19 @@ public com.google.protobuf.ByteString getParentBytes() { * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -162,20 +172,20 @@ public com.google.protobuf.ByteString getParentBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -194,6 +204,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -209,19 +220,19 @@ public java.lang.String getFilter() { * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -229,20 +240,20 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -264,6 +275,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -285,6 +297,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -312,6 +325,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -354,17 +368,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, filter_); } if (pageSize_ != 0) { output.writeInt32(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -375,17 +389,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -468,39 +482,39 @@ public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -524,10 +538,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -538,7 +553,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseOperationsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListDatabaseOperationsRequest) com.google.spanner.admin.database.v1.ListDatabaseOperationsRequestOrBuilder { @@ -548,7 +563,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_fieldAccessorTable @@ -561,7 +576,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -626,39 +641,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest) { @@ -763,6 +745,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -788,6 +771,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -813,6 +797,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -837,6 +822,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -857,6 +843,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -884,6 +871,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -899,19 +887,19 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -919,20 +907,20 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -950,6 +938,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -965,19 +954,19 @@ public java.lang.String getFilter() { * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -985,20 +974,20 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -1016,6 +1005,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1031,19 +1021,19 @@ public com.google.protobuf.ByteString getFilterBytes() { * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1051,20 +1041,20 @@ public com.google.protobuf.ByteString getFilterBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -1081,6 +1071,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1096,19 +1087,19 @@ public Builder setFilter(java.lang.String value) { * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1116,20 +1107,20 @@ public Builder setFilter(java.lang.String value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -1142,6 +1133,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1157,19 +1149,19 @@ public Builder clearFilter() { * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1177,20 +1169,20 @@ public Builder clearFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -1210,6 +1202,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1226,6 +1219,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1246,6 +1240,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1266,6 +1261,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1292,6 +1288,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1318,6 +1315,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1343,6 +1341,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1364,6 +1363,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1391,17 +1391,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListDatabaseOperationsRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java index 8b545cdf491..d38a285db64 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListDatabaseOperationsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListDatabaseOperationsRequest) @@ -39,6 +41,7 @@ public interface ListDatabaseOperationsRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -70,19 +73,19 @@ public interface ListDatabaseOperationsRequestOrBuilder * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -90,20 +93,20 @@ public interface ListDatabaseOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -111,6 +114,7 @@ public interface ListDatabaseOperationsRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -126,19 +130,19 @@ public interface ListDatabaseOperationsRequestOrBuilder * The following fields in the [Operation][google.longrunning.Operation] * are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] - * is - * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] + * is + * `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -146,20 +150,20 @@ public interface ListDatabaseOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ - * `(metadata.source_type:BACKUP) AND` \ - * `(metadata.backup_info.backup:backup_howl) AND` \ - * `(metadata.name:restored_howl) AND` \ - * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. - * * The database is restored from a backup. - * * The backup name contains "backup_howl". - * * The restored database's name contains "restored_howl". - * * The operation started before 2018-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \ + * `(metadata.source_type:BACKUP) AND` \ + * `(metadata.backup_info.backup:backup_howl) AND` \ + * `(metadata.name:restored_howl) AND` \ + * `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata]. + * * The database is restored from a backup. + * * The backup name contains "backup_howl". + * * The restored database's name contains "restored_howl". + * * The operation started before 2018-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -198,6 +202,7 @@ public interface ListDatabaseOperationsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java index ec69a81d1f0..3b977a7c6e7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,14 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseOperationsResponse} */ -public final class ListDatabaseOperationsResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListDatabaseOperationsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListDatabaseOperationsResponse) ListDatabaseOperationsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListDatabaseOperationsResponse"); + } + // Use ListDatabaseOperationsResponse.newBuilder() to construct. - private ListDatabaseOperationsResponse( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListDatabaseOperationsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +57,13 @@ private ListDatabaseOperationsResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListDatabaseOperationsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_fieldAccessorTable @@ -70,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List operations_; + /** * * @@ -87,6 +94,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getOperationsList() { return operations_; } + /** * * @@ -105,6 +113,7 @@ public java.util.List getOperationsList() { getOperationsOrBuilderList() { return operations_; } + /** * * @@ -122,6 +131,7 @@ public java.util.List getOperationsList() { public int getOperationsCount() { return operations_.size(); } + /** * * @@ -139,6 +149,7 @@ public int getOperationsCount() { public com.google.longrunning.Operation getOperations(int index) { return operations_.get(index); } + /** * * @@ -161,6 +172,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -186,6 +198,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -229,8 +242,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < operations_.size(); i++) { output.writeMessage(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -244,8 +257,8 @@ public int getSerializedSize() { for (int i = 0; i < operations_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -324,39 +337,39 @@ public static com.google.spanner.admin.database.v1.ListDatabaseOperationsRespons public static com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -380,10 +393,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -394,7 +408,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseOperationsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListDatabaseOperationsResponse) com.google.spanner.admin.database.v1.ListDatabaseOperationsResponseOrBuilder { @@ -404,7 +418,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_fieldAccessorTable @@ -417,7 +431,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -491,39 +505,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse) { @@ -559,8 +540,8 @@ public Builder mergeFrom( operations_ = other.operations_; bitField0_ = (bitField0_ & ~0x00000001); operationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getOperationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetOperationsFieldBuilder() : null; } else { operationsBuilder_.addAllMessages(other.operations_); @@ -645,7 +626,7 @@ private void ensureOperationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> @@ -671,6 +652,7 @@ public java.util.List getOperationsList() { return operationsBuilder_.getMessageList(); } } + /** * * @@ -691,6 +673,7 @@ public int getOperationsCount() { return operationsBuilder_.getCount(); } } + /** * * @@ -711,6 +694,7 @@ public com.google.longrunning.Operation getOperations(int index) { return operationsBuilder_.getMessage(index); } } + /** * * @@ -737,6 +721,7 @@ public Builder setOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * @@ -761,6 +746,7 @@ public Builder setOperations( } return this; } + /** * * @@ -787,6 +773,7 @@ public Builder addOperations(com.google.longrunning.Operation value) { } return this; } + /** * * @@ -813,6 +800,7 @@ public Builder addOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * @@ -836,6 +824,7 @@ public Builder addOperations(com.google.longrunning.Operation.Builder builderFor } return this; } + /** * * @@ -860,6 +849,7 @@ public Builder addOperations( } return this; } + /** * * @@ -884,6 +874,7 @@ public Builder addAllOperations( } return this; } + /** * * @@ -907,6 +898,7 @@ public Builder clearOperations() { } return this; } + /** * * @@ -930,6 +922,7 @@ public Builder removeOperations(int index) { } return this; } + /** * * @@ -944,8 +937,9 @@ public Builder removeOperations(int index) { * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder getOperationsBuilder(int index) { - return getOperationsFieldBuilder().getBuilder(index); + return internalGetOperationsFieldBuilder().getBuilder(index); } + /** * * @@ -966,6 +960,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return operationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -987,6 +982,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return java.util.Collections.unmodifiableList(operations_); } } + /** * * @@ -1001,9 +997,10 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder() { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1018,9 +1015,10 @@ public com.google.longrunning.Operation.Builder addOperationsBuilder() { * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder(int index) { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(index, com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1035,17 +1033,17 @@ public com.google.longrunning.Operation.Builder addOperationsBuilder(int index) * repeated .google.longrunning.Operation operations = 1; */ public java.util.List getOperationsBuilderList() { - return getOperationsFieldBuilder().getBuilderList(); + return internalGetOperationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getOperationsFieldBuilder() { + internalGetOperationsFieldBuilder() { if (operationsBuilder_ == null) { operationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1056,6 +1054,7 @@ public java.util.List getOperationsBui } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1080,6 +1079,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1104,6 +1104,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1127,6 +1128,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1146,6 +1148,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1171,17 +1174,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListDatabaseOperationsResponse) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java index 6c8001fbbf4..1b4b32f72f8 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListDatabaseOperationsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListDatabaseOperationsResponse) @@ -38,6 +40,7 @@ public interface ListDatabaseOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsList(); + /** * * @@ -52,6 +55,7 @@ public interface ListDatabaseOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ com.google.longrunning.Operation getOperations(int index); + /** * * @@ -66,6 +70,7 @@ public interface ListDatabaseOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ int getOperationsCount(); + /** * * @@ -80,6 +85,7 @@ public interface ListDatabaseOperationsResponseOrBuilder * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsOrBuilderList(); + /** * * @@ -109,6 +115,7 @@ public interface ListDatabaseOperationsResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java index 6caecc9fdc6..bea2b96c518 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseRolesRequest} */ -public final class ListDatabaseRolesRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListDatabaseRolesRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListDatabaseRolesRequest) ListDatabaseRolesRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListDatabaseRolesRequest"); + } + // Use ListDatabaseRolesRequest.newBuilder() to construct. - private ListDatabaseRolesRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListDatabaseRolesRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListDatabaseRolesRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListDatabaseRolesRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -126,6 +135,7 @@ public com.google.protobuf.ByteString getParentBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 2; private int pageSize_ = 0; + /** * * @@ -147,6 +157,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -173,6 +184,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -214,14 +226,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } if (pageSize_ != 0) { output.writeInt32(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); } getUnknownFields().writeTo(output); } @@ -232,14 +244,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -319,38 +331,38 @@ public static com.google.spanner.admin.database.v1.ListDatabaseRolesRequest pars public static com.google.spanner.admin.database.v1.ListDatabaseRolesRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -374,10 +386,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -388,7 +401,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseRolesRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListDatabaseRolesRequest) com.google.spanner.admin.database.v1.ListDatabaseRolesRequestOrBuilder { @@ -398,7 +411,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_fieldAccessorTable @@ -410,7 +423,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListDatabaseRolesRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -470,39 +483,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListDatabaseRolesRequest) { @@ -594,6 +574,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -620,6 +601,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -646,6 +628,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -671,6 +654,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -692,6 +676,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -720,6 +705,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -736,6 +722,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -756,6 +743,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -776,6 +764,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -801,6 +790,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -826,6 +816,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -850,6 +841,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -870,6 +862,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -896,17 +889,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListDatabaseRolesRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java index 45bbe33472d..4b3d05560cb 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListDatabaseRolesRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListDatabaseRolesRequest) @@ -40,6 +42,7 @@ public interface ListDatabaseRolesRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -86,6 +89,7 @@ public interface ListDatabaseRolesRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java index 260c110d226..b855c53ba83 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseRolesResponse} */ -public final class ListDatabaseRolesResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListDatabaseRolesResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListDatabaseRolesResponse) ListDatabaseRolesResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListDatabaseRolesResponse"); + } + // Use ListDatabaseRolesResponse.newBuilder() to construct. - private ListDatabaseRolesResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListDatabaseRolesResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListDatabaseRolesResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListDatabaseRolesResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List databaseRoles_; + /** * * @@ -82,6 +90,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getDatabaseRolesList() { return databaseRoles_; } + /** * * @@ -96,6 +105,7 @@ public java.util.List getData getDatabaseRolesOrBuilderList() { return databaseRoles_; } + /** * * @@ -109,6 +119,7 @@ public java.util.List getData public int getDatabaseRolesCount() { return databaseRoles_.size(); } + /** * * @@ -122,6 +133,7 @@ public int getDatabaseRolesCount() { public com.google.spanner.admin.database.v1.DatabaseRole getDatabaseRoles(int index) { return databaseRoles_.get(index); } + /** * * @@ -141,6 +153,7 @@ public com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder getDatabaseRol @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -166,6 +179,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -209,8 +223,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < databaseRoles_.size(); i++) { output.writeMessage(1, databaseRoles_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -224,8 +238,8 @@ public int getSerializedSize() { for (int i = 0; i < databaseRoles_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, databaseRoles_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -304,38 +318,38 @@ public static com.google.spanner.admin.database.v1.ListDatabaseRolesResponse par public static com.google.spanner.admin.database.v1.ListDatabaseRolesResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabaseRolesResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -359,10 +373,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -373,7 +388,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabaseRolesResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListDatabaseRolesResponse) com.google.spanner.admin.database.v1.ListDatabaseRolesResponseOrBuilder { @@ -383,7 +398,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_fieldAccessorTable @@ -395,7 +410,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListDatabaseRolesResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -468,39 +483,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListDatabaseRolesResponse) { @@ -534,8 +516,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.ListDatabaseRolesR databaseRoles_ = other.databaseRoles_; bitField0_ = (bitField0_ & ~0x00000001); databaseRolesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getDatabaseRolesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetDatabaseRolesFieldBuilder() : null; } else { databaseRolesBuilder_.addAllMessages(other.databaseRoles_); @@ -624,7 +606,7 @@ private void ensureDatabaseRolesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.DatabaseRole, com.google.spanner.admin.database.v1.DatabaseRole.Builder, com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder> @@ -647,6 +629,7 @@ private void ensureDatabaseRolesIsMutable() { return databaseRolesBuilder_.getMessageList(); } } + /** * * @@ -663,6 +646,7 @@ public int getDatabaseRolesCount() { return databaseRolesBuilder_.getCount(); } } + /** * * @@ -679,6 +663,7 @@ public com.google.spanner.admin.database.v1.DatabaseRole getDatabaseRoles(int in return databaseRolesBuilder_.getMessage(index); } } + /** * * @@ -702,6 +687,7 @@ public Builder setDatabaseRoles( } return this; } + /** * * @@ -722,6 +708,7 @@ public Builder setDatabaseRoles( } return this; } + /** * * @@ -744,6 +731,7 @@ public Builder addDatabaseRoles(com.google.spanner.admin.database.v1.DatabaseRol } return this; } + /** * * @@ -767,6 +755,7 @@ public Builder addDatabaseRoles( } return this; } + /** * * @@ -787,6 +776,7 @@ public Builder addDatabaseRoles( } return this; } + /** * * @@ -807,6 +797,7 @@ public Builder addDatabaseRoles( } return this; } + /** * * @@ -827,6 +818,7 @@ public Builder addAllDatabaseRoles( } return this; } + /** * * @@ -846,6 +838,7 @@ public Builder clearDatabaseRoles() { } return this; } + /** * * @@ -865,6 +858,7 @@ public Builder removeDatabaseRoles(int index) { } return this; } + /** * * @@ -876,8 +870,9 @@ public Builder removeDatabaseRoles(int index) { */ public com.google.spanner.admin.database.v1.DatabaseRole.Builder getDatabaseRolesBuilder( int index) { - return getDatabaseRolesFieldBuilder().getBuilder(index); + return internalGetDatabaseRolesFieldBuilder().getBuilder(index); } + /** * * @@ -895,6 +890,7 @@ public com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder getDatabaseRol return databaseRolesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -912,6 +908,7 @@ public com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder getDatabaseRol return java.util.Collections.unmodifiableList(databaseRoles_); } } + /** * * @@ -922,9 +919,10 @@ public com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder getDatabaseRol * repeated .google.spanner.admin.database.v1.DatabaseRole database_roles = 1; */ public com.google.spanner.admin.database.v1.DatabaseRole.Builder addDatabaseRolesBuilder() { - return getDatabaseRolesFieldBuilder() + return internalGetDatabaseRolesFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.DatabaseRole.getDefaultInstance()); } + /** * * @@ -936,10 +934,11 @@ public com.google.spanner.admin.database.v1.DatabaseRole.Builder addDatabaseRole */ public com.google.spanner.admin.database.v1.DatabaseRole.Builder addDatabaseRolesBuilder( int index) { - return getDatabaseRolesFieldBuilder() + return internalGetDatabaseRolesFieldBuilder() .addBuilder( index, com.google.spanner.admin.database.v1.DatabaseRole.getDefaultInstance()); } + /** * * @@ -951,17 +950,17 @@ public com.google.spanner.admin.database.v1.DatabaseRole.Builder addDatabaseRole */ public java.util.List getDatabaseRolesBuilderList() { - return getDatabaseRolesFieldBuilder().getBuilderList(); + return internalGetDatabaseRolesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.DatabaseRole, com.google.spanner.admin.database.v1.DatabaseRole.Builder, com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder> - getDatabaseRolesFieldBuilder() { + internalGetDatabaseRolesFieldBuilder() { if (databaseRolesBuilder_ == null) { databaseRolesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.DatabaseRole, com.google.spanner.admin.database.v1.DatabaseRole.Builder, com.google.spanner.admin.database.v1.DatabaseRoleOrBuilder>( @@ -975,6 +974,7 @@ public com.google.spanner.admin.database.v1.DatabaseRole.Builder addDatabaseRole } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -999,6 +999,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1023,6 +1024,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1046,6 +1048,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1065,6 +1068,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1090,17 +1094,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListDatabaseRolesResponse) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java index ffedad7d5a2..f94b22d4bea 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListDatabaseRolesResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListDatabaseRolesResponse) @@ -34,6 +36,7 @@ public interface ListDatabaseRolesResponseOrBuilder * repeated .google.spanner.admin.database.v1.DatabaseRole database_roles = 1; */ java.util.List getDatabaseRolesList(); + /** * * @@ -44,6 +47,7 @@ public interface ListDatabaseRolesResponseOrBuilder * repeated .google.spanner.admin.database.v1.DatabaseRole database_roles = 1; */ com.google.spanner.admin.database.v1.DatabaseRole getDatabaseRoles(int index); + /** * * @@ -54,6 +58,7 @@ public interface ListDatabaseRolesResponseOrBuilder * repeated .google.spanner.admin.database.v1.DatabaseRole database_roles = 1; */ int getDatabaseRolesCount(); + /** * * @@ -65,6 +70,7 @@ public interface ListDatabaseRolesResponseOrBuilder */ java.util.List getDatabaseRolesOrBuilderList(); + /** * * @@ -90,6 +96,7 @@ public interface ListDatabaseRolesResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java index fa4da40dace..8334a0103ac 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabasesRequest} */ -public final class ListDatabasesRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListDatabasesRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListDatabasesRequest) ListDatabasesRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListDatabasesRequest"); + } + // Use ListDatabasesRequest.newBuilder() to construct. - private ListDatabasesRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListDatabasesRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListDatabasesRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListDatabasesRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getParentBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -145,6 +155,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -171,6 +182,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -212,14 +224,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } if (pageSize_ != 0) { output.writeInt32(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -230,14 +242,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -317,38 +329,38 @@ public static com.google.spanner.admin.database.v1.ListDatabasesRequest parseFro public static com.google.spanner.admin.database.v1.ListDatabasesRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabasesRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabasesRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabasesRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabasesRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabasesRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -372,10 +384,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -386,7 +399,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabasesRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListDatabasesRequest) com.google.spanner.admin.database.v1.ListDatabasesRequestOrBuilder { @@ -396,7 +409,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_fieldAccessorTable @@ -408,7 +421,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListDatabasesRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -466,39 +479,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.ListDatabasesReq } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListDatabasesRequest) { @@ -589,6 +569,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -614,6 +595,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -639,6 +621,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -663,6 +646,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -683,6 +667,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -710,6 +695,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -726,6 +712,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -746,6 +733,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -766,6 +754,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -791,6 +780,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -816,6 +806,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -840,6 +831,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -860,6 +852,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -886,17 +879,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListDatabasesRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java index dab91ea8efb..c259ec9d3fd 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListDatabasesRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListDatabasesRequest) @@ -39,6 +41,7 @@ public interface ListDatabasesRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -84,6 +87,7 @@ public interface ListDatabasesRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java index a50a16577a5..eb569c1ffdd 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabasesResponse} */ -public final class ListDatabasesResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListDatabasesResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.ListDatabasesResponse) ListDatabasesResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListDatabasesResponse"); + } + // Use ListDatabasesResponse.newBuilder() to construct. - private ListDatabasesResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListDatabasesResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListDatabasesResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListDatabasesResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List databases_; + /** * * @@ -82,6 +90,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getDatabasesList() { return databases_; } + /** * * @@ -96,6 +105,7 @@ public java.util.List getDatabase getDatabasesOrBuilderList() { return databases_; } + /** * * @@ -109,6 +119,7 @@ public java.util.List getDatabase public int getDatabasesCount() { return databases_.size(); } + /** * * @@ -122,6 +133,7 @@ public int getDatabasesCount() { public com.google.spanner.admin.database.v1.Database getDatabases(int index) { return databases_.get(index); } + /** * * @@ -140,6 +152,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabasesOrBuil @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -165,6 +178,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -208,8 +222,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < databases_.size(); i++) { output.writeMessage(1, databases_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -223,8 +237,8 @@ public int getSerializedSize() { for (int i = 0; i < databases_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, databases_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -303,38 +317,38 @@ public static com.google.spanner.admin.database.v1.ListDatabasesResponse parseFr public static com.google.spanner.admin.database.v1.ListDatabasesResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabasesResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabasesResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabasesResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.ListDatabasesResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.ListDatabasesResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -358,10 +372,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -372,7 +387,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.ListDatabasesResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.ListDatabasesResponse) com.google.spanner.admin.database.v1.ListDatabasesResponseOrBuilder { @@ -382,7 +397,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_fieldAccessorTable @@ -394,7 +409,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.ListDatabasesResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -465,39 +480,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.ListDatabasesRes } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.ListDatabasesResponse) { @@ -530,8 +512,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.ListDatabasesRespo databases_ = other.databases_; bitField0_ = (bitField0_ & ~0x00000001); databasesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getDatabasesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetDatabasesFieldBuilder() : null; } else { databasesBuilder_.addAllMessages(other.databases_); @@ -618,7 +600,7 @@ private void ensureDatabasesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> @@ -640,6 +622,7 @@ public java.util.List getDatabase return databasesBuilder_.getMessageList(); } } + /** * * @@ -656,6 +639,7 @@ public int getDatabasesCount() { return databasesBuilder_.getCount(); } } + /** * * @@ -672,6 +656,7 @@ public com.google.spanner.admin.database.v1.Database getDatabases(int index) { return databasesBuilder_.getMessage(index); } } + /** * * @@ -694,6 +679,7 @@ public Builder setDatabases(int index, com.google.spanner.admin.database.v1.Data } return this; } + /** * * @@ -714,6 +700,7 @@ public Builder setDatabases( } return this; } + /** * * @@ -736,6 +723,7 @@ public Builder addDatabases(com.google.spanner.admin.database.v1.Database value) } return this; } + /** * * @@ -758,6 +746,7 @@ public Builder addDatabases(int index, com.google.spanner.admin.database.v1.Data } return this; } + /** * * @@ -778,6 +767,7 @@ public Builder addDatabases( } return this; } + /** * * @@ -798,6 +788,7 @@ public Builder addDatabases( } return this; } + /** * * @@ -818,6 +809,7 @@ public Builder addAllDatabases( } return this; } + /** * * @@ -837,6 +829,7 @@ public Builder clearDatabases() { } return this; } + /** * * @@ -856,6 +849,7 @@ public Builder removeDatabases(int index) { } return this; } + /** * * @@ -866,8 +860,9 @@ public Builder removeDatabases(int index) { * repeated .google.spanner.admin.database.v1.Database databases = 1; */ public com.google.spanner.admin.database.v1.Database.Builder getDatabasesBuilder(int index) { - return getDatabasesFieldBuilder().getBuilder(index); + return internalGetDatabasesFieldBuilder().getBuilder(index); } + /** * * @@ -884,6 +879,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabasesOrBuil return databasesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -901,6 +897,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabasesOrBuil return java.util.Collections.unmodifiableList(databases_); } } + /** * * @@ -911,9 +908,10 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabasesOrBuil * repeated .google.spanner.admin.database.v1.Database databases = 1; */ public com.google.spanner.admin.database.v1.Database.Builder addDatabasesBuilder() { - return getDatabasesFieldBuilder() + return internalGetDatabasesFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.Database.getDefaultInstance()); } + /** * * @@ -924,9 +922,10 @@ public com.google.spanner.admin.database.v1.Database.Builder addDatabasesBuilder * repeated .google.spanner.admin.database.v1.Database databases = 1; */ public com.google.spanner.admin.database.v1.Database.Builder addDatabasesBuilder(int index) { - return getDatabasesFieldBuilder() + return internalGetDatabasesFieldBuilder() .addBuilder(index, com.google.spanner.admin.database.v1.Database.getDefaultInstance()); } + /** * * @@ -938,17 +937,17 @@ public com.google.spanner.admin.database.v1.Database.Builder addDatabasesBuilder */ public java.util.List getDatabasesBuilderList() { - return getDatabasesFieldBuilder().getBuilderList(); + return internalGetDatabasesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> - getDatabasesFieldBuilder() { + internalGetDatabasesFieldBuilder() { if (databasesBuilder_ == null) { databasesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder>( @@ -959,6 +958,7 @@ public com.google.spanner.admin.database.v1.Database.Builder addDatabasesBuilder } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -983,6 +983,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1007,6 +1008,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1030,6 +1032,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1049,6 +1052,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1074,17 +1078,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.ListDatabasesResponse) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java index 8ca41b1fd4b..337dbc2c7f5 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface ListDatabasesResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.ListDatabasesResponse) @@ -34,6 +36,7 @@ public interface ListDatabasesResponseOrBuilder * repeated .google.spanner.admin.database.v1.Database databases = 1; */ java.util.List getDatabasesList(); + /** * * @@ -44,6 +47,7 @@ public interface ListDatabasesResponseOrBuilder * repeated .google.spanner.admin.database.v1.Database databases = 1; */ com.google.spanner.admin.database.v1.Database getDatabases(int index); + /** * * @@ -54,6 +58,7 @@ public interface ListDatabasesResponseOrBuilder * repeated .google.spanner.admin.database.v1.Database databases = 1; */ int getDatabasesCount(); + /** * * @@ -65,6 +70,7 @@ public interface ListDatabasesResponseOrBuilder */ java.util.List getDatabasesOrBuilderList(); + /** * * @@ -90,6 +96,7 @@ public interface ListDatabasesResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java index 66fe94c3834..fb3dd65b048 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.OperationProgress} */ -public final class OperationProgress extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class OperationProgress extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.OperationProgress) OperationProgressOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "OperationProgress"); + } + // Use OperationProgress.newBuilder() to construct. - private OperationProgress(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private OperationProgress(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private OperationProgress() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new OperationProgress(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_OperationProgress_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_OperationProgress_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PROGRESS_PERCENT_FIELD_NUMBER = 1; private int progressPercent_ = 0; + /** * * @@ -84,6 +92,7 @@ public int getProgressPercent() { public static final int START_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -99,6 +108,7 @@ public int getProgressPercent() { public boolean hasStartTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -114,6 +124,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -130,6 +141,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -146,6 +158,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -162,6 +175,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -306,38 +320,38 @@ public static com.google.spanner.admin.database.v1.OperationProgress parseFrom( public static com.google.spanner.admin.database.v1.OperationProgress parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.OperationProgress parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.OperationProgress parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.OperationProgress parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.OperationProgress parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.OperationProgress parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -361,10 +375,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -375,7 +390,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.OperationProgress} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.OperationProgress) com.google.spanner.admin.database.v1.OperationProgressOrBuilder { @@ -385,7 +400,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_OperationProgress_fieldAccessorTable @@ -399,15 +414,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getStartTimeFieldBuilder(); - getEndTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStartTimeFieldBuilder(); + internalGetEndTimeFieldBuilder(); } } @@ -477,39 +492,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.OperationProgres result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.OperationProgress) { @@ -566,13 +548,14 @@ public Builder mergeFrom( } // case 8 case 18: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -596,6 +579,7 @@ public Builder mergeFrom( private int bitField0_; private int progressPercent_; + /** * * @@ -612,6 +596,7 @@ public Builder mergeFrom( public int getProgressPercent() { return progressPercent_; } + /** * * @@ -632,6 +617,7 @@ public Builder setProgressPercent(int value) { onChanged(); return this; } + /** * * @@ -652,11 +638,12 @@ public Builder clearProgressPercent() { } private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -671,6 +658,7 @@ public Builder clearProgressPercent() { public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -689,6 +677,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -711,6 +700,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -730,6 +720,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -757,6 +748,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -776,6 +768,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -788,8 +781,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -806,6 +800,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -815,14 +810,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -833,11 +828,12 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private com.google.protobuf.Timestamp endTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -853,6 +849,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -872,6 +869,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -895,6 +893,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -915,6 +914,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -943,6 +943,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -963,6 +964,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -976,8 +978,9 @@ public Builder clearEndTime() { public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getEndTimeFieldBuilder().getBuilder(); + return internalGetEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -995,6 +998,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1005,14 +1009,14 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { * * .google.protobuf.Timestamp end_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEndTimeFieldBuilder() { + internalGetEndTimeFieldBuilder() { if (endTimeBuilder_ == null) { endTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1022,17 +1026,6 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.OperationProgress) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java index e3a4979cb15..80a3ca67c21 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface OperationProgressOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.OperationProgress) @@ -50,6 +52,7 @@ public interface OperationProgressOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -62,6 +65,7 @@ public interface OperationProgressOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -86,6 +90,7 @@ public interface OperationProgressOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -99,6 +104,7 @@ public interface OperationProgressOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java index d65533ce01c..954c6b25dfc 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -31,14 +32,26 @@ * * Protobuf type {@code google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata} */ -public final class OptimizeRestoredDatabaseMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class OptimizeRestoredDatabaseMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata) OptimizeRestoredDatabaseMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "OptimizeRestoredDatabaseMetadata"); + } + // Use OptimizeRestoredDatabaseMetadata.newBuilder() to construct. private OptimizeRestoredDatabaseMetadata( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +59,13 @@ private OptimizeRestoredDatabaseMetadata() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new OptimizeRestoredDatabaseMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_fieldAccessorTable @@ -72,6 +79,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int PROGRESS_FIELD_NUMBER = 2; private com.google.spanner.admin.database.v1.OperationProgress progress_; + /** * * @@ -136,6 +146,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasProgress() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -153,6 +164,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -183,8 +195,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getProgress()); @@ -198,8 +210,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getProgress()); @@ -284,39 +296,39 @@ public static com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetad public static com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -340,10 +352,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -356,7 +369,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata) com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadataOrBuilder { @@ -366,7 +379,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_fieldAccessorTable @@ -381,14 +394,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getProgressFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetProgressFieldBuilder(); } } @@ -452,39 +465,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata) { @@ -543,7 +523,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -567,6 +548,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -589,6 +571,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -611,6 +594,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -632,6 +616,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -649,6 +634,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -673,11 +659,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -692,6 +679,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -712,6 +700,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -734,6 +723,7 @@ public Builder setProgress(com.google.spanner.admin.database.v1.OperationProgres onChanged(); return this; } + /** * * @@ -754,6 +744,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -782,6 +773,7 @@ public Builder mergeProgress(com.google.spanner.admin.database.v1.OperationProgr } return this; } + /** * * @@ -801,6 +793,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -813,8 +806,9 @@ public Builder clearProgress() { public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -833,6 +827,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -842,14 +837,14 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.database.v1.OperationProgress progress = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder>( @@ -859,17 +854,6 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre return progressBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java index 009ea179158..b25ba1e0297 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface OptimizeRestoredDatabaseMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata) @@ -36,6 +38,7 @@ public interface OptimizeRestoredDatabaseMetadataOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -61,6 +64,7 @@ public interface OptimizeRestoredDatabaseMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -73,6 +77,7 @@ public interface OptimizeRestoredDatabaseMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.database.v1.OperationProgress getProgress(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java index f0c457d994f..438b24bf863 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,14 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig} */ -public final class RestoreDatabaseEncryptionConfig extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class RestoreDatabaseEncryptionConfig extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig) RestoreDatabaseEncryptionConfigOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RestoreDatabaseEncryptionConfig"); + } + // Use RestoreDatabaseEncryptionConfig.newBuilder() to construct. - private RestoreDatabaseEncryptionConfig( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private RestoreDatabaseEncryptionConfig(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +57,13 @@ private RestoreDatabaseEncryptionConfig() { kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RestoreDatabaseEncryptionConfig(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_fieldAccessorTable @@ -123,6 +129,16 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "EncryptionType"); + } + /** * * @@ -133,6 +149,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * ENCRYPTION_TYPE_UNSPECIFIED = 0; */ public static final int ENCRYPTION_TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -145,6 +162,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION = 1; */ public static final int USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION_VALUE = 1; + /** * * @@ -155,6 +173,7 @@ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum { * GOOGLE_DEFAULT_ENCRYPTION = 2; */ public static final int GOOGLE_DEFAULT_ENCRYPTION_VALUE = 2; + /** * * @@ -227,7 +246,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig.getDescriptor() .getEnumTypes() .get(0); @@ -256,6 +275,7 @@ private EncryptionType(int value) { public static final int ENCRYPTION_TYPE_FIELD_NUMBER = 1; private int encryptionType_ = 0; + /** * * @@ -273,6 +293,7 @@ private EncryptionType(int value) { public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -302,6 +323,7 @@ public int getEncryptionTypeValue() { @SuppressWarnings("serial") private volatile java.lang.Object kmsKeyName_ = ""; + /** * * @@ -331,6 +353,7 @@ public java.lang.String getKmsKeyName() { return s; } } + /** * * @@ -366,6 +389,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList kmsKeyNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -396,6 +420,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { return kmsKeyNames_; } + /** * * @@ -426,6 +451,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -457,6 +483,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -509,11 +536,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io .getNumber()) { output.writeEnum(1, encryptionType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, kmsKeyName_); } for (int i = 0; i < kmsKeyNames_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, kmsKeyNames_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, kmsKeyNames_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -530,8 +557,8 @@ public int getSerializedSize() { .getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, encryptionType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kmsKeyName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, kmsKeyName_); } { int dataSize = 0; @@ -621,39 +648,39 @@ public static com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConf public static com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -677,10 +704,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -690,7 +718,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig) com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfigOrBuilder { @@ -700,7 +728,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_fieldAccessorTable @@ -713,7 +741,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -775,39 +803,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig) { @@ -907,6 +902,7 @@ public Builder mergeFrom( private int bitField0_; private int encryptionType_ = 0; + /** * * @@ -924,6 +920,7 @@ public Builder mergeFrom( public int getEncryptionTypeValue() { return encryptionType_; } + /** * * @@ -944,6 +941,7 @@ public Builder setEncryptionTypeValue(int value) { onChanged(); return this; } + /** * * @@ -968,6 +966,7 @@ public Builder setEncryptionTypeValue(int value) { .UNRECOGNIZED : result; } + /** * * @@ -992,6 +991,7 @@ public Builder setEncryptionType( onChanged(); return this; } + /** * * @@ -1013,6 +1013,7 @@ public Builder clearEncryptionType() { } private java.lang.Object kmsKeyName_ = ""; + /** * * @@ -1041,6 +1042,7 @@ public java.lang.String getKmsKeyName() { return (java.lang.String) ref; } } + /** * * @@ -1069,6 +1071,7 @@ public com.google.protobuf.ByteString getKmsKeyNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1096,6 +1099,7 @@ public Builder setKmsKeyName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1119,6 +1123,7 @@ public Builder clearKmsKeyName() { onChanged(); return this; } + /** * * @@ -1157,6 +1162,7 @@ private void ensureKmsKeyNamesIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -1188,6 +1194,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { kmsKeyNames_.makeImmutable(); return kmsKeyNames_; } + /** * * @@ -1218,6 +1225,7 @@ public com.google.protobuf.ProtocolStringList getKmsKeyNamesList() { public int getKmsKeyNamesCount() { return kmsKeyNames_.size(); } + /** * * @@ -1249,6 +1257,7 @@ public int getKmsKeyNamesCount() { public java.lang.String getKmsKeyNames(int index) { return kmsKeyNames_.get(index); } + /** * * @@ -1280,6 +1289,7 @@ public java.lang.String getKmsKeyNames(int index) { public com.google.protobuf.ByteString getKmsKeyNamesBytes(int index) { return kmsKeyNames_.getByteString(index); } + /** * * @@ -1319,6 +1329,7 @@ public Builder setKmsKeyNames(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1357,6 +1368,7 @@ public Builder addKmsKeyNames(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1392,6 +1404,7 @@ public Builder addAllKmsKeyNames(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1426,6 +1439,7 @@ public Builder clearKmsKeyNames() { onChanged(); return this; } + /** * * @@ -1466,17 +1480,6 @@ public Builder addKmsKeyNamesBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java index c7d3e06e9d5..ee21bfaa603 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface RestoreDatabaseEncryptionConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig) @@ -38,6 +40,7 @@ public interface RestoreDatabaseEncryptionConfigOrBuilder * @return The enum numeric value on the wire for encryptionType. */ int getEncryptionTypeValue(); + /** * * @@ -72,6 +75,7 @@ public interface RestoreDatabaseEncryptionConfigOrBuilder * @return The kmsKeyName. */ java.lang.String getKmsKeyName(); + /** * * @@ -119,6 +123,7 @@ public interface RestoreDatabaseEncryptionConfigOrBuilder * @return A list containing the kmsKeyNames. */ java.util.List getKmsKeyNamesList(); + /** * * @@ -147,6 +152,7 @@ public interface RestoreDatabaseEncryptionConfigOrBuilder * @return The count of kmsKeyNames. */ int getKmsKeyNamesCount(); + /** * * @@ -176,6 +182,7 @@ public interface RestoreDatabaseEncryptionConfigOrBuilder * @return The kmsKeyNames at the given index. */ java.lang.String getKmsKeyNames(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java index bfdb45d5c31..8235d556042 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.RestoreDatabaseMetadata} */ -public final class RestoreDatabaseMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class RestoreDatabaseMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.RestoreDatabaseMetadata) RestoreDatabaseMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RestoreDatabaseMetadata"); + } + // Use RestoreDatabaseMetadata.newBuilder() to construct. - private RestoreDatabaseMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private RestoreDatabaseMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private RestoreDatabaseMetadata() { optimizeDatabaseOperationName_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RestoreDatabaseMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_fieldAccessorTable @@ -83,6 +90,7 @@ public enum SourceInfoCase private SourceInfoCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -117,6 +125,7 @@ public SourceInfoCase getSourceInfoCase() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -140,6 +149,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -166,6 +176,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int SOURCE_TYPE_FIELD_NUMBER = 2; private int sourceType_ = 0; + /** * * @@ -181,6 +192,7 @@ public com.google.protobuf.ByteString getNameBytes() { public int getSourceTypeValue() { return sourceType_; } + /** * * @@ -202,6 +214,7 @@ public com.google.spanner.admin.database.v1.RestoreSourceType getSourceType() { } public static final int BACKUP_INFO_FIELD_NUMBER = 3; + /** * * @@ -217,6 +230,7 @@ public com.google.spanner.admin.database.v1.RestoreSourceType getSourceType() { public boolean hasBackupInfo() { return sourceInfoCase_ == 3; } + /** * * @@ -235,6 +249,7 @@ public com.google.spanner.admin.database.v1.BackupInfo getBackupInfo() { } return com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } + /** * * @@ -254,6 +269,7 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB public static final int PROGRESS_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.OperationProgress progress_; + /** * * @@ -271,6 +287,7 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB public boolean hasProgress() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -290,6 +307,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -310,6 +328,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public static final int CANCEL_TIME_FIELD_NUMBER = 5; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -336,6 +355,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -362,6 +382,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -391,6 +412,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { @SuppressWarnings("serial") private volatile java.lang.Object optimizeDatabaseOperationName_ = ""; + /** * * @@ -424,6 +446,7 @@ public java.lang.String getOptimizeDatabaseOperationName() { return s; } } + /** * * @@ -472,8 +495,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (sourceType_ != com.google.spanner.admin.database.v1.RestoreSourceType.TYPE_UNSPECIFIED.getNumber()) { @@ -488,8 +511,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(5, getCancelTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(optimizeDatabaseOperationName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 6, optimizeDatabaseOperationName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(optimizeDatabaseOperationName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 6, optimizeDatabaseOperationName_); } getUnknownFields().writeTo(output); } @@ -500,8 +523,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (sourceType_ != com.google.spanner.admin.database.v1.RestoreSourceType.TYPE_UNSPECIFIED.getNumber()) { @@ -518,10 +541,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getCancelTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(optimizeDatabaseOperationName_)) { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(optimizeDatabaseOperationName_)) { size += - com.google.protobuf.GeneratedMessageV3.computeStringSize( - 6, optimizeDatabaseOperationName_); + com.google.protobuf.GeneratedMessage.computeStringSize(6, optimizeDatabaseOperationName_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -634,38 +656,38 @@ public static com.google.spanner.admin.database.v1.RestoreDatabaseMetadata parse public static com.google.spanner.admin.database.v1.RestoreDatabaseMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreDatabaseMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -689,10 +711,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -703,7 +726,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.RestoreDatabaseMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.RestoreDatabaseMetadata) com.google.spanner.admin.database.v1.RestoreDatabaseMetadataOrBuilder { @@ -713,7 +736,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_fieldAccessorTable @@ -727,15 +750,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getProgressFieldBuilder(); - getCancelTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetProgressFieldBuilder(); + internalGetCancelTimeFieldBuilder(); } } @@ -830,39 +853,6 @@ private void buildPartialOneofs( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.RestoreDatabaseMetadata) { @@ -947,19 +937,22 @@ public Builder mergeFrom( } // case 16 case 26: { - input.readMessage(getBackupInfoFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetBackupInfoFieldBuilder().getBuilder(), extensionRegistry); sourceInfoCase_ = 3; break; } // case 26 case 34: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 case 42: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -1003,6 +996,7 @@ public Builder clearSourceInfo() { private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -1025,6 +1019,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1047,6 +1042,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1068,6 +1064,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1085,6 +1082,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -1109,6 +1107,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private int sourceType_ = 0; + /** * * @@ -1124,6 +1123,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public int getSourceTypeValue() { return sourceType_; } + /** * * @@ -1142,6 +1142,7 @@ public Builder setSourceTypeValue(int value) { onChanged(); return this; } + /** * * @@ -1161,6 +1162,7 @@ public com.google.spanner.admin.database.v1.RestoreSourceType getSourceType() { ? com.google.spanner.admin.database.v1.RestoreSourceType.UNRECOGNIZED : result; } + /** * * @@ -1182,6 +1184,7 @@ public Builder setSourceType(com.google.spanner.admin.database.v1.RestoreSourceT onChanged(); return this; } + /** * * @@ -1200,11 +1203,12 @@ public Builder clearSourceType() { return this; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupInfo, com.google.spanner.admin.database.v1.BackupInfo.Builder, com.google.spanner.admin.database.v1.BackupInfoOrBuilder> backupInfoBuilder_; + /** * * @@ -1220,6 +1224,7 @@ public Builder clearSourceType() { public boolean hasBackupInfo() { return sourceInfoCase_ == 3; } + /** * * @@ -1245,6 +1250,7 @@ public com.google.spanner.admin.database.v1.BackupInfo getBackupInfo() { return com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } } + /** * * @@ -1267,6 +1273,7 @@ public Builder setBackupInfo(com.google.spanner.admin.database.v1.BackupInfo val sourceInfoCase_ = 3; return this; } + /** * * @@ -1287,6 +1294,7 @@ public Builder setBackupInfo( sourceInfoCase_ = 3; return this; } + /** * * @@ -1320,6 +1328,7 @@ public Builder mergeBackupInfo(com.google.spanner.admin.database.v1.BackupInfo v sourceInfoCase_ = 3; return this; } + /** * * @@ -1345,6 +1354,7 @@ public Builder clearBackupInfo() { } return this; } + /** * * @@ -1355,8 +1365,9 @@ public Builder clearBackupInfo() { * .google.spanner.admin.database.v1.BackupInfo backup_info = 3; */ public com.google.spanner.admin.database.v1.BackupInfo.Builder getBackupInfoBuilder() { - return getBackupInfoFieldBuilder().getBuilder(); + return internalGetBackupInfoFieldBuilder().getBuilder(); } + /** * * @@ -1377,6 +1388,7 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB return com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } } + /** * * @@ -1386,17 +1398,17 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB * * .google.spanner.admin.database.v1.BackupInfo backup_info = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupInfo, com.google.spanner.admin.database.v1.BackupInfo.Builder, com.google.spanner.admin.database.v1.BackupInfoOrBuilder> - getBackupInfoFieldBuilder() { + internalGetBackupInfoFieldBuilder() { if (backupInfoBuilder_ == null) { if (!(sourceInfoCase_ == 3)) { sourceInfo_ = com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } backupInfoBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupInfo, com.google.spanner.admin.database.v1.BackupInfo.Builder, com.google.spanner.admin.database.v1.BackupInfoOrBuilder>( @@ -1411,11 +1423,12 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB } private com.google.spanner.admin.database.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -1432,6 +1445,7 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB public boolean hasProgress() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1454,6 +1468,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -1478,6 +1493,7 @@ public Builder setProgress(com.google.spanner.admin.database.v1.OperationProgres onChanged(); return this; } + /** * * @@ -1500,6 +1516,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -1530,6 +1547,7 @@ public Builder mergeProgress(com.google.spanner.admin.database.v1.OperationProgr } return this; } + /** * * @@ -1551,6 +1569,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -1565,8 +1584,9 @@ public Builder clearProgress() { public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -1587,6 +1607,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -1598,14 +1619,14 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.database.v1.OperationProgress progress = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder>( @@ -1616,11 +1637,12 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1646,6 +1668,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1677,6 +1700,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1710,6 +1734,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1740,6 +1765,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1778,6 +1804,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1808,6 +1835,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1831,8 +1859,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1862,6 +1891,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1882,14 +1912,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1900,6 +1930,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { } private java.lang.Object optimizeDatabaseOperationName_ = ""; + /** * * @@ -1932,6 +1963,7 @@ public java.lang.String getOptimizeDatabaseOperationName() { return (java.lang.String) ref; } } + /** * * @@ -1964,6 +1996,7 @@ public com.google.protobuf.ByteString getOptimizeDatabaseOperationNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1995,6 +2028,7 @@ public Builder setOptimizeDatabaseOperationName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2022,6 +2056,7 @@ public Builder clearOptimizeDatabaseOperationName() { onChanged(); return this; } + /** * * @@ -2055,17 +2090,6 @@ public Builder setOptimizeDatabaseOperationNameBytes(com.google.protobuf.ByteStr return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.RestoreDatabaseMetadata) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java index eea3dade4a0..2aa59a8775c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface RestoreDatabaseMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.RestoreDatabaseMetadata) @@ -36,6 +38,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -61,6 +64,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return The enum numeric value on the wire for sourceType. */ int getSourceTypeValue(); + /** * * @@ -86,6 +90,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return Whether the backupInfo field is set. */ boolean hasBackupInfo(); + /** * * @@ -98,6 +103,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return The backupInfo. */ com.google.spanner.admin.database.v1.BackupInfo getBackupInfo(); + /** * * @@ -123,6 +129,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -137,6 +144,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.database.v1.OperationProgress getProgress(); + /** * * @@ -173,6 +181,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -196,6 +205,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * @@ -240,6 +250,7 @@ public interface RestoreDatabaseMetadataOrBuilder * @return The optimizeDatabaseOperationName. */ java.lang.String getOptimizeDatabaseOperationName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java index 9ecd7015fed..310613bb1ac 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.RestoreDatabaseRequest} */ -public final class RestoreDatabaseRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class RestoreDatabaseRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.RestoreDatabaseRequest) RestoreDatabaseRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RestoreDatabaseRequest"); + } + // Use RestoreDatabaseRequest.newBuilder() to construct. - private RestoreDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private RestoreDatabaseRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private RestoreDatabaseRequest() { databaseId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RestoreDatabaseRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_fieldAccessorTable @@ -82,6 +89,7 @@ public enum SourceCase private SourceCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -116,6 +124,7 @@ public SourceCase getSourceCase() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -145,6 +154,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -179,6 +189,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -205,6 +216,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -233,6 +245,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { } public static final int BACKUP_FIELD_NUMBER = 3; + /** * * @@ -248,6 +261,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public boolean hasBackup() { return sourceCase_ == 3; } + /** * * @@ -276,6 +290,7 @@ public java.lang.String getBackup() { return s; } } + /** * * @@ -307,6 +322,7 @@ public com.google.protobuf.ByteString getBackupBytes() { public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig encryptionConfig_; + /** * * @@ -329,6 +345,7 @@ public com.google.protobuf.ByteString getBackupBytes() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -354,6 +371,7 @@ public boolean hasEncryptionConfig() { ? com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -392,14 +410,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, databaseId_); } if (sourceCase_ == 3) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, source_); + com.google.protobuf.GeneratedMessage.writeString(output, 3, source_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getEncryptionConfig()); @@ -413,14 +431,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, databaseId_); } if (sourceCase_ == 3) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, source_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, source_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getEncryptionConfig()); @@ -524,38 +542,38 @@ public static com.google.spanner.admin.database.v1.RestoreDatabaseRequest parseF public static com.google.spanner.admin.database.v1.RestoreDatabaseRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreDatabaseRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -579,10 +597,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -593,7 +612,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.RestoreDatabaseRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.RestoreDatabaseRequest) com.google.spanner.admin.database.v1.RestoreDatabaseRequestOrBuilder { @@ -603,7 +622,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_fieldAccessorTable @@ -617,14 +636,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getEncryptionConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetEncryptionConfigFieldBuilder(); } } @@ -699,39 +718,6 @@ private void buildPartialOneofs( result.source_ = this.source_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.RestoreDatabaseRequest) { @@ -819,7 +805,7 @@ public Builder mergeFrom( case 34: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -857,6 +843,7 @@ public Builder clearSource() { private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -885,6 +872,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -913,6 +901,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -940,6 +929,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -963,6 +953,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -993,6 +984,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -1018,6 +1010,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1043,6 +1036,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1067,6 +1061,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1087,6 +1082,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1129,6 +1125,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public boolean hasBackup() { return sourceCase_ == 3; } + /** * * @@ -1158,6 +1155,7 @@ public java.lang.String getBackup() { return (java.lang.String) ref; } } + /** * * @@ -1187,6 +1185,7 @@ public com.google.protobuf.ByteString getBackupBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1209,6 +1208,7 @@ public Builder setBackup(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1229,6 +1229,7 @@ public Builder clearBackup() { } return this; } + /** * * @@ -1254,11 +1255,12 @@ public Builder setBackupBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig, com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig.Builder, com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1280,6 +1282,7 @@ public Builder setBackupBytes(com.google.protobuf.ByteString value) { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1309,6 +1312,7 @@ public boolean hasEncryptionConfig() { return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1339,6 +1343,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1367,6 +1372,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1404,6 +1410,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1430,6 +1437,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1450,8 +1458,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1479,6 +1488,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1495,14 +1505,14 @@ public Builder clearEncryptionConfig() { * .google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig encryption_config = 4 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig, com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig.Builder, com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig, com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig.Builder, com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfigOrBuilder>( @@ -1512,17 +1522,6 @@ public Builder clearEncryptionConfig() { return encryptionConfigBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.RestoreDatabaseRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java index afebab0ff5b..b36a76b8a2a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface RestoreDatabaseRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.RestoreDatabaseRequest) @@ -42,6 +44,7 @@ public interface RestoreDatabaseRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -76,6 +79,7 @@ public interface RestoreDatabaseRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -105,6 +109,7 @@ public interface RestoreDatabaseRequestOrBuilder * @return Whether the backup field is set. */ boolean hasBackup(); + /** * * @@ -118,6 +123,7 @@ public interface RestoreDatabaseRequestOrBuilder * @return The backup. */ java.lang.String getBackup(); + /** * * @@ -151,6 +157,7 @@ public interface RestoreDatabaseRequestOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -170,6 +177,7 @@ public interface RestoreDatabaseRequestOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfig getEncryptionConfig(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java index 8714ff1403d..a06362fab8a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.RestoreInfo} */ -public final class RestoreInfo extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class RestoreInfo extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.RestoreInfo) RestoreInfoOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RestoreInfo"); + } + // Use RestoreInfo.newBuilder() to construct. - private RestoreInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private RestoreInfo(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private RestoreInfo() { sourceType_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RestoreInfo(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreInfo_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreInfo_fieldAccessorTable @@ -79,6 +86,7 @@ public enum SourceInfoCase private SourceInfoCase(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 +119,7 @@ public SourceInfoCase getSourceInfoCase() { public static final int SOURCE_TYPE_FIELD_NUMBER = 1; private int sourceType_ = 0; + /** * * @@ -126,6 +135,7 @@ public SourceInfoCase getSourceInfoCase() { public int getSourceTypeValue() { return sourceType_; } + /** * * @@ -147,6 +157,7 @@ public com.google.spanner.admin.database.v1.RestoreSourceType getSourceType() { } public static final int BACKUP_INFO_FIELD_NUMBER = 2; + /** * * @@ -163,6 +174,7 @@ public com.google.spanner.admin.database.v1.RestoreSourceType getSourceType() { public boolean hasBackupInfo() { return sourceInfoCase_ == 2; } + /** * * @@ -182,6 +194,7 @@ public com.google.spanner.admin.database.v1.BackupInfo getBackupInfo() { } return com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } + /** * * @@ -327,38 +340,38 @@ public static com.google.spanner.admin.database.v1.RestoreInfo parseFrom( public static com.google.spanner.admin.database.v1.RestoreInfo parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreInfo parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreInfo parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreInfo parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.RestoreInfo parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.RestoreInfo parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -381,10 +394,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -394,7 +408,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.RestoreInfo} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.RestoreInfo) com.google.spanner.admin.database.v1.RestoreInfoOrBuilder { @@ -404,7 +418,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_RestoreInfo_fieldAccessorTable @@ -416,7 +430,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.RestoreInfo.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -480,39 +494,6 @@ private void buildPartialOneofs(com.google.spanner.admin.database.v1.RestoreInfo } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.RestoreInfo) { @@ -574,7 +555,8 @@ public Builder mergeFrom( } // case 8 case 18: { - input.readMessage(getBackupInfoFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetBackupInfoFieldBuilder().getBuilder(), extensionRegistry); sourceInfoCase_ = 2; break; } // case 18 @@ -612,6 +594,7 @@ public Builder clearSourceInfo() { private int bitField0_; private int sourceType_ = 0; + /** * * @@ -627,6 +610,7 @@ public Builder clearSourceInfo() { public int getSourceTypeValue() { return sourceType_; } + /** * * @@ -645,6 +629,7 @@ public Builder setSourceTypeValue(int value) { onChanged(); return this; } + /** * * @@ -664,6 +649,7 @@ public com.google.spanner.admin.database.v1.RestoreSourceType getSourceType() { ? com.google.spanner.admin.database.v1.RestoreSourceType.UNRECOGNIZED : result; } + /** * * @@ -685,6 +671,7 @@ public Builder setSourceType(com.google.spanner.admin.database.v1.RestoreSourceT onChanged(); return this; } + /** * * @@ -703,11 +690,12 @@ public Builder clearSourceType() { return this; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupInfo, com.google.spanner.admin.database.v1.BackupInfo.Builder, com.google.spanner.admin.database.v1.BackupInfoOrBuilder> backupInfoBuilder_; + /** * * @@ -724,6 +712,7 @@ public Builder clearSourceType() { public boolean hasBackupInfo() { return sourceInfoCase_ == 2; } + /** * * @@ -750,6 +739,7 @@ public com.google.spanner.admin.database.v1.BackupInfo getBackupInfo() { return com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } } + /** * * @@ -773,6 +763,7 @@ public Builder setBackupInfo(com.google.spanner.admin.database.v1.BackupInfo val sourceInfoCase_ = 2; return this; } + /** * * @@ -794,6 +785,7 @@ public Builder setBackupInfo( sourceInfoCase_ = 2; return this; } + /** * * @@ -828,6 +820,7 @@ public Builder mergeBackupInfo(com.google.spanner.admin.database.v1.BackupInfo v sourceInfoCase_ = 2; return this; } + /** * * @@ -854,6 +847,7 @@ public Builder clearBackupInfo() { } return this; } + /** * * @@ -865,8 +859,9 @@ public Builder clearBackupInfo() { * .google.spanner.admin.database.v1.BackupInfo backup_info = 2; */ public com.google.spanner.admin.database.v1.BackupInfo.Builder getBackupInfoBuilder() { - return getBackupInfoFieldBuilder().getBuilder(); + return internalGetBackupInfoFieldBuilder().getBuilder(); } + /** * * @@ -888,6 +883,7 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB return com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } } + /** * * @@ -898,17 +894,17 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB * * .google.spanner.admin.database.v1.BackupInfo backup_info = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupInfo, com.google.spanner.admin.database.v1.BackupInfo.Builder, com.google.spanner.admin.database.v1.BackupInfoOrBuilder> - getBackupInfoFieldBuilder() { + internalGetBackupInfoFieldBuilder() { if (backupInfoBuilder_ == null) { if (!(sourceInfoCase_ == 2)) { sourceInfo_ = com.google.spanner.admin.database.v1.BackupInfo.getDefaultInstance(); } backupInfoBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupInfo, com.google.spanner.admin.database.v1.BackupInfo.Builder, com.google.spanner.admin.database.v1.BackupInfoOrBuilder>( @@ -922,17 +918,6 @@ public com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrB return backupInfoBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.RestoreInfo) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java index d7cb3218847..1f7c2d94ace 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface RestoreInfoOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.RestoreInfo) @@ -36,6 +38,7 @@ public interface RestoreInfoOrBuilder * @return The enum numeric value on the wire for sourceType. */ int getSourceTypeValue(); + /** * * @@ -62,6 +65,7 @@ public interface RestoreInfoOrBuilder * @return Whether the backupInfo field is set. */ boolean hasBackupInfo(); + /** * * @@ -75,6 +79,7 @@ public interface RestoreInfoOrBuilder * @return The backupInfo. */ com.google.spanner.admin.database.v1.BackupInfo getBackupInfo(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java index 69686954ee7..369e284b7fc 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -28,6 +29,7 @@ * * Protobuf enum {@code google.spanner.admin.database.v1.RestoreSourceType} */ +@com.google.protobuf.Generated public enum RestoreSourceType implements com.google.protobuf.ProtocolMessageEnum { /** * @@ -52,6 +54,16 @@ public enum RestoreSourceType implements com.google.protobuf.ProtocolMessageEnum UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RestoreSourceType"); + } + /** * * @@ -62,6 +74,7 @@ public enum RestoreSourceType implements com.google.protobuf.ProtocolMessageEnum * TYPE_UNSPECIFIED = 0; */ public static final int TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -130,7 +143,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto.getDescriptor() .getEnumTypes() .get(0); diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java index 9ebb5dfd07d..b66802a5d79 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; -public final class SpannerDatabaseAdminProto { +@com.google.protobuf.Generated +public final class SpannerDatabaseAdminProto extends com.google.protobuf.GeneratedFile { private SpannerDatabaseAdminProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerDatabaseAdminProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,100 +42,124 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_RestoreInfo_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_RestoreInfo_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_Database_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_Database_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_DatabaseRole_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_SplitPoints_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_SplitPoints_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_SplitPoints_Key_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_SplitPoints_Key_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { return descriptor; @@ -133,310 +169,337 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n=google/spanner/admin/database/v1/spann" - + "er_database_admin.proto\022 google.spanner." + "\n" + + "=google/spanner/admin/database/v1/spanner_database_admin.proto\022 google.spanner." + "admin.database.v1\032\034google/api/annotation" + "s.proto\032\027google/api/client.proto\032\037google" + "/api/field_behavior.proto\032\031google/api/re" + "source.proto\032\036google/iam/v1/iam_policy.p" + "roto\032\032google/iam/v1/policy.proto\032#google" - + "/longrunning/operations.proto\032\033google/pr" - + "otobuf/empty.proto\032 google/protobuf/fiel" - + "d_mask.proto\032\037google/protobuf/timestamp." - + "proto\032-google/spanner/admin/database/v1/" - + "backup.proto\0326google/spanner/admin/datab" - + "ase/v1/backup_schedule.proto\032-google/spa" - + "nner/admin/database/v1/common.proto\"\253\001\n\013" - + "RestoreInfo\022H\n\013source_type\030\001 \001(\01623.googl" - + "e.spanner.admin.database.v1.RestoreSourc" - + "eType\022C\n\013backup_info\030\002 \001(\0132,.google.span" - + "ner.admin.database.v1.BackupInfoH\000B\r\n\013so" - + "urce_info\"\312\006\n\010Database\022\021\n\004name\030\001 \001(\tB\003\340A" - + "\002\022D\n\005state\030\002 \001(\01620.google.spanner.admin." - + "database.v1.Database.StateB\003\340A\003\0224\n\013creat" - + "e_time\030\003 \001(\0132\032.google.protobuf.Timestamp" - + "B\003\340A\003\022H\n\014restore_info\030\004 \001(\0132-.google.spa" - + "nner.admin.database.v1.RestoreInfoB\003\340A\003\022" - + "R\n\021encryption_config\030\005 \001(\01322.google.span" - + "ner.admin.database.v1.EncryptionConfigB\003" - + "\340A\003\022N\n\017encryption_info\030\010 \003(\01320.google.sp" - + "anner.admin.database.v1.EncryptionInfoB\003" - + "\340A\003\022%\n\030version_retention_period\030\006 \001(\tB\003\340" - + "A\003\022>\n\025earliest_version_time\030\007 \001(\0132\032.goog" - + "le.protobuf.TimestampB\003\340A\003\022\033\n\016default_le" - + "ader\030\t \001(\tB\003\340A\003\022P\n\020database_dialect\030\n \001(" - + "\01621.google.spanner.admin.database.v1.Dat" - + "abaseDialectB\003\340A\003\022\036\n\026enable_drop_protect" - + "ion\030\013 \001(\010\022\030\n\013reconciling\030\014 \001(\010B\003\340A\003\"M\n\005S" - + "tate\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020" - + "\001\022\t\n\005READY\020\002\022\024\n\020READY_OPTIMIZING\020\003:b\352A_\n" - + "\037spanner.googleapis.com/Database\022\332A\006parent\202\323\344\223\002/\022-/v1/{parent=projec" - + "ts/*/instances/*}/databases\022\244\002\n\016CreateDa" - + "tabase\0227.google.spanner.admin.database.v" - + "1.CreateDatabaseRequest\032\035.google.longrun" - + "ning.Operation\"\271\001\312Ad\n)google.spanner.adm" - + "in.database.v1.Database\0227google.spanner." - + "admin.database.v1.CreateDatabaseMetadata" - + "\332A\027parent,create_statement\202\323\344\223\0022\"-/v1/{p" - + "arent=projects/*/instances/*}/databases:" - + "\001*\022\255\001\n\013GetDatabase\0224.google.spanner.admi" - + "n.database.v1.GetDatabaseRequest\032*.googl" - + "e.spanner.admin.database.v1.Database\"<\332A" - + "\004name\202\323\344\223\002/\022-/v1/{name=projects/*/instan" - + "ces/*/databases/*}\022\357\001\n\016UpdateDatabase\0227." - + "google.spanner.admin.database.v1.UpdateD" - + "atabaseRequest\032\035.google.longrunning.Oper" - + "ation\"\204\001\312A\"\n\010Database\022\026UpdateDatabaseMet" - + "adata\332A\024database,update_mask\202\323\344\223\002B26/v1/" - + "{database.name=projects/*/instances/*/da" - + "tabases/*}:\010database\022\235\002\n\021UpdateDatabaseD" - + "dl\022:.google.spanner.admin.database.v1.Up" - + "dateDatabaseDdlRequest\032\035.google.longrunn" - + "ing.Operation\"\254\001\312AS\n\025google.protobuf.Emp" - + "ty\022:google.spanner.admin.database.v1.Upd" - + "ateDatabaseDdlMetadata\332A\023database,statem" - + "ents\202\323\344\223\002:25/v1/{database=projects/*/ins" - + "tances/*/databases/*}/ddl:\001*\022\243\001\n\014DropDat" - + "abase\0225.google.spanner.admin.database.v1" - + ".DropDatabaseRequest\032\026.google.protobuf.E" - + "mpty\"D\332A\010database\202\323\344\223\0023*1/v1/{database=p" - + "rojects/*/instances/*/databases/*}\022\315\001\n\016G" - + "etDatabaseDdl\0227.google.spanner.admin.dat" - + "abase.v1.GetDatabaseDdlRequest\0328.google." - + "spanner.admin.database.v1.GetDatabaseDdl" - + "Response\"H\332A\010database\202\323\344\223\0027\0225/v1/{databa" - + "se=projects/*/instances/*/databases/*}/d" - + "dl\022\302\002\n\014SetIamPolicy\022\".google.iam.v1.SetI" - + "amPolicyRequest\032\025.google.iam.v1.Policy\"\366" - + "\001\332A\017resource,policy\202\323\344\223\002\335\001\">/v1/{resourc" - + "e=projects/*/instances/*/databases/*}:se" - + "tIamPolicy:\001*ZA\"/v1/{resource=" - + "projects/*/instances/*/databases/*}:getI" - + "amPolicy:\001*ZA\".google.spanner.admin.databa" - + "se.v1.ListBackupOperationsResponse\"E\332A\006p" - + "arent\202\323\344\223\0026\0224/v1/{parent=projects/*/inst" - + "ances/*}/backupOperations\022\334\001\n\021ListDataba" - + "seRoles\022:.google.spanner.admin.database." - + "v1.ListDatabaseRolesRequest\032;.google.spa" - + "nner.admin.database.v1.ListDatabaseRoles" - + "Response\"N\332A\006parent\202\323\344\223\002?\022=/v1/{parent=p" - + "rojects/*/instances/*/databases/*}/datab" - + "aseRoles\022\216\002\n\024CreateBackupSchedule\022=.goog" - + "le.spanner.admin.database.v1.CreateBacku" - + "pScheduleRequest\0320.google.spanner.admin." - + "database.v1.BackupSchedule\"\204\001\332A)parent,b" - + "ackup_schedule,backup_schedule_id\202\323\344\223\002R\"" - + "?/v1/{parent=projects/*/instances/*/data" - + "bases/*}/backupSchedules:\017backup_schedul" - + "e\022\321\001\n\021GetBackupSchedule\022:.google.spanner" - + ".admin.database.v1.GetBackupScheduleRequ" - + "est\0320.google.spanner.admin.database.v1.B" - + "ackupSchedule\"N\332A\004name\202\323\344\223\002A\022?/v1/{name=" - + "projects/*/instances/*/databases/*/backu" - + "pSchedules/*}\022\220\002\n\024UpdateBackupSchedule\022=" - + ".google.spanner.admin.database.v1.Update" - + "BackupScheduleRequest\0320.google.spanner.a" - + "dmin.database.v1.BackupSchedule\"\206\001\332A\033bac" - + "kup_schedule,update_mask\202\323\344\223\002b2O/v1/{bac" - + "kup_schedule.name=projects/*/instances/*" - + "/databases/*/backupSchedules/*}:\017backup_" - + "schedule\022\275\001\n\024DeleteBackupSchedule\022=.goog" - + "le.spanner.admin.database.v1.DeleteBacku" - + "pScheduleRequest\032\026.google.protobuf.Empty" - + "\"N\332A\004name\202\323\344\223\002A*?/v1/{name=projects/*/in" - + "stances/*/databases/*/backupSchedules/*}" - + "\022\344\001\n\023ListBackupSchedules\022<.google.spanne" - + "r.admin.database.v1.ListBackupSchedulesR" - + "equest\032=.google.spanner.admin.database.v" - + "1.ListBackupSchedulesResponse\"P\332A\006parent" - + "\202\323\344\223\002A\022?/v1/{parent=projects/*/instances" - + "/*/databases/*}/backupSchedules\032x\312A\026span" - + "ner.googleapis.com\322A\\https://www.googlea" - + "pis.com/auth/cloud-platform,https://www." - + "googleapis.com/auth/spanner.adminB\330\002\n$co" - + "m.google.spanner.admin.database.v1B\031Span" - + "nerDatabaseAdminProtoP\001ZFcloud.google.co" - + "m/go/spanner/admin/database/apiv1/databa" - + "sepb;databasepb\252\002&Google.Cloud.Spanner.A" - + "dmin.Database.V1\312\002&Google\\Cloud\\Spanner\\" - + "Admin\\Database\\V1\352\002+Google::Cloud::Spann" - + "er::Admin::Database::V1\352AJ\n\037spanner.goog" - + "leapis.com/Instance\022\'projects/{project}/" - + "instances/{instance}b\006proto3" + + "/longrunning/operations.proto\032\033google/protobuf/empty.proto\032" + + " google/protobuf/field_mask.proto\032\034google/protobuf/struct.pro" + + "to\032\037google/protobuf/timestamp.proto\032\027goo" + + "gle/rpc/status.proto\032-google/spanner/admin/database/v1/backup.proto\0326google/span" + + "ner/admin/database/v1/backup_schedule.pr" + + "oto\032-google/spanner/admin/database/v1/common.proto\"\253\001\n" + + "\013RestoreInfo\022H\n" + + "\013source_type\030\001" + + " \001(\01623.google.spanner.admin.database.v1.RestoreSourceType\022C\n" + + "\013backup_info\030\002 \001(" + + "\0132,.google.spanner.admin.database.v1.BackupInfoH\000B\r\n" + + "\013source_info\"\312\006\n" + + "\010Database\022\021\n" + + "\004name\030\001 \001(\tB\003\340A\002\022D\n" + + "\005state\030\002 \001(\01620.google" + + ".spanner.admin.database.v1.Database.StateB\003\340A\003\0224\n" + + "\013create_time\030\003 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022H\n" + + "\014restore_info\030\004 \001" + + "(\0132-.google.spanner.admin.database.v1.RestoreInfoB\003\340A\003\022R\n" + + "\021encryption_config\030\005 \001(" + + "\01322.google.spanner.admin.database.v1.EncryptionConfigB\003\340A\003\022N\n" + + "\017encryption_info\030\010 " + + "\003(\01320.google.spanner.admin.database.v1.EncryptionInfoB\003\340A\003\022%\n" + + "\030version_retention_period\030\006 \001(\tB\003\340A\003\022>\n" + + "\025earliest_version_time\030\007" + + " \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022\033\n" + + "\016default_leader\030\t \001(\tB\003\340A\003\022P\n" + + "\020database_dialect\030\n" + + " \001(\01621.google.spanner.admin.database.v1.DatabaseDialectB\003\340A\003\022\036\n" + + "\026enable_drop_protection\030\013 \001(\010\022\030\n" + + "\013reconciling\030\014 \001(\010B\003\340A\003\"M\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\014\n" + + "\010CREATING\020\001\022\t\n" + + "\005READY\020\002\022\024\n" + + "\020READY_OPTIMIZING\020\003:b\352A_\n" + + "\037spanner.googleapis.com/D" + + "atabase\022\332A\006parent\202" + + "\323\344\223\002/\022-/v1/{parent=projects/*/instances/*}/databases\022\244\002\n" + + "\016CreateDatabase\0227.google.spanner.admin.database.v1.CreateDatabas" + + "eRequest\032\035.google.longrunning.Operation\"\271\001\312Ad\n" + + ")google.spanner.admin.database.v1.Database\0227google.spanner.admin.database." + + "v1.CreateDatabaseMetadata\332A\027parent,creat" + + "e_statement\202\323\344\223\0022\"-/v1/{parent=projects/*/instances/*}/databases:\001*\022\255\001\n" + + "\013GetDatabase\0224.google.spanner.admin.database.v1.G" + + "etDatabaseRequest\032*.google.spanner.admin" + + ".database.v1.Database\"<\332A\004name\202\323\344\223\002/\022-/v" + + "1/{name=projects/*/instances/*/databases/*}\022\357\001\n" + + "\016UpdateDatabase\0227.google.spanner." + + "admin.database.v1.UpdateDatabaseRequest\032\035.google.longrunning.Operation\"\204\001\312A\"\n" + + "\010Database\022\026UpdateDatabaseMetadata\332A\024databas" + + "e,update_mask\202\323\344\223\002B26/v1/{database.name=" + + "projects/*/instances/*/databases/*}:\010database\022\235\002\n" + + "\021UpdateDatabaseDdl\022:.google.spanner.admin.database.v1.UpdateDatabaseDdl" + + "Request\032\035.google.longrunning.Operation\"\254\001\312AS\n" + + "\025google.protobuf.Empty\022:google.spanner.admin.database.v1.UpdateDatabaseDdlM" + + "etadata\332A\023database,statements\202\323\344\223\002:25/v1" + + "/{database=projects/*/instances/*/databases/*}/ddl:\001*\022\243\001\n" + + "\014DropDatabase\0225.google.spanner.admin.database.v1.DropDatabaseRe" + + "quest\032\026.google.protobuf.Empty\"D\332A\010databa" + + "se\202\323\344\223\0023*1/v1/{database=projects/*/instances/*/databases/*}\022\315\001\n" + + "\016GetDatabaseDdl\0227.google.spanner.admin.database.v1.GetDat" + + "abaseDdlRequest\0328.google.spanner.admin.d" + + "atabase.v1.GetDatabaseDdlResponse\"H\332A\010da" + + "tabase\202\323\344\223\0027\0225/v1/{database=projects/*/instances/*/databases/*}/ddl\022\302\002\n" + + "\014SetIamPolicy\022\".google.iam.v1.SetIamPolicyRequest" + + "\032\025.google.iam.v1.Policy\"\366\001\332A\017resource,po" + + "licy\202\323\344\223\002\335\001\">/v1/{resource=projects/*/in" + + "stances/*/databases/*}:setIamPolicy:\001*ZA\"/v1/{resource=projects/*/inst" + + "ances/*/databases/*}:getIamPolicy:\001*ZA\".google.spanner.admin.database.v1.ListBacku" + + "pOperationsResponse\"E\332A\006parent\202\323\344\223\0026\0224/v" + + "1/{parent=projects/*/instances/*}/backupOperations\022\334\001\n" + + "\021ListDatabaseRoles\022:.google.spanner.admin.database.v1.ListDatabase" + + "RolesRequest\032;.google.spanner.admin.data" + + "base.v1.ListDatabaseRolesResponse\"N\332A\006pa" + + "rent\202\323\344\223\002?\022=/v1/{parent=projects/*/instances/*/databases/*}/databaseRoles\022\350\001\n" + + "\016AddSplitPoints\0227.google.spanner.admin.data" + + "base.v1.AddSplitPointsRequest\0328.google.spanner.admin.database.v1.AddSplitPointsR" + + "esponse\"c\332A\025database,split_points\202\323\344\223\002E\"" + + "@/v1/{database=projects/*/instances/*/databases/*}:addSplitPoints:\001*\022\216\002\n" + + "\024CreateBackupSchedule\022=.google.spanner.admin.dat" + + "abase.v1.CreateBackupScheduleRequest\0320.google.spanner.admin.database.v1.BackupSc" + + "hedule\"\204\001\332A)parent,backup_schedule,backu" + + "p_schedule_id\202\323\344\223\002R\"?/v1/{parent=project" + + "s/*/instances/*/databases/*}/backupSchedules:\017backup_schedule\022\321\001\n" + + "\021GetBackupSchedule\022:.google.spanner.admin.database.v1.G" + + "etBackupScheduleRequest\0320.google.spanner" + + ".admin.database.v1.BackupSchedule\"N\332A\004na" + + "me\202\323\344\223\002A\022?/v1/{name=projects/*/instances/*/databases/*/backupSchedules/*}\022\220\002\n" + + "\024UpdateBackupSchedule\022=.google.spanner.admi" + + "n.database.v1.UpdateBackupScheduleRequest\0320.google.spanner.admin.database.v1.Bac" + + "kupSchedule\"\206\001\332A\033backup_schedule,update_" + + "mask\202\323\344\223\002b2O/v1/{backup_schedule.name=pr" + + "ojects/*/instances/*/databases/*/backupSchedules/*}:\017backup_schedule\022\275\001\n" + + "\024DeleteBackupSchedule\022=.google.spanner.admin.dat" + + "abase.v1.DeleteBackupScheduleRequest\032\026.g" + + "oogle.protobuf.Empty\"N\332A\004name\202\323\344\223\002A*?/v1" + + "/{name=projects/*/instances/*/databases/*/backupSchedules/*}\022\344\001\n" + + "\023ListBackupSchedules\022<.google.spanner.admin.database.v1." + + "ListBackupSchedulesRequest\032=.google.spanner.admin.database.v1.ListBackupSchedule" + + "sResponse\"P\332A\006parent\202\323\344\223\002A\022?/v1/{parent=" + + "projects/*/instances/*/databases/*}/backupSchedules\022\307\001\n" + + "\034InternalUpdateGraphOperation\022E.google.spanner.admin.database.v1." + + "InternalUpdateGraphOperationRequest\032F.google.spanner.admin.database.v1.InternalU" + + "pdateGraphOperationResponse\"\030\332A\025database" + + ",operation_id\032x\312A\026spanner.googleapis.com" + + "\322A\\https://www.googleapis.com/auth/cloud" + + "-platform,https://www.googleapis.com/auth/spanner.adminB\326\003\n" + + "$com.google.spanner.admin.database.v1B\031SpannerDatabaseAdminPr" + + "otoP\001ZFcloud.google.com/go/spanner/admin" + + "/database/apiv1/databasepb;databasepb\252\002&" + + "Google.Cloud.Spanner.Admin.Database.V1\312\002" + + "&Google\\Cloud\\Spanner\\Admin\\Database\\V1\352" + + "\002+Google::Cloud::Spanner::Admin::Database::V1\352AJ\n" + + "\037spanner.googleapis.com/Instanc" + + "e\022\'projects/{project}/instances/{instance}\352A{\n" + + "(spanner.googleapis.com/InstancePartition\022Oprojects/{project}/instances/{i" + + "nstance}/instancePartitions/{instance_partition}b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -451,23 +514,25 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.longrunning.OperationsProto.getDescriptor(), com.google.protobuf.EmptyProto.getDescriptor(), com.google.protobuf.FieldMaskProto.getDescriptor(), + com.google.protobuf.StructProto.getDescriptor(), com.google.protobuf.TimestampProto.getDescriptor(), + com.google.rpc.StatusProto.getDescriptor(), com.google.spanner.admin.database.v1.BackupProto.getDescriptor(), com.google.spanner.admin.database.v1.BackupScheduleProto.getDescriptor(), com.google.spanner.admin.database.v1.CommonProto.getDescriptor(), }); internal_static_google_spanner_admin_database_v1_RestoreInfo_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_admin_database_v1_RestoreInfo_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_RestoreInfo_descriptor, new java.lang.String[] { "SourceType", "BackupInfo", "SourceInfo", }); internal_static_google_spanner_admin_database_v1_Database_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_admin_database_v1_Database_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_Database_descriptor, new java.lang.String[] { "Name", @@ -484,25 +549,25 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Reconciling", }); internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_descriptor, new java.lang.String[] { "Parent", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageType(3); internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_descriptor, new java.lang.String[] { "Databases", "NextPageToken", }); internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_descriptor = - getDescriptor().getMessageTypes().get(4); + getDescriptor().getMessageType(4); internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_descriptor, new java.lang.String[] { "Parent", @@ -513,121 +578,121 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ProtoDescriptors", }); internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_descriptor = - getDescriptor().getMessageTypes().get(5); + getDescriptor().getMessageType(5); internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_descriptor, new java.lang.String[] { "Database", }); internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_descriptor = - getDescriptor().getMessageTypes().get(6); + getDescriptor().getMessageType(6); internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor = - getDescriptor().getMessageTypes().get(7); + getDescriptor().getMessageType(7); internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor, new java.lang.String[] { "Database", "UpdateMask", }); internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageType(8); internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor, new java.lang.String[] { "Request", "Progress", "CancelTime", }); internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor = - getDescriptor().getMessageTypes().get(9); + getDescriptor().getMessageType(9); internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor, new java.lang.String[] { - "Database", "Statements", "OperationId", "ProtoDescriptors", + "Database", "Statements", "OperationId", "ProtoDescriptors", "ThroughputMode", }); internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor = - getDescriptor().getMessageTypes().get(10); + getDescriptor().getMessageType(10); internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor, new java.lang.String[] { "Action", "EntityType", "EntityNames", }); internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor = - getDescriptor().getMessageTypes().get(11); + getDescriptor().getMessageType(11); internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor, new java.lang.String[] { "Database", "Statements", "CommitTimestamps", "Throttled", "Progress", "Actions", }); internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageType(12); internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor, new java.lang.String[] { "Database", }); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor = - getDescriptor().getMessageTypes().get(13); + getDescriptor().getMessageType(13); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor, new java.lang.String[] { "Database", }); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor = - getDescriptor().getMessageTypes().get(14); + getDescriptor().getMessageType(14); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor, new java.lang.String[] { "Statements", "ProtoDescriptors", }); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor = - getDescriptor().getMessageTypes().get(15); + getDescriptor().getMessageType(15); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor, new java.lang.String[] { "Parent", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor = - getDescriptor().getMessageTypes().get(16); + getDescriptor().getMessageType(16); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor, new java.lang.String[] { "Operations", "NextPageToken", }); internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor = - getDescriptor().getMessageTypes().get(17); + getDescriptor().getMessageType(17); internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor, new java.lang.String[] { "Parent", "DatabaseId", "Backup", "EncryptionConfig", "Source", }); internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor = - getDescriptor().getMessageTypes().get(18); + getDescriptor().getMessageType(18); internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor, new java.lang.String[] { "EncryptionType", "KmsKeyName", "KmsKeyNames", }); internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor = - getDescriptor().getMessageTypes().get(19); + getDescriptor().getMessageType(19); internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor, new java.lang.String[] { "Name", @@ -639,50 +704,82 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "SourceInfo", }); internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor = - getDescriptor().getMessageTypes().get(20); + getDescriptor().getMessageType(20); internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor, new java.lang.String[] { "Name", "Progress", }); internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor = - getDescriptor().getMessageTypes().get(21); + getDescriptor().getMessageType(21); internal_static_google_spanner_admin_database_v1_DatabaseRole_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor = - getDescriptor().getMessageTypes().get(22); + getDescriptor().getMessageType(22); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor, new java.lang.String[] { "Parent", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor = - getDescriptor().getMessageTypes().get(23); + getDescriptor().getMessageType(23); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor, new java.lang.String[] { "DatabaseRoles", "NextPageToken", }); - com.google.protobuf.ExtensionRegistry registry = - com.google.protobuf.ExtensionRegistry.newInstance(); - registry.add(com.google.api.ClientProto.defaultHost); - registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); - registry.add(com.google.api.AnnotationsProto.http); - registry.add(com.google.api.ClientProto.methodSignature); - registry.add(com.google.api.ClientProto.oauthScopes); - registry.add(com.google.api.ResourceProto.resource); - registry.add(com.google.api.ResourceProto.resourceDefinition); - registry.add(com.google.api.ResourceProto.resourceReference); - registry.add(com.google.longrunning.OperationsProto.operationInfo); - com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( - descriptor, registry); + internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_descriptor = + getDescriptor().getMessageType(24); + internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_AddSplitPointsRequest_descriptor, + new java.lang.String[] { + "Database", "SplitPoints", "Initiator", + }); + internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_descriptor = + getDescriptor().getMessageType(25); + internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_AddSplitPointsResponse_descriptor, + new java.lang.String[] {}); + internal_static_google_spanner_admin_database_v1_SplitPoints_descriptor = + getDescriptor().getMessageType(26); + internal_static_google_spanner_admin_database_v1_SplitPoints_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_SplitPoints_descriptor, + new java.lang.String[] { + "Table", "Index", "Keys", "ExpireTime", + }); + internal_static_google_spanner_admin_database_v1_SplitPoints_Key_descriptor = + internal_static_google_spanner_admin_database_v1_SplitPoints_descriptor.getNestedType(0); + internal_static_google_spanner_admin_database_v1_SplitPoints_Key_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_SplitPoints_Key_descriptor, + new java.lang.String[] { + "KeyParts", + }); + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_descriptor = + getDescriptor().getMessageType(27); + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationRequest_descriptor, + new java.lang.String[] { + "Database", "OperationId", "VmIdentityToken", "Progress", "Status", + }); + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_descriptor = + getDescriptor().getMessageType(28); + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_InternalUpdateGraphOperationResponse_descriptor, + new java.lang.String[] {}); + descriptor.resolveAllFeaturesImmutable(); com.google.api.AnnotationsProto.getDescriptor(); com.google.api.ClientProto.getDescriptor(); com.google.api.FieldBehaviorProto.getDescriptor(); @@ -692,10 +789,25 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.longrunning.OperationsProto.getDescriptor(); com.google.protobuf.EmptyProto.getDescriptor(); com.google.protobuf.FieldMaskProto.getDescriptor(); + com.google.protobuf.StructProto.getDescriptor(); com.google.protobuf.TimestampProto.getDescriptor(); + com.google.rpc.StatusProto.getDescriptor(); com.google.spanner.admin.database.v1.BackupProto.getDescriptor(); com.google.spanner.admin.database.v1.BackupScheduleProto.getDescriptor(); com.google.spanner.admin.database.v1.CommonProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.ClientProto.defaultHost); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + registry.add(com.google.api.AnnotationsProto.http); + registry.add(com.google.api.ClientProto.methodSignature); + registry.add(com.google.api.ClientProto.oauthScopes); + registry.add(com.google.api.ResourceProto.resource); + registry.add(com.google.api.ResourceProto.resourceDefinition); + registry.add(com.google.api.ResourceProto.resourceReference); + registry.add(com.google.longrunning.OperationsProto.operationInfo); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SplitPoints.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SplitPoints.java new file mode 100644 index 00000000000..33b5dd6f2c6 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SplitPoints.java @@ -0,0 +1,2423 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
                                + * The split points of a table/index.
                                + * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.SplitPoints} + */ +@com.google.protobuf.Generated +public final class SplitPoints extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.SplitPoints) + SplitPointsOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SplitPoints"); + } + + // Use SplitPoints.newBuilder() to construct. + private SplitPoints(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private SplitPoints() { + table_ = ""; + index_ = ""; + keys_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.SplitPoints.class, + com.google.spanner.admin.database.v1.SplitPoints.Builder.class); + } + + public interface KeyOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.SplitPoints.Key) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Required. The column values making up the split key.
                                +     * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the keyParts field is set. + */ + boolean hasKeyParts(); + + /** + * + * + *
                                +     * Required. The column values making up the split key.
                                +     * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The keyParts. + */ + com.google.protobuf.ListValue getKeyParts(); + + /** + * + * + *
                                +     * Required. The column values making up the split key.
                                +     * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.protobuf.ListValueOrBuilder getKeyPartsOrBuilder(); + } + + /** + * + * + *
                                +   * A split key.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.SplitPoints.Key} + */ + public static final class Key extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.SplitPoints.Key) + KeyOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Key"); + } + + // Use Key.newBuilder() to construct. + private Key(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Key() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_Key_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_Key_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.SplitPoints.Key.class, + com.google.spanner.admin.database.v1.SplitPoints.Key.Builder.class); + } + + private int bitField0_; + public static final int KEY_PARTS_FIELD_NUMBER = 1; + private com.google.protobuf.ListValue keyParts_; + + /** + * + * + *
                                +     * Required. The column values making up the split key.
                                +     * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the keyParts field is set. + */ + @java.lang.Override + public boolean hasKeyParts() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Required. The column values making up the split key.
                                +     * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The keyParts. + */ + @java.lang.Override + public com.google.protobuf.ListValue getKeyParts() { + return keyParts_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : keyParts_; + } + + /** + * + * + *
                                +     * Required. The column values making up the split key.
                                +     * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.protobuf.ListValueOrBuilder getKeyPartsOrBuilder() { + return keyParts_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : keyParts_; + } + + 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, getKeyParts()); + } + 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, getKeyParts()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.SplitPoints.Key)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.SplitPoints.Key other = + (com.google.spanner.admin.database.v1.SplitPoints.Key) obj; + + if (hasKeyParts() != other.hasKeyParts()) return false; + if (hasKeyParts()) { + if (!getKeyParts().equals(other.getKeyParts())) 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 (hasKeyParts()) { + hash = (37 * hash) + KEY_PARTS_FIELD_NUMBER; + hash = (53 * hash) + getKeyParts().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.SplitPoints.Key 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * A split key.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.SplitPoints.Key} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.SplitPoints.Key) + com.google.spanner.admin.database.v1.SplitPoints.KeyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_Key_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_Key_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.SplitPoints.Key.class, + com.google.spanner.admin.database.v1.SplitPoints.Key.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetKeyPartsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + keyParts_ = null; + if (keyPartsBuilder_ != null) { + keyPartsBuilder_.dispose(); + keyPartsBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_Key_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints.Key getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.SplitPoints.Key.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints.Key build() { + com.google.spanner.admin.database.v1.SplitPoints.Key result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints.Key buildPartial() { + com.google.spanner.admin.database.v1.SplitPoints.Key result = + new com.google.spanner.admin.database.v1.SplitPoints.Key(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.admin.database.v1.SplitPoints.Key result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.keyParts_ = keyPartsBuilder_ == null ? keyParts_ : keyPartsBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.SplitPoints.Key) { + return mergeFrom((com.google.spanner.admin.database.v1.SplitPoints.Key) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.SplitPoints.Key other) { + if (other == com.google.spanner.admin.database.v1.SplitPoints.Key.getDefaultInstance()) + return this; + if (other.hasKeyParts()) { + mergeKeyParts(other.getKeyParts()); + } + 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( + internalGetKeyPartsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.ListValue keyParts_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + keyPartsBuilder_; + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the keyParts field is set. + */ + public boolean hasKeyParts() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The keyParts. + */ + public com.google.protobuf.ListValue getKeyParts() { + if (keyPartsBuilder_ == null) { + return keyParts_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : keyParts_; + } else { + return keyPartsBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setKeyParts(com.google.protobuf.ListValue value) { + if (keyPartsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + keyParts_ = value; + } else { + keyPartsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setKeyParts(com.google.protobuf.ListValue.Builder builderForValue) { + if (keyPartsBuilder_ == null) { + keyParts_ = builderForValue.build(); + } else { + keyPartsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeKeyParts(com.google.protobuf.ListValue value) { + if (keyPartsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && keyParts_ != null + && keyParts_ != com.google.protobuf.ListValue.getDefaultInstance()) { + getKeyPartsBuilder().mergeFrom(value); + } else { + keyParts_ = value; + } + } else { + keyPartsBuilder_.mergeFrom(value); + } + if (keyParts_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearKeyParts() { + bitField0_ = (bitField0_ & ~0x00000001); + keyParts_ = null; + if (keyPartsBuilder_ != null) { + keyPartsBuilder_.dispose(); + keyPartsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.ListValue.Builder getKeyPartsBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetKeyPartsFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.ListValueOrBuilder getKeyPartsOrBuilder() { + if (keyPartsBuilder_ != null) { + return keyPartsBuilder_.getMessageOrBuilder(); + } else { + return keyParts_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : keyParts_; + } + } + + /** + * + * + *
                                +       * Required. The column values making up the split key.
                                +       * 
                                + * + * .google.protobuf.ListValue key_parts = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + internalGetKeyPartsFieldBuilder() { + if (keyPartsBuilder_ == null) { + keyPartsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder>( + getKeyParts(), getParentForChildren(), isClean()); + keyParts_ = null; + } + return keyPartsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.SplitPoints.Key) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.SplitPoints.Key) + private static final com.google.spanner.admin.database.v1.SplitPoints.Key DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.SplitPoints.Key(); + } + + public static com.google.spanner.admin.database.v1.SplitPoints.Key getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Key parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints.Key getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + public static final int TABLE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object table_ = ""; + + /** + * + * + *
                                +   * The table to split.
                                +   * 
                                + * + * string table = 1; + * + * @return The table. + */ + @java.lang.Override + public java.lang.String getTable() { + java.lang.Object ref = table_; + 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(); + table_ = s; + return s; + } + } + + /** + * + * + *
                                +   * The table to split.
                                +   * 
                                + * + * string table = 1; + * + * @return The bytes for table. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int INDEX_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object index_ = ""; + + /** + * + * + *
                                +   * The index to split.
                                +   * If specified, the `table` field must refer to the index's base table.
                                +   * 
                                + * + * string index = 2; + * + * @return The index. + */ + @java.lang.Override + public java.lang.String getIndex() { + java.lang.Object ref = index_; + 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(); + index_ = s; + return s; + } + } + + /** + * + * + *
                                +   * The index to split.
                                +   * If specified, the `table` field must refer to the index's base table.
                                +   * 
                                + * + * string index = 2; + * + * @return The bytes for index. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIndexBytes() { + java.lang.Object ref = index_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + index_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int KEYS_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private java.util.List keys_; + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List getKeysList() { + return keys_; + } + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List + getKeysOrBuilderList() { + return keys_; + } + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public int getKeysCount() { + return keys_.size(); + } + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints.Key getKeys(int index) { + return keys_.get(index); + } + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints.KeyOrBuilder getKeysOrBuilder(int index) { + return keys_.get(index); + } + + public static final int EXPIRE_TIME_FIELD_NUMBER = 5; + private com.google.protobuf.Timestamp expireTime_; + + /** + * + * + *
                                +   * Optional. The expiration timestamp of the split points.
                                +   * A timestamp in the past means immediate expiration.
                                +   * The maximum value can be 30 days in the future.
                                +   * Defaults to 10 days in the future if not specified.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expireTime field is set. + */ + @java.lang.Override + public boolean hasExpireTime() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * Optional. The expiration timestamp of the split points.
                                +   * A timestamp in the past means immediate expiration.
                                +   * The maximum value can be 30 days in the future.
                                +   * Defaults to 10 days in the future if not specified.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expireTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getExpireTime() { + return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; + } + + /** + * + * + *
                                +   * Optional. The expiration timestamp of the split points.
                                +   * A timestamp in the past means immediate expiration.
                                +   * The maximum value can be 30 days in the future.
                                +   * Defaults to 10 days in the future if not specified.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { + return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; + } + + 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.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(index_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, index_); + } + for (int i = 0; i < keys_.size(); i++) { + output.writeMessage(3, keys_.get(i)); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(5, getExpireTime()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(index_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, index_); + } + for (int i = 0; i < keys_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, keys_.get(i)); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getExpireTime()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.SplitPoints)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.SplitPoints other = + (com.google.spanner.admin.database.v1.SplitPoints) obj; + + if (!getTable().equals(other.getTable())) return false; + if (!getIndex().equals(other.getIndex())) return false; + if (!getKeysList().equals(other.getKeysList())) return false; + if (hasExpireTime() != other.hasExpireTime()) return false; + if (hasExpireTime()) { + if (!getExpireTime().equals(other.getExpireTime())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TABLE_FIELD_NUMBER; + hash = (53 * hash) + getTable().hashCode(); + hash = (37 * hash) + INDEX_FIELD_NUMBER; + hash = (53 * hash) + getIndex().hashCode(); + if (getKeysCount() > 0) { + hash = (37 * hash) + KEYS_FIELD_NUMBER; + hash = (53 * hash) + getKeysList().hashCode(); + } + if (hasExpireTime()) { + hash = (37 * hash) + EXPIRE_TIME_FIELD_NUMBER; + hash = (53 * hash) + getExpireTime().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.SplitPoints parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.admin.database.v1.SplitPoints 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * The split points of a table/index.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.database.v1.SplitPoints} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.SplitPoints) + com.google.spanner.admin.database.v1.SplitPointsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.SplitPoints.class, + com.google.spanner.admin.database.v1.SplitPoints.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.SplitPoints.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetKeysFieldBuilder(); + internalGetExpireTimeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + table_ = ""; + index_ = ""; + if (keysBuilder_ == null) { + keys_ = java.util.Collections.emptyList(); + } else { + keys_ = null; + keysBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + expireTime_ = null; + if (expireTimeBuilder_ != null) { + expireTimeBuilder_.dispose(); + expireTimeBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_SplitPoints_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.SplitPoints.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints build() { + com.google.spanner.admin.database.v1.SplitPoints result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints buildPartial() { + com.google.spanner.admin.database.v1.SplitPoints result = + new com.google.spanner.admin.database.v1.SplitPoints(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + com.google.spanner.admin.database.v1.SplitPoints result) { + if (keysBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + keys_ = java.util.Collections.unmodifiableList(keys_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.keys_ = keys_; + } else { + result.keys_ = keysBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.admin.database.v1.SplitPoints result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.table_ = table_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.index_ = index_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000008) != 0)) { + result.expireTime_ = expireTimeBuilder_ == null ? expireTime_ : expireTimeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.SplitPoints) { + return mergeFrom((com.google.spanner.admin.database.v1.SplitPoints) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.SplitPoints other) { + if (other == com.google.spanner.admin.database.v1.SplitPoints.getDefaultInstance()) + return this; + if (!other.getTable().isEmpty()) { + table_ = other.table_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getIndex().isEmpty()) { + index_ = other.index_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (keysBuilder_ == null) { + if (!other.keys_.isEmpty()) { + if (keys_.isEmpty()) { + keys_ = other.keys_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureKeysIsMutable(); + keys_.addAll(other.keys_); + } + onChanged(); + } + } else { + if (!other.keys_.isEmpty()) { + if (keysBuilder_.isEmpty()) { + keysBuilder_.dispose(); + keysBuilder_ = null; + keys_ = other.keys_; + bitField0_ = (bitField0_ & ~0x00000004); + keysBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetKeysFieldBuilder() + : null; + } else { + keysBuilder_.addAllMessages(other.keys_); + } + } + } + if (other.hasExpireTime()) { + mergeExpireTime(other.getExpireTime()); + } + 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: + { + table_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + index_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + com.google.spanner.admin.database.v1.SplitPoints.Key m = + input.readMessage( + com.google.spanner.admin.database.v1.SplitPoints.Key.parser(), + extensionRegistry); + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.add(m); + } else { + keysBuilder_.addMessage(m); + } + break; + } // case 26 + case 42: + { + input.readMessage( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object table_ = ""; + + /** + * + * + *
                                +     * The table to split.
                                +     * 
                                + * + * string table = 1; + * + * @return The table. + */ + public java.lang.String getTable() { + java.lang.Object ref = table_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + table_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * The table to split.
                                +     * 
                                + * + * string table = 1; + * + * @return The bytes for table. + */ + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * The table to split.
                                +     * 
                                + * + * string table = 1; + * + * @param value The table to set. + * @return This builder for chaining. + */ + public Builder setTable(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + table_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The table to split.
                                +     * 
                                + * + * string table = 1; + * + * @return This builder for chaining. + */ + public Builder clearTable() { + table_ = getDefaultInstance().getTable(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The table to split.
                                +     * 
                                + * + * string table = 1; + * + * @param value The bytes for table to set. + * @return This builder for chaining. + */ + public Builder setTableBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + table_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object index_ = ""; + + /** + * + * + *
                                +     * The index to split.
                                +     * If specified, the `table` field must refer to the index's base table.
                                +     * 
                                + * + * string index = 2; + * + * @return The index. + */ + public java.lang.String getIndex() { + java.lang.Object ref = index_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + index_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * The index to split.
                                +     * If specified, the `table` field must refer to the index's base table.
                                +     * 
                                + * + * string index = 2; + * + * @return The bytes for index. + */ + public com.google.protobuf.ByteString getIndexBytes() { + java.lang.Object ref = index_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + index_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * The index to split.
                                +     * If specified, the `table` field must refer to the index's base table.
                                +     * 
                                + * + * string index = 2; + * + * @param value The index to set. + * @return This builder for chaining. + */ + public Builder setIndex(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + index_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The index to split.
                                +     * If specified, the `table` field must refer to the index's base table.
                                +     * 
                                + * + * string index = 2; + * + * @return This builder for chaining. + */ + public Builder clearIndex() { + index_ = getDefaultInstance().getIndex(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The index to split.
                                +     * If specified, the `table` field must refer to the index's base table.
                                +     * 
                                + * + * string index = 2; + * + * @param value The bytes for index to set. + * @return This builder for chaining. + */ + public Builder setIndexBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + index_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.util.List keys_ = + java.util.Collections.emptyList(); + + private void ensureKeysIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + keys_ = + new java.util.ArrayList(keys_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints.Key, + com.google.spanner.admin.database.v1.SplitPoints.Key.Builder, + com.google.spanner.admin.database.v1.SplitPoints.KeyOrBuilder> + keysBuilder_; + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getKeysList() { + if (keysBuilder_ == null) { + return java.util.Collections.unmodifiableList(keys_); + } else { + return keysBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public int getKeysCount() { + if (keysBuilder_ == null) { + return keys_.size(); + } else { + return keysBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.Key getKeys(int index) { + if (keysBuilder_ == null) { + return keys_.get(index); + } else { + return keysBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setKeys(int index, com.google.spanner.admin.database.v1.SplitPoints.Key value) { + if (keysBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKeysIsMutable(); + keys_.set(index, value); + onChanged(); + } else { + keysBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setKeys( + int index, com.google.spanner.admin.database.v1.SplitPoints.Key.Builder builderForValue) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.set(index, builderForValue.build()); + onChanged(); + } else { + keysBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addKeys(com.google.spanner.admin.database.v1.SplitPoints.Key value) { + if (keysBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKeysIsMutable(); + keys_.add(value); + onChanged(); + } else { + keysBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addKeys(int index, com.google.spanner.admin.database.v1.SplitPoints.Key value) { + if (keysBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKeysIsMutable(); + keys_.add(index, value); + onChanged(); + } else { + keysBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addKeys( + com.google.spanner.admin.database.v1.SplitPoints.Key.Builder builderForValue) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.add(builderForValue.build()); + onChanged(); + } else { + keysBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addKeys( + int index, com.google.spanner.admin.database.v1.SplitPoints.Key.Builder builderForValue) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.add(index, builderForValue.build()); + onChanged(); + } else { + keysBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addAllKeys( + java.lang.Iterable values) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, keys_); + onChanged(); + } else { + keysBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearKeys() { + if (keysBuilder_ == null) { + keys_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + keysBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder removeKeys(int index) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.remove(index); + onChanged(); + } else { + keysBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.Key.Builder getKeysBuilder(int index) { + return internalGetKeysFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.KeyOrBuilder getKeysOrBuilder( + int index) { + if (keysBuilder_ == null) { + return keys_.get(index); + } else { + return keysBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List + getKeysOrBuilderList() { + if (keysBuilder_ != null) { + return keysBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(keys_); + } + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.Key.Builder addKeysBuilder() { + return internalGetKeysFieldBuilder() + .addBuilder(com.google.spanner.admin.database.v1.SplitPoints.Key.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.SplitPoints.Key.Builder addKeysBuilder(int index) { + return internalGetKeysFieldBuilder() + .addBuilder( + index, com.google.spanner.admin.database.v1.SplitPoints.Key.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Required. The list of split keys, i.e., the split boundaries.
                                +     * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List + getKeysBuilderList() { + return internalGetKeysFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints.Key, + com.google.spanner.admin.database.v1.SplitPoints.Key.Builder, + com.google.spanner.admin.database.v1.SplitPoints.KeyOrBuilder> + internalGetKeysFieldBuilder() { + if (keysBuilder_ == null) { + keysBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints.Key, + com.google.spanner.admin.database.v1.SplitPoints.Key.Builder, + com.google.spanner.admin.database.v1.SplitPoints.KeyOrBuilder>( + keys_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean()); + keys_ = null; + } + return keysBuilder_; + } + + private com.google.protobuf.Timestamp expireTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + expireTimeBuilder_; + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expireTime field is set. + */ + public boolean hasExpireTime() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expireTime. + */ + public com.google.protobuf.Timestamp getExpireTime() { + if (expireTimeBuilder_ == null) { + return expireTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : expireTime_; + } else { + return expireTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setExpireTime(com.google.protobuf.Timestamp value) { + if (expireTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + expireTime_ = value; + } else { + expireTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (expireTimeBuilder_ == null) { + expireTime_ = builderForValue.build(); + } else { + expireTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { + if (expireTimeBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && expireTime_ != null + && expireTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getExpireTimeBuilder().mergeFrom(value); + } else { + expireTime_ = value; + } + } else { + expireTimeBuilder_.mergeFrom(value); + } + if (expireTime_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearExpireTime() { + bitField0_ = (bitField0_ & ~0x00000008); + expireTime_ = null; + if (expireTimeBuilder_ != null) { + expireTimeBuilder_.dispose(); + expireTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetExpireTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { + if (expireTimeBuilder_ != null) { + return expireTimeBuilder_.getMessageOrBuilder(); + } else { + return expireTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : expireTime_; + } + } + + /** + * + * + *
                                +     * Optional. The expiration timestamp of the split points.
                                +     * A timestamp in the past means immediate expiration.
                                +     * The maximum value can be 30 days in the future.
                                +     * Defaults to 10 days in the future if not specified.
                                +     * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetExpireTimeFieldBuilder() { + if (expireTimeBuilder_ == null) { + expireTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getExpireTime(), getParentForChildren(), isClean()); + expireTime_ = null; + } + return expireTimeBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.SplitPoints) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.SplitPoints) + private static final com.google.spanner.admin.database.v1.SplitPoints DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.SplitPoints(); + } + + public static com.google.spanner.admin.database.v1.SplitPoints getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SplitPoints parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SplitPointsOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SplitPointsOrBuilder.java new file mode 100644 index 00000000000..88720dd4b4b --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SplitPointsOrBuilder.java @@ -0,0 +1,197 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.database.v1; + +@com.google.protobuf.Generated +public interface SplitPointsOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.SplitPoints) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * The table to split.
                                +   * 
                                + * + * string table = 1; + * + * @return The table. + */ + java.lang.String getTable(); + + /** + * + * + *
                                +   * The table to split.
                                +   * 
                                + * + * string table = 1; + * + * @return The bytes for table. + */ + com.google.protobuf.ByteString getTableBytes(); + + /** + * + * + *
                                +   * The index to split.
                                +   * If specified, the `table` field must refer to the index's base table.
                                +   * 
                                + * + * string index = 2; + * + * @return The index. + */ + java.lang.String getIndex(); + + /** + * + * + *
                                +   * The index to split.
                                +   * If specified, the `table` field must refer to the index's base table.
                                +   * 
                                + * + * string index = 2; + * + * @return The bytes for index. + */ + com.google.protobuf.ByteString getIndexBytes(); + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getKeysList(); + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.admin.database.v1.SplitPoints.Key getKeys(int index); + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + int getKeysCount(); + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List + getKeysOrBuilderList(); + + /** + * + * + *
                                +   * Required. The list of split keys, i.e., the split boundaries.
                                +   * 
                                + * + * + * repeated .google.spanner.admin.database.v1.SplitPoints.Key keys = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.admin.database.v1.SplitPoints.KeyOrBuilder getKeysOrBuilder(int index); + + /** + * + * + *
                                +   * Optional. The expiration timestamp of the split points.
                                +   * A timestamp in the past means immediate expiration.
                                +   * The maximum value can be 30 days in the future.
                                +   * Defaults to 10 days in the future if not specified.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expireTime field is set. + */ + boolean hasExpireTime(); + + /** + * + * + *
                                +   * Optional. The expiration timestamp of the split points.
                                +   * A timestamp in the past means immediate expiration.
                                +   * The maximum value can be 30 days in the future.
                                +   * Defaults to 10 days in the future if not specified.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expireTime. + */ + com.google.protobuf.Timestamp getExpireTime(); + + /** + * + * + *
                                +   * Optional. The expiration timestamp of the split points.
                                +   * A timestamp in the past means immediate expiration.
                                +   * The maximum value can be 30 days in the future.
                                +   * Defaults to 10 days in the future if not specified.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder(); +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java index a11347980ff..ddc07036320 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.UpdateBackupRequest} */ -public final class UpdateBackupRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateBackupRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateBackupRequest) UpdateBackupRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateBackupRequest"); + } + // Use UpdateBackupRequest.newBuilder() to construct. - private UpdateBackupRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateBackupRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateBackupRequest() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateBackupRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int BACKUP_FIELD_NUMBER = 1; private com.google.spanner.admin.database.v1.Backup backup_; + /** * * @@ -72,7 +80,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -85,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasBackup() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -92,7 +101,7 @@ public boolean hasBackup() { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -107,6 +116,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { ? com.google.spanner.admin.database.v1.Backup.getDefaultInstance() : backup_; } + /** * * @@ -114,7 +124,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -130,6 +140,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() public static final int UPDATE_MASK_FIELD_NUMBER = 2; private com.google.protobuf.FieldMask updateMask_; + /** * * @@ -150,6 +161,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -170,6 +182,7 @@ public boolean hasUpdateMask() { public com.google.protobuf.FieldMask getUpdateMask() { return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; } + /** * * @@ -309,38 +322,38 @@ public static com.google.spanner.admin.database.v1.UpdateBackupRequest parseFrom public static com.google.spanner.admin.database.v1.UpdateBackupRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateBackupRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateBackupRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateBackupRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateBackupRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateBackupRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -364,10 +377,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -378,7 +392,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.UpdateBackupRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateBackupRequest) com.google.spanner.admin.database.v1.UpdateBackupRequestOrBuilder { @@ -388,7 +402,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_fieldAccessorTable @@ -402,15 +416,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getBackupFieldBuilder(); - getUpdateMaskFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetBackupFieldBuilder(); + internalGetUpdateMaskFieldBuilder(); } } @@ -476,39 +490,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.UpdateBackupRequ result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.UpdateBackupRequest) { @@ -556,13 +537,14 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getBackupFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetBackupFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -586,11 +568,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.database.v1.Backup backup_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> backupBuilder_; + /** * * @@ -598,7 +581,7 @@ public Builder mergeFrom( * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -610,6 +593,7 @@ public Builder mergeFrom( public boolean hasBackup() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -617,7 +601,7 @@ public boolean hasBackup() { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -635,6 +619,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { return backupBuilder_.getMessage(); } } + /** * * @@ -642,7 +627,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -662,6 +647,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup value) { onChanged(); return this; } + /** * * @@ -669,7 +655,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup value) { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -686,6 +672,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup.Builder bui onChanged(); return this; } + /** * * @@ -693,7 +680,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup.Builder bui * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -718,6 +705,7 @@ public Builder mergeBackup(com.google.spanner.admin.database.v1.Backup value) { } return this; } + /** * * @@ -725,7 +713,7 @@ public Builder mergeBackup(com.google.spanner.admin.database.v1.Backup value) { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -742,6 +730,7 @@ public Builder clearBackup() { onChanged(); return this; } + /** * * @@ -749,7 +738,7 @@ public Builder clearBackup() { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -759,8 +748,9 @@ public Builder clearBackup() { public com.google.spanner.admin.database.v1.Backup.Builder getBackupBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getBackupFieldBuilder().getBuilder(); + return internalGetBackupFieldBuilder().getBuilder(); } + /** * * @@ -768,7 +758,7 @@ public com.google.spanner.admin.database.v1.Backup.Builder getBackupBuilder() { * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -784,6 +774,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() : backup_; } } + /** * * @@ -791,21 +782,21 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * * .google.spanner.admin.database.v1.Backup backup = 1 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> - getBackupFieldBuilder() { + internalGetBackupFieldBuilder() { if (backupBuilder_ == null) { backupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder>( @@ -816,11 +807,12 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() } private com.google.protobuf.FieldMask updateMask_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> updateMaskBuilder_; + /** * * @@ -840,6 +832,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -865,6 +858,7 @@ public com.google.protobuf.FieldMask getUpdateMask() { return updateMaskBuilder_.getMessage(); } } + /** * * @@ -892,6 +886,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask value) { onChanged(); return this; } + /** * * @@ -916,6 +911,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForVal onChanged(); return this; } + /** * * @@ -948,6 +944,7 @@ public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { } return this; } + /** * * @@ -972,6 +969,7 @@ public Builder clearUpdateMask() { onChanged(); return this; } + /** * * @@ -989,8 +987,9 @@ public Builder clearUpdateMask() { public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getUpdateMaskFieldBuilder().getBuilder(); + return internalGetUpdateMaskFieldBuilder().getBuilder(); } + /** * * @@ -1014,6 +1013,7 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { : updateMask_; } } + /** * * @@ -1028,14 +1028,14 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> - getUpdateMaskFieldBuilder() { + internalGetUpdateMaskFieldBuilder() { if (updateMaskBuilder_ == null) { updateMaskBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder>( @@ -1045,17 +1045,6 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { return updateMaskBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateBackupRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java index 49a4d96eecb..a2da879952b 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface UpdateBackupRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateBackupRequest) @@ -31,7 +33,7 @@ public interface UpdateBackupRequestOrBuilder * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -41,6 +43,7 @@ public interface UpdateBackupRequestOrBuilder * @return Whether the backup field is set. */ boolean hasBackup(); + /** * * @@ -48,7 +51,7 @@ public interface UpdateBackupRequestOrBuilder * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -58,6 +61,7 @@ public interface UpdateBackupRequestOrBuilder * @return The backup. */ com.google.spanner.admin.database.v1.Backup getBackup(); + /** * * @@ -65,7 +69,7 @@ public interface UpdateBackupRequestOrBuilder * Required. The backup to update. `backup.name`, and the fields to be updated * as specified by `update_mask` are required. Other fields are ignored. * Update is only supported for the following fields: - * * `backup.expire_time`. + * * `backup.expire_time`. * * * @@ -91,6 +95,7 @@ public interface UpdateBackupRequestOrBuilder * @return Whether the updateMask field is set. */ boolean hasUpdateMask(); + /** * * @@ -108,6 +113,7 @@ public interface UpdateBackupRequestOrBuilder * @return The updateMask. */ com.google.protobuf.FieldMask getUpdateMask(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequest.java index 5eb515ab0fe..3bf7251dba3 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.UpdateBackupScheduleRequest} */ -public final class UpdateBackupScheduleRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateBackupScheduleRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateBackupScheduleRequest) UpdateBackupScheduleRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateBackupScheduleRequest"); + } + // Use UpdateBackupScheduleRequest.newBuilder() to construct. - private UpdateBackupScheduleRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateBackupScheduleRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateBackupScheduleRequest() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateBackupScheduleRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int BACKUP_SCHEDULE_FIELD_NUMBER = 1; private com.google.spanner.admin.database.v1.BackupSchedule backupSchedule_; + /** * * @@ -84,6 +92,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasBackupSchedule() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -105,6 +114,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule() { ? com.google.spanner.admin.database.v1.BackupSchedule.getDefaultInstance() : backupSchedule_; } + /** * * @@ -127,6 +137,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleOrBuilder getBackupSch public static final int UPDATE_MASK_FIELD_NUMBER = 2; private com.google.protobuf.FieldMask updateMask_; + /** * * @@ -147,6 +158,7 @@ public com.google.spanner.admin.database.v1.BackupScheduleOrBuilder getBackupSch public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -167,6 +179,7 @@ public boolean hasUpdateMask() { public com.google.protobuf.FieldMask getUpdateMask() { return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; } + /** * * @@ -306,38 +319,38 @@ public static com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest p public static com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -361,10 +374,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -375,7 +389,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.UpdateBackupScheduleRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateBackupScheduleRequest) com.google.spanner.admin.database.v1.UpdateBackupScheduleRequestOrBuilder { @@ -385,7 +399,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.BackupScheduleProto .internal_static_google_spanner_admin_database_v1_UpdateBackupScheduleRequest_fieldAccessorTable @@ -399,15 +413,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getBackupScheduleFieldBuilder(); - getUpdateMaskFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetBackupScheduleFieldBuilder(); + internalGetUpdateMaskFieldBuilder(); } } @@ -476,39 +490,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.UpdateBackupScheduleRequest) { @@ -558,13 +539,15 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getBackupScheduleFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetBackupScheduleFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -588,11 +571,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.database.v1.BackupSchedule backupSchedule_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder> backupScheduleBuilder_; + /** * * @@ -611,6 +595,7 @@ public Builder mergeFrom( public boolean hasBackupSchedule() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -635,6 +620,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule() { return backupScheduleBuilder_.getMessage(); } } + /** * * @@ -661,6 +647,7 @@ public Builder setBackupSchedule(com.google.spanner.admin.database.v1.BackupSche onChanged(); return this; } + /** * * @@ -685,6 +672,7 @@ public Builder setBackupSchedule( onChanged(); return this; } + /** * * @@ -717,6 +705,7 @@ public Builder mergeBackupSchedule(com.google.spanner.admin.database.v1.BackupSc } return this; } + /** * * @@ -740,6 +729,7 @@ public Builder clearBackupSchedule() { onChanged(); return this; } + /** * * @@ -756,8 +746,9 @@ public Builder clearBackupSchedule() { public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupScheduleBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getBackupScheduleFieldBuilder().getBuilder(); + return internalGetBackupScheduleFieldBuilder().getBuilder(); } + /** * * @@ -781,6 +772,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSche : backupSchedule_; } } + /** * * @@ -794,14 +786,14 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSche * .google.spanner.admin.database.v1.BackupSchedule backup_schedule = 1 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder> - getBackupScheduleFieldBuilder() { + internalGetBackupScheduleFieldBuilder() { if (backupScheduleBuilder_ == null) { backupScheduleBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.BackupSchedule, com.google.spanner.admin.database.v1.BackupSchedule.Builder, com.google.spanner.admin.database.v1.BackupScheduleOrBuilder>( @@ -812,11 +804,12 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSche } private com.google.protobuf.FieldMask updateMask_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> updateMaskBuilder_; + /** * * @@ -836,6 +829,7 @@ public com.google.spanner.admin.database.v1.BackupSchedule.Builder getBackupSche public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -861,6 +855,7 @@ public com.google.protobuf.FieldMask getUpdateMask() { return updateMaskBuilder_.getMessage(); } } + /** * * @@ -888,6 +883,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask value) { onChanged(); return this; } + /** * * @@ -912,6 +908,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForVal onChanged(); return this; } + /** * * @@ -944,6 +941,7 @@ public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { } return this; } + /** * * @@ -968,6 +966,7 @@ public Builder clearUpdateMask() { onChanged(); return this; } + /** * * @@ -985,8 +984,9 @@ public Builder clearUpdateMask() { public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getUpdateMaskFieldBuilder().getBuilder(); + return internalGetUpdateMaskFieldBuilder().getBuilder(); } + /** * * @@ -1010,6 +1010,7 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { : updateMask_; } } + /** * * @@ -1024,14 +1025,14 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> - getUpdateMaskFieldBuilder() { + internalGetUpdateMaskFieldBuilder() { if (updateMaskBuilder_ == null) { updateMaskBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder>( @@ -1041,17 +1042,6 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { return updateMaskBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateBackupScheduleRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequestOrBuilder.java index 04f89b1311e..5c5a21cfb35 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupScheduleRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/backup_schedule.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface UpdateBackupScheduleRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateBackupScheduleRequest) @@ -40,6 +42,7 @@ public interface UpdateBackupScheduleRequestOrBuilder * @return Whether the backupSchedule field is set. */ boolean hasBackupSchedule(); + /** * * @@ -56,6 +59,7 @@ public interface UpdateBackupScheduleRequestOrBuilder * @return The backupSchedule. */ com.google.spanner.admin.database.v1.BackupSchedule getBackupSchedule(); + /** * * @@ -88,6 +92,7 @@ public interface UpdateBackupScheduleRequestOrBuilder * @return Whether the updateMask field is set. */ boolean hasUpdateMask(); + /** * * @@ -105,6 +110,7 @@ public interface UpdateBackupScheduleRequestOrBuilder * @return The updateMask. */ com.google.protobuf.FieldMask getUpdateMask(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java index 852bfc21117..03acaaf5a75 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata} */ -public final class UpdateDatabaseDdlMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateDatabaseDdlMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata) UpdateDatabaseDdlMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateDatabaseDdlMetadata"); + } + // Use UpdateDatabaseDdlMetadata.newBuilder() to construct. - private UpdateDatabaseDdlMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateDatabaseDdlMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +60,13 @@ private UpdateDatabaseDdlMetadata() { actions_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateDatabaseDdlMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_fieldAccessorTable @@ -72,6 +79,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -139,6 +149,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public com.google.protobuf.ProtocolStringList getStatementsList() { return statements_; } + /** * * @@ -154,6 +165,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { public int getStatementsCount() { return statements_.size(); } + /** * * @@ -170,6 +182,7 @@ public int getStatementsCount() { public java.lang.String getStatements(int index) { return statements_.get(index); } + /** * * @@ -191,6 +204,7 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { @SuppressWarnings("serial") private java.util.List commitTimestamps_; + /** * * @@ -206,6 +220,7 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { public java.util.List getCommitTimestampsList() { return commitTimestamps_; } + /** * * @@ -222,6 +237,7 @@ public java.util.List getCommitTimestampsList() { getCommitTimestampsOrBuilderList() { return commitTimestamps_; } + /** * * @@ -237,6 +253,7 @@ public java.util.List getCommitTimestampsList() { public int getCommitTimestampsCount() { return commitTimestamps_.size(); } + /** * * @@ -252,6 +269,7 @@ public int getCommitTimestampsCount() { public com.google.protobuf.Timestamp getCommitTimestamps(int index) { return commitTimestamps_.get(index); } + /** * * @@ -270,6 +288,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampsOrBuilder(int i public static final int THROTTLED_FIELD_NUMBER = 4; private boolean throttled_ = false; + /** * * @@ -292,6 +311,7 @@ public boolean getThrottled() { @SuppressWarnings("serial") private java.util.List progress_; + /** * * @@ -311,6 +331,7 @@ public boolean getThrottled() { public java.util.List getProgressList() { return progress_; } + /** * * @@ -331,6 +352,7 @@ public java.util.List ge getProgressOrBuilderList() { return progress_; } + /** * * @@ -350,6 +372,7 @@ public java.util.List ge public int getProgressCount() { return progress_.size(); } + /** * * @@ -369,6 +392,7 @@ public int getProgressCount() { public com.google.spanner.admin.database.v1.OperationProgress getProgress(int index) { return progress_.get(index); } + /** * * @@ -394,6 +418,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre @SuppressWarnings("serial") private java.util.List actions_; + /** * * @@ -409,6 +434,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre getActionsList() { return actions_; } + /** * * @@ -425,6 +451,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre getActionsOrBuilderList() { return actions_; } + /** * * @@ -439,6 +466,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public int getActionsCount() { return actions_.size(); } + /** * * @@ -453,6 +481,7 @@ public int getActionsCount() { public com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index) { return actions_.get(index); } + /** * * @@ -483,11 +512,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } for (int i = 0; i < statements_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, statements_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 2, statements_.getRaw(i)); } for (int i = 0; i < commitTimestamps_.size(); i++) { output.writeMessage(3, commitTimestamps_.get(i)); @@ -510,8 +539,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } { int dataSize = 0; @@ -628,38 +657,38 @@ public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata par public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -683,10 +712,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -697,7 +727,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata) com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadataOrBuilder { @@ -707,7 +737,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_fieldAccessorTable @@ -719,7 +749,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -833,39 +863,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata) { @@ -914,8 +911,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlM commitTimestamps_ = other.commitTimestamps_; bitField0_ = (bitField0_ & ~0x00000004); commitTimestampsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getCommitTimestampsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetCommitTimestampsFieldBuilder() : null; } else { commitTimestampsBuilder_.addAllMessages(other.commitTimestamps_); @@ -944,8 +941,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlM progress_ = other.progress_; bitField0_ = (bitField0_ & ~0x00000010); progressBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getProgressFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetProgressFieldBuilder() : null; } else { progressBuilder_.addAllMessages(other.progress_); @@ -971,8 +968,8 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlM actions_ = other.actions_; bitField0_ = (bitField0_ & ~0x00000020); actionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getActionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetActionsFieldBuilder() : null; } else { actionsBuilder_.addAllMessages(other.actions_); @@ -1084,6 +1081,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -1106,6 +1104,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -1128,6 +1127,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1149,6 +1149,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1166,6 +1167,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -1198,6 +1200,7 @@ private void ensureStatementsIsMutable() { } bitField0_ |= 0x00000002; } + /** * * @@ -1214,6 +1217,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { statements_.makeImmutable(); return statements_; } + /** * * @@ -1229,6 +1233,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { public int getStatementsCount() { return statements_.size(); } + /** * * @@ -1245,6 +1250,7 @@ public int getStatementsCount() { public java.lang.String getStatements(int index) { return statements_.get(index); } + /** * * @@ -1261,6 +1267,7 @@ public java.lang.String getStatements(int index) { public com.google.protobuf.ByteString getStatementsBytes(int index) { return statements_.getByteString(index); } + /** * * @@ -1285,6 +1292,7 @@ public Builder setStatements(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1308,6 +1316,7 @@ public Builder addStatements(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1328,6 +1337,7 @@ public Builder addAllStatements(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1347,6 +1357,7 @@ public Builder clearStatements() { onChanged(); return this; } + /** * * @@ -1383,7 +1394,7 @@ private void ensureCommitTimestampsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> @@ -1407,6 +1418,7 @@ public java.util.List getCommitTimestampsList() { return commitTimestampsBuilder_.getMessageList(); } } + /** * * @@ -1425,6 +1437,7 @@ public int getCommitTimestampsCount() { return commitTimestampsBuilder_.getCount(); } } + /** * * @@ -1443,6 +1456,7 @@ public com.google.protobuf.Timestamp getCommitTimestamps(int index) { return commitTimestampsBuilder_.getMessage(index); } } + /** * * @@ -1467,6 +1481,7 @@ public Builder setCommitTimestamps(int index, com.google.protobuf.Timestamp valu } return this; } + /** * * @@ -1489,6 +1504,7 @@ public Builder setCommitTimestamps( } return this; } + /** * * @@ -1513,6 +1529,7 @@ public Builder addCommitTimestamps(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1537,6 +1554,7 @@ public Builder addCommitTimestamps(int index, com.google.protobuf.Timestamp valu } return this; } + /** * * @@ -1558,6 +1576,7 @@ public Builder addCommitTimestamps(com.google.protobuf.Timestamp.Builder builder } return this; } + /** * * @@ -1580,6 +1599,7 @@ public Builder addCommitTimestamps( } return this; } + /** * * @@ -1602,6 +1622,7 @@ public Builder addAllCommitTimestamps( } return this; } + /** * * @@ -1623,6 +1644,7 @@ public Builder clearCommitTimestamps() { } return this; } + /** * * @@ -1644,6 +1666,7 @@ public Builder removeCommitTimestamps(int index) { } return this; } + /** * * @@ -1656,8 +1679,9 @@ public Builder removeCommitTimestamps(int index) { * repeated .google.protobuf.Timestamp commit_timestamps = 3; */ public com.google.protobuf.Timestamp.Builder getCommitTimestampsBuilder(int index) { - return getCommitTimestampsFieldBuilder().getBuilder(index); + return internalGetCommitTimestampsFieldBuilder().getBuilder(index); } + /** * * @@ -1676,6 +1700,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampsOrBuilder(int i return commitTimestampsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1695,6 +1720,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampsOrBuilder(int i return java.util.Collections.unmodifiableList(commitTimestamps_); } } + /** * * @@ -1707,9 +1733,10 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampsOrBuilder(int i * repeated .google.protobuf.Timestamp commit_timestamps = 3; */ public com.google.protobuf.Timestamp.Builder addCommitTimestampsBuilder() { - return getCommitTimestampsFieldBuilder() + return internalGetCommitTimestampsFieldBuilder() .addBuilder(com.google.protobuf.Timestamp.getDefaultInstance()); } + /** * * @@ -1722,9 +1749,10 @@ public com.google.protobuf.Timestamp.Builder addCommitTimestampsBuilder() { * repeated .google.protobuf.Timestamp commit_timestamps = 3; */ public com.google.protobuf.Timestamp.Builder addCommitTimestampsBuilder(int index) { - return getCommitTimestampsFieldBuilder() + return internalGetCommitTimestampsFieldBuilder() .addBuilder(index, com.google.protobuf.Timestamp.getDefaultInstance()); } + /** * * @@ -1737,17 +1765,17 @@ public com.google.protobuf.Timestamp.Builder addCommitTimestampsBuilder(int inde * repeated .google.protobuf.Timestamp commit_timestamps = 3; */ public java.util.List getCommitTimestampsBuilderList() { - return getCommitTimestampsFieldBuilder().getBuilderList(); + return internalGetCommitTimestampsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCommitTimestampsFieldBuilder() { + internalGetCommitTimestampsFieldBuilder() { if (commitTimestampsBuilder_ == null) { commitTimestampsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1761,6 +1789,7 @@ public java.util.List getCommitTimestamps } private boolean throttled_; + /** * * @@ -1778,6 +1807,7 @@ public java.util.List getCommitTimestamps public boolean getThrottled() { return throttled_; } + /** * * @@ -1799,6 +1829,7 @@ public Builder setThrottled(boolean value) { onChanged(); return this; } + /** * * @@ -1831,7 +1862,7 @@ private void ensureProgressIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> @@ -1860,6 +1891,7 @@ private void ensureProgressIsMutable() { return progressBuilder_.getMessageList(); } } + /** * * @@ -1882,6 +1914,7 @@ public int getProgressCount() { return progressBuilder_.getCount(); } } + /** * * @@ -1904,6 +1937,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress(int in return progressBuilder_.getMessage(index); } } + /** * * @@ -1933,6 +1967,7 @@ public Builder setProgress( } return this; } + /** * * @@ -1959,6 +1994,7 @@ public Builder setProgress( } return this; } + /** * * @@ -1987,6 +2023,7 @@ public Builder addProgress(com.google.spanner.admin.database.v1.OperationProgres } return this; } + /** * * @@ -2016,6 +2053,7 @@ public Builder addProgress( } return this; } + /** * * @@ -2042,6 +2080,7 @@ public Builder addProgress( } return this; } + /** * * @@ -2068,6 +2107,7 @@ public Builder addProgress( } return this; } + /** * * @@ -2095,6 +2135,7 @@ public Builder addAllProgress( } return this; } + /** * * @@ -2120,6 +2161,7 @@ public Builder clearProgress() { } return this; } + /** * * @@ -2145,6 +2187,7 @@ public Builder removeProgress(int index) { } return this; } + /** * * @@ -2162,8 +2205,9 @@ public Builder removeProgress(int index) { */ public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder( int index) { - return getProgressFieldBuilder().getBuilder(index); + return internalGetProgressFieldBuilder().getBuilder(index); } + /** * * @@ -2187,6 +2231,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre return progressBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2210,6 +2255,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre return java.util.Collections.unmodifiableList(progress_); } } + /** * * @@ -2226,9 +2272,10 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; */ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgressBuilder() { - return getProgressFieldBuilder() + return internalGetProgressFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance()); } + /** * * @@ -2246,10 +2293,11 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres */ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgressBuilder( int index) { - return getProgressFieldBuilder() + return internalGetProgressFieldBuilder() .addBuilder( index, com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance()); } + /** * * @@ -2267,17 +2315,17 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres */ public java.util.List getProgressBuilderList() { - return getProgressFieldBuilder().getBuilderList(); + return internalGetProgressFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder>( @@ -2299,7 +2347,7 @@ private void ensureActionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.DdlStatementActionInfo, com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> @@ -2323,6 +2371,7 @@ private void ensureActionsIsMutable() { return actionsBuilder_.getMessageList(); } } + /** * * @@ -2340,6 +2389,7 @@ public int getActionsCount() { return actionsBuilder_.getCount(); } } + /** * * @@ -2357,6 +2407,7 @@ public com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(in return actionsBuilder_.getMessage(index); } } + /** * * @@ -2381,6 +2432,7 @@ public Builder setActions( } return this; } + /** * * @@ -2403,6 +2455,7 @@ public Builder setActions( } return this; } + /** * * @@ -2426,6 +2479,7 @@ public Builder addActions(com.google.spanner.admin.database.v1.DdlStatementActio } return this; } + /** * * @@ -2450,6 +2504,7 @@ public Builder addActions( } return this; } + /** * * @@ -2471,6 +2526,7 @@ public Builder addActions( } return this; } + /** * * @@ -2493,6 +2549,7 @@ public Builder addActions( } return this; } + /** * * @@ -2515,6 +2572,7 @@ public Builder addAllActions( } return this; } + /** * * @@ -2535,6 +2593,7 @@ public Builder clearActions() { } return this; } + /** * * @@ -2555,6 +2614,7 @@ public Builder removeActions(int index) { } return this; } + /** * * @@ -2567,8 +2627,9 @@ public Builder removeActions(int index) { */ public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder getActionsBuilder( int index) { - return getActionsFieldBuilder().getBuilder(index); + return internalGetActionsFieldBuilder().getBuilder(index); } + /** * * @@ -2587,6 +2648,7 @@ public com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getA return actionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2606,6 +2668,7 @@ public com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getA return java.util.Collections.unmodifiableList(actions_); } } + /** * * @@ -2617,10 +2680,11 @@ public com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getA * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; */ public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addActionsBuilder() { - return getActionsFieldBuilder() + return internalGetActionsFieldBuilder() .addBuilder( com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()); } + /** * * @@ -2633,11 +2697,12 @@ public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addAc */ public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addActionsBuilder( int index) { - return getActionsFieldBuilder() + return internalGetActionsFieldBuilder() .addBuilder( index, com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()); } + /** * * @@ -2650,17 +2715,17 @@ public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addAc */ public java.util.List getActionsBuilderList() { - return getActionsFieldBuilder().getBuilderList(); + return internalGetActionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.DdlStatementActionInfo, com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> - getActionsFieldBuilder() { + internalGetActionsFieldBuilder() { if (actionsBuilder_ == null) { actionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.DdlStatementActionInfo, com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder>( @@ -2670,17 +2735,6 @@ public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addAc return actionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java index 3d29d7306a8..fa89da04418 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface UpdateDatabaseDdlMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata) @@ -36,6 +38,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * @@ -62,6 +65,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * @return A list containing the statements. */ java.util.List getStatementsList(); + /** * * @@ -75,6 +79,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * @return The count of statements. */ int getStatementsCount(); + /** * * @@ -89,6 +94,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * @return The statements at the given index. */ java.lang.String getStatements(int index); + /** * * @@ -116,6 +122,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.protobuf.Timestamp commit_timestamps = 3; */ java.util.List getCommitTimestampsList(); + /** * * @@ -128,6 +135,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.protobuf.Timestamp commit_timestamps = 3; */ com.google.protobuf.Timestamp getCommitTimestamps(int index); + /** * * @@ -140,6 +148,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.protobuf.Timestamp commit_timestamps = 3; */ int getCommitTimestampsCount(); + /** * * @@ -153,6 +162,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder */ java.util.List getCommitTimestampsOrBuilderList(); + /** * * @@ -197,6 +207,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; */ java.util.List getProgressList(); + /** * * @@ -213,6 +224,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; */ com.google.spanner.admin.database.v1.OperationProgress getProgress(int index); + /** * * @@ -229,6 +241,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; */ int getProgressCount(); + /** * * @@ -246,6 +259,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder */ java.util.List getProgressOrBuilderList(); + /** * * @@ -274,6 +288,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; */ java.util.List getActionsList(); + /** * * @@ -285,6 +300,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; */ com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index); + /** * * @@ -296,6 +312,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; */ int getActionsCount(); + /** * * @@ -308,6 +325,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder */ java.util.List getActionsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java index 94ea338d85f..f93eacb8c0f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -43,13 +44,25 @@ * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseDdlRequest} */ -public final class UpdateDatabaseDdlRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateDatabaseDdlRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateDatabaseDdlRequest) UpdateDatabaseDdlRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateDatabaseDdlRequest"); + } + // Use UpdateDatabaseDdlRequest.newBuilder() to construct. - private UpdateDatabaseDdlRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateDatabaseDdlRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -60,19 +73,13 @@ private UpdateDatabaseDdlRequest() { protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateDatabaseDdlRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_fieldAccessorTable @@ -85,6 +92,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -110,6 +118,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -141,6 +150,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -155,6 +165,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public com.google.protobuf.ProtocolStringList getStatementsList() { return statements_; } + /** * * @@ -169,6 +180,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { public int getStatementsCount() { return statements_.size(); } + /** * * @@ -184,6 +196,7 @@ public int getStatementsCount() { public java.lang.String getStatements(int index) { return statements_.get(index); } + /** * * @@ -204,6 +217,7 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { @SuppressWarnings("serial") private volatile java.lang.Object operationId_ = ""; + /** * * @@ -247,6 +261,7 @@ public java.lang.String getOperationId() { return s; } } + /** * * @@ -293,6 +308,7 @@ public com.google.protobuf.ByteString getOperationIdBytes() { public static final int PROTO_DESCRIPTORS_FIELD_NUMBER = 4; private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -305,9 +321,9 @@ public com.google.protobuf.ByteString getOperationIdBytes() { * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -322,6 +338,27 @@ public com.google.protobuf.ByteString getProtoDescriptors() { return protoDescriptors_; } + public static final int THROUGHPUT_MODE_FIELD_NUMBER = 5; + private boolean throughputMode_ = false; + + /** + * + * + *
                                +   * Optional. This field is exposed to be used by the Spanner Migration Tool.
                                +   * For more details, see
                                +   * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
                                +   * 
                                + * + * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The throughputMode. + */ + @java.lang.Override + public boolean getThroughputMode() { + return throughputMode_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -336,18 +373,21 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } for (int i = 0; i < statements_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, statements_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 2, statements_.getRaw(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operationId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, operationId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operationId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, operationId_); } if (!protoDescriptors_.isEmpty()) { output.writeBytes(4, protoDescriptors_); } + if (throughputMode_ != false) { + output.writeBool(5, throughputMode_); + } getUnknownFields().writeTo(output); } @@ -357,8 +397,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } { int dataSize = 0; @@ -368,12 +408,15 @@ public int getSerializedSize() { size += dataSize; size += 1 * getStatementsList().size(); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operationId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, operationId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operationId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, operationId_); } if (!protoDescriptors_.isEmpty()) { size += com.google.protobuf.CodedOutputStream.computeBytesSize(4, protoDescriptors_); } + if (throughputMode_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(5, throughputMode_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -394,6 +437,7 @@ public boolean equals(final java.lang.Object obj) { if (!getStatementsList().equals(other.getStatementsList())) return false; if (!getOperationId().equals(other.getOperationId())) return false; if (!getProtoDescriptors().equals(other.getProtoDescriptors())) return false; + if (getThroughputMode() != other.getThroughputMode()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -415,6 +459,8 @@ public int hashCode() { hash = (53 * hash) + getOperationId().hashCode(); hash = (37 * hash) + PROTO_DESCRIPTORS_FIELD_NUMBER; hash = (53 * hash) + getProtoDescriptors().hashCode(); + hash = (37 * hash) + THROUGHPUT_MODE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getThroughputMode()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -457,38 +503,38 @@ public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest pars public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -512,10 +558,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -540,7 +587,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseDdlRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateDatabaseDdlRequest) com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequestOrBuilder { @@ -550,7 +597,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_fieldAccessorTable @@ -562,7 +609,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -574,6 +621,7 @@ public Builder clear() { statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); operationId_ = ""; protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + throughputMode_ = false; return this; } @@ -625,39 +673,9 @@ private void buildPartial0( if (((from_bitField0_ & 0x00000008) != 0)) { result.protoDescriptors_ = protoDescriptors_; } - } - - @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); + if (((from_bitField0_ & 0x00000010) != 0)) { + result.throughputMode_ = throughputMode_; + } } @java.lang.Override @@ -694,9 +712,12 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlR bitField0_ |= 0x00000004; onChanged(); } - if (other.getProtoDescriptors() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getProtoDescriptors().isEmpty()) { setProtoDescriptors(other.getProtoDescriptors()); } + if (other.getThroughputMode() != false) { + setThroughputMode(other.getThroughputMode()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -748,6 +769,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000008; break; } // case 34 + case 40: + { + throughputMode_ = input.readBool(); + bitField0_ |= 0x00000010; + break; + } // case 40 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -768,6 +795,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -792,6 +820,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -816,6 +845,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -839,6 +869,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -858,6 +889,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -892,6 +924,7 @@ private void ensureStatementsIsMutable() { } bitField0_ |= 0x00000002; } + /** * * @@ -907,6 +940,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { statements_.makeImmutable(); return statements_; } + /** * * @@ -921,6 +955,7 @@ public com.google.protobuf.ProtocolStringList getStatementsList() { public int getStatementsCount() { return statements_.size(); } + /** * * @@ -936,6 +971,7 @@ public int getStatementsCount() { public java.lang.String getStatements(int index) { return statements_.get(index); } + /** * * @@ -951,6 +987,7 @@ public java.lang.String getStatements(int index) { public com.google.protobuf.ByteString getStatementsBytes(int index) { return statements_.getByteString(index); } + /** * * @@ -974,6 +1011,7 @@ public Builder setStatements(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -996,6 +1034,7 @@ public Builder addStatements(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1015,6 +1054,7 @@ public Builder addAllStatements(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1033,6 +1073,7 @@ public Builder clearStatements() { onChanged(); return this; } + /** * * @@ -1058,6 +1099,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { } private java.lang.Object operationId_ = ""; + /** * * @@ -1100,6 +1142,7 @@ public java.lang.String getOperationId() { return (java.lang.String) ref; } } + /** * * @@ -1142,6 +1185,7 @@ public com.google.protobuf.ByteString getOperationIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1183,6 +1227,7 @@ public Builder setOperationId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1220,6 +1265,7 @@ public Builder clearOperationId() { onChanged(); return this; } + /** * * @@ -1264,6 +1310,7 @@ public Builder setOperationIdBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1276,9 +1323,9 @@ public Builder setOperationIdBytes(com.google.protobuf.ByteString value) { * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -1292,6 +1339,7 @@ public Builder setOperationIdBytes(com.google.protobuf.ByteString value) { public com.google.protobuf.ByteString getProtoDescriptors() { return protoDescriptors_; } + /** * * @@ -1304,9 +1352,9 @@ public com.google.protobuf.ByteString getProtoDescriptors() { * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -1326,6 +1374,7 @@ public Builder setProtoDescriptors(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1338,9 +1387,9 @@ public Builder setProtoDescriptors(com.google.protobuf.ByteString value) { * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -1357,15 +1406,66 @@ public Builder clearProtoDescriptors() { return this; } + private boolean throughputMode_; + + /** + * + * + *
                                +     * Optional. This field is exposed to be used by the Spanner Migration Tool.
                                +     * For more details, see
                                +     * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
                                +     * 
                                + * + * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The throughputMode. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean getThroughputMode() { + return throughputMode_; } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. This field is exposed to be used by the Spanner Migration Tool.
                                +     * For more details, see
                                +     * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
                                +     * 
                                + * + * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The throughputMode to set. + * @return This builder for chaining. + */ + public Builder setThroughputMode(boolean value) { + + throughputMode_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. This field is exposed to be used by the Spanner Migration Tool.
                                +     * For more details, see
                                +     * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
                                +     * 
                                + * + * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearThroughputMode() { + bitField0_ = (bitField0_ & ~0x00000010); + throughputMode_ = false; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateDatabaseDdlRequest) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java index 4e1de5b899e..c73ee6b7d80 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface UpdateDatabaseDdlRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateDatabaseDdlRequest) @@ -38,6 +40,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * @@ -65,6 +68,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * @return A list containing the statements. */ java.util.List getStatementsList(); + /** * * @@ -77,6 +81,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * @return The count of statements. */ int getStatementsCount(); + /** * * @@ -90,6 +95,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * @return The statements at the given index. */ java.lang.String getStatements(int index); + /** * * @@ -136,6 +142,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * @return The operationId. */ java.lang.String getOperationId(); + /** * * @@ -181,9 +188,9 @@ public interface UpdateDatabaseDdlRequestOrBuilder * to generate for moon/shot/app.proto, run * ``` * $protoc --proto_path=/app_path --proto_path=/lib_path \ - * --include_imports \ - * --descriptor_set_out=descriptors.data \ - * moon/shot/app.proto + * --include_imports \ + * --descriptor_set_out=descriptors.data \ + * moon/shot/app.proto * ``` * For more details, see protobuffer [self * description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). @@ -194,4 +201,19 @@ public interface UpdateDatabaseDdlRequestOrBuilder * @return The protoDescriptors. */ com.google.protobuf.ByteString getProtoDescriptors(); + + /** + * + * + *
                                +   * Optional. This field is exposed to be used by the Spanner Migration Tool.
                                +   * For more details, see
                                +   * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
                                +   * 
                                + * + * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The throughputMode. + */ + boolean getThroughputMode(); } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java index 986f13bb6ee..a9b17bd93f7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseMetadata} */ -public final class UpdateDatabaseMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateDatabaseMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateDatabaseMetadata) UpdateDatabaseMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateDatabaseMetadata"); + } + // Use UpdateDatabaseMetadata.newBuilder() to construct. - private UpdateDatabaseMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateDatabaseMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateDatabaseMetadata() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateDatabaseMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int REQUEST_FIELD_NUMBER = 1; private com.google.spanner.admin.database.v1.UpdateDatabaseRequest request_; + /** * * @@ -81,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasRequest() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -99,6 +108,7 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequest getRequest() { ? com.google.spanner.admin.database.v1.UpdateDatabaseRequest.getDefaultInstance() : request_; } + /** * * @@ -118,6 +128,7 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder getRe public static final int PROGRESS_FIELD_NUMBER = 2; private com.google.spanner.admin.database.v1.OperationProgress progress_; + /** * * @@ -135,6 +146,7 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder getRe public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -154,6 +166,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -174,6 +187,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -190,6 +204,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -206,6 +221,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -355,38 +371,38 @@ public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseF public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -410,10 +426,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -424,7 +441,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateDatabaseMetadata) com.google.spanner.admin.database.v1.UpdateDatabaseMetadataOrBuilder { @@ -434,7 +451,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable @@ -448,16 +465,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getRequestFieldBuilder(); - getProgressFieldBuilder(); - getCancelTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRequestFieldBuilder(); + internalGetProgressFieldBuilder(); + internalGetCancelTimeFieldBuilder(); } } @@ -532,39 +549,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.UpdateDatabaseMe result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.UpdateDatabaseMetadata) { @@ -615,19 +599,21 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getRequestFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetRequestFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -651,11 +637,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.database.v1.UpdateDatabaseRequest request_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.UpdateDatabaseRequest, com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder, com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder> requestBuilder_; + /** * * @@ -671,6 +658,7 @@ public Builder mergeFrom( public boolean hasRequest() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -692,6 +680,7 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequest getRequest() { return requestBuilder_.getMessage(); } } + /** * * @@ -715,6 +704,7 @@ public Builder setRequest(com.google.spanner.admin.database.v1.UpdateDatabaseReq onChanged(); return this; } + /** * * @@ -736,6 +726,7 @@ public Builder setRequest( onChanged(); return this; } + /** * * @@ -766,6 +757,7 @@ public Builder mergeRequest(com.google.spanner.admin.database.v1.UpdateDatabaseR } return this; } + /** * * @@ -786,6 +778,7 @@ public Builder clearRequest() { onChanged(); return this; } + /** * * @@ -799,8 +792,9 @@ public Builder clearRequest() { public com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder getRequestBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getRequestFieldBuilder().getBuilder(); + return internalGetRequestFieldBuilder().getBuilder(); } + /** * * @@ -821,6 +815,7 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder getReq : request_; } } + /** * * @@ -831,14 +826,14 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder getReq * * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.UpdateDatabaseRequest, com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder, com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder> - getRequestFieldBuilder() { + internalGetRequestFieldBuilder() { if (requestBuilder_ == null) { requestBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.UpdateDatabaseRequest, com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder, com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder>( @@ -849,11 +844,12 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder getReq } private com.google.spanner.admin.database.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -870,6 +866,7 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder getReq public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -892,6 +889,7 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -916,6 +914,7 @@ public Builder setProgress(com.google.spanner.admin.database.v1.OperationProgres onChanged(); return this; } + /** * * @@ -938,6 +937,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -968,6 +968,7 @@ public Builder mergeProgress(com.google.spanner.admin.database.v1.OperationProgr } return this; } + /** * * @@ -989,6 +990,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -1003,8 +1005,9 @@ public Builder clearProgress() { public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -1025,6 +1028,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -1036,14 +1040,14 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.database.v1.OperationProgress progress = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.OperationProgress, com.google.spanner.admin.database.v1.OperationProgress.Builder, com.google.spanner.admin.database.v1.OperationProgressOrBuilder>( @@ -1054,11 +1058,12 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1074,6 +1079,7 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1095,6 +1101,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1118,6 +1125,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1138,6 +1146,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1166,6 +1175,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1186,6 +1196,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1199,8 +1210,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1220,6 +1232,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1230,14 +1243,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1247,17 +1260,6 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { return cancelTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateDatabaseMetadata) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java index 7d57a7fa341..671e4cf94f5 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface UpdateDatabaseMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateDatabaseMetadata) @@ -37,6 +39,7 @@ public interface UpdateDatabaseMetadataOrBuilder * @return Whether the request field is set. */ boolean hasRequest(); + /** * * @@ -50,6 +53,7 @@ public interface UpdateDatabaseMetadataOrBuilder * @return The request. */ com.google.spanner.admin.database.v1.UpdateDatabaseRequest getRequest(); + /** * * @@ -76,6 +80,7 @@ public interface UpdateDatabaseMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -90,6 +95,7 @@ public interface UpdateDatabaseMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.database.v1.OperationProgress getProgress(); + /** * * @@ -116,6 +122,7 @@ public interface UpdateDatabaseMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -129,6 +136,7 @@ public interface UpdateDatabaseMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java index 3234ecb07da..a0d0ea155f5 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseRequest} */ -public final class UpdateDatabaseRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateDatabaseRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateDatabaseRequest) UpdateDatabaseRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateDatabaseRequest"); + } + // Use UpdateDatabaseRequest.newBuilder() to construct. - private UpdateDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateDatabaseRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateDatabaseRequest() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateDatabaseRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int DATABASE_FIELD_NUMBER = 1; private com.google.spanner.admin.database.v1.Database database_; + /** * * @@ -84,6 +92,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasDatabase() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -105,6 +114,7 @@ public com.google.spanner.admin.database.v1.Database getDatabase() { ? com.google.spanner.admin.database.v1.Database.getDefaultInstance() : database_; } + /** * * @@ -127,6 +137,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild public static final int UPDATE_MASK_FIELD_NUMBER = 2; private com.google.protobuf.FieldMask updateMask_; + /** * * @@ -144,6 +155,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -161,6 +173,7 @@ public boolean hasUpdateMask() { public com.google.protobuf.FieldMask getUpdateMask() { return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; } + /** * * @@ -297,38 +310,38 @@ public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFr public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -352,10 +365,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -366,7 +380,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateDatabaseRequest) com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder { @@ -376,7 +390,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable @@ -390,15 +404,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getDatabaseFieldBuilder(); - getUpdateMaskFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetDatabaseFieldBuilder(); + internalGetUpdateMaskFieldBuilder(); } } @@ -464,39 +478,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.UpdateDatabaseRe result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.database.v1.UpdateDatabaseRequest) { @@ -544,13 +525,15 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getDatabaseFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetDatabaseFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -574,11 +557,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.database.v1.Database database_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> databaseBuilder_; + /** * * @@ -597,6 +581,7 @@ public Builder mergeFrom( public boolean hasDatabase() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -621,6 +606,7 @@ public com.google.spanner.admin.database.v1.Database getDatabase() { return databaseBuilder_.getMessage(); } } + /** * * @@ -647,6 +633,7 @@ public Builder setDatabase(com.google.spanner.admin.database.v1.Database value) onChanged(); return this; } + /** * * @@ -671,6 +658,7 @@ public Builder setDatabase( onChanged(); return this; } + /** * * @@ -702,6 +690,7 @@ public Builder mergeDatabase(com.google.spanner.admin.database.v1.Database value } return this; } + /** * * @@ -725,6 +714,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -741,8 +731,9 @@ public Builder clearDatabase() { public com.google.spanner.admin.database.v1.Database.Builder getDatabaseBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getDatabaseFieldBuilder().getBuilder(); + return internalGetDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -765,6 +756,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild : database_; } } + /** * * @@ -778,14 +770,14 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> - getDatabaseFieldBuilder() { + internalGetDatabaseFieldBuilder() { if (databaseBuilder_ == null) { databaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder>( @@ -796,11 +788,12 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild } private com.google.protobuf.FieldMask updateMask_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> updateMaskBuilder_; + /** * * @@ -817,6 +810,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -839,6 +833,7 @@ public com.google.protobuf.FieldMask getUpdateMask() { return updateMaskBuilder_.getMessage(); } } + /** * * @@ -863,6 +858,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask value) { onChanged(); return this; } + /** * * @@ -884,6 +880,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForVal onChanged(); return this; } + /** * * @@ -913,6 +910,7 @@ public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { } return this; } + /** * * @@ -934,6 +932,7 @@ public Builder clearUpdateMask() { onChanged(); return this; } + /** * * @@ -948,8 +947,9 @@ public Builder clearUpdateMask() { public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getUpdateMaskFieldBuilder().getBuilder(); + return internalGetUpdateMaskFieldBuilder().getBuilder(); } + /** * * @@ -970,6 +970,7 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { : updateMask_; } } + /** * * @@ -981,14 +982,14 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> - getUpdateMaskFieldBuilder() { + internalGetUpdateMaskFieldBuilder() { if (updateMaskBuilder_ == null) { updateMaskBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder>( @@ -998,17 +999,6 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { return updateMaskBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateDatabaseRequest) } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java index 38172dc67cb..1fe594d8c05 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/database/v1/spanner_database_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.database.v1; +@com.google.protobuf.Generated public interface UpdateDatabaseRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateDatabaseRequest) @@ -40,6 +42,7 @@ public interface UpdateDatabaseRequestOrBuilder * @return Whether the database field is set. */ boolean hasDatabase(); + /** * * @@ -56,6 +59,7 @@ public interface UpdateDatabaseRequestOrBuilder * @return The database. */ com.google.spanner.admin.database.v1.Database getDatabase(); + /** * * @@ -85,6 +89,7 @@ public interface UpdateDatabaseRequestOrBuilder * @return Whether the updateMask field is set. */ boolean hasUpdateMask(); + /** * * @@ -99,6 +104,7 @@ public interface UpdateDatabaseRequestOrBuilder * @return The updateMask. */ com.google.protobuf.FieldMask getUpdateMask(); + /** * * diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto index f3473f4eabf..6898814c421 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto @@ -1,4 +1,4 @@ -// 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. @@ -207,6 +207,13 @@ message Backup { // retained by the backup system. google.protobuf.Timestamp oldest_version_time = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The instance partition(s) storing the backup. + // + // This is the same as the list of the instance partition(s) that the database + // had footprint in at the backup's `version_time`. + repeated BackupInstancePartition instance_partitions = 19 + [(google.api.field_behavior) = OUTPUT_ONLY]; } // The request for @@ -755,3 +762,12 @@ message FullBackupSpec {} // successive incremental backups. The first backup created for an // incremental backup chain is always a full backup. message IncrementalBackupSpec {} + +// Instance partition information for the backup. +message BackupInstancePartition { + // A unique identifier for the instance partition. Values are of the form + // `projects//instances//instancePartitions/` + string instance_partition = 1 [(google.api.resource_reference) = { + type: "spanner.googleapis.com/InstancePartition" + }]; +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup_schedule.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup_schedule.proto index c9b5e7e3f4b..c273516ae09 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup_schedule.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup_schedule.proto @@ -1,4 +1,4 @@ -// 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. @@ -100,7 +100,7 @@ message BackupSchedule { message CrontabSpec { // Required. Textual representation of the crontab. User can customize the // backup frequency and the backup version time using the cron - // expression. The version time must be in UTC timzeone. + // expression. The version time must be in UTC timezone. // // The backup will contain an externally consistent copy of the // database at the version time. Allowed frequencies are 12 hour, 1 day, diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto index a9101230637..c494b8cf780 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto @@ -1,4 +1,4 @@ -// 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/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto index 5df142403e6..d41a4114c20 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto @@ -1,4 +1,4 @@ -// 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. @@ -25,7 +25,9 @@ import "google/iam/v1/policy.proto"; import "google/longrunning/operations.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; +import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; import "google/spanner/admin/database/v1/backup.proto"; import "google/spanner/admin/database/v1/backup_schedule.proto"; import "google/spanner/admin/database/v1/common.proto"; @@ -41,6 +43,10 @@ option (google.api.resource_definition) = { type: "spanner.googleapis.com/Instance" pattern: "projects/{project}/instances/{instance}" }; +option (google.api.resource_definition) = { + type: "spanner.googleapis.com/InstancePartition" + pattern: "projects/{project}/instances/{instance}/instancePartitions/{instance_partition}" +}; // Cloud Spanner Database Admin API // @@ -425,6 +431,15 @@ service DatabaseAdmin { option (google.api.method_signature) = "parent"; } + // Adds split points to specified tables, indexes of a database. + rpc AddSplitPoints(AddSplitPointsRequest) returns (AddSplitPointsResponse) { + option (google.api.http) = { + post: "/v1/{database=projects/*/instances/*/databases/*}:addSplitPoints" + body: "*" + }; + option (google.api.method_signature) = "database,split_points"; + } + // Creates a new backup schedule. rpc CreateBackupSchedule(CreateBackupScheduleRequest) returns (BackupSchedule) { @@ -471,6 +486,13 @@ service DatabaseAdmin { }; option (google.api.method_signature) = "parent"; } + + // This is an internal API called by Spanner Graph jobs. You should never need + // to call this API directly. + rpc InternalUpdateGraphOperation(InternalUpdateGraphOperationRequest) + returns (InternalUpdateGraphOperationResponse) { + option (google.api.method_signature) = "database,operation_id"; + } } // Information about the database restore. @@ -799,6 +821,11 @@ message UpdateDatabaseDdlRequest { // For more details, see protobuffer [self // description](https://developers.google.com/protocol-buffers/docs/techniques#self-description). bytes proto_descriptors = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. This field is exposed to be used by the Spanner Migration Tool. + // For more details, see + // [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool). + bool throughput_mode = 5 [(google.api.field_behavior) = OPTIONAL]; } // Action information extracted from a DDL statement. This proto is used to @@ -1207,3 +1234,81 @@ message ListDatabaseRolesResponse { // call to fetch more of the matching roles. string next_page_token = 2; } + +// The request for +// [AddSplitPoints][google.spanner.admin.database.v1.DatabaseAdmin.AddSplitPoints]. +message AddSplitPointsRequest { + // Required. The database on whose tables/indexes split points are to be + // added. Values are of the form + // `projects//instances//databases/`. + string database = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "spanner.googleapis.com/Database" + } + ]; + + // Required. The split points to add. + repeated SplitPoints split_points = 2 + [(google.api.field_behavior) = REQUIRED]; + + // Optional. A user-supplied tag associated with the split points. + // For example, "intital_data_load", "special_event_1". + // Defaults to "CloudAddSplitPointsAPI" if not specified. + // The length of the tag must not exceed 50 characters,else will be trimmed. + // Only valid UTF8 characters are allowed. + string initiator = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// The response for +// [AddSplitPoints][google.spanner.admin.database.v1.DatabaseAdmin.AddSplitPoints]. +message AddSplitPointsResponse {} + +// The split points of a table/index. +message SplitPoints { + // A split key. + message Key { + // Required. The column values making up the split key. + google.protobuf.ListValue key_parts = 1 + [(google.api.field_behavior) = REQUIRED]; + } + + // The table to split. + string table = 1; + + // The index to split. + // If specified, the `table` field must refer to the index's base table. + string index = 2; + + // Required. The list of split keys, i.e., the split boundaries. + repeated Key keys = 3 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The expiration timestamp of the split points. + // A timestamp in the past means immediate expiration. + // The maximum value can be 30 days in the future. + // Defaults to 10 days in the future if not specified. + google.protobuf.Timestamp expire_time = 5 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Internal request proto, do not use directly. +message InternalUpdateGraphOperationRequest { + // Internal field, do not use directly. + string database = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "spanner.googleapis.com/Database" + } + ]; + // Internal field, do not use directly. + string operation_id = 2 [(google.api.field_behavior) = REQUIRED]; + // Internal field, do not use directly. + string vm_identity_token = 5 [(google.api.field_behavior) = REQUIRED]; + // Internal field, do not use directly. + double progress = 3 [(google.api.field_behavior) = OPTIONAL]; + // Internal field, do not use directly. + google.rpc.Status status = 6 [(google.api.field_behavior) = OPTIONAL]; +} + +// Internal response proto, do not use directly. +message InternalUpdateGraphOperationResponse {} diff --git a/proto-google-cloud-spanner-admin-instance-v1/clirr-ignored-differences.xml b/proto-google-cloud-spanner-admin-instance-v1/clirr-ignored-differences.xml index fa9181b755b..7236471b371 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/clirr-ignored-differences.xml +++ b/proto-google-cloud-spanner-admin-instance-v1/clirr-ignored-differences.xml @@ -17,7 +17,63 @@ boolean has*(*) - + + + + 5001 + com/google/spanner/admin/instance/v1/* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/admin/instance/v1/*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/admin/instance/v1/*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/admin/instance/v1/*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/admin/instance/v1/*$*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/admin/instance/v1/*$*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/admin/instance/v1/*Proto + com/google/protobuf/GeneratedFile + + + + 7005 + com/google/spanner/admin/instance/v1/** + * newBuilderForType(*) + ** + + + + 7006 + com/google/spanner/admin/instance/v1/** + * internalGetFieldAccessorTable() + ** + + + + 7014 + com/google/spanner/admin/instance/v1/** + * getDescriptor() + 7006 com/google/spanner/admin/instance/v1/** diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml index 08da9e3b853..b921024b950 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/pom.xml +++ b/proto-google-cloud-spanner-admin-instance-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.82.0 + 6.113.1-SNAPSHOT proto-google-cloud-spanner-admin-instance-v1 PROTO library for proto-google-cloud-spanner-admin-instance-v1 com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java index eeb39bfd3d2..01e307104c7 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.AutoscalingConfig} */ -public final class AutoscalingConfig extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class AutoscalingConfig extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.AutoscalingConfig) AutoscalingConfigOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AutoscalingConfig"); + } + // Use AutoscalingConfig.newBuilder() to construct. - private AutoscalingConfig(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private AutoscalingConfig(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private AutoscalingConfig() { asymmetricAutoscalingOptions_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AutoscalingConfig(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_fieldAccessorTable @@ -81,6 +88,7 @@ public interface AutoscalingLimitsOrBuilder * @return Whether the minNodes field is set. */ boolean hasMinNodes(); + /** * * @@ -108,6 +116,7 @@ public interface AutoscalingLimitsOrBuilder * @return Whether the minProcessingUnits field is set. */ boolean hasMinProcessingUnits(); + /** * * @@ -135,6 +144,7 @@ public interface AutoscalingLimitsOrBuilder * @return Whether the maxNodes field is set. */ boolean hasMaxNodes(); + /** * * @@ -163,6 +173,7 @@ public interface AutoscalingLimitsOrBuilder * @return Whether the maxProcessingUnits field is set. */ boolean hasMaxProcessingUnits(); + /** * * @@ -184,6 +195,7 @@ public interface AutoscalingLimitsOrBuilder com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.MaxLimitCase getMaxLimitCase(); } + /** * * @@ -197,31 +209,36 @@ public interface AutoscalingLimitsOrBuilder * * Protobuf type {@code google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits} */ - public static final class AutoscalingLimits extends com.google.protobuf.GeneratedMessageV3 + public static final class AutoscalingLimits extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits) AutoscalingLimitsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AutoscalingLimits"); + } + // Use AutoscalingLimits.newBuilder() to construct. - private AutoscalingLimits(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private AutoscalingLimits(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private AutoscalingLimits() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AutoscalingLimits(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_fieldAccessorTable @@ -248,6 +265,7 @@ public enum MinLimitCase private MinLimitCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -297,6 +315,7 @@ public enum MaxLimitCase private MaxLimitCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -330,6 +349,7 @@ public MaxLimitCase getMaxLimitCase() { } public static final int MIN_NODES_FIELD_NUMBER = 1; + /** * * @@ -346,6 +366,7 @@ public MaxLimitCase getMaxLimitCase() { public boolean hasMinNodes() { return minLimitCase_ == 1; } + /** * * @@ -367,6 +388,7 @@ public int getMinNodes() { } public static final int MIN_PROCESSING_UNITS_FIELD_NUMBER = 2; + /** * * @@ -383,6 +405,7 @@ public int getMinNodes() { public boolean hasMinProcessingUnits() { return minLimitCase_ == 2; } + /** * * @@ -404,6 +427,7 @@ public int getMinProcessingUnits() { } public static final int MAX_NODES_FIELD_NUMBER = 3; + /** * * @@ -420,6 +444,7 @@ public int getMinProcessingUnits() { public boolean hasMaxNodes() { return maxLimitCase_ == 3; } + /** * * @@ -441,6 +466,7 @@ public int getMaxNodes() { } public static final int MAX_PROCESSING_UNITS_FIELD_NUMBER = 4; + /** * * @@ -458,6 +484,7 @@ public int getMaxNodes() { public boolean hasMaxProcessingUnits() { return maxLimitCase_ == 4; } + /** * * @@ -653,33 +680,33 @@ public int hashCode() { public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits @@ -687,7 +714,7 @@ public int hashCode() { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -711,11 +738,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -729,8 +756,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits) com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder { @@ -740,7 +766,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_fieldAccessorTable @@ -754,7 +780,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -818,41 +844,6 @@ private void buildPartialOneofs( result.maxLimit_ = this.maxLimit_; } - @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 @@ -1014,6 +1005,7 @@ public Builder clearMaxLimit() { public boolean hasMinNodes() { return minLimitCase_ == 1; } + /** * * @@ -1032,6 +1024,7 @@ public int getMinNodes() { } return 0; } + /** * * @@ -1052,6 +1045,7 @@ public Builder setMinNodes(int value) { onChanged(); return this; } + /** * * @@ -1088,6 +1082,7 @@ public Builder clearMinNodes() { public boolean hasMinProcessingUnits() { return minLimitCase_ == 2; } + /** * * @@ -1106,6 +1101,7 @@ public int getMinProcessingUnits() { } return 0; } + /** * * @@ -1126,6 +1122,7 @@ public Builder setMinProcessingUnits(int value) { onChanged(); return this; } + /** * * @@ -1162,6 +1159,7 @@ public Builder clearMinProcessingUnits() { public boolean hasMaxNodes() { return maxLimitCase_ == 3; } + /** * * @@ -1180,6 +1178,7 @@ public int getMaxNodes() { } return 0; } + /** * * @@ -1200,6 +1199,7 @@ public Builder setMaxNodes(int value) { onChanged(); return this; } + /** * * @@ -1237,6 +1237,7 @@ public Builder clearMaxNodes() { public boolean hasMaxProcessingUnits() { return maxLimitCase_ == 4; } + /** * * @@ -1256,6 +1257,7 @@ public int getMaxProcessingUnits() { } return 0; } + /** * * @@ -1277,6 +1279,7 @@ public Builder setMaxProcessingUnits(int value) { onChanged(); return this; } + /** * * @@ -1299,18 +1302,6 @@ public Builder clearMaxProcessingUnits() { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits) } @@ -1376,20 +1367,43 @@ public interface AutoscalingTargetsOrBuilder * * *
                                -     * Required. The target high priority cpu utilization percentage that the
                                +     * Optional. The target high priority cpu utilization percentage that the
                                      * autoscaler should be trying to achieve for the instance. This number is
                                      * on a scale from 0 (no utilization) to 100 (full utilization). The valid
                                -     * range is [10, 90] inclusive.
                                +     * range is [10, 90] inclusive. If not specified or set to 0, the autoscaler
                                +     * skips scaling based on high priority CPU utilization.
                                      * 
                                * * - * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = REQUIRED]; + * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = OPTIONAL]; * * * @return The highPriorityCpuUtilizationPercent. */ int getHighPriorityCpuUtilizationPercent(); + /** + * + * + *
                                +     * Optional. The target total CPU utilization percentage that the autoscaler
                                +     * should be trying to achieve for the instance. This number is on a scale
                                +     * from 0 (no utilization) to 100 (full utilization). The valid range is
                                +     * [10, 90] inclusive. If not specified or set to 0, the autoscaler skips
                                +     * scaling based on total CPU utilization. If both
                                +     * `high_priority_cpu_utilization_percent` and
                                +     * `total_cpu_utilization_percent` are specified, the autoscaler provisions
                                +     * the larger of the two required compute capacities to satisfy both
                                +     * targets.
                                +     * 
                                + * + * int32 total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The totalCpuUtilizationPercent. + */ + int getTotalCpuUtilizationPercent(); + /** * * @@ -1397,7 +1411,7 @@ public interface AutoscalingTargetsOrBuilder * Required. The target storage utilization percentage that the autoscaler * should be trying to achieve for the instance. This number is on a scale * from 0 (no utilization) to 100 (full utilization). The valid range is - * [10, 100] inclusive. + * [10, 99] inclusive. * * * int32 storage_utilization_percent = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -1406,6 +1420,7 @@ public interface AutoscalingTargetsOrBuilder */ int getStorageUtilizationPercent(); } + /** * * @@ -1415,31 +1430,36 @@ public interface AutoscalingTargetsOrBuilder * * Protobuf type {@code google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets} */ - public static final class AutoscalingTargets extends com.google.protobuf.GeneratedMessageV3 + public static final class AutoscalingTargets extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets) AutoscalingTargetsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AutoscalingTargets"); + } + // Use AutoscalingTargets.newBuilder() to construct. - private AutoscalingTargets(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private AutoscalingTargets(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private AutoscalingTargets() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AutoscalingTargets(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_fieldAccessorTable @@ -1451,18 +1471,20 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int HIGH_PRIORITY_CPU_UTILIZATION_PERCENT_FIELD_NUMBER = 1; private int highPriorityCpuUtilizationPercent_ = 0; + /** * * *
                                -     * Required. The target high priority cpu utilization percentage that the
                                +     * Optional. The target high priority cpu utilization percentage that the
                                      * autoscaler should be trying to achieve for the instance. This number is
                                      * on a scale from 0 (no utilization) to 100 (full utilization). The valid
                                -     * range is [10, 90] inclusive.
                                +     * range is [10, 90] inclusive. If not specified or set to 0, the autoscaler
                                +     * skips scaling based on high priority CPU utilization.
                                      * 
                                * * - * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = REQUIRED]; + * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = OPTIONAL]; * * * @return The highPriorityCpuUtilizationPercent. @@ -1472,8 +1494,37 @@ public int getHighPriorityCpuUtilizationPercent() { return highPriorityCpuUtilizationPercent_; } + public static final int TOTAL_CPU_UTILIZATION_PERCENT_FIELD_NUMBER = 4; + private int totalCpuUtilizationPercent_ = 0; + + /** + * + * + *
                                +     * Optional. The target total CPU utilization percentage that the autoscaler
                                +     * should be trying to achieve for the instance. This number is on a scale
                                +     * from 0 (no utilization) to 100 (full utilization). The valid range is
                                +     * [10, 90] inclusive. If not specified or set to 0, the autoscaler skips
                                +     * scaling based on total CPU utilization. If both
                                +     * `high_priority_cpu_utilization_percent` and
                                +     * `total_cpu_utilization_percent` are specified, the autoscaler provisions
                                +     * the larger of the two required compute capacities to satisfy both
                                +     * targets.
                                +     * 
                                + * + * int32 total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The totalCpuUtilizationPercent. + */ + @java.lang.Override + public int getTotalCpuUtilizationPercent() { + return totalCpuUtilizationPercent_; + } + public static final int STORAGE_UTILIZATION_PERCENT_FIELD_NUMBER = 2; private int storageUtilizationPercent_ = 0; + /** * * @@ -1481,7 +1532,7 @@ public int getHighPriorityCpuUtilizationPercent() { * Required. The target storage utilization percentage that the autoscaler * should be trying to achieve for the instance. This number is on a scale * from 0 (no utilization) to 100 (full utilization). The valid range is - * [10, 100] inclusive. + * [10, 99] inclusive. * * * int32 storage_utilization_percent = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -1513,6 +1564,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (storageUtilizationPercent_ != 0) { output.writeInt32(2, storageUtilizationPercent_); } + if (totalCpuUtilizationPercent_ != 0) { + output.writeInt32(4, totalCpuUtilizationPercent_); + } getUnknownFields().writeTo(output); } @@ -1531,6 +1585,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, storageUtilizationPercent_); } + if (totalCpuUtilizationPercent_ != 0) { + size += + com.google.protobuf.CodedOutputStream.computeInt32Size(4, totalCpuUtilizationPercent_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -1550,6 +1608,7 @@ public boolean equals(final java.lang.Object obj) { if (getHighPriorityCpuUtilizationPercent() != other.getHighPriorityCpuUtilizationPercent()) return false; + if (getTotalCpuUtilizationPercent() != other.getTotalCpuUtilizationPercent()) return false; if (getStorageUtilizationPercent() != other.getStorageUtilizationPercent()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; @@ -1564,6 +1623,8 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + HIGH_PRIORITY_CPU_UTILIZATION_PERCENT_FIELD_NUMBER; hash = (53 * hash) + getHighPriorityCpuUtilizationPercent(); + hash = (37 * hash) + TOTAL_CPU_UTILIZATION_PERCENT_FIELD_NUMBER; + hash = (53 * hash) + getTotalCpuUtilizationPercent(); hash = (37 * hash) + STORAGE_UTILIZATION_PERCENT_FIELD_NUMBER; hash = (53 * hash) + getStorageUtilizationPercent(); hash = (29 * hash) + getUnknownFields().hashCode(); @@ -1611,33 +1672,33 @@ public int hashCode() { public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets @@ -1645,7 +1706,7 @@ public int hashCode() { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1669,11 +1730,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1683,8 +1744,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets) com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargetsOrBuilder { @@ -1694,7 +1754,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_fieldAccessorTable @@ -1708,7 +1768,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1717,6 +1777,7 @@ public Builder clear() { super.clear(); bitField0_ = 0; highPriorityCpuUtilizationPercent_ = 0; + totalCpuUtilizationPercent_ = 0; storageUtilizationPercent_ = 0; return this; } @@ -1763,45 +1824,13 @@ private void buildPartial0( result.highPriorityCpuUtilizationPercent_ = highPriorityCpuUtilizationPercent_; } if (((from_bitField0_ & 0x00000002) != 0)) { + result.totalCpuUtilizationPercent_ = totalCpuUtilizationPercent_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { result.storageUtilizationPercent_ = storageUtilizationPercent_; } } - @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 @@ -1822,6 +1851,9 @@ public Builder mergeFrom( if (other.getHighPriorityCpuUtilizationPercent() != 0) { setHighPriorityCpuUtilizationPercent(other.getHighPriorityCpuUtilizationPercent()); } + if (other.getTotalCpuUtilizationPercent() != 0) { + setTotalCpuUtilizationPercent(other.getTotalCpuUtilizationPercent()); + } if (other.getStorageUtilizationPercent() != 0) { setStorageUtilizationPercent(other.getStorageUtilizationPercent()); } @@ -1860,9 +1892,15 @@ public Builder mergeFrom( case 16: { storageUtilizationPercent_ = input.readInt32(); - bitField0_ |= 0x00000002; + bitField0_ |= 0x00000004; break; } // case 16 + case 32: + { + totalCpuUtilizationPercent_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 32 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1883,18 +1921,20 @@ public Builder mergeFrom( private int bitField0_; private int highPriorityCpuUtilizationPercent_; + /** * * *
                                -       * Required. The target high priority cpu utilization percentage that the
                                +       * Optional. The target high priority cpu utilization percentage that the
                                        * autoscaler should be trying to achieve for the instance. This number is
                                        * on a scale from 0 (no utilization) to 100 (full utilization). The valid
                                -       * range is [10, 90] inclusive.
                                +       * range is [10, 90] inclusive. If not specified or set to 0, the autoscaler
                                +       * skips scaling based on high priority CPU utilization.
                                        * 
                                * * - * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = REQUIRED]; + * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = OPTIONAL]; * * * @return The highPriorityCpuUtilizationPercent. @@ -1903,18 +1943,20 @@ public Builder mergeFrom( public int getHighPriorityCpuUtilizationPercent() { return highPriorityCpuUtilizationPercent_; } + /** * * *
                                -       * Required. The target high priority cpu utilization percentage that the
                                +       * Optional. The target high priority cpu utilization percentage that the
                                        * autoscaler should be trying to achieve for the instance. This number is
                                        * on a scale from 0 (no utilization) to 100 (full utilization). The valid
                                -       * range is [10, 90] inclusive.
                                +       * range is [10, 90] inclusive. If not specified or set to 0, the autoscaler
                                +       * skips scaling based on high priority CPU utilization.
                                        * 
                                * * - * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = REQUIRED]; + * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = OPTIONAL]; * * * @param value The highPriorityCpuUtilizationPercent to set. @@ -1927,18 +1969,20 @@ public Builder setHighPriorityCpuUtilizationPercent(int value) { onChanged(); return this; } + /** * * *
                                -       * Required. The target high priority cpu utilization percentage that the
                                +       * Optional. The target high priority cpu utilization percentage that the
                                        * autoscaler should be trying to achieve for the instance. This number is
                                        * on a scale from 0 (no utilization) to 100 (full utilization). The valid
                                -       * range is [10, 90] inclusive.
                                +       * range is [10, 90] inclusive. If not specified or set to 0, the autoscaler
                                +       * skips scaling based on high priority CPU utilization.
                                        * 
                                * * - * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = REQUIRED]; + * int32 high_priority_cpu_utilization_percent = 1 [(.google.api.field_behavior) = OPTIONAL]; * * * @return This builder for chaining. @@ -1950,7 +1994,91 @@ public Builder clearHighPriorityCpuUtilizationPercent() { return this; } + private int totalCpuUtilizationPercent_; + + /** + * + * + *
                                +       * Optional. The target total CPU utilization percentage that the autoscaler
                                +       * should be trying to achieve for the instance. This number is on a scale
                                +       * from 0 (no utilization) to 100 (full utilization). The valid range is
                                +       * [10, 90] inclusive. If not specified or set to 0, the autoscaler skips
                                +       * scaling based on total CPU utilization. If both
                                +       * `high_priority_cpu_utilization_percent` and
                                +       * `total_cpu_utilization_percent` are specified, the autoscaler provisions
                                +       * the larger of the two required compute capacities to satisfy both
                                +       * targets.
                                +       * 
                                + * + * int32 total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The totalCpuUtilizationPercent. + */ + @java.lang.Override + public int getTotalCpuUtilizationPercent() { + return totalCpuUtilizationPercent_; + } + + /** + * + * + *
                                +       * Optional. The target total CPU utilization percentage that the autoscaler
                                +       * should be trying to achieve for the instance. This number is on a scale
                                +       * from 0 (no utilization) to 100 (full utilization). The valid range is
                                +       * [10, 90] inclusive. If not specified or set to 0, the autoscaler skips
                                +       * scaling based on total CPU utilization. If both
                                +       * `high_priority_cpu_utilization_percent` and
                                +       * `total_cpu_utilization_percent` are specified, the autoscaler provisions
                                +       * the larger of the two required compute capacities to satisfy both
                                +       * targets.
                                +       * 
                                + * + * int32 total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The totalCpuUtilizationPercent to set. + * @return This builder for chaining. + */ + public Builder setTotalCpuUtilizationPercent(int value) { + + totalCpuUtilizationPercent_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Optional. The target total CPU utilization percentage that the autoscaler
                                +       * should be trying to achieve for the instance. This number is on a scale
                                +       * from 0 (no utilization) to 100 (full utilization). The valid range is
                                +       * [10, 90] inclusive. If not specified or set to 0, the autoscaler skips
                                +       * scaling based on total CPU utilization. If both
                                +       * `high_priority_cpu_utilization_percent` and
                                +       * `total_cpu_utilization_percent` are specified, the autoscaler provisions
                                +       * the larger of the two required compute capacities to satisfy both
                                +       * targets.
                                +       * 
                                + * + * int32 total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearTotalCpuUtilizationPercent() { + bitField0_ = (bitField0_ & ~0x00000002); + totalCpuUtilizationPercent_ = 0; + onChanged(); + return this; + } + private int storageUtilizationPercent_; + /** * * @@ -1958,7 +2086,7 @@ public Builder clearHighPriorityCpuUtilizationPercent() { * Required. The target storage utilization percentage that the autoscaler * should be trying to achieve for the instance. This number is on a scale * from 0 (no utilization) to 100 (full utilization). The valid range is - * [10, 100] inclusive. + * [10, 99] inclusive. * * * int32 storage_utilization_percent = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -1970,6 +2098,7 @@ public Builder clearHighPriorityCpuUtilizationPercent() { public int getStorageUtilizationPercent() { return storageUtilizationPercent_; } + /** * * @@ -1977,7 +2106,7 @@ public int getStorageUtilizationPercent() { * Required. The target storage utilization percentage that the autoscaler * should be trying to achieve for the instance. This number is on a scale * from 0 (no utilization) to 100 (full utilization). The valid range is - * [10, 100] inclusive. + * [10, 99] inclusive. * * * int32 storage_utilization_percent = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -1989,10 +2118,11 @@ public int getStorageUtilizationPercent() { public Builder setStorageUtilizationPercent(int value) { storageUtilizationPercent_ = value; - bitField0_ |= 0x00000002; + bitField0_ |= 0x00000004; onChanged(); return this; } + /** * * @@ -2000,7 +2130,7 @@ public Builder setStorageUtilizationPercent(int value) { * Required. The target storage utilization percentage that the autoscaler * should be trying to achieve for the instance. This number is on a scale * from 0 (no utilization) to 100 (full utilization). The valid range is - * [10, 100] inclusive. + * [10, 99] inclusive. * * * int32 storage_utilization_percent = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2009,24 +2139,12 @@ public Builder setStorageUtilizationPercent(int value) { * @return This builder for chaining. */ public Builder clearStorageUtilizationPercent() { - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ = (bitField0_ & ~0x00000004); storageUtilizationPercent_ = 0; onChanged(); return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets) } @@ -2103,6 +2221,7 @@ public interface AsymmetricAutoscalingOptionOrBuilder * @return Whether the replicaSelection field is set. */ boolean hasReplicaSelection(); + /** * * @@ -2118,6 +2237,7 @@ public interface AsymmetricAutoscalingOptionOrBuilder * @return The replicaSelection. */ com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection(); + /** * * @@ -2147,6 +2267,7 @@ public interface AsymmetricAutoscalingOptionOrBuilder * @return Whether the overrides field is set. */ boolean hasOverrides(); + /** * * @@ -2164,6 +2285,7 @@ public interface AsymmetricAutoscalingOptionOrBuilder com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverrides getOverrides(); + /** * * @@ -2180,6 +2302,7 @@ public interface AsymmetricAutoscalingOptionOrBuilder .AutoscalingConfigOverridesOrBuilder getOverridesOrBuilder(); } + /** * * @@ -2191,32 +2314,36 @@ public interface AsymmetricAutoscalingOptionOrBuilder * Protobuf type {@code * google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption} */ - public static final class AsymmetricAutoscalingOption - extends com.google.protobuf.GeneratedMessageV3 + public static final class AsymmetricAutoscalingOption extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption) AsymmetricAutoscalingOptionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AsymmetricAutoscalingOption"); + } + // Use AsymmetricAutoscalingOption.newBuilder() to construct. - private AsymmetricAutoscalingOption(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private AsymmetricAutoscalingOption(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private AsymmetricAutoscalingOption() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AsymmetricAutoscalingOption(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_fieldAccessorTable @@ -2247,6 +2374,7 @@ public interface AutoscalingConfigOverridesOrBuilder * @return Whether the autoscalingLimits field is set. */ boolean hasAutoscalingLimits(); + /** * * @@ -2263,6 +2391,7 @@ public interface AutoscalingConfigOverridesOrBuilder */ com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits getAutoscalingLimits(); + /** * * @@ -2294,7 +2423,94 @@ public interface AutoscalingConfigOverridesOrBuilder * @return The autoscalingTargetHighPriorityCpuUtilizationPercent. */ int getAutoscalingTargetHighPriorityCpuUtilizationPercent(); + + /** + * + * + *
                                +       * Optional. If specified, overrides the
                                +       * autoscaling target `total_cpu_utilization_percent`
                                +       * in the top-level autoscaling configuration for the selected replicas.
                                +       * 
                                + * + * + * int32 autoscaling_target_total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The autoscalingTargetTotalCpuUtilizationPercent. + */ + int getAutoscalingTargetTotalCpuUtilizationPercent(); + + /** + * + * + *
                                +       * Optional. If true, disables high priority CPU autoscaling for the
                                +       * selected replicas and ignores
                                +       * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +       * in the top-level autoscaling configuration.
                                +       *
                                +       * When setting this field to true, setting
                                +       * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +       * field to a non-zero value for the same replica is not supported.
                                +       *
                                +       * If false, the
                                +       * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +       * field in the replica will be used if set to a non-zero value.
                                +       * Otherwise, the
                                +       * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +       * field in the top-level autoscaling configuration will be used.
                                +       *
                                +       * Setting both
                                +       * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +       * and
                                +       * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +       * to true for the same replica is not supported.
                                +       * 
                                + * + * + * bool disable_high_priority_cpu_autoscaling = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The disableHighPriorityCpuAutoscaling. + */ + boolean getDisableHighPriorityCpuAutoscaling(); + + /** + * + * + *
                                +       * Optional. If true, disables total CPU autoscaling for the selected
                                +       * replicas and ignores
                                +       * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +       * in the top-level autoscaling configuration.
                                +       *
                                +       * When setting this field to true, setting
                                +       * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +       * field to a non-zero value for the same replica is not supported.
                                +       *
                                +       * If false, the
                                +       * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +       * field in the replica will be used if set to a non-zero value.
                                +       * Otherwise, the
                                +       * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +       * field in the top-level autoscaling configuration will be used.
                                +       *
                                +       * Setting both
                                +       * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +       * and
                                +       * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +       * to true for the same replica is not supported.
                                +       * 
                                + * + * bool disable_total_cpu_autoscaling = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The disableTotalCpuAutoscaling. + */ + boolean getDisableTotalCpuAutoscaling(); } + /** * * @@ -2309,32 +2525,36 @@ public interface AutoscalingConfigOverridesOrBuilder * google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides} */ public static final class AutoscalingConfigOverrides - extends com.google.protobuf.GeneratedMessageV3 + extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides) AutoscalingConfigOverridesOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AutoscalingConfigOverrides"); + } + // Use AutoscalingConfigOverrides.newBuilder() to construct. - private AutoscalingConfigOverrides( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private AutoscalingConfigOverrides(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private AutoscalingConfigOverrides() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AutoscalingConfigOverrides(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_fieldAccessorTable @@ -2349,6 +2569,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int AUTOSCALING_LIMITS_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscalingLimits_; + /** * * @@ -2367,6 +2588,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasAutoscalingLimits() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -2389,6 +2611,7 @@ public boolean hasAutoscalingLimits() { .getDefaultInstance() : autoscalingLimits_; } + /** * * @@ -2413,6 +2636,7 @@ public boolean hasAutoscalingLimits() { public static final int AUTOSCALING_TARGET_HIGH_PRIORITY_CPU_UTILIZATION_PERCENT_FIELD_NUMBER = 2; private int autoscalingTargetHighPriorityCpuUtilizationPercent_ = 0; + /** * * @@ -2433,6 +2657,110 @@ public int getAutoscalingTargetHighPriorityCpuUtilizationPercent() { return autoscalingTargetHighPriorityCpuUtilizationPercent_; } + public static final int AUTOSCALING_TARGET_TOTAL_CPU_UTILIZATION_PERCENT_FIELD_NUMBER = 4; + private int autoscalingTargetTotalCpuUtilizationPercent_ = 0; + + /** + * + * + *
                                +       * Optional. If specified, overrides the
                                +       * autoscaling target `total_cpu_utilization_percent`
                                +       * in the top-level autoscaling configuration for the selected replicas.
                                +       * 
                                + * + * + * int32 autoscaling_target_total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The autoscalingTargetTotalCpuUtilizationPercent. + */ + @java.lang.Override + public int getAutoscalingTargetTotalCpuUtilizationPercent() { + return autoscalingTargetTotalCpuUtilizationPercent_; + } + + public static final int DISABLE_HIGH_PRIORITY_CPU_AUTOSCALING_FIELD_NUMBER = 5; + private boolean disableHighPriorityCpuAutoscaling_ = false; + + /** + * + * + *
                                +       * Optional. If true, disables high priority CPU autoscaling for the
                                +       * selected replicas and ignores
                                +       * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +       * in the top-level autoscaling configuration.
                                +       *
                                +       * When setting this field to true, setting
                                +       * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +       * field to a non-zero value for the same replica is not supported.
                                +       *
                                +       * If false, the
                                +       * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +       * field in the replica will be used if set to a non-zero value.
                                +       * Otherwise, the
                                +       * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +       * field in the top-level autoscaling configuration will be used.
                                +       *
                                +       * Setting both
                                +       * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +       * and
                                +       * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +       * to true for the same replica is not supported.
                                +       * 
                                + * + * + * bool disable_high_priority_cpu_autoscaling = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The disableHighPriorityCpuAutoscaling. + */ + @java.lang.Override + public boolean getDisableHighPriorityCpuAutoscaling() { + return disableHighPriorityCpuAutoscaling_; + } + + public static final int DISABLE_TOTAL_CPU_AUTOSCALING_FIELD_NUMBER = 6; + private boolean disableTotalCpuAutoscaling_ = false; + + /** + * + * + *
                                +       * Optional. If true, disables total CPU autoscaling for the selected
                                +       * replicas and ignores
                                +       * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +       * in the top-level autoscaling configuration.
                                +       *
                                +       * When setting this field to true, setting
                                +       * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +       * field to a non-zero value for the same replica is not supported.
                                +       *
                                +       * If false, the
                                +       * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +       * field in the replica will be used if set to a non-zero value.
                                +       * Otherwise, the
                                +       * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +       * field in the top-level autoscaling configuration will be used.
                                +       *
                                +       * Setting both
                                +       * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +       * and
                                +       * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +       * to true for the same replica is not supported.
                                +       * 
                                + * + * bool disable_total_cpu_autoscaling = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The disableTotalCpuAutoscaling. + */ + @java.lang.Override + public boolean getDisableTotalCpuAutoscaling() { + return disableTotalCpuAutoscaling_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -2453,6 +2781,15 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (autoscalingTargetHighPriorityCpuUtilizationPercent_ != 0) { output.writeInt32(2, autoscalingTargetHighPriorityCpuUtilizationPercent_); } + if (autoscalingTargetTotalCpuUtilizationPercent_ != 0) { + output.writeInt32(4, autoscalingTargetTotalCpuUtilizationPercent_); + } + if (disableHighPriorityCpuAutoscaling_ != false) { + output.writeBool(5, disableHighPriorityCpuAutoscaling_); + } + if (disableTotalCpuAutoscaling_ != false) { + output.writeBool(6, disableTotalCpuAutoscaling_); + } getUnknownFields().writeTo(output); } @@ -2471,6 +2808,20 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeInt32Size( 2, autoscalingTargetHighPriorityCpuUtilizationPercent_); } + if (autoscalingTargetTotalCpuUtilizationPercent_ != 0) { + size += + com.google.protobuf.CodedOutputStream.computeInt32Size( + 4, autoscalingTargetTotalCpuUtilizationPercent_); + } + if (disableHighPriorityCpuAutoscaling_ != false) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize( + 5, disableHighPriorityCpuAutoscaling_); + } + if (disableTotalCpuAutoscaling_ != false) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize(6, disableTotalCpuAutoscaling_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -2500,6 +2851,11 @@ public boolean equals(final java.lang.Object obj) { } if (getAutoscalingTargetHighPriorityCpuUtilizationPercent() != other.getAutoscalingTargetHighPriorityCpuUtilizationPercent()) return false; + if (getAutoscalingTargetTotalCpuUtilizationPercent() + != other.getAutoscalingTargetTotalCpuUtilizationPercent()) return false; + if (getDisableHighPriorityCpuAutoscaling() != other.getDisableHighPriorityCpuAutoscaling()) + return false; + if (getDisableTotalCpuAutoscaling() != other.getDisableTotalCpuAutoscaling()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -2517,6 +2873,15 @@ public int hashCode() { } hash = (37 * hash) + AUTOSCALING_TARGET_HIGH_PRIORITY_CPU_UTILIZATION_PERCENT_FIELD_NUMBER; hash = (53 * hash) + getAutoscalingTargetHighPriorityCpuUtilizationPercent(); + hash = (37 * hash) + AUTOSCALING_TARGET_TOTAL_CPU_UTILIZATION_PERCENT_FIELD_NUMBER; + hash = (53 * hash) + getAutoscalingTargetTotalCpuUtilizationPercent(); + hash = (37 * hash) + DISABLE_HIGH_PRIORITY_CPU_AUTOSCALING_FIELD_NUMBER; + hash = + (53 * hash) + + com.google.protobuf.Internal.hashBoolean(getDisableHighPriorityCpuAutoscaling()); + hash = (37 * hash) + DISABLE_TOTAL_CPU_AUTOSCALING_FIELD_NUMBER; + hash = + (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDisableTotalCpuAutoscaling()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -2569,7 +2934,7 @@ public int hashCode() { public static com.google.spanner.admin.instance.v1.AutoscalingConfig .AsymmetricAutoscalingOption.AutoscalingConfigOverrides parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig @@ -2578,14 +2943,14 @@ public int hashCode() { java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig .AsymmetricAutoscalingOption.AutoscalingConfigOverrides parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig @@ -2594,14 +2959,14 @@ public int hashCode() { java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig .AsymmetricAutoscalingOption.AutoscalingConfigOverrides parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig @@ -2610,7 +2975,7 @@ public int hashCode() { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2637,10 +3002,11 @@ public Builder toBuilder() { @java.lang.Override protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2655,7 +3021,7 @@ protected Builder newBuilderForType( * google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides} */ public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides) com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption @@ -2666,7 +3032,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_fieldAccessorTable @@ -2683,14 +3049,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getAutoscalingLimitsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetAutoscalingLimitsFieldBuilder(); } } @@ -2704,6 +3070,9 @@ public Builder clear() { autoscalingLimitsBuilder_ = null; } autoscalingTargetHighPriorityCpuUtilizationPercent_ = 0; + autoscalingTargetTotalCpuUtilizationPercent_ = 0; + disableHighPriorityCpuAutoscaling_ = false; + disableTotalCpuAutoscaling_ = false; return this; } @@ -2767,44 +3136,19 @@ private void buildPartial0( result.autoscalingTargetHighPriorityCpuUtilizationPercent_ = autoscalingTargetHighPriorityCpuUtilizationPercent_; } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.autoscalingTargetTotalCpuUtilizationPercent_ = + autoscalingTargetTotalCpuUtilizationPercent_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.disableHighPriorityCpuAutoscaling_ = disableHighPriorityCpuAutoscaling_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.disableTotalCpuAutoscaling_ = disableTotalCpuAutoscaling_; + } 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 @@ -2835,6 +3179,16 @@ public Builder mergeFrom( setAutoscalingTargetHighPriorityCpuUtilizationPercent( other.getAutoscalingTargetHighPriorityCpuUtilizationPercent()); } + if (other.getAutoscalingTargetTotalCpuUtilizationPercent() != 0) { + setAutoscalingTargetTotalCpuUtilizationPercent( + other.getAutoscalingTargetTotalCpuUtilizationPercent()); + } + if (other.getDisableHighPriorityCpuAutoscaling() != false) { + setDisableHighPriorityCpuAutoscaling(other.getDisableHighPriorityCpuAutoscaling()); + } + if (other.getDisableTotalCpuAutoscaling() != false) { + setDisableTotalCpuAutoscaling(other.getDisableTotalCpuAutoscaling()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -2864,7 +3218,7 @@ public Builder mergeFrom( case 10: { input.readMessage( - getAutoscalingLimitsFieldBuilder().getBuilder(), extensionRegistry); + internalGetAutoscalingLimitsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -2874,6 +3228,24 @@ public Builder mergeFrom( bitField0_ |= 0x00000002; break; } // case 16 + case 32: + { + autoscalingTargetTotalCpuUtilizationPercent_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 32 + case 40: + { + disableHighPriorityCpuAutoscaling_ = input.readBool(); + bitField0_ |= 0x00000008; + break; + } // case 40 + case 48: + { + disableTotalCpuAutoscaling_ = input.readBool(); + bitField0_ |= 0x00000010; + break; + } // case 48 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -2895,11 +3267,12 @@ public Builder mergeFrom( private com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscalingLimits_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder> autoscalingLimitsBuilder_; + /** * * @@ -2917,6 +3290,7 @@ public Builder mergeFrom( public boolean hasAutoscalingLimits() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -2942,6 +3316,7 @@ public boolean hasAutoscalingLimits() { return autoscalingLimitsBuilder_.getMessage(); } } + /** * * @@ -2968,6 +3343,7 @@ public Builder setAutoscalingLimits( onChanged(); return this; } + /** * * @@ -2992,6 +3368,7 @@ public Builder setAutoscalingLimits( onChanged(); return this; } + /** * * @@ -3025,177 +3402,481 @@ public Builder mergeAutoscalingLimits( } return this; } + + /** + * + * + *
                                +         * Optional. If specified, overrides the min/max limit in the top-level
                                +         * autoscaling configuration for the selected replicas.
                                +         * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAutoscalingLimits() { + bitField0_ = (bitField0_ & ~0x00000001); + autoscalingLimits_ = null; + if (autoscalingLimitsBuilder_ != null) { + autoscalingLimitsBuilder_.dispose(); + autoscalingLimitsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Optional. If specified, overrides the min/max limit in the top-level
                                +         * autoscaling configuration for the selected replicas.
                                +         * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder + getAutoscalingLimitsBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetAutoscalingLimitsFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +         * Optional. If specified, overrides the min/max limit in the top-level
                                +         * autoscaling configuration for the selected replicas.
                                +         * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder + getAutoscalingLimitsOrBuilder() { + if (autoscalingLimitsBuilder_ != null) { + return autoscalingLimitsBuilder_.getMessageOrBuilder(); + } else { + return autoscalingLimits_ == null + ? com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits + .getDefaultInstance() + : autoscalingLimits_; + } + } + + /** + * + * + *
                                +         * Optional. If specified, overrides the min/max limit in the top-level
                                +         * autoscaling configuration for the selected replicas.
                                +         * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, + com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder, + com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder> + internalGetAutoscalingLimitsFieldBuilder() { + if (autoscalingLimitsBuilder_ == null) { + autoscalingLimitsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, + com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits + .Builder, + com.google.spanner.admin.instance.v1.AutoscalingConfig + .AutoscalingLimitsOrBuilder>( + getAutoscalingLimits(), getParentForChildren(), isClean()); + autoscalingLimits_ = null; + } + return autoscalingLimitsBuilder_; + } + + private int autoscalingTargetHighPriorityCpuUtilizationPercent_; + + /** + * + * + *
                                +         * Optional. If specified, overrides the autoscaling target
                                +         * high_priority_cpu_utilization_percent in the top-level autoscaling
                                +         * configuration for the selected replicas.
                                +         * 
                                + * + * + * int32 autoscaling_target_high_priority_cpu_utilization_percent = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The autoscalingTargetHighPriorityCpuUtilizationPercent. + */ + @java.lang.Override + public int getAutoscalingTargetHighPriorityCpuUtilizationPercent() { + return autoscalingTargetHighPriorityCpuUtilizationPercent_; + } + + /** + * + * + *
                                +         * Optional. If specified, overrides the autoscaling target
                                +         * high_priority_cpu_utilization_percent in the top-level autoscaling
                                +         * configuration for the selected replicas.
                                +         * 
                                + * + * + * int32 autoscaling_target_high_priority_cpu_utilization_percent = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The autoscalingTargetHighPriorityCpuUtilizationPercent to set. + * @return This builder for chaining. + */ + public Builder setAutoscalingTargetHighPriorityCpuUtilizationPercent(int value) { + + autoscalingTargetHighPriorityCpuUtilizationPercent_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Optional. If specified, overrides the autoscaling target
                                +         * high_priority_cpu_utilization_percent in the top-level autoscaling
                                +         * configuration for the selected replicas.
                                +         * 
                                + * + * + * int32 autoscaling_target_high_priority_cpu_utilization_percent = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearAutoscalingTargetHighPriorityCpuUtilizationPercent() { + bitField0_ = (bitField0_ & ~0x00000002); + autoscalingTargetHighPriorityCpuUtilizationPercent_ = 0; + onChanged(); + return this; + } + + private int autoscalingTargetTotalCpuUtilizationPercent_; + + /** + * + * + *
                                +         * Optional. If specified, overrides the
                                +         * autoscaling target `total_cpu_utilization_percent`
                                +         * in the top-level autoscaling configuration for the selected replicas.
                                +         * 
                                + * + * + * int32 autoscaling_target_total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The autoscalingTargetTotalCpuUtilizationPercent. + */ + @java.lang.Override + public int getAutoscalingTargetTotalCpuUtilizationPercent() { + return autoscalingTargetTotalCpuUtilizationPercent_; + } + /** * * *
                                -         * Optional. If specified, overrides the min/max limit in the top-level
                                -         * autoscaling configuration for the selected replicas.
                                +         * Optional. If specified, overrides the
                                +         * autoscaling target `total_cpu_utilization_percent`
                                +         * in the top-level autoscaling configuration for the selected replicas.
                                          * 
                                * * - * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * int32 autoscaling_target_total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; * + * + * @param value The autoscalingTargetTotalCpuUtilizationPercent to set. + * @return This builder for chaining. */ - public Builder clearAutoscalingLimits() { - bitField0_ = (bitField0_ & ~0x00000001); - autoscalingLimits_ = null; - if (autoscalingLimitsBuilder_ != null) { - autoscalingLimitsBuilder_.dispose(); - autoscalingLimitsBuilder_ = null; - } + public Builder setAutoscalingTargetTotalCpuUtilizationPercent(int value) { + + autoscalingTargetTotalCpuUtilizationPercent_ = value; + bitField0_ |= 0x00000004; onChanged(); return this; } + /** * * *
                                -         * Optional. If specified, overrides the min/max limit in the top-level
                                -         * autoscaling configuration for the selected replicas.
                                +         * Optional. If specified, overrides the
                                +         * autoscaling target `total_cpu_utilization_percent`
                                +         * in the top-level autoscaling configuration for the selected replicas.
                                          * 
                                * * - * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * int32 autoscaling_target_total_cpu_utilization_percent = 4 [(.google.api.field_behavior) = OPTIONAL]; * + * + * @return This builder for chaining. */ - public com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder - getAutoscalingLimitsBuilder() { - bitField0_ |= 0x00000001; + public Builder clearAutoscalingTargetTotalCpuUtilizationPercent() { + bitField0_ = (bitField0_ & ~0x00000004); + autoscalingTargetTotalCpuUtilizationPercent_ = 0; onChanged(); - return getAutoscalingLimitsFieldBuilder().getBuilder(); + return this; } + + private boolean disableHighPriorityCpuAutoscaling_; + /** * * *
                                -         * Optional. If specified, overrides the min/max limit in the top-level
                                -         * autoscaling configuration for the selected replicas.
                                +         * Optional. If true, disables high priority CPU autoscaling for the
                                +         * selected replicas and ignores
                                +         * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +         * in the top-level autoscaling configuration.
                                +         *
                                +         * When setting this field to true, setting
                                +         * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +         * field to a non-zero value for the same replica is not supported.
                                +         *
                                +         * If false, the
                                +         * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +         * field in the replica will be used if set to a non-zero value.
                                +         * Otherwise, the
                                +         * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +         * field in the top-level autoscaling configuration will be used.
                                +         *
                                +         * Setting both
                                +         * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +         * and
                                +         * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +         * to true for the same replica is not supported.
                                          * 
                                * * - * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * bool disable_high_priority_cpu_autoscaling = 5 [(.google.api.field_behavior) = OPTIONAL]; * + * + * @return The disableHighPriorityCpuAutoscaling. */ - public com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder - getAutoscalingLimitsOrBuilder() { - if (autoscalingLimitsBuilder_ != null) { - return autoscalingLimitsBuilder_.getMessageOrBuilder(); - } else { - return autoscalingLimits_ == null - ? com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits - .getDefaultInstance() - : autoscalingLimits_; - } + @java.lang.Override + public boolean getDisableHighPriorityCpuAutoscaling() { + return disableHighPriorityCpuAutoscaling_; } + /** * * *
                                -         * Optional. If specified, overrides the min/max limit in the top-level
                                -         * autoscaling configuration for the selected replicas.
                                +         * Optional. If true, disables high priority CPU autoscaling for the
                                +         * selected replicas and ignores
                                +         * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +         * in the top-level autoscaling configuration.
                                +         *
                                +         * When setting this field to true, setting
                                +         * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +         * field to a non-zero value for the same replica is not supported.
                                +         *
                                +         * If false, the
                                +         * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +         * field in the replica will be used if set to a non-zero value.
                                +         * Otherwise, the
                                +         * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +         * field in the top-level autoscaling configuration will be used.
                                +         *
                                +         * Setting both
                                +         * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +         * and
                                +         * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +         * to true for the same replica is not supported.
                                          * 
                                * * - * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = OPTIONAL]; + * bool disable_high_priority_cpu_autoscaling = 5 [(.google.api.field_behavior) = OPTIONAL]; * + * + * @param value The disableHighPriorityCpuAutoscaling to set. + * @return This builder for chaining. */ - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, - com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder, - com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder> - getAutoscalingLimitsFieldBuilder() { - if (autoscalingLimitsBuilder_ == null) { - autoscalingLimitsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, - com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits - .Builder, - com.google.spanner.admin.instance.v1.AutoscalingConfig - .AutoscalingLimitsOrBuilder>( - getAutoscalingLimits(), getParentForChildren(), isClean()); - autoscalingLimits_ = null; - } - return autoscalingLimitsBuilder_; + public Builder setDisableHighPriorityCpuAutoscaling(boolean value) { + + disableHighPriorityCpuAutoscaling_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; } - private int autoscalingTargetHighPriorityCpuUtilizationPercent_; /** * * *
                                -         * Optional. If specified, overrides the autoscaling target
                                -         * high_priority_cpu_utilization_percent in the top-level autoscaling
                                -         * configuration for the selected replicas.
                                +         * Optional. If true, disables high priority CPU autoscaling for the
                                +         * selected replicas and ignores
                                +         * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +         * in the top-level autoscaling configuration.
                                +         *
                                +         * When setting this field to true, setting
                                +         * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +         * field to a non-zero value for the same replica is not supported.
                                +         *
                                +         * If false, the
                                +         * [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent]
                                +         * field in the replica will be used if set to a non-zero value.
                                +         * Otherwise, the
                                +         * [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent]
                                +         * field in the top-level autoscaling configuration will be used.
                                +         *
                                +         * Setting both
                                +         * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +         * and
                                +         * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +         * to true for the same replica is not supported.
                                          * 
                                * * - * int32 autoscaling_target_high_priority_cpu_utilization_percent = 2 [(.google.api.field_behavior) = OPTIONAL]; + * bool disable_high_priority_cpu_autoscaling = 5 [(.google.api.field_behavior) = OPTIONAL]; * * - * @return The autoscalingTargetHighPriorityCpuUtilizationPercent. + * @return This builder for chaining. + */ + public Builder clearDisableHighPriorityCpuAutoscaling() { + bitField0_ = (bitField0_ & ~0x00000008); + disableHighPriorityCpuAutoscaling_ = false; + onChanged(); + return this; + } + + private boolean disableTotalCpuAutoscaling_; + + /** + * + * + *
                                +         * Optional. If true, disables total CPU autoscaling for the selected
                                +         * replicas and ignores
                                +         * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +         * in the top-level autoscaling configuration.
                                +         *
                                +         * When setting this field to true, setting
                                +         * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +         * field to a non-zero value for the same replica is not supported.
                                +         *
                                +         * If false, the
                                +         * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +         * field in the replica will be used if set to a non-zero value.
                                +         * Otherwise, the
                                +         * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +         * field in the top-level autoscaling configuration will be used.
                                +         *
                                +         * Setting both
                                +         * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +         * and
                                +         * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +         * to true for the same replica is not supported.
                                +         * 
                                + * + * bool disable_total_cpu_autoscaling = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The disableTotalCpuAutoscaling. */ @java.lang.Override - public int getAutoscalingTargetHighPriorityCpuUtilizationPercent() { - return autoscalingTargetHighPriorityCpuUtilizationPercent_; + public boolean getDisableTotalCpuAutoscaling() { + return disableTotalCpuAutoscaling_; } + /** * * *
                                -         * Optional. If specified, overrides the autoscaling target
                                -         * high_priority_cpu_utilization_percent in the top-level autoscaling
                                -         * configuration for the selected replicas.
                                +         * Optional. If true, disables total CPU autoscaling for the selected
                                +         * replicas and ignores
                                +         * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +         * in the top-level autoscaling configuration.
                                +         *
                                +         * When setting this field to true, setting
                                +         * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +         * field to a non-zero value for the same replica is not supported.
                                +         *
                                +         * If false, the
                                +         * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +         * field in the replica will be used if set to a non-zero value.
                                +         * Otherwise, the
                                +         * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +         * field in the top-level autoscaling configuration will be used.
                                +         *
                                +         * Setting both
                                +         * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +         * and
                                +         * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +         * to true for the same replica is not supported.
                                          * 
                                * - * - * int32 autoscaling_target_high_priority_cpu_utilization_percent = 2 [(.google.api.field_behavior) = OPTIONAL]; + * bool disable_total_cpu_autoscaling = 6 [(.google.api.field_behavior) = OPTIONAL]; * * - * @param value The autoscalingTargetHighPriorityCpuUtilizationPercent to set. + * @param value The disableTotalCpuAutoscaling to set. * @return This builder for chaining. */ - public Builder setAutoscalingTargetHighPriorityCpuUtilizationPercent(int value) { + public Builder setDisableTotalCpuAutoscaling(boolean value) { - autoscalingTargetHighPriorityCpuUtilizationPercent_ = value; - bitField0_ |= 0x00000002; + disableTotalCpuAutoscaling_ = value; + bitField0_ |= 0x00000010; onChanged(); return this; } + /** * * *
                                -         * Optional. If specified, overrides the autoscaling target
                                -         * high_priority_cpu_utilization_percent in the top-level autoscaling
                                -         * configuration for the selected replicas.
                                +         * Optional. If true, disables total CPU autoscaling for the selected
                                +         * replicas and ignores
                                +         * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +         * in the top-level autoscaling configuration.
                                +         *
                                +         * When setting this field to true, setting
                                +         * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +         * field to a non-zero value for the same replica is not supported.
                                +         *
                                +         * If false, the
                                +         * [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent]
                                +         * field in the replica will be used if set to a non-zero value.
                                +         * Otherwise, the
                                +         * [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent]
                                +         * field in the top-level autoscaling configuration will be used.
                                +         *
                                +         * Setting both
                                +         * [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling]
                                +         * and
                                +         * [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling]
                                +         * to true for the same replica is not supported.
                                          * 
                                * - * - * int32 autoscaling_target_high_priority_cpu_utilization_percent = 2 [(.google.api.field_behavior) = OPTIONAL]; + * bool disable_total_cpu_autoscaling = 6 [(.google.api.field_behavior) = OPTIONAL]; * * * @return This builder for chaining. */ - public Builder clearAutoscalingTargetHighPriorityCpuUtilizationPercent() { - bitField0_ = (bitField0_ & ~0x00000002); - autoscalingTargetHighPriorityCpuUtilizationPercent_ = 0; + public Builder clearDisableTotalCpuAutoscaling() { + bitField0_ = (bitField0_ & ~0x00000010); + disableTotalCpuAutoscaling_ = false; onChanged(); return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides) } @@ -3259,6 +3940,7 @@ public com.google.protobuf.Parser getParserForType() private int bitField0_; public static final int REPLICA_SELECTION_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.ReplicaSelection replicaSelection_; + /** * * @@ -3277,6 +3959,7 @@ public com.google.protobuf.Parser getParserForType() public boolean hasReplicaSelection() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -3297,6 +3980,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection ? com.google.spanner.admin.instance.v1.ReplicaSelection.getDefaultInstance() : replicaSelection_; } + /** * * @@ -3321,6 +4005,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection private com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverrides overrides_; + /** * * @@ -3339,6 +4024,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection public boolean hasOverrides() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -3362,6 +4048,7 @@ public boolean hasOverrides() { .AutoscalingConfigOverrides.getDefaultInstance() : overrides_; } + /** * * @@ -3509,33 +4196,33 @@ public int hashCode() { public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption @@ -3543,7 +4230,7 @@ public int hashCode() { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -3568,11 +4255,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -3584,8 +4271,7 @@ protected Builder newBuilderForType( * Protobuf type {@code * google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption) com.google.spanner.admin.instance.v1.AutoscalingConfig @@ -3596,7 +4282,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_fieldAccessorTable @@ -3613,15 +4299,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getReplicaSelectionFieldBuilder(); - getOverridesFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetReplicaSelectionFieldBuilder(); + internalGetOverridesFieldBuilder(); } } @@ -3698,41 +4384,6 @@ private void buildPartial0( 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 @@ -3788,13 +4439,14 @@ public Builder mergeFrom( case 10: { input.readMessage( - getReplicaSelectionFieldBuilder().getBuilder(), extensionRegistry); + internalGetReplicaSelectionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getOverridesFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetOverridesFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -3818,11 +4470,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.ReplicaSelection replicaSelection_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaSelection, com.google.spanner.admin.instance.v1.ReplicaSelection.Builder, com.google.spanner.admin.instance.v1.ReplicaSelectionOrBuilder> replicaSelectionBuilder_; + /** * * @@ -3840,6 +4493,7 @@ public Builder mergeFrom( public boolean hasReplicaSelection() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -3863,6 +4517,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection return replicaSelectionBuilder_.getMessage(); } } + /** * * @@ -3889,6 +4544,7 @@ public Builder setReplicaSelection( onChanged(); return this; } + /** * * @@ -3912,6 +4568,7 @@ public Builder setReplicaSelection( onChanged(); return this; } + /** * * @@ -3944,6 +4601,7 @@ public Builder mergeReplicaSelection( } return this; } + /** * * @@ -3966,6 +4624,7 @@ public Builder clearReplicaSelection() { onChanged(); return this; } + /** * * @@ -3982,8 +4641,9 @@ public Builder clearReplicaSelection() { getReplicaSelectionBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getReplicaSelectionFieldBuilder().getBuilder(); + return internalGetReplicaSelectionFieldBuilder().getBuilder(); } + /** * * @@ -4006,6 +4666,7 @@ public Builder clearReplicaSelection() { : replicaSelection_; } } + /** * * @@ -4018,14 +4679,14 @@ public Builder clearReplicaSelection() { * .google.spanner.admin.instance.v1.ReplicaSelection replica_selection = 1 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaSelection, com.google.spanner.admin.instance.v1.ReplicaSelection.Builder, com.google.spanner.admin.instance.v1.ReplicaSelectionOrBuilder> - getReplicaSelectionFieldBuilder() { + internalGetReplicaSelectionFieldBuilder() { if (replicaSelectionBuilder_ == null) { replicaSelectionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaSelection, com.google.spanner.admin.instance.v1.ReplicaSelection.Builder, com.google.spanner.admin.instance.v1.ReplicaSelectionOrBuilder>( @@ -4038,7 +4699,7 @@ public Builder clearReplicaSelection() { private com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverrides overrides_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverrides, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption @@ -4046,6 +4707,7 @@ public Builder clearReplicaSelection() { com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverridesOrBuilder> overridesBuilder_; + /** * * @@ -4063,6 +4725,7 @@ public Builder clearReplicaSelection() { public boolean hasOverrides() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -4089,6 +4752,7 @@ public boolean hasOverrides() { return overridesBuilder_.getMessage(); } } + /** * * @@ -4117,6 +4781,7 @@ public Builder setOverrides( onChanged(); return this; } + /** * * @@ -4142,6 +4807,7 @@ public Builder setOverrides( onChanged(); return this; } + /** * * @@ -4178,6 +4844,7 @@ public Builder mergeOverrides( } return this; } + /** * * @@ -4200,6 +4867,7 @@ public Builder clearOverrides() { onChanged(); return this; } + /** * * @@ -4217,8 +4885,9 @@ public Builder clearOverrides() { getOverridesBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getOverridesFieldBuilder().getBuilder(); + return internalGetOverridesFieldBuilder().getBuilder(); } + /** * * @@ -4243,6 +4912,7 @@ public Builder clearOverrides() { : overrides_; } } + /** * * @@ -4255,17 +4925,17 @@ public Builder clearOverrides() { * .google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides overrides = 2 [(.google.api.field_behavior) = OPTIONAL]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverrides, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverrides.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverridesOrBuilder> - getOverridesFieldBuilder() { + internalGetOverridesFieldBuilder() { if (overridesBuilder_ == null) { overridesBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .AutoscalingConfigOverrides, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption @@ -4278,18 +4948,6 @@ public Builder clearOverrides() { return overridesBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption) } @@ -4351,6 +5009,7 @@ public com.google.protobuf.Parser getParserForType( public static final int AUTOSCALING_LIMITS_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscalingLimits_; + /** * * @@ -4368,6 +5027,7 @@ public com.google.protobuf.Parser getParserForType( public boolean hasAutoscalingLimits() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -4389,6 +5049,7 @@ public boolean hasAutoscalingLimits() { .getDefaultInstance() : autoscalingLimits_; } + /** * * @@ -4412,6 +5073,7 @@ public boolean hasAutoscalingLimits() { public static final int AUTOSCALING_TARGETS_FIELD_NUMBER = 2; private com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets autoscalingTargets_; + /** * * @@ -4429,6 +5091,7 @@ public boolean hasAutoscalingLimits() { public boolean hasAutoscalingTargets() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -4450,6 +5113,7 @@ public boolean hasAutoscalingTargets() { .getDefaultInstance() : autoscalingTargets_; } + /** * * @@ -4476,6 +5140,7 @@ public boolean hasAutoscalingTargets() { private java.util.List< com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption> asymmetricAutoscalingOptions_; + /** * * @@ -4501,6 +5166,7 @@ public boolean hasAutoscalingTargets() { getAsymmetricAutoscalingOptionsList() { return asymmetricAutoscalingOptions_; } + /** * * @@ -4528,6 +5194,7 @@ public boolean hasAutoscalingTargets() { getAsymmetricAutoscalingOptionsOrBuilderList() { return asymmetricAutoscalingOptions_; } + /** * * @@ -4551,6 +5218,7 @@ public boolean hasAutoscalingTargets() { public int getAsymmetricAutoscalingOptionsCount() { return asymmetricAutoscalingOptions_.size(); } + /** * * @@ -4575,6 +5243,7 @@ public int getAsymmetricAutoscalingOptionsCount() { getAsymmetricAutoscalingOptions(int index) { return asymmetricAutoscalingOptions_.get(index); } + /** * * @@ -4734,38 +5403,38 @@ public static com.google.spanner.admin.instance.v1.AutoscalingConfig parseFrom( public static com.google.spanner.admin.instance.v1.AutoscalingConfig parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.AutoscalingConfig parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -4789,10 +5458,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -4802,7 +5472,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.AutoscalingConfig} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.AutoscalingConfig) com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder { @@ -4812,7 +5482,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_fieldAccessorTable @@ -4826,16 +5496,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getAutoscalingLimitsFieldBuilder(); - getAutoscalingTargetsFieldBuilder(); - getAsymmetricAutoscalingOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetAutoscalingLimitsFieldBuilder(); + internalGetAutoscalingTargetsFieldBuilder(); + internalGetAsymmetricAutoscalingOptionsFieldBuilder(); } } @@ -4929,39 +5599,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.AutoscalingConfi result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.AutoscalingConfig) { @@ -5000,8 +5637,8 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.AutoscalingConfig asymmetricAutoscalingOptions_ = other.asymmetricAutoscalingOptions_; bitField0_ = (bitField0_ & ~0x00000004); asymmetricAutoscalingOptionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getAsymmetricAutoscalingOptionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetAsymmetricAutoscalingOptionsFieldBuilder() : null; } else { asymmetricAutoscalingOptionsBuilder_.addAllMessages( @@ -5038,14 +5675,14 @@ public Builder mergeFrom( case 10: { input.readMessage( - getAutoscalingLimitsFieldBuilder().getBuilder(), extensionRegistry); + internalGetAutoscalingLimitsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { input.readMessage( - getAutoscalingTargetsFieldBuilder().getBuilder(), extensionRegistry); + internalGetAutoscalingTargetsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -5086,11 +5723,12 @@ public Builder mergeFrom( private com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscalingLimits_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder> autoscalingLimitsBuilder_; + /** * * @@ -5107,6 +5745,7 @@ public Builder mergeFrom( public boolean hasAutoscalingLimits() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -5131,6 +5770,7 @@ public boolean hasAutoscalingLimits() { return autoscalingLimitsBuilder_.getMessage(); } } + /** * * @@ -5156,6 +5796,7 @@ public Builder setAutoscalingLimits( onChanged(); return this; } + /** * * @@ -5179,6 +5820,7 @@ public Builder setAutoscalingLimits( onChanged(); return this; } + /** * * @@ -5211,6 +5853,7 @@ public Builder mergeAutoscalingLimits( } return this; } + /** * * @@ -5232,6 +5875,7 @@ public Builder clearAutoscalingLimits() { onChanged(); return this; } + /** * * @@ -5247,8 +5891,9 @@ public Builder clearAutoscalingLimits() { getAutoscalingLimitsBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getAutoscalingLimitsFieldBuilder().getBuilder(); + return internalGetAutoscalingLimitsFieldBuilder().getBuilder(); } + /** * * @@ -5271,6 +5916,7 @@ public Builder clearAutoscalingLimits() { : autoscalingLimits_; } } + /** * * @@ -5282,14 +5928,14 @@ public Builder clearAutoscalingLimits() { * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits autoscaling_limits = 1 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder> - getAutoscalingLimitsFieldBuilder() { + internalGetAutoscalingLimitsFieldBuilder() { if (autoscalingLimitsBuilder_ == null) { autoscalingLimitsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimitsOrBuilder>( @@ -5301,11 +5947,12 @@ public Builder clearAutoscalingLimits() { private com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets autoscalingTargets_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargetsOrBuilder> autoscalingTargetsBuilder_; + /** * * @@ -5322,6 +5969,7 @@ public Builder clearAutoscalingLimits() { public boolean hasAutoscalingTargets() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -5346,6 +5994,7 @@ public boolean hasAutoscalingTargets() { return autoscalingTargetsBuilder_.getMessage(); } } + /** * * @@ -5371,6 +6020,7 @@ public Builder setAutoscalingTargets( onChanged(); return this; } + /** * * @@ -5394,6 +6044,7 @@ public Builder setAutoscalingTargets( onChanged(); return this; } + /** * * @@ -5426,6 +6077,7 @@ public Builder mergeAutoscalingTargets( } return this; } + /** * * @@ -5447,6 +6099,7 @@ public Builder clearAutoscalingTargets() { onChanged(); return this; } + /** * * @@ -5462,8 +6115,9 @@ public Builder clearAutoscalingTargets() { getAutoscalingTargetsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getAutoscalingTargetsFieldBuilder().getBuilder(); + return internalGetAutoscalingTargetsFieldBuilder().getBuilder(); } + /** * * @@ -5486,6 +6140,7 @@ public Builder clearAutoscalingTargets() { : autoscalingTargets_; } } + /** * * @@ -5497,14 +6152,14 @@ public Builder clearAutoscalingTargets() { * .google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets autoscaling_targets = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargetsOrBuilder> - getAutoscalingTargetsFieldBuilder() { + internalGetAutoscalingTargetsFieldBuilder() { if (autoscalingTargetsBuilder_ == null) { autoscalingTargetsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargetsOrBuilder>( @@ -5528,7 +6183,7 @@ private void ensureAsymmetricAutoscalingOptionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .Builder, @@ -5564,6 +6219,7 @@ private void ensureAsymmetricAutoscalingOptionsIsMutable() { return asymmetricAutoscalingOptionsBuilder_.getMessageList(); } } + /** * * @@ -5590,6 +6246,7 @@ public int getAsymmetricAutoscalingOptionsCount() { return asymmetricAutoscalingOptionsBuilder_.getCount(); } } + /** * * @@ -5617,6 +6274,7 @@ public int getAsymmetricAutoscalingOptionsCount() { return asymmetricAutoscalingOptionsBuilder_.getMessage(index); } } + /** * * @@ -5651,6 +6309,7 @@ public Builder setAsymmetricAutoscalingOptions( } return this; } + /** * * @@ -5683,6 +6342,7 @@ public Builder setAsymmetricAutoscalingOptions( } return this; } + /** * * @@ -5716,6 +6376,7 @@ public Builder addAsymmetricAutoscalingOptions( } return this; } + /** * * @@ -5750,6 +6411,7 @@ public Builder addAsymmetricAutoscalingOptions( } return this; } + /** * * @@ -5781,6 +6443,7 @@ public Builder addAsymmetricAutoscalingOptions( } return this; } + /** * * @@ -5813,6 +6476,7 @@ public Builder addAsymmetricAutoscalingOptions( } return this; } + /** * * @@ -5848,6 +6512,7 @@ public Builder addAllAsymmetricAutoscalingOptions( } return this; } + /** * * @@ -5877,6 +6542,7 @@ public Builder clearAsymmetricAutoscalingOptions() { } return this; } + /** * * @@ -5906,6 +6572,7 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { } return this; } + /** * * @@ -5928,8 +6595,9 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { public com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .Builder getAsymmetricAutoscalingOptionsBuilder(int index) { - return getAsymmetricAutoscalingOptionsFieldBuilder().getBuilder(index); + return internalGetAsymmetricAutoscalingOptionsFieldBuilder().getBuilder(index); } + /** * * @@ -5958,6 +6626,7 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { return asymmetricAutoscalingOptionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -5988,6 +6657,7 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { return java.util.Collections.unmodifiableList(asymmetricAutoscalingOptions_); } } + /** * * @@ -6010,11 +6680,12 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { public com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .Builder addAsymmetricAutoscalingOptionsBuilder() { - return getAsymmetricAutoscalingOptionsFieldBuilder() + return internalGetAsymmetricAutoscalingOptionsFieldBuilder() .addBuilder( com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .getDefaultInstance()); } + /** * * @@ -6037,12 +6708,13 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { public com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .Builder addAsymmetricAutoscalingOptionsBuilder(int index) { - return getAsymmetricAutoscalingOptionsFieldBuilder() + return internalGetAsymmetricAutoscalingOptionsFieldBuilder() .addBuilder( index, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .getDefaultInstance()); } + /** * * @@ -6066,19 +6738,19 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .Builder> getAsymmetricAutoscalingOptionsBuilderList() { - return getAsymmetricAutoscalingOptionsFieldBuilder().getBuilderList(); + return internalGetAsymmetricAutoscalingOptionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .Builder, com.google.spanner.admin.instance.v1.AutoscalingConfig .AsymmetricAutoscalingOptionOrBuilder> - getAsymmetricAutoscalingOptionsFieldBuilder() { + internalGetAsymmetricAutoscalingOptionsFieldBuilder() { if (asymmetricAutoscalingOptionsBuilder_ == null) { asymmetricAutoscalingOptionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption, com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption .Builder, @@ -6093,17 +6765,6 @@ public Builder removeAsymmetricAutoscalingOptions(int index) { return asymmetricAutoscalingOptionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.AutoscalingConfig) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java index 9e9a6222286..64c4f60dc52 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface AutoscalingConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.AutoscalingConfig) @@ -38,6 +40,7 @@ public interface AutoscalingConfigOrBuilder * @return Whether the autoscalingLimits field is set. */ boolean hasAutoscalingLimits(); + /** * * @@ -52,6 +55,7 @@ public interface AutoscalingConfigOrBuilder * @return The autoscalingLimits. */ com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits getAutoscalingLimits(); + /** * * @@ -80,6 +84,7 @@ public interface AutoscalingConfigOrBuilder * @return Whether the autoscalingTargets field is set. */ boolean hasAutoscalingTargets(); + /** * * @@ -94,6 +99,7 @@ public interface AutoscalingConfigOrBuilder * @return The autoscalingTargets. */ com.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets getAutoscalingTargets(); + /** * * @@ -129,6 +135,7 @@ public interface AutoscalingConfigOrBuilder */ java.util.List getAsymmetricAutoscalingOptionsList(); + /** * * @@ -150,6 +157,7 @@ public interface AutoscalingConfigOrBuilder */ com.google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption getAsymmetricAutoscalingOptions(int index); + /** * * @@ -170,6 +178,7 @@ public interface AutoscalingConfigOrBuilder * */ int getAsymmetricAutoscalingOptionsCount(); + /** * * @@ -194,6 +203,7 @@ public interface AutoscalingConfigOrBuilder com.google.spanner.admin.instance.v1.AutoscalingConfig .AsymmetricAutoscalingOptionOrBuilder> getAsymmetricAutoscalingOptionsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java index a589f16c104..69f300942ee 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; -public final class CommonProto { +@com.google.protobuf.Generated +public final class CommonProto extends com.google.protobuf.GeneratedFile { private CommonProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CommonProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,11 +42,11 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_OperationProgress_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_OperationProgress_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ReplicaSelection_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ReplicaSelection_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -47,53 +59,57 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { java.lang.String[] descriptorData = { "\n-google/spanner/admin/instance/v1/commo" + "n.proto\022 google.spanner.admin.instance.v" - + "1\032\037google/api/field_behavior.proto\032\037goog" - + "le/protobuf/timestamp.proto\"\213\001\n\021Operatio" - + "nProgress\022\030\n\020progress_percent\030\001 \001(\005\022.\n\ns" - + "tart_time\030\002 \001(\0132\032.google.protobuf.Timest" - + "amp\022,\n\010end_time\030\003 \001(\0132\032.google.protobuf." - + "Timestamp\")\n\020ReplicaSelection\022\025\n\010locatio" - + "n\030\001 \001(\tB\003\340A\002*w\n\021FulfillmentPeriod\022\"\n\036FUL" - + "FILLMENT_PERIOD_UNSPECIFIED\020\000\022\035\n\031FULFILL" - + "MENT_PERIOD_NORMAL\020\001\022\037\n\033FULFILLMENT_PERI" - + "OD_EXTENDED\020\002B\375\001\n$com.google.spanner.adm" - + "in.instance.v1B\013CommonProtoP\001ZFcloud.goo" - + "gle.com/go/spanner/admin/instance/apiv1/" - + "instancepb;instancepb\252\002&Google.Cloud.Spa" - + "nner.Admin.Instance.V1\312\002&Google\\Cloud\\Sp" - + "anner\\Admin\\Instance\\V1\352\002+Google::Cloud:" - + ":Spanner::Admin::Instance::V1b\006proto3" + + "1\032\037google/api/field_behavior.proto\032\031goog" + + "le/api/resource.proto\032\037google/protobuf/t" + + "imestamp.proto\"\213\001\n\021OperationProgress\022\030\n\020" + + "progress_percent\030\001 \001(\005\022.\n\nstart_time\030\002 \001" + + "(\0132\032.google.protobuf.Timestamp\022,\n\010end_ti" + + "me\030\003 \001(\0132\032.google.protobuf.Timestamp\")\n\020" + + "ReplicaSelection\022\025\n\010location\030\001 \001(\tB\003\340A\002*" + + "w\n\021FulfillmentPeriod\022\"\n\036FULFILLMENT_PERI" + + "OD_UNSPECIFIED\020\000\022\035\n\031FULFILLMENT_PERIOD_N" + + "ORMAL\020\001\022\037\n\033FULFILLMENT_PERIOD_EXTENDED\020\002" + + "B\375\001\n$com.google.spanner.admin.instance.v" + + "1B\013CommonProtoP\001ZFcloud.google.com/go/sp" + + "anner/admin/instance/apiv1/instancepb;in" + + "stancepb\252\002&Google.Cloud.Spanner.Admin.In" + + "stance.V1\312\002&Google\\Cloud\\Spanner\\Admin\\I" + + "nstance\\V1\352\002+Google::Cloud::Spanner::Adm" + + "in::Instance::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.api.FieldBehaviorProto.getDescriptor(), + com.google.api.ResourceProto.getDescriptor(), com.google.protobuf.TimestampProto.getDescriptor(), }); internal_static_google_spanner_admin_instance_v1_OperationProgress_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_admin_instance_v1_OperationProgress_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_OperationProgress_descriptor, new java.lang.String[] { "ProgressPercent", "StartTime", "EndTime", }); internal_static_google_spanner_admin_instance_v1_ReplicaSelection_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_admin_instance_v1_ReplicaSelection_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ReplicaSelection_descriptor, new java.lang.String[] { "Location", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.api.ResourceProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.FieldBehaviorProto.getDescriptor(); - com.google.protobuf.TimestampProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java index 938fef5304c..c5be9e5a412 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceConfigMetadata} */ -public final class CreateInstanceConfigMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateInstanceConfigMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) CreateInstanceConfigMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateInstanceConfigMetadata"); + } + // Use CreateInstanceConfigMetadata.newBuilder() to construct. - private CreateInstanceConfigMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateInstanceConfigMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private CreateInstanceConfigMetadata() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateInstanceConfigMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_CONFIG_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; + /** * * @@ -80,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -97,6 +106,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { ? com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance() : instanceConfig_; } + /** * * @@ -115,6 +125,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC public static final int PROGRESS_FIELD_NUMBER = 2; private com.google.spanner.admin.instance.v1.OperationProgress progress_; + /** * * @@ -132,6 +143,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -151,6 +163,7 @@ public com.google.spanner.admin.instance.v1.OperationProgress getProgress() { ? com.google.spanner.admin.instance.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -171,6 +184,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -186,6 +200,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -201,6 +216,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -349,39 +365,39 @@ public static com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata public static com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -405,10 +421,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -419,7 +436,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceConfigMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadataOrBuilder { @@ -429,7 +446,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_fieldAccessorTable @@ -444,16 +461,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceConfigFieldBuilder(); - getProgressFieldBuilder(); - getCancelTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceConfigFieldBuilder(); + internalGetProgressFieldBuilder(); + internalGetCancelTimeFieldBuilder(); } } @@ -531,39 +548,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) { @@ -616,19 +600,22 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -652,11 +639,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> instanceConfigBuilder_; + /** * * @@ -671,6 +659,7 @@ public Builder mergeFrom( public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -691,6 +680,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { return instanceConfigBuilder_.getMessage(); } } + /** * * @@ -713,6 +703,7 @@ public Builder setInstanceConfig(com.google.spanner.admin.instance.v1.InstanceCo onChanged(); return this; } + /** * * @@ -733,6 +724,7 @@ public Builder setInstanceConfig( onChanged(); return this; } + /** * * @@ -761,6 +753,7 @@ public Builder mergeInstanceConfig(com.google.spanner.admin.instance.v1.Instance } return this; } + /** * * @@ -780,6 +773,7 @@ public Builder clearInstanceConfig() { onChanged(); return this; } + /** * * @@ -792,8 +786,9 @@ public Builder clearInstanceConfig() { public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceConfigBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstanceConfigFieldBuilder().getBuilder(); + return internalGetInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -813,6 +808,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo : instanceConfig_; } } + /** * * @@ -822,14 +818,14 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo * * .google.spanner.admin.instance.v1.InstanceConfig instance_config = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> - getInstanceConfigFieldBuilder() { + internalGetInstanceConfigFieldBuilder() { if (instanceConfigBuilder_ == null) { instanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder>( @@ -840,11 +836,12 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo } private com.google.spanner.admin.instance.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -861,6 +858,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -883,6 +881,7 @@ public com.google.spanner.admin.instance.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -907,6 +906,7 @@ public Builder setProgress(com.google.spanner.admin.instance.v1.OperationProgres onChanged(); return this; } + /** * * @@ -929,6 +929,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -959,6 +960,7 @@ public Builder mergeProgress(com.google.spanner.admin.instance.v1.OperationProgr } return this; } + /** * * @@ -980,6 +982,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -994,8 +997,9 @@ public Builder clearProgress() { public com.google.spanner.admin.instance.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -1016,6 +1020,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -1027,14 +1032,14 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.instance.v1.OperationProgress progress = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder>( @@ -1045,11 +1050,12 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1064,6 +1070,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1084,6 +1091,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1106,6 +1114,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1125,6 +1134,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1152,6 +1162,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1171,6 +1182,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1183,8 +1195,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1203,6 +1216,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1212,14 +1226,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1229,17 +1243,6 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { return cancelTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java index 684e4c7aba0..fb321d38dce 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface CreateInstanceConfigMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) @@ -36,6 +38,7 @@ public interface CreateInstanceConfigMetadataOrBuilder * @return Whether the instanceConfig field is set. */ boolean hasInstanceConfig(); + /** * * @@ -48,6 +51,7 @@ public interface CreateInstanceConfigMetadataOrBuilder * @return The instanceConfig. */ com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig(); + /** * * @@ -73,6 +77,7 @@ public interface CreateInstanceConfigMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -87,6 +92,7 @@ public interface CreateInstanceConfigMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.instance.v1.OperationProgress getProgress(); + /** * * @@ -112,6 +118,7 @@ public interface CreateInstanceConfigMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -124,6 +131,7 @@ public interface CreateInstanceConfigMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java index 72a0f24207f..c72ee75224b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -24,18 +25,30 @@ * *
                                  * The request for
                                - * [CreateInstanceConfigRequest][InstanceAdmin.CreateInstanceConfigRequest].
                                + * [CreateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstanceConfig].
                                  * 
                                * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceConfigRequest} */ -public final class CreateInstanceConfigRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateInstanceConfigRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.CreateInstanceConfigRequest) CreateInstanceConfigRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateInstanceConfigRequest"); + } + // Use CreateInstanceConfigRequest.newBuilder() to construct. - private CreateInstanceConfigRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateInstanceConfigRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CreateInstanceConfigRequest() { instanceConfigId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateInstanceConfigRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -127,6 +136,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceConfigId_ = ""; + /** * * @@ -153,6 +163,7 @@ public java.lang.String getInstanceConfigId() { return s; } } + /** * * @@ -182,14 +193,15 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { public static final int INSTANCE_CONFIG_FIELD_NUMBER = 3; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; + /** * * *
                                -   * Required. The InstanceConfig proto of the configuration to create.
                                -   * instance_config.name must be
                                +   * Required. The `InstanceConfig` proto of the configuration to create.
                                +   * `instance_config.name` must be
                                    * `<parent>/instanceConfigs/<instance_config_id>`.
                                -   * instance_config.base_config must be a Google managed configuration name,
                                +   * `instance_config.base_config` must be a Google-managed configuration name,
                                    * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                    * 
                                * @@ -203,14 +215,15 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -   * Required. The InstanceConfig proto of the configuration to create.
                                -   * instance_config.name must be
                                +   * Required. The `InstanceConfig` proto of the configuration to create.
                                +   * `instance_config.name` must be
                                    * `<parent>/instanceConfigs/<instance_config_id>`.
                                -   * instance_config.base_config must be a Google managed configuration name,
                                +   * `instance_config.base_config` must be a Google-managed configuration name,
                                    * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                    * 
                                * @@ -226,14 +239,15 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { ? com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance() : instanceConfig_; } + /** * * *
                                -   * Required. The InstanceConfig proto of the configuration to create.
                                -   * instance_config.name must be
                                +   * Required. The `InstanceConfig` proto of the configuration to create.
                                +   * `instance_config.name` must be
                                    * `<parent>/instanceConfigs/<instance_config_id>`.
                                -   * instance_config.base_config must be a Google managed configuration name,
                                +   * `instance_config.base_config` must be a Google-managed configuration name,
                                    * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                    * 
                                * @@ -250,6 +264,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC public static final int VALIDATE_ONLY_FIELD_NUMBER = 4; private boolean validateOnly_ = false; + /** * * @@ -281,11 +296,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceConfigId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceConfigId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceConfigId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getInstanceConfig()); @@ -302,11 +317,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceConfigId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceConfigId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceConfigId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getInstanceConfig()); @@ -400,38 +415,38 @@ public static com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest p public static com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -455,21 +470,22 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                    * The request for
                                -   * [CreateInstanceConfigRequest][InstanceAdmin.CreateInstanceConfigRequest].
                                +   * [CreateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstanceConfig].
                                    * 
                                * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceConfigRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.CreateInstanceConfigRequest) com.google.spanner.admin.instance.v1.CreateInstanceConfigRequestOrBuilder { @@ -479,7 +495,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_fieldAccessorTable @@ -493,14 +509,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceConfigFieldBuilder(); } } @@ -572,39 +588,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest) { @@ -676,7 +659,8 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -706,6 +690,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -731,6 +716,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -756,6 +742,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -780,6 +767,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -800,6 +788,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -827,6 +816,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceConfigId_ = ""; + /** * * @@ -852,6 +842,7 @@ public java.lang.String getInstanceConfigId() { return (java.lang.String) ref; } } + /** * * @@ -877,6 +868,7 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -901,6 +893,7 @@ public Builder setInstanceConfigId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -921,6 +914,7 @@ public Builder clearInstanceConfigId() { onChanged(); return this; } + /** * * @@ -948,19 +942,20 @@ public Builder setInstanceConfigIdBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> instanceConfigBuilder_; + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -973,14 +968,15 @@ public Builder setInstanceConfigIdBytes(com.google.protobuf.ByteString value) { public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -999,14 +995,15 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { return instanceConfigBuilder_.getMessage(); } } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -1027,14 +1024,15 @@ public Builder setInstanceConfig(com.google.spanner.admin.instance.v1.InstanceCo onChanged(); return this; } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -1053,14 +1051,15 @@ public Builder setInstanceConfig( onChanged(); return this; } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -1087,14 +1086,15 @@ public Builder mergeInstanceConfig(com.google.spanner.admin.instance.v1.Instance } return this; } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -1112,14 +1112,15 @@ public Builder clearInstanceConfig() { onChanged(); return this; } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -1130,16 +1131,17 @@ public Builder clearInstanceConfig() { public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceConfigBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getInstanceConfigFieldBuilder().getBuilder(); + return internalGetInstanceConfigFieldBuilder().getBuilder(); } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -1157,14 +1159,15 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo : instanceConfig_; } } + /** * * *
                                -     * Required. The InstanceConfig proto of the configuration to create.
                                -     * instance_config.name must be
                                +     * Required. The `InstanceConfig` proto of the configuration to create.
                                +     * `instance_config.name` must be
                                      * `<parent>/instanceConfigs/<instance_config_id>`.
                                -     * instance_config.base_config must be a Google managed configuration name,
                                +     * `instance_config.base_config` must be a Google-managed configuration name,
                                      * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                      * 
                                * @@ -1172,14 +1175,14 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo * .google.spanner.admin.instance.v1.InstanceConfig instance_config = 3 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> - getInstanceConfigFieldBuilder() { + internalGetInstanceConfigFieldBuilder() { if (instanceConfigBuilder_ == null) { instanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder>( @@ -1190,6 +1193,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo } private boolean validateOnly_; + /** * * @@ -1206,6 +1210,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo public boolean getValidateOnly() { return validateOnly_; } + /** * * @@ -1226,6 +1231,7 @@ public Builder setValidateOnly(boolean value) { onChanged(); return this; } + /** * * @@ -1245,17 +1251,6 @@ public Builder clearValidateOnly() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.CreateInstanceConfigRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java index 60e1ef481e4..d1d76367eb6 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface CreateInstanceConfigRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.CreateInstanceConfigRequest) @@ -39,6 +41,7 @@ public interface CreateInstanceConfigRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -70,6 +73,7 @@ public interface CreateInstanceConfigRequestOrBuilder * @return The instanceConfigId. */ java.lang.String getInstanceConfigId(); + /** * * @@ -90,10 +94,10 @@ public interface CreateInstanceConfigRequestOrBuilder * * *
                                -   * Required. The InstanceConfig proto of the configuration to create.
                                -   * instance_config.name must be
                                +   * Required. The `InstanceConfig` proto of the configuration to create.
                                +   * `instance_config.name` must be
                                    * `<parent>/instanceConfigs/<instance_config_id>`.
                                -   * instance_config.base_config must be a Google managed configuration name,
                                +   * `instance_config.base_config` must be a Google-managed configuration name,
                                    * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                    * 
                                * @@ -104,14 +108,15 @@ public interface CreateInstanceConfigRequestOrBuilder * @return Whether the instanceConfig field is set. */ boolean hasInstanceConfig(); + /** * * *
                                -   * Required. The InstanceConfig proto of the configuration to create.
                                -   * instance_config.name must be
                                +   * Required. The `InstanceConfig` proto of the configuration to create.
                                +   * `instance_config.name` must be
                                    * `<parent>/instanceConfigs/<instance_config_id>`.
                                -   * instance_config.base_config must be a Google managed configuration name,
                                +   * `instance_config.base_config` must be a Google-managed configuration name,
                                    * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                    * 
                                * @@ -122,14 +127,15 @@ public interface CreateInstanceConfigRequestOrBuilder * @return The instanceConfig. */ com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig(); + /** * * *
                                -   * Required. The InstanceConfig proto of the configuration to create.
                                -   * instance_config.name must be
                                +   * Required. The `InstanceConfig` proto of the configuration to create.
                                +   * `instance_config.name` must be
                                    * `<parent>/instanceConfigs/<instance_config_id>`.
                                -   * instance_config.base_config must be a Google managed configuration name,
                                +   * `instance_config.base_config` must be a Google-managed configuration name,
                                    * e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
                                    * 
                                * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java index cafc5e39776..e19a002881a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceMetadata} */ -public final class CreateInstanceMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateInstanceMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.CreateInstanceMetadata) CreateInstanceMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateInstanceMetadata"); + } + // Use CreateInstanceMetadata.newBuilder() to construct. - private CreateInstanceMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateInstanceMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private CreateInstanceMetadata() { expectedFulfillmentPeriod_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateInstanceMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.Instance instance_; + /** * * @@ -82,6 +90,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -99,6 +108,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { ? com.google.spanner.admin.instance.v1.Instance.getDefaultInstance() : instance_; } + /** * * @@ -117,6 +127,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public static final int START_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -134,6 +145,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -151,6 +163,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -169,6 +182,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -186,6 +200,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -203,6 +218,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -221,6 +237,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -236,6 +253,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -251,6 +269,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -267,6 +286,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public static final int EXPECTED_FULFILLMENT_PERIOD_FIELD_NUMBER = 5; private int expectedFulfillmentPeriod_ = 0; + /** * * @@ -283,6 +303,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public int getExpectedFulfillmentPeriodValue() { return expectedFulfillmentPeriod_; } + /** * * @@ -466,38 +487,38 @@ public static com.google.spanner.admin.instance.v1.CreateInstanceMetadata parseF public static com.google.spanner.admin.instance.v1.CreateInstanceMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -521,10 +542,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -535,7 +557,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.CreateInstanceMetadata) com.google.spanner.admin.instance.v1.CreateInstanceMetadataOrBuilder { @@ -545,7 +567,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_fieldAccessorTable @@ -559,17 +581,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceFieldBuilder(); - getStartTimeFieldBuilder(); - getCancelTimeFieldBuilder(); - getEndTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceFieldBuilder(); + internalGetStartTimeFieldBuilder(); + internalGetCancelTimeFieldBuilder(); + internalGetEndTimeFieldBuilder(); } } @@ -657,39 +679,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.CreateInstanceMe result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.CreateInstanceMetadata) { @@ -746,25 +735,28 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getInstanceFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -794,11 +786,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.Instance instance_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> instanceBuilder_; + /** * * @@ -813,6 +806,7 @@ public Builder mergeFrom( public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -833,6 +827,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { return instanceBuilder_.getMessage(); } } + /** * * @@ -855,6 +850,7 @@ public Builder setInstance(com.google.spanner.admin.instance.v1.Instance value) onChanged(); return this; } + /** * * @@ -875,6 +871,7 @@ public Builder setInstance( onChanged(); return this; } + /** * * @@ -902,6 +899,7 @@ public Builder mergeInstance(com.google.spanner.admin.instance.v1.Instance value } return this; } + /** * * @@ -921,6 +919,7 @@ public Builder clearInstance() { onChanged(); return this; } + /** * * @@ -933,8 +932,9 @@ public Builder clearInstance() { public com.google.spanner.admin.instance.v1.Instance.Builder getInstanceBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstanceFieldBuilder().getBuilder(); + return internalGetInstanceFieldBuilder().getBuilder(); } + /** * * @@ -953,6 +953,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild : instance_; } } + /** * * @@ -962,14 +963,14 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild * * .google.spanner.admin.instance.v1.Instance instance = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> - getInstanceFieldBuilder() { + internalGetInstanceFieldBuilder() { if (instanceBuilder_ == null) { instanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder>( @@ -980,11 +981,12 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild } private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -1001,6 +1003,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1021,6 +1024,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -1045,6 +1049,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1066,6 +1071,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -1095,6 +1101,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1116,6 +1123,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -1130,8 +1138,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -1150,6 +1159,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -1161,14 +1171,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1179,11 +1189,12 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1200,6 +1211,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1222,6 +1234,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1246,6 +1259,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1267,6 +1281,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1296,6 +1311,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1317,6 +1333,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1331,8 +1348,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1353,6 +1371,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1364,14 +1383,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1382,11 +1401,12 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { } private com.google.protobuf.Timestamp endTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -1401,6 +1421,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1419,6 +1440,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -1441,6 +1463,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1460,6 +1483,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1487,6 +1511,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1506,6 +1531,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -1518,8 +1544,9 @@ public Builder clearEndTime() { public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEndTimeFieldBuilder().getBuilder(); + return internalGetEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -1536,6 +1563,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1545,14 +1573,14 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { * * .google.protobuf.Timestamp end_time = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEndTimeFieldBuilder() { + internalGetEndTimeFieldBuilder() { if (endTimeBuilder_ == null) { endTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1563,6 +1591,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { } private int expectedFulfillmentPeriod_ = 0; + /** * * @@ -1579,6 +1608,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public int getExpectedFulfillmentPeriodValue() { return expectedFulfillmentPeriod_; } + /** * * @@ -1598,6 +1628,7 @@ public Builder setExpectedFulfillmentPeriodValue(int value) { onChanged(); return this; } + /** * * @@ -1619,6 +1650,7 @@ public com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfill ? com.google.spanner.admin.instance.v1.FulfillmentPeriod.UNRECOGNIZED : result; } + /** * * @@ -1642,6 +1674,7 @@ public Builder setExpectedFulfillmentPeriod( onChanged(); return this; } + /** * * @@ -1661,17 +1694,6 @@ public Builder clearExpectedFulfillmentPeriod() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.CreateInstanceMetadata) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java index e6289c75459..75f88e14f58 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface CreateInstanceMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.CreateInstanceMetadata) @@ -36,6 +38,7 @@ public interface CreateInstanceMetadataOrBuilder * @return Whether the instance field is set. */ boolean hasInstance(); + /** * * @@ -48,6 +51,7 @@ public interface CreateInstanceMetadataOrBuilder * @return The instance. */ com.google.spanner.admin.instance.v1.Instance getInstance(); + /** * * @@ -73,6 +77,7 @@ public interface CreateInstanceMetadataOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -87,6 +92,7 @@ public interface CreateInstanceMetadataOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -114,6 +120,7 @@ public interface CreateInstanceMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -128,6 +135,7 @@ public interface CreateInstanceMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * @@ -153,6 +161,7 @@ public interface CreateInstanceMetadataOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -165,6 +174,7 @@ public interface CreateInstanceMetadataOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * @@ -189,6 +199,7 @@ public interface CreateInstanceMetadataOrBuilder * @return The enum numeric value on the wire for expectedFulfillmentPeriod. */ int getExpectedFulfillmentPeriodValue(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java index 80b065a3675..bca09ef8939 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,32 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstancePartitionMetadata} */ -public final class CreateInstancePartitionMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateInstancePartitionMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) CreateInstancePartitionMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateInstancePartitionMetadata"); + } + // Use CreateInstancePartitionMetadata.newBuilder() to construct. - private CreateInstancePartitionMetadata( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateInstancePartitionMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private CreateInstancePartitionMetadata() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateInstancePartitionMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_fieldAccessorTable @@ -66,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_PARTITION_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; + /** * * @@ -81,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstancePartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +106,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti ? com.google.spanner.admin.instance.v1.InstancePartition.getDefaultInstance() : instancePartition_; } + /** * * @@ -117,6 +126,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti public static final int START_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -134,6 +144,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -151,6 +162,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -169,6 +181,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -186,6 +199,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -203,6 +217,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -221,6 +236,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -236,6 +252,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -251,6 +268,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -413,39 +431,39 @@ public static com.google.spanner.admin.instance.v1.CreateInstancePartitionMetada public static com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadata parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -469,10 +487,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -483,7 +502,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstancePartitionMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadataOrBuilder { @@ -493,7 +512,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_fieldAccessorTable @@ -508,17 +527,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstancePartitionFieldBuilder(); - getStartTimeFieldBuilder(); - getCancelTimeFieldBuilder(); - getEndTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstancePartitionFieldBuilder(); + internalGetStartTimeFieldBuilder(); + internalGetCancelTimeFieldBuilder(); + internalGetEndTimeFieldBuilder(); } } @@ -608,39 +627,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) { @@ -698,25 +684,27 @@ public Builder mergeFrom( case 10: { input.readMessage( - getInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -740,11 +728,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> instancePartitionBuilder_; + /** * * @@ -759,6 +748,7 @@ public Builder mergeFrom( public boolean hasInstancePartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -779,6 +769,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti return instancePartitionBuilder_.getMessage(); } } + /** * * @@ -802,6 +793,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -822,6 +814,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -851,6 +844,7 @@ public Builder mergeInstancePartition( } return this; } + /** * * @@ -870,6 +864,7 @@ public Builder clearInstancePartition() { onChanged(); return this; } + /** * * @@ -883,8 +878,9 @@ public Builder clearInstancePartition() { getInstancePartitionBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstancePartitionFieldBuilder().getBuilder(); + return internalGetInstancePartitionFieldBuilder().getBuilder(); } + /** * * @@ -904,6 +900,7 @@ public Builder clearInstancePartition() { : instancePartition_; } } + /** * * @@ -913,14 +910,14 @@ public Builder clearInstancePartition() { * * .google.spanner.admin.instance.v1.InstancePartition instance_partition = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> - getInstancePartitionFieldBuilder() { + internalGetInstancePartitionFieldBuilder() { if (instancePartitionBuilder_ == null) { instancePartitionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder>( @@ -931,11 +928,12 @@ public Builder clearInstancePartition() { } private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -952,6 +950,7 @@ public Builder clearInstancePartition() { public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -972,6 +971,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -996,6 +996,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1017,6 +1018,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -1046,6 +1048,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1067,6 +1070,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -1081,8 +1085,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -1101,6 +1106,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -1112,14 +1118,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1130,11 +1136,12 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1151,6 +1158,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1173,6 +1181,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1197,6 +1206,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1218,6 +1228,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1247,6 +1258,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1268,6 +1280,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1282,8 +1295,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1304,6 +1318,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1315,14 +1330,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1333,11 +1348,12 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { } private com.google.protobuf.Timestamp endTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -1352,6 +1368,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1370,6 +1387,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -1392,6 +1410,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1411,6 +1430,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1438,6 +1458,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1457,6 +1478,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -1469,8 +1491,9 @@ public Builder clearEndTime() { public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEndTimeFieldBuilder().getBuilder(); + return internalGetEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -1487,6 +1510,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1496,14 +1520,14 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { * * .google.protobuf.Timestamp end_time = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEndTimeFieldBuilder() { + internalGetEndTimeFieldBuilder() { if (endTimeBuilder_ == null) { endTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1513,17 +1537,6 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java index 9d6e7f2f6c3..b609606ba47 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface CreateInstancePartitionMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) @@ -36,6 +38,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return Whether the instancePartition field is set. */ boolean hasInstancePartition(); + /** * * @@ -48,6 +51,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return The instancePartition. */ com.google.spanner.admin.instance.v1.InstancePartition getInstancePartition(); + /** * * @@ -73,6 +77,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -87,6 +92,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -114,6 +120,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -128,6 +135,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * @@ -153,6 +161,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -165,6 +174,7 @@ public interface CreateInstancePartitionMetadataOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java index fca00c08dee..a08a1f2c9b3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,14 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstancePartitionRequest} */ -public final class CreateInstancePartitionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateInstancePartitionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.CreateInstancePartitionRequest) CreateInstancePartitionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateInstancePartitionRequest"); + } + // Use CreateInstancePartitionRequest.newBuilder() to construct. - private CreateInstancePartitionRequest( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateInstancePartitionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +57,13 @@ private CreateInstancePartitionRequest() { instancePartitionId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateInstancePartitionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_fieldAccessorTable @@ -71,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -98,6 +105,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -130,6 +138,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instancePartitionId_ = ""; + /** * * @@ -155,6 +164,7 @@ public java.lang.String getInstancePartitionId() { return s; } } + /** * * @@ -183,6 +193,7 @@ public com.google.protobuf.ByteString getInstancePartitionIdBytes() { public static final int INSTANCE_PARTITION_FIELD_NUMBER = 3; private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; + /** * * @@ -202,6 +213,7 @@ public com.google.protobuf.ByteString getInstancePartitionIdBytes() { public boolean hasInstancePartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -223,6 +235,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti ? com.google.spanner.admin.instance.v1.InstancePartition.getDefaultInstance() : instancePartition_; } + /** * * @@ -258,11 +271,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instancePartitionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instancePartitionId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instancePartitionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instancePartitionId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getInstancePartition()); @@ -276,11 +289,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instancePartitionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instancePartitionId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instancePartitionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instancePartitionId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getInstancePartition()); @@ -368,39 +381,39 @@ public static com.google.spanner.admin.instance.v1.CreateInstancePartitionReques public static com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -424,10 +437,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -438,7 +452,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstancePartitionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.CreateInstancePartitionRequest) com.google.spanner.admin.instance.v1.CreateInstancePartitionRequestOrBuilder { @@ -448,7 +462,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_fieldAccessorTable @@ -463,14 +477,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstancePartitionFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstancePartitionFieldBuilder(); } } @@ -541,39 +555,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest) { @@ -644,7 +625,7 @@ public Builder mergeFrom( case 26: { input.readMessage( - getInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -668,6 +649,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -694,6 +676,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -720,6 +703,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -745,6 +729,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -766,6 +751,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -794,6 +780,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instancePartitionId_ = ""; + /** * * @@ -818,6 +805,7 @@ public java.lang.String getInstancePartitionId() { return (java.lang.String) ref; } } + /** * * @@ -842,6 +830,7 @@ public com.google.protobuf.ByteString getInstancePartitionIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -865,6 +854,7 @@ public Builder setInstancePartitionId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -884,6 +874,7 @@ public Builder clearInstancePartitionId() { onChanged(); return this; } + /** * * @@ -910,11 +901,12 @@ public Builder setInstancePartitionIdBytes(com.google.protobuf.ByteString value) } private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> instancePartitionBuilder_; + /** * * @@ -933,6 +925,7 @@ public Builder setInstancePartitionIdBytes(com.google.protobuf.ByteString value) public boolean hasInstancePartition() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -957,6 +950,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti return instancePartitionBuilder_.getMessage(); } } + /** * * @@ -984,6 +978,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -1008,6 +1003,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -1041,6 +1037,7 @@ public Builder mergeInstancePartition( } return this; } + /** * * @@ -1064,6 +1061,7 @@ public Builder clearInstancePartition() { onChanged(); return this; } + /** * * @@ -1081,8 +1079,9 @@ public Builder clearInstancePartition() { getInstancePartitionBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getInstancePartitionFieldBuilder().getBuilder(); + return internalGetInstancePartitionFieldBuilder().getBuilder(); } + /** * * @@ -1106,6 +1105,7 @@ public Builder clearInstancePartition() { : instancePartition_; } } + /** * * @@ -1119,14 +1119,14 @@ public Builder clearInstancePartition() { * .google.spanner.admin.instance.v1.InstancePartition instance_partition = 3 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> - getInstancePartitionFieldBuilder() { + internalGetInstancePartitionFieldBuilder() { if (instancePartitionBuilder_ == null) { instancePartitionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder>( @@ -1136,17 +1136,6 @@ public Builder clearInstancePartition() { return instancePartitionBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.CreateInstancePartitionRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java index 777de5f7e19..f844e3d5ce9 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface CreateInstancePartitionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.CreateInstancePartitionRequest) @@ -40,6 +42,7 @@ public interface CreateInstancePartitionRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -71,6 +74,7 @@ public interface CreateInstancePartitionRequestOrBuilder * @return The instancePartitionId. */ java.lang.String getInstancePartitionId(); + /** * * @@ -102,6 +106,7 @@ public interface CreateInstancePartitionRequestOrBuilder * @return Whether the instancePartition field is set. */ boolean hasInstancePartition(); + /** * * @@ -118,6 +123,7 @@ public interface CreateInstancePartitionRequestOrBuilder * @return The instancePartition. */ com.google.spanner.admin.instance.v1.InstancePartition getInstancePartition(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java index 8ced295fb30..6d6c09abb71 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceRequest} */ -public final class CreateInstanceRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateInstanceRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.CreateInstanceRequest) CreateInstanceRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateInstanceRequest"); + } + // Use CreateInstanceRequest.newBuilder() to construct. - private CreateInstanceRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateInstanceRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CreateInstanceRequest() { instanceId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateInstanceRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -127,6 +136,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -152,6 +162,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -180,6 +191,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { public static final int INSTANCE_FIELD_NUMBER = 3; private com.google.spanner.admin.instance.v1.Instance instance_; + /** * * @@ -198,6 +210,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -218,6 +231,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { ? com.google.spanner.admin.instance.v1.Instance.getDefaultInstance() : instance_; } + /** * * @@ -251,11 +265,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getInstance()); @@ -269,11 +283,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getInstance()); @@ -361,38 +375,38 @@ public static com.google.spanner.admin.instance.v1.CreateInstanceRequest parseFr public static com.google.spanner.admin.instance.v1.CreateInstanceRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.CreateInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.CreateInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -416,10 +430,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -430,7 +445,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.CreateInstanceRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.CreateInstanceRequest) com.google.spanner.admin.instance.v1.CreateInstanceRequestOrBuilder { @@ -440,7 +455,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_fieldAccessorTable @@ -454,14 +469,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceFieldBuilder(); } } @@ -526,39 +541,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.CreateInstanceRe result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.CreateInstanceRequest) { @@ -625,7 +607,8 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getInstanceFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -649,6 +632,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -674,6 +658,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -699,6 +684,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -723,6 +709,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -743,6 +730,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -770,6 +758,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -794,6 +783,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -818,6 +808,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -841,6 +832,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -860,6 +852,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -886,11 +879,12 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.instance.v1.Instance instance_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> instanceBuilder_; + /** * * @@ -908,6 +902,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { public boolean hasInstance() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -931,6 +926,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { return instanceBuilder_.getMessage(); } } + /** * * @@ -956,6 +952,7 @@ public Builder setInstance(com.google.spanner.admin.instance.v1.Instance value) onChanged(); return this; } + /** * * @@ -979,6 +976,7 @@ public Builder setInstance( onChanged(); return this; } + /** * * @@ -1009,6 +1007,7 @@ public Builder mergeInstance(com.google.spanner.admin.instance.v1.Instance value } return this; } + /** * * @@ -1031,6 +1030,7 @@ public Builder clearInstance() { onChanged(); return this; } + /** * * @@ -1046,8 +1046,9 @@ public Builder clearInstance() { public com.google.spanner.admin.instance.v1.Instance.Builder getInstanceBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getInstanceFieldBuilder().getBuilder(); + return internalGetInstanceFieldBuilder().getBuilder(); } + /** * * @@ -1069,6 +1070,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild : instance_; } } + /** * * @@ -1081,14 +1083,14 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild * .google.spanner.admin.instance.v1.Instance instance = 3 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> - getInstanceFieldBuilder() { + internalGetInstanceFieldBuilder() { if (instanceBuilder_ == null) { instanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder>( @@ -1098,17 +1100,6 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild return instanceBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.CreateInstanceRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java index 7597e0d3647..d07f7acedf3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface CreateInstanceRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.CreateInstanceRequest) @@ -39,6 +41,7 @@ public interface CreateInstanceRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -69,6 +72,7 @@ public interface CreateInstanceRequestOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -99,6 +103,7 @@ public interface CreateInstanceRequestOrBuilder * @return Whether the instance field is set. */ boolean hasInstance(); + /** * * @@ -114,6 +119,7 @@ public interface CreateInstanceRequestOrBuilder * @return The instance. */ com.google.spanner.admin.instance.v1.Instance getInstance(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java index c62e5c1a242..91b46b0587a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -24,18 +25,30 @@ * *
                                  * The request for
                                - * [DeleteInstanceConfigRequest][InstanceAdmin.DeleteInstanceConfigRequest].
                                + * [DeleteInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstanceConfig].
                                  * 
                                * * Protobuf type {@code google.spanner.admin.instance.v1.DeleteInstanceConfigRequest} */ -public final class DeleteInstanceConfigRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteInstanceConfigRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.DeleteInstanceConfigRequest) DeleteInstanceConfigRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteInstanceConfigRequest"); + } + // Use DeleteInstanceConfigRequest.newBuilder() to construct. - private DeleteInstanceConfigRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteInstanceConfigRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private DeleteInstanceConfigRequest() { etag_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteInstanceConfigRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -128,6 +137,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object etag_ = ""; + /** * * @@ -157,6 +167,7 @@ public java.lang.String getEtag() { return s; } } + /** * * @@ -189,6 +200,7 @@ public com.google.protobuf.ByteString getEtagBytes() { public static final int VALIDATE_ONLY_FIELD_NUMBER = 3; private boolean validateOnly_ = false; + /** * * @@ -220,11 +232,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, etag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, etag_); } if (validateOnly_ != false) { output.writeBool(3, validateOnly_); @@ -238,11 +250,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, etag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, etag_); } if (validateOnly_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, validateOnly_); @@ -325,38 +337,38 @@ public static com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest p public static com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -380,21 +392,22 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                    * The request for
                                -   * [DeleteInstanceConfigRequest][InstanceAdmin.DeleteInstanceConfigRequest].
                                +   * [DeleteInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstanceConfig].
                                    * 
                                * * Protobuf type {@code google.spanner.admin.instance.v1.DeleteInstanceConfigRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.DeleteInstanceConfigRequest) com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequestOrBuilder { @@ -404,7 +417,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_fieldAccessorTable @@ -416,7 +429,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -476,39 +489,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest) { @@ -601,6 +581,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -627,6 +608,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -653,6 +635,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -678,6 +661,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -699,6 +683,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -727,6 +712,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object etag_ = ""; + /** * * @@ -755,6 +741,7 @@ public java.lang.String getEtag() { return (java.lang.String) ref; } } + /** * * @@ -783,6 +770,7 @@ public com.google.protobuf.ByteString getEtagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -810,6 +798,7 @@ public Builder setEtag(java.lang.String value) { onChanged(); return this; } + /** * * @@ -833,6 +822,7 @@ public Builder clearEtag() { onChanged(); return this; } + /** * * @@ -863,6 +853,7 @@ public Builder setEtagBytes(com.google.protobuf.ByteString value) { } private boolean validateOnly_; + /** * * @@ -879,6 +870,7 @@ public Builder setEtagBytes(com.google.protobuf.ByteString value) { public boolean getValidateOnly() { return validateOnly_; } + /** * * @@ -899,6 +891,7 @@ public Builder setValidateOnly(boolean value) { onChanged(); return this; } + /** * * @@ -918,17 +911,6 @@ public Builder clearValidateOnly() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.DeleteInstanceConfigRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java index 1d45a407835..5f8c8788855 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface DeleteInstanceConfigRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.DeleteInstanceConfigRequest) @@ -40,6 +42,7 @@ public interface DeleteInstanceConfigRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -75,6 +78,7 @@ public interface DeleteInstanceConfigRequestOrBuilder * @return The etag. */ java.lang.String getEtag(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java index 6ef1d4e07c4..379d0e2ecf4 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,14 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.DeleteInstancePartitionRequest} */ -public final class DeleteInstancePartitionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteInstancePartitionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.DeleteInstancePartitionRequest) DeleteInstancePartitionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteInstancePartitionRequest"); + } + // Use DeleteInstancePartitionRequest.newBuilder() to construct. - private DeleteInstancePartitionRequest( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteInstancePartitionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +57,13 @@ private DeleteInstancePartitionRequest() { etag_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteInstancePartitionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_fieldAccessorTable @@ -70,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -97,6 +104,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -129,6 +137,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object etag_ = ""; + /** * * @@ -155,6 +164,7 @@ public java.lang.String getEtag() { return s; } } + /** * * @@ -196,11 +206,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, etag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, etag_); } getUnknownFields().writeTo(output); } @@ -211,11 +221,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, etag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, etag_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -292,39 +302,39 @@ public static com.google.spanner.admin.instance.v1.DeleteInstancePartitionReques public static com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -348,10 +358,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -362,7 +373,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.DeleteInstancePartitionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.DeleteInstancePartitionRequest) com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequestOrBuilder { @@ -372,7 +383,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_fieldAccessorTable @@ -385,7 +396,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -442,39 +453,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.DeleteInstancePartitionRequest) { @@ -559,6 +537,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -585,6 +564,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -611,6 +591,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -636,6 +617,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -657,6 +639,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -685,6 +668,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object etag_ = ""; + /** * * @@ -710,6 +694,7 @@ public java.lang.String getEtag() { return (java.lang.String) ref; } } + /** * * @@ -735,6 +720,7 @@ public com.google.protobuf.ByteString getEtagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -759,6 +745,7 @@ public Builder setEtag(java.lang.String value) { onChanged(); return this; } + /** * * @@ -779,6 +766,7 @@ public Builder clearEtag() { onChanged(); return this; } + /** * * @@ -805,17 +793,6 @@ public Builder setEtagBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.DeleteInstancePartitionRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java index 8213609c027..50859d8b6fa 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface DeleteInstancePartitionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.DeleteInstancePartitionRequest) @@ -40,6 +42,7 @@ public interface DeleteInstancePartitionRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -72,6 +75,7 @@ public interface DeleteInstancePartitionRequestOrBuilder * @return The etag. */ java.lang.String getEtag(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java index dc0a5e4f89e..1306dadae30 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.DeleteInstanceRequest} */ -public final class DeleteInstanceRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteInstanceRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.DeleteInstanceRequest) DeleteInstanceRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteInstanceRequest"); + } + // Use DeleteInstanceRequest.newBuilder() to construct. - private DeleteInstanceRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteInstanceRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private DeleteInstanceRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteInstanceRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -135,8 +144,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -147,8 +156,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -222,38 +231,38 @@ public static com.google.spanner.admin.instance.v1.DeleteInstanceRequest parseFr public static com.google.spanner.admin.instance.v1.DeleteInstanceRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstanceRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.DeleteInstanceRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstanceRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.DeleteInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.DeleteInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -277,10 +286,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -291,7 +301,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.DeleteInstanceRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.DeleteInstanceRequest) com.google.spanner.admin.instance.v1.DeleteInstanceRequestOrBuilder { @@ -301,7 +311,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_fieldAccessorTable @@ -313,7 +323,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.DeleteInstanceRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -363,39 +373,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.DeleteInstanceRe } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.DeleteInstanceRequest) { @@ -466,6 +443,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -491,6 +469,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -516,6 +495,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -540,6 +520,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -560,6 +541,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -586,17 +568,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.DeleteInstanceRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java index 6975e3794d0..7e881394ea2 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface DeleteInstanceRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.DeleteInstanceRequest) @@ -39,6 +41,7 @@ public interface DeleteInstanceRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FreeInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FreeInstanceMetadata.java new file mode 100644 index 00000000000..6ea31b81436 --- /dev/null +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FreeInstanceMetadata.java @@ -0,0 +1,1439 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.instance.v1; + +/** + * + * + *
                                + * Free instance specific metadata that is kept even after an instance has been
                                + * upgraded for tracking purposes.
                                + * 
                                + * + * Protobuf type {@code google.spanner.admin.instance.v1.FreeInstanceMetadata} + */ +@com.google.protobuf.Generated +public final class FreeInstanceMetadata extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.FreeInstanceMetadata) + FreeInstanceMetadataOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "FreeInstanceMetadata"); + } + + // Use FreeInstanceMetadata.newBuilder() to construct. + private FreeInstanceMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private FreeInstanceMetadata() { + expireBehavior_ = 0; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto + .internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto + .internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.class, + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.Builder.class); + } + + /** + * + * + *
                                +   * Allows users to change behavior when a free instance expires.
                                +   * 
                                + * + * Protobuf enum {@code google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior} + */ + public enum ExpireBehavior implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * EXPIRE_BEHAVIOR_UNSPECIFIED = 0; + */ + EXPIRE_BEHAVIOR_UNSPECIFIED(0), + /** + * + * + *
                                +     * When the free instance expires, upgrade the instance to a provisioned
                                +     * instance.
                                +     * 
                                + * + * FREE_TO_PROVISIONED = 1; + */ + FREE_TO_PROVISIONED(1), + /** + * + * + *
                                +     * When the free instance expires, disable the instance, and delete it
                                +     * after the grace period passes if it has not been upgraded.
                                +     * 
                                + * + * REMOVE_AFTER_GRACE_PERIOD = 2; + */ + REMOVE_AFTER_GRACE_PERIOD(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExpireBehavior"); + } + + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * EXPIRE_BEHAVIOR_UNSPECIFIED = 0; + */ + public static final int EXPIRE_BEHAVIOR_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +     * When the free instance expires, upgrade the instance to a provisioned
                                +     * instance.
                                +     * 
                                + * + * FREE_TO_PROVISIONED = 1; + */ + public static final int FREE_TO_PROVISIONED_VALUE = 1; + + /** + * + * + *
                                +     * When the free instance expires, disable the instance, and delete it
                                +     * after the grace period passes if it has not been upgraded.
                                +     * 
                                + * + * REMOVE_AFTER_GRACE_PERIOD = 2; + */ + public static final int REMOVE_AFTER_GRACE_PERIOD_VALUE = 2; + + 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 ExpireBehavior 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 ExpireBehavior forNumber(int value) { + switch (value) { + case 0: + return EXPIRE_BEHAVIOR_UNSPECIFIED; + case 1: + return FREE_TO_PROVISIONED; + case 2: + return REMOVE_AFTER_GRACE_PERIOD; + 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 ExpireBehavior findValueByNumber(int number) { + return ExpireBehavior.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDescriptor() + .getEnumTypes() + .get(0); + } + + private static final ExpireBehavior[] VALUES = values(); + + public static ExpireBehavior 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 ExpireBehavior(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior) + } + + private int bitField0_; + public static final int EXPIRE_TIME_FIELD_NUMBER = 1; + private com.google.protobuf.Timestamp expireTime_; + + /** + * + * + *
                                +   * Output only. Timestamp after which the instance will either be upgraded or
                                +   * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +   * choose between upgrading or scheduling the free instance for deletion. This
                                +   * timestamp is set during the creation of a free instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the expireTime field is set. + */ + @java.lang.Override + public boolean hasExpireTime() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * Output only. Timestamp after which the instance will either be upgraded or
                                +   * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +   * choose between upgrading or scheduling the free instance for deletion. This
                                +   * timestamp is set during the creation of a free instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The expireTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getExpireTime() { + return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; + } + + /** + * + * + *
                                +   * Output only. Timestamp after which the instance will either be upgraded or
                                +   * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +   * choose between upgrading or scheduling the free instance for deletion. This
                                +   * timestamp is set during the creation of a free instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { + return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; + } + + public static final int UPGRADE_TIME_FIELD_NUMBER = 2; + private com.google.protobuf.Timestamp upgradeTime_; + + /** + * + * + *
                                +   * Output only. If present, the timestamp at which the free instance was
                                +   * upgraded to a provisioned instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the upgradeTime field is set. + */ + @java.lang.Override + public boolean hasUpgradeTime() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
                                +   * Output only. If present, the timestamp at which the free instance was
                                +   * upgraded to a provisioned instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The upgradeTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getUpgradeTime() { + return upgradeTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : upgradeTime_; + } + + /** + * + * + *
                                +   * Output only. If present, the timestamp at which the free instance was
                                +   * upgraded to a provisioned instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getUpgradeTimeOrBuilder() { + return upgradeTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : upgradeTime_; + } + + public static final int EXPIRE_BEHAVIOR_FIELD_NUMBER = 3; + private int expireBehavior_ = 0; + + /** + * + * + *
                                +   * Specifies the expiration behavior of a free instance. The default of
                                +   * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +   * or after creation, and before expiration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @return The enum numeric value on the wire for expireBehavior. + */ + @java.lang.Override + public int getExpireBehaviorValue() { + return expireBehavior_; + } + + /** + * + * + *
                                +   * Specifies the expiration behavior of a free instance. The default of
                                +   * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +   * or after creation, and before expiration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @return The expireBehavior. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior + getExpireBehavior() { + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior result = + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior.forNumber( + expireBehavior_); + return result == null + ? com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior.UNRECOGNIZED + : result; + } + + 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, getExpireTime()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getUpgradeTime()); + } + if (expireBehavior_ + != com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior + .EXPIRE_BEHAVIOR_UNSPECIFIED + .getNumber()) { + output.writeEnum(3, expireBehavior_); + } + 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, getExpireTime()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getUpgradeTime()); + } + if (expireBehavior_ + != com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior + .EXPIRE_BEHAVIOR_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(3, expireBehavior_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.instance.v1.FreeInstanceMetadata)) { + return super.equals(obj); + } + com.google.spanner.admin.instance.v1.FreeInstanceMetadata other = + (com.google.spanner.admin.instance.v1.FreeInstanceMetadata) obj; + + if (hasExpireTime() != other.hasExpireTime()) return false; + if (hasExpireTime()) { + if (!getExpireTime().equals(other.getExpireTime())) return false; + } + if (hasUpgradeTime() != other.hasUpgradeTime()) return false; + if (hasUpgradeTime()) { + if (!getUpgradeTime().equals(other.getUpgradeTime())) return false; + } + if (expireBehavior_ != other.expireBehavior_) 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 (hasExpireTime()) { + hash = (37 * hash) + EXPIRE_TIME_FIELD_NUMBER; + hash = (53 * hash) + getExpireTime().hashCode(); + } + if (hasUpgradeTime()) { + hash = (37 * hash) + UPGRADE_TIME_FIELD_NUMBER; + hash = (53 * hash) + getUpgradeTime().hashCode(); + } + hash = (37 * hash) + EXPIRE_BEHAVIOR_FIELD_NUMBER; + hash = (53 * hash) + expireBehavior_; + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.instance.v1.FreeInstanceMetadata 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * Free instance specific metadata that is kept even after an instance has been
                                +   * upgraded for tracking purposes.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.admin.instance.v1.FreeInstanceMetadata} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.FreeInstanceMetadata) + com.google.spanner.admin.instance.v1.FreeInstanceMetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto + .internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto + .internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.class, + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.Builder.class); + } + + // Construct using com.google.spanner.admin.instance.v1.FreeInstanceMetadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetExpireTimeFieldBuilder(); + internalGetUpgradeTimeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + expireTime_ = null; + if (expireTimeBuilder_ != null) { + expireTimeBuilder_.dispose(); + expireTimeBuilder_ = null; + } + upgradeTime_ = null; + if (upgradeTimeBuilder_ != null) { + upgradeTimeBuilder_.dispose(); + upgradeTimeBuilder_ = null; + } + expireBehavior_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto + .internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata getDefaultInstanceForType() { + return com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata build() { + com.google.spanner.admin.instance.v1.FreeInstanceMetadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata buildPartial() { + com.google.spanner.admin.instance.v1.FreeInstanceMetadata result = + new com.google.spanner.admin.instance.v1.FreeInstanceMetadata(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.admin.instance.v1.FreeInstanceMetadata result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.expireTime_ = expireTimeBuilder_ == null ? expireTime_ : expireTimeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.upgradeTime_ = + upgradeTimeBuilder_ == null ? upgradeTime_ : upgradeTimeBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.expireBehavior_ = expireBehavior_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.instance.v1.FreeInstanceMetadata) { + return mergeFrom((com.google.spanner.admin.instance.v1.FreeInstanceMetadata) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.instance.v1.FreeInstanceMetadata other) { + if (other == com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDefaultInstance()) + return this; + if (other.hasExpireTime()) { + mergeExpireTime(other.getExpireTime()); + } + if (other.hasUpgradeTime()) { + mergeUpgradeTime(other.getUpgradeTime()); + } + if (other.expireBehavior_ != 0) { + setExpireBehaviorValue(other.getExpireBehaviorValue()); + } + 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( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetUpgradeTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + expireBehavior_ = input.readEnum(); + bitField0_ |= 0x00000004; + break; + } // case 24 + 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.Timestamp expireTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + expireTimeBuilder_; + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the expireTime field is set. + */ + public boolean hasExpireTime() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The expireTime. + */ + public com.google.protobuf.Timestamp getExpireTime() { + if (expireTimeBuilder_ == null) { + return expireTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : expireTime_; + } else { + return expireTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setExpireTime(com.google.protobuf.Timestamp value) { + if (expireTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + expireTime_ = value; + } else { + expireTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (expireTimeBuilder_ == null) { + expireTime_ = builderForValue.build(); + } else { + expireTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { + if (expireTimeBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && expireTime_ != null + && expireTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getExpireTimeBuilder().mergeFrom(value); + } else { + expireTime_ = value; + } + } else { + expireTimeBuilder_.mergeFrom(value); + } + if (expireTime_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder clearExpireTime() { + bitField0_ = (bitField0_ & ~0x00000001); + expireTime_ = null; + if (expireTimeBuilder_ != null) { + expireTimeBuilder_.dispose(); + expireTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetExpireTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { + if (expireTimeBuilder_ != null) { + return expireTimeBuilder_.getMessageOrBuilder(); + } else { + return expireTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : expireTime_; + } + } + + /** + * + * + *
                                +     * Output only. Timestamp after which the instance will either be upgraded or
                                +     * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +     * choose between upgrading or scheduling the free instance for deletion. This
                                +     * timestamp is set during the creation of a free instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetExpireTimeFieldBuilder() { + if (expireTimeBuilder_ == null) { + expireTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getExpireTime(), getParentForChildren(), isClean()); + expireTime_ = null; + } + return expireTimeBuilder_; + } + + private com.google.protobuf.Timestamp upgradeTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + upgradeTimeBuilder_; + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the upgradeTime field is set. + */ + public boolean hasUpgradeTime() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The upgradeTime. + */ + public com.google.protobuf.Timestamp getUpgradeTime() { + if (upgradeTimeBuilder_ == null) { + return upgradeTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : upgradeTime_; + } else { + return upgradeTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setUpgradeTime(com.google.protobuf.Timestamp value) { + if (upgradeTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + upgradeTime_ = value; + } else { + upgradeTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setUpgradeTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (upgradeTimeBuilder_ == null) { + upgradeTime_ = builderForValue.build(); + } else { + upgradeTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder mergeUpgradeTime(com.google.protobuf.Timestamp value) { + if (upgradeTimeBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && upgradeTime_ != null + && upgradeTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getUpgradeTimeBuilder().mergeFrom(value); + } else { + upgradeTime_ = value; + } + } else { + upgradeTimeBuilder_.mergeFrom(value); + } + if (upgradeTime_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder clearUpgradeTime() { + bitField0_ = (bitField0_ & ~0x00000002); + upgradeTime_ = null; + if (upgradeTimeBuilder_ != null) { + upgradeTimeBuilder_.dispose(); + upgradeTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.Timestamp.Builder getUpgradeTimeBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetUpgradeTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.TimestampOrBuilder getUpgradeTimeOrBuilder() { + if (upgradeTimeBuilder_ != null) { + return upgradeTimeBuilder_.getMessageOrBuilder(); + } else { + return upgradeTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : upgradeTime_; + } + } + + /** + * + * + *
                                +     * Output only. If present, the timestamp at which the free instance was
                                +     * upgraded to a provisioned instance.
                                +     * 
                                + * + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetUpgradeTimeFieldBuilder() { + if (upgradeTimeBuilder_ == null) { + upgradeTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getUpgradeTime(), getParentForChildren(), isClean()); + upgradeTime_ = null; + } + return upgradeTimeBuilder_; + } + + private int expireBehavior_ = 0; + + /** + * + * + *
                                +     * Specifies the expiration behavior of a free instance. The default of
                                +     * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +     * or after creation, and before expiration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @return The enum numeric value on the wire for expireBehavior. + */ + @java.lang.Override + public int getExpireBehaviorValue() { + return expireBehavior_; + } + + /** + * + * + *
                                +     * Specifies the expiration behavior of a free instance. The default of
                                +     * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +     * or after creation, and before expiration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @param value The enum numeric value on the wire for expireBehavior to set. + * @return This builder for chaining. + */ + public Builder setExpireBehaviorValue(int value) { + expireBehavior_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Specifies the expiration behavior of a free instance. The default of
                                +     * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +     * or after creation, and before expiration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @return The expireBehavior. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior + getExpireBehavior() { + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior result = + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior.forNumber( + expireBehavior_); + return result == null + ? com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +     * Specifies the expiration behavior of a free instance. The default of
                                +     * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +     * or after creation, and before expiration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @param value The expireBehavior to set. + * @return This builder for chaining. + */ + public Builder setExpireBehavior( + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + expireBehavior_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Specifies the expiration behavior of a free instance. The default of
                                +     * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +     * or after creation, and before expiration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @return This builder for chaining. + */ + public Builder clearExpireBehavior() { + bitField0_ = (bitField0_ & ~0x00000004); + expireBehavior_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.FreeInstanceMetadata) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.instance.v1.FreeInstanceMetadata) + private static final com.google.spanner.admin.instance.v1.FreeInstanceMetadata DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.instance.v1.FreeInstanceMetadata(); + } + + public static com.google.spanner.admin.instance.v1.FreeInstanceMetadata getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public FreeInstanceMetadata parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FreeInstanceMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FreeInstanceMetadataOrBuilder.java new file mode 100644 index 00000000000..28f41451e7f --- /dev/null +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FreeInstanceMetadataOrBuilder.java @@ -0,0 +1,154 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.admin.instance.v1; + +@com.google.protobuf.Generated +public interface FreeInstanceMetadataOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.FreeInstanceMetadata) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * Output only. Timestamp after which the instance will either be upgraded or
                                +   * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +   * choose between upgrading or scheduling the free instance for deletion. This
                                +   * timestamp is set during the creation of a free instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the expireTime field is set. + */ + boolean hasExpireTime(); + + /** + * + * + *
                                +   * Output only. Timestamp after which the instance will either be upgraded or
                                +   * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +   * choose between upgrading or scheduling the free instance for deletion. This
                                +   * timestamp is set during the creation of a free instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The expireTime. + */ + com.google.protobuf.Timestamp getExpireTime(); + + /** + * + * + *
                                +   * Output only. Timestamp after which the instance will either be upgraded or
                                +   * scheduled for deletion after a grace period. ExpireBehavior is used to
                                +   * choose between upgrading or scheduling the free instance for deletion. This
                                +   * timestamp is set during the creation of a free instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp expire_time = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder(); + + /** + * + * + *
                                +   * Output only. If present, the timestamp at which the free instance was
                                +   * upgraded to a provisioned instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the upgradeTime field is set. + */ + boolean hasUpgradeTime(); + + /** + * + * + *
                                +   * Output only. If present, the timestamp at which the free instance was
                                +   * upgraded to a provisioned instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The upgradeTime. + */ + com.google.protobuf.Timestamp getUpgradeTime(); + + /** + * + * + *
                                +   * Output only. If present, the timestamp at which the free instance was
                                +   * upgraded to a provisioned instance.
                                +   * 
                                + * + * .google.protobuf.Timestamp upgrade_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.protobuf.TimestampOrBuilder getUpgradeTimeOrBuilder(); + + /** + * + * + *
                                +   * Specifies the expiration behavior of a free instance. The default of
                                +   * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +   * or after creation, and before expiration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @return The enum numeric value on the wire for expireBehavior. + */ + int getExpireBehaviorValue(); + + /** + * + * + *
                                +   * Specifies the expiration behavior of a free instance. The default of
                                +   * ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during
                                +   * or after creation, and before expiration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior expire_behavior = 3; + * + * + * @return The expireBehavior. + */ + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.ExpireBehavior getExpireBehavior(); +} diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FulfillmentPeriod.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FulfillmentPeriod.java index 191417eaa29..4c4a59f191c 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FulfillmentPeriod.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FulfillmentPeriod.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -28,6 +29,7 @@ * * Protobuf enum {@code google.spanner.admin.instance.v1.FulfillmentPeriod} */ +@com.google.protobuf.Generated public enum FulfillmentPeriod implements com.google.protobuf.ProtocolMessageEnum { /** * @@ -64,6 +66,16 @@ public enum FulfillmentPeriod implements com.google.protobuf.ProtocolMessageEnum UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "FulfillmentPeriod"); + } + /** * * @@ -74,6 +86,7 @@ public enum FulfillmentPeriod implements com.google.protobuf.ProtocolMessageEnum * FULFILLMENT_PERIOD_UNSPECIFIED = 0; */ public static final int FULFILLMENT_PERIOD_UNSPECIFIED_VALUE = 0; + /** * * @@ -85,6 +98,7 @@ public enum FulfillmentPeriod implements com.google.protobuf.ProtocolMessageEnum * FULFILLMENT_PERIOD_NORMAL = 1; */ public static final int FULFILLMENT_PERIOD_NORMAL_VALUE = 1; + /** * * @@ -156,7 +170,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.instance.v1.CommonProto.getDescriptor().getEnumTypes().get(0); } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java index 4443c12e547..b9228b059ed 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.GetInstanceConfigRequest} */ -public final class GetInstanceConfigRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetInstanceConfigRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.GetInstanceConfigRequest) GetInstanceConfigRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetInstanceConfigRequest"); + } + // Use GetInstanceConfigRequest.newBuilder() to construct. - private GetInstanceConfigRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetInstanceConfigRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetInstanceConfigRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetInstanceConfigRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -135,8 +144,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -147,8 +156,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -222,38 +231,38 @@ public static com.google.spanner.admin.instance.v1.GetInstanceConfigRequest pars public static com.google.spanner.admin.instance.v1.GetInstanceConfigRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstanceConfigRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.GetInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.GetInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -277,10 +286,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -291,7 +301,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.GetInstanceConfigRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.GetInstanceConfigRequest) com.google.spanner.admin.instance.v1.GetInstanceConfigRequestOrBuilder { @@ -301,7 +311,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_fieldAccessorTable @@ -313,7 +323,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.GetInstanceConfigRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -365,39 +375,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.GetInstanceConfigRequest) { @@ -469,6 +446,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -494,6 +472,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -519,6 +498,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -543,6 +523,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -563,6 +544,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -589,17 +571,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.GetInstanceConfigRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java index 67256df4aee..758326023ab 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface GetInstanceConfigRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.GetInstanceConfigRequest) @@ -39,6 +41,7 @@ public interface GetInstanceConfigRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java index e83cf6b6ee0..157905197df 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.GetInstancePartitionRequest} */ -public final class GetInstancePartitionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetInstancePartitionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.GetInstancePartitionRequest) GetInstancePartitionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetInstancePartitionRequest"); + } + // Use GetInstancePartitionRequest.newBuilder() to construct. - private GetInstancePartitionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetInstancePartitionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetInstancePartitionRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetInstancePartitionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -137,8 +146,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -149,8 +158,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -224,38 +233,38 @@ public static com.google.spanner.admin.instance.v1.GetInstancePartitionRequest p public static com.google.spanner.admin.instance.v1.GetInstancePartitionRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstancePartitionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.GetInstancePartitionRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstancePartitionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.GetInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -279,10 +288,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -293,7 +303,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.GetInstancePartitionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.GetInstancePartitionRequest) com.google.spanner.admin.instance.v1.GetInstancePartitionRequestOrBuilder { @@ -303,7 +313,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_fieldAccessorTable @@ -315,7 +325,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.GetInstancePartitionRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -367,39 +377,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.GetInstancePartitionRequest) { @@ -472,6 +449,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -498,6 +476,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -524,6 +503,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -549,6 +529,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -570,6 +551,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -597,17 +579,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.GetInstancePartitionRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java index ddaecc1fcdd..f7b1aa011e7 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface GetInstancePartitionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.GetInstancePartitionRequest) @@ -40,6 +42,7 @@ public interface GetInstancePartitionRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java index 8556c16b633..57e6368a0b3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.GetInstanceRequest} */ -public final class GetInstanceRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetInstanceRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.GetInstanceRequest) GetInstanceRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetInstanceRequest"); + } + // Use GetInstanceRequest.newBuilder() to construct. - private GetInstanceRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetInstanceRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetInstanceRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetInstanceRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int FIELD_MASK_FIELD_NUMBER = 2; private com.google.protobuf.FieldMask fieldMask_; + /** * * @@ -142,6 +152,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasFieldMask() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -160,6 +171,7 @@ public boolean hasFieldMask() { public com.google.protobuf.FieldMask getFieldMask() { return fieldMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : fieldMask_; } + /** * * @@ -191,8 +203,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getFieldMask()); @@ -206,8 +218,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getFieldMask()); @@ -292,38 +304,38 @@ public static com.google.spanner.admin.instance.v1.GetInstanceRequest parseFrom( public static com.google.spanner.admin.instance.v1.GetInstanceRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstanceRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.GetInstanceRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstanceRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.GetInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.GetInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -347,10 +359,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -361,7 +374,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.GetInstanceRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.GetInstanceRequest) com.google.spanner.admin.instance.v1.GetInstanceRequestOrBuilder { @@ -371,7 +384,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_fieldAccessorTable @@ -385,14 +398,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getFieldMaskFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetFieldMaskFieldBuilder(); } } @@ -453,39 +466,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.GetInstanceReque result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.GetInstanceRequest) { @@ -541,7 +521,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getFieldMaskFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetFieldMaskFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -565,6 +546,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -590,6 +572,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -615,6 +598,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -639,6 +623,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -659,6 +644,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -686,11 +672,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.FieldMask fieldMask_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> fieldMaskBuilder_; + /** * * @@ -708,6 +695,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasFieldMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -729,6 +717,7 @@ public com.google.protobuf.FieldMask getFieldMask() { return fieldMaskBuilder_.getMessage(); } } + /** * * @@ -754,6 +743,7 @@ public Builder setFieldMask(com.google.protobuf.FieldMask value) { onChanged(); return this; } + /** * * @@ -776,6 +766,7 @@ public Builder setFieldMask(com.google.protobuf.FieldMask.Builder builderForValu onChanged(); return this; } + /** * * @@ -806,6 +797,7 @@ public Builder mergeFieldMask(com.google.protobuf.FieldMask value) { } return this; } + /** * * @@ -828,6 +820,7 @@ public Builder clearFieldMask() { onChanged(); return this; } + /** * * @@ -843,8 +836,9 @@ public Builder clearFieldMask() { public com.google.protobuf.FieldMask.Builder getFieldMaskBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getFieldMaskFieldBuilder().getBuilder(); + return internalGetFieldMaskFieldBuilder().getBuilder(); } + /** * * @@ -864,6 +858,7 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { return fieldMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : fieldMask_; } } + /** * * @@ -876,14 +871,14 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { * * .google.protobuf.FieldMask field_mask = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> - getFieldMaskFieldBuilder() { + internalGetFieldMaskFieldBuilder() { if (fieldMaskBuilder_ == null) { fieldMaskBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder>( @@ -893,17 +888,6 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { return fieldMaskBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.GetInstanceRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java index 4daf800fd01..e8f705bf06a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface GetInstanceRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.GetInstanceRequest) @@ -39,6 +41,7 @@ public interface GetInstanceRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -70,6 +73,7 @@ public interface GetInstanceRequestOrBuilder * @return Whether the fieldMask field is set. */ boolean hasFieldMask(); + /** * * @@ -85,6 +89,7 @@ public interface GetInstanceRequestOrBuilder * @return The fieldMask. */ com.google.protobuf.FieldMask getFieldMask(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java index 5ed73ef4173..a199934b0ef 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.Instance} */ -public final class Instance extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Instance extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.Instance) InstanceOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Instance"); + } + // Use Instance.newBuilder() to construct. - private Instance(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Instance(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,17 +57,12 @@ private Instance() { displayName_ = ""; replicaComputeCapacity_ = java.util.Collections.emptyList(); state_ = 0; + instanceType_ = 0; endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); edition_ = 0; defaultBackupScheduleType_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Instance(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_Instance_descriptor; @@ -73,7 +81,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_Instance_fieldAccessorTable @@ -128,6 +136,16 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + /** * * @@ -138,6 +156,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * STATE_UNSPECIFIED = 0; */ public static final int STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -150,6 +169,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * CREATING = 1; */ public static final int CREATING_VALUE = 1; + /** * * @@ -220,7 +240,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.instance.v1.Instance.getDescriptor().getEnumTypes().get(0); } @@ -245,6 +265,184 @@ private State(int value) { // @@protoc_insertion_point(enum_scope:google.spanner.admin.instance.v1.Instance.State) } + /** + * + * + *
                                +   * The type of this instance. The type can be used to distinguish product
                                +   * variants, that can affect aspects like: usage restrictions, quotas and
                                +   * billing. Currently this is used to distinguish FREE_INSTANCE vs PROVISIONED
                                +   * instances.
                                +   * 
                                + * + * Protobuf enum {@code google.spanner.admin.instance.v1.Instance.InstanceType} + */ + public enum InstanceType implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * INSTANCE_TYPE_UNSPECIFIED = 0; + */ + INSTANCE_TYPE_UNSPECIFIED(0), + /** + * + * + *
                                +     * Provisioned instances have dedicated resources, standard usage limits and
                                +     * support.
                                +     * 
                                + * + * PROVISIONED = 1; + */ + PROVISIONED(1), + /** + * + * + *
                                +     * Free instances provide no guarantee for dedicated resources,
                                +     * [node_count, processing_units] should be 0. They come
                                +     * with stricter usage limits and limited support.
                                +     * 
                                + * + * FREE_INSTANCE = 2; + */ + FREE_INSTANCE(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "InstanceType"); + } + + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * INSTANCE_TYPE_UNSPECIFIED = 0; + */ + public static final int INSTANCE_TYPE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +     * Provisioned instances have dedicated resources, standard usage limits and
                                +     * support.
                                +     * 
                                + * + * PROVISIONED = 1; + */ + public static final int PROVISIONED_VALUE = 1; + + /** + * + * + *
                                +     * Free instances provide no guarantee for dedicated resources,
                                +     * [node_count, processing_units] should be 0. They come
                                +     * with stricter usage limits and limited support.
                                +     * 
                                + * + * FREE_INSTANCE = 2; + */ + public static final int FREE_INSTANCE_VALUE = 2; + + 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 InstanceType 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 InstanceType forNumber(int value) { + switch (value) { + case 0: + return INSTANCE_TYPE_UNSPECIFIED; + case 1: + return PROVISIONED; + case 2: + return FREE_INSTANCE; + 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 InstanceType findValueByNumber(int number) { + return InstanceType.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.Instance.getDescriptor().getEnumTypes().get(1); + } + + private static final InstanceType[] VALUES = values(); + + public static InstanceType 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 InstanceType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.admin.instance.v1.Instance.InstanceType) + } + /** * * @@ -299,6 +497,16 @@ public enum Edition implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Edition"); + } + /** * * @@ -309,6 +517,7 @@ public enum Edition implements com.google.protobuf.ProtocolMessageEnum { * EDITION_UNSPECIFIED = 0; */ public static final int EDITION_UNSPECIFIED_VALUE = 0; + /** * * @@ -319,6 +528,7 @@ public enum Edition implements com.google.protobuf.ProtocolMessageEnum { * STANDARD = 1; */ public static final int STANDARD_VALUE = 1; + /** * * @@ -329,6 +539,7 @@ public enum Edition implements com.google.protobuf.ProtocolMessageEnum { * ENTERPRISE = 2; */ public static final int ENTERPRISE_VALUE = 2; + /** * * @@ -400,8 +611,8 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return com.google.spanner.admin.instance.v1.Instance.getDescriptor().getEnumTypes().get(1); + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.Instance.getDescriptor().getEnumTypes().get(2); } private static final Edition[] VALUES = values(); @@ -429,8 +640,10 @@ private Edition(int value) { * * *
                                -   * Indicates the default backup behavior for new databases within the
                                -   * instance.
                                +   * Indicates the
                                +   * [default backup
                                +   * schedule](https://cloud.google.com/spanner/docs/backup#default-backup-schedules)
                                +   * behavior for new databases within the instance.
                                    * 
                                * * Protobuf enum {@code google.spanner.admin.instance.v1.Instance.DefaultBackupScheduleType} @@ -450,8 +663,8 @@ public enum DefaultBackupScheduleType implements com.google.protobuf.ProtocolMes * * *
                                -     * No default backup schedule will be created automatically on creation of a
                                -     * database within the instance.
                                +     * A default backup schedule isn't created automatically when a new database
                                +     * is created in the instance.
                                      * 
                                * * NONE = 1; @@ -461,11 +674,10 @@ public enum DefaultBackupScheduleType implements com.google.protobuf.ProtocolMes * * *
                                -     * A default backup schedule will be created automatically on creation of a
                                -     * database within the instance. The default backup schedule creates a full
                                -     * backup every 24 hours and retains the backup for a period of 7 days. Once
                                -     * created, the default backup schedule can be edited/deleted similar to any
                                -     * other backup schedule.
                                +     * A default backup schedule is created automatically when a new database
                                +     * is created in the instance. The default backup schedule creates a full
                                +     * backup every 24 hours. These full backups are retained for 7 days.
                                +     * You can edit or delete the default backup schedule once it's created.
                                      * 
                                * * AUTOMATIC = 2; @@ -474,6 +686,16 @@ public enum DefaultBackupScheduleType implements com.google.protobuf.ProtocolMes UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DefaultBackupScheduleType"); + } + /** * * @@ -484,26 +706,27 @@ public enum DefaultBackupScheduleType implements com.google.protobuf.ProtocolMes * DEFAULT_BACKUP_SCHEDULE_TYPE_UNSPECIFIED = 0; */ public static final int DEFAULT_BACKUP_SCHEDULE_TYPE_UNSPECIFIED_VALUE = 0; + /** * * *
                                -     * No default backup schedule will be created automatically on creation of a
                                -     * database within the instance.
                                +     * A default backup schedule isn't created automatically when a new database
                                +     * is created in the instance.
                                      * 
                                * * NONE = 1; */ public static final int NONE_VALUE = 1; + /** * * *
                                -     * A default backup schedule will be created automatically on creation of a
                                -     * database within the instance. The default backup schedule creates a full
                                -     * backup every 24 hours and retains the backup for a period of 7 days. Once
                                -     * created, the default backup schedule can be edited/deleted similar to any
                                -     * other backup schedule.
                                +     * A default backup schedule is created automatically when a new database
                                +     * is created in the instance. The default backup schedule creates a full
                                +     * backup every 24 hours. These full backups are retained for 7 days.
                                +     * You can edit or delete the default backup schedule once it's created.
                                      * 
                                * * AUTOMATIC = 2; @@ -570,8 +793,8 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return com.google.spanner.admin.instance.v1.Instance.getDescriptor().getEnumTypes().get(2); + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.Instance.getDescriptor().getEnumTypes().get(3); } private static final DefaultBackupScheduleType[] VALUES = values(); @@ -601,6 +824,7 @@ private DefaultBackupScheduleType(int value) { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -627,6 +851,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -658,6 +883,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object config_ = ""; + /** * * @@ -686,6 +912,7 @@ public java.lang.String getConfig() { return s; } } + /** * * @@ -719,6 +946,7 @@ public com.google.protobuf.ByteString getConfigBytes() { @SuppressWarnings("serial") private volatile java.lang.Object displayName_ = ""; + /** * * @@ -743,6 +971,7 @@ public java.lang.String getDisplayName() { return s; } } + /** * * @@ -770,6 +999,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { public static final int NODE_COUNT_FIELD_NUMBER = 5; private int nodeCount_ = 0; + /** * * @@ -786,9 +1016,6 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying node count across replicas (achieved by - * setting asymmetric_autoscaling_options in autoscaling config), the - * node_count here is the maximum node count across all replicas. * * For more information, see * [Compute capacity, nodes, and processing @@ -806,6 +1033,7 @@ public int getNodeCount() { public static final int PROCESSING_UNITS_FIELD_NUMBER = 9; private int processingUnits_ = 0; + /** * * @@ -823,10 +1051,6 @@ public int getNodeCount() { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying processing units per replica - * (achieved by setting asymmetric_autoscaling_options in autoscaling config), - * the processing_units here is the maximum processing units across all - * replicas. * * For more information, see * [Compute capacity, nodes and processing @@ -847,6 +1071,7 @@ public int getProcessingUnits() { @SuppressWarnings("serial") private java.util.List replicaComputeCapacity_; + /** * * @@ -865,6 +1090,7 @@ public int getProcessingUnits() { getReplicaComputeCapacityList() { return replicaComputeCapacity_; } + /** * * @@ -884,6 +1110,7 @@ public int getProcessingUnits() { getReplicaComputeCapacityOrBuilderList() { return replicaComputeCapacity_; } + /** * * @@ -901,6 +1128,7 @@ public int getProcessingUnits() { public int getReplicaComputeCapacityCount() { return replicaComputeCapacity_.size(); } + /** * * @@ -919,6 +1147,7 @@ public com.google.spanner.admin.instance.v1.ReplicaComputeCapacity getReplicaCom int index) { return replicaComputeCapacity_.get(index); } + /** * * @@ -940,6 +1169,7 @@ public com.google.spanner.admin.instance.v1.ReplicaComputeCapacity getReplicaCom public static final int AUTOSCALING_CONFIG_FIELD_NUMBER = 17; private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; + /** * * @@ -960,6 +1190,7 @@ public com.google.spanner.admin.instance.v1.ReplicaComputeCapacity getReplicaCom public boolean hasAutoscalingConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -982,6 +1213,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf ? com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance() : autoscalingConfig_; } + /** * * @@ -1006,6 +1238,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf public static final int STATE_FIELD_NUMBER = 6; private int state_ = 0; + /** * * @@ -1027,6 +1260,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf public int getStateValue() { return state_; } + /** * * @@ -1079,6 +1313,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -1090,11 +1325,11 @@ public int getLabelsCount() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -1115,12 +1350,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(); } + /** * * @@ -1132,11 +1369,11 @@ public java.util.Map getLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -1154,6 +1391,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -1165,11 +1403,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -1194,6 +1432,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1205,11 +1444,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -1235,11 +1474,51 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { return map.get(key); } + public static final int INSTANCE_TYPE_FIELD_NUMBER = 10; + private int instanceType_ = 0; + + /** + * + * + *
                                +   * The `InstanceType` of the current instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @return The enum numeric value on the wire for instanceType. + */ + @java.lang.Override + public int getInstanceTypeValue() { + return instanceType_; + } + + /** + * + * + *
                                +   * The `InstanceType` of the current instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @return The instanceType. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.Instance.InstanceType getInstanceType() { + com.google.spanner.admin.instance.v1.Instance.InstanceType result = + com.google.spanner.admin.instance.v1.Instance.InstanceType.forNumber(instanceType_); + return result == null + ? com.google.spanner.admin.instance.v1.Instance.InstanceType.UNRECOGNIZED + : result; + } + public static final int ENDPOINT_URIS_FIELD_NUMBER = 8; @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -1254,6 +1533,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public com.google.protobuf.ProtocolStringList getEndpointUrisList() { return endpointUris_; } + /** * * @@ -1268,6 +1548,7 @@ public com.google.protobuf.ProtocolStringList getEndpointUrisList() { public int getEndpointUrisCount() { return endpointUris_.size(); } + /** * * @@ -1283,6 +1564,7 @@ public int getEndpointUrisCount() { public java.lang.String getEndpointUris(int index) { return endpointUris_.get(index); } + /** * * @@ -1301,6 +1583,7 @@ public com.google.protobuf.ByteString getEndpointUrisBytes(int index) { public static final int CREATE_TIME_FIELD_NUMBER = 11; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -1317,6 +1600,7 @@ public com.google.protobuf.ByteString getEndpointUrisBytes(int index) { public boolean hasCreateTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1333,6 +1617,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -1350,6 +1635,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public static final int UPDATE_TIME_FIELD_NUMBER = 12; private com.google.protobuf.Timestamp updateTime_; + /** * * @@ -1366,6 +1652,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasUpdateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1382,6 +1669,7 @@ public boolean hasUpdateTime() { public com.google.protobuf.Timestamp getUpdateTime() { return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_; } + /** * * @@ -1397,8 +1685,66 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_; } + public static final int FREE_INSTANCE_METADATA_FIELD_NUMBER = 13; + private com.google.spanner.admin.instance.v1.FreeInstanceMetadata freeInstanceMetadata_; + + /** + * + * + *
                                +   * Free instance metadata. Only populated for free instances.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + * + * @return Whether the freeInstanceMetadata field is set. + */ + @java.lang.Override + public boolean hasFreeInstanceMetadata() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +   * Free instance metadata. Only populated for free instances.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + * + * @return The freeInstanceMetadata. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata getFreeInstanceMetadata() { + return freeInstanceMetadata_ == null + ? com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDefaultInstance() + : freeInstanceMetadata_; + } + + /** + * + * + *
                                +   * Free instance metadata. Only populated for free instances.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FreeInstanceMetadataOrBuilder + getFreeInstanceMetadataOrBuilder() { + return freeInstanceMetadata_ == null + ? com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDefaultInstance() + : freeInstanceMetadata_; + } + public static final int EDITION_FIELD_NUMBER = 20; private int edition_ = 0; + /** * * @@ -1416,6 +1762,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { public int getEditionValue() { return edition_; } + /** * * @@ -1440,19 +1787,21 @@ public com.google.spanner.admin.instance.v1.Instance.Edition getEdition() { public static final int DEFAULT_BACKUP_SCHEDULE_TYPE_FIELD_NUMBER = 23; private int defaultBackupScheduleType_ = 0; + /** * * *
                                -   * Optional. Controls the default backup behavior for new databases within the
                                -   * instance.
                                +   * Optional. Controls the default backup schedule behavior for new databases
                                +   * within the instance. By default, a backup schedule is created automatically
                                +   * when a new database is created in a new instance.
                                    *
                                -   * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -   * backup schedules are not allowed for free instances.
                                +   * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +   * as backups and backup schedules aren't supported for free instances.
                                    *
                                    * In the `GetInstance` or `ListInstances` response, if the value of
                                -   * default_backup_schedule_type is unset or NONE, no default backup
                                -   * schedule will be created for new databases within the instance.
                                +   * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +   * create a default backup schedule for new databases in the instance.
                                    * 
                                * * @@ -1465,19 +1814,21 @@ public com.google.spanner.admin.instance.v1.Instance.Edition getEdition() { public int getDefaultBackupScheduleTypeValue() { return defaultBackupScheduleType_; } + /** * * *
                                -   * Optional. Controls the default backup behavior for new databases within the
                                -   * instance.
                                +   * Optional. Controls the default backup schedule behavior for new databases
                                +   * within the instance. By default, a backup schedule is created automatically
                                +   * when a new database is created in a new instance.
                                    *
                                -   * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -   * backup schedules are not allowed for free instances.
                                +   * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +   * as backups and backup schedules aren't supported for free instances.
                                    *
                                    * In the `GetInstance` or `ListInstances` response, if the value of
                                -   * default_backup_schedule_type is unset or NONE, no default backup
                                -   * schedule will be created for new databases within the instance.
                                +   * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +   * create a default backup schedule for new databases in the instance.
                                    * 
                                * * @@ -1511,14 +1862,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, config_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(config_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, config_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, displayName_); } if (nodeCount_ != 0) { output.writeInt32(5, nodeCount_); @@ -1527,20 +1878,28 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io != com.google.spanner.admin.instance.v1.Instance.State.STATE_UNSPECIFIED.getNumber()) { output.writeEnum(6, state_); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 7); for (int i = 0; i < endpointUris_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 8, endpointUris_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 8, endpointUris_.getRaw(i)); } if (processingUnits_ != 0) { output.writeInt32(9, processingUnits_); } + if (instanceType_ + != com.google.spanner.admin.instance.v1.Instance.InstanceType.INSTANCE_TYPE_UNSPECIFIED + .getNumber()) { + output.writeEnum(10, instanceType_); + } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(11, getCreateTime()); } if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(12, getUpdateTime()); } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(13, getFreeInstanceMetadata()); + } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(17, getAutoscalingConfig()); } @@ -1566,14 +1925,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, config_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(config_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, config_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, displayName_); } if (nodeCount_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(5, nodeCount_); @@ -1603,12 +1962,21 @@ public int getSerializedSize() { if (processingUnits_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(9, processingUnits_); } + if (instanceType_ + != com.google.spanner.admin.instance.v1.Instance.InstanceType.INSTANCE_TYPE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(10, instanceType_); + } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, getCreateTime()); } if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(12, getUpdateTime()); } + if (((bitField0_ & 0x00000008) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(13, getFreeInstanceMetadata()); + } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(17, getAutoscalingConfig()); } @@ -1656,6 +2024,7 @@ public boolean equals(final java.lang.Object obj) { } if (state_ != other.state_) return false; if (!internalGetLabels().equals(other.internalGetLabels())) return false; + if (instanceType_ != other.instanceType_) return false; if (!getEndpointUrisList().equals(other.getEndpointUrisList())) return false; if (hasCreateTime() != other.hasCreateTime()) return false; if (hasCreateTime()) { @@ -1665,6 +2034,10 @@ public boolean equals(final java.lang.Object obj) { if (hasUpdateTime()) { if (!getUpdateTime().equals(other.getUpdateTime())) return false; } + if (hasFreeInstanceMetadata() != other.hasFreeInstanceMetadata()) return false; + if (hasFreeInstanceMetadata()) { + if (!getFreeInstanceMetadata().equals(other.getFreeInstanceMetadata())) return false; + } if (edition_ != other.edition_) return false; if (defaultBackupScheduleType_ != other.defaultBackupScheduleType_) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; @@ -1702,6 +2075,8 @@ public int hashCode() { hash = (37 * hash) + LABELS_FIELD_NUMBER; hash = (53 * hash) + internalGetLabels().hashCode(); } + hash = (37 * hash) + INSTANCE_TYPE_FIELD_NUMBER; + hash = (53 * hash) + instanceType_; if (getEndpointUrisCount() > 0) { hash = (37 * hash) + ENDPOINT_URIS_FIELD_NUMBER; hash = (53 * hash) + getEndpointUrisList().hashCode(); @@ -1714,6 +2089,10 @@ public int hashCode() { hash = (37 * hash) + UPDATE_TIME_FIELD_NUMBER; hash = (53 * hash) + getUpdateTime().hashCode(); } + if (hasFreeInstanceMetadata()) { + hash = (37 * hash) + FREE_INSTANCE_METADATA_FIELD_NUMBER; + hash = (53 * hash) + getFreeInstanceMetadata().hashCode(); + } hash = (37 * hash) + EDITION_FIELD_NUMBER; hash = (53 * hash) + edition_; hash = (37 * hash) + DEFAULT_BACKUP_SCHEDULE_TYPE_FIELD_NUMBER; @@ -1760,38 +2139,38 @@ public static com.google.spanner.admin.instance.v1.Instance parseFrom( public static com.google.spanner.admin.instance.v1.Instance parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.Instance parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.Instance parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.Instance parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.Instance parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.Instance parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1814,10 +2193,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1827,7 +2207,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.Instance} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.Instance) com.google.spanner.admin.instance.v1.InstanceOrBuilder { @@ -1859,7 +2239,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_Instance_fieldAccessorTable @@ -1873,17 +2253,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getReplicaComputeCapacityFieldBuilder(); - getAutoscalingConfigFieldBuilder(); - getCreateTimeFieldBuilder(); - getUpdateTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetReplicaComputeCapacityFieldBuilder(); + internalGetAutoscalingConfigFieldBuilder(); + internalGetCreateTimeFieldBuilder(); + internalGetUpdateTimeFieldBuilder(); + internalGetFreeInstanceMetadataFieldBuilder(); } } @@ -1910,6 +2291,7 @@ public Builder clear() { } state_ = 0; internalGetMutableLabels().clear(); + instanceType_ = 0; endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); createTime_ = null; if (createTimeBuilder_ != null) { @@ -1921,6 +2303,11 @@ public Builder clear() { updateTimeBuilder_.dispose(); updateTimeBuilder_ = null; } + freeInstanceMetadata_ = null; + if (freeInstanceMetadataBuilder_ != null) { + freeInstanceMetadataBuilder_.dispose(); + freeInstanceMetadataBuilder_ = null; + } edition_ = 0; defaultBackupScheduleType_ = 0; return this; @@ -2003,59 +2390,36 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.Instance result) result.labels_.makeImmutable(); } if (((from_bitField0_ & 0x00000200) != 0)) { + result.instanceType_ = instanceType_; + } + if (((from_bitField0_ & 0x00000400) != 0)) { endpointUris_.makeImmutable(); result.endpointUris_ = endpointUris_; } - if (((from_bitField0_ & 0x00000400) != 0)) { + if (((from_bitField0_ & 0x00000800) != 0)) { result.createTime_ = createTimeBuilder_ == null ? createTime_ : createTimeBuilder_.build(); to_bitField0_ |= 0x00000002; } - if (((from_bitField0_ & 0x00000800) != 0)) { + if (((from_bitField0_ & 0x00001000) != 0)) { result.updateTime_ = updateTimeBuilder_ == null ? updateTime_ : updateTimeBuilder_.build(); to_bitField0_ |= 0x00000004; } - if (((from_bitField0_ & 0x00001000) != 0)) { + if (((from_bitField0_ & 0x00002000) != 0)) { + result.freeInstanceMetadata_ = + freeInstanceMetadataBuilder_ == null + ? freeInstanceMetadata_ + : freeInstanceMetadataBuilder_.build(); + to_bitField0_ |= 0x00000008; + } + if (((from_bitField0_ & 0x00004000) != 0)) { result.edition_ = edition_; } - if (((from_bitField0_ & 0x00002000) != 0)) { + if (((from_bitField0_ & 0x00008000) != 0)) { result.defaultBackupScheduleType_ = defaultBackupScheduleType_; } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.Instance) { @@ -2108,8 +2472,8 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.Instance other) { replicaComputeCapacity_ = other.replicaComputeCapacity_; bitField0_ = (bitField0_ & ~0x00000020); replicaComputeCapacityBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getReplicaComputeCapacityFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetReplicaComputeCapacityFieldBuilder() : null; } else { replicaComputeCapacityBuilder_.addAllMessages(other.replicaComputeCapacity_); @@ -2124,10 +2488,13 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.Instance other) { } internalGetMutableLabels().mergeFrom(other.internalGetLabels()); bitField0_ |= 0x00000100; + if (other.instanceType_ != 0) { + setInstanceTypeValue(other.getInstanceTypeValue()); + } if (!other.endpointUris_.isEmpty()) { if (endpointUris_.isEmpty()) { endpointUris_ = other.endpointUris_; - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; } else { ensureEndpointUrisIsMutable(); endpointUris_.addAll(other.endpointUris_); @@ -2140,6 +2507,9 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.Instance other) { if (other.hasUpdateTime()) { mergeUpdateTime(other.getUpdateTime()); } + if (other.hasFreeInstanceMetadata()) { + mergeFreeInstanceMetadata(other.getFreeInstanceMetadata()); + } if (other.edition_ != 0) { setEditionValue(other.getEditionValue()); } @@ -2227,22 +2597,37 @@ public Builder mergeFrom( bitField0_ |= 0x00000010; break; } // case 72 + case 80: + { + instanceType_ = input.readEnum(); + bitField0_ |= 0x00000200; + break; + } // case 80 case 90: { - input.readMessage(getCreateTimeFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000400; + input.readMessage( + internalGetCreateTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000800; break; } // case 90 case 98: { - input.readMessage(getUpdateTimeFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000800; + input.readMessage( + internalGetUpdateTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00001000; break; } // case 98 + case 106: + { + input.readMessage( + internalGetFreeInstanceMetadataFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00002000; + break; + } // case 106 case 138: { input.readMessage( - getAutoscalingConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetAutoscalingConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000040; break; } // case 138 @@ -2263,13 +2648,13 @@ public Builder mergeFrom( case 160: { edition_ = input.readEnum(); - bitField0_ |= 0x00001000; + bitField0_ |= 0x00004000; break; } // case 160 case 184: { defaultBackupScheduleType_ = input.readEnum(); - bitField0_ |= 0x00002000; + bitField0_ |= 0x00008000; break; } // case 184 default: @@ -2292,6 +2677,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -2317,6 +2703,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -2342,6 +2729,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2366,6 +2754,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2386,6 +2775,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -2413,6 +2803,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object config_ = ""; + /** * * @@ -2440,6 +2831,7 @@ public java.lang.String getConfig() { return (java.lang.String) ref; } } + /** * * @@ -2467,6 +2859,7 @@ public com.google.protobuf.ByteString getConfigBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2493,6 +2886,7 @@ public Builder setConfig(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2515,6 +2909,7 @@ public Builder clearConfig() { onChanged(); return this; } + /** * * @@ -2544,6 +2939,7 @@ public Builder setConfigBytes(com.google.protobuf.ByteString value) { } private java.lang.Object displayName_ = ""; + /** * * @@ -2567,6 +2963,7 @@ public java.lang.String getDisplayName() { return (java.lang.String) ref; } } + /** * * @@ -2590,6 +2987,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2612,6 +3010,7 @@ public Builder setDisplayName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2630,6 +3029,7 @@ public Builder clearDisplayName() { onChanged(); return this; } + /** * * @@ -2655,6 +3055,7 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { } private int nodeCount_; + /** * * @@ -2671,9 +3072,6 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying node count across replicas (achieved by - * setting asymmetric_autoscaling_options in autoscaling config), the - * node_count here is the maximum node count across all replicas. * * For more information, see * [Compute capacity, nodes, and processing @@ -2688,6 +3086,7 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { public int getNodeCount() { return nodeCount_; } + /** * * @@ -2704,9 +3103,6 @@ public int getNodeCount() { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying node count across replicas (achieved by - * setting asymmetric_autoscaling_options in autoscaling config), the - * node_count here is the maximum node count across all replicas. * * For more information, see * [Compute capacity, nodes, and processing @@ -2725,6 +3121,7 @@ public Builder setNodeCount(int value) { onChanged(); return this; } + /** * * @@ -2741,9 +3138,6 @@ public Builder setNodeCount(int value) { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying node count across replicas (achieved by - * setting asymmetric_autoscaling_options in autoscaling config), the - * node_count here is the maximum node count across all replicas. * * For more information, see * [Compute capacity, nodes, and processing @@ -2762,6 +3156,7 @@ public Builder clearNodeCount() { } private int processingUnits_; + /** * * @@ -2779,10 +3174,6 @@ public Builder clearNodeCount() { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying processing units per replica - * (achieved by setting asymmetric_autoscaling_options in autoscaling config), - * the processing_units here is the maximum processing units across all - * replicas. * * For more information, see * [Compute capacity, nodes and processing @@ -2797,6 +3188,7 @@ public Builder clearNodeCount() { public int getProcessingUnits() { return processingUnits_; } + /** * * @@ -2814,10 +3206,6 @@ public int getProcessingUnits() { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying processing units per replica - * (achieved by setting asymmetric_autoscaling_options in autoscaling config), - * the processing_units here is the maximum processing units across all - * replicas. * * For more information, see * [Compute capacity, nodes and processing @@ -2836,6 +3224,7 @@ public Builder setProcessingUnits(int value) { onChanged(); return this; } + /** * * @@ -2853,10 +3242,6 @@ public Builder setProcessingUnits(int value) { * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying processing units per replica - * (achieved by setting asymmetric_autoscaling_options in autoscaling config), - * the processing_units here is the maximum processing units across all - * replicas. * * For more information, see * [Compute capacity, nodes and processing @@ -2886,7 +3271,7 @@ private void ensureReplicaComputeCapacityIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaComputeCapacity, com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.Builder, com.google.spanner.admin.instance.v1.ReplicaComputeCapacityOrBuilder> @@ -2913,6 +3298,7 @@ private void ensureReplicaComputeCapacityIsMutable() { return replicaComputeCapacityBuilder_.getMessageList(); } } + /** * * @@ -2933,6 +3319,7 @@ public int getReplicaComputeCapacityCount() { return replicaComputeCapacityBuilder_.getCount(); } } + /** * * @@ -2954,6 +3341,7 @@ public com.google.spanner.admin.instance.v1.ReplicaComputeCapacity getReplicaCom return replicaComputeCapacityBuilder_.getMessage(index); } } + /** * * @@ -2981,6 +3369,7 @@ public Builder setReplicaComputeCapacity( } return this; } + /** * * @@ -3006,6 +3395,7 @@ public Builder setReplicaComputeCapacity( } return this; } + /** * * @@ -3033,6 +3423,7 @@ public Builder addReplicaComputeCapacity( } return this; } + /** * * @@ -3060,6 +3451,7 @@ public Builder addReplicaComputeCapacity( } return this; } + /** * * @@ -3084,6 +3476,7 @@ public Builder addReplicaComputeCapacity( } return this; } + /** * * @@ -3109,6 +3502,7 @@ public Builder addReplicaComputeCapacity( } return this; } + /** * * @@ -3134,6 +3528,7 @@ public Builder addAllReplicaComputeCapacity( } return this; } + /** * * @@ -3157,6 +3552,7 @@ public Builder clearReplicaComputeCapacity() { } return this; } + /** * * @@ -3180,6 +3576,7 @@ public Builder removeReplicaComputeCapacity(int index) { } return this; } + /** * * @@ -3195,8 +3592,9 @@ public Builder removeReplicaComputeCapacity(int index) { */ public com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.Builder getReplicaComputeCapacityBuilder(int index) { - return getReplicaComputeCapacityFieldBuilder().getBuilder(index); + return internalGetReplicaComputeCapacityFieldBuilder().getBuilder(index); } + /** * * @@ -3218,6 +3616,7 @@ public Builder removeReplicaComputeCapacity(int index) { return replicaComputeCapacityBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3240,6 +3639,7 @@ public Builder removeReplicaComputeCapacity(int index) { return java.util.Collections.unmodifiableList(replicaComputeCapacity_); } } + /** * * @@ -3255,10 +3655,11 @@ public Builder removeReplicaComputeCapacity(int index) { */ public com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.Builder addReplicaComputeCapacityBuilder() { - return getReplicaComputeCapacityFieldBuilder() + return internalGetReplicaComputeCapacityFieldBuilder() .addBuilder( com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.getDefaultInstance()); } + /** * * @@ -3274,11 +3675,12 @@ public Builder removeReplicaComputeCapacity(int index) { */ public com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.Builder addReplicaComputeCapacityBuilder(int index) { - return getReplicaComputeCapacityFieldBuilder() + return internalGetReplicaComputeCapacityFieldBuilder() .addBuilder( index, com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.getDefaultInstance()); } + /** * * @@ -3294,17 +3696,17 @@ public Builder removeReplicaComputeCapacity(int index) { */ public java.util.List getReplicaComputeCapacityBuilderList() { - return getReplicaComputeCapacityFieldBuilder().getBuilderList(); + return internalGetReplicaComputeCapacityFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaComputeCapacity, com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.Builder, com.google.spanner.admin.instance.v1.ReplicaComputeCapacityOrBuilder> - getReplicaComputeCapacityFieldBuilder() { + internalGetReplicaComputeCapacityFieldBuilder() { if (replicaComputeCapacityBuilder_ == null) { replicaComputeCapacityBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaComputeCapacity, com.google.spanner.admin.instance.v1.ReplicaComputeCapacity.Builder, com.google.spanner.admin.instance.v1.ReplicaComputeCapacityOrBuilder>( @@ -3318,11 +3720,12 @@ public Builder removeReplicaComputeCapacity(int index) { } private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> autoscalingConfigBuilder_; + /** * * @@ -3342,6 +3745,7 @@ public Builder removeReplicaComputeCapacity(int index) { public boolean hasAutoscalingConfig() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -3367,6 +3771,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf return autoscalingConfigBuilder_.getMessage(); } } + /** * * @@ -3395,6 +3800,7 @@ public Builder setAutoscalingConfig( onChanged(); return this; } + /** * * @@ -3420,6 +3826,7 @@ public Builder setAutoscalingConfig( onChanged(); return this; } + /** * * @@ -3454,6 +3861,7 @@ public Builder mergeAutoscalingConfig( } return this; } + /** * * @@ -3478,6 +3886,7 @@ public Builder clearAutoscalingConfig() { onChanged(); return this; } + /** * * @@ -3496,8 +3905,9 @@ public Builder clearAutoscalingConfig() { getAutoscalingConfigBuilder() { bitField0_ |= 0x00000040; onChanged(); - return getAutoscalingConfigFieldBuilder().getBuilder(); + return internalGetAutoscalingConfigFieldBuilder().getBuilder(); } + /** * * @@ -3522,6 +3932,7 @@ public Builder clearAutoscalingConfig() { : autoscalingConfig_; } } + /** * * @@ -3536,14 +3947,14 @@ public Builder clearAutoscalingConfig() { * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 17 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> - getAutoscalingConfigFieldBuilder() { + internalGetAutoscalingConfigFieldBuilder() { if (autoscalingConfigBuilder_ == null) { autoscalingConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder>( @@ -3554,6 +3965,7 @@ public Builder clearAutoscalingConfig() { } private int state_ = 0; + /** * * @@ -3575,6 +3987,7 @@ public Builder clearAutoscalingConfig() { public int getStateValue() { return state_; } + /** * * @@ -3599,6 +4012,7 @@ public Builder setStateValue(int value) { onChanged(); return this; } + /** * * @@ -3624,6 +4038,7 @@ public com.google.spanner.admin.instance.v1.Instance.State getState() { ? com.google.spanner.admin.instance.v1.Instance.State.UNRECOGNIZED : result; } + /** * * @@ -3651,6 +4066,7 @@ public Builder setState(com.google.spanner.admin.instance.v1.Instance.State valu onChanged(); return this; } + /** * * @@ -3700,6 +4116,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -3711,11 +4128,11 @@ public int getLabelsCount() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3736,12 +4153,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(); } + /** * * @@ -3753,11 +4172,11 @@ public java.util.Map getLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3775,6 +4194,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -3786,11 +4206,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3815,6 +4235,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -3826,11 +4247,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3861,6 +4282,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -3872,11 +4294,11 @@ public Builder clearLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3897,12 +4319,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_ |= 0x00000100; return internalGetMutableLabels().getMutableMap(); } + /** * * @@ -3914,11 +4338,11 @@ public java.util.Map getMutableLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3943,6 +4367,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000100; return this; } + /** * * @@ -3954,11 +4379,11 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3978,6 +4403,104 @@ public Builder putAllLabels(java.util.Map va return this; } + private int instanceType_ = 0; + + /** + * + * + *
                                +     * The `InstanceType` of the current instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @return The enum numeric value on the wire for instanceType. + */ + @java.lang.Override + public int getInstanceTypeValue() { + return instanceType_; + } + + /** + * + * + *
                                +     * The `InstanceType` of the current instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @param value The enum numeric value on the wire for instanceType to set. + * @return This builder for chaining. + */ + public Builder setInstanceTypeValue(int value) { + instanceType_ = value; + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The `InstanceType` of the current instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @return The instanceType. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.Instance.InstanceType getInstanceType() { + com.google.spanner.admin.instance.v1.Instance.InstanceType result = + com.google.spanner.admin.instance.v1.Instance.InstanceType.forNumber(instanceType_); + return result == null + ? com.google.spanner.admin.instance.v1.Instance.InstanceType.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +     * The `InstanceType` of the current instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @param value The instanceType to set. + * @return This builder for chaining. + */ + public Builder setInstanceType( + com.google.spanner.admin.instance.v1.Instance.InstanceType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000200; + instanceType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The `InstanceType` of the current instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @return This builder for chaining. + */ + public Builder clearInstanceType() { + bitField0_ = (bitField0_ & ~0x00000200); + instanceType_ = 0; + onChanged(); + return this; + } + private com.google.protobuf.LazyStringArrayList endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); @@ -3985,8 +4508,9 @@ private void ensureEndpointUrisIsMutable() { if (!endpointUris_.isModifiable()) { endpointUris_ = new com.google.protobuf.LazyStringArrayList(endpointUris_); } - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; } + /** * * @@ -4002,6 +4526,7 @@ public com.google.protobuf.ProtocolStringList getEndpointUrisList() { endpointUris_.makeImmutable(); return endpointUris_; } + /** * * @@ -4016,6 +4541,7 @@ public com.google.protobuf.ProtocolStringList getEndpointUrisList() { public int getEndpointUrisCount() { return endpointUris_.size(); } + /** * * @@ -4031,6 +4557,7 @@ public int getEndpointUrisCount() { public java.lang.String getEndpointUris(int index) { return endpointUris_.get(index); } + /** * * @@ -4046,6 +4573,7 @@ public java.lang.String getEndpointUris(int index) { public com.google.protobuf.ByteString getEndpointUrisBytes(int index) { return endpointUris_.getByteString(index); } + /** * * @@ -4065,10 +4593,11 @@ public Builder setEndpointUris(int index, java.lang.String value) { } ensureEndpointUrisIsMutable(); endpointUris_.set(index, value); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } + /** * * @@ -4087,10 +4616,11 @@ public Builder addEndpointUris(java.lang.String value) { } ensureEndpointUrisIsMutable(); endpointUris_.add(value); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } + /** * * @@ -4106,10 +4636,11 @@ public Builder addEndpointUris(java.lang.String value) { public Builder addAllEndpointUris(java.lang.Iterable values) { ensureEndpointUrisIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, endpointUris_); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } + /** * * @@ -4123,11 +4654,12 @@ public Builder addAllEndpointUris(java.lang.Iterable values) { */ public Builder clearEndpointUris() { endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); - bitField0_ = (bitField0_ & ~0x00000200); + bitField0_ = (bitField0_ & ~0x00000400); ; onChanged(); return this; } + /** * * @@ -4147,17 +4679,18 @@ public Builder addEndpointUrisBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureEndpointUrisIsMutable(); endpointUris_.add(value); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } private com.google.protobuf.Timestamp createTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -4172,8 +4705,9 @@ public Builder addEndpointUrisBytes(com.google.protobuf.ByteString value) { * @return Whether the createTime field is set. */ public boolean hasCreateTime() { - return ((bitField0_ & 0x00000400) != 0); + return ((bitField0_ & 0x00000800) != 0); } + /** * * @@ -4196,6 +4730,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -4216,10 +4751,11 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { } else { createTimeBuilder_.setMessage(value); } - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; onChanged(); return this; } + /** * * @@ -4237,10 +4773,11 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal } else { createTimeBuilder_.setMessage(builderForValue.build()); } - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; onChanged(); return this; } + /** * * @@ -4254,7 +4791,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal */ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { if (createTimeBuilder_ == null) { - if (((bitField0_ & 0x00000400) != 0) + if (((bitField0_ & 0x00000800) != 0) && createTime_ != null && createTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { getCreateTimeBuilder().mergeFrom(value); @@ -4265,11 +4802,12 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { createTimeBuilder_.mergeFrom(value); } if (createTime_ != null) { - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; onChanged(); } return this; } + /** * * @@ -4282,7 +4820,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { *
                                */ public Builder clearCreateTime() { - bitField0_ = (bitField0_ & ~0x00000400); + bitField0_ = (bitField0_ & ~0x00000800); createTime_ = null; if (createTimeBuilder_ != null) { createTimeBuilder_.dispose(); @@ -4291,6 +4829,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -4303,10 +4842,11 @@ public Builder clearCreateTime() { * */ public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; onChanged(); - return getCreateTimeFieldBuilder().getBuilder(); + return internalGetCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -4327,6 +4867,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -4338,14 +4879,14 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * .google.protobuf.Timestamp create_time = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreateTimeFieldBuilder() { + internalGetCreateTimeFieldBuilder() { if (createTimeBuilder_ == null) { createTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -4356,11 +4897,12 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { } private com.google.protobuf.Timestamp updateTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updateTimeBuilder_; + /** * * @@ -4375,8 +4917,9 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * @return Whether the updateTime field is set. */ public boolean hasUpdateTime() { - return ((bitField0_ & 0x00000800) != 0); + return ((bitField0_ & 0x00001000) != 0); } + /** * * @@ -4399,6 +4942,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { return updateTimeBuilder_.getMessage(); } } + /** * * @@ -4419,10 +4963,11 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp value) { } else { updateTimeBuilder_.setMessage(value); } - bitField0_ |= 0x00000800; + bitField0_ |= 0x00001000; onChanged(); return this; } + /** * * @@ -4440,10 +4985,11 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal } else { updateTimeBuilder_.setMessage(builderForValue.build()); } - bitField0_ |= 0x00000800; + bitField0_ |= 0x00001000; onChanged(); return this; } + /** * * @@ -4457,7 +5003,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal */ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { if (updateTimeBuilder_ == null) { - if (((bitField0_ & 0x00000800) != 0) + if (((bitField0_ & 0x00001000) != 0) && updateTime_ != null && updateTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { getUpdateTimeBuilder().mergeFrom(value); @@ -4468,11 +5014,12 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { updateTimeBuilder_.mergeFrom(value); } if (updateTime_ != null) { - bitField0_ |= 0x00000800; + bitField0_ |= 0x00001000; onChanged(); } return this; } + /** * * @@ -4485,7 +5032,7 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { * */ public Builder clearUpdateTime() { - bitField0_ = (bitField0_ & ~0x00000800); + bitField0_ = (bitField0_ & ~0x00001000); updateTime_ = null; if (updateTimeBuilder_ != null) { updateTimeBuilder_.dispose(); @@ -4494,6 +5041,7 @@ public Builder clearUpdateTime() { onChanged(); return this; } + /** * * @@ -4506,10 +5054,11 @@ public Builder clearUpdateTime() { * */ public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() { - bitField0_ |= 0x00000800; + bitField0_ |= 0x00001000; onChanged(); - return getUpdateTimeFieldBuilder().getBuilder(); + return internalGetUpdateTimeFieldBuilder().getBuilder(); } + /** * * @@ -4530,6 +5079,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { : updateTime_; } } + /** * * @@ -4541,14 +5091,14 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { * .google.protobuf.Timestamp update_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getUpdateTimeFieldBuilder() { + internalGetUpdateTimeFieldBuilder() { if (updateTimeBuilder_ == null) { updateTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -4558,7 +5108,217 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { return updateTimeBuilder_; } + private com.google.spanner.admin.instance.v1.FreeInstanceMetadata freeInstanceMetadata_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.FreeInstanceMetadata, + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.Builder, + com.google.spanner.admin.instance.v1.FreeInstanceMetadataOrBuilder> + freeInstanceMetadataBuilder_; + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + * + * @return Whether the freeInstanceMetadata field is set. + */ + public boolean hasFreeInstanceMetadata() { + return ((bitField0_ & 0x00002000) != 0); + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + * + * @return The freeInstanceMetadata. + */ + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata getFreeInstanceMetadata() { + if (freeInstanceMetadataBuilder_ == null) { + return freeInstanceMetadata_ == null + ? com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDefaultInstance() + : freeInstanceMetadata_; + } else { + return freeInstanceMetadataBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + public Builder setFreeInstanceMetadata( + com.google.spanner.admin.instance.v1.FreeInstanceMetadata value) { + if (freeInstanceMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + freeInstanceMetadata_ = value; + } else { + freeInstanceMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00002000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + public Builder setFreeInstanceMetadata( + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.Builder builderForValue) { + if (freeInstanceMetadataBuilder_ == null) { + freeInstanceMetadata_ = builderForValue.build(); + } else { + freeInstanceMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00002000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + public Builder mergeFreeInstanceMetadata( + com.google.spanner.admin.instance.v1.FreeInstanceMetadata value) { + if (freeInstanceMetadataBuilder_ == null) { + if (((bitField0_ & 0x00002000) != 0) + && freeInstanceMetadata_ != null + && freeInstanceMetadata_ + != com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDefaultInstance()) { + getFreeInstanceMetadataBuilder().mergeFrom(value); + } else { + freeInstanceMetadata_ = value; + } + } else { + freeInstanceMetadataBuilder_.mergeFrom(value); + } + if (freeInstanceMetadata_ != null) { + bitField0_ |= 0x00002000; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + public Builder clearFreeInstanceMetadata() { + bitField0_ = (bitField0_ & ~0x00002000); + freeInstanceMetadata_ = null; + if (freeInstanceMetadataBuilder_ != null) { + freeInstanceMetadataBuilder_.dispose(); + freeInstanceMetadataBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + public com.google.spanner.admin.instance.v1.FreeInstanceMetadata.Builder + getFreeInstanceMetadataBuilder() { + bitField0_ |= 0x00002000; + onChanged(); + return internalGetFreeInstanceMetadataFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + public com.google.spanner.admin.instance.v1.FreeInstanceMetadataOrBuilder + getFreeInstanceMetadataOrBuilder() { + if (freeInstanceMetadataBuilder_ != null) { + return freeInstanceMetadataBuilder_.getMessageOrBuilder(); + } else { + return freeInstanceMetadata_ == null + ? com.google.spanner.admin.instance.v1.FreeInstanceMetadata.getDefaultInstance() + : freeInstanceMetadata_; + } + } + + /** + * + * + *
                                +     * Free instance metadata. Only populated for free instances.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.FreeInstanceMetadata, + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.Builder, + com.google.spanner.admin.instance.v1.FreeInstanceMetadataOrBuilder> + internalGetFreeInstanceMetadataFieldBuilder() { + if (freeInstanceMetadataBuilder_ == null) { + freeInstanceMetadataBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.FreeInstanceMetadata, + com.google.spanner.admin.instance.v1.FreeInstanceMetadata.Builder, + com.google.spanner.admin.instance.v1.FreeInstanceMetadataOrBuilder>( + getFreeInstanceMetadata(), getParentForChildren(), isClean()); + freeInstanceMetadata_ = null; + } + return freeInstanceMetadataBuilder_; + } + private int edition_ = 0; + /** * * @@ -4576,6 +5336,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { public int getEditionValue() { return edition_; } + /** * * @@ -4592,10 +5353,11 @@ public int getEditionValue() { */ public Builder setEditionValue(int value) { edition_ = value; - bitField0_ |= 0x00001000; + bitField0_ |= 0x00004000; onChanged(); return this; } + /** * * @@ -4617,6 +5379,7 @@ public com.google.spanner.admin.instance.v1.Instance.Edition getEdition() { ? com.google.spanner.admin.instance.v1.Instance.Edition.UNRECOGNIZED : result; } + /** * * @@ -4635,11 +5398,12 @@ public Builder setEdition(com.google.spanner.admin.instance.v1.Instance.Edition if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00001000; + bitField0_ |= 0x00004000; edition_ = value.getNumber(); onChanged(); return this; } + /** * * @@ -4654,26 +5418,28 @@ public Builder setEdition(com.google.spanner.admin.instance.v1.Instance.Edition * @return This builder for chaining. */ public Builder clearEdition() { - bitField0_ = (bitField0_ & ~0x00001000); + bitField0_ = (bitField0_ & ~0x00004000); edition_ = 0; onChanged(); return this; } private int defaultBackupScheduleType_ = 0; + /** * * *
                                -     * Optional. Controls the default backup behavior for new databases within the
                                -     * instance.
                                +     * Optional. Controls the default backup schedule behavior for new databases
                                +     * within the instance. By default, a backup schedule is created automatically
                                +     * when a new database is created in a new instance.
                                      *
                                -     * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -     * backup schedules are not allowed for free instances.
                                +     * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +     * as backups and backup schedules aren't supported for free instances.
                                      *
                                      * In the `GetInstance` or `ListInstances` response, if the value of
                                -     * default_backup_schedule_type is unset or NONE, no default backup
                                -     * schedule will be created for new databases within the instance.
                                +     * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +     * create a default backup schedule for new databases in the instance.
                                      * 
                                * * @@ -4686,19 +5452,21 @@ public Builder clearEdition() { public int getDefaultBackupScheduleTypeValue() { return defaultBackupScheduleType_; } + /** * * *
                                -     * Optional. Controls the default backup behavior for new databases within the
                                -     * instance.
                                +     * Optional. Controls the default backup schedule behavior for new databases
                                +     * within the instance. By default, a backup schedule is created automatically
                                +     * when a new database is created in a new instance.
                                      *
                                -     * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -     * backup schedules are not allowed for free instances.
                                +     * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +     * as backups and backup schedules aren't supported for free instances.
                                      *
                                      * In the `GetInstance` or `ListInstances` response, if the value of
                                -     * default_backup_schedule_type is unset or NONE, no default backup
                                -     * schedule will be created for new databases within the instance.
                                +     * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +     * create a default backup schedule for new databases in the instance.
                                      * 
                                * * @@ -4710,23 +5478,25 @@ public int getDefaultBackupScheduleTypeValue() { */ public Builder setDefaultBackupScheduleTypeValue(int value) { defaultBackupScheduleType_ = value; - bitField0_ |= 0x00002000; + bitField0_ |= 0x00008000; onChanged(); return this; } + /** * * *
                                -     * Optional. Controls the default backup behavior for new databases within the
                                -     * instance.
                                +     * Optional. Controls the default backup schedule behavior for new databases
                                +     * within the instance. By default, a backup schedule is created automatically
                                +     * when a new database is created in a new instance.
                                      *
                                -     * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -     * backup schedules are not allowed for free instances.
                                +     * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +     * as backups and backup schedules aren't supported for free instances.
                                      *
                                      * In the `GetInstance` or `ListInstances` response, if the value of
                                -     * default_backup_schedule_type is unset or NONE, no default backup
                                -     * schedule will be created for new databases within the instance.
                                +     * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +     * create a default backup schedule for new databases in the instance.
                                      * 
                                * * @@ -4745,19 +5515,21 @@ public Builder setDefaultBackupScheduleTypeValue(int value) { ? com.google.spanner.admin.instance.v1.Instance.DefaultBackupScheduleType.UNRECOGNIZED : result; } + /** * * *
                                -     * Optional. Controls the default backup behavior for new databases within the
                                -     * instance.
                                +     * Optional. Controls the default backup schedule behavior for new databases
                                +     * within the instance. By default, a backup schedule is created automatically
                                +     * when a new database is created in a new instance.
                                      *
                                -     * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -     * backup schedules are not allowed for free instances.
                                +     * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +     * as backups and backup schedules aren't supported for free instances.
                                      *
                                      * In the `GetInstance` or `ListInstances` response, if the value of
                                -     * default_backup_schedule_type is unset or NONE, no default backup
                                -     * schedule will be created for new databases within the instance.
                                +     * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +     * create a default backup schedule for new databases in the instance.
                                      * 
                                * * @@ -4772,24 +5544,26 @@ public Builder setDefaultBackupScheduleType( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00002000; + bitField0_ |= 0x00008000; defaultBackupScheduleType_ = value.getNumber(); onChanged(); return this; } + /** * * *
                                -     * Optional. Controls the default backup behavior for new databases within the
                                -     * instance.
                                +     * Optional. Controls the default backup schedule behavior for new databases
                                +     * within the instance. By default, a backup schedule is created automatically
                                +     * when a new database is created in a new instance.
                                      *
                                -     * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -     * backup schedules are not allowed for free instances.
                                +     * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +     * as backups and backup schedules aren't supported for free instances.
                                      *
                                      * In the `GetInstance` or `ListInstances` response, if the value of
                                -     * default_backup_schedule_type is unset or NONE, no default backup
                                -     * schedule will be created for new databases within the instance.
                                +     * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +     * create a default backup schedule for new databases in the instance.
                                      * 
                                * * @@ -4799,23 +5573,12 @@ public Builder setDefaultBackupScheduleType( * @return This builder for chaining. */ public Builder clearDefaultBackupScheduleType() { - bitField0_ = (bitField0_ & ~0x00002000); + bitField0_ = (bitField0_ & ~0x00008000); defaultBackupScheduleType_ = 0; onChanged(); return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.Instance) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java index fe9c5c59c31..ce4845c4b0d 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.InstanceConfig} */ -public final class InstanceConfig extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class InstanceConfig extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.InstanceConfig) InstanceConfigOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "InstanceConfig"); + } + // Use InstanceConfig.newBuilder() to construct. - private InstanceConfig(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private InstanceConfig(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -49,12 +62,8 @@ private InstanceConfig() { etag_ = ""; leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); state_ = 0; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new InstanceConfig(); + freeInstanceAvailability_ = 0; + quorumType_ = 0; } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @@ -75,7 +84,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_InstanceConfig_fieldAccessorTable @@ -108,7 +117,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * * *
                                -     * Google managed configuration.
                                +     * Google-managed configuration.
                                      * 
                                * * GOOGLE_MANAGED = 1; @@ -118,7 +127,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * * *
                                -     * User managed configuration.
                                +     * User-managed configuration.
                                      * 
                                * * USER_MANAGED = 2; @@ -127,6 +136,16 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Type"); + } + /** * * @@ -137,21 +156,23 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * TYPE_UNSPECIFIED = 0; */ public static final int TYPE_UNSPECIFIED_VALUE = 0; + /** * * *
                                -     * Google managed configuration.
                                +     * Google-managed configuration.
                                      * 
                                * * GOOGLE_MANAGED = 1; */ public static final int GOOGLE_MANAGED_VALUE = 1; + /** * * *
                                -     * User managed configuration.
                                +     * User-managed configuration.
                                      * 
                                * * USER_MANAGED = 2; @@ -216,7 +237,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.instance.v1.InstanceConfig.getDescriptor() .getEnumTypes() .get(0); @@ -287,6 +308,16 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + /** * * @@ -297,6 +328,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * STATE_UNSPECIFIED = 0; */ public static final int STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -307,6 +339,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * CREATING = 1; */ public static final int CREATING_VALUE = 1; + /** * * @@ -377,7 +410,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.instance.v1.InstanceConfig.getDescriptor() .getEnumTypes() .get(1); @@ -404,10 +437,452 @@ private State(int value) { // @@protoc_insertion_point(enum_scope:google.spanner.admin.instance.v1.InstanceConfig.State) } + /** + * + * + *
                                +   * Describes the availability for free instances to be created in an instance
                                +   * configuration.
                                +   * 
                                + * + * Protobuf enum {@code google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability} + */ + public enum FreeInstanceAvailability implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * FREE_INSTANCE_AVAILABILITY_UNSPECIFIED = 0; + */ + FREE_INSTANCE_AVAILABILITY_UNSPECIFIED(0), + /** + * + * + *
                                +     * Indicates that free instances are available to be created in this
                                +     * instance configuration.
                                +     * 
                                + * + * AVAILABLE = 1; + */ + AVAILABLE(1), + /** + * + * + *
                                +     * Indicates that free instances are not supported in this instance
                                +     * configuration.
                                +     * 
                                + * + * UNSUPPORTED = 2; + */ + UNSUPPORTED(2), + /** + * + * + *
                                +     * Indicates that free instances are currently not available to be created
                                +     * in this instance configuration.
                                +     * 
                                + * + * DISABLED = 3; + */ + DISABLED(3), + /** + * + * + *
                                +     * Indicates that additional free instances cannot be created in this
                                +     * instance configuration because the project has reached its limit of free
                                +     * instances.
                                +     * 
                                + * + * QUOTA_EXCEEDED = 4; + */ + QUOTA_EXCEEDED(4), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "FreeInstanceAvailability"); + } + + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * FREE_INSTANCE_AVAILABILITY_UNSPECIFIED = 0; + */ + public static final int FREE_INSTANCE_AVAILABILITY_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +     * Indicates that free instances are available to be created in this
                                +     * instance configuration.
                                +     * 
                                + * + * AVAILABLE = 1; + */ + public static final int AVAILABLE_VALUE = 1; + + /** + * + * + *
                                +     * Indicates that free instances are not supported in this instance
                                +     * configuration.
                                +     * 
                                + * + * UNSUPPORTED = 2; + */ + public static final int UNSUPPORTED_VALUE = 2; + + /** + * + * + *
                                +     * Indicates that free instances are currently not available to be created
                                +     * in this instance configuration.
                                +     * 
                                + * + * DISABLED = 3; + */ + public static final int DISABLED_VALUE = 3; + + /** + * + * + *
                                +     * Indicates that additional free instances cannot be created in this
                                +     * instance configuration because the project has reached its limit of free
                                +     * instances.
                                +     * 
                                + * + * QUOTA_EXCEEDED = 4; + */ + public static final int QUOTA_EXCEEDED_VALUE = 4; + + 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 FreeInstanceAvailability 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 FreeInstanceAvailability forNumber(int value) { + switch (value) { + case 0: + return FREE_INSTANCE_AVAILABILITY_UNSPECIFIED; + case 1: + return AVAILABLE; + case 2: + return UNSUPPORTED; + case 3: + return DISABLED; + case 4: + return QUOTA_EXCEEDED; + 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 FreeInstanceAvailability findValueByNumber(int number) { + return FreeInstanceAvailability.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.InstanceConfig.getDescriptor() + .getEnumTypes() + .get(2); + } + + private static final FreeInstanceAvailability[] VALUES = values(); + + public static FreeInstanceAvailability 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 FreeInstanceAvailability(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability) + } + + /** + * + * + *
                                +   * Indicates the quorum type of this instance configuration.
                                +   * 
                                + * + * Protobuf enum {@code google.spanner.admin.instance.v1.InstanceConfig.QuorumType} + */ + public enum QuorumType implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +     * Quorum type not specified.
                                +     * 
                                + * + * QUORUM_TYPE_UNSPECIFIED = 0; + */ + QUORUM_TYPE_UNSPECIFIED(0), + /** + * + * + *
                                +     * An instance configuration tagged with `REGION` quorum type forms a write
                                +     * quorum in a single region.
                                +     * 
                                + * + * REGION = 1; + */ + REGION(1), + /** + * + * + *
                                +     * An instance configuration tagged with the `DUAL_REGION` quorum type forms
                                +     * a write quorum with exactly two read-write regions in a multi-region
                                +     * configuration.
                                +     *
                                +     * This instance configuration requires failover in the event of
                                +     * regional failures.
                                +     * 
                                + * + * DUAL_REGION = 2; + */ + DUAL_REGION(2), + /** + * + * + *
                                +     * An instance configuration tagged with the `MULTI_REGION` quorum type
                                +     * forms a write quorum from replicas that are spread across more than one
                                +     * region in a multi-region configuration.
                                +     * 
                                + * + * MULTI_REGION = 3; + */ + MULTI_REGION(3), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QuorumType"); + } + + /** + * + * + *
                                +     * Quorum type not specified.
                                +     * 
                                + * + * QUORUM_TYPE_UNSPECIFIED = 0; + */ + public static final int QUORUM_TYPE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +     * An instance configuration tagged with `REGION` quorum type forms a write
                                +     * quorum in a single region.
                                +     * 
                                + * + * REGION = 1; + */ + public static final int REGION_VALUE = 1; + + /** + * + * + *
                                +     * An instance configuration tagged with the `DUAL_REGION` quorum type forms
                                +     * a write quorum with exactly two read-write regions in a multi-region
                                +     * configuration.
                                +     *
                                +     * This instance configuration requires failover in the event of
                                +     * regional failures.
                                +     * 
                                + * + * DUAL_REGION = 2; + */ + public static final int DUAL_REGION_VALUE = 2; + + /** + * + * + *
                                +     * An instance configuration tagged with the `MULTI_REGION` quorum type
                                +     * forms a write quorum from replicas that are spread across more than one
                                +     * region in a multi-region configuration.
                                +     * 
                                + * + * MULTI_REGION = 3; + */ + public static final int MULTI_REGION_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 QuorumType 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 QuorumType forNumber(int value) { + switch (value) { + case 0: + return QUORUM_TYPE_UNSPECIFIED; + case 1: + return REGION; + case 2: + return DUAL_REGION; + case 3: + return MULTI_REGION; + 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 QuorumType findValueByNumber(int number) { + return QuorumType.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.InstanceConfig.getDescriptor() + .getEnumTypes() + .get(3); + } + + private static final QuorumType[] VALUES = values(); + + public static QuorumType 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 QuorumType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.admin.instance.v1.InstanceConfig.QuorumType) + } + public static final int NAME_FIELD_NUMBER = 1; @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -435,6 +910,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -467,6 +943,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object displayName_ = ""; + /** * * @@ -490,6 +967,7 @@ public java.lang.String getDisplayName() { return s; } } + /** * * @@ -516,6 +994,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { public static final int CONFIG_TYPE_FIELD_NUMBER = 5; private int configType_ = 0; + /** * * @@ -534,6 +1013,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { public int getConfigTypeValue() { return configType_; } + /** * * @@ -561,12 +1041,18 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Type getConfigType() @SuppressWarnings("serial") private java.util.List replicas_; + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -575,12 +1061,18 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Type getConfigType() public java.util.List getReplicasList() { return replicas_; } + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -590,12 +1082,18 @@ public java.util.List getRepli getReplicasOrBuilderList() { return replicas_; } + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -604,12 +1102,18 @@ public java.util.List getRepli public int getReplicasCount() { return replicas_.size(); } + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -618,12 +1122,18 @@ public int getReplicasCount() { public com.google.spanner.admin.instance.v1.ReplicaInfo getReplicas(int index) { return replicas_.get(index); } + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -637,12 +1147,13 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu @SuppressWarnings("serial") private java.util.List optionalReplicas_; + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -654,12 +1165,13 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu getOptionalReplicasList() { return optionalReplicas_; } + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -671,12 +1183,13 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu getOptionalReplicasOrBuilderList() { return optionalReplicas_; } + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -687,12 +1200,13 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu public int getOptionalReplicasCount() { return optionalReplicas_.size(); } + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -703,12 +1217,13 @@ public int getOptionalReplicasCount() { public com.google.spanner.admin.instance.v1.ReplicaInfo getOptionalReplicas(int index) { return optionalReplicas_.get(index); } + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -725,14 +1240,15 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getOptionalRepl @SuppressWarnings("serial") private volatile java.lang.Object baseConfig_ = ""; + /** * * *
                                    * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -   * based on which this configuration is created. Only set for user managed
                                +   * based on which this configuration is created. Only set for user-managed
                                    * configurations. `base_config` must refer to a configuration of type
                                -   * GOOGLE_MANAGED in the same project as this configuration.
                                +   * `GOOGLE_MANAGED` in the same project as this configuration.
                                    * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -751,14 +1267,15 @@ public java.lang.String getBaseConfig() { return s; } } + /** * * *
                                    * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -   * based on which this configuration is created. Only set for user managed
                                +   * based on which this configuration is created. Only set for user-managed
                                    * configurations. `base_config` must refer to a configuration of type
                                -   * GOOGLE_MANAGED in the same project as this configuration.
                                +   * `GOOGLE_MANAGED` in the same project as this configuration.
                                    * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -804,6 +1321,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -815,11 +1333,11 @@ public int getLabelsCount() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -840,12 +1358,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(); } + /** * * @@ -857,11 +1377,11 @@ public java.util.Map getLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -879,6 +1399,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -890,11 +1411,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -919,6 +1440,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -930,11 +1452,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -964,6 +1486,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { @SuppressWarnings("serial") private volatile java.lang.Object etag_ = ""; + /** * * @@ -997,6 +1520,7 @@ public java.lang.String getEtag() { return s; } } + /** * * @@ -1036,6 +1560,7 @@ public com.google.protobuf.ByteString getEtagBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -1051,6 +1576,7 @@ public com.google.protobuf.ByteString getEtagBytes() { public com.google.protobuf.ProtocolStringList getLeaderOptionsList() { return leaderOptions_; } + /** * * @@ -1066,6 +1592,7 @@ public com.google.protobuf.ProtocolStringList getLeaderOptionsList() { public int getLeaderOptionsCount() { return leaderOptions_.size(); } + /** * * @@ -1082,6 +1609,7 @@ public int getLeaderOptionsCount() { public java.lang.String getLeaderOptions(int index) { return leaderOptions_.get(index); } + /** * * @@ -1101,6 +1629,7 @@ public com.google.protobuf.ByteString getLeaderOptionsBytes(int index) { public static final int RECONCILING_FIELD_NUMBER = 10; private boolean reconciling_ = false; + /** * * @@ -1121,6 +1650,7 @@ public boolean getReconciling() { public static final int STATE_FIELD_NUMBER = 11; private int state_ = 0; + /** * * @@ -1139,6 +1669,7 @@ public boolean getReconciling() { public int getStateValue() { return state_; } + /** * * @@ -1162,6 +1693,117 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.State getState() { : result; } + public static final int FREE_INSTANCE_AVAILABILITY_FIELD_NUMBER = 12; + private int freeInstanceAvailability_ = 0; + + /** + * + * + *
                                +   * Output only. Describes whether free instances are available to be created
                                +   * in this instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for freeInstanceAvailability. + */ + @java.lang.Override + public int getFreeInstanceAvailabilityValue() { + return freeInstanceAvailability_; + } + + /** + * + * + *
                                +   * Output only. Describes whether free instances are available to be created
                                +   * in this instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The freeInstanceAvailability. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability + getFreeInstanceAvailability() { + com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability result = + com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability.forNumber( + freeInstanceAvailability_); + return result == null + ? com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability.UNRECOGNIZED + : result; + } + + public static final int QUORUM_TYPE_FIELD_NUMBER = 18; + private int quorumType_ = 0; + + /** + * + * + *
                                +   * Output only. The `QuorumType` of the instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for quorumType. + */ + @java.lang.Override + public int getQuorumTypeValue() { + return quorumType_; + } + + /** + * + * + *
                                +   * Output only. The `QuorumType` of the instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The quorumType. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType getQuorumType() { + com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType result = + com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType.forNumber(quorumType_); + return result == null + ? com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType.UNRECOGNIZED + : result; + } + + public static final int STORAGE_LIMIT_PER_PROCESSING_UNIT_FIELD_NUMBER = 19; + private long storageLimitPerProcessingUnit_ = 0L; + + /** + * + * + *
                                +   * Output only. The storage limit in bytes per processing unit.
                                +   * 
                                + * + * + * int64 storage_limit_per_processing_unit = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The storageLimitPerProcessingUnit. + */ + @java.lang.Override + public long getStorageLimitPerProcessingUnit() { + return storageLimitPerProcessingUnit_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -1176,17 +1818,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, displayName_); } for (int i = 0; i < replicas_.size(); i++) { output.writeMessage(3, replicas_.get(i)); } for (int i = 0; i < leaderOptions_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, leaderOptions_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 4, leaderOptions_.getRaw(i)); } if (configType_ != com.google.spanner.admin.instance.v1.InstanceConfig.Type.TYPE_UNSPECIFIED.getNumber()) { @@ -1195,13 +1837,13 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < optionalReplicas_.size(); i++) { output.writeMessage(6, optionalReplicas_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(baseConfig_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 7, baseConfig_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(baseConfig_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 7, baseConfig_); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 8); - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 9, etag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 9, etag_); } if (reconciling_ != false) { output.writeBool(10, reconciling_); @@ -1211,6 +1853,20 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io .getNumber()) { output.writeEnum(11, state_); } + if (freeInstanceAvailability_ + != com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability + .FREE_INSTANCE_AVAILABILITY_UNSPECIFIED + .getNumber()) { + output.writeEnum(12, freeInstanceAvailability_); + } + if (quorumType_ + != com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType.QUORUM_TYPE_UNSPECIFIED + .getNumber()) { + output.writeEnum(18, quorumType_); + } + if (storageLimitPerProcessingUnit_ != 0L) { + output.writeInt64(19, storageLimitPerProcessingUnit_); + } getUnknownFields().writeTo(output); } @@ -1220,11 +1876,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, displayName_); } for (int i = 0; i < replicas_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, replicas_.get(i)); @@ -1244,8 +1900,8 @@ public int getSerializedSize() { for (int i = 0; i < optionalReplicas_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, optionalReplicas_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(baseConfig_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, baseConfig_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(baseConfig_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(7, baseConfig_); } for (java.util.Map.Entry entry : internalGetLabels().getMap().entrySet()) { @@ -1257,8 +1913,8 @@ public int getSerializedSize() { .build(); size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, labels__); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, etag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(9, etag_); } if (reconciling_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(10, reconciling_); @@ -1268,6 +1924,22 @@ public int getSerializedSize() { .getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(11, state_); } + if (freeInstanceAvailability_ + != com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability + .FREE_INSTANCE_AVAILABILITY_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(12, freeInstanceAvailability_); + } + if (quorumType_ + != com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType.QUORUM_TYPE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(18, quorumType_); + } + if (storageLimitPerProcessingUnit_ != 0L) { + size += + com.google.protobuf.CodedOutputStream.computeInt64Size( + 19, storageLimitPerProcessingUnit_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -1295,6 +1967,10 @@ public boolean equals(final java.lang.Object obj) { if (!getLeaderOptionsList().equals(other.getLeaderOptionsList())) return false; if (getReconciling() != other.getReconciling()) return false; if (state_ != other.state_) return false; + if (freeInstanceAvailability_ != other.freeInstanceAvailability_) return false; + if (quorumType_ != other.quorumType_) return false; + if (getStorageLimitPerProcessingUnit() != other.getStorageLimitPerProcessingUnit()) + return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -1336,6 +2012,12 @@ public int hashCode() { hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getReconciling()); hash = (37 * hash) + STATE_FIELD_NUMBER; hash = (53 * hash) + state_; + hash = (37 * hash) + FREE_INSTANCE_AVAILABILITY_FIELD_NUMBER; + hash = (53 * hash) + freeInstanceAvailability_; + hash = (37 * hash) + QUORUM_TYPE_FIELD_NUMBER; + hash = (53 * hash) + quorumType_; + hash = (37 * hash) + STORAGE_LIMIT_PER_PROCESSING_UNIT_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getStorageLimitPerProcessingUnit()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -1378,38 +2060,38 @@ public static com.google.spanner.admin.instance.v1.InstanceConfig parseFrom( public static com.google.spanner.admin.instance.v1.InstanceConfig parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.InstanceConfig parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.InstanceConfig parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.InstanceConfig parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.InstanceConfig parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.InstanceConfig parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1432,10 +2114,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1446,7 +2129,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.InstanceConfig} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.InstanceConfig) com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder { @@ -1478,7 +2161,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_InstanceConfig_fieldAccessorTable @@ -1490,7 +2173,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi // Construct using com.google.spanner.admin.instance.v1.InstanceConfig.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1521,6 +2204,9 @@ public Builder clear() { leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); reconciling_ = false; state_ = 0; + freeInstanceAvailability_ = 0; + quorumType_ = 0; + storageLimitPerProcessingUnit_ = 0L; return this; } @@ -1609,39 +2295,15 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.InstanceConfig r if (((from_bitField0_ & 0x00000400) != 0)) { result.state_ = state_; } - } - - @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); + if (((from_bitField0_ & 0x00000800) != 0)) { + result.freeInstanceAvailability_ = freeInstanceAvailability_; + } + if (((from_bitField0_ & 0x00001000) != 0)) { + result.quorumType_ = quorumType_; + } + if (((from_bitField0_ & 0x00002000) != 0)) { + result.storageLimitPerProcessingUnit_ = storageLimitPerProcessingUnit_; + } } @java.lang.Override @@ -1689,8 +2351,8 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstanceConfig oth replicas_ = other.replicas_; bitField0_ = (bitField0_ & ~0x00000008); replicasBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getReplicasFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetReplicasFieldBuilder() : null; } else { replicasBuilder_.addAllMessages(other.replicas_); @@ -1716,8 +2378,8 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstanceConfig oth optionalReplicas_ = other.optionalReplicas_; bitField0_ = (bitField0_ & ~0x00000010); optionalReplicasBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getOptionalReplicasFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetOptionalReplicasFieldBuilder() : null; } else { optionalReplicasBuilder_.addAllMessages(other.optionalReplicas_); @@ -1752,6 +2414,15 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstanceConfig oth if (other.state_ != 0) { setStateValue(other.getStateValue()); } + if (other.freeInstanceAvailability_ != 0) { + setFreeInstanceAvailabilityValue(other.getFreeInstanceAvailabilityValue()); + } + if (other.quorumType_ != 0) { + setQuorumTypeValue(other.getQuorumTypeValue()); + } + if (other.getStorageLimitPerProcessingUnit() != 0L) { + setStorageLimitPerProcessingUnit(other.getStorageLimitPerProcessingUnit()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1867,6 +2538,24 @@ public Builder mergeFrom( bitField0_ |= 0x00000400; break; } // case 88 + case 96: + { + freeInstanceAvailability_ = input.readEnum(); + bitField0_ |= 0x00000800; + break; + } // case 96 + case 144: + { + quorumType_ = input.readEnum(); + bitField0_ |= 0x00001000; + break; + } // case 144 + case 152: + { + storageLimitPerProcessingUnit_ = input.readInt64(); + bitField0_ |= 0x00002000; + break; + } // case 152 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1887,6 +2576,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -1913,6 +2603,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1939,6 +2630,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1964,6 +2656,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1985,6 +2678,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -2013,6 +2707,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object displayName_ = ""; + /** * * @@ -2035,6 +2730,7 @@ public java.lang.String getDisplayName() { return (java.lang.String) ref; } } + /** * * @@ -2057,6 +2753,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2078,6 +2775,7 @@ public Builder setDisplayName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2095,6 +2793,7 @@ public Builder clearDisplayName() { onChanged(); return this; } + /** * * @@ -2119,6 +2818,7 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { } private int configType_ = 0; + /** * * @@ -2137,6 +2837,7 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { public int getConfigTypeValue() { return configType_; } + /** * * @@ -2158,6 +2859,7 @@ public Builder setConfigTypeValue(int value) { onChanged(); return this; } + /** * * @@ -2180,6 +2882,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Type getConfigType() ? com.google.spanner.admin.instance.v1.InstanceConfig.Type.UNRECOGNIZED : result; } + /** * * @@ -2204,6 +2907,7 @@ public Builder setConfigType(com.google.spanner.admin.instance.v1.InstanceConfig onChanged(); return this; } + /** * * @@ -2236,7 +2940,7 @@ private void ensureReplicasIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder> @@ -2248,6 +2952,11 @@ private void ensureReplicasIsMutable() { *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2259,12 +2968,18 @@ public java.util.List getRepli return replicasBuilder_.getMessageList(); } } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2276,12 +2991,18 @@ public int getReplicasCount() { return replicasBuilder_.getCount(); } } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2293,12 +3014,18 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo getReplicas(int index) { return replicasBuilder_.getMessage(index); } } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2316,12 +3043,18 @@ public Builder setReplicas(int index, com.google.spanner.admin.instance.v1.Repli } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2337,12 +3070,18 @@ public Builder setReplicas( } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2360,12 +3099,18 @@ public Builder addReplicas(com.google.spanner.admin.instance.v1.ReplicaInfo valu } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2383,12 +3128,18 @@ public Builder addReplicas(int index, com.google.spanner.admin.instance.v1.Repli } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2404,12 +3155,18 @@ public Builder addReplicas( } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2425,12 +3182,18 @@ public Builder addReplicas( } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2446,12 +3209,18 @@ public Builder addAllReplicas( } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2466,12 +3235,18 @@ public Builder clearReplicas() { } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2486,25 +3261,37 @@ public Builder removeReplicas(int index) { } return this; } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder getReplicasBuilder(int index) { - return getReplicasFieldBuilder().getBuilder(index); + return internalGetReplicasFieldBuilder().getBuilder(index); } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2517,12 +3304,18 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu return replicasBuilder_.getMessageOrBuilder(index); } } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -2535,57 +3328,75 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu return java.util.Collections.unmodifiableList(replicas_); } } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addReplicasBuilder() { - return getReplicasFieldBuilder() + return internalGetReplicasFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.ReplicaInfo.getDefaultInstance()); } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addReplicasBuilder(int index) { - return getReplicasFieldBuilder() + return internalGetReplicasFieldBuilder() .addBuilder(index, com.google.spanner.admin.instance.v1.ReplicaInfo.getDefaultInstance()); } + /** * * *
                                      * The geographic placement of nodes in this instance configuration and their
                                      * replication properties.
                                +     *
                                +     * To create user-managed configurations, input
                                +     * `replicas` must include all replicas in `replicas` of the `base_config`
                                +     * and include one or more replicas in the `optional_replicas` of the
                                +     * `base_config`.
                                      * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ public java.util.List getReplicasBuilderList() { - return getReplicasFieldBuilder().getBuilderList(); + return internalGetReplicasFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder> - getReplicasFieldBuilder() { + internalGetReplicasFieldBuilder() { if (replicasBuilder_ == null) { replicasBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder>( @@ -2607,7 +3418,7 @@ private void ensureOptionalReplicasIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder> @@ -2617,8 +3428,8 @@ private void ensureOptionalReplicasIsMutable() { * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2633,12 +3444,13 @@ private void ensureOptionalReplicasIsMutable() { return optionalReplicasBuilder_.getMessageList(); } } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2652,12 +3464,13 @@ public int getOptionalReplicasCount() { return optionalReplicasBuilder_.getCount(); } } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2671,12 +3484,13 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo getOptionalReplicas(int return optionalReplicasBuilder_.getMessage(index); } } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2697,12 +3511,13 @@ public Builder setOptionalReplicas( } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2720,12 +3535,13 @@ public Builder setOptionalReplicas( } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2745,12 +3561,13 @@ public Builder addOptionalReplicas(com.google.spanner.admin.instance.v1.ReplicaI } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2771,12 +3588,13 @@ public Builder addOptionalReplicas( } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2794,12 +3612,13 @@ public Builder addOptionalReplicas( } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2817,12 +3636,13 @@ public Builder addOptionalReplicas( } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2840,12 +3660,13 @@ public Builder addAllOptionalReplicas( } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2862,12 +3683,13 @@ public Builder clearOptionalReplicas() { } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2884,12 +3706,13 @@ public Builder removeOptionalReplicas(int index) { } return this; } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2898,14 +3721,15 @@ public Builder removeOptionalReplicas(int index) { */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder getOptionalReplicasBuilder( int index) { - return getOptionalReplicasFieldBuilder().getBuilder(index); + return internalGetOptionalReplicasFieldBuilder().getBuilder(index); } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2920,12 +3744,13 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getOptionalRepl return optionalReplicasBuilder_.getMessageOrBuilder(index); } } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2940,12 +3765,13 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getOptionalRepl return java.util.Collections.unmodifiableList(optionalReplicas_); } } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2953,15 +3779,16 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getOptionalRepl * */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addOptionalReplicasBuilder() { - return getOptionalReplicasFieldBuilder() + return internalGetOptionalReplicasFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.ReplicaInfo.getDefaultInstance()); } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2970,15 +3797,16 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addOptionalRepli */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addOptionalReplicasBuilder( int index) { - return getOptionalReplicasFieldBuilder() + return internalGetOptionalReplicasFieldBuilder() .addBuilder(index, com.google.spanner.admin.instance.v1.ReplicaInfo.getDefaultInstance()); } + /** * * *
                                -     * Output only. The available optional replicas to choose from for user
                                -     * managed configurations. Populated for Google managed configurations.
                                +     * Output only. The available optional replicas to choose from for
                                +     * user-managed configurations. Populated for Google-managed configurations.
                                      * 
                                * * @@ -2987,17 +3815,17 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addOptionalRepli */ public java.util.List getOptionalReplicasBuilderList() { - return getOptionalReplicasFieldBuilder().getBuilderList(); + return internalGetOptionalReplicasFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder> - getOptionalReplicasFieldBuilder() { + internalGetOptionalReplicasFieldBuilder() { if (optionalReplicasBuilder_ == null) { optionalReplicasBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder>( @@ -3011,14 +3839,15 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addOptionalRepli } private java.lang.Object baseConfig_ = ""; + /** * * *
                                      * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -     * based on which this configuration is created. Only set for user managed
                                +     * based on which this configuration is created. Only set for user-managed
                                      * configurations. `base_config` must refer to a configuration of type
                                -     * GOOGLE_MANAGED in the same project as this configuration.
                                +     * `GOOGLE_MANAGED` in the same project as this configuration.
                                      * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -3036,14 +3865,15 @@ public java.lang.String getBaseConfig() { return (java.lang.String) ref; } } + /** * * *
                                      * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -     * based on which this configuration is created. Only set for user managed
                                +     * based on which this configuration is created. Only set for user-managed
                                      * configurations. `base_config` must refer to a configuration of type
                                -     * GOOGLE_MANAGED in the same project as this configuration.
                                +     * `GOOGLE_MANAGED` in the same project as this configuration.
                                      * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -3061,14 +3891,15 @@ public com.google.protobuf.ByteString getBaseConfigBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                      * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -     * based on which this configuration is created. Only set for user managed
                                +     * based on which this configuration is created. Only set for user-managed
                                      * configurations. `base_config` must refer to a configuration of type
                                -     * GOOGLE_MANAGED in the same project as this configuration.
                                +     * `GOOGLE_MANAGED` in the same project as this configuration.
                                      * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -3085,14 +3916,15 @@ public Builder setBaseConfig(java.lang.String value) { onChanged(); return this; } + /** * * *
                                      * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -     * based on which this configuration is created. Only set for user managed
                                +     * based on which this configuration is created. Only set for user-managed
                                      * configurations. `base_config` must refer to a configuration of type
                                -     * GOOGLE_MANAGED in the same project as this configuration.
                                +     * `GOOGLE_MANAGED` in the same project as this configuration.
                                      * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -3105,14 +3937,15 @@ public Builder clearBaseConfig() { onChanged(); return this; } + /** * * *
                                      * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -     * based on which this configuration is created. Only set for user managed
                                +     * based on which this configuration is created. Only set for user-managed
                                      * configurations. `base_config` must refer to a configuration of type
                                -     * GOOGLE_MANAGED in the same project as this configuration.
                                +     * `GOOGLE_MANAGED` in the same project as this configuration.
                                      * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -3156,6 +3989,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -3167,11 +4001,11 @@ public int getLabelsCount() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3192,12 +4026,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(); } + /** * * @@ -3209,11 +4045,11 @@ public java.util.Map getLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3231,6 +4067,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -3242,11 +4079,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3271,6 +4108,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -3282,11 +4120,11 @@ public java.util.Map getLabelsMap() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3317,6 +4155,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -3328,11 +4167,11 @@ public Builder clearLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3353,12 +4192,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_ |= 0x00000040; return internalGetMutableLabels().getMutableMap(); } + /** * * @@ -3370,11 +4211,11 @@ public java.util.Map getMutableLabels() { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3399,6 +4240,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000040; return this; } + /** * * @@ -3410,11 +4252,11 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -3435,6 +4277,7 @@ public Builder putAllLabels(java.util.Map va } private java.lang.Object etag_ = ""; + /** * * @@ -3467,6 +4310,7 @@ public java.lang.String getEtag() { return (java.lang.String) ref; } } + /** * * @@ -3499,6 +4343,7 @@ public com.google.protobuf.ByteString getEtagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3530,6 +4375,7 @@ public Builder setEtag(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3557,6 +4403,7 @@ public Builder clearEtag() { onChanged(); return this; } + /** * * @@ -3599,6 +4446,7 @@ private void ensureLeaderOptionsIsMutable() { } bitField0_ |= 0x00000100; } + /** * * @@ -3615,6 +4463,7 @@ public com.google.protobuf.ProtocolStringList getLeaderOptionsList() { leaderOptions_.makeImmutable(); return leaderOptions_; } + /** * * @@ -3630,6 +4479,7 @@ public com.google.protobuf.ProtocolStringList getLeaderOptionsList() { public int getLeaderOptionsCount() { return leaderOptions_.size(); } + /** * * @@ -3646,6 +4496,7 @@ public int getLeaderOptionsCount() { public java.lang.String getLeaderOptions(int index) { return leaderOptions_.get(index); } + /** * * @@ -3662,6 +4513,7 @@ public java.lang.String getLeaderOptions(int index) { public com.google.protobuf.ByteString getLeaderOptionsBytes(int index) { return leaderOptions_.getByteString(index); } + /** * * @@ -3686,6 +4538,7 @@ public Builder setLeaderOptions(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -3709,6 +4562,7 @@ public Builder addLeaderOptions(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3729,6 +4583,7 @@ public Builder addAllLeaderOptions(java.lang.Iterable values) onChanged(); return this; } + /** * * @@ -3748,6 +4603,7 @@ public Builder clearLeaderOptions() { onChanged(); return this; } + /** * * @@ -3774,6 +4630,7 @@ public Builder addLeaderOptionsBytes(com.google.protobuf.ByteString value) { } private boolean reconciling_; + /** * * @@ -3791,6 +4648,7 @@ public Builder addLeaderOptionsBytes(com.google.protobuf.ByteString value) { public boolean getReconciling() { return reconciling_; } + /** * * @@ -3812,6 +4670,7 @@ public Builder setReconciling(boolean value) { onChanged(); return this; } + /** * * @@ -3833,6 +4692,7 @@ public Builder clearReconciling() { } private int state_ = 0; + /** * * @@ -3851,6 +4711,7 @@ public Builder clearReconciling() { public int getStateValue() { return state_; } + /** * * @@ -3872,6 +4733,7 @@ public Builder setStateValue(int value) { onChanged(); return this; } + /** * * @@ -3894,6 +4756,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.State getState() { ? com.google.spanner.admin.instance.v1.InstanceConfig.State.UNRECOGNIZED : result; } + /** * * @@ -3918,6 +4781,7 @@ public Builder setState(com.google.spanner.admin.instance.v1.InstanceConfig.Stat onChanged(); return this; } + /** * * @@ -3939,15 +4803,290 @@ public Builder clearState() { return this; } + private int freeInstanceAvailability_ = 0; + + /** + * + * + *
                                +     * Output only. Describes whether free instances are available to be created
                                +     * in this instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for freeInstanceAvailability. + */ + @java.lang.Override + public int getFreeInstanceAvailabilityValue() { + return freeInstanceAvailability_; + } + + /** + * + * + *
                                +     * Output only. Describes whether free instances are available to be created
                                +     * in this instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for freeInstanceAvailability to set. + * @return This builder for chaining. + */ + public Builder setFreeInstanceAvailabilityValue(int value) { + freeInstanceAvailability_ = value; + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. Describes whether free instances are available to be created
                                +     * in this instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The freeInstanceAvailability. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability + getFreeInstanceAvailability() { + com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability result = + com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability.forNumber( + freeInstanceAvailability_); + return result == null + ? com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability + .UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +     * Output only. Describes whether free instances are available to be created
                                +     * in this instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The freeInstanceAvailability to set. + * @return This builder for chaining. + */ + public Builder setFreeInstanceAvailability( + com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000800; + freeInstanceAvailability_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. Describes whether free instances are available to be created
                                +     * in this instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearFreeInstanceAvailability() { + bitField0_ = (bitField0_ & ~0x00000800); + freeInstanceAvailability_ = 0; + onChanged(); + return this; + } + + private int quorumType_ = 0; + + /** + * + * + *
                                +     * Output only. The `QuorumType` of the instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for quorumType. + */ + @java.lang.Override + public int getQuorumTypeValue() { + return quorumType_; + } + + /** + * + * + *
                                +     * Output only. The `QuorumType` of the instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for quorumType to set. + * @return This builder for chaining. + */ + public Builder setQuorumTypeValue(int value) { + quorumType_ = value; + bitField0_ |= 0x00001000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. The `QuorumType` of the instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The quorumType. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType getQuorumType() { + com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType result = + com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType.forNumber(quorumType_); + return result == null + ? com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +     * Output only. The `QuorumType` of the instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The quorumType to set. + * @return This builder for chaining. + */ + public Builder setQuorumType( + com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00001000; + quorumType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. The `QuorumType` of the instance configuration.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearQuorumType() { + bitField0_ = (bitField0_ & ~0x00001000); + quorumType_ = 0; + onChanged(); + return this; } + private long storageLimitPerProcessingUnit_; + + /** + * + * + *
                                +     * Output only. The storage limit in bytes per processing unit.
                                +     * 
                                + * + * + * int64 storage_limit_per_processing_unit = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The storageLimitPerProcessingUnit. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public long getStorageLimitPerProcessingUnit() { + return storageLimitPerProcessingUnit_; + } + + /** + * + * + *
                                +     * Output only. The storage limit in bytes per processing unit.
                                +     * 
                                + * + * + * int64 storage_limit_per_processing_unit = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The storageLimitPerProcessingUnit to set. + * @return This builder for chaining. + */ + public Builder setStorageLimitPerProcessingUnit(long value) { + + storageLimitPerProcessingUnit_ = value; + bitField0_ |= 0x00002000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Output only. The storage limit in bytes per processing unit.
                                +     * 
                                + * + * + * int64 storage_limit_per_processing_unit = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearStorageLimitPerProcessingUnit() { + bitField0_ = (bitField0_ & ~0x00002000); + storageLimitPerProcessingUnit_ = 0L; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.InstanceConfig) diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigName.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigName.java index 6f09a08aa77..4ddad6fa809 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigName.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java index ed36ecec926..a6613ef534e 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface InstanceConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.InstanceConfig) @@ -40,6 +42,7 @@ public interface InstanceConfigOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -69,6 +72,7 @@ public interface InstanceConfigOrBuilder * @return The displayName. */ java.lang.String getDisplayName(); + /** * * @@ -97,6 +101,7 @@ public interface InstanceConfigOrBuilder * @return The enum numeric value on the wire for configType. */ int getConfigTypeValue(); + /** * * @@ -119,51 +124,80 @@ public interface InstanceConfigOrBuilder *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ java.util.List getReplicasList(); + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ com.google.spanner.admin.instance.v1.ReplicaInfo getReplicas(int index); + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ int getReplicasCount(); + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; */ java.util.List getReplicasOrBuilderList(); + /** * * *
                                    * The geographic placement of nodes in this instance configuration and their
                                    * replication properties.
                                +   *
                                +   * To create user-managed configurations, input
                                +   * `replicas` must include all replicas in `replicas` of the `base_config`
                                +   * and include one or more replicas in the `optional_replicas` of the
                                +   * `base_config`.
                                    * 
                                * * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 3; @@ -174,8 +208,8 @@ public interface InstanceConfigOrBuilder * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -183,12 +217,13 @@ public interface InstanceConfigOrBuilder * */ java.util.List getOptionalReplicasList(); + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -196,12 +231,13 @@ public interface InstanceConfigOrBuilder * */ com.google.spanner.admin.instance.v1.ReplicaInfo getOptionalReplicas(int index); + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -209,12 +245,13 @@ public interface InstanceConfigOrBuilder * */ int getOptionalReplicasCount(); + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -223,12 +260,13 @@ public interface InstanceConfigOrBuilder */ java.util.List getOptionalReplicasOrBuilderList(); + /** * * *
                                -   * Output only. The available optional replicas to choose from for user
                                -   * managed configurations. Populated for Google managed configurations.
                                +   * Output only. The available optional replicas to choose from for
                                +   * user-managed configurations. Populated for Google-managed configurations.
                                    * 
                                * * @@ -242,9 +280,9 @@ public interface InstanceConfigOrBuilder * *
                                    * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -   * based on which this configuration is created. Only set for user managed
                                +   * based on which this configuration is created. Only set for user-managed
                                    * configurations. `base_config` must refer to a configuration of type
                                -   * GOOGLE_MANAGED in the same project as this configuration.
                                +   * `GOOGLE_MANAGED` in the same project as this configuration.
                                    * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -252,14 +290,15 @@ public interface InstanceConfigOrBuilder * @return The baseConfig. */ java.lang.String getBaseConfig(); + /** * * *
                                    * Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
                                -   * based on which this configuration is created. Only set for user managed
                                +   * based on which this configuration is created. Only set for user-managed
                                    * configurations. `base_config` must refer to a configuration of type
                                -   * GOOGLE_MANAGED in the same project as this configuration.
                                +   * `GOOGLE_MANAGED` in the same project as this configuration.
                                    * 
                                * * string base_config = 7 [(.google.api.resource_reference) = { ... } @@ -279,11 +318,11 @@ public interface InstanceConfigOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -298,6 +337,7 @@ public interface InstanceConfigOrBuilder * map<string, string> labels = 8; */ int getLabelsCount(); + /** * * @@ -309,11 +349,11 @@ public interface InstanceConfigOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -328,9 +368,11 @@ public interface InstanceConfigOrBuilder * map<string, string> labels = 8; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -342,11 +384,11 @@ public interface InstanceConfigOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -361,6 +403,7 @@ public interface InstanceConfigOrBuilder * map<string, string> labels = 8; */ java.util.Map getLabelsMap(); + /** * * @@ -372,11 +415,11 @@ public interface InstanceConfigOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -395,6 +438,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * @@ -406,11 +450,11 @@ java.lang.String getLabelsOrDefault( * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -448,6 +492,7 @@ java.lang.String getLabelsOrDefault( * @return The etag. */ java.lang.String getEtag(); + /** * * @@ -484,6 +529,7 @@ java.lang.String getLabelsOrDefault( * @return A list containing the leaderOptions. */ java.util.List getLeaderOptionsList(); + /** * * @@ -497,6 +543,7 @@ java.lang.String getLabelsOrDefault( * @return The count of leaderOptions. */ int getLeaderOptionsCount(); + /** * * @@ -511,6 +558,7 @@ java.lang.String getLabelsOrDefault( * @return The leaderOptions at the given index. */ java.lang.String getLeaderOptions(int index); + /** * * @@ -556,6 +604,7 @@ java.lang.String getLabelsOrDefault( * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * @@ -571,4 +620,82 @@ java.lang.String getLabelsOrDefault( * @return The state. */ com.google.spanner.admin.instance.v1.InstanceConfig.State getState(); + + /** + * + * + *
                                +   * Output only. Describes whether free instances are available to be created
                                +   * in this instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for freeInstanceAvailability. + */ + int getFreeInstanceAvailabilityValue(); + + /** + * + * + *
                                +   * Output only. Describes whether free instances are available to be created
                                +   * in this instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability free_instance_availability = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The freeInstanceAvailability. + */ + com.google.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailability + getFreeInstanceAvailability(); + + /** + * + * + *
                                +   * Output only. The `QuorumType` of the instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for quorumType. + */ + int getQuorumTypeValue(); + + /** + * + * + *
                                +   * Output only. The `QuorumType` of the instance configuration.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.InstanceConfig.QuorumType quorum_type = 18 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The quorumType. + */ + com.google.spanner.admin.instance.v1.InstanceConfig.QuorumType getQuorumType(); + + /** + * + * + *
                                +   * Output only. The storage limit in bytes per processing unit.
                                +   * 
                                + * + * + * int64 storage_limit_per_processing_unit = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The storageLimitPerProcessingUnit. + */ + long getStorageLimitPerProcessingUnit(); } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceName.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceName.java index 3abd2a01993..c6f2744d7c7 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceName.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java index 6ebc4e67d45..f94850acab0 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface InstanceOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.Instance) @@ -39,6 +41,7 @@ public interface InstanceOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -72,6 +75,7 @@ public interface InstanceOrBuilder * @return The config. */ java.lang.String getConfig(); + /** * * @@ -103,6 +107,7 @@ public interface InstanceOrBuilder * @return The displayName. */ java.lang.String getDisplayName(); + /** * * @@ -133,9 +138,6 @@ public interface InstanceOrBuilder * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying node count across replicas (achieved by - * setting asymmetric_autoscaling_options in autoscaling config), the - * node_count here is the maximum node count across all replicas. * * For more information, see * [Compute capacity, nodes, and processing @@ -165,10 +167,6 @@ public interface InstanceOrBuilder * This might be zero in API responses for instances that are not yet in the * `READY` state. * - * If the instance has varying processing units per replica - * (achieved by setting asymmetric_autoscaling_options in autoscaling config), - * the processing_units here is the maximum processing units across all - * replicas. * * For more information, see * [Compute capacity, nodes and processing @@ -196,6 +194,7 @@ public interface InstanceOrBuilder */ java.util.List getReplicaComputeCapacityList(); + /** * * @@ -210,6 +209,7 @@ public interface InstanceOrBuilder *
                                */ com.google.spanner.admin.instance.v1.ReplicaComputeCapacity getReplicaComputeCapacity(int index); + /** * * @@ -224,6 +224,7 @@ public interface InstanceOrBuilder *
                                */ int getReplicaComputeCapacityCount(); + /** * * @@ -239,6 +240,7 @@ public interface InstanceOrBuilder */ java.util.List getReplicaComputeCapacityOrBuilderList(); + /** * * @@ -272,6 +274,7 @@ public interface InstanceOrBuilder * @return Whether the autoscalingConfig field is set. */ boolean hasAutoscalingConfig(); + /** * * @@ -289,6 +292,7 @@ public interface InstanceOrBuilder * @return The autoscalingConfig. */ com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConfig(); + /** * * @@ -323,6 +327,7 @@ public interface InstanceOrBuilder * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * @@ -353,11 +358,11 @@ public interface InstanceOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -372,6 +377,7 @@ public interface InstanceOrBuilder * map<string, string> labels = 7; */ int getLabelsCount(); + /** * * @@ -383,11 +389,11 @@ public interface InstanceOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -402,9 +408,11 @@ public interface InstanceOrBuilder * map<string, string> labels = 7; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -416,11 +424,11 @@ public interface InstanceOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -435,6 +443,7 @@ public interface InstanceOrBuilder * map<string, string> labels = 7; */ java.util.Map getLabelsMap(); + /** * * @@ -446,11 +455,11 @@ public interface InstanceOrBuilder * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -469,6 +478,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * @@ -480,11 +490,11 @@ java.lang.String getLabelsOrDefault( * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). * - * * Label keys must be between 1 and 63 characters long and must conform to - * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. - * * Label values must be between 0 and 63 characters long and must conform - * to the regular expression `[a-z0-9_-]{0,63}`. - * * No more than 64 labels can be associated with a given resource. + * * Label keys must be between 1 and 63 characters long and must conform to + * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. + * * Label values must be between 0 and 63 characters long and must conform + * to the regular expression `[a-z0-9_-]{0,63}`. + * * No more than 64 labels can be associated with a given resource. * * See https://goo.gl/xmQnxf for more information on and examples of labels. * @@ -500,6 +510,32 @@ java.lang.String getLabelsOrDefault( */ java.lang.String getLabelsOrThrow(java.lang.String key); + /** + * + * + *
                                +   * The `InstanceType` of the current instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @return The enum numeric value on the wire for instanceType. + */ + int getInstanceTypeValue(); + + /** + * + * + *
                                +   * The `InstanceType` of the current instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.InstanceType instance_type = 10; + * + * @return The instanceType. + */ + com.google.spanner.admin.instance.v1.Instance.InstanceType getInstanceType(); + /** * * @@ -512,6 +548,7 @@ java.lang.String getLabelsOrDefault( * @return A list containing the endpointUris. */ java.util.List getEndpointUrisList(); + /** * * @@ -524,6 +561,7 @@ java.lang.String getLabelsOrDefault( * @return The count of endpointUris. */ int getEndpointUrisCount(); + /** * * @@ -537,6 +575,7 @@ java.lang.String getLabelsOrDefault( * @return The endpointUris at the given index. */ java.lang.String getEndpointUris(int index); + /** * * @@ -564,6 +603,7 @@ java.lang.String getLabelsOrDefault( * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -577,6 +617,7 @@ java.lang.String getLabelsOrDefault( * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -602,6 +643,7 @@ java.lang.String getLabelsOrDefault( * @return Whether the updateTime field is set. */ boolean hasUpdateTime(); + /** * * @@ -615,6 +657,7 @@ java.lang.String getLabelsOrDefault( * @return The updateTime. */ com.google.protobuf.Timestamp getUpdateTime(); + /** * * @@ -627,6 +670,47 @@ java.lang.String getLabelsOrDefault( */ com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder(); + /** + * + * + *
                                +   * Free instance metadata. Only populated for free instances.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + * + * @return Whether the freeInstanceMetadata field is set. + */ + boolean hasFreeInstanceMetadata(); + + /** + * + * + *
                                +   * Free instance metadata. Only populated for free instances.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + * + * @return The freeInstanceMetadata. + */ + com.google.spanner.admin.instance.v1.FreeInstanceMetadata getFreeInstanceMetadata(); + + /** + * + * + *
                                +   * Free instance metadata. Only populated for free instances.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.FreeInstanceMetadata free_instance_metadata = 13; + * + */ + com.google.spanner.admin.instance.v1.FreeInstanceMetadataOrBuilder + getFreeInstanceMetadataOrBuilder(); + /** * * @@ -641,6 +725,7 @@ java.lang.String getLabelsOrDefault( * @return The enum numeric value on the wire for edition. */ int getEditionValue(); + /** * * @@ -660,15 +745,16 @@ java.lang.String getLabelsOrDefault( * * *
                                -   * Optional. Controls the default backup behavior for new databases within the
                                -   * instance.
                                +   * Optional. Controls the default backup schedule behavior for new databases
                                +   * within the instance. By default, a backup schedule is created automatically
                                +   * when a new database is created in a new instance.
                                    *
                                -   * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -   * backup schedules are not allowed for free instances.
                                +   * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +   * as backups and backup schedules aren't supported for free instances.
                                    *
                                    * In the `GetInstance` or `ListInstances` response, if the value of
                                -   * default_backup_schedule_type is unset or NONE, no default backup
                                -   * schedule will be created for new databases within the instance.
                                +   * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +   * create a default backup schedule for new databases in the instance.
                                    * 
                                * * @@ -678,19 +764,21 @@ java.lang.String getLabelsOrDefault( * @return The enum numeric value on the wire for defaultBackupScheduleType. */ int getDefaultBackupScheduleTypeValue(); + /** * * *
                                -   * Optional. Controls the default backup behavior for new databases within the
                                -   * instance.
                                +   * Optional. Controls the default backup schedule behavior for new databases
                                +   * within the instance. By default, a backup schedule is created automatically
                                +   * when a new database is created in a new instance.
                                    *
                                -   * Note that `AUTOMATIC` is not permitted for free instances, as backups and
                                -   * backup schedules are not allowed for free instances.
                                +   * Note that the `AUTOMATIC` value isn't permitted for free instances,
                                +   * as backups and backup schedules aren't supported for free instances.
                                    *
                                    * In the `GetInstance` or `ListInstances` response, if the value of
                                -   * default_backup_schedule_type is unset or NONE, no default backup
                                -   * schedule will be created for new databases within the instance.
                                +   * `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't
                                +   * create a default backup schedule for new databases in the instance.
                                    * 
                                * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java index bd5ea351202..afb6ca38d57 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.InstancePartition} */ -public final class InstancePartition extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class InstancePartition extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.InstancePartition) InstancePartitionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "InstancePartition"); + } + // Use InstancePartition.newBuilder() to construct. - private InstancePartition(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private InstancePartition(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -49,19 +62,13 @@ private InstancePartition() { etag_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new InstancePartition(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_InstancePartition_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_InstancePartition_fieldAccessorTable @@ -116,6 +123,16 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + /** * * @@ -126,6 +143,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * STATE_UNSPECIFIED = 0; */ public static final int STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -138,6 +156,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * CREATING = 1; */ public static final int CREATING_VALUE = 1; + /** * * @@ -208,7 +227,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.instance.v1.InstancePartition.getDescriptor() .getEnumTypes() .get(0); @@ -253,6 +272,7 @@ public enum ComputeCapacityCase private ComputeCapacityCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -289,6 +309,7 @@ public ComputeCapacityCase getComputeCapacityCase() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -317,6 +338,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -350,6 +372,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object config_ = ""; + /** * * @@ -378,6 +401,7 @@ public java.lang.String getConfig() { return s; } } + /** * * @@ -411,6 +435,7 @@ public com.google.protobuf.ByteString getConfigBytes() { @SuppressWarnings("serial") private volatile java.lang.Object displayName_ = ""; + /** * * @@ -435,6 +460,7 @@ public java.lang.String getDisplayName() { return s; } } + /** * * @@ -461,14 +487,15 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { } public static final int NODE_COUNT_FIELD_NUMBER = 5; + /** * * *
                                    * The number of nodes allocated to this instance partition.
                                    *
                                -   * Users can set the node_count field to specify the target number of nodes
                                -   * allocated to the instance partition.
                                +   * Users can set the `node_count` field to specify the target number of
                                +   * nodes allocated to the instance partition.
                                    *
                                    * This may be zero in API responses for instance partitions that are not
                                    * yet in state `READY`.
                                @@ -482,14 +509,15 @@ public com.google.protobuf.ByteString getDisplayNameBytes() {
                                   public boolean hasNodeCount() {
                                     return computeCapacityCase_ == 5;
                                   }
                                +
                                   /**
                                    *
                                    *
                                    * 
                                    * The number of nodes allocated to this instance partition.
                                    *
                                -   * Users can set the node_count field to specify the target number of nodes
                                -   * allocated to the instance partition.
                                +   * Users can set the `node_count` field to specify the target number of
                                +   * nodes allocated to the instance partition.
                                    *
                                    * This may be zero in API responses for instance partitions that are not
                                    * yet in state `READY`.
                                @@ -508,17 +536,18 @@ public int getNodeCount() {
                                   }
                                 
                                   public static final int PROCESSING_UNITS_FIELD_NUMBER = 6;
                                +
                                   /**
                                    *
                                    *
                                    * 
                                    * The number of processing units allocated to this instance partition.
                                    *
                                -   * Users can set the processing_units field to specify the target number of
                                -   * processing units allocated to the instance partition.
                                +   * Users can set the `processing_units` field to specify the target number
                                +   * of processing units allocated to the instance partition.
                                    *
                                -   * This may be zero in API responses for instance partitions that are not
                                -   * yet in state `READY`.
                                +   * This might be zero in API responses for instance partitions that are not
                                +   * yet in the `READY` state.
                                    * 
                                * * int32 processing_units = 6; @@ -529,17 +558,18 @@ public int getNodeCount() { public boolean hasProcessingUnits() { return computeCapacityCase_ == 6; } + /** * * *
                                    * The number of processing units allocated to this instance partition.
                                    *
                                -   * Users can set the processing_units field to specify the target number of
                                -   * processing units allocated to the instance partition.
                                +   * Users can set the `processing_units` field to specify the target number
                                +   * of processing units allocated to the instance partition.
                                    *
                                -   * This may be zero in API responses for instance partitions that are not
                                -   * yet in state `READY`.
                                +   * This might be zero in API responses for instance partitions that are not
                                +   * yet in the `READY` state.
                                    * 
                                * * int32 processing_units = 6; @@ -554,8 +584,78 @@ public int getProcessingUnits() { return 0; } + public static final int AUTOSCALING_CONFIG_FIELD_NUMBER = 13; + private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; + + /** + * + * + *
                                +   * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +   * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +   * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +   * allocated to the instance partition.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the autoscalingConfig field is set. + */ + @java.lang.Override + public boolean hasAutoscalingConfig() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +   * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +   * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +   * allocated to the instance partition.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The autoscalingConfig. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConfig() { + return autoscalingConfig_ == null + ? com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance() + : autoscalingConfig_; + } + + /** + * + * + *
                                +   * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +   * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +   * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +   * allocated to the instance partition.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder + getAutoscalingConfigOrBuilder() { + return autoscalingConfig_ == null + ? com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance() + : autoscalingConfig_; + } + public static final int STATE_FIELD_NUMBER = 7; private int state_ = 0; + /** * * @@ -573,6 +673,7 @@ public int getProcessingUnits() { public int getStateValue() { return state_; } + /** * * @@ -597,6 +698,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition.State getState() { public static final int CREATE_TIME_FIELD_NUMBER = 8; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -611,8 +713,9 @@ public com.google.spanner.admin.instance.v1.InstancePartition.State getState() { */ @java.lang.Override public boolean hasCreateTime() { - return ((bitField0_ & 0x00000001) != 0); + return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -629,6 +732,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -646,6 +750,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public static final int UPDATE_TIME_FIELD_NUMBER = 9; private com.google.protobuf.Timestamp updateTime_; + /** * * @@ -661,8 +766,9 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { */ @java.lang.Override public boolean hasUpdateTime() { - return ((bitField0_ & 0x00000002) != 0); + return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -680,6 +786,7 @@ public boolean hasUpdateTime() { public com.google.protobuf.Timestamp getUpdateTime() { return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_; } + /** * * @@ -701,6 +808,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -719,6 +827,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { return referencingDatabases_; } + /** * * @@ -737,6 +846,7 @@ public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { public int getReferencingDatabasesCount() { return referencingDatabases_.size(); } + /** * * @@ -756,6 +866,7 @@ public int getReferencingDatabasesCount() { public java.lang.String getReferencingDatabases(int index) { return referencingDatabases_.get(index); } + /** * * @@ -781,77 +892,101 @@ public com.google.protobuf.ByteString getReferencingDatabasesBytes(int index) { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @return A list containing the referencingBackups. */ + @java.lang.Deprecated public com.google.protobuf.ProtocolStringList getReferencingBackupsList() { return referencingBackups_; } + /** * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @return The count of referencingBackups. */ + @java.lang.Deprecated public int getReferencingBackupsCount() { return referencingBackups_.size(); } + /** * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param index The index of the element to return. * @return The referencingBackups at the given index. */ + @java.lang.Deprecated public java.lang.String getReferencingBackups(int index) { return referencingBackups_.get(index); } + /** * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param index The index of the value to return. * @return The bytes of the referencingBackups at the given index. */ + @java.lang.Deprecated public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) { return referencingBackups_.getByteString(index); } @@ -860,6 +995,7 @@ public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) { @SuppressWarnings("serial") private volatile java.lang.Object etag_ = ""; + /** * * @@ -892,6 +1028,7 @@ public java.lang.String getEtag() { return s; } } + /** * * @@ -939,14 +1076,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, config_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(config_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, config_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, displayName_); } if (computeCapacityCase_ == 5) { output.writeInt32(5, (int) ((java.lang.Integer) computeCapacity_)); @@ -959,21 +1096,23 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io .getNumber()) { output.writeEnum(7, state_); } - if (((bitField0_ & 0x00000001) != 0)) { + if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(8, getCreateTime()); } - if (((bitField0_ & 0x00000002) != 0)) { + if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(9, getUpdateTime()); } for (int i = 0; i < referencingDatabases_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString( - output, 10, referencingDatabases_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 10, referencingDatabases_.getRaw(i)); } for (int i = 0; i < referencingBackups_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 11, referencingBackups_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 11, referencingBackups_.getRaw(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 12, etag_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 12, etag_); + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(13, getAutoscalingConfig()); } getUnknownFields().writeTo(output); } @@ -984,14 +1123,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, config_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(config_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, config_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, displayName_); } if (computeCapacityCase_ == 5) { size += @@ -1008,10 +1147,10 @@ public int getSerializedSize() { .getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(7, state_); } - if (((bitField0_ & 0x00000001) != 0)) { + if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, getCreateTime()); } - if (((bitField0_ & 0x00000002) != 0)) { + if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, getUpdateTime()); } { @@ -1030,8 +1169,11 @@ public int getSerializedSize() { size += dataSize; size += 1 * getReferencingBackupsList().size(); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, etag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(etag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(12, etag_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(13, getAutoscalingConfig()); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -1052,6 +1194,10 @@ public boolean equals(final java.lang.Object obj) { if (!getName().equals(other.getName())) return false; if (!getConfig().equals(other.getConfig())) return false; if (!getDisplayName().equals(other.getDisplayName())) return false; + if (hasAutoscalingConfig() != other.hasAutoscalingConfig()) return false; + if (hasAutoscalingConfig()) { + if (!getAutoscalingConfig().equals(other.getAutoscalingConfig())) return false; + } if (state_ != other.state_) return false; if (hasCreateTime() != other.hasCreateTime()) return false; if (hasCreateTime()) { @@ -1092,6 +1238,10 @@ public int hashCode() { hash = (53 * hash) + getConfig().hashCode(); hash = (37 * hash) + DISPLAY_NAME_FIELD_NUMBER; hash = (53 * hash) + getDisplayName().hashCode(); + if (hasAutoscalingConfig()) { + hash = (37 * hash) + AUTOSCALING_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getAutoscalingConfig().hashCode(); + } hash = (37 * hash) + STATE_FIELD_NUMBER; hash = (53 * hash) + state_; if (hasCreateTime()) { @@ -1166,38 +1316,38 @@ public static com.google.spanner.admin.instance.v1.InstancePartition parseFrom( public static com.google.spanner.admin.instance.v1.InstancePartition parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.InstancePartition parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.InstancePartition parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.InstancePartition parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.InstancePartition parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.InstancePartition parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1221,10 +1371,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1235,7 +1386,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.InstancePartition} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.InstancePartition) com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder { @@ -1245,7 +1396,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_InstancePartition_fieldAccessorTable @@ -1259,15 +1410,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getCreateTimeFieldBuilder(); - getUpdateTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetAutoscalingConfigFieldBuilder(); + internalGetCreateTimeFieldBuilder(); + internalGetUpdateTimeFieldBuilder(); } } @@ -1278,6 +1430,11 @@ public Builder clear() { name_ = ""; config_ = ""; displayName_ = ""; + autoscalingConfig_ = null; + if (autoscalingConfigBuilder_ != null) { + autoscalingConfigBuilder_.dispose(); + autoscalingConfigBuilder_ = null; + } state_ = 0; createTime_ = null; if (createTimeBuilder_ != null) { @@ -1340,27 +1497,34 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.InstancePartitio if (((from_bitField0_ & 0x00000004) != 0)) { result.displayName_ = displayName_; } + int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000020) != 0)) { - result.state_ = state_; + result.autoscalingConfig_ = + autoscalingConfigBuilder_ == null + ? autoscalingConfig_ + : autoscalingConfigBuilder_.build(); + to_bitField0_ |= 0x00000001; } - int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000040) != 0)) { - result.createTime_ = createTimeBuilder_ == null ? createTime_ : createTimeBuilder_.build(); - to_bitField0_ |= 0x00000001; + result.state_ = state_; } if (((from_bitField0_ & 0x00000080) != 0)) { - result.updateTime_ = updateTimeBuilder_ == null ? updateTime_ : updateTimeBuilder_.build(); + result.createTime_ = createTimeBuilder_ == null ? createTime_ : createTimeBuilder_.build(); to_bitField0_ |= 0x00000002; } if (((from_bitField0_ & 0x00000100) != 0)) { + result.updateTime_ = updateTimeBuilder_ == null ? updateTime_ : updateTimeBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000200) != 0)) { referencingDatabases_.makeImmutable(); result.referencingDatabases_ = referencingDatabases_; } - if (((from_bitField0_ & 0x00000200) != 0)) { + if (((from_bitField0_ & 0x00000400) != 0)) { referencingBackups_.makeImmutable(); result.referencingBackups_ = referencingBackups_; } - if (((from_bitField0_ & 0x00000400) != 0)) { + if (((from_bitField0_ & 0x00000800) != 0)) { result.etag_ = etag_; } result.bitField0_ |= to_bitField0_; @@ -1371,39 +1535,6 @@ private void buildPartialOneofs(com.google.spanner.admin.instance.v1.InstancePar result.computeCapacity_ = this.computeCapacity_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.InstancePartition) { @@ -1432,6 +1563,9 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstancePartition bitField0_ |= 0x00000004; onChanged(); } + if (other.hasAutoscalingConfig()) { + mergeAutoscalingConfig(other.getAutoscalingConfig()); + } if (other.state_ != 0) { setStateValue(other.getStateValue()); } @@ -1444,7 +1578,7 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstancePartition if (!other.referencingDatabases_.isEmpty()) { if (referencingDatabases_.isEmpty()) { referencingDatabases_ = other.referencingDatabases_; - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000200; } else { ensureReferencingDatabasesIsMutable(); referencingDatabases_.addAll(other.referencingDatabases_); @@ -1454,7 +1588,7 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstancePartition if (!other.referencingBackups_.isEmpty()) { if (referencingBackups_.isEmpty()) { referencingBackups_ = other.referencingBackups_; - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; } else { ensureReferencingBackupsIsMutable(); referencingBackups_.addAll(other.referencingBackups_); @@ -1463,7 +1597,7 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstancePartition } if (!other.getEtag().isEmpty()) { etag_ = other.etag_; - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; onChanged(); } switch (other.getComputeCapacityCase()) { @@ -1541,19 +1675,21 @@ public Builder mergeFrom( case 56: { state_ = input.readEnum(); - bitField0_ |= 0x00000020; + bitField0_ |= 0x00000040; break; } // case 56 case 66: { - input.readMessage(getCreateTimeFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000040; + input.readMessage( + internalGetCreateTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000080; break; } // case 66 case 74: { - input.readMessage(getUpdateTimeFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000080; + input.readMessage( + internalGetUpdateTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000100; break; } // case 74 case 82: @@ -1573,9 +1709,16 @@ public Builder mergeFrom( case 98: { etag_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; break; } // case 98 + case 106: + { + input.readMessage( + internalGetAutoscalingConfigFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000020; + break; + } // case 106 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1610,6 +1753,7 @@ public Builder clearComputeCapacity() { private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -1637,6 +1781,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1664,6 +1809,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1690,6 +1836,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1712,6 +1859,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -1741,6 +1889,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object config_ = ""; + /** * * @@ -1768,6 +1917,7 @@ public java.lang.String getConfig() { return (java.lang.String) ref; } } + /** * * @@ -1795,6 +1945,7 @@ public com.google.protobuf.ByteString getConfigBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1821,6 +1972,7 @@ public Builder setConfig(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1843,6 +1995,7 @@ public Builder clearConfig() { onChanged(); return this; } + /** * * @@ -1872,6 +2025,7 @@ public Builder setConfigBytes(com.google.protobuf.ByteString value) { } private java.lang.Object displayName_ = ""; + /** * * @@ -1895,6 +2049,7 @@ public java.lang.String getDisplayName() { return (java.lang.String) ref; } } + /** * * @@ -1918,6 +2073,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1940,6 +2096,7 @@ public Builder setDisplayName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1958,6 +2115,7 @@ public Builder clearDisplayName() { onChanged(); return this; } + /** * * @@ -1988,8 +2146,8 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { *
                                      * The number of nodes allocated to this instance partition.
                                      *
                                -     * Users can set the node_count field to specify the target number of nodes
                                -     * allocated to the instance partition.
                                +     * Users can set the `node_count` field to specify the target number of
                                +     * nodes allocated to the instance partition.
                                      *
                                      * This may be zero in API responses for instance partitions that are not
                                      * yet in state `READY`.
                                @@ -2002,14 +2160,15 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) {
                                     public boolean hasNodeCount() {
                                       return computeCapacityCase_ == 5;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                      * The number of nodes allocated to this instance partition.
                                      *
                                -     * Users can set the node_count field to specify the target number of nodes
                                -     * allocated to the instance partition.
                                +     * Users can set the `node_count` field to specify the target number of
                                +     * nodes allocated to the instance partition.
                                      *
                                      * This may be zero in API responses for instance partitions that are not
                                      * yet in state `READY`.
                                @@ -2025,14 +2184,15 @@ public int getNodeCount() {
                                       }
                                       return 0;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                      * The number of nodes allocated to this instance partition.
                                      *
                                -     * Users can set the node_count field to specify the target number of nodes
                                -     * allocated to the instance partition.
                                +     * Users can set the `node_count` field to specify the target number of
                                +     * nodes allocated to the instance partition.
                                      *
                                      * This may be zero in API responses for instance partitions that are not
                                      * yet in state `READY`.
                                @@ -2050,14 +2210,15 @@ public Builder setNodeCount(int value) {
                                       onChanged();
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                      * The number of nodes allocated to this instance partition.
                                      *
                                -     * Users can set the node_count field to specify the target number of nodes
                                -     * allocated to the instance partition.
                                +     * Users can set the `node_count` field to specify the target number of
                                +     * nodes allocated to the instance partition.
                                      *
                                      * This may be zero in API responses for instance partitions that are not
                                      * yet in state `READY`.
                                @@ -2082,11 +2243,11 @@ public Builder clearNodeCount() {
                                      * 
                                      * The number of processing units allocated to this instance partition.
                                      *
                                -     * Users can set the processing_units field to specify the target number of
                                -     * processing units allocated to the instance partition.
                                +     * Users can set the `processing_units` field to specify the target number
                                +     * of processing units allocated to the instance partition.
                                      *
                                -     * This may be zero in API responses for instance partitions that are not
                                -     * yet in state `READY`.
                                +     * This might be zero in API responses for instance partitions that are not
                                +     * yet in the `READY` state.
                                      * 
                                * * int32 processing_units = 6; @@ -2096,17 +2257,18 @@ public Builder clearNodeCount() { public boolean hasProcessingUnits() { return computeCapacityCase_ == 6; } + /** * * *
                                      * The number of processing units allocated to this instance partition.
                                      *
                                -     * Users can set the processing_units field to specify the target number of
                                -     * processing units allocated to the instance partition.
                                +     * Users can set the `processing_units` field to specify the target number
                                +     * of processing units allocated to the instance partition.
                                      *
                                -     * This may be zero in API responses for instance partitions that are not
                                -     * yet in state `READY`.
                                +     * This might be zero in API responses for instance partitions that are not
                                +     * yet in the `READY` state.
                                      * 
                                * * int32 processing_units = 6; @@ -2119,17 +2281,18 @@ public int getProcessingUnits() { } return 0; } + /** * * *
                                      * The number of processing units allocated to this instance partition.
                                      *
                                -     * Users can set the processing_units field to specify the target number of
                                -     * processing units allocated to the instance partition.
                                +     * Users can set the `processing_units` field to specify the target number
                                +     * of processing units allocated to the instance partition.
                                      *
                                -     * This may be zero in API responses for instance partitions that are not
                                -     * yet in state `READY`.
                                +     * This might be zero in API responses for instance partitions that are not
                                +     * yet in the `READY` state.
                                      * 
                                * * int32 processing_units = 6; @@ -2144,17 +2307,18 @@ public Builder setProcessingUnits(int value) { onChanged(); return this; } + /** * * *
                                      * The number of processing units allocated to this instance partition.
                                      *
                                -     * Users can set the processing_units field to specify the target number of
                                -     * processing units allocated to the instance partition.
                                +     * Users can set the `processing_units` field to specify the target number
                                +     * of processing units allocated to the instance partition.
                                      *
                                -     * This may be zero in API responses for instance partitions that are not
                                -     * yet in state `READY`.
                                +     * This might be zero in API responses for instance partitions that are not
                                +     * yet in the `READY` state.
                                      * 
                                * * int32 processing_units = 6; @@ -2170,7 +2334,253 @@ public Builder clearProcessingUnits() { return this; } + private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.AutoscalingConfig, + com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, + com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> + autoscalingConfigBuilder_; + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the autoscalingConfig field is set. + */ + public boolean hasAutoscalingConfig() { + return ((bitField0_ & 0x00000020) != 0); + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The autoscalingConfig. + */ + public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConfig() { + if (autoscalingConfigBuilder_ == null) { + return autoscalingConfig_ == null + ? com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance() + : autoscalingConfig_; + } else { + return autoscalingConfigBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAutoscalingConfig( + com.google.spanner.admin.instance.v1.AutoscalingConfig value) { + if (autoscalingConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + autoscalingConfig_ = value; + } else { + autoscalingConfigBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAutoscalingConfig( + com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder builderForValue) { + if (autoscalingConfigBuilder_ == null) { + autoscalingConfig_ = builderForValue.build(); + } else { + autoscalingConfigBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAutoscalingConfig( + com.google.spanner.admin.instance.v1.AutoscalingConfig value) { + if (autoscalingConfigBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0) + && autoscalingConfig_ != null + && autoscalingConfig_ + != com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance()) { + getAutoscalingConfigBuilder().mergeFrom(value); + } else { + autoscalingConfig_ = value; + } + } else { + autoscalingConfigBuilder_.mergeFrom(value); + } + if (autoscalingConfig_ != null) { + bitField0_ |= 0x00000020; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAutoscalingConfig() { + bitField0_ = (bitField0_ & ~0x00000020); + autoscalingConfig_ = null; + if (autoscalingConfigBuilder_ != null) { + autoscalingConfigBuilder_.dispose(); + autoscalingConfigBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder + getAutoscalingConfigBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return internalGetAutoscalingConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder + getAutoscalingConfigOrBuilder() { + if (autoscalingConfigBuilder_ != null) { + return autoscalingConfigBuilder_.getMessageOrBuilder(); + } else { + return autoscalingConfig_ == null + ? com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance() + : autoscalingConfig_; + } + } + + /** + * + * + *
                                +     * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +     * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +     * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +     * allocated to the instance partition.
                                +     * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.AutoscalingConfig, + com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, + com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> + internalGetAutoscalingConfigFieldBuilder() { + if (autoscalingConfigBuilder_ == null) { + autoscalingConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.admin.instance.v1.AutoscalingConfig, + com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, + com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder>( + getAutoscalingConfig(), getParentForChildren(), isClean()); + autoscalingConfig_ = null; + } + return autoscalingConfigBuilder_; + } + private int state_ = 0; + /** * * @@ -2188,6 +2598,7 @@ public Builder clearProcessingUnits() { public int getStateValue() { return state_; } + /** * * @@ -2204,10 +2615,11 @@ public int getStateValue() { */ public Builder setStateValue(int value) { state_ = value; - bitField0_ |= 0x00000020; + bitField0_ |= 0x00000040; onChanged(); return this; } + /** * * @@ -2229,6 +2641,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition.State getState() { ? com.google.spanner.admin.instance.v1.InstancePartition.State.UNRECOGNIZED : result; } + /** * * @@ -2247,11 +2660,12 @@ public Builder setState(com.google.spanner.admin.instance.v1.InstancePartition.S if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000020; + bitField0_ |= 0x00000040; state_ = value.getNumber(); onChanged(); return this; } + /** * * @@ -2266,18 +2680,19 @@ public Builder setState(com.google.spanner.admin.instance.v1.InstancePartition.S * @return This builder for chaining. */ public Builder clearState() { - bitField0_ = (bitField0_ & ~0x00000020); + bitField0_ = (bitField0_ & ~0x00000040); state_ = 0; onChanged(); return this; } private com.google.protobuf.Timestamp createTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -2292,8 +2707,9 @@ public Builder clearState() { * @return Whether the createTime field is set. */ public boolean hasCreateTime() { - return ((bitField0_ & 0x00000040) != 0); + return ((bitField0_ & 0x00000080) != 0); } + /** * * @@ -2316,6 +2732,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -2336,10 +2753,11 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { } else { createTimeBuilder_.setMessage(value); } - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); return this; } + /** * * @@ -2357,10 +2775,11 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal } else { createTimeBuilder_.setMessage(builderForValue.build()); } - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); return this; } + /** * * @@ -2374,7 +2793,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal */ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { if (createTimeBuilder_ == null) { - if (((bitField0_ & 0x00000040) != 0) + if (((bitField0_ & 0x00000080) != 0) && createTime_ != null && createTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { getCreateTimeBuilder().mergeFrom(value); @@ -2385,11 +2804,12 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { createTimeBuilder_.mergeFrom(value); } if (createTime_ != null) { - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); } return this; } + /** * * @@ -2402,7 +2822,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { *
                                */ public Builder clearCreateTime() { - bitField0_ = (bitField0_ & ~0x00000040); + bitField0_ = (bitField0_ & ~0x00000080); createTime_ = null; if (createTimeBuilder_ != null) { createTimeBuilder_.dispose(); @@ -2411,6 +2831,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -2423,10 +2844,11 @@ public Builder clearCreateTime() { *
                                */ public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); - return getCreateTimeFieldBuilder().getBuilder(); + return internalGetCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -2447,6 +2869,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -2458,14 +2881,14 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * .google.protobuf.Timestamp create_time = 8 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreateTimeFieldBuilder() { + internalGetCreateTimeFieldBuilder() { if (createTimeBuilder_ == null) { createTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2476,11 +2899,12 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { } private com.google.protobuf.Timestamp updateTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updateTimeBuilder_; + /** * * @@ -2496,8 +2920,9 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * @return Whether the updateTime field is set. */ public boolean hasUpdateTime() { - return ((bitField0_ & 0x00000080) != 0); + return ((bitField0_ & 0x00000100) != 0); } + /** * * @@ -2521,6 +2946,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { return updateTimeBuilder_.getMessage(); } } + /** * * @@ -2542,10 +2968,11 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp value) { } else { updateTimeBuilder_.setMessage(value); } - bitField0_ |= 0x00000080; + bitField0_ |= 0x00000100; onChanged(); return this; } + /** * * @@ -2564,10 +2991,11 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal } else { updateTimeBuilder_.setMessage(builderForValue.build()); } - bitField0_ |= 0x00000080; + bitField0_ |= 0x00000100; onChanged(); return this; } + /** * * @@ -2582,7 +3010,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal */ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { if (updateTimeBuilder_ == null) { - if (((bitField0_ & 0x00000080) != 0) + if (((bitField0_ & 0x00000100) != 0) && updateTime_ != null && updateTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { getUpdateTimeBuilder().mergeFrom(value); @@ -2593,11 +3021,12 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { updateTimeBuilder_.mergeFrom(value); } if (updateTime_ != null) { - bitField0_ |= 0x00000080; + bitField0_ |= 0x00000100; onChanged(); } return this; } + /** * * @@ -2611,7 +3040,7 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { * */ public Builder clearUpdateTime() { - bitField0_ = (bitField0_ & ~0x00000080); + bitField0_ = (bitField0_ & ~0x00000100); updateTime_ = null; if (updateTimeBuilder_ != null) { updateTimeBuilder_.dispose(); @@ -2620,6 +3049,7 @@ public Builder clearUpdateTime() { onChanged(); return this; } + /** * * @@ -2633,10 +3063,11 @@ public Builder clearUpdateTime() { * */ public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() { - bitField0_ |= 0x00000080; + bitField0_ |= 0x00000100; onChanged(); - return getUpdateTimeFieldBuilder().getBuilder(); + return internalGetUpdateTimeFieldBuilder().getBuilder(); } + /** * * @@ -2658,6 +3089,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { : updateTime_; } } + /** * * @@ -2670,14 +3102,14 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { * .google.protobuf.Timestamp update_time = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getUpdateTimeFieldBuilder() { + internalGetUpdateTimeFieldBuilder() { if (updateTimeBuilder_ == null) { updateTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2694,8 +3126,9 @@ private void ensureReferencingDatabasesIsMutable() { if (!referencingDatabases_.isModifiable()) { referencingDatabases_ = new com.google.protobuf.LazyStringArrayList(referencingDatabases_); } - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000200; } + /** * * @@ -2716,6 +3149,7 @@ public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { referencingDatabases_.makeImmutable(); return referencingDatabases_; } + /** * * @@ -2735,6 +3169,7 @@ public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() { public int getReferencingDatabasesCount() { return referencingDatabases_.size(); } + /** * * @@ -2755,6 +3190,7 @@ public int getReferencingDatabasesCount() { public java.lang.String getReferencingDatabases(int index) { return referencingDatabases_.get(index); } + /** * * @@ -2775,6 +3211,7 @@ public java.lang.String getReferencingDatabases(int index) { public com.google.protobuf.ByteString getReferencingDatabasesBytes(int index) { return referencingDatabases_.getByteString(index); } + /** * * @@ -2799,10 +3236,11 @@ public Builder setReferencingDatabases(int index, java.lang.String value) { } ensureReferencingDatabasesIsMutable(); referencingDatabases_.set(index, value); - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000200; onChanged(); return this; } + /** * * @@ -2826,10 +3264,11 @@ public Builder addReferencingDatabases(java.lang.String value) { } ensureReferencingDatabasesIsMutable(); referencingDatabases_.add(value); - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000200; onChanged(); return this; } + /** * * @@ -2850,10 +3289,11 @@ public Builder addReferencingDatabases(java.lang.String value) { public Builder addAllReferencingDatabases(java.lang.Iterable values) { ensureReferencingDatabasesIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, referencingDatabases_); - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000200; onChanged(); return this; } + /** * * @@ -2872,11 +3312,12 @@ public Builder addAllReferencingDatabases(java.lang.Iterable v */ public Builder clearReferencingDatabases() { referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList(); - bitField0_ = (bitField0_ & ~0x00000100); + bitField0_ = (bitField0_ & ~0x00000200); ; onChanged(); return this; } + /** * * @@ -2901,7 +3342,7 @@ public Builder addReferencingDatabasesBytes(com.google.protobuf.ByteString value checkByteStringIsUtf8(value); ensureReferencingDatabasesIsMutable(); referencingDatabases_.add(value); - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000200; onChanged(); return this; } @@ -2913,197 +3354,251 @@ private void ensureReferencingBackupsIsMutable() { if (!referencingBackups_.isModifiable()) { referencingBackups_ = new com.google.protobuf.LazyStringArrayList(referencingBackups_); } - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @return A list containing the referencingBackups. */ + @java.lang.Deprecated public com.google.protobuf.ProtocolStringList getReferencingBackupsList() { referencingBackups_.makeImmutable(); return referencingBackups_; } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @return The count of referencingBackups. */ + @java.lang.Deprecated public int getReferencingBackupsCount() { return referencingBackups_.size(); } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param index The index of the element to return. * @return The referencingBackups at the given index. */ + @java.lang.Deprecated public java.lang.String getReferencingBackups(int index) { return referencingBackups_.get(index); } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param index The index of the value to return. * @return The bytes of the referencingBackups at the given index. */ + @java.lang.Deprecated public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) { return referencingBackups_.getByteString(index); } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param index The index to set the value at. * @param value The referencingBackups to set. * @return This builder for chaining. */ + @java.lang.Deprecated public Builder setReferencingBackups(int index, java.lang.String value) { if (value == null) { throw new NullPointerException(); } ensureReferencingBackupsIsMutable(); referencingBackups_.set(index, value); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param value The referencingBackups to add. * @return This builder for chaining. */ + @java.lang.Deprecated public Builder addReferencingBackups(java.lang.String value) { if (value == null) { throw new NullPointerException(); } ensureReferencingBackupsIsMutable(); referencingBackups_.add(value); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param values The referencingBackups to add. * @return This builder for chaining. */ + @java.lang.Deprecated public Builder addAllReferencingBackups(java.lang.Iterable values) { ensureReferencingBackupsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, referencingBackups_); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @return This builder for chaining. */ + @java.lang.Deprecated public Builder clearReferencingBackups() { referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList(); - bitField0_ = (bitField0_ & ~0x00000200); + bitField0_ = (bitField0_ & ~0x00000400); ; onChanged(); return this; } + /** * * *
                                +     * Output only. Deprecated: This field is not populated.
                                      * Output only. The names of the backups that reference this instance
                                      * partition. Referencing backups should share the parent instance. The
                                      * existence of any referencing backup prevents the instance partition from
                                      * being deleted.
                                      * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param value The bytes of the referencingBackups to add. * @return This builder for chaining. */ + @java.lang.Deprecated public Builder addReferencingBackupsBytes(com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); @@ -3111,12 +3606,13 @@ public Builder addReferencingBackupsBytes(com.google.protobuf.ByteString value) checkByteStringIsUtf8(value); ensureReferencingBackupsIsMutable(); referencingBackups_.add(value); - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000400; onChanged(); return this; } private java.lang.Object etag_ = ""; + /** * * @@ -3148,6 +3644,7 @@ public java.lang.String getEtag() { return (java.lang.String) ref; } } + /** * * @@ -3179,6 +3676,7 @@ public com.google.protobuf.ByteString getEtagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3205,10 +3703,11 @@ public Builder setEtag(java.lang.String value) { throw new NullPointerException(); } etag_ = value; - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; onChanged(); return this; } + /** * * @@ -3231,10 +3730,11 @@ public Builder setEtag(java.lang.String value) { */ public Builder clearEtag() { etag_ = getDefaultInstance().getEtag(); - bitField0_ = (bitField0_ & ~0x00000400); + bitField0_ = (bitField0_ & ~0x00000800); onChanged(); return this; } + /** * * @@ -3262,22 +3762,11 @@ public Builder setEtagBytes(com.google.protobuf.ByteString value) { } checkByteStringIsUtf8(value); etag_ = value; - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000800; onChanged(); return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.InstancePartition) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionName.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionName.java index a0062eb8f67..1812ebe25e1 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionName.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java index 8299ee692be..e60669462db 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface InstancePartitionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.InstancePartition) @@ -41,6 +43,7 @@ public interface InstancePartitionOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -76,6 +79,7 @@ public interface InstancePartitionOrBuilder * @return The config. */ java.lang.String getConfig(); + /** * * @@ -107,6 +111,7 @@ public interface InstancePartitionOrBuilder * @return The displayName. */ java.lang.String getDisplayName(); + /** * * @@ -127,8 +132,8 @@ public interface InstancePartitionOrBuilder *
                                    * The number of nodes allocated to this instance partition.
                                    *
                                -   * Users can set the node_count field to specify the target number of nodes
                                -   * allocated to the instance partition.
                                +   * Users can set the `node_count` field to specify the target number of
                                +   * nodes allocated to the instance partition.
                                    *
                                    * This may be zero in API responses for instance partitions that are not
                                    * yet in state `READY`.
                                @@ -139,14 +144,15 @@ public interface InstancePartitionOrBuilder
                                    * @return Whether the nodeCount field is set.
                                    */
                                   boolean hasNodeCount();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                    * The number of nodes allocated to this instance partition.
                                    *
                                -   * Users can set the node_count field to specify the target number of nodes
                                -   * allocated to the instance partition.
                                +   * Users can set the `node_count` field to specify the target number of
                                +   * nodes allocated to the instance partition.
                                    *
                                    * This may be zero in API responses for instance partitions that are not
                                    * yet in state `READY`.
                                @@ -164,11 +170,11 @@ public interface InstancePartitionOrBuilder
                                    * 
                                    * The number of processing units allocated to this instance partition.
                                    *
                                -   * Users can set the processing_units field to specify the target number of
                                -   * processing units allocated to the instance partition.
                                +   * Users can set the `processing_units` field to specify the target number
                                +   * of processing units allocated to the instance partition.
                                    *
                                -   * This may be zero in API responses for instance partitions that are not
                                -   * yet in state `READY`.
                                +   * This might be zero in API responses for instance partitions that are not
                                +   * yet in the `READY` state.
                                    * 
                                * * int32 processing_units = 6; @@ -176,17 +182,18 @@ public interface InstancePartitionOrBuilder * @return Whether the processingUnits field is set. */ boolean hasProcessingUnits(); + /** * * *
                                    * The number of processing units allocated to this instance partition.
                                    *
                                -   * Users can set the processing_units field to specify the target number of
                                -   * processing units allocated to the instance partition.
                                +   * Users can set the `processing_units` field to specify the target number
                                +   * of processing units allocated to the instance partition.
                                    *
                                -   * This may be zero in API responses for instance partitions that are not
                                -   * yet in state `READY`.
                                +   * This might be zero in API responses for instance partitions that are not
                                +   * yet in the `READY` state.
                                    * 
                                * * int32 processing_units = 6; @@ -195,6 +202,58 @@ public interface InstancePartitionOrBuilder */ int getProcessingUnits(); + /** + * + * + *
                                +   * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +   * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +   * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +   * allocated to the instance partition.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the autoscalingConfig field is set. + */ + boolean hasAutoscalingConfig(); + + /** + * + * + *
                                +   * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +   * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +   * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +   * allocated to the instance partition.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The autoscalingConfig. + */ + com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConfig(); + + /** + * + * + *
                                +   * Optional. The autoscaling configuration. Autoscaling is enabled if this
                                +   * field is set. When autoscaling is enabled, fields in compute_capacity are
                                +   * treated as OUTPUT_ONLY fields and reflect the current compute capacity
                                +   * allocated to the instance partition.
                                +   * 
                                + * + * + * .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder getAutoscalingConfigOrBuilder(); + /** * * @@ -209,6 +268,7 @@ public interface InstancePartitionOrBuilder * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * @@ -237,6 +297,7 @@ public interface InstancePartitionOrBuilder * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -250,6 +311,7 @@ public interface InstancePartitionOrBuilder * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -276,6 +338,7 @@ public interface InstancePartitionOrBuilder * @return Whether the updateTime field is set. */ boolean hasUpdateTime(); + /** * * @@ -290,6 +353,7 @@ public interface InstancePartitionOrBuilder * @return The updateTime. */ com.google.protobuf.Timestamp getUpdateTime(); + /** * * @@ -319,6 +383,7 @@ public interface InstancePartitionOrBuilder * @return A list containing the referencingDatabases. */ java.util.List getReferencingDatabasesList(); + /** * * @@ -335,6 +400,7 @@ public interface InstancePartitionOrBuilder * @return The count of referencingDatabases. */ int getReferencingDatabasesCount(); + /** * * @@ -352,6 +418,7 @@ public interface InstancePartitionOrBuilder * @return The referencingDatabases at the given index. */ java.lang.String getReferencingDatabases(int index); + /** * * @@ -374,67 +441,90 @@ public interface InstancePartitionOrBuilder * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @return A list containing the referencingBackups. */ + @java.lang.Deprecated java.util.List getReferencingBackupsList(); + /** * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @return The count of referencingBackups. */ + @java.lang.Deprecated int getReferencingBackupsCount(); + /** * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param index The index of the element to return. * @return The referencingBackups at the given index. */ + @java.lang.Deprecated java.lang.String getReferencingBackups(int index); + /** * * *
                                +   * Output only. Deprecated: This field is not populated.
                                    * Output only. The names of the backups that reference this instance
                                    * partition. Referencing backups should share the parent instance. The
                                    * existence of any referencing backup prevents the instance partition from
                                    * being deleted.
                                    * 
                                * - * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * repeated string referencing_backups = 11 [deprecated = true, (.google.api.field_behavior) = OUTPUT_ONLY]; * * + * @deprecated google.spanner.admin.instance.v1.InstancePartition.referencing_backups is + * deprecated. See google/spanner/admin/instance/v1/spanner_instance_admin.proto;l=1855 * @param index The index of the value to return. * @return The bytes of the referencingBackups at the given index. */ + @java.lang.Deprecated com.google.protobuf.ByteString getReferencingBackupsBytes(int index); /** @@ -458,6 +548,7 @@ public interface InstancePartitionOrBuilder * @return The etag. */ java.lang.String getEtag(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java index 7790d99d7a3..f1bc991ca78 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,15 +30,26 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest} */ -public final class ListInstanceConfigOperationsRequest - extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstanceConfigOperationsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest) ListInstanceConfigOperationsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstanceConfigOperationsRequest"); + } + // Use ListInstanceConfigOperationsRequest.newBuilder() to construct. private ListInstanceConfigOperationsRequest( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +59,13 @@ private ListInstanceConfigOperationsRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstanceConfigOperationsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_fieldAccessorTable @@ -72,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -98,6 +105,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -129,6 +137,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -141,22 +150,21 @@ public com.google.protobuf.ByteString getParentBytes() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: + * The following fields in the Operation are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -164,18 +172,18 @@ public com.google.protobuf.ByteString getParentBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -194,6 +202,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -206,22 +215,21 @@ public java.lang.String getFilter() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: + * The following fields in the Operation are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -229,18 +237,18 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -262,6 +270,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -283,6 +292,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -310,6 +320,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -352,17 +363,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, filter_); } if (pageSize_ != 0) { output.writeInt32(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -373,17 +384,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -467,39 +478,39 @@ public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsR public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -523,10 +534,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -537,7 +549,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest) com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequestOrBuilder { @@ -547,7 +559,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_fieldAccessorTable @@ -561,7 +573,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -627,39 +639,6 @@ private void buildPartial0( } } - @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 @@ -765,6 +744,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -790,6 +770,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -815,6 +796,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -839,6 +821,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -859,6 +842,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -886,6 +870,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -898,22 +883,21 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -921,18 +905,18 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -950,6 +934,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -962,22 +947,21 @@ public java.lang.String getFilter() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -985,18 +969,18 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1014,6 +998,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1026,22 +1011,21 @@ public com.google.protobuf.ByteString getFilterBytes() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1049,18 +1033,18 @@ public com.google.protobuf.ByteString getFilterBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1077,6 +1061,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1089,22 +1074,21 @@ public Builder setFilter(java.lang.String value) { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1112,18 +1096,18 @@ public Builder setFilter(java.lang.String value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1136,6 +1120,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1148,22 +1133,21 @@ public Builder clearFilter() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1171,18 +1155,18 @@ public Builder clearFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -1202,6 +1186,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1218,6 +1203,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1238,6 +1224,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1258,6 +1245,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1284,6 +1272,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1310,6 +1299,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1335,6 +1325,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1356,6 +1347,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1383,17 +1375,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java index 8aa43b97043..af8d21bbeca 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstanceConfigOperationsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest) @@ -39,6 +41,7 @@ public interface ListInstanceConfigOperationsRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -67,22 +70,21 @@ public interface ListInstanceConfigOperationsRequestOrBuilder * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -90,18 +92,18 @@ public interface ListInstanceConfigOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. *
                                * * string filter = 2; @@ -109,6 +111,7 @@ public interface ListInstanceConfigOperationsRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -121,22 +124,21 @@ public interface ListInstanceConfigOperationsRequestOrBuilder * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -144,18 +146,18 @@ public interface ListInstanceConfigOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) - * AND` \ - * `(metadata.instance_config.name:custom-config) AND` \ - * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - * * The instance configuration name contains "custom-config". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata) + * AND` \ + * `(metadata.instance_config.name:custom-config) AND` \ + * `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. + * * The instance configuration name contains "custom-config". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2; @@ -194,6 +196,7 @@ public interface ListInstanceConfigOperationsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java index eb10ad4f5b8..082dc8d36bc 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,15 +30,26 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse} */ -public final class ListInstanceConfigOperationsResponse - extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstanceConfigOperationsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse) ListInstanceConfigOperationsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstanceConfigOperationsResponse"); + } + // Use ListInstanceConfigOperationsResponse.newBuilder() to construct. private ListInstanceConfigOperationsResponse( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +58,13 @@ private ListInstanceConfigOperationsResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstanceConfigOperationsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_fieldAccessorTable @@ -72,14 +78,15 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List operations_; + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -89,14 +96,15 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getOperationsList() { return operations_; } + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -107,14 +115,15 @@ public java.util.List getOperationsList() { getOperationsOrBuilderList() { return operations_; } + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -124,14 +133,15 @@ public java.util.List getOperationsList() { public int getOperationsCount() { return operations_.size(); } + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -141,14 +151,15 @@ public int getOperationsCount() { public com.google.longrunning.Operation getOperations(int index) { return operations_.get(index); } + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -163,6 +174,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -188,6 +200,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -231,8 +244,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < operations_.size(); i++) { output.writeMessage(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -246,8 +259,8 @@ public int getSerializedSize() { for (int i = 0; i < operations_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -327,39 +340,39 @@ public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsR public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -383,10 +396,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -397,7 +411,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse) com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponseOrBuilder { @@ -407,7 +421,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_fieldAccessorTable @@ -421,7 +435,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -497,39 +511,6 @@ private void buildPartial0( } } - @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 @@ -566,8 +547,8 @@ public Builder mergeFrom( operations_ = other.operations_; bitField0_ = (bitField0_ & ~0x00000001); operationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getOperationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetOperationsFieldBuilder() : null; } else { operationsBuilder_.addAllMessages(other.operations_); @@ -652,7 +633,7 @@ private void ensureOperationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> @@ -662,10 +643,10 @@ private void ensureOperationsIsMutable() { * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -678,14 +659,15 @@ public java.util.List getOperationsList() { return operationsBuilder_.getMessageList(); } } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -698,14 +680,15 @@ public int getOperationsCount() { return operationsBuilder_.getCount(); } } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -718,14 +701,15 @@ public com.google.longrunning.Operation getOperations(int index) { return operationsBuilder_.getMessage(index); } } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -744,14 +728,15 @@ public Builder setOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -768,14 +753,15 @@ public Builder setOperations( } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -794,14 +780,15 @@ public Builder addOperations(com.google.longrunning.Operation value) { } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -820,14 +807,15 @@ public Builder addOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -843,14 +831,15 @@ public Builder addOperations(com.google.longrunning.Operation.Builder builderFor } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -867,14 +856,15 @@ public Builder addOperations( } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -891,14 +881,15 @@ public Builder addAllOperations( } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -914,14 +905,15 @@ public Builder clearOperations() { } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -937,30 +929,32 @@ public Builder removeOperations(int index) { } return this; } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder getOperationsBuilder(int index) { - return getOperationsFieldBuilder().getBuilder(index); + return internalGetOperationsFieldBuilder().getBuilder(index); } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -973,14 +967,15 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return operationsBuilder_.getMessageOrBuilder(index); } } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -994,65 +989,68 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return java.util.Collections.unmodifiableList(operations_); } } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder() { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(com.google.longrunning.Operation.getDefaultInstance()); } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder(int index) { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(index, com.google.longrunning.Operation.getDefaultInstance()); } + /** * * *
                                -     * The list of matching instance configuration [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance configuration long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the name of the instance configuration. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public java.util.List getOperationsBuilderList() { - return getOperationsFieldBuilder().getBuilderList(); + return internalGetOperationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getOperationsFieldBuilder() { + internalGetOperationsFieldBuilder() { if (operationsBuilder_ == null) { operationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1063,6 +1061,7 @@ public java.util.List getOperationsBui } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1087,6 +1086,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1111,6 +1111,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1134,6 +1135,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1153,6 +1155,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1178,17 +1181,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java index 0636115bd47..4ca7d4055cd 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstanceConfigOperationsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse) @@ -28,66 +30,70 @@ public interface ListInstanceConfigOperationsResponseOrBuilder * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsList(); + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ com.google.longrunning.Operation getOperations(int index); + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ int getOperationsCount(); + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsOrBuilderList(); + /** * * *
                                -   * The list of matching instance configuration [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance configuration long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the name of the instance configuration. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -109,6 +115,7 @@ public interface ListInstanceConfigOperationsResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java index 43e0ae98c17..14e719398e3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigsRequest} */ -public final class ListInstanceConfigsRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstanceConfigsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstanceConfigsRequest) ListInstanceConfigsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstanceConfigsRequest"); + } + // Use ListInstanceConfigsRequest.newBuilder() to construct. - private ListInstanceConfigsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListInstanceConfigsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListInstanceConfigsRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstanceConfigsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -126,6 +135,7 @@ public com.google.protobuf.ByteString getParentBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 2; private int pageSize_ = 0; + /** * * @@ -147,6 +157,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -173,6 +184,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -214,14 +226,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } if (pageSize_ != 0) { output.writeInt32(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); } getUnknownFields().writeTo(output); } @@ -232,14 +244,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -319,38 +331,38 @@ public static com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest pa public static com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -374,10 +386,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -388,7 +401,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstanceConfigsRequest) com.google.spanner.admin.instance.v1.ListInstanceConfigsRequestOrBuilder { @@ -398,7 +411,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_fieldAccessorTable @@ -410,7 +423,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -470,39 +483,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest) { @@ -595,6 +575,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -621,6 +602,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -647,6 +629,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -672,6 +655,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -693,6 +677,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -721,6 +706,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -737,6 +723,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -757,6 +744,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -777,6 +765,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -802,6 +791,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -827,6 +817,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -851,6 +842,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -871,6 +863,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -897,17 +890,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstanceConfigsRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java index 9a5586af064..0d3a7e8620a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstanceConfigsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstanceConfigsRequest) @@ -40,6 +42,7 @@ public interface ListInstanceConfigsRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -86,6 +89,7 @@ public interface ListInstanceConfigsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java index bd3e5135668..da4710b4cf1 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigsResponse} */ -public final class ListInstanceConfigsResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstanceConfigsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstanceConfigsResponse) ListInstanceConfigsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstanceConfigsResponse"); + } + // Use ListInstanceConfigsResponse.newBuilder() to construct. - private ListInstanceConfigsResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListInstanceConfigsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListInstanceConfigsResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstanceConfigsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List instanceConfigs_; + /** * * @@ -83,6 +91,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getInstanceConfigsList() { return instanceConfigs_; } + /** * * @@ -97,6 +106,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getInstanceConfigsOrBuilderList() { return instanceConfigs_; } + /** * * @@ -110,6 +120,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getInstanceConfigsCount() { return instanceConfigs_.size(); } + /** * * @@ -123,6 +134,7 @@ public int getInstanceConfigsCount() { public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfigs(int index) { return instanceConfigs_.get(index); } + /** * * @@ -142,6 +154,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -167,6 +180,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -210,8 +224,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < instanceConfigs_.size(); i++) { output.writeMessage(1, instanceConfigs_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -225,8 +239,8 @@ public int getSerializedSize() { for (int i = 0; i < instanceConfigs_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, instanceConfigs_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -305,38 +319,38 @@ public static com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse p public static com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -360,10 +374,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -374,7 +389,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstanceConfigsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstanceConfigsResponse) com.google.spanner.admin.instance.v1.ListInstanceConfigsResponseOrBuilder { @@ -384,7 +399,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_fieldAccessorTable @@ -396,7 +411,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -469,39 +484,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse) { @@ -536,8 +518,8 @@ public Builder mergeFrom( instanceConfigs_ = other.instanceConfigs_; bitField0_ = (bitField0_ & ~0x00000001); instanceConfigsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getInstanceConfigsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetInstanceConfigsFieldBuilder() : null; } else { instanceConfigsBuilder_.addAllMessages(other.instanceConfigs_); @@ -626,7 +608,7 @@ private void ensureInstanceConfigsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> @@ -649,6 +631,7 @@ private void ensureInstanceConfigsIsMutable() { return instanceConfigsBuilder_.getMessageList(); } } + /** * * @@ -665,6 +648,7 @@ public int getInstanceConfigsCount() { return instanceConfigsBuilder_.getCount(); } } + /** * * @@ -681,6 +665,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfigs(in return instanceConfigsBuilder_.getMessage(index); } } + /** * * @@ -704,6 +689,7 @@ public Builder setInstanceConfigs( } return this; } + /** * * @@ -724,6 +710,7 @@ public Builder setInstanceConfigs( } return this; } + /** * * @@ -746,6 +733,7 @@ public Builder addInstanceConfigs(com.google.spanner.admin.instance.v1.InstanceC } return this; } + /** * * @@ -769,6 +757,7 @@ public Builder addInstanceConfigs( } return this; } + /** * * @@ -789,6 +778,7 @@ public Builder addInstanceConfigs( } return this; } + /** * * @@ -809,6 +799,7 @@ public Builder addInstanceConfigs( } return this; } + /** * * @@ -829,6 +820,7 @@ public Builder addAllInstanceConfigs( } return this; } + /** * * @@ -848,6 +840,7 @@ public Builder clearInstanceConfigs() { } return this; } + /** * * @@ -867,6 +860,7 @@ public Builder removeInstanceConfigs(int index) { } return this; } + /** * * @@ -878,8 +872,9 @@ public Builder removeInstanceConfigs(int index) { */ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceConfigsBuilder( int index) { - return getInstanceConfigsFieldBuilder().getBuilder(index); + return internalGetInstanceConfigsFieldBuilder().getBuilder(index); } + /** * * @@ -897,6 +892,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC return instanceConfigsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -914,6 +910,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC return java.util.Collections.unmodifiableList(instanceConfigs_); } } + /** * * @@ -924,9 +921,10 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC * repeated .google.spanner.admin.instance.v1.InstanceConfig instance_configs = 1; */ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder addInstanceConfigsBuilder() { - return getInstanceConfigsFieldBuilder() + return internalGetInstanceConfigsFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance()); } + /** * * @@ -938,10 +936,11 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder addInstanceCo */ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder addInstanceConfigsBuilder( int index) { - return getInstanceConfigsFieldBuilder() + return internalGetInstanceConfigsFieldBuilder() .addBuilder( index, com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance()); } + /** * * @@ -953,17 +952,17 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder addInstanceCo */ public java.util.List getInstanceConfigsBuilderList() { - return getInstanceConfigsFieldBuilder().getBuilderList(); + return internalGetInstanceConfigsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> - getInstanceConfigsFieldBuilder() { + internalGetInstanceConfigsFieldBuilder() { if (instanceConfigsBuilder_ == null) { instanceConfigsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder>( @@ -977,6 +976,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder addInstanceCo } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1001,6 +1001,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1025,6 +1026,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1048,6 +1050,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1067,6 +1070,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1092,17 +1096,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstanceConfigsResponse) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java index e9d4ae5bad6..760d3e75574 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstanceConfigsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstanceConfigsResponse) @@ -34,6 +36,7 @@ public interface ListInstanceConfigsResponseOrBuilder * repeated .google.spanner.admin.instance.v1.InstanceConfig instance_configs = 1; */ java.util.List getInstanceConfigsList(); + /** * * @@ -44,6 +47,7 @@ public interface ListInstanceConfigsResponseOrBuilder * repeated .google.spanner.admin.instance.v1.InstanceConfig instance_configs = 1; */ com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfigs(int index); + /** * * @@ -54,6 +58,7 @@ public interface ListInstanceConfigsResponseOrBuilder * repeated .google.spanner.admin.instance.v1.InstanceConfig instance_configs = 1; */ int getInstanceConfigsCount(); + /** * * @@ -65,6 +70,7 @@ public interface ListInstanceConfigsResponseOrBuilder */ java.util.List getInstanceConfigsOrBuilderList(); + /** * * @@ -91,6 +97,7 @@ com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceConfigsO * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java index 0ed4d357a7e..57234d4bf92 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,15 +30,27 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest} */ +@com.google.protobuf.Generated public final class ListInstancePartitionOperationsRequest - extends com.google.protobuf.GeneratedMessageV3 + extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest) ListInstancePartitionOperationsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstancePartitionOperationsRequest"); + } + // Use ListInstancePartitionOperationsRequest.newBuilder() to construct. private ListInstancePartitionOperationsRequest( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +60,13 @@ private ListInstancePartitionOperationsRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstancePartitionOperationsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_fieldAccessorTable @@ -74,6 +81,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -100,6 +108,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -131,6 +140,7 @@ public com.google.protobuf.ByteString getParentBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -143,22 +153,21 @@ public com.google.protobuf.ByteString getParentBytes() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: + * The following fields in the Operation are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -166,18 +175,18 @@ public com.google.protobuf.ByteString getParentBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -196,6 +205,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -208,22 +218,21 @@ public java.lang.String getFilter() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: + * The following fields in the Operation are eligible for filtering: * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -231,18 +240,18 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -264,6 +273,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -285,6 +295,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -312,6 +323,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -342,6 +354,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { public static final int INSTANCE_PARTITION_DEADLINE_FIELD_NUMBER = 5; private com.google.protobuf.Timestamp instancePartitionDeadline_; + /** * * @@ -349,7 +362,8 @@ public com.google.protobuf.ByteString getPageTokenBytes() { * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -363,6 +377,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { public boolean hasInstancePartitionDeadline() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -370,7 +385,8 @@ public boolean hasInstancePartitionDeadline() { * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -386,6 +402,7 @@ public com.google.protobuf.Timestamp getInstancePartitionDeadline() { ? com.google.protobuf.Timestamp.getDefaultInstance() : instancePartitionDeadline_; } + /** * * @@ -393,7 +410,8 @@ public com.google.protobuf.Timestamp getInstancePartitionDeadline() { * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -422,17 +440,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, filter_); } if (pageSize_ != 0) { output.writeInt32(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(5, getInstancePartitionDeadline()); @@ -446,17 +464,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } if (((bitField0_ & 0x00000001) != 0)) { size += @@ -557,33 +575,33 @@ public int hashCode() { public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest @@ -591,7 +609,7 @@ public int hashCode() { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -615,10 +633,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -629,7 +648,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest) com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequestOrBuilder { @@ -639,7 +658,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_fieldAccessorTable @@ -655,14 +674,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstancePartitionDeadlineFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstancePartitionDeadlineFieldBuilder(); } } @@ -743,39 +762,6 @@ private void buildPartial0( 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 @@ -867,7 +853,8 @@ public Builder mergeFrom( case 42: { input.readMessage( - getInstancePartitionDeadlineFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstancePartitionDeadlineFieldBuilder().getBuilder(), + extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -891,6 +878,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -916,6 +904,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -941,6 +930,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -965,6 +955,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -985,6 +976,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -1012,6 +1004,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -1024,22 +1017,21 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1047,18 +1039,18 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -1076,6 +1068,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -1088,22 +1081,21 @@ public java.lang.String getFilter() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1111,18 +1103,18 @@ public java.lang.String getFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -1140,6 +1132,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1152,22 +1145,21 @@ public com.google.protobuf.ByteString getFilterBytes() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1175,18 +1167,18 @@ public com.google.protobuf.ByteString getFilterBytes() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -1203,6 +1195,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1215,22 +1208,21 @@ public Builder setFilter(java.lang.String value) { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1238,18 +1230,18 @@ public Builder setFilter(java.lang.String value) { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -1262,6 +1254,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1274,22 +1267,21 @@ public Builder clearFilter() { * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -1297,18 +1289,18 @@ public Builder clearFilter() { * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -1328,6 +1320,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1344,6 +1337,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1364,6 +1358,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1384,6 +1379,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1410,6 +1406,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1436,6 +1433,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1461,6 +1459,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1482,6 +1481,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1510,11 +1510,12 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp instancePartitionDeadline_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> instancePartitionDeadlineBuilder_; + /** * * @@ -1522,7 +1523,8 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1535,6 +1537,7 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { public boolean hasInstancePartitionDeadline() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1542,7 +1545,8 @@ public boolean hasInstancePartitionDeadline() { * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1561,6 +1565,7 @@ public com.google.protobuf.Timestamp getInstancePartitionDeadline() { return instancePartitionDeadlineBuilder_.getMessage(); } } + /** * * @@ -1568,7 +1573,8 @@ public com.google.protobuf.Timestamp getInstancePartitionDeadline() { * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1589,6 +1595,7 @@ public Builder setInstancePartitionDeadline(com.google.protobuf.Timestamp value) onChanged(); return this; } + /** * * @@ -1596,7 +1603,8 @@ public Builder setInstancePartitionDeadline(com.google.protobuf.Timestamp value) * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1615,6 +1623,7 @@ public Builder setInstancePartitionDeadline( onChanged(); return this; } + /** * * @@ -1622,7 +1631,8 @@ public Builder setInstancePartitionDeadline( * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1648,6 +1658,7 @@ public Builder mergeInstancePartitionDeadline(com.google.protobuf.Timestamp valu } return this; } + /** * * @@ -1655,7 +1666,8 @@ public Builder mergeInstancePartitionDeadline(com.google.protobuf.Timestamp valu * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1673,6 +1685,7 @@ public Builder clearInstancePartitionDeadline() { onChanged(); return this; } + /** * * @@ -1680,7 +1693,8 @@ public Builder clearInstancePartitionDeadline() { * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1691,8 +1705,9 @@ public Builder clearInstancePartitionDeadline() { public com.google.protobuf.Timestamp.Builder getInstancePartitionDeadlineBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getInstancePartitionDeadlineFieldBuilder().getBuilder(); + return internalGetInstancePartitionDeadlineFieldBuilder().getBuilder(); } + /** * * @@ -1700,7 +1715,8 @@ public com.google.protobuf.Timestamp.Builder getInstancePartitionDeadlineBuilder * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1717,6 +1733,7 @@ public com.google.protobuf.TimestampOrBuilder getInstancePartitionDeadlineOrBuil : instancePartitionDeadline_; } } + /** * * @@ -1724,7 +1741,8 @@ public com.google.protobuf.TimestampOrBuilder getInstancePartitionDeadlineOrBuil * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -1732,14 +1750,14 @@ public com.google.protobuf.TimestampOrBuilder getInstancePartitionDeadlineOrBuil * .google.protobuf.Timestamp instance_partition_deadline = 5 [(.google.api.field_behavior) = OPTIONAL]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getInstancePartitionDeadlineFieldBuilder() { + internalGetInstancePartitionDeadlineFieldBuilder() { if (instancePartitionDeadlineBuilder_ == null) { instancePartitionDeadlineBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1749,17 +1767,6 @@ public com.google.protobuf.TimestampOrBuilder getInstancePartitionDeadlineOrBuil return instancePartitionDeadlineBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java index 417d98e4217..aac74b47c7e 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstancePartitionOperationsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest) @@ -39,6 +41,7 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -67,22 +70,21 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -90,18 +92,18 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -109,6 +111,7 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -121,22 +124,21 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. * Colon `:` is the contains operator. Filter rules are not case sensitive. * - * The following fields in the [Operation][google.longrunning.Operation] - * are eligible for filtering: - * - * * `name` - The name of the long-running operation - * * `done` - False if the operation is in progress, else true. - * * `metadata.@type` - the type of metadata. For example, the type string - * for - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] - * is - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. - * * `metadata.<field_name>` - any field in metadata.value. - * `metadata.@type` must be specified first, if filtering on metadata - * fields. - * * `error` - Error associated with the long-running operation. - * * `response.@type` - the type of response. - * * `response.<field_name>` - any field in response.value. + * The following fields in the Operation are eligible for filtering: + * + * * `name` - The name of the long-running operation + * * `done` - False if the operation is in progress, else true. + * * `metadata.@type` - the type of metadata. For example, the type string + * for + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata] + * is + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`. + * * `metadata.<field_name>` - any field in metadata.value. + * `metadata.@type` must be specified first, if filtering on metadata + * fields. + * * `error` - Error associated with the long-running operation. + * * `response.@type` - the type of response. + * * `response.<field_name>` - any field in response.value. * * You can combine multiple expressions by enclosing each expression in * parentheses. By default, expressions are combined with AND logic. However, @@ -144,18 +146,18 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * * Here are a few examples: * - * * `done:true` - The operation is complete. - * * `(metadata.@type=` \ - * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) - * AND` \ - * `(metadata.instance_partition.name:custom-instance-partition) AND` \ - * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ - * `(error:*)` - Return operations where: - * * The operation's metadata type is - * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - * * The instance partition name contains "custom-instance-partition". - * * The operation started before 2021-03-28T14:50:00Z. - * * The operation resulted in an error. + * * `done:true` - The operation is complete. + * * `(metadata.@type=` \ + * `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata) + * AND` \ + * `(metadata.instance_partition.name:custom-instance-partition) AND` \ + * `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \ + * `(error:*)` - Return operations where: + * * The operation's metadata type is + * [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. + * * The instance partition name contains "custom-instance-partition". + * * The operation started before 2021-03-28T14:50:00Z. + * * The operation resulted in an error. * * * string filter = 2 [(.google.api.field_behavior) = OPTIONAL]; @@ -194,6 +196,7 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * @@ -218,7 +221,8 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -229,6 +233,7 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * @return Whether the instancePartitionDeadline field is set. */ boolean hasInstancePartitionDeadline(); + /** * * @@ -236,7 +241,8 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * @@ -247,6 +253,7 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * @return The instancePartitionDeadline. */ com.google.protobuf.Timestamp getInstancePartitionDeadline(); + /** * * @@ -254,7 +261,8 @@ public interface ListInstancePartitionOperationsRequestOrBuilder * Optional. Deadline used while retrieving metadata for instance partition * operations. Instance partitions whose operation metadata cannot be * retrieved within this deadline will be added to - * [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + * [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + * in * [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java index 6a146626001..5f5ade9bd07 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,15 +30,27 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse} */ +@com.google.protobuf.Generated public final class ListInstancePartitionOperationsResponse - extends com.google.protobuf.GeneratedMessageV3 + extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse) ListInstancePartitionOperationsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstancePartitionOperationsResponse"); + } + // Use ListInstancePartitionOperationsResponse.newBuilder() to construct. private ListInstancePartitionOperationsResponse( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +60,13 @@ private ListInstancePartitionOperationsResponse() { unreachableInstancePartitions_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstancePartitionOperationsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_fieldAccessorTable @@ -73,14 +80,15 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List operations_; + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -90,14 +98,15 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getOperationsList() { return operations_; } + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -108,14 +117,15 @@ public java.util.List getOperationsList() { getOperationsOrBuilderList() { return operations_; } + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -125,14 +135,15 @@ public java.util.List getOperationsList() { public int getOperationsCount() { return operations_.size(); } + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -142,14 +153,15 @@ public int getOperationsCount() { public com.google.longrunning.Operation getOperations(int index) { return operations_.get(index); } + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -164,6 +176,7 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -189,6 +202,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -220,6 +234,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList unreachableInstancePartitions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -237,6 +252,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public com.google.protobuf.ProtocolStringList getUnreachableInstancePartitionsList() { return unreachableInstancePartitions_; } + /** * * @@ -254,6 +270,7 @@ public com.google.protobuf.ProtocolStringList getUnreachableInstancePartitionsLi public int getUnreachableInstancePartitionsCount() { return unreachableInstancePartitions_.size(); } + /** * * @@ -272,6 +289,7 @@ public int getUnreachableInstancePartitionsCount() { public java.lang.String getUnreachableInstancePartitions(int index) { return unreachableInstancePartitions_.get(index); } + /** * * @@ -308,11 +326,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < operations_.size(); i++) { output.writeMessage(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } for (int i = 0; i < unreachableInstancePartitions_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString( + com.google.protobuf.GeneratedMessage.writeString( output, 3, unreachableInstancePartitions_.getRaw(i)); } getUnknownFields().writeTo(output); @@ -327,8 +345,8 @@ public int getSerializedSize() { for (int i = 0; i < operations_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, operations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } { int dataSize = 0; @@ -425,33 +443,33 @@ public int hashCode() { public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse @@ -459,7 +477,7 @@ public int hashCode() { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -483,10 +501,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -497,7 +516,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse) com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponseOrBuilder { @@ -507,7 +526,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_fieldAccessorTable @@ -521,7 +540,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -602,39 +621,6 @@ private void buildPartial0( } } - @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 @@ -671,8 +657,8 @@ public Builder mergeFrom( operations_ = other.operations_; bitField0_ = (bitField0_ & ~0x00000001); operationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getOperationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetOperationsFieldBuilder() : null; } else { operationsBuilder_.addAllMessages(other.operations_); @@ -774,7 +760,7 @@ private void ensureOperationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> @@ -784,10 +770,10 @@ private void ensureOperationsIsMutable() { * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -800,14 +786,15 @@ public java.util.List getOperationsList() { return operationsBuilder_.getMessageList(); } } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -820,14 +807,15 @@ public int getOperationsCount() { return operationsBuilder_.getCount(); } } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -840,14 +828,15 @@ public com.google.longrunning.Operation getOperations(int index) { return operationsBuilder_.getMessage(index); } } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -866,14 +855,15 @@ public Builder setOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -890,14 +880,15 @@ public Builder setOperations( } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -916,14 +907,15 @@ public Builder addOperations(com.google.longrunning.Operation value) { } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -942,14 +934,15 @@ public Builder addOperations(int index, com.google.longrunning.Operation value) } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -965,14 +958,15 @@ public Builder addOperations(com.google.longrunning.Operation.Builder builderFor } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -989,14 +983,15 @@ public Builder addOperations( } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -1013,14 +1008,15 @@ public Builder addAllOperations( } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -1036,14 +1032,15 @@ public Builder clearOperations() { } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -1059,30 +1056,32 @@ public Builder removeOperations(int index) { } return this; } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder getOperationsBuilder(int index) { - return getOperationsFieldBuilder().getBuilder(index); + return internalGetOperationsFieldBuilder().getBuilder(index); } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -1095,14 +1094,15 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return operationsBuilder_.getMessageOrBuilder(index); } } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * @@ -1116,65 +1116,68 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde return java.util.Collections.unmodifiableList(operations_); } } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder() { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(com.google.longrunning.Operation.getDefaultInstance()); } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public com.google.longrunning.Operation.Builder addOperationsBuilder(int index) { - return getOperationsFieldBuilder() + return internalGetOperationsFieldBuilder() .addBuilder(index, com.google.longrunning.Operation.getDefaultInstance()); } + /** * * *
                                -     * The list of matching instance partition [long-running
                                -     * operations][google.longrunning.Operation]. Each operation's name will be
                                +     * The list of matching instance partition long-running operations. Each
                                +     * operation's name will be
                                      * prefixed by the instance partition's name. The operation's
                                -     * [metadata][google.longrunning.Operation.metadata] field type
                                +     * metadata field type
                                      * `metadata.type_url` describes the type of the metadata.
                                      * 
                                * * repeated .google.longrunning.Operation operations = 1; */ public java.util.List getOperationsBuilderList() { - return getOperationsFieldBuilder().getBuilderList(); + return internalGetOperationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getOperationsFieldBuilder() { + internalGetOperationsFieldBuilder() { if (operationsBuilder_ == null) { operationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1185,6 +1188,7 @@ public java.util.List getOperationsBui } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1209,6 +1213,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1233,6 +1238,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1256,6 +1262,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1275,6 +1282,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1310,6 +1318,7 @@ private void ensureUnreachableInstancePartitionsIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -1328,6 +1337,7 @@ public com.google.protobuf.ProtocolStringList getUnreachableInstancePartitionsLi unreachableInstancePartitions_.makeImmutable(); return unreachableInstancePartitions_; } + /** * * @@ -1345,6 +1355,7 @@ public com.google.protobuf.ProtocolStringList getUnreachableInstancePartitionsLi public int getUnreachableInstancePartitionsCount() { return unreachableInstancePartitions_.size(); } + /** * * @@ -1363,6 +1374,7 @@ public int getUnreachableInstancePartitionsCount() { public java.lang.String getUnreachableInstancePartitions(int index) { return unreachableInstancePartitions_.get(index); } + /** * * @@ -1381,6 +1393,7 @@ public java.lang.String getUnreachableInstancePartitions(int index) { public com.google.protobuf.ByteString getUnreachableInstancePartitionsBytes(int index) { return unreachableInstancePartitions_.getByteString(index); } + /** * * @@ -1407,6 +1420,7 @@ public Builder setUnreachableInstancePartitions(int index, java.lang.String valu onChanged(); return this; } + /** * * @@ -1432,6 +1446,7 @@ public Builder addUnreachableInstancePartitions(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1456,6 +1471,7 @@ public Builder addAllUnreachableInstancePartitions( onChanged(); return this; } + /** * * @@ -1477,6 +1493,7 @@ public Builder clearUnreachableInstancePartitions() { onChanged(); return this; } + /** * * @@ -1504,17 +1521,6 @@ public Builder addUnreachableInstancePartitionsBytes(com.google.protobuf.ByteStr return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java index 532d290414a..1650987228a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstancePartitionOperationsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse) @@ -28,66 +30,70 @@ public interface ListInstancePartitionOperationsResponseOrBuilder * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsList(); + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ com.google.longrunning.Operation getOperations(int index); + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ int getOperationsCount(); + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * * repeated .google.longrunning.Operation operations = 1; */ java.util.List getOperationsOrBuilderList(); + /** * * *
                                -   * The list of matching instance partition [long-running
                                -   * operations][google.longrunning.Operation]. Each operation's name will be
                                +   * The list of matching instance partition long-running operations. Each
                                +   * operation's name will be
                                    * prefixed by the instance partition's name. The operation's
                                -   * [metadata][google.longrunning.Operation.metadata] field type
                                +   * metadata field type
                                    * `metadata.type_url` describes the type of the metadata.
                                    * 
                                * @@ -109,6 +115,7 @@ public interface ListInstancePartitionOperationsResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -139,6 +146,7 @@ public interface ListInstancePartitionOperationsResponseOrBuilder * @return A list containing the unreachableInstancePartitions. */ java.util.List getUnreachableInstancePartitionsList(); + /** * * @@ -154,6 +162,7 @@ public interface ListInstancePartitionOperationsResponseOrBuilder * @return The count of unreachableInstancePartitions. */ int getUnreachableInstancePartitionsCount(); + /** * * @@ -170,6 +179,7 @@ public interface ListInstancePartitionOperationsResponseOrBuilder * @return The unreachableInstancePartitions at the given index. */ java.lang.String getUnreachableInstancePartitions(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java index dd4b5784fbd..aa50a42a678 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionsRequest} */ -public final class ListInstancePartitionsRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstancePartitionsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstancePartitionsRequest) ListInstancePartitionsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstancePartitionsRequest"); + } + // Use ListInstancePartitionsRequest.newBuilder() to construct. - private ListInstancePartitionsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListInstancePartitionsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListInstancePartitionsRequest() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstancePartitionsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_fieldAccessorTable @@ -70,12 +77,15 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * *
                                    * Required. The instance whose instance partitions should be listed. Values
                                -   * are of the form `projects/<project>/instances/<instance>`.
                                +   * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +   * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +   * `projects/myproject/instances/-`.
                                    * 
                                * * @@ -96,12 +106,15 @@ public java.lang.String getParent() { return s; } } + /** * * *
                                    * Required. The instance whose instance partitions should be listed. Values
                                -   * are of the form `projects/<project>/instances/<instance>`.
                                +   * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +   * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +   * `projects/myproject/instances/-`.
                                    * 
                                * * @@ -125,6 +138,7 @@ public com.google.protobuf.ByteString getParentBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 2; private int pageSize_ = 0; + /** * * @@ -146,6 +160,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -172,6 +187,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -201,6 +217,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { public static final int INSTANCE_PARTITION_DEADLINE_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp instancePartitionDeadline_; + /** * * @@ -223,6 +240,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { public boolean hasInstancePartitionDeadline() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -247,6 +265,7 @@ public com.google.protobuf.Timestamp getInstancePartitionDeadline() { ? com.google.protobuf.Timestamp.getDefaultInstance() : instancePartitionDeadline_; } + /** * * @@ -284,14 +303,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } if (pageSize_ != 0) { output.writeInt32(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getInstancePartitionDeadline()); @@ -305,14 +324,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); } if (((bitField0_ & 0x00000001) != 0)) { size += @@ -406,39 +425,39 @@ public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -462,10 +481,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -476,7 +496,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstancePartitionsRequest) com.google.spanner.admin.instance.v1.ListInstancePartitionsRequestOrBuilder { @@ -486,7 +506,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_fieldAccessorTable @@ -501,14 +521,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstancePartitionDeadlineFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstancePartitionDeadlineFieldBuilder(); } } @@ -583,39 +603,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ListInstancePartitionsRequest) { @@ -695,7 +682,8 @@ public Builder mergeFrom( case 34: { input.readMessage( - getInstancePartitionDeadlineFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstancePartitionDeadlineFieldBuilder().getBuilder(), + extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -719,12 +707,15 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * *
                                      * Required. The instance whose instance partitions should be listed. Values
                                -     * are of the form `projects/<project>/instances/<instance>`.
                                +     * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +     * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +     * `projects/myproject/instances/-`.
                                      * 
                                * * @@ -744,12 +735,15 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * *
                                      * Required. The instance whose instance partitions should be listed. Values
                                -     * are of the form `projects/<project>/instances/<instance>`.
                                +     * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +     * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +     * `projects/myproject/instances/-`.
                                      * 
                                * * @@ -769,12 +763,15 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                      * Required. The instance whose instance partitions should be listed. Values
                                -     * are of the form `projects/<project>/instances/<instance>`.
                                +     * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +     * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +     * `projects/myproject/instances/-`.
                                      * 
                                * * @@ -793,12 +790,15 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * *
                                      * Required. The instance whose instance partitions should be listed. Values
                                -     * are of the form `projects/<project>/instances/<instance>`.
                                +     * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +     * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +     * `projects/myproject/instances/-`.
                                      * 
                                * * @@ -813,12 +813,15 @@ public Builder clearParent() { onChanged(); return this; } + /** * * *
                                      * Required. The instance whose instance partitions should be listed. Values
                                -     * are of the form `projects/<project>/instances/<instance>`.
                                +     * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +     * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +     * `projects/myproject/instances/-`.
                                      * 
                                * * @@ -840,6 +843,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -856,6 +860,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -876,6 +881,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -896,6 +902,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -921,6 +928,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -946,6 +954,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -970,6 +979,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -990,6 +1000,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1017,11 +1028,12 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp instancePartitionDeadline_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> instancePartitionDeadlineBuilder_; + /** * * @@ -1043,6 +1055,7 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { public boolean hasInstancePartitionDeadline() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1070,6 +1083,7 @@ public com.google.protobuf.Timestamp getInstancePartitionDeadline() { return instancePartitionDeadlineBuilder_.getMessage(); } } + /** * * @@ -1099,6 +1113,7 @@ public Builder setInstancePartitionDeadline(com.google.protobuf.Timestamp value) onChanged(); return this; } + /** * * @@ -1126,6 +1141,7 @@ public Builder setInstancePartitionDeadline( onChanged(); return this; } + /** * * @@ -1160,6 +1176,7 @@ public Builder mergeInstancePartitionDeadline(com.google.protobuf.Timestamp valu } return this; } + /** * * @@ -1186,6 +1203,7 @@ public Builder clearInstancePartitionDeadline() { onChanged(); return this; } + /** * * @@ -1205,8 +1223,9 @@ public Builder clearInstancePartitionDeadline() { public com.google.protobuf.Timestamp.Builder getInstancePartitionDeadlineBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getInstancePartitionDeadlineFieldBuilder().getBuilder(); + return internalGetInstancePartitionDeadlineFieldBuilder().getBuilder(); } + /** * * @@ -1232,6 +1251,7 @@ public com.google.protobuf.TimestampOrBuilder getInstancePartitionDeadlineOrBuil : instancePartitionDeadline_; } } + /** * * @@ -1248,14 +1268,14 @@ public com.google.protobuf.TimestampOrBuilder getInstancePartitionDeadlineOrBuil * .google.protobuf.Timestamp instance_partition_deadline = 4 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getInstancePartitionDeadlineFieldBuilder() { + internalGetInstancePartitionDeadlineFieldBuilder() { if (instancePartitionDeadlineBuilder_ == null) { instancePartitionDeadlineBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1265,17 +1285,6 @@ public com.google.protobuf.TimestampOrBuilder getInstancePartitionDeadlineOrBuil return instancePartitionDeadlineBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstancePartitionsRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java index c305bad2129..11e1a090964 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstancePartitionsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstancePartitionsRequest) @@ -29,7 +31,9 @@ public interface ListInstancePartitionsRequestOrBuilder * *
                                    * Required. The instance whose instance partitions should be listed. Values
                                -   * are of the form `projects/<project>/instances/<instance>`.
                                +   * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +   * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +   * `projects/myproject/instances/-`.
                                    * 
                                * * @@ -39,12 +43,15 @@ public interface ListInstancePartitionsRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * *
                                    * Required. The instance whose instance partitions should be listed. Values
                                -   * are of the form `projects/<project>/instances/<instance>`.
                                +   * are of the form `projects/<project>/instances/<instance>`. Use `{instance}
                                +   * = '-'` to list instance partitions for all Instances in a project, e.g.,
                                +   * `projects/myproject/instances/-`.
                                    * 
                                * * @@ -84,6 +91,7 @@ public interface ListInstancePartitionsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * @@ -119,6 +127,7 @@ public interface ListInstancePartitionsRequestOrBuilder * @return Whether the instancePartitionDeadline field is set. */ boolean hasInstancePartitionDeadline(); + /** * * @@ -138,6 +147,7 @@ public interface ListInstancePartitionsRequestOrBuilder * @return The instancePartitionDeadline. */ com.google.protobuf.Timestamp getInstancePartitionDeadline(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java index 77fadf1fe14..1c81a90e270 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,14 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionsResponse} */ -public final class ListInstancePartitionsResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstancePartitionsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstancePartitionsResponse) ListInstancePartitionsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstancePartitionsResponse"); + } + // Use ListInstancePartitionsResponse.newBuilder() to construct. - private ListInstancePartitionsResponse( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListInstancePartitionsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +58,13 @@ private ListInstancePartitionsResponse() { unreachable_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstancePartitionsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_fieldAccessorTable @@ -72,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List instancePartitions_; + /** * * @@ -87,6 +94,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getInstancePartitionsList() { return instancePartitions_; } + /** * * @@ -102,6 +110,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getInstancePartitionsOrBuilderList() { return instancePartitions_; } + /** * * @@ -116,6 +125,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getInstancePartitionsCount() { return instancePartitions_.size(); } + /** * * @@ -130,6 +140,7 @@ public int getInstancePartitionsCount() { public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartitions(int index) { return instancePartitions_.get(index); } + /** * * @@ -150,6 +161,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -175,6 +187,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -206,13 +219,14 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList unreachable_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * @@ -223,13 +237,14 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public com.google.protobuf.ProtocolStringList getUnreachableList() { return unreachable_; } + /** * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * @@ -240,13 +255,14 @@ public com.google.protobuf.ProtocolStringList getUnreachableList() { public int getUnreachableCount() { return unreachable_.size(); } + /** * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * @@ -258,13 +274,14 @@ public int getUnreachableCount() { public java.lang.String getUnreachable(int index) { return unreachable_.get(index); } + /** * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * @@ -294,11 +311,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < instancePartitions_.size(); i++) { output.writeMessage(1, instancePartitions_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } for (int i = 0; i < unreachable_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, unreachable_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, unreachable_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -313,8 +330,8 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, instancePartitions_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } { int dataSize = 0; @@ -406,39 +423,39 @@ public static com.google.spanner.admin.instance.v1.ListInstancePartitionsRespons public static com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -462,10 +479,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -476,7 +494,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancePartitionsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstancePartitionsResponse) com.google.spanner.admin.instance.v1.ListInstancePartitionsResponseOrBuilder { @@ -486,7 +504,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_fieldAccessorTable @@ -499,7 +517,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -578,39 +596,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ListInstancePartitionsResponse) { @@ -646,8 +631,8 @@ public Builder mergeFrom( instancePartitions_ = other.instancePartitions_; bitField0_ = (bitField0_ & ~0x00000001); instancePartitionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getInstancePartitionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetInstancePartitionsFieldBuilder() : null; } else { instancePartitionsBuilder_.addAllMessages(other.instancePartitions_); @@ -753,7 +738,7 @@ private void ensureInstancePartitionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> @@ -777,6 +762,7 @@ private void ensureInstancePartitionsIsMutable() { return instancePartitionsBuilder_.getMessageList(); } } + /** * * @@ -794,6 +780,7 @@ public int getInstancePartitionsCount() { return instancePartitionsBuilder_.getCount(); } } + /** * * @@ -811,6 +798,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti return instancePartitionsBuilder_.getMessage(index); } } + /** * * @@ -835,6 +823,7 @@ public Builder setInstancePartitions( } return this; } + /** * * @@ -856,6 +845,7 @@ public Builder setInstancePartitions( } return this; } + /** * * @@ -880,6 +870,7 @@ public Builder addInstancePartitions( } return this; } + /** * * @@ -904,6 +895,7 @@ public Builder addInstancePartitions( } return this; } + /** * * @@ -925,6 +917,7 @@ public Builder addInstancePartitions( } return this; } + /** * * @@ -946,6 +939,7 @@ public Builder addInstancePartitions( } return this; } + /** * * @@ -968,6 +962,7 @@ public Builder addAllInstancePartitions( } return this; } + /** * * @@ -988,6 +983,7 @@ public Builder clearInstancePartitions() { } return this; } + /** * * @@ -1008,6 +1004,7 @@ public Builder removeInstancePartitions(int index) { } return this; } + /** * * @@ -1020,8 +1017,9 @@ public Builder removeInstancePartitions(int index) { */ public com.google.spanner.admin.instance.v1.InstancePartition.Builder getInstancePartitionsBuilder(int index) { - return getInstancePartitionsFieldBuilder().getBuilder(index); + return internalGetInstancePartitionsFieldBuilder().getBuilder(index); } + /** * * @@ -1040,6 +1038,7 @@ public Builder removeInstancePartitions(int index) { return instancePartitionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1058,6 +1057,7 @@ public Builder removeInstancePartitions(int index) { return java.util.Collections.unmodifiableList(instancePartitions_); } } + /** * * @@ -1070,9 +1070,10 @@ public Builder removeInstancePartitions(int index) { */ public com.google.spanner.admin.instance.v1.InstancePartition.Builder addInstancePartitionsBuilder() { - return getInstancePartitionsFieldBuilder() + return internalGetInstancePartitionsFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.InstancePartition.getDefaultInstance()); } + /** * * @@ -1085,10 +1086,11 @@ public Builder removeInstancePartitions(int index) { */ public com.google.spanner.admin.instance.v1.InstancePartition.Builder addInstancePartitionsBuilder(int index) { - return getInstancePartitionsFieldBuilder() + return internalGetInstancePartitionsFieldBuilder() .addBuilder( index, com.google.spanner.admin.instance.v1.InstancePartition.getDefaultInstance()); } + /** * * @@ -1101,17 +1103,17 @@ public Builder removeInstancePartitions(int index) { */ public java.util.List getInstancePartitionsBuilderList() { - return getInstancePartitionsFieldBuilder().getBuilderList(); + return internalGetInstancePartitionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> - getInstancePartitionsFieldBuilder() { + internalGetInstancePartitionsFieldBuilder() { if (instancePartitionsBuilder_ == null) { instancePartitionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder>( @@ -1125,6 +1127,7 @@ public Builder removeInstancePartitions(int index) { } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1149,6 +1152,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1173,6 +1177,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1196,6 +1201,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1215,6 +1221,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1249,13 +1256,14 @@ private void ensureUnreachableIsMutable() { } bitField0_ |= 0x00000004; } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1267,13 +1275,14 @@ public com.google.protobuf.ProtocolStringList getUnreachableList() { unreachable_.makeImmutable(); return unreachable_; } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1284,13 +1293,14 @@ public com.google.protobuf.ProtocolStringList getUnreachableList() { public int getUnreachableCount() { return unreachable_.size(); } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1302,13 +1312,14 @@ public int getUnreachableCount() { public java.lang.String getUnreachable(int index) { return unreachable_.get(index); } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1320,13 +1331,14 @@ public java.lang.String getUnreachable(int index) { public com.google.protobuf.ByteString getUnreachableBytes(int index) { return unreachable_.getByteString(index); } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1346,13 +1358,14 @@ public Builder setUnreachable(int index, java.lang.String value) { onChanged(); return this; } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1371,13 +1384,14 @@ public Builder addUnreachable(java.lang.String value) { onChanged(); return this; } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1393,13 +1407,14 @@ public Builder addAllUnreachable(java.lang.Iterable values) { onChanged(); return this; } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1414,13 +1429,14 @@ public Builder clearUnreachable() { onChanged(); return this; } + /** * * *
                                -     * The list of unreachable instance partitions.
                                -     * It includes the names of instance partitions whose metadata could
                                -     * not be retrieved within
                                +     * The list of unreachable instances or instance partitions.
                                +     * It includes the names of instances or instance partitions whose metadata
                                +     * could not be retrieved within
                                      * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                      * 
                                * @@ -1441,17 +1457,6 @@ public Builder addUnreachableBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstancePartitionsResponse) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java index 2ad1ffb742a..e4acb763854 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstancePartitionsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstancePartitionsResponse) @@ -36,6 +38,7 @@ public interface ListInstancePartitionsResponseOrBuilder */ java.util.List getInstancePartitionsList(); + /** * * @@ -47,6 +50,7 @@ public interface ListInstancePartitionsResponseOrBuilder *
                                */ com.google.spanner.admin.instance.v1.InstancePartition getInstancePartitions(int index); + /** * * @@ -58,6 +62,7 @@ public interface ListInstancePartitionsResponseOrBuilder *
                                */ int getInstancePartitionsCount(); + /** * * @@ -70,6 +75,7 @@ public interface ListInstancePartitionsResponseOrBuilder */ java.util.List getInstancePartitionsOrBuilderList(); + /** * * @@ -97,6 +103,7 @@ com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder getInstanceParti * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -116,9 +123,9 @@ com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder getInstanceParti * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * @@ -127,13 +134,14 @@ com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder getInstanceParti * @return A list containing the unreachable. */ java.util.List getUnreachableList(); + /** * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * @@ -142,13 +150,14 @@ com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder getInstanceParti * @return The count of unreachable. */ int getUnreachableCount(); + /** * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * @@ -158,13 +167,14 @@ com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder getInstanceParti * @return The unreachable at the given index. */ java.lang.String getUnreachable(int index); + /** * * *
                                -   * The list of unreachable instance partitions.
                                -   * It includes the names of instance partitions whose metadata could
                                -   * not be retrieved within
                                +   * The list of unreachable instances or instance partitions.
                                +   * It includes the names of instances or instance partitions whose metadata
                                +   * could not be retrieved within
                                    * [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
                                    * 
                                * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java index e5aff200595..f9eda720634 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancesRequest} */ -public final class ListInstancesRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstancesRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstancesRequest) ListInstancesRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstancesRequest"); + } + // Use ListInstancesRequest.newBuilder() to construct. - private ListInstancesRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListInstancesRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private ListInstancesRequest() { filter_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstancesRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object parent_ = ""; + /** * * @@ -97,6 +105,7 @@ public java.lang.String getParent() { return s; } } + /** * * @@ -126,6 +135,7 @@ public com.google.protobuf.ByteString getParentBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 2; private int pageSize_ = 0; + /** * * @@ -147,6 +157,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -173,6 +184,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -204,6 +216,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -211,22 +224,22 @@ public com.google.protobuf.ByteString getPageTokenBytes() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -245,6 +258,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -252,22 +266,22 @@ public java.lang.String getFilter() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -289,6 +303,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int INSTANCE_DEADLINE_FIELD_NUMBER = 5; private com.google.protobuf.Timestamp instanceDeadline_; + /** * * @@ -309,6 +324,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public boolean hasInstanceDeadline() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -331,6 +347,7 @@ public com.google.protobuf.Timestamp getInstanceDeadline() { ? com.google.protobuf.Timestamp.getDefaultInstance() : instanceDeadline_; } + /** * * @@ -366,17 +383,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); } if (pageSize_ != 0) { output.writeInt32(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, filter_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(5, getInstanceDeadline()); @@ -390,17 +407,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, filter_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getInstanceDeadline()); @@ -494,38 +511,38 @@ public static com.google.spanner.admin.instance.v1.ListInstancesRequest parseFro public static com.google.spanner.admin.instance.v1.ListInstancesRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancesRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancesRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancesRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancesRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancesRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -549,10 +566,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -563,7 +581,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancesRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstancesRequest) com.google.spanner.admin.instance.v1.ListInstancesRequestOrBuilder { @@ -573,7 +591,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_fieldAccessorTable @@ -587,14 +605,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceDeadlineFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceDeadlineFieldBuilder(); } } @@ -668,39 +686,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.ListInstancesReq result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ListInstancesRequest) { @@ -788,7 +773,7 @@ public Builder mergeFrom( case 42: { input.readMessage( - getInstanceDeadlineFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstanceDeadlineFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -812,6 +797,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object parent_ = ""; + /** * * @@ -837,6 +823,7 @@ public java.lang.String getParent() { return (java.lang.String) ref; } } + /** * * @@ -862,6 +849,7 @@ public com.google.protobuf.ByteString getParentBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -886,6 +874,7 @@ public Builder setParent(java.lang.String value) { onChanged(); return this; } + /** * * @@ -906,6 +895,7 @@ public Builder clearParent() { onChanged(); return this; } + /** * * @@ -933,6 +923,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -949,6 +940,7 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -969,6 +961,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -989,6 +982,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1014,6 +1008,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1039,6 +1034,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1063,6 +1059,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1083,6 +1080,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1110,6 +1108,7 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -1117,22 +1116,22 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -1150,6 +1149,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -1157,22 +1157,22 @@ public java.lang.String getFilter() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -1190,6 +1190,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1197,22 +1198,22 @@ public com.google.protobuf.ByteString getFilterBytes() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -1229,6 +1230,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1236,22 +1238,22 @@ public Builder setFilter(java.lang.String value) { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -1264,6 +1266,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1271,22 +1274,22 @@ public Builder clearFilter() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -1306,11 +1309,12 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp instanceDeadline_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> instanceDeadlineBuilder_; + /** * * @@ -1330,6 +1334,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public boolean hasInstanceDeadline() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1355,6 +1360,7 @@ public com.google.protobuf.Timestamp getInstanceDeadline() { return instanceDeadlineBuilder_.getMessage(); } } + /** * * @@ -1382,6 +1388,7 @@ public Builder setInstanceDeadline(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1406,6 +1413,7 @@ public Builder setInstanceDeadline(com.google.protobuf.Timestamp.Builder builder onChanged(); return this; } + /** * * @@ -1438,6 +1446,7 @@ public Builder mergeInstanceDeadline(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1462,6 +1471,7 @@ public Builder clearInstanceDeadline() { onChanged(); return this; } + /** * * @@ -1479,8 +1489,9 @@ public Builder clearInstanceDeadline() { public com.google.protobuf.Timestamp.Builder getInstanceDeadlineBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getInstanceDeadlineFieldBuilder().getBuilder(); + return internalGetInstanceDeadlineFieldBuilder().getBuilder(); } + /** * * @@ -1504,6 +1515,7 @@ public com.google.protobuf.TimestampOrBuilder getInstanceDeadlineOrBuilder() { : instanceDeadline_; } } + /** * * @@ -1518,14 +1530,14 @@ public com.google.protobuf.TimestampOrBuilder getInstanceDeadlineOrBuilder() { * * .google.protobuf.Timestamp instance_deadline = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getInstanceDeadlineFieldBuilder() { + internalGetInstanceDeadlineFieldBuilder() { if (instanceDeadlineBuilder_ == null) { instanceDeadlineBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1535,17 +1547,6 @@ public com.google.protobuf.TimestampOrBuilder getInstanceDeadlineOrBuilder() { return instanceDeadlineBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstancesRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java index b983f6f3e46..6f3b8901076 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstancesRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstancesRequest) @@ -39,6 +41,7 @@ public interface ListInstancesRequestOrBuilder * @return The parent. */ java.lang.String getParent(); + /** * * @@ -84,6 +87,7 @@ public interface ListInstancesRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * @@ -107,22 +111,22 @@ public interface ListInstancesRequestOrBuilder * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -130,6 +134,7 @@ public interface ListInstancesRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -137,22 +142,22 @@ public interface ListInstancesRequestOrBuilder * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `name` - * * `display_name` - * * `labels.key` where key is the name of a label + * * `name` + * * `display_name` + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `name:*` --> The instance has a name. - * * `name:Howl` --> The instance's name contains the string "howl". - * * `name:HOWL` --> Equivalent to above. - * * `NAME:howl` --> Equivalent to above. - * * `labels.env:*` --> The instance has the label "env". - * * `labels.env:dev` --> The instance has the label "env" and the value of - * the label contains the string "dev". - * * `name:howl labels.env:dev` --> The instance's name contains "howl" and - * it has the label "env" with its value - * containing "dev". + * * `name:*` --> The instance has a name. + * * `name:Howl` --> The instance's name contains the string "howl". + * * `name:HOWL` --> Equivalent to above. + * * `NAME:howl` --> Equivalent to above. + * * `labels.env:*` --> The instance has the label "env". + * * `labels.env:dev` --> The instance has the label "env" and the value of + * the label contains the string "dev". + * * `name:howl labels.env:dev` --> The instance's name contains "howl" and + * it has the label "env" with its value + * containing "dev". * * * string filter = 4; @@ -178,6 +183,7 @@ public interface ListInstancesRequestOrBuilder * @return Whether the instanceDeadline field is set. */ boolean hasInstanceDeadline(); + /** * * @@ -195,6 +201,7 @@ public interface ListInstancesRequestOrBuilder * @return The instanceDeadline. */ com.google.protobuf.Timestamp getInstanceDeadline(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java index 34798359aa4..22870d6b6d5 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancesResponse} */ -public final class ListInstancesResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListInstancesResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ListInstancesResponse) ListInstancesResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListInstancesResponse"); + } + // Use ListInstancesResponse.newBuilder() to construct. - private ListInstancesResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListInstancesResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private ListInstancesResponse() { unreachable_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListInstancesResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List instances_; + /** * * @@ -83,6 +91,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getInstancesList() { return instances_; } + /** * * @@ -97,6 +106,7 @@ public java.util.List getInstance getInstancesOrBuilderList() { return instances_; } + /** * * @@ -110,6 +120,7 @@ public java.util.List getInstance public int getInstancesCount() { return instances_.size(); } + /** * * @@ -123,6 +134,7 @@ public int getInstancesCount() { public com.google.spanner.admin.instance.v1.Instance getInstances(int index) { return instances_.get(index); } + /** * * @@ -141,6 +153,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstancesOrBuil @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -166,6 +179,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -197,6 +211,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList unreachable_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -214,6 +229,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public com.google.protobuf.ProtocolStringList getUnreachableList() { return unreachable_; } + /** * * @@ -231,6 +247,7 @@ public com.google.protobuf.ProtocolStringList getUnreachableList() { public int getUnreachableCount() { return unreachable_.size(); } + /** * * @@ -249,6 +266,7 @@ public int getUnreachableCount() { public java.lang.String getUnreachable(int index) { return unreachable_.get(index); } + /** * * @@ -285,11 +303,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < instances_.size(); i++) { output.writeMessage(1, instances_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } for (int i = 0; i < unreachable_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, unreachable_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, unreachable_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -303,8 +321,8 @@ public int getSerializedSize() { for (int i = 0; i < instances_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, instances_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } { int dataSize = 0; @@ -396,38 +414,38 @@ public static com.google.spanner.admin.instance.v1.ListInstancesResponse parseFr public static com.google.spanner.admin.instance.v1.ListInstancesResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancesResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancesResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancesResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ListInstancesResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ListInstancesResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -451,10 +469,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -465,7 +484,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ListInstancesResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ListInstancesResponse) com.google.spanner.admin.instance.v1.ListInstancesResponseOrBuilder { @@ -475,7 +494,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_fieldAccessorTable @@ -487,7 +506,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.ListInstancesResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -563,39 +582,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.ListInstancesRes } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ListInstancesResponse) { @@ -628,8 +614,8 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.ListInstancesRespo instances_ = other.instances_; bitField0_ = (bitField0_ & ~0x00000001); instancesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getInstancesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetInstancesFieldBuilder() : null; } else { instancesBuilder_.addAllMessages(other.instances_); @@ -733,7 +719,7 @@ private void ensureInstancesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> @@ -755,6 +741,7 @@ public java.util.List getInstance return instancesBuilder_.getMessageList(); } } + /** * * @@ -771,6 +758,7 @@ public int getInstancesCount() { return instancesBuilder_.getCount(); } } + /** * * @@ -787,6 +775,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstances(int index) { return instancesBuilder_.getMessage(index); } } + /** * * @@ -809,6 +798,7 @@ public Builder setInstances(int index, com.google.spanner.admin.instance.v1.Inst } return this; } + /** * * @@ -829,6 +819,7 @@ public Builder setInstances( } return this; } + /** * * @@ -851,6 +842,7 @@ public Builder addInstances(com.google.spanner.admin.instance.v1.Instance value) } return this; } + /** * * @@ -873,6 +865,7 @@ public Builder addInstances(int index, com.google.spanner.admin.instance.v1.Inst } return this; } + /** * * @@ -893,6 +886,7 @@ public Builder addInstances( } return this; } + /** * * @@ -913,6 +907,7 @@ public Builder addInstances( } return this; } + /** * * @@ -933,6 +928,7 @@ public Builder addAllInstances( } return this; } + /** * * @@ -952,6 +948,7 @@ public Builder clearInstances() { } return this; } + /** * * @@ -971,6 +968,7 @@ public Builder removeInstances(int index) { } return this; } + /** * * @@ -981,8 +979,9 @@ public Builder removeInstances(int index) { * repeated .google.spanner.admin.instance.v1.Instance instances = 1; */ public com.google.spanner.admin.instance.v1.Instance.Builder getInstancesBuilder(int index) { - return getInstancesFieldBuilder().getBuilder(index); + return internalGetInstancesFieldBuilder().getBuilder(index); } + /** * * @@ -999,6 +998,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstancesOrBuil return instancesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1016,6 +1016,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstancesOrBuil return java.util.Collections.unmodifiableList(instances_); } } + /** * * @@ -1026,9 +1027,10 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstancesOrBuil * repeated .google.spanner.admin.instance.v1.Instance instances = 1; */ public com.google.spanner.admin.instance.v1.Instance.Builder addInstancesBuilder() { - return getInstancesFieldBuilder() + return internalGetInstancesFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.Instance.getDefaultInstance()); } + /** * * @@ -1039,9 +1041,10 @@ public com.google.spanner.admin.instance.v1.Instance.Builder addInstancesBuilder * repeated .google.spanner.admin.instance.v1.Instance instances = 1; */ public com.google.spanner.admin.instance.v1.Instance.Builder addInstancesBuilder(int index) { - return getInstancesFieldBuilder() + return internalGetInstancesFieldBuilder() .addBuilder(index, com.google.spanner.admin.instance.v1.Instance.getDefaultInstance()); } + /** * * @@ -1053,17 +1056,17 @@ public com.google.spanner.admin.instance.v1.Instance.Builder addInstancesBuilder */ public java.util.List getInstancesBuilderList() { - return getInstancesFieldBuilder().getBuilderList(); + return internalGetInstancesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> - getInstancesFieldBuilder() { + internalGetInstancesFieldBuilder() { if (instancesBuilder_ == null) { instancesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder>( @@ -1074,6 +1077,7 @@ public com.google.spanner.admin.instance.v1.Instance.Builder addInstancesBuilder } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1098,6 +1102,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1122,6 +1127,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1145,6 +1151,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1164,6 +1171,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1198,6 +1206,7 @@ private void ensureUnreachableIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -1216,6 +1225,7 @@ public com.google.protobuf.ProtocolStringList getUnreachableList() { unreachable_.makeImmutable(); return unreachable_; } + /** * * @@ -1233,6 +1243,7 @@ public com.google.protobuf.ProtocolStringList getUnreachableList() { public int getUnreachableCount() { return unreachable_.size(); } + /** * * @@ -1251,6 +1262,7 @@ public int getUnreachableCount() { public java.lang.String getUnreachable(int index) { return unreachable_.get(index); } + /** * * @@ -1269,6 +1281,7 @@ public java.lang.String getUnreachable(int index) { public com.google.protobuf.ByteString getUnreachableBytes(int index) { return unreachable_.getByteString(index); } + /** * * @@ -1295,6 +1308,7 @@ public Builder setUnreachable(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1320,6 +1334,7 @@ public Builder addUnreachable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1342,6 +1357,7 @@ public Builder addAllUnreachable(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1363,6 +1379,7 @@ public Builder clearUnreachable() { onChanged(); return this; } + /** * * @@ -1390,17 +1407,6 @@ public Builder addUnreachableBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ListInstancesResponse) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java index 6463e3b85c2..cbaca0c044e 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ListInstancesResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ListInstancesResponse) @@ -34,6 +36,7 @@ public interface ListInstancesResponseOrBuilder * repeated .google.spanner.admin.instance.v1.Instance instances = 1; */ java.util.List getInstancesList(); + /** * * @@ -44,6 +47,7 @@ public interface ListInstancesResponseOrBuilder * repeated .google.spanner.admin.instance.v1.Instance instances = 1; */ com.google.spanner.admin.instance.v1.Instance getInstances(int index); + /** * * @@ -54,6 +58,7 @@ public interface ListInstancesResponseOrBuilder * repeated .google.spanner.admin.instance.v1.Instance instances = 1; */ int getInstancesCount(); + /** * * @@ -65,6 +70,7 @@ public interface ListInstancesResponseOrBuilder */ java.util.List getInstancesOrBuilderList(); + /** * * @@ -90,6 +96,7 @@ public interface ListInstancesResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -120,6 +127,7 @@ public interface ListInstancesResponseOrBuilder * @return A list containing the unreachable. */ java.util.List getUnreachableList(); + /** * * @@ -135,6 +143,7 @@ public interface ListInstancesResponseOrBuilder * @return The count of unreachable. */ int getUnreachableCount(); + /** * * @@ -151,6 +160,7 @@ public interface ListInstancesResponseOrBuilder * @return The unreachable at the given index. */ java.lang.String getUnreachable(int index); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadata.java index 6fcf6980756..0678ce39e3a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.MoveInstanceMetadata} */ -public final class MoveInstanceMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class MoveInstanceMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.MoveInstanceMetadata) MoveInstanceMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MoveInstanceMetadata"); + } + // Use MoveInstanceMetadata.newBuilder() to construct. - private MoveInstanceMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private MoveInstanceMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private MoveInstanceMetadata() { targetConfig_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new MoveInstanceMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object targetConfig_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getTargetConfig() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getTargetConfigBytes() { public static final int PROGRESS_FIELD_NUMBER = 2; private com.google.spanner.admin.instance.v1.OperationProgress progress_; + /** * * @@ -139,6 +149,7 @@ public com.google.protobuf.ByteString getTargetConfigBytes() { public boolean hasProgress() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -160,6 +171,7 @@ public com.google.spanner.admin.instance.v1.OperationProgress getProgress() { ? com.google.spanner.admin.instance.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -182,6 +194,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -197,6 +210,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -212,6 +226,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -240,8 +255,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(targetConfig_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, targetConfig_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(targetConfig_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, targetConfig_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getProgress()); @@ -258,8 +273,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(targetConfig_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, targetConfig_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(targetConfig_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, targetConfig_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getProgress()); @@ -355,38 +370,38 @@ public static com.google.spanner.admin.instance.v1.MoveInstanceMetadata parseFro public static com.google.spanner.admin.instance.v1.MoveInstanceMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.MoveInstanceMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.MoveInstanceMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -410,10 +425,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -424,7 +440,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.MoveInstanceMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.MoveInstanceMetadata) com.google.spanner.admin.instance.v1.MoveInstanceMetadataOrBuilder { @@ -434,7 +450,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_fieldAccessorTable @@ -448,15 +464,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getProgressFieldBuilder(); - getCancelTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetProgressFieldBuilder(); + internalGetCancelTimeFieldBuilder(); } } @@ -526,39 +542,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.MoveInstanceMeta result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.MoveInstanceMetadata) { @@ -617,13 +600,15 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -647,6 +632,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object targetConfig_ = ""; + /** * * @@ -670,6 +656,7 @@ public java.lang.String getTargetConfig() { return (java.lang.String) ref; } } + /** * * @@ -693,6 +680,7 @@ public com.google.protobuf.ByteString getTargetConfigBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -715,6 +703,7 @@ public Builder setTargetConfig(java.lang.String value) { onChanged(); return this; } + /** * * @@ -733,6 +722,7 @@ public Builder clearTargetConfig() { onChanged(); return this; } + /** * * @@ -758,11 +748,12 @@ public Builder setTargetConfigBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.instance.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -781,6 +772,7 @@ public Builder setTargetConfigBytes(com.google.protobuf.ByteString value) { public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -805,6 +797,7 @@ public com.google.spanner.admin.instance.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -831,6 +824,7 @@ public Builder setProgress(com.google.spanner.admin.instance.v1.OperationProgres onChanged(); return this; } + /** * * @@ -855,6 +849,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -887,6 +882,7 @@ public Builder mergeProgress(com.google.spanner.admin.instance.v1.OperationProgr } return this; } + /** * * @@ -910,6 +906,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -926,8 +923,9 @@ public Builder clearProgress() { public com.google.spanner.admin.instance.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -950,6 +948,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -963,14 +962,14 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.instance.v1.OperationProgress progress = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder>( @@ -981,11 +980,12 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1000,6 +1000,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1020,6 +1021,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1042,6 +1044,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1061,6 +1064,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1088,6 +1092,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1107,6 +1112,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1119,8 +1125,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1139,6 +1146,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1148,14 +1156,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1165,17 +1173,6 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { return cancelTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.MoveInstanceMetadata) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadataOrBuilder.java index 85cb925e2ad..4c7f27f843a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface MoveInstanceMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.MoveInstanceMetadata) @@ -37,6 +39,7 @@ public interface MoveInstanceMetadataOrBuilder * @return The targetConfig. */ java.lang.String getTargetConfig(); + /** * * @@ -67,6 +70,7 @@ public interface MoveInstanceMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -83,6 +87,7 @@ public interface MoveInstanceMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.instance.v1.OperationProgress getProgress(); + /** * * @@ -110,6 +115,7 @@ public interface MoveInstanceMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -122,6 +128,7 @@ public interface MoveInstanceMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequest.java index 9083215eb78..479dc2c903c 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.MoveInstanceRequest} */ -public final class MoveInstanceRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class MoveInstanceRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.MoveInstanceRequest) MoveInstanceRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MoveInstanceRequest"); + } + // Use MoveInstanceRequest.newBuilder() to construct. - private MoveInstanceRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private MoveInstanceRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private MoveInstanceRequest() { targetConfig_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new MoveInstanceRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -126,6 +135,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object targetConfig_ = ""; + /** * * @@ -152,6 +162,7 @@ public java.lang.String getTargetConfig() { return s; } } + /** * * @@ -193,11 +204,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(targetConfig_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, targetConfig_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(targetConfig_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, targetConfig_); } getUnknownFields().writeTo(output); } @@ -208,11 +219,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(targetConfig_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, targetConfig_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(targetConfig_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, targetConfig_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -289,38 +300,38 @@ public static com.google.spanner.admin.instance.v1.MoveInstanceRequest parseFrom public static com.google.spanner.admin.instance.v1.MoveInstanceRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.MoveInstanceRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.MoveInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -344,10 +355,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -358,7 +370,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.MoveInstanceRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.MoveInstanceRequest) com.google.spanner.admin.instance.v1.MoveInstanceRequestOrBuilder { @@ -368,7 +380,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_fieldAccessorTable @@ -380,7 +392,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.MoveInstanceRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -434,39 +446,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.MoveInstanceRequ } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.MoveInstanceRequest) { @@ -548,6 +527,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -573,6 +553,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -598,6 +579,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -622,6 +604,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -642,6 +625,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -669,6 +653,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object targetConfig_ = ""; + /** * * @@ -694,6 +679,7 @@ public java.lang.String getTargetConfig() { return (java.lang.String) ref; } } + /** * * @@ -719,6 +705,7 @@ public com.google.protobuf.ByteString getTargetConfigBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -743,6 +730,7 @@ public Builder setTargetConfig(java.lang.String value) { onChanged(); return this; } + /** * * @@ -763,6 +751,7 @@ public Builder clearTargetConfig() { onChanged(); return this; } + /** * * @@ -789,17 +778,6 @@ public Builder setTargetConfigBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.MoveInstanceRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequestOrBuilder.java index 8c573fdd284..9af48e1a603 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface MoveInstanceRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.MoveInstanceRequest) @@ -39,6 +41,7 @@ public interface MoveInstanceRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -70,6 +73,7 @@ public interface MoveInstanceRequestOrBuilder * @return The targetConfig. */ java.lang.String getTargetConfig(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponse.java index cbc73eef087..f0ecd442f86 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.MoveInstanceResponse} */ -public final class MoveInstanceResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class MoveInstanceResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.MoveInstanceResponse) MoveInstanceResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MoveInstanceResponse"); + } + // Use MoveInstanceResponse.newBuilder() to construct. - private MoveInstanceResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private MoveInstanceResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private MoveInstanceResponse() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new MoveInstanceResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_fieldAccessorTable @@ -154,38 +161,38 @@ public static com.google.spanner.admin.instance.v1.MoveInstanceResponse parseFro public static com.google.spanner.admin.instance.v1.MoveInstanceResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.MoveInstanceResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.MoveInstanceResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.MoveInstanceResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -209,10 +216,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -223,7 +231,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.MoveInstanceResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.MoveInstanceResponse) com.google.spanner.admin.instance.v1.MoveInstanceResponseOrBuilder { @@ -233,7 +241,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_fieldAccessorTable @@ -245,7 +253,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.MoveInstanceResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -283,39 +291,6 @@ public com.google.spanner.admin.instance.v1.MoveInstanceResponse buildPartial() return result; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.MoveInstanceResponse) { @@ -372,17 +347,6 @@ public Builder mergeFrom( return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.MoveInstanceResponse) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponseOrBuilder.java index ecb879953c7..2c1187f7334 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/MoveInstanceResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface MoveInstanceResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.MoveInstanceResponse) diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java index 55a34ebc5fb..af031df189c 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.OperationProgress} */ -public final class OperationProgress extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class OperationProgress extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.OperationProgress) OperationProgressOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "OperationProgress"); + } + // Use OperationProgress.newBuilder() to construct. - private OperationProgress(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private OperationProgress(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private OperationProgress() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new OperationProgress(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.CommonProto .internal_static_google_spanner_admin_instance_v1_OperationProgress_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.CommonProto .internal_static_google_spanner_admin_instance_v1_OperationProgress_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PROGRESS_PERCENT_FIELD_NUMBER = 1; private int progressPercent_ = 0; + /** * * @@ -84,6 +92,7 @@ public int getProgressPercent() { public static final int START_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -99,6 +108,7 @@ public int getProgressPercent() { public boolean hasStartTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -114,6 +124,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -130,6 +141,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -146,6 +158,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -162,6 +175,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -306,38 +320,38 @@ public static com.google.spanner.admin.instance.v1.OperationProgress parseFrom( public static com.google.spanner.admin.instance.v1.OperationProgress parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.OperationProgress parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.OperationProgress parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.OperationProgress parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.OperationProgress parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.OperationProgress parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -361,10 +375,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -375,7 +390,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.OperationProgress} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.OperationProgress) com.google.spanner.admin.instance.v1.OperationProgressOrBuilder { @@ -385,7 +400,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.CommonProto .internal_static_google_spanner_admin_instance_v1_OperationProgress_fieldAccessorTable @@ -399,15 +414,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getStartTimeFieldBuilder(); - getEndTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStartTimeFieldBuilder(); + internalGetEndTimeFieldBuilder(); } } @@ -477,39 +492,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.OperationProgres result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.OperationProgress) { @@ -566,13 +548,14 @@ public Builder mergeFrom( } // case 8 case 18: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -596,6 +579,7 @@ public Builder mergeFrom( private int bitField0_; private int progressPercent_; + /** * * @@ -612,6 +596,7 @@ public Builder mergeFrom( public int getProgressPercent() { return progressPercent_; } + /** * * @@ -632,6 +617,7 @@ public Builder setProgressPercent(int value) { onChanged(); return this; } + /** * * @@ -652,11 +638,12 @@ public Builder clearProgressPercent() { } private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -671,6 +658,7 @@ public Builder clearProgressPercent() { public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -689,6 +677,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -711,6 +700,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -730,6 +720,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -757,6 +748,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -776,6 +768,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -788,8 +781,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -806,6 +800,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -815,14 +810,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -833,11 +828,12 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private com.google.protobuf.Timestamp endTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -853,6 +849,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -872,6 +869,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -895,6 +893,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -915,6 +914,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -943,6 +943,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -963,6 +964,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -976,8 +978,9 @@ public Builder clearEndTime() { public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getEndTimeFieldBuilder().getBuilder(); + return internalGetEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -995,6 +998,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1005,14 +1009,14 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { * * .google.protobuf.Timestamp end_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEndTimeFieldBuilder() { + internalGetEndTimeFieldBuilder() { if (endTimeBuilder_ == null) { endTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1022,17 +1026,6 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.OperationProgress) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java index dbf7800b404..07b0fb9f8bc 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface OperationProgressOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.OperationProgress) @@ -50,6 +52,7 @@ public interface OperationProgressOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -62,6 +65,7 @@ public interface OperationProgressOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -86,6 +90,7 @@ public interface OperationProgressOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -99,6 +104,7 @@ public interface OperationProgressOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ProjectName.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ProjectName.java index b9d57160f0a..e23ddfeff71 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ProjectName.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ProjectName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacity.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacity.java index 1e64f6b80b9..1830b4e06ee 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacity.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacity.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ReplicaComputeCapacity} */ -public final class ReplicaComputeCapacity extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ReplicaComputeCapacity extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ReplicaComputeCapacity) ReplicaComputeCapacityOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReplicaComputeCapacity"); + } + // Use ReplicaComputeCapacity.newBuilder() to construct. - private ReplicaComputeCapacity(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReplicaComputeCapacity(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private ReplicaComputeCapacity() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReplicaComputeCapacity(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_fieldAccessorTable @@ -80,6 +87,7 @@ public enum ComputeCapacityCase private ComputeCapacityCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -114,6 +122,7 @@ public ComputeCapacityCase getComputeCapacityCase() { public static final int REPLICA_SELECTION_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.ReplicaSelection replicaSelection_; + /** * * @@ -132,6 +141,7 @@ public ComputeCapacityCase getComputeCapacityCase() { public boolean hasReplicaSelection() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -152,6 +162,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection ? com.google.spanner.admin.instance.v1.ReplicaSelection.getDefaultInstance() : replicaSelection_; } + /** * * @@ -173,6 +184,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection } public static final int NODE_COUNT_FIELD_NUMBER = 2; + /** * * @@ -191,6 +203,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection public boolean hasNodeCount() { return computeCapacityCase_ == 2; } + /** * * @@ -214,6 +227,7 @@ public int getNodeCount() { } public static final int PROCESSING_UNITS_FIELD_NUMBER = 3; + /** * * @@ -232,6 +246,7 @@ public int getNodeCount() { public boolean hasProcessingUnits() { return computeCapacityCase_ == 3; } + /** * * @@ -399,38 +414,38 @@ public static com.google.spanner.admin.instance.v1.ReplicaComputeCapacity parseF public static com.google.spanner.admin.instance.v1.ReplicaComputeCapacity parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaComputeCapacity parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ReplicaComputeCapacity parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaComputeCapacity parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ReplicaComputeCapacity parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaComputeCapacity parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -454,10 +469,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -468,7 +484,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ReplicaComputeCapacity} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ReplicaComputeCapacity) com.google.spanner.admin.instance.v1.ReplicaComputeCapacityOrBuilder { @@ -478,7 +494,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_fieldAccessorTable @@ -492,14 +508,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getReplicaSelectionFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetReplicaSelectionFieldBuilder(); } } @@ -566,39 +582,6 @@ private void buildPartialOneofs( result.computeCapacity_ = this.computeCapacity_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ReplicaComputeCapacity) { @@ -660,7 +643,7 @@ public Builder mergeFrom( case 10: { input.readMessage( - getReplicaSelectionFieldBuilder().getBuilder(), extensionRegistry); + internalGetReplicaSelectionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -710,11 +693,12 @@ public Builder clearComputeCapacity() { private int bitField0_; private com.google.spanner.admin.instance.v1.ReplicaSelection replicaSelection_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaSelection, com.google.spanner.admin.instance.v1.ReplicaSelection.Builder, com.google.spanner.admin.instance.v1.ReplicaSelectionOrBuilder> replicaSelectionBuilder_; + /** * * @@ -732,6 +716,7 @@ public Builder clearComputeCapacity() { public boolean hasReplicaSelection() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -755,6 +740,7 @@ public com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection return replicaSelectionBuilder_.getMessage(); } } + /** * * @@ -781,6 +767,7 @@ public Builder setReplicaSelection( onChanged(); return this; } + /** * * @@ -804,6 +791,7 @@ public Builder setReplicaSelection( onChanged(); return this; } + /** * * @@ -836,6 +824,7 @@ public Builder mergeReplicaSelection( } return this; } + /** * * @@ -858,6 +847,7 @@ public Builder clearReplicaSelection() { onChanged(); return this; } + /** * * @@ -874,8 +864,9 @@ public Builder clearReplicaSelection() { getReplicaSelectionBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getReplicaSelectionFieldBuilder().getBuilder(); + return internalGetReplicaSelectionFieldBuilder().getBuilder(); } + /** * * @@ -898,6 +889,7 @@ public Builder clearReplicaSelection() { : replicaSelection_; } } + /** * * @@ -910,14 +902,14 @@ public Builder clearReplicaSelection() { * .google.spanner.admin.instance.v1.ReplicaSelection replica_selection = 1 [(.google.api.field_behavior) = REQUIRED]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaSelection, com.google.spanner.admin.instance.v1.ReplicaSelection.Builder, com.google.spanner.admin.instance.v1.ReplicaSelectionOrBuilder> - getReplicaSelectionFieldBuilder() { + internalGetReplicaSelectionFieldBuilder() { if (replicaSelectionBuilder_ == null) { replicaSelectionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaSelection, com.google.spanner.admin.instance.v1.ReplicaSelection.Builder, com.google.spanner.admin.instance.v1.ReplicaSelectionOrBuilder>( @@ -944,6 +936,7 @@ public Builder clearReplicaSelection() { public boolean hasNodeCount() { return computeCapacityCase_ == 2; } + /** * * @@ -964,6 +957,7 @@ public int getNodeCount() { } return 0; } + /** * * @@ -986,6 +980,7 @@ public Builder setNodeCount(int value) { onChanged(); return this; } + /** * * @@ -1026,6 +1021,7 @@ public Builder clearNodeCount() { public boolean hasProcessingUnits() { return computeCapacityCase_ == 3; } + /** * * @@ -1046,6 +1042,7 @@ public int getProcessingUnits() { } return 0; } + /** * * @@ -1068,6 +1065,7 @@ public Builder setProcessingUnits(int value) { onChanged(); return this; } + /** * * @@ -1091,17 +1089,6 @@ public Builder clearProcessingUnits() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ReplicaComputeCapacity) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacityOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacityOrBuilder.java index a8eeea2cdcb..d9f5c6e879a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacityOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaComputeCapacityOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ReplicaComputeCapacityOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ReplicaComputeCapacity) @@ -39,6 +41,7 @@ public interface ReplicaComputeCapacityOrBuilder * @return Whether the replicaSelection field is set. */ boolean hasReplicaSelection(); + /** * * @@ -54,6 +57,7 @@ public interface ReplicaComputeCapacityOrBuilder * @return The replicaSelection. */ com.google.spanner.admin.instance.v1.ReplicaSelection getReplicaSelection(); + /** * * @@ -83,6 +87,7 @@ public interface ReplicaComputeCapacityOrBuilder * @return Whether the nodeCount field is set. */ boolean hasNodeCount(); + /** * * @@ -114,6 +119,7 @@ public interface ReplicaComputeCapacityOrBuilder * @return Whether the processingUnits field is set. */ boolean hasProcessingUnits(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java index 1c633dded9a..d4146416acc 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,19 +14,32 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** Protobuf type {@code google.spanner.admin.instance.v1.ReplicaInfo} */ -public final class ReplicaInfo extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ReplicaInfo extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ReplicaInfo) ReplicaInfoOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReplicaInfo"); + } + // Use ReplicaInfo.newBuilder() to construct. - private ReplicaInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReplicaInfo(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -35,19 +48,13 @@ private ReplicaInfo() { type_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReplicaInfo(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ReplicaInfo_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ReplicaInfo_fieldAccessorTable @@ -128,6 +135,16 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReplicaType"); + } + /** * * @@ -138,6 +155,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum { * TYPE_UNSPECIFIED = 0; */ public static final int TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -154,6 +172,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum { * READ_WRITE = 1; */ public static final int READ_WRITE_VALUE = 1; + /** * * @@ -169,6 +188,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum { * READ_ONLY = 2; */ public static final int READ_ONLY_VALUE = 2; + /** * * @@ -246,7 +266,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.admin.instance.v1.ReplicaInfo.getDescriptor().getEnumTypes().get(0); } @@ -275,11 +295,12 @@ private ReplicaType(int value) { @SuppressWarnings("serial") private volatile java.lang.Object location_ = ""; + /** * * *
                                -   * The location of the serving resources, e.g. "us-central1".
                                +   * The location of the serving resources, e.g., "us-central1".
                                    * 
                                * * string location = 1; @@ -298,11 +319,12 @@ public java.lang.String getLocation() { return s; } } + /** * * *
                                -   * The location of the serving resources, e.g. "us-central1".
                                +   * The location of the serving resources, e.g., "us-central1".
                                    * 
                                * * string location = 1; @@ -324,6 +346,7 @@ public com.google.protobuf.ByteString getLocationBytes() { public static final int TYPE_FIELD_NUMBER = 2; private int type_ = 0; + /** * * @@ -339,6 +362,7 @@ public com.google.protobuf.ByteString getLocationBytes() { public int getTypeValue() { return type_; } + /** * * @@ -361,6 +385,7 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.ReplicaType getType() { public static final int DEFAULT_LEADER_LOCATION_FIELD_NUMBER = 3; private boolean defaultLeaderLocation_ = false; + /** * * @@ -394,8 +419,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(location_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, location_); } if (type_ != com.google.spanner.admin.instance.v1.ReplicaInfo.ReplicaType.TYPE_UNSPECIFIED @@ -414,8 +439,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(location_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, location_); } if (type_ != com.google.spanner.admin.instance.v1.ReplicaInfo.ReplicaType.TYPE_UNSPECIFIED @@ -503,38 +528,38 @@ public static com.google.spanner.admin.instance.v1.ReplicaInfo parseFrom( public static com.google.spanner.admin.instance.v1.ReplicaInfo parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaInfo parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ReplicaInfo parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaInfo parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ReplicaInfo parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaInfo parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -557,12 +582,13 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** Protobuf type {@code google.spanner.admin.instance.v1.ReplicaInfo} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ReplicaInfo) com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder { @@ -572,7 +598,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ReplicaInfo_fieldAccessorTable @@ -584,7 +610,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.ReplicaInfo.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -642,39 +668,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.ReplicaInfo resu } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ReplicaInfo) { @@ -763,11 +756,12 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object location_ = ""; + /** * * *
                                -     * The location of the serving resources, e.g. "us-central1".
                                +     * The location of the serving resources, e.g., "us-central1".
                                      * 
                                * * string location = 1; @@ -785,11 +779,12 @@ public java.lang.String getLocation() { return (java.lang.String) ref; } } + /** * * *
                                -     * The location of the serving resources, e.g. "us-central1".
                                +     * The location of the serving resources, e.g., "us-central1".
                                      * 
                                * * string location = 1; @@ -807,11 +802,12 @@ public com.google.protobuf.ByteString getLocationBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                -     * The location of the serving resources, e.g. "us-central1".
                                +     * The location of the serving resources, e.g., "us-central1".
                                      * 
                                * * string location = 1; @@ -828,11 +824,12 @@ public Builder setLocation(java.lang.String value) { onChanged(); return this; } + /** * * *
                                -     * The location of the serving resources, e.g. "us-central1".
                                +     * The location of the serving resources, e.g., "us-central1".
                                      * 
                                * * string location = 1; @@ -845,11 +842,12 @@ public Builder clearLocation() { onChanged(); return this; } + /** * * *
                                -     * The location of the serving resources, e.g. "us-central1".
                                +     * The location of the serving resources, e.g., "us-central1".
                                      * 
                                * * string location = 1; @@ -869,6 +867,7 @@ public Builder setLocationBytes(com.google.protobuf.ByteString value) { } private int type_ = 0; + /** * * @@ -884,6 +883,7 @@ public Builder setLocationBytes(com.google.protobuf.ByteString value) { public int getTypeValue() { return type_; } + /** * * @@ -902,6 +902,7 @@ public Builder setTypeValue(int value) { onChanged(); return this; } + /** * * @@ -921,6 +922,7 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.ReplicaType getType() { ? com.google.spanner.admin.instance.v1.ReplicaInfo.ReplicaType.UNRECOGNIZED : result; } + /** * * @@ -942,6 +944,7 @@ public Builder setType(com.google.spanner.admin.instance.v1.ReplicaInfo.ReplicaT onChanged(); return this; } + /** * * @@ -961,6 +964,7 @@ public Builder clearType() { } private boolean defaultLeaderLocation_; + /** * * @@ -979,6 +983,7 @@ public Builder clearType() { public boolean getDefaultLeaderLocation() { return defaultLeaderLocation_; } + /** * * @@ -1001,6 +1006,7 @@ public Builder setDefaultLeaderLocation(boolean value) { onChanged(); return this; } + /** * * @@ -1022,17 +1028,6 @@ public Builder clearDefaultLeaderLocation() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ReplicaInfo) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java index ec4219e4c17..e0ea15d0a67 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ReplicaInfoOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ReplicaInfo) @@ -28,7 +30,7 @@ public interface ReplicaInfoOrBuilder * * *
                                -   * The location of the serving resources, e.g. "us-central1".
                                +   * The location of the serving resources, e.g., "us-central1".
                                    * 
                                * * string location = 1; @@ -36,11 +38,12 @@ public interface ReplicaInfoOrBuilder * @return The location. */ java.lang.String getLocation(); + /** * * *
                                -   * The location of the serving resources, e.g. "us-central1".
                                +   * The location of the serving resources, e.g., "us-central1".
                                    * 
                                * * string location = 1; @@ -61,6 +64,7 @@ public interface ReplicaInfoOrBuilder * @return The enum numeric value on the wire for type. */ int getTypeValue(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelection.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelection.java index 4ad522000a1..1f9568d5583 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelection.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelection.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.ReplicaSelection} */ -public final class ReplicaSelection extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ReplicaSelection extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.ReplicaSelection) ReplicaSelectionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReplicaSelection"); + } + // Use ReplicaSelection.newBuilder() to construct. - private ReplicaSelection(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReplicaSelection(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private ReplicaSelection() { location_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReplicaSelection(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.CommonProto .internal_static_google_spanner_admin_instance_v1_ReplicaSelection_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.CommonProto .internal_static_google_spanner_admin_instance_v1_ReplicaSelection_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object location_ = ""; + /** * * @@ -90,6 +98,7 @@ public java.lang.String getLocation() { return s; } } + /** * * @@ -128,8 +137,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(location_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, location_); } getUnknownFields().writeTo(output); } @@ -140,8 +149,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(location_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, location_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -215,38 +224,38 @@ public static com.google.spanner.admin.instance.v1.ReplicaSelection parseFrom( public static com.google.spanner.admin.instance.v1.ReplicaSelection parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaSelection parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ReplicaSelection parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaSelection parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.ReplicaSelection parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.ReplicaSelection parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -270,10 +279,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -283,7 +293,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.ReplicaSelection} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.ReplicaSelection) com.google.spanner.admin.instance.v1.ReplicaSelectionOrBuilder { @@ -293,7 +303,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.CommonProto .internal_static_google_spanner_admin_instance_v1_ReplicaSelection_fieldAccessorTable @@ -305,7 +315,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.admin.instance.v1.ReplicaSelection.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -355,39 +365,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.ReplicaSelection } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.ReplicaSelection) { @@ -458,6 +435,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object location_ = ""; + /** * * @@ -480,6 +458,7 @@ public java.lang.String getLocation() { return (java.lang.String) ref; } } + /** * * @@ -502,6 +481,7 @@ public com.google.protobuf.ByteString getLocationBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -523,6 +503,7 @@ public Builder setLocation(java.lang.String value) { onChanged(); return this; } + /** * * @@ -540,6 +521,7 @@ public Builder clearLocation() { onChanged(); return this; } + /** * * @@ -563,17 +545,6 @@ public Builder setLocationBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.ReplicaSelection) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelectionOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelectionOrBuilder.java index 60c9b0edca0..35ed0f8e243 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelectionOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaSelectionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/common.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface ReplicaSelectionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.ReplicaSelection) @@ -36,6 +38,7 @@ public interface ReplicaSelectionOrBuilder * @return The location. */ java.lang.String getLocation(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java index b286514fd32..fcf08cfa3f9 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; -public final class SpannerInstanceAdminProto { +@com.google.protobuf.Generated +public final class SpannerInstanceAdminProto extends com.google.protobuf.GeneratedFile { private SpannerInstanceAdminProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerInstanceAdminProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,175 +42,179 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ReplicaInfo_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ReplicaInfo_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_InstanceConfig_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_InstanceConfig_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_InstanceConfig_LabelsEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_InstanceConfig_LabelsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_Instance_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_Instance_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_Instance_LabelsEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_Instance_LabelsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_InstancePartition_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_InstancePartition_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -209,391 +225,455 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n=google/spanner/admin/instance/v1/spann" - + "er_instance_admin.proto\022 google.spanner." + "\n" + + "=google/spanner/admin/instance/v1/spanner_instance_admin.proto\022 google.spanner." + "admin.instance.v1\032\034google/api/annotation" + "s.proto\032\027google/api/client.proto\032\037google" + "/api/field_behavior.proto\032\031google/api/re" + "source.proto\032\036google/iam/v1/iam_policy.p" + "roto\032\032google/iam/v1/policy.proto\032#google" - + "/longrunning/operations.proto\032\033google/pr" - + "otobuf/empty.proto\032 google/protobuf/fiel" - + "d_mask.proto\032\037google/protobuf/timestamp." - + "proto\032-google/spanner/admin/instance/v1/" - + "common.proto\"\332\001\n\013ReplicaInfo\022\020\n\010location" - + "\030\001 \001(\t\022G\n\004type\030\002 \001(\01629.google.spanner.ad" - + "min.instance.v1.ReplicaInfo.ReplicaType\022" - + "\037\n\027default_leader_location\030\003 \001(\010\"O\n\013Repl" - + "icaType\022\024\n\020TYPE_UNSPECIFIED\020\000\022\016\n\nREAD_WR" - + "ITE\020\001\022\r\n\tREAD_ONLY\020\002\022\013\n\007WITNESS\020\003\"\276\006\n\016In" - + "stanceConfig\022\014\n\004name\030\001 \001(\t\022\024\n\014display_na" - + "me\030\002 \001(\t\022O\n\013config_type\030\005 \001(\01625.google.s" - + "panner.admin.instance.v1.InstanceConfig." - + "TypeB\003\340A\003\022?\n\010replicas\030\003 \003(\0132-.google.spa" - + "nner.admin.instance.v1.ReplicaInfo\022M\n\021op" - + "tional_replicas\030\006 \003(\0132-.google.spanner.a" - + "dmin.instance.v1.ReplicaInfoB\003\340A\003\022?\n\013bas" - + "e_config\030\007 \001(\tB*\372A\'\n%spanner.googleapis." - + "com/InstanceConfig\022L\n\006labels\030\010 \003(\0132<.goo" - + "gle.spanner.admin.instance.v1.InstanceCo" - + "nfig.LabelsEntry\022\014\n\004etag\030\t \001(\t\022\026\n\016leader" - + "_options\030\004 \003(\t\022\030\n\013reconciling\030\n \001(\010B\003\340A\003" - + "\022J\n\005state\030\013 \001(\01626.google.spanner.admin.i" - + "nstance.v1.InstanceConfig.StateB\003\340A\003\032-\n\013" - + "LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:" - + "\0028\001\"B\n\004Type\022\024\n\020TYPE_UNSPECIFIED\020\000\022\022\n\016GOO" - + "GLE_MANAGED\020\001\022\020\n\014USER_MANAGED\020\002\"7\n\005State" - + "\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n" - + "\005READY\020\002:`\352A]\n%spanner.googleapis.com/In" - + "stanceConfig\0224projects/{project}/instanc" - + "eConfigs/{instance_config}\"\262\001\n\026ReplicaCo" - + "mputeCapacity\022R\n\021replica_selection\030\001 \001(\013" - + "22.google.spanner.admin.instance.v1.Repl" - + "icaSelectionB\003\340A\002\022\024\n\nnode_count\030\002 \001(\005H\000\022" - + "\032\n\020processing_units\030\003 \001(\005H\000B\022\n\020compute_c" - + "apacity\"\270\010\n\021AutoscalingConfig\022f\n\022autosca" - + "ling_limits\030\001 \001(\0132E.google.spanner.admin" - + ".instance.v1.AutoscalingConfig.Autoscali" - + "ngLimitsB\003\340A\002\022h\n\023autoscaling_targets\030\002 \001" - + "(\0132F.google.spanner.admin.instance.v1.Au" - + "toscalingConfig.AutoscalingTargetsB\003\340A\002\022" - + "|\n\036asymmetric_autoscaling_options\030\003 \003(\0132" - + "O.google.spanner.admin.instance.v1.Autos" - + "calingConfig.AsymmetricAutoscalingOption" - + "B\003\340A\001\032\227\001\n\021AutoscalingLimits\022\023\n\tmin_nodes" - + "\030\001 \001(\005H\000\022\036\n\024min_processing_units\030\002 \001(\005H\000" - + "\022\023\n\tmax_nodes\030\003 \001(\005H\001\022\036\n\024max_processing_" - + "units\030\004 \001(\005H\001B\013\n\tmin_limitB\013\n\tmax_limit\032" - + "r\n\022AutoscalingTargets\0222\n%high_priority_c" - + "pu_utilization_percent\030\001 \001(\005B\003\340A\002\022(\n\033sto" - + "rage_utilization_percent\030\002 \001(\005B\003\340A\002\032\304\003\n\033" - + "AsymmetricAutoscalingOption\022R\n\021replica_s" - + "election\030\001 \001(\01322.google.spanner.admin.in" - + "stance.v1.ReplicaSelectionB\003\340A\002\022\202\001\n\tover" - + "rides\030\002 \001(\0132j.google.spanner.admin.insta" - + "nce.v1.AutoscalingConfig.AsymmetricAutos" - + "calingOption.AutoscalingConfigOverridesB" - + "\003\340A\001\032\313\001\n\032AutoscalingConfigOverrides\022f\n\022a" - + "utoscaling_limits\030\001 \001(\0132E.google.spanner" - + ".admin.instance.v1.AutoscalingConfig.Aut" - + "oscalingLimitsB\003\340A\001\022E\n8autoscaling_targe" - + "t_high_priority_cpu_utilization_percent\030" - + "\002 \001(\005B\003\340A\001\"\232\t\n\010Instance\022\021\n\004name\030\001 \001(\tB\003\340" - + "A\002\022=\n\006config\030\002 \001(\tB-\340A\002\372A\'\n%spanner.goog" - + "leapis.com/InstanceConfig\022\031\n\014display_nam" - + "e\030\003 \001(\tB\003\340A\002\022\022\n\nnode_count\030\005 \001(\005\022\030\n\020proc" - + "essing_units\030\t \001(\005\022_\n\030replica_compute_ca" - + "pacity\030\023 \003(\01328.google.spanner.admin.inst" - + "ance.v1.ReplicaComputeCapacityB\003\340A\003\022T\n\022a" - + "utoscaling_config\030\021 \001(\01323.google.spanner" - + ".admin.instance.v1.AutoscalingConfigB\003\340A" - + "\001\022D\n\005state\030\006 \001(\01620.google.spanner.admin." - + "instance.v1.Instance.StateB\003\340A\003\022F\n\006label" - + "s\030\007 \003(\01326.google.spanner.admin.instance." - + "v1.Instance.LabelsEntry\022\025\n\rendpoint_uris" - + "\030\010 \003(\t\0224\n\013create_time\030\013 \001(\0132\032.google.pro" - + "tobuf.TimestampB\003\340A\003\0224\n\013update_time\030\014 \001(" - + "\0132\032.google.protobuf.TimestampB\003\340A\003\022H\n\007ed" - + "ition\030\024 \001(\01622.google.spanner.admin.insta" - + "nce.v1.Instance.EditionB\003\340A\001\022o\n\034default_" - + "backup_schedule_type\030\027 \001(\0162D.google.span" - + "ner.admin.instance.v1.Instance.DefaultBa" - + "ckupScheduleTypeB\003\340A\001\032-\n\013LabelsEntry\022\013\n\003" - + "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"7\n\005State\022\025\n" - + "\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005RE" - + "ADY\020\002\"U\n\007Edition\022\027\n\023EDITION_UNSPECIFIED\020" - + "\000\022\014\n\010STANDARD\020\001\022\016\n\nENTERPRISE\020\002\022\023\n\017ENTER" - + "PRISE_PLUS\020\003\"b\n\031DefaultBackupScheduleTyp" - + "e\022,\n(DEFAULT_BACKUP_SCHEDULE_TYPE_UNSPEC" - + "IFIED\020\000\022\010\n\004NONE\020\001\022\r\n\tAUTOMATIC\020\002:M\352AJ\n\037s" - + "panner.googleapis.com/Instance\022\'projects" - + "/{project}/instances/{instance}\"\210\001\n\032List" - + "InstanceConfigsRequest\022C\n\006parent\030\001 \001(\tB3" - + "\340A\002\372A-\n+cloudresourcemanager.googleapis." - + "com/Project\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_t" - + "oken\030\003 \001(\t\"\202\001\n\033ListInstanceConfigsRespon" - + "se\022J\n\020instance_configs\030\001 \003(\01320.google.sp" - + "anner.admin.instance.v1.InstanceConfig\022\027" - + "\n\017next_page_token\030\002 \001(\t\"W\n\030GetInstanceCo" - + "nfigRequest\022;\n\004name\030\001 \001(\tB-\340A\002\372A\'\n%spann" - + "er.googleapis.com/InstanceConfig\"\352\001\n\033Cre" - + "ateInstanceConfigRequest\022C\n\006parent\030\001 \001(\t" - + "B3\340A\002\372A-\n+cloudresourcemanager.googleapi" - + "s.com/Project\022\037\n\022instance_config_id\030\002 \001(" - + "\tB\003\340A\002\022N\n\017instance_config\030\003 \001(\01320.google" - + ".spanner.admin.instance.v1.InstanceConfi" - + "gB\003\340A\002\022\025\n\rvalidate_only\030\004 \001(\010\"\272\001\n\033Update" - + "InstanceConfigRequest\022N\n\017instance_config" - + "\030\001 \001(\01320.google.spanner.admin.instance.v" - + "1.InstanceConfigB\003\340A\002\0224\n\013update_mask\030\002 \001" - + "(\0132\032.google.protobuf.FieldMaskB\003\340A\002\022\025\n\rv" - + "alidate_only\030\003 \001(\010\"\177\n\033DeleteInstanceConf" - + "igRequest\022;\n\004name\030\001 \001(\tB-\340A\002\372A\'\n%spanner" - + ".googleapis.com/InstanceConfig\022\014\n\004etag\030\002" - + " \001(\t\022\025\n\rvalidate_only\030\003 \001(\010\"\241\001\n#ListInst" - + "anceConfigOperationsRequest\022C\n\006parent\030\001 " - + "\001(\tB3\340A\002\372A-\n+cloudresourcemanager.google" - + "apis.com/Project\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage" - + "_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"r\n$ListI" - + "nstanceConfigOperationsResponse\0221\n\nopera" - + "tions\030\001 \003(\0132\035.google.longrunning.Operati" - + "on\022\027\n\017next_page_token\030\002 \001(\t\"{\n\022GetInstan" - + "ceRequest\0225\n\004name\030\001 \001(\tB\'\340A\002\372A!\n\037spanner" - + ".googleapis.com/Instance\022.\n\nfield_mask\030\002" - + " \001(\0132\032.google.protobuf.FieldMask\"\271\001\n\025Cre" - + "ateInstanceRequest\022C\n\006parent\030\001 \001(\tB3\340A\002\372" - + "A-\n+cloudresourcemanager.googleapis.com/" - + "Project\022\030\n\013instance_id\030\002 \001(\tB\003\340A\002\022A\n\010ins" - + "tance\030\003 \001(\0132*.google.spanner.admin.insta" - + "nce.v1.InstanceB\003\340A\002\"\311\001\n\024ListInstancesRe" - + "quest\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudreso" - + "urcemanager.googleapis.com/Project\022\021\n\tpa" - + "ge_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n\006fil" - + "ter\030\004 \001(\t\0225\n\021instance_deadline\030\005 \001(\0132\032.g" - + "oogle.protobuf.Timestamp\"\204\001\n\025ListInstanc" - + "esResponse\022=\n\tinstances\030\001 \003(\0132*.google.s" - + "panner.admin.instance.v1.Instance\022\027\n\017nex" - + "t_page_token\030\002 \001(\t\022\023\n\013unreachable\030\003 \003(\t\"" - + "\217\001\n\025UpdateInstanceRequest\022A\n\010instance\030\001 " - + "\001(\0132*.google.spanner.admin.instance.v1.I" - + "nstanceB\003\340A\002\0223\n\nfield_mask\030\002 \001(\0132\032.googl" - + "e.protobuf.FieldMaskB\003\340A\002\"N\n\025DeleteInsta" - + "nceRequest\0225\n\004name\030\001 \001(\tB\'\340A\002\372A!\n\037spanne" - + "r.googleapis.com/Instance\"\277\002\n\026CreateInst" - + "anceMetadata\022<\n\010instance\030\001 \001(\0132*.google." - + "spanner.admin.instance.v1.Instance\022.\n\nst" - + "art_time\030\002 \001(\0132\032.google.protobuf.Timesta" - + "mp\022/\n\013cancel_time\030\003 \001(\0132\032.google.protobu" - + "f.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.google.p" - + "rotobuf.Timestamp\022X\n\033expected_fulfillmen" - + "t_period\030\005 \001(\01623.google.spanner.admin.in" - + "stance.v1.FulfillmentPeriod\"\277\002\n\026UpdateIn" - + "stanceMetadata\022<\n\010instance\030\001 \001(\0132*.googl" - + "e.spanner.admin.instance.v1.Instance\022.\n\n" - + "start_time\030\002 \001(\0132\032.google.protobuf.Times" - + "tamp\022/\n\013cancel_time\030\003 \001(\0132\032.google.proto" - + "buf.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.google" - + ".protobuf.Timestamp\022X\n\033expected_fulfillm" - + "ent_period\030\005 \001(\01623.google.spanner.admin." - + "instance.v1.FulfillmentPeriod\"\341\001\n\034Create" - + "InstanceConfigMetadata\022I\n\017instance_confi" - + "g\030\001 \001(\01320.google.spanner.admin.instance." - + "v1.InstanceConfig\022E\n\010progress\030\002 \001(\01323.go" - + "ogle.spanner.admin.instance.v1.Operation" - + "Progress\022/\n\013cancel_time\030\003 \001(\0132\032.google.p" - + "rotobuf.Timestamp\"\341\001\n\034UpdateInstanceConf" - + "igMetadata\022I\n\017instance_config\030\001 \001(\01320.go" - + "ogle.spanner.admin.instance.v1.InstanceC" - + "onfig\022E\n\010progress\030\002 \001(\01323.google.spanner" - + ".admin.instance.v1.OperationProgress\022/\n\013" - + "cancel_time\030\003 \001(\0132\032.google.protobuf.Time" - + "stamp\"\216\005\n\021InstancePartition\022\021\n\004name\030\001 \001(" - + "\tB\003\340A\002\022=\n\006config\030\002 \001(\tB-\340A\002\372A\'\n%spanner." - + "googleapis.com/InstanceConfig\022\031\n\014display" - + "_name\030\003 \001(\tB\003\340A\002\022\024\n\nnode_count\030\005 \001(\005H\000\022\032" - + "\n\020processing_units\030\006 \001(\005H\000\022M\n\005state\030\007 \001(" - + "\01629.google.spanner.admin.instance.v1.Ins" - + "tancePartition.StateB\003\340A\003\0224\n\013create_time" - + "\030\010 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022" - + "4\n\013update_time\030\t \001(\0132\032.google.protobuf.T" - + "imestampB\003\340A\003\022\"\n\025referencing_databases\030\n" - + " \003(\tB\003\340A\003\022 \n\023referencing_backups\030\013 \003(\tB\003" - + "\340A\003\022\014\n\004etag\030\014 \001(\t\"7\n\005State\022\025\n\021STATE_UNSP" - + "ECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020\002:~\352A{\n" - + "(spanner.googleapis.com/InstancePartitio" - + "n\022Oprojects/{project}/instances/{instanc" - + "e}/instancePartitions/{instance_partitio" - + "n}B\022\n\020compute_capacity\"\201\002\n\037CreateInstanc" - + "ePartitionMetadata\022O\n\022instance_partition" - + "\030\001 \001(\01323.google.spanner.admin.instance.v" - + "1.InstancePartition\022.\n\nstart_time\030\002 \001(\0132" - + "\032.google.protobuf.Timestamp\022/\n\013cancel_ti" - + "me\030\003 \001(\0132\032.google.protobuf.Timestamp\022,\n\010" - + "end_time\030\004 \001(\0132\032.google.protobuf.Timesta" - + "mp\"\323\001\n\036CreateInstancePartitionRequest\0227\n" - + "\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapi" - + "s.com/Instance\022\"\n\025instance_partition_id\030" - + "\002 \001(\tB\003\340A\002\022T\n\022instance_partition\030\003 \001(\01323" - + ".google.spanner.admin.instance.v1.Instan" - + "cePartitionB\003\340A\002\"n\n\036DeleteInstancePartit" - + "ionRequest\022>\n\004name\030\001 \001(\tB0\340A\002\372A*\n(spanne" - + "r.googleapis.com/InstancePartition\022\014\n\004et" - + "ag\030\002 \001(\t\"]\n\033GetInstancePartitionRequest\022" - + ">\n\004name\030\001 \001(\tB0\340A\002\372A*\n(spanner.googleapi" - + "s.com/InstancePartition\"\253\001\n\036UpdateInstan" - + "cePartitionRequest\022T\n\022instance_partition" - + "\030\001 \001(\01323.google.spanner.admin.instance.v" - + "1.InstancePartitionB\003\340A\002\0223\n\nfield_mask\030\002" - + " \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\"\201\002" - + "\n\037UpdateInstancePartitionMetadata\022O\n\022ins" - + "tance_partition\030\001 \001(\01323.google.spanner.a" - + "dmin.instance.v1.InstancePartition\022.\n\nst" - + "art_time\030\002 \001(\0132\032.google.protobuf.Timesta" - + "mp\022/\n\013cancel_time\030\003 \001(\0132\032.google.protobu" - + "f.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.google.p" - + "rotobuf.Timestamp\"\305\001\n\035ListInstancePartit" - + "ionsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spa" - + "nner.googleapis.com/Instance\022\021\n\tpage_siz" - + "e\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022D\n\033instance_" - + "partition_deadline\030\004 \001(\0132\032.google.protob" - + "uf.TimestampB\003\340A\001\"\240\001\n\036ListInstancePartit" - + "ionsResponse\022P\n\023instance_partitions\030\001 \003(" - + "\01323.google.spanner.admin.instance.v1.Ins" - + "tancePartition\022\027\n\017next_page_token\030\002 \001(\t\022" - + "\023\n\013unreachable\030\003 \003(\t\"\355\001\n&ListInstancePar" - + "titionOperationsRequest\0227\n\006parent\030\001 \001(\tB" - + "\'\340A\002\372A!\n\037spanner.googleapis.com/Instance" - + "\022\023\n\006filter\030\002 \001(\tB\003\340A\001\022\026\n\tpage_size\030\003 \001(\005" - + "B\003\340A\001\022\027\n\npage_token\030\004 \001(\tB\003\340A\001\022D\n\033instan" - + "ce_partition_deadline\030\005 \001(\0132\032.google.pro" - + "tobuf.TimestampB\003\340A\001\"\236\001\n\'ListInstancePar" - + "titionOperationsResponse\0221\n\noperations\030\001" - + " \003(\0132\035.google.longrunning.Operation\022\027\n\017n" - + "ext_page_token\030\002 \001(\t\022\'\n\037unreachable_inst" - + "ance_partitions\030\003 \003(\t\"\222\001\n\023MoveInstanceRe" - + "quest\0225\n\004name\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.goo" - + "gleapis.com/Instance\022D\n\rtarget_config\030\002 " - + "\001(\tB-\340A\002\372A\'\n%spanner.googleapis.com/Inst" - + "anceConfig\"\026\n\024MoveInstanceResponse\"\245\001\n\024M" - + "oveInstanceMetadata\022\025\n\rtarget_config\030\001 \001" - + "(\t\022E\n\010progress\030\002 \001(\01323.google.spanner.ad" - + "min.instance.v1.OperationProgress\022/\n\013can" - + "cel_time\030\003 \001(\0132\032.google.protobuf.Timesta" - + "mp2\332\'\n\rInstanceAdmin\022\314\001\n\023ListInstanceCon" - + "figs\022<.google.spanner.admin.instance.v1." - + "ListInstanceConfigsRequest\032=.google.span" - + "ner.admin.instance.v1.ListInstanceConfig" - + "sResponse\"8\332A\006parent\202\323\344\223\002)\022\'/v1/{parent=" - + "projects/*}/instanceConfigs\022\271\001\n\021GetInsta" - + "nceConfig\022:.google.spanner.admin.instanc" - + "e.v1.GetInstanceConfigRequest\0320.google.s" - + "panner.admin.instance.v1.InstanceConfig\"" - + "6\332A\004name\202\323\344\223\002)\022\'/v1/{name=projects/*/ins" - + "tanceConfigs/*}\022\310\002\n\024CreateInstanceConfig" - + "\022=.google.spanner.admin.instance.v1.Crea" - + "teInstanceConfigRequest\032\035.google.longrun" - + "ning.Operation\"\321\001\312Ap\n/google.spanner.adm" - + "in.instance.v1.InstanceConfig\022=google.sp" - + "anner.admin.instance.v1.CreateInstanceCo" - + "nfigMetadata\332A)parent,instance_config,in" - + "stance_config_id\202\323\344\223\002,\"\'/v1/{parent=proj" - + "ects/*}/instanceConfigs:\001*\022\312\002\n\024UpdateIns" - + "tanceConfig\022=.google.spanner.admin.insta" - + "nce.v1.UpdateInstanceConfigRequest\032\035.goo" - + "gle.longrunning.Operation\"\323\001\312Ap\n/google." - + "spanner.admin.instance.v1.InstanceConfig" - + "\022=google.spanner.admin.instance.v1.Updat" - + "eInstanceConfigMetadata\332A\033instance_confi" - + "g,update_mask\202\323\344\223\002<27/v1/{instance_confi" - + "g.name=projects/*/instanceConfigs/*}:\001*\022" - + "\245\001\n\024DeleteInstanceConfig\022=.google.spanne" - + "r.admin.instance.v1.DeleteInstanceConfig" - + "Request\032\026.google.protobuf.Empty\"6\332A\004name" - + "\202\323\344\223\002)*\'/v1/{name=projects/*/instanceCon" - + "figs/*}\022\360\001\n\034ListInstanceConfigOperations" - + "\022E.google.spanner.admin.instance.v1.List" - + "InstanceConfigOperationsRequest\032F.google" - + ".spanner.admin.instance.v1.ListInstanceC" - + "onfigOperationsResponse\"A\332A\006parent\202\323\344\223\0022" - + "\0220/v1/{parent=projects/*}/instanceConfig" - + "Operations\022\264\001\n\rListInstances\0226.google.sp" - + "anner.admin.instance.v1.ListInstancesReq" - + "uest\0327.google.spanner.admin.instance.v1." - + "ListInstancesResponse\"2\332A\006parent\202\323\344\223\002#\022!" - + "/v1/{parent=projects/*}/instances\022\344\001\n\026Li" - + "stInstancePartitions\022?.google.spanner.ad" - + "min.instance.v1.ListInstancePartitionsRe" - + "quest\032@.google.spanner.admin.instance.v1" - + ".ListInstancePartitionsResponse\"G\332A\006pare" - + "nt\202\323\344\223\0028\0226/v1/{parent=projects/*/instanc" - + "es/*}/instancePartitions\022\241\001\n\013GetInstance" - + "\0224.google.spanner.admin.instance.v1.GetI" - + "nstanceRequest\032*.google.spanner.admin.in" - + "stance.v1.Instance\"0\332A\004name\202\323\344\223\002#\022!/v1/{" - + "name=projects/*/instances/*}\022\234\002\n\016CreateI" - + "nstance\0227.google.spanner.admin.instance." - + "v1.CreateInstanceRequest\032\035.google.longru" - + "nning.Operation\"\261\001\312Ad\n)google.spanner.ad" - + "min.instance.v1.Instance\0227google.spanner" - + ".admin.instance.v1.CreateInstanceMetadat" - + "a\332A\033parent,instance_id,instance\202\323\344\223\002&\"!/" - + "v1/{parent=projects/*}/instances:\001*\022\235\002\n\016" - + "UpdateInstance\0227.google.spanner.admin.in" - + "stance.v1.UpdateInstanceRequest\032\035.google" - + ".longrunning.Operation\"\262\001\312Ad\n)google.spa" - + "nner.admin.instance.v1.Instance\0227google." - + "spanner.admin.instance.v1.UpdateInstance" - + "Metadata\332A\023instance,field_mask\202\323\344\223\002/2*/v" - + "1/{instance.name=projects/*/instances/*}" - + ":\001*\022\223\001\n\016DeleteInstance\0227.google.spanner." - + "admin.instance.v1.DeleteInstanceRequest\032" - + "\026.google.protobuf.Empty\"0\332A\004name\202\323\344\223\002#*!" - + "/v1/{name=projects/*/instances/*}\022\232\001\n\014Se" - + "tIamPolicy\022\".google.iam.v1.SetIamPolicyR" - + "equest\032\025.google.iam.v1.Policy\"O\332A\017resour" - + "ce,policy\202\323\344\223\0027\"2/v1/{resource=projects/" - + "*/instances/*}:setIamPolicy:\001*\022\223\001\n\014GetIa" - + "mPolicy\022\".google.iam.v1.GetIamPolicyRequ" - + "est\032\025.google.iam.v1.Policy\"H\332A\010resource\202" - + "\323\344\223\0027\"2/v1/{resource=projects/*/instance" - + "s/*}:getIamPolicy:\001*\022\305\001\n\022TestIamPermissi" - + "ons\022(.google.iam.v1.TestIamPermissionsRe" - + "quest\032).google.iam.v1.TestIamPermissions" - + "Response\"Z\332A\024resource,permissions\202\323\344\223\002=\"" - + "8/v1/{resource=projects/*/instances/*}:t" - + "estIamPermissions:\001*\022\321\001\n\024GetInstancePart" - + "ition\022=.google.spanner.admin.instance.v1" - + ".GetInstancePartitionRequest\0323.google.sp" - + "anner.admin.instance.v1.InstancePartitio" - + "n\"E\332A\004name\202\323\344\223\0028\0226/v1/{name=projects/*/i" - + "nstances/*/instancePartitions/*}\022\351\002\n\027Cre" - + "ateInstancePartition\022@.google.spanner.ad" - + "min.instance.v1.CreateInstancePartitionR" - + "equest\032\035.google.longrunning.Operation\"\354\001" - + "\312Av\n2google.spanner.admin.instance.v1.In" - + "stancePartition\022@google.spanner.admin.in" - + "stance.v1.CreateInstancePartitionMetadat" - + "a\332A/parent,instance_partition,instance_p" - + "artition_id\202\323\344\223\002;\"6/v1/{parent=projects/" - + "*/instances/*}/instancePartitions:\001*\022\272\001\n" - + "\027DeleteInstancePartition\022@.google.spanne" - + "r.admin.instance.v1.DeleteInstancePartit" - + "ionRequest\032\026.google.protobuf.Empty\"E\332A\004n" - + "ame\202\323\344\223\0028*6/v1/{name=projects/*/instance" - + "s/*/instancePartitions/*}\022\352\002\n\027UpdateInst" - + "ancePartition\022@.google.spanner.admin.ins" - + "tance.v1.UpdateInstancePartitionRequest\032" - + "\035.google.longrunning.Operation\"\355\001\312Av\n2go" - + "ogle.spanner.admin.instance.v1.InstanceP" - + "artition\022@google.spanner.admin.instance." - + "v1.UpdateInstancePartitionMetadata\332A\035ins" - + "tance_partition,field_mask\202\323\344\223\002N2I/v1/{i" - + "nstance_partition.name=projects/*/instan" - + "ces/*/instancePartitions/*}:\001*\022\210\002\n\037ListI" - + "nstancePartitionOperations\022H.google.span" - + "ner.admin.instance.v1.ListInstancePartit" - + "ionOperationsRequest\032I.google.spanner.ad" - + "min.instance.v1.ListInstancePartitionOpe" - + "rationsResponse\"P\332A\006parent\202\323\344\223\002A\022?/v1/{p" - + "arent=projects/*/instances/*}/instancePa" - + "rtitionOperations\022\211\002\n\014MoveInstance\0225.goo" - + "gle.spanner.admin.instance.v1.MoveInstan" - + "ceRequest\032\035.google.longrunning.Operation" - + "\"\242\001\312An\n5google.spanner.admin.instance.v1" - + ".MoveInstanceResponse\0225google.spanner.ad" - + "min.instance.v1.MoveInstanceMetadata\202\323\344\223" - + "\002+\"&/v1/{name=projects/*/instances/*}:mo" - + "ve:\001*\032x\312A\026spanner.googleapis.com\322A\\https" - + "://www.googleapis.com/auth/cloud-platfor" - + "m,https://www.googleapis.com/auth/spanne" - + "r.adminB\213\002\n$com.google.spanner.admin.ins" - + "tance.v1B\031SpannerInstanceAdminProtoP\001ZFc" - + "loud.google.com/go/spanner/admin/instanc" - + "e/apiv1/instancepb;instancepb\252\002&Google.C" - + "loud.Spanner.Admin.Instance.V1\312\002&Google\\" - + "Cloud\\Spanner\\Admin\\Instance\\V1\352\002+Google" - + "::Cloud::Spanner::Admin::Instance::V1b\006p" - + "roto3" + + "/longrunning/operations.proto\032\033google/protobuf/empty.proto\032" + + " google/protobuf/field_mask.proto\032\037google/protobuf/timestamp." + + "proto\032-google/spanner/admin/instance/v1/common.proto\"\332\001\n" + + "\013ReplicaInfo\022\020\n" + + "\010location\030\001 \001(\t\022G\n" + + "\004type\030\002 \001(\01629.google.spanner.ad" + + "min.instance.v1.ReplicaInfo.ReplicaType\022\037\n" + + "\027default_leader_location\030\003 \001(\010\"O\n" + + "\013ReplicaType\022\024\n" + + "\020TYPE_UNSPECIFIED\020\000\022\016\n\n" + + "READ_WRITE\020\001\022\r\n" + + "\tREAD_ONLY\020\002\022\013\n" + + "\007WITNESS\020\003\"\300\n\n" + + "\016InstanceConfig\022\014\n" + + "\004name\030\001 \001(\t\022\024\n" + + "\014display_name\030\002 \001(\t\022O\n" + + "\013config_type\030\005 \001(\01625.google.s" + + "panner.admin.instance.v1.InstanceConfig.TypeB\003\340A\003\022?\n" + + "\010replicas\030\003 \003(\0132-.google.spanner.admin.instance.v1.ReplicaInfo\022M\n" + + "\021optional_replicas\030\006" + + " \003(\0132-.google.spanner.admin.instance.v1.ReplicaInfoB\003\340A\003\022?\n" + + "\013base_config\030\007 \001(\tB*\372A\'\n" + + "%spanner.googleapis.com/InstanceConfig\022L\n" + + "\006labels\030\010 \003(\0132<.goo" + + "gle.spanner.admin.instance.v1.InstanceConfig.LabelsEntry\022\014\n" + + "\004etag\030\t \001(\t\022\026\n" + + "\016leader_options\030\004 \003(\t\022\030\n" + + "\013reconciling\030\n" + + " \001(\010B\003\340A\003\022J\n" + + "\005state\030\013" + + " \001(\01626.google.spanner.admin.instance.v1.InstanceConfig.StateB\003\340A\003\022r\n" + + "\032free_instance_availability\030\014 \001(\0162I.googl" + + "e.spanner.admin.instance.v1.InstanceConfig.FreeInstanceAvailabilityB\003\340A\003\022U\n" + + "\013quorum_type\030\022 \001(\0162;.google.spanner.admin.ins" + + "tance.v1.InstanceConfig.QuorumTypeB\003\340A\003\022.\n" + + "!storage_limit_per_processing_unit\030\023 \001(\003B\003\340A\003\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"B\n" + + "\004Type\022\024\n" + + "\020TYPE_UNSPECIFIED\020\000\022\022\n" + + "\016GOOGLE_MANAGED\020\001\022\020\n" + + "\014USER_MANAGED\020\002\"7\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\014\n" + + "\010CREATING\020\001\022\t\n" + + "\005READY\020\002\"\210\001\n" + + "\030FreeInstanceAvailability\022*\n" + + "&FREE_INSTANCE_AVAILABILITY_UNSPECIFIED\020\000\022\r\n" + + "\tAVAILABLE\020\001\022\017\n" + + "\013UNSUPPORTED\020\002\022\014\n" + + "\010DISABLED\020\003\022\022\n" + + "\016QUOTA_EXCEEDED\020\004\"X\n\n" + + "QuorumType\022\033\n" + + "\027QUORUM_TYPE_UNSPECIFIED\020\000\022\n\n" + + "\006REGION\020\001\022\017\n" + + "\013DUAL_REGION\020\002\022\020\n" + + "\014MULTI_REGION\020\003:\201\001\352A~\n" + + "%spanner.googleapis.com/InstanceConfig\0224projects/{project}/instan" + + "ceConfigs/{instance_config}*\017instanceConfigs2\016instanceConfig\"\262\001\n" + + "\026ReplicaComputeCapacity\022R\n" + + "\021replica_selection\030\001 \001(\01322.goo" + + "gle.spanner.admin.instance.v1.ReplicaSelectionB\003\340A\002\022\024\n\n" + + "node_count\030\002 \001(\005H\000\022\032\n" + + "\020processing_units\030\003 \001(\005H\000B\022\n" + + "\020compute_capacity\"\204\n\n" + + "\021AutoscalingConfig\022f\n" + + "\022autoscaling_limits\030\001 \001(\0132E.google.spanner.admin.insta" + + "nce.v1.AutoscalingConfig.AutoscalingLimitsB\003\340A\002\022h\n" + + "\023autoscaling_targets\030\002 \001(\0132F.g" + + "oogle.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargetsB\003\340A\002\022|\n" + + "\036asymmetric_autoscaling_options\030\003 \003(\0132O.goog" + + "le.spanner.admin.instance.v1.Autoscaling" + + "Config.AsymmetricAutoscalingOptionB\003\340A\001\032\227\001\n" + + "\021AutoscalingLimits\022\023\n" + + "\tmin_nodes\030\001 \001(\005H\000\022\036\n" + + "\024min_processing_units\030\002 \001(\005H\000\022\023\n" + + "\tmax_nodes\030\003 \001(\005H\001\022\036\n" + + "\024max_processing_units\030\004 \001(\005H\001B\013\n" + + "\tmin_limitB\013\n" + + "\tmax_limit\032\236\001\n" + + "\022AutoscalingTargets\0222\n" + + "%high_priority_cpu_utilization_percent\030\001 \001(\005B\003\340A\001\022*\n" + + "\035total_cpu_utilization_percent\030\004 \001(\005B\003\340A\001\022(\n" + + "\033storage_utilization_percent\030\002 \001(\005B\003\340A\002\032\343\004\n" + + "\033AsymmetricAutoscalingOption\022R\n" + + "\021replica_selection\030\001" + + " \001(\01322.google.spanner.admin.instance.v1.ReplicaSelectionB\003\340A\002\022\202\001\n" + + "\toverrides\030\002 \001(\0132j.google.spanner.admin.instan" + + "ce.v1.AutoscalingConfig.AsymmetricAutosc" + + "alingOption.AutoscalingConfigOverridesB\003\340A\001\032\352\002\n" + + "\032AutoscalingConfigOverrides\022f\n" + + "\022autoscaling_limits\030\001 \001(\0132E.google.spanner." + + "admin.instance.v1.AutoscalingConfig.AutoscalingLimitsB\003\340A\001\022E\n" + + "8autoscaling_target_high_priority_cpu_utilization_percent\030\002" + + " \001(\005B\003\340A\001\022=\n" + + "0autoscaling_target_total_cpu_utilization_percent\030\004" + + " \001(\005B\003\340A\001\0222\n" + + "%disable_high_priority_cpu_autoscaling\030\005 \001(\010B\003\340A\001\022*\n" + + "\035disable_total_cpu_autoscaling\030\006 \001(\010B\003\340A\001\"\252\013\n" + + "\010Instance\022\021\n" + + "\004name\030\001 \001(\tB\003\340A\002\022=\n" + + "\006config\030\002 \001(\tB-\340A\002\372A\'\n" + + "%spanner.googleapis.com/InstanceConfig\022\031\n" + + "\014display_name\030\003 \001(\tB\003\340A\002\022\022\n\n" + + "node_count\030\005 \001(\005\022\030\n" + + "\020processing_units\030\t \001(\005\022_\n" + + "\030replica_compute_capacity\030\023" + + " \003(\01328.google.spanner.admin.instance.v1.ReplicaComputeCapacityB\003\340A\003\022T\n" + + "\022autoscaling_config\030\021 \001(\01323.google.spanner.a" + + "dmin.instance.v1.AutoscalingConfigB\003\340A\001\022D\n" + + "\005state\030\006" + + " \001(\01620.google.spanner.admin.instance.v1.Instance.StateB\003\340A\003\022F\n" + + "\006labels\030\007" + + " \003(\01326.google.spanner.admin.instance.v1.Instance.LabelsEntry\022N\n\r" + + "instance_type\030\n" + + " \001(\01627.google.spanner.admin.instance.v1.Instance.InstanceType\022\025\n\r" + + "endpoint_uris\030\010 \003(\t\0224\n" + + "\013create_time\030\013 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\0224\n" + + "\013update_time\030\014 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022V\n" + + "\026free_instance_metadata\030\r" + + " \001(\01326.google.spanner.admin.instance.v1.FreeInstanceMetadata\022H\n" + + "\007edition\030\024" + + " \001(\01622.google.spanner.admin.instance.v1.Instance.EditionB\003\340A\001\022o\n" + + "\034default_backup_schedule_type\030\027 \001(\0162D.googl" + + "e.spanner.admin.instance.v1.Instance.DefaultBackupScheduleTypeB\003\340A\001\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"7\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\014\n" + + "\010CREATING\020\001\022\t\n" + + "\005READY\020\002\"Q\n" + + "\014InstanceType\022\035\n" + + "\031INSTANCE_TYPE_UNSPECIFIED\020\000\022\017\n" + + "\013PROVISIONED\020\001\022\021\n\r" + + "FREE_INSTANCE\020\002\"U\n" + + "\007Edition\022\027\n" + + "\023EDITION_UNSPECIFIED\020\000\022\014\n" + + "\010STANDARD\020\001\022\016\n\n" + + "ENTERPRISE\020\002\022\023\n" + + "\017ENTERPRISE_PLUS\020\003\"b\n" + + "\031DefaultBackupScheduleType\022,\n" + + "(DEFAULT_BACKUP_SCHEDULE_TYPE_UNSPECIFIED\020\000\022\010\n" + + "\004NONE\020\001\022\r\n" + + "\tAUTOMATIC\020\002:b\352A_\n" + + "\037spanner.googleapis.com/Instance\022\'projects/{project}/instances/{instance}*" + + "\tinstances2\010instance\"\210\001\n" + + "\032ListInstanceConfigsRequest\022C\n" + + "\006parent\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Project\022\021\n" + + "\tpage_size\030\002 \001(\005\022\022\n\n" + + "page_token\030\003 \001(\t\"\202\001\n" + + "\033ListInstanceConfigsResponse\022J\n" + + "\020instance_configs\030\001" + + " \003(\01320.google.spanner.admin.instance.v1.InstanceConfig\022\027\n" + + "\017next_page_token\030\002 \001(\t\"W\n" + + "\030GetInstanceConfigRequest\022;\n" + + "\004name\030\001 \001(\tB-\340A\002\372A\'\n" + + "%spanner.googleapis.com/InstanceConfig\"\352\001\n" + + "\033CreateInstanceConfigRequest\022C\n" + + "\006parent\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Project\022\037\n" + + "\022instance_config_id\030\002 \001(\tB\003\340A\002\022N\n" + + "\017instance_config\030\003" + + " \001(\01320.google.spanner.admin.instance.v1.InstanceConfigB\003\340A\002\022\025\n\r" + + "validate_only\030\004 \001(\010\"\272\001\n" + + "\033UpdateInstanceConfigRequest\022N\n" + + "\017instance_config\030\001 \001(\01320.g" + + "oogle.spanner.admin.instance.v1.InstanceConfigB\003\340A\002\0224\n" + + "\013update_mask\030\002" + + " \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\022\025\n\r" + + "validate_only\030\003 \001(\010\"\177\n" + + "\033DeleteInstanceConfigRequest\022;\n" + + "\004name\030\001 \001(\tB-\340A\002\372A\'\n" + + "%spanner.googleapis.com/InstanceConfig\022\014\n" + + "\004etag\030\002 \001(\t\022\025\n\r" + + "validate_only\030\003 \001(\010\"\241\001\n" + + "#ListInstanceConfigOperationsRequest\022C\n" + + "\006parent\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Project\022\016\n" + + "\006filter\030\002 \001(\t\022\021\n" + + "\tpage_size\030\003 \001(\005\022\022\n\n" + + "page_token\030\004 \001(\t\"r\n" + + "$ListInstanceConfigOperationsResponse\0221\n\n" + + "operations\030\001 \003(\0132\035.google.longrunning.Operation\022\027\n" + + "\017next_page_token\030\002 \001(\t\"{\n" + + "\022GetInstanceRequest\0225\n" + + "\004name\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Instance\022.\n\n" + + "field_mask\030\002 \001(\0132\032.google.protobuf.FieldMask\"\271\001\n" + + "\025CreateInstanceRequest\022C\n" + + "\006parent\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Project\022\030\n" + + "\013instance_id\030\002 \001(\tB\003\340A\002\022A\n" + + "\010instance\030\003 \001(" + + "\0132*.google.spanner.admin.instance.v1.InstanceB\003\340A\002\"\311\001\n" + + "\024ListInstancesRequest\022C\n" + + "\006parent\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Project\022\021\n" + + "\tpage_size\030\002 \001(\005\022\022\n\n" + + "page_token\030\003 \001(\t\022\016\n" + + "\006filter\030\004 \001(\t\0225\n" + + "\021instance_deadline\030\005 \001(\0132\032.google.protobuf.Timestamp\"\204\001\n" + + "\025ListInstancesResponse\022=\n" + + "\tinstances\030\001 \003(\0132*.google.spanner.admin.instance.v1.Instance\022\027\n" + + "\017next_page_token\030\002 \001(\t\022\023\n" + + "\013unreachable\030\003 \003(\t\"\217\001\n" + + "\025UpdateInstanceRequest\022A\n" + + "\010instance\030\001 \001(\0132*.goog" + + "le.spanner.admin.instance.v1.InstanceB\003\340A\002\0223\n\n" + + "field_mask\030\002 \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\"N\n" + + "\025DeleteInstanceRequest\0225\n" + + "\004name\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Instance\"\277\002\n" + + "\026CreateInstanceMetadata\022<\n" + + "\010instance\030\001 \001(\0132*.google.spanner.admin.instance.v1.Instance\022.\n\n" + + "start_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022/\n" + + "\013cancel_time\030\003 \001(\0132\032.google.protobuf.Timestamp\022,\n" + + "\010end_time\030\004 \001(\0132\032.google.protobuf.Timestamp\022X\n" + + "\033expected_fulfillment_period\030\005" + + " \001(\01623.google.spanner.admin.instance.v1.FulfillmentPeriod\"\277\002\n" + + "\026UpdateInstanceMetadata\022<\n" + + "\010instance\030\001 \001(\0132*.google.spanner.admin.instance.v1.Instance\022.\n\n" + + "start_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022/\n" + + "\013cancel_time\030\003 \001(\0132\032.google.protobuf.Timestamp\022,\n" + + "\010end_time\030\004 \001(\0132\032.google.protobuf.Timestamp\022X\n" + + "\033expected_fulfillment_period\030\005" + + " \001(\01623.google.spanner.admin.instance.v1.FulfillmentPeriod\"\316\002\n" + + "\024FreeInstanceMetadata\0224\n" + + "\013expire_time\030\001 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\0225\n" + + "\014upgrade_time\030\002 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022^\n" + + "\017expire_behavior\030\003 \001(\0162E.google.spanner.admi" + + "n.instance.v1.FreeInstanceMetadata.ExpireBehavior\"i\n" + + "\016ExpireBehavior\022\037\n" + + "\033EXPIRE_BEHAVIOR_UNSPECIFIED\020\000\022\027\n" + + "\023FREE_TO_PROVISIONED\020\001\022\035\n" + + "\031REMOVE_AFTER_GRACE_PERIOD\020\002\"\341\001\n" + + "\034CreateInstanceConfigMetadata\022I\n" + + "\017instance_config\030\001" + + " \001(\01320.google.spanner.admin.instance.v1.InstanceConfig\022E\n" + + "\010progress\030\002 \001" + + "(\01323.google.spanner.admin.instance.v1.OperationProgress\022/\n" + + "\013cancel_time\030\003 \001(\0132\032.google.protobuf.Timestamp\"\341\001\n" + + "\034UpdateInstanceConfigMetadata\022I\n" + + "\017instance_config\030\001 \001" + + "(\01320.google.spanner.admin.instance.v1.InstanceConfig\022E\n" + + "\010progress\030\002 \001(\01323.google." + + "spanner.admin.instance.v1.OperationProgress\022/\n" + + "\013cancel_time\030\003 \001(\0132\032.google.protobuf.Timestamp\"\217\006\n" + + "\021InstancePartition\022\021\n" + + "\004name\030\001 \001(\tB\003\340A\002\022=\n" + + "\006config\030\002 \001(\tB-\340A\002\372A\'\n" + + "%spanner.googleapis.com/InstanceConfig\022\031\n" + + "\014display_name\030\003 \001(\tB\003\340A\002\022\024\n\n" + + "node_count\030\005 \001(\005H\000\022\032\n" + + "\020processing_units\030\006 \001(\005H\000\022T\n" + + "\022autoscaling_config\030\r" + + " \001(\01323.google.spanner.admin.instance.v1.AutoscalingConfigB\003\340A\001\022M\n" + + "\005state\030\007 \001(\01629.google.spanner.admin.in" + + "stance.v1.InstancePartition.StateB\003\340A\003\0224\n" + + "\013create_time\030\010 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\0224\n" + + "\013update_time\030\t \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022\"\n" + + "\025referencing_databases\030\n" + + " \003(\tB\003\340A\003\022\"\n" + + "\023referencing_backups\030\013 \003(\tB\005\030\001\340A\003\022\014\n" + + "\004etag\030\014 \001(\t\"7\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\014\n" + + "\010CREATING\020\001\022\t\n" + + "\005READY\020\002:\246\001\352A\242\001\n" + + "(spanner.googleapis.com/InstancePartition\022Oprojects/{project}/i" + + "nstances/{instance}/instancePartitions/{" + + "instance_partition}*\022instancePartitions2\021instancePartitionB\022\n" + + "\020compute_capacity\"\201\002\n" + + "\037CreateInstancePartitionMetadata\022O\n" + + "\022instance_partition\030\001" + + " \001(\01323.google.spanner.admin.instance.v1.InstancePartition\022.\n\n" + + "start_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022/\n" + + "\013cancel_time\030\003 \001(\0132\032.google.protobuf.Timestamp\022,\n" + + "\010end_time\030\004 \001(\0132\032.google.protobuf.Timestamp\"\323\001\n" + + "\036CreateInstancePartitionRequest\0227\n" + + "\006parent\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Instance\022\"\n" + + "\025instance_partition_id\030\002 \001(\tB\003\340A\002\022T\n" + + "\022instance_partition\030\003" + + " \001(\01323.google.spanner.admin.instance.v1.InstancePartitionB\003\340A\002\"n\n" + + "\036DeleteInstancePartitionRequest\022>\n" + + "\004name\030\001 \001(\tB0\340A\002\372A*\n" + + "(spanner.googleapis.com/InstancePartition\022\014\n" + + "\004etag\030\002 \001(\t\"]\n" + + "\033GetInstancePartitionRequest\022>\n" + + "\004name\030\001 \001(\tB0\340A\002\372A*\n" + + "(spanner.googleapis.com/InstancePartition\"\253\001\n" + + "\036UpdateInstancePartitionRequest\022T\n" + + "\022instance_partition\030\001 \001(\01323.google.spanner." + + "admin.instance.v1.InstancePartitionB\003\340A\002\0223\n\n" + + "field_mask\030\002 \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\"\201\002\n" + + "\037UpdateInstancePartitionMetadata\022O\n" + + "\022instance_partition\030\001 \001(\01323." + + "google.spanner.admin.instance.v1.InstancePartition\022.\n\n" + + "start_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022/\n" + + "\013cancel_time\030\003 \001(\0132\032.google.protobuf.Timestamp\022,\n" + + "\010end_time\030\004 \001(\0132\032.google.protobuf.Timestamp\"\305\001\n" + + "\035ListInstancePartitionsRequest\0227\n" + + "\006parent\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Instance\022\021\n" + + "\tpage_size\030\002 \001(\005\022\022\n\n" + + "page_token\030\003 \001(\t\022D\n" + + "\033instance_partition_deadline\030\004" + + " \001(\0132\032.google.protobuf.TimestampB\003\340A\001\"\240\001\n" + + "\036ListInstancePartitionsResponse\022P\n" + + "\023instance_partitions\030\001" + + " \003(\01323.google.spanner.admin.instance.v1.InstancePartition\022\027\n" + + "\017next_page_token\030\002 \001(\t\022\023\n" + + "\013unreachable\030\003 \003(\t\"\355\001\n" + + "&ListInstancePartitionOperationsRequest\0227\n" + + "\006parent\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Instance\022\023\n" + + "\006filter\030\002 \001(\tB\003\340A\001\022\026\n" + + "\tpage_size\030\003 \001(\005B\003\340A\001\022\027\n\n" + + "page_token\030\004 \001(\tB\003\340A\001\022D\n" + + "\033instance_partition_deadline\030\005" + + " \001(\0132\032.google.protobuf.TimestampB\003\340A\001\"\236\001\n" + + "\'ListInstancePartitionOperationsResponse\0221\n\n" + + "operations\030\001 \003(\0132\035.google.longrunning.Operation\022\027\n" + + "\017next_page_token\030\002 \001(\t\022\'\n" + + "\037unreachable_instance_partitions\030\003 \003(\t\"\222\001\n" + + "\023MoveInstanceRequest\0225\n" + + "\004name\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Instance\022D\n\r" + + "target_config\030\002 \001(\tB-\340A\002\372A\'\n" + + "%spanner.googleapis.com/InstanceConfig\"\026\n" + + "\024MoveInstanceResponse\"\245\001\n" + + "\024MoveInstanceMetadata\022\025\n\r" + + "target_config\030\001 \001(\t\022E\n" + + "\010progress\030\002 \001(\01323.g" + + "oogle.spanner.admin.instance.v1.OperationProgress\022/\n" + + "\013cancel_time\030\003 \001(\0132\032.google.protobuf.Timestamp2\332\'\n\r" + + "InstanceAdmin\022\314\001\n" + + "\023ListInstanceConfigs\022<.google.spanner.admin.instance.v1.ListInstanceConfigsReque" + + "st\032=.google.spanner.admin.instance.v1.Li" + + "stInstanceConfigsResponse\"8\332A\006parent\202\323\344\223" + + "\002)\022\'/v1/{parent=projects/*}/instanceConfigs\022\271\001\n" + + "\021GetInstanceConfig\022:.google.spanner.admin.instance.v1.GetInstanceConfigRe" + + "quest\0320.google.spanner.admin.instance.v1" + + ".InstanceConfig\"6\332A\004name\202\323\344\223\002)\022\'/v1/{name=projects/*/instanceConfigs/*}\022\310\002\n" + + "\024CreateInstanceConfig\022=.google.spanner.admin." + + "instance.v1.CreateInstanceConfigRequest\032\035.google.longrunning.Operation\"\321\001\312Ap\n" + + "/google.spanner.admin.instance.v1.InstanceConfig\022=google.spanner.admin.instance.v1." + + "CreateInstanceConfigMetadata\332A)parent,in" + + "stance_config,instance_config_id\202\323\344\223\002,\"\'" + + "/v1/{parent=projects/*}/instanceConfigs:\001*\022\312\002\n" + + "\024UpdateInstanceConfig\022=.google.spanner.admin.instance.v1.UpdateInstanceCon" + + "figRequest\032\035.google.longrunning.Operation\"\323\001\312Ap\n" + + "/google.spanner.admin.instance.v1.InstanceConfig\022=google.spanner.admin.i" + + "nstance.v1.UpdateInstanceConfigMetadata\332" + + "A\033instance_config,update_mask\202\323\344\223\002<27/v1" + + "/{instance_config.name=projects/*/instanceConfigs/*}:\001*\022\245\001\n" + + "\024DeleteInstanceConfig\022=.google.spanner.admin.instance.v1.Dele" + + "teInstanceConfigRequest\032\026.google.protobu" + + "f.Empty\"6\332A\004name\202\323\344\223\002)*\'/v1/{name=projects/*/instanceConfigs/*}\022\360\001\n" + + "\034ListInstanceConfigOperations\022E.google.spanner.admin." + + "instance.v1.ListInstanceConfigOperationsRequest\032F.google.spanner.admin.instance." + + "v1.ListInstanceConfigOperationsResponse\"" + + "A\332A\006parent\202\323\344\223\0022\0220/v1/{parent=projects/*}/instanceConfigOperations\022\264\001\n\r" + + "ListInstances\0226.google.spanner.admin.instance.v1." + + "ListInstancesRequest\0327.google.spanner.ad" + + "min.instance.v1.ListInstancesResponse\"2\332" + + "A\006parent\202\323\344\223\002#\022!/v1/{parent=projects/*}/instances\022\344\001\n" + + "\026ListInstancePartitions\022?.google.spanner.admin.instance.v1.ListInst" + + "ancePartitionsRequest\032@.google.spanner.admin.instance.v1.ListInstancePartitionsR" + + "esponse\"G\332A\006parent\202\323\344\223\0028\0226/v1/{parent=pr" + + "ojects/*/instances/*}/instancePartitions\022\241\001\n" + + "\013GetInstance\0224.google.spanner.admin.instance.v1.GetInstanceRequest\032*.google." + + "spanner.admin.instance.v1.Instance\"0\332A\004n" + + "ame\202\323\344\223\002#\022!/v1/{name=projects/*/instances/*}\022\234\002\n" + + "\016CreateInstance\0227.google.spanner" + + ".admin.instance.v1.CreateInstanceRequest\032\035.google.longrunning.Operation\"\261\001\312Ad\n" + + ")google.spanner.admin.instance.v1.Instance\0227google.spanner.admin.instance.v1.Creat" + + "eInstanceMetadata\332A\033parent,instance_id,i" + + "nstance\202\323\344\223\002&\"!/v1/{parent=projects/*}/instances:\001*\022\235\002\n" + + "\016UpdateInstance\0227.google.spanner.admin.instance.v1.UpdateInstance" + + "Request\032\035.google.longrunning.Operation\"\262\001\312Ad\n" + + ")google.spanner.admin.instance.v1.Instance\0227google.spanner.admin.instance.v" + + "1.UpdateInstanceMetadata\332A\023instance,fiel" + + "d_mask\202\323\344\223\002/2*/v1/{instance.name=projects/*/instances/*}:\001*\022\223\001\n" + + "\016DeleteInstance\0227.google.spanner.admin.instance.v1.Delete" + + "InstanceRequest\032\026.google.protobuf.Empty\"" + + "0\332A\004name\202\323\344\223\002#*!/v1/{name=projects/*/instances/*}\022\232\001\n" + + "\014SetIamPolicy\022\".google.iam.v1.SetIamPolicyRequest\032\025.google.iam.v1.P" + + "olicy\"O\332A\017resource,policy\202\323\344\223\0027\"2/v1/{re" + + "source=projects/*/instances/*}:setIamPolicy:\001*\022\223\001\n" + + "\014GetIamPolicy\022\".google.iam.v1.GetIamPolicyRequest\032\025.google.iam.v1.Poli" + + "cy\"H\332A\010resource\202\323\344\223\0027\"2/v1/{resource=projects/*/instances/*}:getIamPolicy:\001*\022\305\001\n" + + "\022TestIamPermissions\022(.google.iam.v1.Test" + + "IamPermissionsRequest\032).google.iam.v1.Te" + + "stIamPermissionsResponse\"Z\332A\024resource,pe" + + "rmissions\202\323\344\223\002=\"8/v1/{resource=projects/*/instances/*}:testIamPermissions:\001*\022\321\001\n" + + "\024GetInstancePartition\022=.google.spanner.admin.instance.v1.GetInstancePartitionReq" + + "uest\0323.google.spanner.admin.instance.v1." + + "InstancePartition\"E\332A\004name\202\323\344\223\0028\0226/v1/{n" + + "ame=projects/*/instances/*/instancePartitions/*}\022\351\002\n" + + "\027CreateInstancePartition\022@.google.spanner.admin.instance.v1.CreateIn" + + "stancePartitionRequest\032\035.google.longrunning.Operation\"\354\001\312Av\n" + + "2google.spanner.admin.instance.v1.InstancePartition\022@google." + + "spanner.admin.instance.v1.CreateInstancePartitionMetadata\332A/parent,instance_part" + + "ition,instance_partition_id\202\323\344\223\002;\"6/v1/{" + + "parent=projects/*/instances/*}/instancePartitions:\001*\022\272\001\n" + + "\027DeleteInstancePartition\022@.google.spanner.admin.instance.v1.Dele" + + "teInstancePartitionRequest\032\026.google.prot" + + "obuf.Empty\"E\332A\004name\202\323\344\223\0028*6/v1/{name=pro" + + "jects/*/instances/*/instancePartitions/*}\022\352\002\n" + + "\027UpdateInstancePartition\022@.google.spanner.admin.instance.v1.UpdateInstanceP" + + "artitionRequest\032\035.google.longrunning.Operation\"\355\001\312Av\n" + + "2google.spanner.admin.instance.v1.InstancePartition\022@google.spanner" + + ".admin.instance.v1.UpdateInstancePartitionMetadata\332A\035instance_partition,field_ma" + + "sk\202\323\344\223\002N2I/v1/{instance_partition.name=p" + + "rojects/*/instances/*/instancePartitions/*}:\001*\022\210\002\n" + + "\037ListInstancePartitionOperations\022H.google.spanner.admin.instance.v1.Li" + + "stInstancePartitionOperationsRequest\032I.g", + "oogle.spanner.admin.instance.v1.ListInst" + + "ancePartitionOperationsResponse\"P\332A\006pare" + + "nt\202\323\344\223\002A\022?/v1/{parent=projects/*/instanc" + + "es/*}/instancePartitionOperations\022\211\002\n\014Mo" + + "veInstance\0225.google.spanner.admin.instan" + + "ce.v1.MoveInstanceRequest\032\035.google.longr" + + "unning.Operation\"\242\001\312An\n5google.spanner.a" + + "dmin.instance.v1.MoveInstanceResponse\0225g" + + "oogle.spanner.admin.instance.v1.MoveInst" + + "anceMetadata\202\323\344\223\002+\"&/v1/{name=projects/*" + + "/instances/*}:move:\001*\032x\312A\026spanner.google" + + "apis.com\322A\\https://www.googleapis.com/au" + + "th/cloud-platform,https://www.googleapis" + + ".com/auth/spanner.adminB\213\002\n$com.google.s" + + "panner.admin.instance.v1B\031SpannerInstanc" + + "eAdminProtoP\001ZFcloud.google.com/go/spann" + + "er/admin/instance/apiv1/instancepb;insta" + + "ncepb\252\002&Google.Cloud.Spanner.Admin.Insta" + + "nce.V1\312\002&Google\\Cloud\\Spanner\\Admin\\Inst" + + "ance\\V1\352\002+Google::Cloud::Spanner::Admin:" + + ":Instance::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -612,17 +692,17 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.spanner.admin.instance.v1.CommonProto.getDescriptor(), }); internal_static_google_spanner_admin_instance_v1_ReplicaInfo_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_admin_instance_v1_ReplicaInfo_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ReplicaInfo_descriptor, new java.lang.String[] { "Location", "Type", "DefaultLeaderLocation", }); internal_static_google_spanner_admin_instance_v1_InstanceConfig_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_admin_instance_v1_InstanceConfig_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_InstanceConfig_descriptor, new java.lang.String[] { "Name", @@ -636,39 +716,39 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "LeaderOptions", "Reconciling", "State", + "FreeInstanceAvailability", + "QuorumType", + "StorageLimitPerProcessingUnit", }); internal_static_google_spanner_admin_instance_v1_InstanceConfig_LabelsEntry_descriptor = - internal_static_google_spanner_admin_instance_v1_InstanceConfig_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_admin_instance_v1_InstanceConfig_descriptor.getNestedType(0); internal_static_google_spanner_admin_instance_v1_InstanceConfig_LabelsEntry_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_InstanceConfig_LabelsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ReplicaComputeCapacity_descriptor, new java.lang.String[] { "ReplicaSelection", "NodeCount", "ProcessingUnits", "ComputeCapacity", }); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageType(3); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor, new java.lang.String[] { "AutoscalingLimits", "AutoscalingTargets", "AsymmetricAutoscalingOptions", }); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_descriptor = - internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor.getNestedType( + 0); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingLimits_descriptor, new java.lang.String[] { "MinNodes", @@ -679,39 +759,42 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "MaxLimit", }); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_descriptor = - internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor - .getNestedTypes() - .get(1); + internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor.getNestedType( + 1); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AutoscalingTargets_descriptor, new java.lang.String[] { - "HighPriorityCpuUtilizationPercent", "StorageUtilizationPercent", + "HighPriorityCpuUtilizationPercent", + "TotalCpuUtilizationPercent", + "StorageUtilizationPercent", }); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_descriptor = - internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor - .getNestedTypes() - .get(2); + internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_descriptor.getNestedType( + 2); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_descriptor, new java.lang.String[] { "ReplicaSelection", "Overrides", }); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_descriptor = internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_descriptor - .getNestedTypes() - .get(0); + .getNestedType(0); internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_AutoscalingConfig_AsymmetricAutoscalingOption_AutoscalingConfigOverrides_descriptor, new java.lang.String[] { - "AutoscalingLimits", "AutoscalingTargetHighPriorityCpuUtilizationPercent", + "AutoscalingLimits", + "AutoscalingTargetHighPriorityCpuUtilizationPercent", + "AutoscalingTargetTotalCpuUtilizationPercent", + "DisableHighPriorityCpuAutoscaling", + "DisableTotalCpuAutoscaling", }); internal_static_google_spanner_admin_instance_v1_Instance_descriptor = - getDescriptor().getMessageTypes().get(4); + getDescriptor().getMessageType(4); internal_static_google_spanner_admin_instance_v1_Instance_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_Instance_descriptor, new java.lang.String[] { "Name", @@ -723,170 +806,178 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "AutoscalingConfig", "State", "Labels", + "InstanceType", "EndpointUris", "CreateTime", "UpdateTime", + "FreeInstanceMetadata", "Edition", "DefaultBackupScheduleType", }); internal_static_google_spanner_admin_instance_v1_Instance_LabelsEntry_descriptor = - internal_static_google_spanner_admin_instance_v1_Instance_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_admin_instance_v1_Instance_descriptor.getNestedType(0); internal_static_google_spanner_admin_instance_v1_Instance_LabelsEntry_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_Instance_LabelsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_descriptor = - getDescriptor().getMessageTypes().get(5); + getDescriptor().getMessageType(5); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_descriptor, new java.lang.String[] { "Parent", "PageSize", "PageToken", }); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_descriptor = - getDescriptor().getMessageTypes().get(6); + getDescriptor().getMessageType(6); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_descriptor, new java.lang.String[] { "InstanceConfigs", "NextPageToken", }); internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_descriptor = - getDescriptor().getMessageTypes().get(7); + getDescriptor().getMessageType(7); internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageType(8); internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_descriptor, new java.lang.String[] { "Parent", "InstanceConfigId", "InstanceConfig", "ValidateOnly", }); internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_descriptor = - getDescriptor().getMessageTypes().get(9); + getDescriptor().getMessageType(9); internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_descriptor, new java.lang.String[] { "InstanceConfig", "UpdateMask", "ValidateOnly", }); internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_descriptor = - getDescriptor().getMessageTypes().get(10); + getDescriptor().getMessageType(10); internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_descriptor, new java.lang.String[] { "Name", "Etag", "ValidateOnly", }); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_descriptor = - getDescriptor().getMessageTypes().get(11); + getDescriptor().getMessageType(11); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_descriptor, new java.lang.String[] { "Parent", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageType(12); internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_descriptor, new java.lang.String[] { "Operations", "NextPageToken", }); internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_descriptor = - getDescriptor().getMessageTypes().get(13); + getDescriptor().getMessageType(13); internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_descriptor, new java.lang.String[] { "Name", "FieldMask", }); internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_descriptor = - getDescriptor().getMessageTypes().get(14); + getDescriptor().getMessageType(14); internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_descriptor, new java.lang.String[] { "Parent", "InstanceId", "Instance", }); internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_descriptor = - getDescriptor().getMessageTypes().get(15); + getDescriptor().getMessageType(15); internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_descriptor, new java.lang.String[] { "Parent", "PageSize", "PageToken", "Filter", "InstanceDeadline", }); internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_descriptor = - getDescriptor().getMessageTypes().get(16); + getDescriptor().getMessageType(16); internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_descriptor, new java.lang.String[] { "Instances", "NextPageToken", "Unreachable", }); internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_descriptor = - getDescriptor().getMessageTypes().get(17); + getDescriptor().getMessageType(17); internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_descriptor, new java.lang.String[] { "Instance", "FieldMask", }); internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_descriptor = - getDescriptor().getMessageTypes().get(18); + getDescriptor().getMessageType(18); internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_descriptor = - getDescriptor().getMessageTypes().get(19); + getDescriptor().getMessageType(19); internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_descriptor, new java.lang.String[] { "Instance", "StartTime", "CancelTime", "EndTime", "ExpectedFulfillmentPeriod", }); internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor = - getDescriptor().getMessageTypes().get(20); + getDescriptor().getMessageType(20); internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor, new java.lang.String[] { "Instance", "StartTime", "CancelTime", "EndTime", "ExpectedFulfillmentPeriod", }); + internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_descriptor = + getDescriptor().getMessageType(21); + internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_admin_instance_v1_FreeInstanceMetadata_descriptor, + new java.lang.String[] { + "ExpireTime", "UpgradeTime", "ExpireBehavior", + }); internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_descriptor = - getDescriptor().getMessageTypes().get(21); + getDescriptor().getMessageType(22); internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_descriptor, new java.lang.String[] { "InstanceConfig", "Progress", "CancelTime", }); internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_descriptor = - getDescriptor().getMessageTypes().get(22); + getDescriptor().getMessageType(23); internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_descriptor, new java.lang.String[] { "InstanceConfig", "Progress", "CancelTime", }); internal_static_google_spanner_admin_instance_v1_InstancePartition_descriptor = - getDescriptor().getMessageTypes().get(23); + getDescriptor().getMessageType(24); internal_static_google_spanner_admin_instance_v1_InstancePartition_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_InstancePartition_descriptor, new java.lang.String[] { "Name", @@ -894,6 +985,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "DisplayName", "NodeCount", "ProcessingUnits", + "AutoscalingConfig", "State", "CreateTime", "UpdateTime", @@ -903,107 +995,119 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ComputeCapacity", }); internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_descriptor = - getDescriptor().getMessageTypes().get(24); + getDescriptor().getMessageType(25); internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionMetadata_descriptor, new java.lang.String[] { "InstancePartition", "StartTime", "CancelTime", "EndTime", }); internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_descriptor = - getDescriptor().getMessageTypes().get(25); + getDescriptor().getMessageType(26); internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_CreateInstancePartitionRequest_descriptor, new java.lang.String[] { "Parent", "InstancePartitionId", "InstancePartition", }); internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_descriptor = - getDescriptor().getMessageTypes().get(26); + getDescriptor().getMessageType(27); internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_DeleteInstancePartitionRequest_descriptor, new java.lang.String[] { "Name", "Etag", }); internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_descriptor = - getDescriptor().getMessageTypes().get(27); + getDescriptor().getMessageType(28); internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_GetInstancePartitionRequest_descriptor, new java.lang.String[] { "Name", }); internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_descriptor = - getDescriptor().getMessageTypes().get(28); + getDescriptor().getMessageType(29); internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_descriptor, new java.lang.String[] { "InstancePartition", "FieldMask", }); internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_descriptor = - getDescriptor().getMessageTypes().get(29); + getDescriptor().getMessageType(30); internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_descriptor, new java.lang.String[] { "InstancePartition", "StartTime", "CancelTime", "EndTime", }); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_descriptor = - getDescriptor().getMessageTypes().get(30); + getDescriptor().getMessageType(31); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsRequest_descriptor, new java.lang.String[] { "Parent", "PageSize", "PageToken", "InstancePartitionDeadline", }); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_descriptor = - getDescriptor().getMessageTypes().get(31); + getDescriptor().getMessageType(32); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstancePartitionsResponse_descriptor, new java.lang.String[] { "InstancePartitions", "NextPageToken", "Unreachable", }); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_descriptor = - getDescriptor().getMessageTypes().get(32); + getDescriptor().getMessageType(33); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsRequest_descriptor, new java.lang.String[] { "Parent", "Filter", "PageSize", "PageToken", "InstancePartitionDeadline", }); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_descriptor = - getDescriptor().getMessageTypes().get(33); + getDescriptor().getMessageType(34); internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_ListInstancePartitionOperationsResponse_descriptor, new java.lang.String[] { "Operations", "NextPageToken", "UnreachableInstancePartitions", }); internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_descriptor = - getDescriptor().getMessageTypes().get(34); + getDescriptor().getMessageType(35); internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_MoveInstanceRequest_descriptor, new java.lang.String[] { "Name", "TargetConfig", }); internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_descriptor = - getDescriptor().getMessageTypes().get(35); + getDescriptor().getMessageType(36); internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_MoveInstanceResponse_descriptor, new java.lang.String[] {}); internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_descriptor = - getDescriptor().getMessageTypes().get(36); + getDescriptor().getMessageType(37); internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_MoveInstanceMetadata_descriptor, new java.lang.String[] { "TargetConfig", "Progress", "CancelTime", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.AnnotationsProto.getDescriptor(); + com.google.api.ClientProto.getDescriptor(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.api.ResourceProto.getDescriptor(); + com.google.iam.v1.IamPolicyProto.getDescriptor(); + com.google.iam.v1.PolicyProto.getDescriptor(); + com.google.longrunning.OperationsProto.getDescriptor(); + com.google.protobuf.EmptyProto.getDescriptor(); + com.google.protobuf.FieldMaskProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.spanner.admin.instance.v1.CommonProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.ClientProto.defaultHost); @@ -1016,17 +1120,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { registry.add(com.google.longrunning.OperationsProto.operationInfo); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.AnnotationsProto.getDescriptor(); - com.google.api.ClientProto.getDescriptor(); - com.google.api.FieldBehaviorProto.getDescriptor(); - com.google.api.ResourceProto.getDescriptor(); - com.google.iam.v1.IamPolicyProto.getDescriptor(); - com.google.iam.v1.PolicyProto.getDescriptor(); - com.google.longrunning.OperationsProto.getDescriptor(); - com.google.protobuf.EmptyProto.getDescriptor(); - com.google.protobuf.FieldMaskProto.getDescriptor(); - com.google.protobuf.TimestampProto.getDescriptor(); - com.google.spanner.admin.instance.v1.CommonProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java index b2f0e3dc762..f090b3a2126 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata} */ -public final class UpdateInstanceConfigMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateInstanceConfigMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata) UpdateInstanceConfigMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateInstanceConfigMetadata"); + } + // Use UpdateInstanceConfigMetadata.newBuilder() to construct. - private UpdateInstanceConfigMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateInstanceConfigMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateInstanceConfigMetadata() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateInstanceConfigMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_CONFIG_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; + /** * * @@ -80,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -97,6 +106,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { ? com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance() : instanceConfig_; } + /** * * @@ -115,6 +125,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC public static final int PROGRESS_FIELD_NUMBER = 2; private com.google.spanner.admin.instance.v1.OperationProgress progress_; + /** * * @@ -132,6 +143,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -151,6 +163,7 @@ public com.google.spanner.admin.instance.v1.OperationProgress getProgress() { ? com.google.spanner.admin.instance.v1.OperationProgress.getDefaultInstance() : progress_; } + /** * * @@ -171,6 +184,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -186,6 +200,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -201,6 +216,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -349,39 +365,39 @@ public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -405,10 +421,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -419,7 +436,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata) com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadataOrBuilder { @@ -429,7 +446,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_fieldAccessorTable @@ -444,16 +461,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceConfigFieldBuilder(); - getProgressFieldBuilder(); - getCancelTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceConfigFieldBuilder(); + internalGetProgressFieldBuilder(); + internalGetCancelTimeFieldBuilder(); } } @@ -531,39 +548,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata) { @@ -616,19 +600,22 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetProgressFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -652,11 +639,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> instanceConfigBuilder_; + /** * * @@ -671,6 +659,7 @@ public Builder mergeFrom( public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -691,6 +680,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { return instanceConfigBuilder_.getMessage(); } } + /** * * @@ -713,6 +703,7 @@ public Builder setInstanceConfig(com.google.spanner.admin.instance.v1.InstanceCo onChanged(); return this; } + /** * * @@ -733,6 +724,7 @@ public Builder setInstanceConfig( onChanged(); return this; } + /** * * @@ -761,6 +753,7 @@ public Builder mergeInstanceConfig(com.google.spanner.admin.instance.v1.Instance } return this; } + /** * * @@ -780,6 +773,7 @@ public Builder clearInstanceConfig() { onChanged(); return this; } + /** * * @@ -792,8 +786,9 @@ public Builder clearInstanceConfig() { public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceConfigBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstanceConfigFieldBuilder().getBuilder(); + return internalGetInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -813,6 +808,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo : instanceConfig_; } } + /** * * @@ -822,14 +818,14 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo * * .google.spanner.admin.instance.v1.InstanceConfig instance_config = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> - getInstanceConfigFieldBuilder() { + internalGetInstanceConfigFieldBuilder() { if (instanceConfigBuilder_ == null) { instanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder>( @@ -840,11 +836,12 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo } private com.google.spanner.admin.instance.v1.OperationProgress progress_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder> progressBuilder_; + /** * * @@ -861,6 +858,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo public boolean hasProgress() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -883,6 +881,7 @@ public com.google.spanner.admin.instance.v1.OperationProgress getProgress() { return progressBuilder_.getMessage(); } } + /** * * @@ -907,6 +906,7 @@ public Builder setProgress(com.google.spanner.admin.instance.v1.OperationProgres onChanged(); return this; } + /** * * @@ -929,6 +929,7 @@ public Builder setProgress( onChanged(); return this; } + /** * * @@ -959,6 +960,7 @@ public Builder mergeProgress(com.google.spanner.admin.instance.v1.OperationProgr } return this; } + /** * * @@ -980,6 +982,7 @@ public Builder clearProgress() { onChanged(); return this; } + /** * * @@ -994,8 +997,9 @@ public Builder clearProgress() { public com.google.spanner.admin.instance.v1.OperationProgress.Builder getProgressBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getProgressFieldBuilder().getBuilder(); + return internalGetProgressFieldBuilder().getBuilder(); } + /** * * @@ -1016,6 +1020,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre : progress_; } } + /** * * @@ -1027,14 +1032,14 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre * * .google.spanner.admin.instance.v1.OperationProgress progress = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder> - getProgressFieldBuilder() { + internalGetProgressFieldBuilder() { if (progressBuilder_ == null) { progressBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.OperationProgress, com.google.spanner.admin.instance.v1.OperationProgress.Builder, com.google.spanner.admin.instance.v1.OperationProgressOrBuilder>( @@ -1045,11 +1050,12 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1064,6 +1070,7 @@ public com.google.spanner.admin.instance.v1.OperationProgressOrBuilder getProgre public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1084,6 +1091,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1106,6 +1114,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1125,6 +1134,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1152,6 +1162,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1171,6 +1182,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1183,8 +1195,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1203,6 +1216,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1212,14 +1226,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1229,17 +1243,6 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { return cancelTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java index 912e8dafc56..ad420c9ebc3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface UpdateInstanceConfigMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata) @@ -36,6 +38,7 @@ public interface UpdateInstanceConfigMetadataOrBuilder * @return Whether the instanceConfig field is set. */ boolean hasInstanceConfig(); + /** * * @@ -48,6 +51,7 @@ public interface UpdateInstanceConfigMetadataOrBuilder * @return The instanceConfig. */ com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig(); + /** * * @@ -73,6 +77,7 @@ public interface UpdateInstanceConfigMetadataOrBuilder * @return Whether the progress field is set. */ boolean hasProgress(); + /** * * @@ -87,6 +92,7 @@ public interface UpdateInstanceConfigMetadataOrBuilder * @return The progress. */ com.google.spanner.admin.instance.v1.OperationProgress getProgress(); + /** * * @@ -112,6 +118,7 @@ public interface UpdateInstanceConfigMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -124,6 +131,7 @@ public interface UpdateInstanceConfigMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java index 116b52ef5c3..cab42fc5ea6 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -24,36 +25,42 @@ * *
                                  * The request for
                                - * [UpdateInstanceConfigRequest][InstanceAdmin.UpdateInstanceConfigRequest].
                                + * [UpdateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstanceConfig].
                                  * 
                                * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceConfigRequest} */ -public final class UpdateInstanceConfigRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateInstanceConfigRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.UpdateInstanceConfigRequest) UpdateInstanceConfigRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateInstanceConfigRequest"); + } + // Use UpdateInstanceConfigRequest.newBuilder() to construct. - private UpdateInstanceConfigRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateInstanceConfigRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateInstanceConfigRequest() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateInstanceConfigRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_CONFIG_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; + /** * * @@ -88,6 +96,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -113,6 +122,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { ? com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance() : instanceConfig_; } + /** * * @@ -139,6 +149,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC public static final int UPDATE_MASK_FIELD_NUMBER = 2; private com.google.protobuf.FieldMask updateMask_; + /** * * @@ -160,6 +171,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getInstanceC public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -181,6 +193,7 @@ public boolean hasUpdateMask() { public com.google.protobuf.FieldMask getUpdateMask() { return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; } + /** * * @@ -203,6 +216,7 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { public static final int VALIDATE_ONLY_FIELD_NUMBER = 3; private boolean validateOnly_ = false; + /** * * @@ -349,38 +363,38 @@ public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest p public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -404,21 +418,22 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                    * The request for
                                -   * [UpdateInstanceConfigRequest][InstanceAdmin.UpdateInstanceConfigRequest].
                                +   * [UpdateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstanceConfig].
                                    * 
                                * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceConfigRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.UpdateInstanceConfigRequest) com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequestOrBuilder { @@ -428,7 +443,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_fieldAccessorTable @@ -442,15 +457,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceConfigFieldBuilder(); - getUpdateMaskFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceConfigFieldBuilder(); + internalGetUpdateMaskFieldBuilder(); } } @@ -523,39 +538,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest) { @@ -608,13 +590,15 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -644,11 +628,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> instanceConfigBuilder_; + /** * * @@ -671,6 +656,7 @@ public Builder mergeFrom( public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -699,6 +685,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { return instanceConfigBuilder_.getMessage(); } } + /** * * @@ -729,6 +716,7 @@ public Builder setInstanceConfig(com.google.spanner.admin.instance.v1.InstanceCo onChanged(); return this; } + /** * * @@ -757,6 +745,7 @@ public Builder setInstanceConfig( onChanged(); return this; } + /** * * @@ -793,6 +782,7 @@ public Builder mergeInstanceConfig(com.google.spanner.admin.instance.v1.Instance } return this; } + /** * * @@ -820,6 +810,7 @@ public Builder clearInstanceConfig() { onChanged(); return this; } + /** * * @@ -840,8 +831,9 @@ public Builder clearInstanceConfig() { public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceConfigBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstanceConfigFieldBuilder().getBuilder(); + return internalGetInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -869,6 +861,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo : instanceConfig_; } } + /** * * @@ -886,14 +879,14 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo * .google.spanner.admin.instance.v1.InstanceConfig instance_config = 1 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> - getInstanceConfigFieldBuilder() { + internalGetInstanceConfigFieldBuilder() { if (instanceConfigBuilder_ == null) { instanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder>( @@ -904,11 +897,12 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo } private com.google.protobuf.FieldMask updateMask_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> updateMaskBuilder_; + /** * * @@ -929,6 +923,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo public boolean hasUpdateMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -955,6 +950,7 @@ public com.google.protobuf.FieldMask getUpdateMask() { return updateMaskBuilder_.getMessage(); } } + /** * * @@ -983,6 +979,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask value) { onChanged(); return this; } + /** * * @@ -1008,6 +1005,7 @@ public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForVal onChanged(); return this; } + /** * * @@ -1041,6 +1039,7 @@ public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { } return this; } + /** * * @@ -1066,6 +1065,7 @@ public Builder clearUpdateMask() { onChanged(); return this; } + /** * * @@ -1084,8 +1084,9 @@ public Builder clearUpdateMask() { public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getUpdateMaskFieldBuilder().getBuilder(); + return internalGetUpdateMaskFieldBuilder().getBuilder(); } + /** * * @@ -1110,6 +1111,7 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { : updateMask_; } } + /** * * @@ -1125,14 +1127,14 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> - getUpdateMaskFieldBuilder() { + internalGetUpdateMaskFieldBuilder() { if (updateMaskBuilder_ == null) { updateMaskBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder>( @@ -1143,6 +1145,7 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { } private boolean validateOnly_; + /** * * @@ -1159,6 +1162,7 @@ public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { public boolean getValidateOnly() { return validateOnly_; } + /** * * @@ -1179,6 +1183,7 @@ public Builder setValidateOnly(boolean value) { onChanged(); return this; } + /** * * @@ -1198,17 +1203,6 @@ public Builder clearValidateOnly() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.UpdateInstanceConfigRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java index 3e4e77c9fe7..bb8bc46355b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface UpdateInstanceConfigRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.UpdateInstanceConfigRequest) @@ -44,6 +46,7 @@ public interface UpdateInstanceConfigRequestOrBuilder * @return Whether the instanceConfig field is set. */ boolean hasInstanceConfig(); + /** * * @@ -64,6 +67,7 @@ public interface UpdateInstanceConfigRequestOrBuilder * @return The instanceConfig. */ com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig(); + /** * * @@ -101,6 +105,7 @@ public interface UpdateInstanceConfigRequestOrBuilder * @return Whether the updateMask field is set. */ boolean hasUpdateMask(); + /** * * @@ -119,6 +124,7 @@ public interface UpdateInstanceConfigRequestOrBuilder * @return The updateMask. */ com.google.protobuf.FieldMask getUpdateMask(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java index 48063d92821..6457f0fece4 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceMetadata} */ -public final class UpdateInstanceMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateInstanceMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.UpdateInstanceMetadata) UpdateInstanceMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateInstanceMetadata"); + } + // Use UpdateInstanceMetadata.newBuilder() to construct. - private UpdateInstanceMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateInstanceMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private UpdateInstanceMetadata() { expectedFulfillmentPeriod_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateInstanceMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.Instance instance_; + /** * * @@ -82,6 +90,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -99,6 +108,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { ? com.google.spanner.admin.instance.v1.Instance.getDefaultInstance() : instance_; } + /** * * @@ -117,6 +127,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public static final int START_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -134,6 +145,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -151,6 +163,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -169,6 +182,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -186,6 +200,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -203,6 +218,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -221,6 +237,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -236,6 +253,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -251,6 +269,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -267,6 +286,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public static final int EXPECTED_FULFILLMENT_PERIOD_FIELD_NUMBER = 5; private int expectedFulfillmentPeriod_ = 0; + /** * * @@ -283,6 +303,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public int getExpectedFulfillmentPeriodValue() { return expectedFulfillmentPeriod_; } + /** * * @@ -466,38 +487,38 @@ public static com.google.spanner.admin.instance.v1.UpdateInstanceMetadata parseF public static com.google.spanner.admin.instance.v1.UpdateInstanceMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -521,10 +542,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -535,7 +557,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.UpdateInstanceMetadata) com.google.spanner.admin.instance.v1.UpdateInstanceMetadataOrBuilder { @@ -545,7 +567,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_fieldAccessorTable @@ -559,17 +581,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceFieldBuilder(); - getStartTimeFieldBuilder(); - getCancelTimeFieldBuilder(); - getEndTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceFieldBuilder(); + internalGetStartTimeFieldBuilder(); + internalGetCancelTimeFieldBuilder(); + internalGetEndTimeFieldBuilder(); } } @@ -657,39 +679,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.UpdateInstanceMe result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.UpdateInstanceMetadata) { @@ -746,25 +735,28 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getInstanceFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -794,11 +786,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.Instance instance_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> instanceBuilder_; + /** * * @@ -813,6 +806,7 @@ public Builder mergeFrom( public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -833,6 +827,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { return instanceBuilder_.getMessage(); } } + /** * * @@ -855,6 +850,7 @@ public Builder setInstance(com.google.spanner.admin.instance.v1.Instance value) onChanged(); return this; } + /** * * @@ -875,6 +871,7 @@ public Builder setInstance( onChanged(); return this; } + /** * * @@ -902,6 +899,7 @@ public Builder mergeInstance(com.google.spanner.admin.instance.v1.Instance value } return this; } + /** * * @@ -921,6 +919,7 @@ public Builder clearInstance() { onChanged(); return this; } + /** * * @@ -933,8 +932,9 @@ public Builder clearInstance() { public com.google.spanner.admin.instance.v1.Instance.Builder getInstanceBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstanceFieldBuilder().getBuilder(); + return internalGetInstanceFieldBuilder().getBuilder(); } + /** * * @@ -953,6 +953,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild : instance_; } } + /** * * @@ -962,14 +963,14 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild * * .google.spanner.admin.instance.v1.Instance instance = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> - getInstanceFieldBuilder() { + internalGetInstanceFieldBuilder() { if (instanceBuilder_ == null) { instanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder>( @@ -980,11 +981,12 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild } private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -1001,6 +1003,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1021,6 +1024,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -1045,6 +1049,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1066,6 +1071,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -1095,6 +1101,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1116,6 +1123,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -1130,8 +1138,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -1150,6 +1159,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -1161,14 +1171,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1179,11 +1189,12 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1200,6 +1211,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1222,6 +1234,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1246,6 +1259,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1267,6 +1281,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1296,6 +1311,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1317,6 +1333,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1331,8 +1348,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1353,6 +1371,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1364,14 +1383,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1382,11 +1401,12 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { } private com.google.protobuf.Timestamp endTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -1401,6 +1421,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1419,6 +1440,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -1441,6 +1463,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1460,6 +1483,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1487,6 +1511,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1506,6 +1531,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -1518,8 +1544,9 @@ public Builder clearEndTime() { public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEndTimeFieldBuilder().getBuilder(); + return internalGetEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -1536,6 +1563,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1545,14 +1573,14 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { * * .google.protobuf.Timestamp end_time = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEndTimeFieldBuilder() { + internalGetEndTimeFieldBuilder() { if (endTimeBuilder_ == null) { endTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1563,6 +1591,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { } private int expectedFulfillmentPeriod_ = 0; + /** * * @@ -1579,6 +1608,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public int getExpectedFulfillmentPeriodValue() { return expectedFulfillmentPeriod_; } + /** * * @@ -1598,6 +1628,7 @@ public Builder setExpectedFulfillmentPeriodValue(int value) { onChanged(); return this; } + /** * * @@ -1619,6 +1650,7 @@ public com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfill ? com.google.spanner.admin.instance.v1.FulfillmentPeriod.UNRECOGNIZED : result; } + /** * * @@ -1642,6 +1674,7 @@ public Builder setExpectedFulfillmentPeriod( onChanged(); return this; } + /** * * @@ -1661,17 +1694,6 @@ public Builder clearExpectedFulfillmentPeriod() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.UpdateInstanceMetadata) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java index df942c1e654..db3de1e8ce1 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface UpdateInstanceMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.UpdateInstanceMetadata) @@ -36,6 +38,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return Whether the instance field is set. */ boolean hasInstance(); + /** * * @@ -48,6 +51,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return The instance. */ com.google.spanner.admin.instance.v1.Instance getInstance(); + /** * * @@ -73,6 +77,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -87,6 +92,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -114,6 +120,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -128,6 +135,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * @@ -153,6 +161,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -165,6 +174,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * @@ -189,6 +199,7 @@ public interface UpdateInstanceMetadataOrBuilder * @return The enum numeric value on the wire for expectedFulfillmentPeriod. */ int getExpectedFulfillmentPeriodValue(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java index 8b74f644a4f..3d0583b1877 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,32 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata} */ -public final class UpdateInstancePartitionMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateInstancePartitionMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata) UpdateInstancePartitionMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateInstancePartitionMetadata"); + } + // Use UpdateInstancePartitionMetadata.newBuilder() to construct. - private UpdateInstancePartitionMetadata( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateInstancePartitionMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateInstancePartitionMetadata() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateInstancePartitionMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_fieldAccessorTable @@ -66,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_PARTITION_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; + /** * * @@ -81,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstancePartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +106,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti ? com.google.spanner.admin.instance.v1.InstancePartition.getDefaultInstance() : instancePartition_; } + /** * * @@ -117,6 +126,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti public static final int START_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -134,6 +144,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -151,6 +162,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -169,6 +181,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int CANCEL_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp cancelTime_; + /** * * @@ -186,6 +199,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -203,6 +217,7 @@ public boolean hasCancelTime() { public com.google.protobuf.Timestamp getCancelTime() { return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; } + /** * * @@ -221,6 +236,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -236,6 +252,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -251,6 +268,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -413,39 +431,39 @@ public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetada public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -469,10 +487,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -483,7 +502,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata) com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadataOrBuilder { @@ -493,7 +512,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionMetadata_fieldAccessorTable @@ -508,17 +527,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstancePartitionFieldBuilder(); - getStartTimeFieldBuilder(); - getCancelTimeFieldBuilder(); - getEndTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstancePartitionFieldBuilder(); + internalGetStartTimeFieldBuilder(); + internalGetCancelTimeFieldBuilder(); + internalGetEndTimeFieldBuilder(); } } @@ -608,39 +627,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata) { @@ -698,25 +684,27 @@ public Builder mergeFrom( case 10: { input.readMessage( - getInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -740,11 +728,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> instancePartitionBuilder_; + /** * * @@ -759,6 +748,7 @@ public Builder mergeFrom( public boolean hasInstancePartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -779,6 +769,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti return instancePartitionBuilder_.getMessage(); } } + /** * * @@ -802,6 +793,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -822,6 +814,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -851,6 +844,7 @@ public Builder mergeInstancePartition( } return this; } + /** * * @@ -870,6 +864,7 @@ public Builder clearInstancePartition() { onChanged(); return this; } + /** * * @@ -883,8 +878,9 @@ public Builder clearInstancePartition() { getInstancePartitionBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstancePartitionFieldBuilder().getBuilder(); + return internalGetInstancePartitionFieldBuilder().getBuilder(); } + /** * * @@ -904,6 +900,7 @@ public Builder clearInstancePartition() { : instancePartition_; } } + /** * * @@ -913,14 +910,14 @@ public Builder clearInstancePartition() { * * .google.spanner.admin.instance.v1.InstancePartition instance_partition = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> - getInstancePartitionFieldBuilder() { + internalGetInstancePartitionFieldBuilder() { if (instancePartitionBuilder_ == null) { instancePartitionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder>( @@ -931,11 +928,12 @@ public Builder clearInstancePartition() { } private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -952,6 +950,7 @@ public Builder clearInstancePartition() { public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -972,6 +971,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -996,6 +996,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1017,6 +1018,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -1046,6 +1048,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1067,6 +1070,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -1081,8 +1085,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -1101,6 +1106,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -1112,14 +1118,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1130,11 +1136,12 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private com.google.protobuf.Timestamp cancelTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> cancelTimeBuilder_; + /** * * @@ -1151,6 +1158,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasCancelTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1173,6 +1181,7 @@ public com.google.protobuf.Timestamp getCancelTime() { return cancelTimeBuilder_.getMessage(); } } + /** * * @@ -1197,6 +1206,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1218,6 +1228,7 @@ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1247,6 +1258,7 @@ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1268,6 +1280,7 @@ public Builder clearCancelTime() { onChanged(); return this; } + /** * * @@ -1282,8 +1295,9 @@ public Builder clearCancelTime() { public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCancelTimeFieldBuilder().getBuilder(); + return internalGetCancelTimeFieldBuilder().getBuilder(); } + /** * * @@ -1304,6 +1318,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { : cancelTime_; } } + /** * * @@ -1315,14 +1330,14 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { * * .google.protobuf.Timestamp cancel_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCancelTimeFieldBuilder() { + internalGetCancelTimeFieldBuilder() { if (cancelTimeBuilder_ == null) { cancelTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1333,11 +1348,12 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { } private com.google.protobuf.Timestamp endTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -1352,6 +1368,7 @@ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1370,6 +1387,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -1392,6 +1410,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1411,6 +1430,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1438,6 +1458,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1457,6 +1478,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -1469,8 +1491,9 @@ public Builder clearEndTime() { public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getEndTimeFieldBuilder().getBuilder(); + return internalGetEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -1487,6 +1510,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1496,14 +1520,14 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { * * .google.protobuf.Timestamp end_time = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEndTimeFieldBuilder() { + internalGetEndTimeFieldBuilder() { if (endTimeBuilder_ == null) { endTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1513,17 +1537,6 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java index 3a35d54b784..161a8874989 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface UpdateInstancePartitionMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata) @@ -36,6 +38,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return Whether the instancePartition field is set. */ boolean hasInstancePartition(); + /** * * @@ -48,6 +51,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return The instancePartition. */ com.google.spanner.admin.instance.v1.InstancePartition getInstancePartition(); + /** * * @@ -73,6 +77,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -87,6 +92,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -114,6 +120,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return Whether the cancelTime field is set. */ boolean hasCancelTime(); + /** * * @@ -128,6 +135,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return The cancelTime. */ com.google.protobuf.Timestamp getCancelTime(); + /** * * @@ -153,6 +161,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -165,6 +174,7 @@ public interface UpdateInstancePartitionMetadataOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java index ba5014f2c77..3555a22092b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,32 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstancePartitionRequest} */ -public final class UpdateInstancePartitionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateInstancePartitionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.UpdateInstancePartitionRequest) UpdateInstancePartitionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateInstancePartitionRequest"); + } + // Use UpdateInstancePartitionRequest.newBuilder() to construct. - private UpdateInstancePartitionRequest( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateInstancePartitionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateInstancePartitionRequest() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateInstancePartitionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_fieldAccessorTable @@ -66,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_PARTITION_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; + /** * * @@ -86,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstancePartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -108,6 +116,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti ? com.google.spanner.admin.instance.v1.InstancePartition.getDefaultInstance() : instancePartition_; } + /** * * @@ -132,6 +141,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti public static final int FIELD_MASK_FIELD_NUMBER = 2; private com.google.protobuf.FieldMask fieldMask_; + /** * * @@ -153,6 +163,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti public boolean hasFieldMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -174,6 +185,7 @@ public boolean hasFieldMask() { public com.google.protobuf.FieldMask getFieldMask() { return fieldMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : fieldMask_; } + /** * * @@ -314,39 +326,39 @@ public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionReques public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -370,10 +382,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -384,7 +397,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstancePartitionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.UpdateInstancePartitionRequest) com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequestOrBuilder { @@ -394,7 +407,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstancePartitionRequest_fieldAccessorTable @@ -409,15 +422,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstancePartitionFieldBuilder(); - getFieldMaskFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstancePartitionFieldBuilder(); + internalGetFieldMaskFieldBuilder(); } } @@ -489,39 +502,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.UpdateInstancePartitionRequest) { @@ -573,13 +553,14 @@ public Builder mergeFrom( case 10: { input.readMessage( - getInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstancePartitionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getFieldMaskFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetFieldMaskFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -603,11 +584,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.InstancePartition instancePartition_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> instancePartitionBuilder_; + /** * * @@ -627,6 +609,7 @@ public Builder mergeFrom( public boolean hasInstancePartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -652,6 +635,7 @@ public com.google.spanner.admin.instance.v1.InstancePartition getInstancePartiti return instancePartitionBuilder_.getMessage(); } } + /** * * @@ -680,6 +664,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -705,6 +690,7 @@ public Builder setInstancePartition( onChanged(); return this; } + /** * * @@ -739,6 +725,7 @@ public Builder mergeInstancePartition( } return this; } + /** * * @@ -763,6 +750,7 @@ public Builder clearInstancePartition() { onChanged(); return this; } + /** * * @@ -781,8 +769,9 @@ public Builder clearInstancePartition() { getInstancePartitionBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstancePartitionFieldBuilder().getBuilder(); + return internalGetInstancePartitionFieldBuilder().getBuilder(); } + /** * * @@ -807,6 +796,7 @@ public Builder clearInstancePartition() { : instancePartition_; } } + /** * * @@ -821,14 +811,14 @@ public Builder clearInstancePartition() { * .google.spanner.admin.instance.v1.InstancePartition instance_partition = 1 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder> - getInstancePartitionFieldBuilder() { + internalGetInstancePartitionFieldBuilder() { if (instancePartitionBuilder_ == null) { instancePartitionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstancePartition, com.google.spanner.admin.instance.v1.InstancePartition.Builder, com.google.spanner.admin.instance.v1.InstancePartitionOrBuilder>( @@ -839,11 +829,12 @@ public Builder clearInstancePartition() { } private com.google.protobuf.FieldMask fieldMask_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> fieldMaskBuilder_; + /** * * @@ -864,6 +855,7 @@ public Builder clearInstancePartition() { public boolean hasFieldMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -888,6 +880,7 @@ public com.google.protobuf.FieldMask getFieldMask() { return fieldMaskBuilder_.getMessage(); } } + /** * * @@ -916,6 +909,7 @@ public Builder setFieldMask(com.google.protobuf.FieldMask value) { onChanged(); return this; } + /** * * @@ -941,6 +935,7 @@ public Builder setFieldMask(com.google.protobuf.FieldMask.Builder builderForValu onChanged(); return this; } + /** * * @@ -974,6 +969,7 @@ public Builder mergeFieldMask(com.google.protobuf.FieldMask value) { } return this; } + /** * * @@ -999,6 +995,7 @@ public Builder clearFieldMask() { onChanged(); return this; } + /** * * @@ -1017,8 +1014,9 @@ public Builder clearFieldMask() { public com.google.protobuf.FieldMask.Builder getFieldMaskBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getFieldMaskFieldBuilder().getBuilder(); + return internalGetFieldMaskFieldBuilder().getBuilder(); } + /** * * @@ -1041,6 +1039,7 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { return fieldMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : fieldMask_; } } + /** * * @@ -1056,14 +1055,14 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { * .google.protobuf.FieldMask field_mask = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> - getFieldMaskFieldBuilder() { + internalGetFieldMaskFieldBuilder() { if (fieldMaskBuilder_ == null) { fieldMaskBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder>( @@ -1073,17 +1072,6 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { return fieldMaskBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.UpdateInstancePartitionRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java index cb1458f5630..a6b59e9c8ee 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface UpdateInstancePartitionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.UpdateInstancePartitionRequest) @@ -41,6 +43,7 @@ public interface UpdateInstancePartitionRequestOrBuilder * @return Whether the instancePartition field is set. */ boolean hasInstancePartition(); + /** * * @@ -58,6 +61,7 @@ public interface UpdateInstancePartitionRequestOrBuilder * @return The instancePartition. */ com.google.spanner.admin.instance.v1.InstancePartition getInstancePartition(); + /** * * @@ -92,6 +96,7 @@ public interface UpdateInstancePartitionRequestOrBuilder * @return Whether the fieldMask field is set. */ boolean hasFieldMask(); + /** * * @@ -110,6 +115,7 @@ public interface UpdateInstancePartitionRequestOrBuilder * @return The fieldMask. */ com.google.protobuf.FieldMask getFieldMask(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java index ed35d34ac83..45abb0f0313 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceRequest} */ -public final class UpdateInstanceRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateInstanceRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.admin.instance.v1.UpdateInstanceRequest) UpdateInstanceRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateInstanceRequest"); + } + // Use UpdateInstanceRequest.newBuilder() to construct. - private UpdateInstanceRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateInstanceRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private UpdateInstanceRequest() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateInstanceRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int INSTANCE_FIELD_NUMBER = 1; private com.google.spanner.admin.instance.v1.Instance instance_; + /** * * @@ -85,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -107,6 +116,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { ? com.google.spanner.admin.instance.v1.Instance.getDefaultInstance() : instance_; } + /** * * @@ -130,6 +140,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public static final int FIELD_MASK_FIELD_NUMBER = 2; private com.google.protobuf.FieldMask fieldMask_; + /** * * @@ -150,6 +161,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public boolean hasFieldMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -170,6 +182,7 @@ public boolean hasFieldMask() { public com.google.protobuf.FieldMask getFieldMask() { return fieldMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : fieldMask_; } + /** * * @@ -309,38 +322,38 @@ public static com.google.spanner.admin.instance.v1.UpdateInstanceRequest parseFr public static com.google.spanner.admin.instance.v1.UpdateInstanceRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.admin.instance.v1.UpdateInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.admin.instance.v1.UpdateInstanceRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -364,10 +377,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -378,7 +392,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.admin.instance.v1.UpdateInstanceRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.admin.instance.v1.UpdateInstanceRequest) com.google.spanner.admin.instance.v1.UpdateInstanceRequestOrBuilder { @@ -388,7 +402,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_fieldAccessorTable @@ -402,15 +416,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInstanceFieldBuilder(); - getFieldMaskFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInstanceFieldBuilder(); + internalGetFieldMaskFieldBuilder(); } } @@ -476,39 +490,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.UpdateInstanceRe result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.admin.instance.v1.UpdateInstanceRequest) { @@ -556,13 +537,15 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getInstanceFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getFieldMaskFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetFieldMaskFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -586,11 +569,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.admin.instance.v1.Instance instance_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> instanceBuilder_; + /** * * @@ -610,6 +594,7 @@ public Builder mergeFrom( public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -635,6 +620,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { return instanceBuilder_.getMessage(); } } + /** * * @@ -662,6 +648,7 @@ public Builder setInstance(com.google.spanner.admin.instance.v1.Instance value) onChanged(); return this; } + /** * * @@ -687,6 +674,7 @@ public Builder setInstance( onChanged(); return this; } + /** * * @@ -719,6 +707,7 @@ public Builder mergeInstance(com.google.spanner.admin.instance.v1.Instance value } return this; } + /** * * @@ -743,6 +732,7 @@ public Builder clearInstance() { onChanged(); return this; } + /** * * @@ -760,8 +750,9 @@ public Builder clearInstance() { public com.google.spanner.admin.instance.v1.Instance.Builder getInstanceBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getInstanceFieldBuilder().getBuilder(); + return internalGetInstanceFieldBuilder().getBuilder(); } + /** * * @@ -785,6 +776,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild : instance_; } } + /** * * @@ -799,14 +791,14 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild * .google.spanner.admin.instance.v1.Instance instance = 1 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> - getInstanceFieldBuilder() { + internalGetInstanceFieldBuilder() { if (instanceBuilder_ == null) { instanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder>( @@ -817,11 +809,12 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild } private com.google.protobuf.FieldMask fieldMask_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> fieldMaskBuilder_; + /** * * @@ -841,6 +834,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild public boolean hasFieldMask() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -864,6 +858,7 @@ public com.google.protobuf.FieldMask getFieldMask() { return fieldMaskBuilder_.getMessage(); } } + /** * * @@ -891,6 +886,7 @@ public Builder setFieldMask(com.google.protobuf.FieldMask value) { onChanged(); return this; } + /** * * @@ -915,6 +911,7 @@ public Builder setFieldMask(com.google.protobuf.FieldMask.Builder builderForValu onChanged(); return this; } + /** * * @@ -947,6 +944,7 @@ public Builder mergeFieldMask(com.google.protobuf.FieldMask value) { } return this; } + /** * * @@ -971,6 +969,7 @@ public Builder clearFieldMask() { onChanged(); return this; } + /** * * @@ -988,8 +987,9 @@ public Builder clearFieldMask() { public com.google.protobuf.FieldMask.Builder getFieldMaskBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getFieldMaskFieldBuilder().getBuilder(); + return internalGetFieldMaskFieldBuilder().getBuilder(); } + /** * * @@ -1011,6 +1011,7 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { return fieldMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : fieldMask_; } } + /** * * @@ -1025,14 +1026,14 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { * .google.protobuf.FieldMask field_mask = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder> - getFieldMaskFieldBuilder() { + internalGetFieldMaskFieldBuilder() { if (fieldMaskBuilder_ == null) { fieldMaskBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.FieldMask, com.google.protobuf.FieldMask.Builder, com.google.protobuf.FieldMaskOrBuilder>( @@ -1042,17 +1043,6 @@ public com.google.protobuf.FieldMaskOrBuilder getFieldMaskOrBuilder() { return fieldMaskBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.admin.instance.v1.UpdateInstanceRequest) } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java index 7fc5dbfe287..7afab12c38b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.admin.instance.v1; +@com.google.protobuf.Generated public interface UpdateInstanceRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.admin.instance.v1.UpdateInstanceRequest) @@ -41,6 +43,7 @@ public interface UpdateInstanceRequestOrBuilder * @return Whether the instance field is set. */ boolean hasInstance(); + /** * * @@ -58,6 +61,7 @@ public interface UpdateInstanceRequestOrBuilder * @return The instance. */ com.google.spanner.admin.instance.v1.Instance getInstance(); + /** * * @@ -91,6 +95,7 @@ public interface UpdateInstanceRequestOrBuilder * @return Whether the fieldMask field is set. */ boolean hasFieldMask(); + /** * * @@ -108,6 +113,7 @@ public interface UpdateInstanceRequestOrBuilder * @return The fieldMask. */ com.google.protobuf.FieldMask getFieldMask(); + /** * * diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto index 69717ec228a..0b5282c7d87 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto @@ -1,4 +1,4 @@ -// 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. @@ -17,6 +17,7 @@ syntax = "proto3"; package google.spanner.admin.instance.v1; import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; import "google/protobuf/timestamp.proto"; option csharp_namespace = "Google.Cloud.Spanner.Admin.Instance.V1"; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto index ba6726b31ba..d16ab2ca583 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto @@ -1,4 +1,4 @@ -// 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. @@ -64,6 +64,9 @@ service InstanceAdmin { "https://www.googleapis.com/auth/spanner.admin"; // Lists the supported instance configurations for a given project. + // + // Returns both Google-managed configurations and user-managed + // configurations. rpc ListInstanceConfigs(ListInstanceConfigsRequest) returns (ListInstanceConfigsResponse) { option (google.api.http) = { @@ -81,7 +84,7 @@ service InstanceAdmin { } // Creates an instance configuration and begins preparing it to be used. The - // returned [long-running operation][google.longrunning.Operation] + // returned long-running operation // can be used to track the progress of preparing the new // instance configuration. The instance configuration name is assigned by the // caller. If the named instance configuration already exists, @@ -108,13 +111,13 @@ service InstanceAdmin { // [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] // field becomes false. Its state becomes `READY`. // - // The returned [long-running operation][google.longrunning.Operation] will + // The returned long-running operation will // have a name of the format // `/operations/` and can be used to track // creation of the instance configuration. The - // [metadata][google.longrunning.Operation.metadata] field type is + // metadata field type is // [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]. - // The [response][google.longrunning.Operation.response] field type is + // The response field type is // [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if // successful. // @@ -136,7 +139,7 @@ service InstanceAdmin { } // Updates an instance configuration. The returned - // [long-running operation][google.longrunning.Operation] can be used to track + // long-running operation can be used to track // the progress of updating the instance. If the named instance configuration // does not exist, returns `NOT_FOUND`. // @@ -167,13 +170,13 @@ service InstanceAdmin { // [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling] // field becomes false. // - // The returned [long-running operation][google.longrunning.Operation] will + // The returned long-running operation will // have a name of the format // `/operations/` and can be used to track // the instance configuration modification. The - // [metadata][google.longrunning.Operation.metadata] field type is + // metadata field type is // [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata]. - // The [response][google.longrunning.Operation.response] field type is + // The response field type is // [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if // successful. // @@ -208,12 +211,12 @@ service InstanceAdmin { option (google.api.method_signature) = "name"; } - // Lists the user-managed instance configuration [long-running - // operations][google.longrunning.Operation] in the given project. An instance + // Lists the user-managed instance configuration long-running + // operations in the given project. An instance // configuration operation has a name of the form // `projects//instanceConfigs//operations/`. // The long-running operation - // [metadata][google.longrunning.Operation.metadata] field type + // metadata field type // `metadata.type_url` describes the type of the metadata. Operations returned // include those that have completed/failed/canceled within the last 7 days, // and pending operations. Operations returned are ordered by @@ -253,7 +256,7 @@ service InstanceAdmin { } // Creates an instance and begins preparing it to begin serving. The - // returned [long-running operation][google.longrunning.Operation] + // returned long-running operation // can be used to track the progress of preparing the new // instance. The instance name is assigned by the caller. If the // named instance already exists, `CreateInstance` returns @@ -279,12 +282,12 @@ service InstanceAdmin { // * The instance's allocated resource levels are readable via the API. // * The instance's state becomes `READY`. // - // The returned [long-running operation][google.longrunning.Operation] will + // The returned long-running operation will // have a name of the format `/operations/` and // can be used to track creation of the instance. The - // [metadata][google.longrunning.Operation.metadata] field type is + // metadata field type is // [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. - // The [response][google.longrunning.Operation.response] field type is + // The response field type is // [Instance][google.spanner.admin.instance.v1.Instance], if successful. rpc CreateInstance(CreateInstanceRequest) returns (google.longrunning.Operation) { @@ -300,8 +303,7 @@ service InstanceAdmin { } // Updates an instance, and begins allocating or releasing resources - // as requested. The returned [long-running - // operation][google.longrunning.Operation] can be used to track the + // as requested. The returned long-running operation can be used to track the // progress of updating the instance. If the named instance does not // exist, returns `NOT_FOUND`. // @@ -329,12 +331,12 @@ service InstanceAdmin { // tables. // * The instance's new resource levels are readable via the API. // - // The returned [long-running operation][google.longrunning.Operation] will + // The returned long-running operation will // have a name of the format `/operations/` and // can be used to track the instance modification. The - // [metadata][google.longrunning.Operation.metadata] field type is + // metadata field type is // [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. - // The [response][google.longrunning.Operation.response] field type is + // The response field type is // [Instance][google.spanner.admin.instance.v1.Instance], if successful. // // Authorization requires `spanner.instances.update` permission on @@ -423,7 +425,7 @@ service InstanceAdmin { } // Creates an instance partition and begins preparing it to be used. The - // returned [long-running operation][google.longrunning.Operation] + // returned long-running operation // can be used to track the progress of preparing the new instance partition. // The instance partition name is assigned by the caller. If the named // instance partition already exists, `CreateInstancePartition` returns @@ -450,13 +452,13 @@ service InstanceAdmin { // API. // * The instance partition's state becomes `READY`. // - // The returned [long-running operation][google.longrunning.Operation] will + // The returned long-running operation will // have a name of the format // `/operations/` and can be used to // track creation of the instance partition. The - // [metadata][google.longrunning.Operation.metadata] field type is + // metadata field type is // [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]. - // The [response][google.longrunning.Operation.response] field type is + // The response field type is // [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if // successful. rpc CreateInstancePartition(CreateInstancePartitionRequest) @@ -489,8 +491,7 @@ service InstanceAdmin { } // Updates an instance partition, and begins allocating or releasing resources - // as requested. The returned [long-running - // operation][google.longrunning.Operation] can be used to track the + // as requested. The returned long-running operation can be used to track the // progress of updating the instance partition. If the named instance // partition does not exist, returns `NOT_FOUND`. // @@ -519,13 +520,13 @@ service InstanceAdmin { // partition's tables. // * The instance partition's new resource levels are readable via the API. // - // The returned [long-running operation][google.longrunning.Operation] will + // The returned long-running operation will // have a name of the format // `/operations/` and can be used to // track the instance partition modification. The - // [metadata][google.longrunning.Operation.metadata] field type is + // metadata field type is // [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata]. - // The [response][google.longrunning.Operation.response] field type is + // The response field type is // [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if // successful. // @@ -545,12 +546,11 @@ service InstanceAdmin { }; } - // Lists instance partition [long-running - // operations][google.longrunning.Operation] in the given instance. + // Lists instance partition long-running operations in the given instance. // An instance partition operation has a name of the form // `projects//instances//instancePartitions//operations/`. // The long-running operation - // [metadata][google.longrunning.Operation.metadata] field type + // metadata field type // `metadata.type_url` describes the type of the metadata. Operations returned // include those that have completed/failed/canceled within the last 7 days, // and pending operations. Operations returned are ordered by @@ -569,7 +569,7 @@ service InstanceAdmin { } // Moves an instance to the target instance configuration. You can use the - // returned [long-running operation][google.longrunning.Operation] to track + // returned long-running operation to track // the progress of moving the instance. // // `MoveInstance` returns `FAILED_PRECONDITION` if the instance meets any of @@ -600,13 +600,13 @@ service InstanceAdmin { // transaction abort rate. However, moving an instance doesn't cause any // downtime. // - // The returned [long-running operation][google.longrunning.Operation] has + // The returned long-running operation has // a name of the format // `/operations/` and can be used to track // the move instance operation. The - // [metadata][google.longrunning.Operation.metadata] field type is + // metadata field type is // [MoveInstanceMetadata][google.spanner.admin.instance.v1.MoveInstanceMetadata]. - // The [response][google.longrunning.Operation.response] field type is + // The response field type is // [Instance][google.spanner.admin.instance.v1.Instance], // if successful. // Cancelling the operation sets its metadata's @@ -676,7 +676,7 @@ message ReplicaInfo { WITNESS = 3; } - // The location of the serving resources, e.g. "us-central1". + // The location of the serving resources, e.g., "us-central1". string location = 1; // The type of replica. @@ -695,6 +695,8 @@ message InstanceConfig { option (google.api.resource) = { type: "spanner.googleapis.com/InstanceConfig" pattern: "projects/{project}/instanceConfigs/{instance_config}" + plural: "instanceConfigs" + singular: "instanceConfig" }; // The type of this configuration. @@ -702,10 +704,10 @@ message InstanceConfig { // Unspecified. TYPE_UNSPECIFIED = 0; - // Google managed configuration. + // Google-managed configuration. GOOGLE_MANAGED = 1; - // User managed configuration. + // User-managed configuration. USER_MANAGED = 2; } @@ -722,6 +724,53 @@ message InstanceConfig { READY = 2; } + // Describes the availability for free instances to be created in an instance + // configuration. + enum FreeInstanceAvailability { + // Not specified. + FREE_INSTANCE_AVAILABILITY_UNSPECIFIED = 0; + + // Indicates that free instances are available to be created in this + // instance configuration. + AVAILABLE = 1; + + // Indicates that free instances are not supported in this instance + // configuration. + UNSUPPORTED = 2; + + // Indicates that free instances are currently not available to be created + // in this instance configuration. + DISABLED = 3; + + // Indicates that additional free instances cannot be created in this + // instance configuration because the project has reached its limit of free + // instances. + QUOTA_EXCEEDED = 4; + } + + // Indicates the quorum type of this instance configuration. + enum QuorumType { + // Quorum type not specified. + QUORUM_TYPE_UNSPECIFIED = 0; + + // An instance configuration tagged with `REGION` quorum type forms a write + // quorum in a single region. + REGION = 1; + + // An instance configuration tagged with the `DUAL_REGION` quorum type forms + // a write quorum with exactly two read-write regions in a multi-region + // configuration. + // + // This instance configuration requires failover in the event of + // regional failures. + DUAL_REGION = 2; + + // An instance configuration tagged with the `MULTI_REGION` quorum type + // forms a write quorum from replicas that are spread across more than one + // region in a multi-region configuration. + MULTI_REGION = 3; + } + // A unique identifier for the instance configuration. Values // are of the form // `projects//instanceConfigs/[a-z][-a-z0-9]*`. @@ -738,17 +787,22 @@ message InstanceConfig { // The geographic placement of nodes in this instance configuration and their // replication properties. + // + // To create user-managed configurations, input + // `replicas` must include all replicas in `replicas` of the `base_config` + // and include one or more replicas in the `optional_replicas` of the + // `base_config`. repeated ReplicaInfo replicas = 3; - // Output only. The available optional replicas to choose from for user - // managed configurations. Populated for Google managed configurations. + // Output only. The available optional replicas to choose from for + // user-managed configurations. Populated for Google-managed configurations. repeated ReplicaInfo optional_replicas = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; // Base configuration name, e.g. projects//instanceConfigs/nam3, - // based on which this configuration is created. Only set for user managed + // based on which this configuration is created. Only set for user-managed // configurations. `base_config` must refer to a configuration of type - // GOOGLE_MANAGED in the same project as this configuration. + // `GOOGLE_MANAGED` in the same project as this configuration. string base_config = 7 [(google.api.resource_reference) = { type: "spanner.googleapis.com/InstanceConfig" }]; @@ -801,6 +855,18 @@ message InstanceConfig { // Output only. The current instance configuration state. Applicable only for // `USER_MANAGED` configurations. State state = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Describes whether free instances are available to be created + // in this instance configuration. + FreeInstanceAvailability free_instance_availability = 12 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The `QuorumType` of the instance configuration. + QuorumType quorum_type = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The storage limit in bytes per processing unit. + int64 storage_limit_per_processing_unit = 19 + [(google.api.field_behavior) = OUTPUT_ONLY]; } // ReplicaComputeCapacity describes the amount of server resources that are @@ -867,17 +933,30 @@ message AutoscalingConfig { // The autoscaling targets for an instance. message AutoscalingTargets { - // Required. The target high priority cpu utilization percentage that the + // Optional. The target high priority cpu utilization percentage that the // autoscaler should be trying to achieve for the instance. This number is // on a scale from 0 (no utilization) to 100 (full utilization). The valid - // range is [10, 90] inclusive. + // range is [10, 90] inclusive. If not specified or set to 0, the autoscaler + // skips scaling based on high priority CPU utilization. int32 high_priority_cpu_utilization_percent = 1 - [(google.api.field_behavior) = REQUIRED]; + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The target total CPU utilization percentage that the autoscaler + // should be trying to achieve for the instance. This number is on a scale + // from 0 (no utilization) to 100 (full utilization). The valid range is + // [10, 90] inclusive. If not specified or set to 0, the autoscaler skips + // scaling based on total CPU utilization. If both + // `high_priority_cpu_utilization_percent` and + // `total_cpu_utilization_percent` are specified, the autoscaler provisions + // the larger of the two required compute capacities to satisfy both + // targets. + int32 total_cpu_utilization_percent = 4 + [(google.api.field_behavior) = OPTIONAL]; // Required. The target storage utilization percentage that the autoscaler // should be trying to achieve for the instance. This number is on a scale // from 0 (no utilization) to 100 (full utilization). The valid range is - // [10, 100] inclusive. + // [10, 99] inclusive. int32 storage_utilization_percent = 2 [(google.api.field_behavior) = REQUIRED]; } @@ -900,6 +979,60 @@ message AutoscalingConfig { // configuration for the selected replicas. int32 autoscaling_target_high_priority_cpu_utilization_percent = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If specified, overrides the + // autoscaling target `total_cpu_utilization_percent` + // in the top-level autoscaling configuration for the selected replicas. + int32 autoscaling_target_total_cpu_utilization_percent = 4 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, disables high priority CPU autoscaling for the + // selected replicas and ignores + // [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent] + // in the top-level autoscaling configuration. + // + // When setting this field to true, setting + // [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent] + // field to a non-zero value for the same replica is not supported. + // + // If false, the + // [autoscaling_target_high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_high_priority_cpu_utilization_percent] + // field in the replica will be used if set to a non-zero value. + // Otherwise, the + // [high_priority_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.high_priority_cpu_utilization_percent] + // field in the top-level autoscaling configuration will be used. + // + // Setting both + // [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling] + // and + // [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling] + // to true for the same replica is not supported. + bool disable_high_priority_cpu_autoscaling = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, disables total CPU autoscaling for the selected + // replicas and ignores + // [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent] + // in the top-level autoscaling configuration. + // + // When setting this field to true, setting + // [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent] + // field to a non-zero value for the same replica is not supported. + // + // If false, the + // [autoscaling_target_total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.autoscaling_target_total_cpu_utilization_percent] + // field in the replica will be used if set to a non-zero value. + // Otherwise, the + // [total_cpu_utilization_percent][google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.total_cpu_utilization_percent] + // field in the top-level autoscaling configuration will be used. + // + // Setting both + // [disable_high_priority_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_high_priority_cpu_autoscaling] + // and + // [disable_total_cpu_autoscaling][google.spanner.admin.instance.v1.AutoscalingConfig.AsymmetricAutoscalingOption.AutoscalingConfigOverrides.disable_total_cpu_autoscaling] + // to true for the same replica is not supported. + bool disable_total_cpu_autoscaling = 6 + [(google.api.field_behavior) = OPTIONAL]; } // Required. Selects the replicas to which this AsymmetricAutoscalingOption @@ -939,6 +1072,8 @@ message Instance { option (google.api.resource) = { type: "spanner.googleapis.com/Instance" pattern: "projects/{project}/instances/{instance}" + plural: "instances" + singular: "instance" }; // Indicates the current state of the instance. @@ -956,6 +1091,24 @@ message Instance { READY = 2; } + // The type of this instance. The type can be used to distinguish product + // variants, that can affect aspects like: usage restrictions, quotas and + // billing. Currently this is used to distinguish FREE_INSTANCE vs PROVISIONED + // instances. + enum InstanceType { + // Not specified. + INSTANCE_TYPE_UNSPECIFIED = 0; + + // Provisioned instances have dedicated resources, standard usage limits and + // support. + PROVISIONED = 1; + + // Free instances provide no guarantee for dedicated resources, + // [node_count, processing_units] should be 0. They come + // with stricter usage limits and limited support. + FREE_INSTANCE = 2; + } + // The edition selected for this instance. Different editions provide // different capabilities at different price points. enum Edition { @@ -972,21 +1125,22 @@ message Instance { ENTERPRISE_PLUS = 3; } - // Indicates the default backup behavior for new databases within the - // instance. + // Indicates the + // [default backup + // schedule](https://cloud.google.com/spanner/docs/backup#default-backup-schedules) + // behavior for new databases within the instance. enum DefaultBackupScheduleType { // Not specified. DEFAULT_BACKUP_SCHEDULE_TYPE_UNSPECIFIED = 0; - // No default backup schedule will be created automatically on creation of a - // database within the instance. + // A default backup schedule isn't created automatically when a new database + // is created in the instance. NONE = 1; - // A default backup schedule will be created automatically on creation of a - // database within the instance. The default backup schedule creates a full - // backup every 24 hours and retains the backup for a period of 7 days. Once - // created, the default backup schedule can be edited/deleted similar to any - // other backup schedule. + // A default backup schedule is created automatically when a new database + // is created in the instance. The default backup schedule creates a full + // backup every 24 hours. These full backups are retained for 7 days. + // You can edit or delete the default backup schedule once it's created. AUTOMATIC = 2; } @@ -1023,9 +1177,6 @@ message Instance { // This might be zero in API responses for instances that are not yet in the // `READY` state. // - // If the instance has varying node count across replicas (achieved by - // setting asymmetric_autoscaling_options in autoscaling config), the - // node_count here is the maximum node count across all replicas. // // For more information, see // [Compute capacity, nodes, and processing @@ -1045,10 +1196,6 @@ message Instance { // This might be zero in API responses for instances that are not yet in the // `READY` state. // - // If the instance has varying processing units per replica - // (achieved by setting asymmetric_autoscaling_options in autoscaling config), - // the processing_units here is the maximum processing units across all - // replicas. // // For more information, see // [Compute capacity, nodes and processing @@ -1098,6 +1245,9 @@ message Instance { // allow "_" in a future release. map labels = 7; + // The `InstanceType` of the current instance. + InstanceType instance_type = 10; + // Deprecated. This field is not populated. repeated string endpoint_uris = 8; @@ -1109,18 +1259,22 @@ message Instance { google.protobuf.Timestamp update_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Free instance metadata. Only populated for free instances. + FreeInstanceMetadata free_instance_metadata = 13; + // Optional. The `Edition` of the current instance. Edition edition = 20 [(google.api.field_behavior) = OPTIONAL]; - // Optional. Controls the default backup behavior for new databases within the - // instance. + // Optional. Controls the default backup schedule behavior for new databases + // within the instance. By default, a backup schedule is created automatically + // when a new database is created in a new instance. // - // Note that `AUTOMATIC` is not permitted for free instances, as backups and - // backup schedules are not allowed for free instances. + // Note that the `AUTOMATIC` value isn't permitted for free instances, + // as backups and backup schedules aren't supported for free instances. // // In the `GetInstance` or `ListInstances` response, if the value of - // default_backup_schedule_type is unset or NONE, no default backup - // schedule will be created for new databases within the instance. + // `default_backup_schedule_type` isn't set, or set to `NONE`, Spanner doesn't + // create a default backup schedule for new databases in the instance. DefaultBackupScheduleType default_backup_schedule_type = 23 [(google.api.field_behavior) = OPTIONAL]; } @@ -1175,7 +1329,7 @@ message GetInstanceConfigRequest { } // The request for -// [CreateInstanceConfigRequest][InstanceAdmin.CreateInstanceConfigRequest]. +// [CreateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstanceConfig]. message CreateInstanceConfigRequest { // Required. The name of the project in which to create the instance // configuration. Values are of the form `projects/`. @@ -1192,10 +1346,10 @@ message CreateInstanceConfigRequest { // conflicts with Google-managed configurations. string instance_config_id = 2 [(google.api.field_behavior) = REQUIRED]; - // Required. The InstanceConfig proto of the configuration to create. - // instance_config.name must be + // Required. The `InstanceConfig` proto of the configuration to create. + // `instance_config.name` must be // `/instanceConfigs/`. - // instance_config.base_config must be a Google managed configuration name, + // `instance_config.base_config` must be a Google-managed configuration name, // e.g. /instanceConfigs/us-east1, /instanceConfigs/nam3. InstanceConfig instance_config = 3 [(google.api.field_behavior) = REQUIRED]; @@ -1205,7 +1359,7 @@ message CreateInstanceConfigRequest { } // The request for -// [UpdateInstanceConfigRequest][InstanceAdmin.UpdateInstanceConfigRequest]. +// [UpdateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstanceConfig]. message UpdateInstanceConfigRequest { // Required. The user instance configuration to update, which must always // include the instance configuration name. Otherwise, only fields mentioned @@ -1231,7 +1385,7 @@ message UpdateInstanceConfigRequest { } // The request for -// [DeleteInstanceConfigRequest][InstanceAdmin.DeleteInstanceConfigRequest]. +// [DeleteInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstanceConfig]. message DeleteInstanceConfigRequest { // Required. The name of the instance configuration to be deleted. // Values are of the form @@ -1277,8 +1431,7 @@ message ListInstanceConfigOperationsRequest { // must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. // Colon `:` is the contains operator. Filter rules are not case sensitive. // - // The following fields in the [Operation][google.longrunning.Operation] - // are eligible for filtering: + // The following fields in the Operation are eligible for filtering: // // * `name` - The name of the long-running operation // * `done` - False if the operation is in progress, else true. @@ -1329,10 +1482,10 @@ message ListInstanceConfigOperationsRequest { // The response for // [ListInstanceConfigOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigOperations]. message ListInstanceConfigOperationsResponse { - // The list of matching instance configuration [long-running - // operations][google.longrunning.Operation]. Each operation's name will be + // The list of matching instance configuration long-running operations. Each + // operation's name will be // prefixed by the name of the instance configuration. The operation's - // [metadata][google.longrunning.Operation.metadata] field type + // metadata field type // `metadata.type_url` describes the type of the metadata. repeated google.longrunning.Operation operations = 1; @@ -1530,6 +1683,41 @@ message UpdateInstanceMetadata { FulfillmentPeriod expected_fulfillment_period = 5; } +// Free instance specific metadata that is kept even after an instance has been +// upgraded for tracking purposes. +message FreeInstanceMetadata { + // Allows users to change behavior when a free instance expires. + enum ExpireBehavior { + // Not specified. + EXPIRE_BEHAVIOR_UNSPECIFIED = 0; + + // When the free instance expires, upgrade the instance to a provisioned + // instance. + FREE_TO_PROVISIONED = 1; + + // When the free instance expires, disable the instance, and delete it + // after the grace period passes if it has not been upgraded. + REMOVE_AFTER_GRACE_PERIOD = 2; + } + + // Output only. Timestamp after which the instance will either be upgraded or + // scheduled for deletion after a grace period. ExpireBehavior is used to + // choose between upgrading or scheduling the free instance for deletion. This + // timestamp is set during the creation of a free instance. + google.protobuf.Timestamp expire_time = 1 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. If present, the timestamp at which the free instance was + // upgraded to a provisioned instance. + google.protobuf.Timestamp upgrade_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Specifies the expiration behavior of a free instance. The default of + // ExpireBehavior is `REMOVE_AFTER_GRACE_PERIOD`. This can be modified during + // or after creation, and before expiration. + ExpireBehavior expire_behavior = 3; +} + // Metadata type for the operation returned by // [CreateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstanceConfig]. message CreateInstanceConfigMetadata { @@ -1566,6 +1754,8 @@ message InstancePartition { option (google.api.resource) = { type: "spanner.googleapis.com/InstancePartition" pattern: "projects/{project}/instances/{instance}/instancePartitions/{instance_partition}" + plural: "instancePartitions" + singular: "instancePartition" }; // Indicates the current state of the instance partition. @@ -1607,15 +1797,16 @@ message InstancePartition { string display_name = 3 [(google.api.field_behavior) = REQUIRED]; // Compute capacity defines amount of server and storage resources that are - // available to the databases in an instance partition. At most one of either - // node_count or processing_units should be present in the message. See [the - // documentation](https://cloud.google.com/spanner/docs/compute-capacity) - // for more information about nodes and processing units. + // available to the databases in an instance partition. At most, one of either + // `node_count` or` processing_units` should be present in the message. For + // more information, see + // [Compute capacity, nodes, and processing + // units](https://cloud.google.com/spanner/docs/compute-capacity). oneof compute_capacity { // The number of nodes allocated to this instance partition. // - // Users can set the node_count field to specify the target number of nodes - // allocated to the instance partition. + // Users can set the `node_count` field to specify the target number of + // nodes allocated to the instance partition. // // This may be zero in API responses for instance partitions that are not // yet in state `READY`. @@ -1623,14 +1814,21 @@ message InstancePartition { // The number of processing units allocated to this instance partition. // - // Users can set the processing_units field to specify the target number of - // processing units allocated to the instance partition. + // Users can set the `processing_units` field to specify the target number + // of processing units allocated to the instance partition. // - // This may be zero in API responses for instance partitions that are not - // yet in state `READY`. + // This might be zero in API responses for instance partitions that are not + // yet in the `READY` state. int32 processing_units = 6; } + // Optional. The autoscaling configuration. Autoscaling is enabled if this + // field is set. When autoscaling is enabled, fields in compute_capacity are + // treated as OUTPUT_ONLY fields and reflect the current compute capacity + // allocated to the instance partition. + AutoscalingConfig autoscaling_config = 13 + [(google.api.field_behavior) = OPTIONAL]; + // Output only. The current instance partition state. State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -1650,12 +1848,13 @@ message InstancePartition { repeated string referencing_databases = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Output only. Deprecated: This field is not populated. // Output only. The names of the backups that reference this instance // partition. Referencing backups should share the parent instance. The // existence of any referencing backup prevents the instance partition from // being deleted. repeated string referencing_backups = 11 - [(google.api.field_behavior) = OUTPUT_ONLY]; + [deprecated = true, (google.api.field_behavior) = OUTPUT_ONLY]; // Used for optimistic concurrency control as a way // to help prevent simultaneous updates of a instance partition from @@ -1793,7 +1992,9 @@ message UpdateInstancePartitionMetadata { // [ListInstancePartitions][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitions]. message ListInstancePartitionsRequest { // Required. The instance whose instance partitions should be listed. Values - // are of the form `projects//instances/`. + // are of the form `projects//instances/`. Use `{instance} + // = '-'` to list instance partitions for all Instances in a project, e.g., + // `projects/myproject/instances/-`. string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1832,9 +2033,9 @@ message ListInstancePartitionsResponse { // call to fetch more of the matching instance partitions. string next_page_token = 2; - // The list of unreachable instance partitions. - // It includes the names of instance partitions whose metadata could - // not be retrieved within + // The list of unreachable instances or instance partitions. + // It includes the names of instances or instance partitions whose metadata + // could not be retrieved within // [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline]. repeated string unreachable = 3; } @@ -1859,8 +2060,7 @@ message ListInstancePartitionOperationsRequest { // must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`. // Colon `:` is the contains operator. Filter rules are not case sensitive. // - // The following fields in the [Operation][google.longrunning.Operation] - // are eligible for filtering: + // The following fields in the Operation are eligible for filtering: // // * `name` - The name of the long-running operation // * `done` - False if the operation is in progress, else true. @@ -1910,7 +2110,8 @@ message ListInstancePartitionOperationsRequest { // Optional. Deadline used while retrieving metadata for instance partition // operations. Instance partitions whose operation metadata cannot be // retrieved within this deadline will be added to - // [unreachable][ListInstancePartitionOperationsResponse.unreachable] in + // [unreachable_instance_partitions][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.unreachable_instance_partitions] + // in // [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]. google.protobuf.Timestamp instance_partition_deadline = 5 [(google.api.field_behavior) = OPTIONAL]; @@ -1919,10 +2120,10 @@ message ListInstancePartitionOperationsRequest { // The response for // [ListInstancePartitionOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitionOperations]. message ListInstancePartitionOperationsResponse { - // The list of matching instance partition [long-running - // operations][google.longrunning.Operation]. Each operation's name will be + // The list of matching instance partition long-running operations. Each + // operation's name will be // prefixed by the instance partition's name. The operation's - // [metadata][google.longrunning.Operation.metadata] field type + // metadata field type // `metadata.type_url` describes the type of the metadata. repeated google.longrunning.Operation operations = 1; diff --git a/proto-google-cloud-spanner-executor-v1/clirr-ignored-differences.xml b/proto-google-cloud-spanner-executor-v1/clirr-ignored-differences.xml index c8787595be2..50ed2b0eec5 100644 --- a/proto-google-cloud-spanner-executor-v1/clirr-ignored-differences.xml +++ b/proto-google-cloud-spanner-executor-v1/clirr-ignored-differences.xml @@ -37,7 +37,63 @@ com/google/spanner/executor/v1/SpannerExecutorProxyGrpc$SpannerExecutorProxyStub
                                - + + + + 5001 + com/google/spanner/executor/v1/* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/executor/v1/*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/executor/v1/*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/executor/v1/*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/executor/v1/*$*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/executor/v1/*$*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/executor/v1/*Proto + com/google/protobuf/GeneratedFile + + + + 7005 + com/google/spanner/executor/v1/** + * newBuilderForType(*) + ** + + + + 7006 + com/google/spanner/executor/v1/** + * internalGetFieldAccessorTable() + ** + + + + 7014 + com/google/spanner/executor/v1/** + * getDescriptor() + 7006 com/google/spanner/executor/v1/** diff --git a/proto-google-cloud-spanner-executor-v1/pom.xml b/proto-google-cloud-spanner-executor-v1/pom.xml index 23a213ca72f..23df3c7806b 100644 --- a/proto-google-cloud-spanner-executor-v1/pom.xml +++ b/proto-google-cloud-spanner-executor-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-spanner-executor-v1 - 6.82.0 + 6.113.1-SNAPSHOT proto-google-cloud-spanner-executor-v1 Proto library for google-cloud-spanner com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdaptMessageAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdaptMessageAction.java new file mode 100644 index 00000000000..f00a4bdb679 --- /dev/null +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdaptMessageAction.java @@ -0,0 +1,1532 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.executor.v1; + +/** + * + * + *
                                + * A single Adapt message request.
                                + * 
                                + * + * Protobuf type {@code google.spanner.executor.v1.AdaptMessageAction} + */ +@com.google.protobuf.Generated +public final class AdaptMessageAction extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.AdaptMessageAction) + AdaptMessageActionOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AdaptMessageAction"); + } + + // Use AdaptMessageAction.newBuilder() to construct. + private AdaptMessageAction(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AdaptMessageAction() { + databaseUri_ = ""; + protocol_ = ""; + payload_ = com.google.protobuf.ByteString.EMPTY; + query_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AdaptMessageAction_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetAttachments(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AdaptMessageAction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.executor.v1.AdaptMessageAction.class, + com.google.spanner.executor.v1.AdaptMessageAction.Builder.class); + } + + public static final int DATABASE_URI_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object databaseUri_ = ""; + + /** + * + * + *
                                +   * The fully qualified uri of the database to send AdaptMessage to.
                                +   * 
                                + * + * string database_uri = 1; + * + * @return The databaseUri. + */ + @java.lang.Override + public java.lang.String getDatabaseUri() { + java.lang.Object ref = databaseUri_; + 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(); + databaseUri_ = s; + return s; + } + } + + /** + * + * + *
                                +   * The fully qualified uri of the database to send AdaptMessage to.
                                +   * 
                                + * + * string database_uri = 1; + * + * @return The bytes for databaseUri. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDatabaseUriBytes() { + java.lang.Object ref = databaseUri_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + databaseUri_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PROTOCOL_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object protocol_ = ""; + + /** + * + * + *
                                +   * The protocol to use for the request.
                                +   * 
                                + * + * string protocol = 2; + * + * @return The protocol. + */ + @java.lang.Override + public java.lang.String getProtocol() { + java.lang.Object ref = protocol_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + protocol_ = s; + return s; + } + } + + /** + * + * + *
                                +   * The protocol to use for the request.
                                +   * 
                                + * + * string protocol = 2; + * + * @return The bytes for protocol. + */ + @java.lang.Override + public com.google.protobuf.ByteString getProtocolBytes() { + java.lang.Object ref = protocol_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + protocol_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PAYLOAD_FIELD_NUMBER = 3; + private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * The payload of the request.
                                +   * 
                                + * + * bytes payload = 3; + * + * @return The payload. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + + public static final int ATTACHMENTS_FIELD_NUMBER = 4; + + private static final class AttachmentsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AdaptMessageAction_AttachmentsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField attachments_; + + private com.google.protobuf.MapField + internalGetAttachments() { + if (attachments_ == null) { + return com.google.protobuf.MapField.emptyMapField(AttachmentsDefaultEntryHolder.defaultEntry); + } + return attachments_; + } + + public int getAttachmentsCount() { + return internalGetAttachments().getMap().size(); + } + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public boolean containsAttachments(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttachments().getMap().containsKey(key); + } + + /** Use {@link #getAttachmentsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttachments() { + return getAttachmentsMap(); + } + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public java.util.Map getAttachmentsMap() { + return internalGetAttachments().getMap(); + } + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttachmentsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public java.lang.String getAttachmentsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int QUERY_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object query_ = ""; + + /** + * + * + *
                                +   * The query to be sent with the request.
                                +   * 
                                + * + * string query = 5; + * + * @return The query. + */ + @java.lang.Override + public java.lang.String getQuery() { + java.lang.Object ref = query_; + 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(); + query_ = s; + return s; + } + } + + /** + * + * + *
                                +   * The query to be sent with the request.
                                +   * 
                                + * + * string query = 5; + * + * @return The bytes for query. + */ + @java.lang.Override + public com.google.protobuf.ByteString getQueryBytes() { + java.lang.Object ref = query_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + query_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PREPARE_THEN_EXECUTE_FIELD_NUMBER = 6; + private boolean prepareThenExecute_ = false; + + /** + * + * + *
                                +   * If true, the action will send a Prepare request first and then an
                                +   * Execute request right after to execute the query. This is only supported
                                +   * for Cloud Client path.
                                +   * 
                                + * + * bool prepare_then_execute = 6; + * + * @return The prepareThenExecute. + */ + @java.lang.Override + public boolean getPrepareThenExecute() { + return prepareThenExecute_; + } + + 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.GeneratedMessage.isStringEmpty(databaseUri_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, databaseUri_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(protocol_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, protocol_); + } + if (!payload_.isEmpty()) { + output.writeBytes(3, payload_); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetAttachments(), AttachmentsDefaultEntryHolder.defaultEntry, 4); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(query_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, query_); + } + if (prepareThenExecute_ != false) { + output.writeBool(6, prepareThenExecute_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseUri_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, databaseUri_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(protocol_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, protocol_); + } + if (!payload_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(3, payload_); + } + for (java.util.Map.Entry entry : + internalGetAttachments().getMap().entrySet()) { + com.google.protobuf.MapEntry attachments__ = + AttachmentsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, attachments__); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(query_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, query_); + } + if (prepareThenExecute_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, prepareThenExecute_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.executor.v1.AdaptMessageAction)) { + return super.equals(obj); + } + com.google.spanner.executor.v1.AdaptMessageAction other = + (com.google.spanner.executor.v1.AdaptMessageAction) obj; + + if (!getDatabaseUri().equals(other.getDatabaseUri())) return false; + if (!getProtocol().equals(other.getProtocol())) return false; + if (!getPayload().equals(other.getPayload())) return false; + if (!internalGetAttachments().equals(other.internalGetAttachments())) return false; + if (!getQuery().equals(other.getQuery())) return false; + if (getPrepareThenExecute() != other.getPrepareThenExecute()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DATABASE_URI_FIELD_NUMBER; + hash = (53 * hash) + getDatabaseUri().hashCode(); + hash = (37 * hash) + PROTOCOL_FIELD_NUMBER; + hash = (53 * hash) + getProtocol().hashCode(); + hash = (37 * hash) + PAYLOAD_FIELD_NUMBER; + hash = (53 * hash) + getPayload().hashCode(); + if (!internalGetAttachments().getMap().isEmpty()) { + hash = (37 * hash) + ATTACHMENTS_FIELD_NUMBER; + hash = (53 * hash) + internalGetAttachments().hashCode(); + } + hash = (37 * hash) + QUERY_FIELD_NUMBER; + hash = (53 * hash) + getQuery().hashCode(); + hash = (37 * hash) + PREPARE_THEN_EXECUTE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getPrepareThenExecute()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.executor.v1.AdaptMessageAction 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * A single Adapt message request.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.executor.v1.AdaptMessageAction} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.AdaptMessageAction) + com.google.spanner.executor.v1.AdaptMessageActionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AdaptMessageAction_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetAttachments(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetMutableAttachments(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AdaptMessageAction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.executor.v1.AdaptMessageAction.class, + com.google.spanner.executor.v1.AdaptMessageAction.Builder.class); + } + + // Construct using com.google.spanner.executor.v1.AdaptMessageAction.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + databaseUri_ = ""; + protocol_ = ""; + payload_ = com.google.protobuf.ByteString.EMPTY; + internalGetMutableAttachments().clear(); + query_ = ""; + prepareThenExecute_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AdaptMessageAction_descriptor; + } + + @java.lang.Override + public com.google.spanner.executor.v1.AdaptMessageAction getDefaultInstanceForType() { + return com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.executor.v1.AdaptMessageAction build() { + com.google.spanner.executor.v1.AdaptMessageAction result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.executor.v1.AdaptMessageAction buildPartial() { + com.google.spanner.executor.v1.AdaptMessageAction result = + new com.google.spanner.executor.v1.AdaptMessageAction(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.executor.v1.AdaptMessageAction result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.databaseUri_ = databaseUri_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.protocol_ = protocol_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.payload_ = payload_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.attachments_ = internalGetAttachments(); + result.attachments_.makeImmutable(); + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.query_ = query_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.prepareThenExecute_ = prepareThenExecute_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.executor.v1.AdaptMessageAction) { + return mergeFrom((com.google.spanner.executor.v1.AdaptMessageAction) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.executor.v1.AdaptMessageAction other) { + if (other == com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance()) + return this; + if (!other.getDatabaseUri().isEmpty()) { + databaseUri_ = other.databaseUri_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getProtocol().isEmpty()) { + protocol_ = other.protocol_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getPayload().isEmpty()) { + setPayload(other.getPayload()); + } + internalGetMutableAttachments().mergeFrom(other.internalGetAttachments()); + bitField0_ |= 0x00000008; + if (!other.getQuery().isEmpty()) { + query_ = other.query_; + bitField0_ |= 0x00000010; + onChanged(); + } + if (other.getPrepareThenExecute() != false) { + setPrepareThenExecute(other.getPrepareThenExecute()); + } + 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: + { + databaseUri_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + protocol_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + payload_ = input.readBytes(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + com.google.protobuf.MapEntry attachments__ = + input.readMessage( + AttachmentsDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableAttachments() + .getMutableMap() + .put(attachments__.getKey(), attachments__.getValue()); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + query_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 48: + { + prepareThenExecute_ = input.readBool(); + bitField0_ |= 0x00000020; + break; + } // case 48 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object databaseUri_ = ""; + + /** + * + * + *
                                +     * The fully qualified uri of the database to send AdaptMessage to.
                                +     * 
                                + * + * string database_uri = 1; + * + * @return The databaseUri. + */ + public java.lang.String getDatabaseUri() { + java.lang.Object ref = databaseUri_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + databaseUri_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * The fully qualified uri of the database to send AdaptMessage to.
                                +     * 
                                + * + * string database_uri = 1; + * + * @return The bytes for databaseUri. + */ + public com.google.protobuf.ByteString getDatabaseUriBytes() { + java.lang.Object ref = databaseUri_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + databaseUri_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * The fully qualified uri of the database to send AdaptMessage to.
                                +     * 
                                + * + * string database_uri = 1; + * + * @param value The databaseUri to set. + * @return This builder for chaining. + */ + public Builder setDatabaseUri(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + databaseUri_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The fully qualified uri of the database to send AdaptMessage to.
                                +     * 
                                + * + * string database_uri = 1; + * + * @return This builder for chaining. + */ + public Builder clearDatabaseUri() { + databaseUri_ = getDefaultInstance().getDatabaseUri(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The fully qualified uri of the database to send AdaptMessage to.
                                +     * 
                                + * + * string database_uri = 1; + * + * @param value The bytes for databaseUri to set. + * @return This builder for chaining. + */ + public Builder setDatabaseUriBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + databaseUri_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object protocol_ = ""; + + /** + * + * + *
                                +     * The protocol to use for the request.
                                +     * 
                                + * + * string protocol = 2; + * + * @return The protocol. + */ + public java.lang.String getProtocol() { + java.lang.Object ref = protocol_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + protocol_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * The protocol to use for the request.
                                +     * 
                                + * + * string protocol = 2; + * + * @return The bytes for protocol. + */ + public com.google.protobuf.ByteString getProtocolBytes() { + java.lang.Object ref = protocol_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + protocol_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * The protocol to use for the request.
                                +     * 
                                + * + * string protocol = 2; + * + * @param value The protocol to set. + * @return This builder for chaining. + */ + public Builder setProtocol(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + protocol_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The protocol to use for the request.
                                +     * 
                                + * + * string protocol = 2; + * + * @return This builder for chaining. + */ + public Builder clearProtocol() { + protocol_ = getDefaultInstance().getProtocol(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The protocol to use for the request.
                                +     * 
                                + * + * string protocol = 2; + * + * @param value The bytes for protocol to set. + * @return This builder for chaining. + */ + public Builder setProtocolBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + protocol_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * The payload of the request.
                                +     * 
                                + * + * bytes payload = 3; + * + * @return The payload. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + + /** + * + * + *
                                +     * The payload of the request.
                                +     * 
                                + * + * bytes payload = 3; + * + * @param value The payload to set. + * @return This builder for chaining. + */ + public Builder setPayload(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + payload_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The payload of the request.
                                +     * 
                                + * + * bytes payload = 3; + * + * @return This builder for chaining. + */ + public Builder clearPayload() { + bitField0_ = (bitField0_ & ~0x00000004); + payload_ = getDefaultInstance().getPayload(); + onChanged(); + return this; + } + + private com.google.protobuf.MapField attachments_; + + private com.google.protobuf.MapField + internalGetAttachments() { + if (attachments_ == null) { + return com.google.protobuf.MapField.emptyMapField( + AttachmentsDefaultEntryHolder.defaultEntry); + } + return attachments_; + } + + private com.google.protobuf.MapField + internalGetMutableAttachments() { + if (attachments_ == null) { + attachments_ = + com.google.protobuf.MapField.newMapField(AttachmentsDefaultEntryHolder.defaultEntry); + } + if (!attachments_.isMutable()) { + attachments_ = attachments_.copy(); + } + bitField0_ |= 0x00000008; + onChanged(); + return attachments_; + } + + public int getAttachmentsCount() { + return internalGetAttachments().getMap().size(); + } + + /** + * + * + *
                                +     * Attachments to be sent with the request.
                                +     * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public boolean containsAttachments(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttachments().getMap().containsKey(key); + } + + /** Use {@link #getAttachmentsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttachments() { + return getAttachmentsMap(); + } + + /** + * + * + *
                                +     * Attachments to be sent with the request.
                                +     * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public java.util.Map getAttachmentsMap() { + return internalGetAttachments().getMap(); + } + + /** + * + * + *
                                +     * Attachments to be sent with the request.
                                +     * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttachmentsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
                                +     * Attachments to be sent with the request.
                                +     * 
                                + * + * map<string, string> attachments = 4; + */ + @java.lang.Override + public java.lang.String getAttachmentsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearAttachments() { + bitField0_ = (bitField0_ & ~0x00000008); + internalGetMutableAttachments().getMutableMap().clear(); + return this; + } + + /** + * + * + *
                                +     * Attachments to be sent with the request.
                                +     * 
                                + * + * map<string, string> attachments = 4; + */ + public Builder removeAttachments(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableAttachments().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableAttachments() { + bitField0_ |= 0x00000008; + return internalGetMutableAttachments().getMutableMap(); + } + + /** + * + * + *
                                +     * Attachments to be sent with the request.
                                +     * 
                                + * + * map<string, string> attachments = 4; + */ + public Builder putAttachments(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableAttachments().getMutableMap().put(key, value); + bitField0_ |= 0x00000008; + return this; + } + + /** + * + * + *
                                +     * Attachments to be sent with the request.
                                +     * 
                                + * + * map<string, string> attachments = 4; + */ + public Builder putAllAttachments(java.util.Map values) { + internalGetMutableAttachments().getMutableMap().putAll(values); + bitField0_ |= 0x00000008; + return this; + } + + private java.lang.Object query_ = ""; + + /** + * + * + *
                                +     * The query to be sent with the request.
                                +     * 
                                + * + * string query = 5; + * + * @return The query. + */ + public java.lang.String getQuery() { + java.lang.Object ref = query_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + query_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * The query to be sent with the request.
                                +     * 
                                + * + * string query = 5; + * + * @return The bytes for query. + */ + public com.google.protobuf.ByteString getQueryBytes() { + java.lang.Object ref = query_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + query_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * The query to be sent with the request.
                                +     * 
                                + * + * string query = 5; + * + * @param value The query to set. + * @return This builder for chaining. + */ + public Builder setQuery(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + query_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The query to be sent with the request.
                                +     * 
                                + * + * string query = 5; + * + * @return This builder for chaining. + */ + public Builder clearQuery() { + query_ = getDefaultInstance().getQuery(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The query to be sent with the request.
                                +     * 
                                + * + * string query = 5; + * + * @param value The bytes for query to set. + * @return This builder for chaining. + */ + public Builder setQueryBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + query_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + private boolean prepareThenExecute_; + + /** + * + * + *
                                +     * If true, the action will send a Prepare request first and then an
                                +     * Execute request right after to execute the query. This is only supported
                                +     * for Cloud Client path.
                                +     * 
                                + * + * bool prepare_then_execute = 6; + * + * @return The prepareThenExecute. + */ + @java.lang.Override + public boolean getPrepareThenExecute() { + return prepareThenExecute_; + } + + /** + * + * + *
                                +     * If true, the action will send a Prepare request first and then an
                                +     * Execute request right after to execute the query. This is only supported
                                +     * for Cloud Client path.
                                +     * 
                                + * + * bool prepare_then_execute = 6; + * + * @param value The prepareThenExecute to set. + * @return This builder for chaining. + */ + public Builder setPrepareThenExecute(boolean value) { + + prepareThenExecute_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If true, the action will send a Prepare request first and then an
                                +     * Execute request right after to execute the query. This is only supported
                                +     * for Cloud Client path.
                                +     * 
                                + * + * bool prepare_then_execute = 6; + * + * @return This builder for chaining. + */ + public Builder clearPrepareThenExecute() { + bitField0_ = (bitField0_ & ~0x00000020); + prepareThenExecute_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.AdaptMessageAction) + } + + // @@protoc_insertion_point(class_scope:google.spanner.executor.v1.AdaptMessageAction) + private static final com.google.spanner.executor.v1.AdaptMessageAction DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.executor.v1.AdaptMessageAction(); + } + + public static com.google.spanner.executor.v1.AdaptMessageAction getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AdaptMessageAction parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.executor.v1.AdaptMessageAction getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdaptMessageActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdaptMessageActionOrBuilder.java new file mode 100644 index 00000000000..b398ea3de82 --- /dev/null +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdaptMessageActionOrBuilder.java @@ -0,0 +1,197 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.executor.v1; + +@com.google.protobuf.Generated +public interface AdaptMessageActionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.AdaptMessageAction) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * The fully qualified uri of the database to send AdaptMessage to.
                                +   * 
                                + * + * string database_uri = 1; + * + * @return The databaseUri. + */ + java.lang.String getDatabaseUri(); + + /** + * + * + *
                                +   * The fully qualified uri of the database to send AdaptMessage to.
                                +   * 
                                + * + * string database_uri = 1; + * + * @return The bytes for databaseUri. + */ + com.google.protobuf.ByteString getDatabaseUriBytes(); + + /** + * + * + *
                                +   * The protocol to use for the request.
                                +   * 
                                + * + * string protocol = 2; + * + * @return The protocol. + */ + java.lang.String getProtocol(); + + /** + * + * + *
                                +   * The protocol to use for the request.
                                +   * 
                                + * + * string protocol = 2; + * + * @return The bytes for protocol. + */ + com.google.protobuf.ByteString getProtocolBytes(); + + /** + * + * + *
                                +   * The payload of the request.
                                +   * 
                                + * + * bytes payload = 3; + * + * @return The payload. + */ + com.google.protobuf.ByteString getPayload(); + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + int getAttachmentsCount(); + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + boolean containsAttachments(java.lang.String key); + + /** Use {@link #getAttachmentsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getAttachments(); + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + java.util.Map getAttachmentsMap(); + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + /* nullable */ + java.lang.String getAttachmentsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
                                +   * Attachments to be sent with the request.
                                +   * 
                                + * + * map<string, string> attachments = 4; + */ + java.lang.String getAttachmentsOrThrow(java.lang.String key); + + /** + * + * + *
                                +   * The query to be sent with the request.
                                +   * 
                                + * + * string query = 5; + * + * @return The query. + */ + java.lang.String getQuery(); + + /** + * + * + *
                                +   * The query to be sent with the request.
                                +   * 
                                + * + * string query = 5; + * + * @return The bytes for query. + */ + com.google.protobuf.ByteString getQueryBytes(); + + /** + * + * + *
                                +   * If true, the action will send a Prepare request first and then an
                                +   * Execute request right after to execute the query. This is only supported
                                +   * for Cloud Client path.
                                +   * 
                                + * + * bool prepare_then_execute = 6; + * + * @return The prepareThenExecute. + */ + boolean getPrepareThenExecute(); +} diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AddSplitPointsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AddSplitPointsAction.java new file mode 100644 index 00000000000..b9c8edfdda6 --- /dev/null +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AddSplitPointsAction.java @@ -0,0 +1,1498 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.executor.v1; + +/** + * + * + *
                                + * Action that adds a split point to a Cloud Spanner database.
                                + * 
                                + * + * Protobuf type {@code google.spanner.executor.v1.AddSplitPointsAction} + */ +@com.google.protobuf.Generated +public final class AddSplitPointsAction extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.AddSplitPointsAction) + AddSplitPointsActionOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AddSplitPointsAction"); + } + + // Use AddSplitPointsAction.newBuilder() to construct. + private AddSplitPointsAction(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AddSplitPointsAction() { + projectId_ = ""; + instanceId_ = ""; + databaseId_ = ""; + splitPoints_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AddSplitPointsAction_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AddSplitPointsAction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.executor.v1.AddSplitPointsAction.class, + com.google.spanner.executor.v1.AddSplitPointsAction.Builder.class); + } + + public static final int PROJECT_ID_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object projectId_ = ""; + + /** + * + * + *
                                +   * Cloud project ID, e.g. "spanner-cloud-systest".
                                +   * 
                                + * + * string project_id = 1; + * + * @return The projectId. + */ + @java.lang.Override + public java.lang.String getProjectId() { + java.lang.Object ref = projectId_; + 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(); + projectId_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Cloud project ID, e.g. "spanner-cloud-systest".
                                +   * 
                                + * + * string project_id = 1; + * + * @return The bytes for projectId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getProjectIdBytes() { + java.lang.Object ref = projectId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + projectId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int INSTANCE_ID_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object instanceId_ = ""; + + /** + * + * + *
                                +   * Cloud instance ID (not path), e.g. "test-instance".
                                +   * 
                                + * + * string instance_id = 2; + * + * @return The instanceId. + */ + @java.lang.Override + public java.lang.String getInstanceId() { + java.lang.Object ref = instanceId_; + 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(); + instanceId_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Cloud instance ID (not path), e.g. "test-instance".
                                +   * 
                                + * + * string instance_id = 2; + * + * @return The bytes for instanceId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getInstanceIdBytes() { + java.lang.Object ref = instanceId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + instanceId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DATABASE_ID_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object databaseId_ = ""; + + /** + * + * + *
                                +   * Cloud database ID (not full path), e.g. "db0".
                                +   * 
                                + * + * string database_id = 3; + * + * @return The databaseId. + */ + @java.lang.Override + public java.lang.String getDatabaseId() { + java.lang.Object ref = databaseId_; + 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(); + databaseId_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Cloud database ID (not full path), e.g. "db0".
                                +   * 
                                + * + * string database_id = 3; + * + * @return The bytes for databaseId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDatabaseIdBytes() { + java.lang.Object ref = databaseId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + databaseId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SPLIT_POINTS_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private java.util.List splitPoints_; + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + @java.lang.Override + public java.util.List getSplitPointsList() { + return splitPoints_; + } + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + @java.lang.Override + public java.util.List + getSplitPointsOrBuilderList() { + return splitPoints_; + } + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + @java.lang.Override + public int getSplitPointsCount() { + return splitPoints_.size(); + } + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPoints getSplitPoints(int index) { + return splitPoints_.get(index); + } + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.SplitPointsOrBuilder getSplitPointsOrBuilder( + int index) { + return splitPoints_.get(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, databaseId_); + } + for (int i = 0; i < splitPoints_.size(); i++) { + output.writeMessage(4, splitPoints_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, databaseId_); + } + for (int i = 0; i < splitPoints_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, splitPoints_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.executor.v1.AddSplitPointsAction)) { + return super.equals(obj); + } + com.google.spanner.executor.v1.AddSplitPointsAction other = + (com.google.spanner.executor.v1.AddSplitPointsAction) obj; + + if (!getProjectId().equals(other.getProjectId())) return false; + if (!getInstanceId().equals(other.getInstanceId())) return false; + if (!getDatabaseId().equals(other.getDatabaseId())) return false; + if (!getSplitPointsList().equals(other.getSplitPointsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PROJECT_ID_FIELD_NUMBER; + hash = (53 * hash) + getProjectId().hashCode(); + hash = (37 * hash) + INSTANCE_ID_FIELD_NUMBER; + hash = (53 * hash) + getInstanceId().hashCode(); + hash = (37 * hash) + DATABASE_ID_FIELD_NUMBER; + hash = (53 * hash) + getDatabaseId().hashCode(); + if (getSplitPointsCount() > 0) { + hash = (37 * hash) + SPLIT_POINTS_FIELD_NUMBER; + hash = (53 * hash) + getSplitPointsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.executor.v1.AddSplitPointsAction 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * Action that adds a split point to a Cloud Spanner database.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.executor.v1.AddSplitPointsAction} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.AddSplitPointsAction) + com.google.spanner.executor.v1.AddSplitPointsActionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AddSplitPointsAction_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AddSplitPointsAction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.executor.v1.AddSplitPointsAction.class, + com.google.spanner.executor.v1.AddSplitPointsAction.Builder.class); + } + + // Construct using com.google.spanner.executor.v1.AddSplitPointsAction.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + projectId_ = ""; + instanceId_ = ""; + databaseId_ = ""; + if (splitPointsBuilder_ == null) { + splitPoints_ = java.util.Collections.emptyList(); + } else { + splitPoints_ = null; + splitPointsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.executor.v1.CloudExecutorProto + .internal_static_google_spanner_executor_v1_AddSplitPointsAction_descriptor; + } + + @java.lang.Override + public com.google.spanner.executor.v1.AddSplitPointsAction getDefaultInstanceForType() { + return com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.executor.v1.AddSplitPointsAction build() { + com.google.spanner.executor.v1.AddSplitPointsAction result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.executor.v1.AddSplitPointsAction buildPartial() { + com.google.spanner.executor.v1.AddSplitPointsAction result = + new com.google.spanner.executor.v1.AddSplitPointsAction(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + com.google.spanner.executor.v1.AddSplitPointsAction result) { + if (splitPointsBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + splitPoints_ = java.util.Collections.unmodifiableList(splitPoints_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.splitPoints_ = splitPoints_; + } else { + result.splitPoints_ = splitPointsBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.executor.v1.AddSplitPointsAction result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.projectId_ = projectId_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.instanceId_ = instanceId_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.databaseId_ = databaseId_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.executor.v1.AddSplitPointsAction) { + return mergeFrom((com.google.spanner.executor.v1.AddSplitPointsAction) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.executor.v1.AddSplitPointsAction other) { + if (other == com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance()) + return this; + if (!other.getProjectId().isEmpty()) { + projectId_ = other.projectId_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getInstanceId().isEmpty()) { + instanceId_ = other.instanceId_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getDatabaseId().isEmpty()) { + databaseId_ = other.databaseId_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (splitPointsBuilder_ == null) { + if (!other.splitPoints_.isEmpty()) { + if (splitPoints_.isEmpty()) { + splitPoints_ = other.splitPoints_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureSplitPointsIsMutable(); + splitPoints_.addAll(other.splitPoints_); + } + onChanged(); + } + } else { + if (!other.splitPoints_.isEmpty()) { + if (splitPointsBuilder_.isEmpty()) { + splitPointsBuilder_.dispose(); + splitPointsBuilder_ = null; + splitPoints_ = other.splitPoints_; + bitField0_ = (bitField0_ & ~0x00000008); + splitPointsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSplitPointsFieldBuilder() + : null; + } else { + splitPointsBuilder_.addAllMessages(other.splitPoints_); + } + } + } + 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: + { + projectId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + instanceId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + databaseId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + com.google.spanner.admin.database.v1.SplitPoints m = + input.readMessage( + com.google.spanner.admin.database.v1.SplitPoints.parser(), + extensionRegistry); + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.add(m); + } else { + splitPointsBuilder_.addMessage(m); + } + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object projectId_ = ""; + + /** + * + * + *
                                +     * Cloud project ID, e.g. "spanner-cloud-systest".
                                +     * 
                                + * + * string project_id = 1; + * + * @return The projectId. + */ + public java.lang.String getProjectId() { + java.lang.Object ref = projectId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + projectId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Cloud project ID, e.g. "spanner-cloud-systest".
                                +     * 
                                + * + * string project_id = 1; + * + * @return The bytes for projectId. + */ + public com.google.protobuf.ByteString getProjectIdBytes() { + java.lang.Object ref = projectId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + projectId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Cloud project ID, e.g. "spanner-cloud-systest".
                                +     * 
                                + * + * string project_id = 1; + * + * @param value The projectId to set. + * @return This builder for chaining. + */ + public Builder setProjectId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + projectId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Cloud project ID, e.g. "spanner-cloud-systest".
                                +     * 
                                + * + * string project_id = 1; + * + * @return This builder for chaining. + */ + public Builder clearProjectId() { + projectId_ = getDefaultInstance().getProjectId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Cloud project ID, e.g. "spanner-cloud-systest".
                                +     * 
                                + * + * string project_id = 1; + * + * @param value The bytes for projectId to set. + * @return This builder for chaining. + */ + public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + projectId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object instanceId_ = ""; + + /** + * + * + *
                                +     * Cloud instance ID (not path), e.g. "test-instance".
                                +     * 
                                + * + * string instance_id = 2; + * + * @return The instanceId. + */ + public java.lang.String getInstanceId() { + java.lang.Object ref = instanceId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + instanceId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Cloud instance ID (not path), e.g. "test-instance".
                                +     * 
                                + * + * string instance_id = 2; + * + * @return The bytes for instanceId. + */ + public com.google.protobuf.ByteString getInstanceIdBytes() { + java.lang.Object ref = instanceId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + instanceId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Cloud instance ID (not path), e.g. "test-instance".
                                +     * 
                                + * + * string instance_id = 2; + * + * @param value The instanceId to set. + * @return This builder for chaining. + */ + public Builder setInstanceId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + instanceId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Cloud instance ID (not path), e.g. "test-instance".
                                +     * 
                                + * + * string instance_id = 2; + * + * @return This builder for chaining. + */ + public Builder clearInstanceId() { + instanceId_ = getDefaultInstance().getInstanceId(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Cloud instance ID (not path), e.g. "test-instance".
                                +     * 
                                + * + * string instance_id = 2; + * + * @param value The bytes for instanceId to set. + * @return This builder for chaining. + */ + public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + instanceId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object databaseId_ = ""; + + /** + * + * + *
                                +     * Cloud database ID (not full path), e.g. "db0".
                                +     * 
                                + * + * string database_id = 3; + * + * @return The databaseId. + */ + public java.lang.String getDatabaseId() { + java.lang.Object ref = databaseId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + databaseId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Cloud database ID (not full path), e.g. "db0".
                                +     * 
                                + * + * string database_id = 3; + * + * @return The bytes for databaseId. + */ + public com.google.protobuf.ByteString getDatabaseIdBytes() { + java.lang.Object ref = databaseId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + databaseId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Cloud database ID (not full path), e.g. "db0".
                                +     * 
                                + * + * string database_id = 3; + * + * @param value The databaseId to set. + * @return This builder for chaining. + */ + public Builder setDatabaseId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + databaseId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Cloud database ID (not full path), e.g. "db0".
                                +     * 
                                + * + * string database_id = 3; + * + * @return This builder for chaining. + */ + public Builder clearDatabaseId() { + databaseId_ = getDefaultInstance().getDatabaseId(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Cloud database ID (not full path), e.g. "db0".
                                +     * 
                                + * + * string database_id = 3; + * + * @param value The bytes for databaseId to set. + * @return This builder for chaining. + */ + public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + databaseId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.util.List splitPoints_ = + java.util.Collections.emptyList(); + + private void ensureSplitPointsIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + splitPoints_ = + new java.util.ArrayList(splitPoints_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints, + com.google.spanner.admin.database.v1.SplitPoints.Builder, + com.google.spanner.admin.database.v1.SplitPointsOrBuilder> + splitPointsBuilder_; + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public java.util.List getSplitPointsList() { + if (splitPointsBuilder_ == null) { + return java.util.Collections.unmodifiableList(splitPoints_); + } else { + return splitPointsBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public int getSplitPointsCount() { + if (splitPointsBuilder_ == null) { + return splitPoints_.size(); + } else { + return splitPointsBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public com.google.spanner.admin.database.v1.SplitPoints getSplitPoints(int index) { + if (splitPointsBuilder_ == null) { + return splitPoints_.get(index); + } else { + return splitPointsBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder setSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints value) { + if (splitPointsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSplitPointsIsMutable(); + splitPoints_.set(index, value); + onChanged(); + } else { + splitPointsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder setSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints.Builder builderForValue) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.set(index, builderForValue.build()); + onChanged(); + } else { + splitPointsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder addSplitPoints(com.google.spanner.admin.database.v1.SplitPoints value) { + if (splitPointsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSplitPointsIsMutable(); + splitPoints_.add(value); + onChanged(); + } else { + splitPointsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder addSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints value) { + if (splitPointsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSplitPointsIsMutable(); + splitPoints_.add(index, value); + onChanged(); + } else { + splitPointsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder addSplitPoints( + com.google.spanner.admin.database.v1.SplitPoints.Builder builderForValue) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.add(builderForValue.build()); + onChanged(); + } else { + splitPointsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder addSplitPoints( + int index, com.google.spanner.admin.database.v1.SplitPoints.Builder builderForValue) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.add(index, builderForValue.build()); + onChanged(); + } else { + splitPointsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder addAllSplitPoints( + java.lang.Iterable values) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, splitPoints_); + onChanged(); + } else { + splitPointsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder clearSplitPoints() { + if (splitPointsBuilder_ == null) { + splitPoints_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + splitPointsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public Builder removeSplitPoints(int index) { + if (splitPointsBuilder_ == null) { + ensureSplitPointsIsMutable(); + splitPoints_.remove(index); + onChanged(); + } else { + splitPointsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public com.google.spanner.admin.database.v1.SplitPoints.Builder getSplitPointsBuilder( + int index) { + return internalGetSplitPointsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public com.google.spanner.admin.database.v1.SplitPointsOrBuilder getSplitPointsOrBuilder( + int index) { + if (splitPointsBuilder_ == null) { + return splitPoints_.get(index); + } else { + return splitPointsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public java.util.List + getSplitPointsOrBuilderList() { + if (splitPointsBuilder_ != null) { + return splitPointsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(splitPoints_); + } + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public com.google.spanner.admin.database.v1.SplitPoints.Builder addSplitPointsBuilder() { + return internalGetSplitPointsFieldBuilder() + .addBuilder(com.google.spanner.admin.database.v1.SplitPoints.getDefaultInstance()); + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public com.google.spanner.admin.database.v1.SplitPoints.Builder addSplitPointsBuilder( + int index) { + return internalGetSplitPointsFieldBuilder() + .addBuilder(index, com.google.spanner.admin.database.v1.SplitPoints.getDefaultInstance()); + } + + /** + * + * + *
                                +     * The split points to add.
                                +     * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + public java.util.List + getSplitPointsBuilderList() { + return internalGetSplitPointsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints, + com.google.spanner.admin.database.v1.SplitPoints.Builder, + com.google.spanner.admin.database.v1.SplitPointsOrBuilder> + internalGetSplitPointsFieldBuilder() { + if (splitPointsBuilder_ == null) { + splitPointsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.admin.database.v1.SplitPoints, + com.google.spanner.admin.database.v1.SplitPoints.Builder, + com.google.spanner.admin.database.v1.SplitPointsOrBuilder>( + splitPoints_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean()); + splitPoints_ = null; + } + return splitPointsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.AddSplitPointsAction) + } + + // @@protoc_insertion_point(class_scope:google.spanner.executor.v1.AddSplitPointsAction) + private static final com.google.spanner.executor.v1.AddSplitPointsAction DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.executor.v1.AddSplitPointsAction(); + } + + public static com.google.spanner.executor.v1.AddSplitPointsAction getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AddSplitPointsAction parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.executor.v1.AddSplitPointsAction getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AddSplitPointsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AddSplitPointsActionOrBuilder.java new file mode 100644 index 00000000000..08060154f81 --- /dev/null +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AddSplitPointsActionOrBuilder.java @@ -0,0 +1,162 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.executor.v1; + +@com.google.protobuf.Generated +public interface AddSplitPointsActionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.AddSplitPointsAction) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * Cloud project ID, e.g. "spanner-cloud-systest".
                                +   * 
                                + * + * string project_id = 1; + * + * @return The projectId. + */ + java.lang.String getProjectId(); + + /** + * + * + *
                                +   * Cloud project ID, e.g. "spanner-cloud-systest".
                                +   * 
                                + * + * string project_id = 1; + * + * @return The bytes for projectId. + */ + com.google.protobuf.ByteString getProjectIdBytes(); + + /** + * + * + *
                                +   * Cloud instance ID (not path), e.g. "test-instance".
                                +   * 
                                + * + * string instance_id = 2; + * + * @return The instanceId. + */ + java.lang.String getInstanceId(); + + /** + * + * + *
                                +   * Cloud instance ID (not path), e.g. "test-instance".
                                +   * 
                                + * + * string instance_id = 2; + * + * @return The bytes for instanceId. + */ + com.google.protobuf.ByteString getInstanceIdBytes(); + + /** + * + * + *
                                +   * Cloud database ID (not full path), e.g. "db0".
                                +   * 
                                + * + * string database_id = 3; + * + * @return The databaseId. + */ + java.lang.String getDatabaseId(); + + /** + * + * + *
                                +   * Cloud database ID (not full path), e.g. "db0".
                                +   * 
                                + * + * string database_id = 3; + * + * @return The bytes for databaseId. + */ + com.google.protobuf.ByteString getDatabaseIdBytes(); + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + java.util.List getSplitPointsList(); + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + com.google.spanner.admin.database.v1.SplitPoints getSplitPoints(int index); + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + int getSplitPointsCount(); + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + java.util.List + getSplitPointsOrBuilderList(); + + /** + * + * + *
                                +   * The split points to add.
                                +   * 
                                + * + * repeated .google.spanner.admin.database.v1.SplitPoints split_points = 4; + */ + com.google.spanner.admin.database.v1.SplitPointsOrBuilder getSplitPointsOrBuilder(int index); +} diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java index 2e8b4650264..8aa0c64cbcc 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.executor.v1.AdminAction} */ -public final class AdminAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class AdminAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.AdminAction) AdminActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AdminAction"); + } + // Use AdminAction.newBuilder() to construct. - private AdminAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private AdminAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private AdminAction() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AdminAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_AdminAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_AdminAction_fieldAccessorTable @@ -99,12 +106,14 @@ public enum ActionCase GET_OPERATION(25), CANCEL_OPERATION(26), CHANGE_QUORUM_CLOUD_DATABASE(28), + ADD_SPLIT_POINTS(29), ACTION_NOT_SET(0); private final int value; private ActionCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -173,6 +182,8 @@ public static ActionCase forNumber(int value) { return CANCEL_OPERATION; case 28: return CHANGE_QUORUM_CLOUD_DATABASE; + case 29: + return ADD_SPLIT_POINTS; case 0: return ACTION_NOT_SET; default: @@ -190,6 +201,7 @@ public ActionCase getActionCase() { } public static final int CREATE_USER_INSTANCE_CONFIG_FIELD_NUMBER = 1; + /** * * @@ -207,6 +219,7 @@ public ActionCase getActionCase() { public boolean hasCreateUserInstanceConfig() { return actionCase_ == 1; } + /** * * @@ -228,6 +241,7 @@ public boolean hasCreateUserInstanceConfig() { } return com.google.spanner.executor.v1.CreateUserInstanceConfigAction.getDefaultInstance(); } + /** * * @@ -249,6 +263,7 @@ public boolean hasCreateUserInstanceConfig() { } public static final int UPDATE_USER_INSTANCE_CONFIG_FIELD_NUMBER = 2; + /** * * @@ -266,6 +281,7 @@ public boolean hasCreateUserInstanceConfig() { public boolean hasUpdateUserInstanceConfig() { return actionCase_ == 2; } + /** * * @@ -287,6 +303,7 @@ public boolean hasUpdateUserInstanceConfig() { } return com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.getDefaultInstance(); } + /** * * @@ -308,6 +325,7 @@ public boolean hasUpdateUserInstanceConfig() { } public static final int DELETE_USER_INSTANCE_CONFIG_FIELD_NUMBER = 3; + /** * * @@ -325,6 +343,7 @@ public boolean hasUpdateUserInstanceConfig() { public boolean hasDeleteUserInstanceConfig() { return actionCase_ == 3; } + /** * * @@ -346,6 +365,7 @@ public boolean hasDeleteUserInstanceConfig() { } return com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.getDefaultInstance(); } + /** * * @@ -367,6 +387,7 @@ public boolean hasDeleteUserInstanceConfig() { } public static final int GET_CLOUD_INSTANCE_CONFIG_FIELD_NUMBER = 4; + /** * * @@ -383,6 +404,7 @@ public boolean hasDeleteUserInstanceConfig() { public boolean hasGetCloudInstanceConfig() { return actionCase_ == 4; } + /** * * @@ -402,6 +424,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceConfigAction getGetCloudIn } return com.google.spanner.executor.v1.GetCloudInstanceConfigAction.getDefaultInstance(); } + /** * * @@ -422,6 +445,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceConfigAction getGetCloudIn } public static final int LIST_INSTANCE_CONFIGS_FIELD_NUMBER = 5; + /** * * @@ -438,6 +462,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceConfigAction getGetCloudIn public boolean hasListInstanceConfigs() { return actionCase_ == 5; } + /** * * @@ -457,6 +482,7 @@ public com.google.spanner.executor.v1.ListCloudInstanceConfigsAction getListInst } return com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.getDefaultInstance(); } + /** * * @@ -477,6 +503,7 @@ public com.google.spanner.executor.v1.ListCloudInstanceConfigsAction getListInst } public static final int CREATE_CLOUD_INSTANCE_FIELD_NUMBER = 6; + /** * * @@ -492,6 +519,7 @@ public com.google.spanner.executor.v1.ListCloudInstanceConfigsAction getListInst public boolean hasCreateCloudInstance() { return actionCase_ == 6; } + /** * * @@ -510,6 +538,7 @@ public com.google.spanner.executor.v1.CreateCloudInstanceAction getCreateCloudIn } return com.google.spanner.executor.v1.CreateCloudInstanceAction.getDefaultInstance(); } + /** * * @@ -529,6 +558,7 @@ public com.google.spanner.executor.v1.CreateCloudInstanceAction getCreateCloudIn } public static final int UPDATE_CLOUD_INSTANCE_FIELD_NUMBER = 7; + /** * * @@ -544,6 +574,7 @@ public com.google.spanner.executor.v1.CreateCloudInstanceAction getCreateCloudIn public boolean hasUpdateCloudInstance() { return actionCase_ == 7; } + /** * * @@ -562,6 +593,7 @@ public com.google.spanner.executor.v1.UpdateCloudInstanceAction getUpdateCloudIn } return com.google.spanner.executor.v1.UpdateCloudInstanceAction.getDefaultInstance(); } + /** * * @@ -581,6 +613,7 @@ public com.google.spanner.executor.v1.UpdateCloudInstanceAction getUpdateCloudIn } public static final int DELETE_CLOUD_INSTANCE_FIELD_NUMBER = 8; + /** * * @@ -596,6 +629,7 @@ public com.google.spanner.executor.v1.UpdateCloudInstanceAction getUpdateCloudIn public boolean hasDeleteCloudInstance() { return actionCase_ == 8; } + /** * * @@ -614,6 +648,7 @@ public com.google.spanner.executor.v1.DeleteCloudInstanceAction getDeleteCloudIn } return com.google.spanner.executor.v1.DeleteCloudInstanceAction.getDefaultInstance(); } + /** * * @@ -633,6 +668,7 @@ public com.google.spanner.executor.v1.DeleteCloudInstanceAction getDeleteCloudIn } public static final int LIST_CLOUD_INSTANCES_FIELD_NUMBER = 9; + /** * * @@ -648,6 +684,7 @@ public com.google.spanner.executor.v1.DeleteCloudInstanceAction getDeleteCloudIn public boolean hasListCloudInstances() { return actionCase_ == 9; } + /** * * @@ -666,6 +703,7 @@ public com.google.spanner.executor.v1.ListCloudInstancesAction getListCloudInsta } return com.google.spanner.executor.v1.ListCloudInstancesAction.getDefaultInstance(); } + /** * * @@ -685,6 +723,7 @@ public com.google.spanner.executor.v1.ListCloudInstancesAction getListCloudInsta } public static final int GET_CLOUD_INSTANCE_FIELD_NUMBER = 10; + /** * * @@ -700,6 +739,7 @@ public com.google.spanner.executor.v1.ListCloudInstancesAction getListCloudInsta public boolean hasGetCloudInstance() { return actionCase_ == 10; } + /** * * @@ -718,6 +758,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceAction getGetCloudInstance } return com.google.spanner.executor.v1.GetCloudInstanceAction.getDefaultInstance(); } + /** * * @@ -737,6 +778,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceAction getGetCloudInstance } public static final int CREATE_CLOUD_DATABASE_FIELD_NUMBER = 11; + /** * * @@ -752,6 +794,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceAction getGetCloudInstance public boolean hasCreateCloudDatabase() { return actionCase_ == 11; } + /** * * @@ -770,6 +813,7 @@ public com.google.spanner.executor.v1.CreateCloudDatabaseAction getCreateCloudDa } return com.google.spanner.executor.v1.CreateCloudDatabaseAction.getDefaultInstance(); } + /** * * @@ -789,6 +833,7 @@ public com.google.spanner.executor.v1.CreateCloudDatabaseAction getCreateCloudDa } public static final int UPDATE_CLOUD_DATABASE_DDL_FIELD_NUMBER = 12; + /** * * @@ -805,6 +850,7 @@ public com.google.spanner.executor.v1.CreateCloudDatabaseAction getCreateCloudDa public boolean hasUpdateCloudDatabaseDdl() { return actionCase_ == 12; } + /** * * @@ -824,6 +870,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction getUpdateClou } return com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.getDefaultInstance(); } + /** * * @@ -844,6 +891,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction getUpdateClou } public static final int UPDATE_CLOUD_DATABASE_FIELD_NUMBER = 27; + /** * * @@ -859,6 +907,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction getUpdateClou public boolean hasUpdateCloudDatabase() { return actionCase_ == 27; } + /** * * @@ -877,6 +926,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseAction getUpdateCloudDa } return com.google.spanner.executor.v1.UpdateCloudDatabaseAction.getDefaultInstance(); } + /** * * @@ -896,6 +946,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseAction getUpdateCloudDa } public static final int DROP_CLOUD_DATABASE_FIELD_NUMBER = 13; + /** * * @@ -911,6 +962,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseAction getUpdateCloudDa public boolean hasDropCloudDatabase() { return actionCase_ == 13; } + /** * * @@ -929,6 +981,7 @@ public com.google.spanner.executor.v1.DropCloudDatabaseAction getDropCloudDataba } return com.google.spanner.executor.v1.DropCloudDatabaseAction.getDefaultInstance(); } + /** * * @@ -948,6 +1001,7 @@ public com.google.spanner.executor.v1.DropCloudDatabaseAction getDropCloudDataba } public static final int LIST_CLOUD_DATABASES_FIELD_NUMBER = 14; + /** * * @@ -963,6 +1017,7 @@ public com.google.spanner.executor.v1.DropCloudDatabaseAction getDropCloudDataba public boolean hasListCloudDatabases() { return actionCase_ == 14; } + /** * * @@ -981,6 +1036,7 @@ public com.google.spanner.executor.v1.ListCloudDatabasesAction getListCloudDatab } return com.google.spanner.executor.v1.ListCloudDatabasesAction.getDefaultInstance(); } + /** * * @@ -1000,6 +1056,7 @@ public com.google.spanner.executor.v1.ListCloudDatabasesAction getListCloudDatab } public static final int LIST_CLOUD_DATABASE_OPERATIONS_FIELD_NUMBER = 15; + /** * * @@ -1017,6 +1074,7 @@ public com.google.spanner.executor.v1.ListCloudDatabasesAction getListCloudDatab public boolean hasListCloudDatabaseOperations() { return actionCase_ == 15; } + /** * * @@ -1038,6 +1096,7 @@ public boolean hasListCloudDatabaseOperations() { } return com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction.getDefaultInstance(); } + /** * * @@ -1059,6 +1118,7 @@ public boolean hasListCloudDatabaseOperations() { } public static final int RESTORE_CLOUD_DATABASE_FIELD_NUMBER = 16; + /** * * @@ -1075,6 +1135,7 @@ public boolean hasListCloudDatabaseOperations() { public boolean hasRestoreCloudDatabase() { return actionCase_ == 16; } + /** * * @@ -1094,6 +1155,7 @@ public com.google.spanner.executor.v1.RestoreCloudDatabaseAction getRestoreCloud } return com.google.spanner.executor.v1.RestoreCloudDatabaseAction.getDefaultInstance(); } + /** * * @@ -1114,6 +1176,7 @@ public com.google.spanner.executor.v1.RestoreCloudDatabaseAction getRestoreCloud } public static final int GET_CLOUD_DATABASE_FIELD_NUMBER = 17; + /** * * @@ -1129,6 +1192,7 @@ public com.google.spanner.executor.v1.RestoreCloudDatabaseAction getRestoreCloud public boolean hasGetCloudDatabase() { return actionCase_ == 17; } + /** * * @@ -1147,6 +1211,7 @@ public com.google.spanner.executor.v1.GetCloudDatabaseAction getGetCloudDatabase } return com.google.spanner.executor.v1.GetCloudDatabaseAction.getDefaultInstance(); } + /** * * @@ -1166,6 +1231,7 @@ public com.google.spanner.executor.v1.GetCloudDatabaseAction getGetCloudDatabase } public static final int CREATE_CLOUD_BACKUP_FIELD_NUMBER = 18; + /** * * @@ -1181,6 +1247,7 @@ public com.google.spanner.executor.v1.GetCloudDatabaseAction getGetCloudDatabase public boolean hasCreateCloudBackup() { return actionCase_ == 18; } + /** * * @@ -1199,6 +1266,7 @@ public com.google.spanner.executor.v1.CreateCloudBackupAction getCreateCloudBack } return com.google.spanner.executor.v1.CreateCloudBackupAction.getDefaultInstance(); } + /** * * @@ -1218,6 +1286,7 @@ public com.google.spanner.executor.v1.CreateCloudBackupAction getCreateCloudBack } public static final int COPY_CLOUD_BACKUP_FIELD_NUMBER = 19; + /** * * @@ -1233,6 +1302,7 @@ public com.google.spanner.executor.v1.CreateCloudBackupAction getCreateCloudBack public boolean hasCopyCloudBackup() { return actionCase_ == 19; } + /** * * @@ -1251,6 +1321,7 @@ public com.google.spanner.executor.v1.CopyCloudBackupAction getCopyCloudBackup() } return com.google.spanner.executor.v1.CopyCloudBackupAction.getDefaultInstance(); } + /** * * @@ -1270,6 +1341,7 @@ public com.google.spanner.executor.v1.CopyCloudBackupAction getCopyCloudBackup() } public static final int GET_CLOUD_BACKUP_FIELD_NUMBER = 20; + /** * * @@ -1285,6 +1357,7 @@ public com.google.spanner.executor.v1.CopyCloudBackupAction getCopyCloudBackup() public boolean hasGetCloudBackup() { return actionCase_ == 20; } + /** * * @@ -1303,6 +1376,7 @@ public com.google.spanner.executor.v1.GetCloudBackupAction getGetCloudBackup() { } return com.google.spanner.executor.v1.GetCloudBackupAction.getDefaultInstance(); } + /** * * @@ -1321,6 +1395,7 @@ public com.google.spanner.executor.v1.GetCloudBackupActionOrBuilder getGetCloudB } public static final int UPDATE_CLOUD_BACKUP_FIELD_NUMBER = 21; + /** * * @@ -1336,6 +1411,7 @@ public com.google.spanner.executor.v1.GetCloudBackupActionOrBuilder getGetCloudB public boolean hasUpdateCloudBackup() { return actionCase_ == 21; } + /** * * @@ -1354,6 +1430,7 @@ public com.google.spanner.executor.v1.UpdateCloudBackupAction getUpdateCloudBack } return com.google.spanner.executor.v1.UpdateCloudBackupAction.getDefaultInstance(); } + /** * * @@ -1373,6 +1450,7 @@ public com.google.spanner.executor.v1.UpdateCloudBackupAction getUpdateCloudBack } public static final int DELETE_CLOUD_BACKUP_FIELD_NUMBER = 22; + /** * * @@ -1388,6 +1466,7 @@ public com.google.spanner.executor.v1.UpdateCloudBackupAction getUpdateCloudBack public boolean hasDeleteCloudBackup() { return actionCase_ == 22; } + /** * * @@ -1406,6 +1485,7 @@ public com.google.spanner.executor.v1.DeleteCloudBackupAction getDeleteCloudBack } return com.google.spanner.executor.v1.DeleteCloudBackupAction.getDefaultInstance(); } + /** * * @@ -1425,6 +1505,7 @@ public com.google.spanner.executor.v1.DeleteCloudBackupAction getDeleteCloudBack } public static final int LIST_CLOUD_BACKUPS_FIELD_NUMBER = 23; + /** * * @@ -1440,6 +1521,7 @@ public com.google.spanner.executor.v1.DeleteCloudBackupAction getDeleteCloudBack public boolean hasListCloudBackups() { return actionCase_ == 23; } + /** * * @@ -1458,6 +1540,7 @@ public com.google.spanner.executor.v1.ListCloudBackupsAction getListCloudBackups } return com.google.spanner.executor.v1.ListCloudBackupsAction.getDefaultInstance(); } + /** * * @@ -1477,6 +1560,7 @@ public com.google.spanner.executor.v1.ListCloudBackupsAction getListCloudBackups } public static final int LIST_CLOUD_BACKUP_OPERATIONS_FIELD_NUMBER = 24; + /** * * @@ -1494,6 +1578,7 @@ public com.google.spanner.executor.v1.ListCloudBackupsAction getListCloudBackups public boolean hasListCloudBackupOperations() { return actionCase_ == 24; } + /** * * @@ -1515,6 +1600,7 @@ public boolean hasListCloudBackupOperations() { } return com.google.spanner.executor.v1.ListCloudBackupOperationsAction.getDefaultInstance(); } + /** * * @@ -1536,6 +1622,7 @@ public boolean hasListCloudBackupOperations() { } public static final int GET_OPERATION_FIELD_NUMBER = 25; + /** * * @@ -1551,6 +1638,7 @@ public boolean hasListCloudBackupOperations() { public boolean hasGetOperation() { return actionCase_ == 25; } + /** * * @@ -1569,6 +1657,7 @@ public com.google.spanner.executor.v1.GetOperationAction getGetOperation() { } return com.google.spanner.executor.v1.GetOperationAction.getDefaultInstance(); } + /** * * @@ -1587,6 +1676,7 @@ public com.google.spanner.executor.v1.GetOperationActionOrBuilder getGetOperatio } public static final int CANCEL_OPERATION_FIELD_NUMBER = 26; + /** * * @@ -1602,6 +1692,7 @@ public com.google.spanner.executor.v1.GetOperationActionOrBuilder getGetOperatio public boolean hasCancelOperation() { return actionCase_ == 26; } + /** * * @@ -1620,6 +1711,7 @@ public com.google.spanner.executor.v1.CancelOperationAction getCancelOperation() } return com.google.spanner.executor.v1.CancelOperationAction.getDefaultInstance(); } + /** * * @@ -1639,6 +1731,7 @@ public com.google.spanner.executor.v1.CancelOperationAction getCancelOperation() } public static final int CHANGE_QUORUM_CLOUD_DATABASE_FIELD_NUMBER = 28; + /** * * @@ -1656,6 +1749,7 @@ public com.google.spanner.executor.v1.CancelOperationAction getCancelOperation() public boolean hasChangeQuorumCloudDatabase() { return actionCase_ == 28; } + /** * * @@ -1677,6 +1771,7 @@ public boolean hasChangeQuorumCloudDatabase() { } return com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.getDefaultInstance(); } + /** * * @@ -1697,6 +1792,60 @@ public boolean hasChangeQuorumCloudDatabase() { return com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.getDefaultInstance(); } + public static final int ADD_SPLIT_POINTS_FIELD_NUMBER = 29; + + /** + * + * + *
                                +   * Action that adds splits to a Cloud Spanner database.
                                +   * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + * + * @return Whether the addSplitPoints field is set. + */ + @java.lang.Override + public boolean hasAddSplitPoints() { + return actionCase_ == 29; + } + + /** + * + * + *
                                +   * Action that adds splits to a Cloud Spanner database.
                                +   * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + * + * @return The addSplitPoints. + */ + @java.lang.Override + public com.google.spanner.executor.v1.AddSplitPointsAction getAddSplitPoints() { + if (actionCase_ == 29) { + return (com.google.spanner.executor.v1.AddSplitPointsAction) action_; + } + return com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Action that adds splits to a Cloud Spanner database.
                                +   * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + @java.lang.Override + public com.google.spanner.executor.v1.AddSplitPointsActionOrBuilder getAddSplitPointsOrBuilder() { + if (actionCase_ == 29) { + return (com.google.spanner.executor.v1.AddSplitPointsAction) action_; + } + return com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -1803,6 +1952,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeMessage( 28, (com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction) action_); } + if (actionCase_ == 29) { + output.writeMessage(29, (com.google.spanner.executor.v1.AddSplitPointsAction) action_); + } getUnknownFields().writeTo(output); } @@ -1952,6 +2104,11 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeMessageSize( 28, (com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction) action_); } + if (actionCase_ == 29) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 29, (com.google.spanner.executor.v1.AddSplitPointsAction) action_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -2060,6 +2217,9 @@ public boolean equals(final java.lang.Object obj) { if (!getChangeQuorumCloudDatabase().equals(other.getChangeQuorumCloudDatabase())) return false; break; + case 29: + if (!getAddSplitPoints().equals(other.getAddSplitPoints())) return false; + break; case 0: default: } @@ -2187,6 +2347,10 @@ public int hashCode() { hash = (37 * hash) + CHANGE_QUORUM_CLOUD_DATABASE_FIELD_NUMBER; hash = (53 * hash) + getChangeQuorumCloudDatabase().hashCode(); break; + case 29: + hash = (37 * hash) + ADD_SPLIT_POINTS_FIELD_NUMBER; + hash = (53 * hash) + getAddSplitPoints().hashCode(); + break; case 0: default: } @@ -2232,38 +2396,38 @@ public static com.google.spanner.executor.v1.AdminAction parseFrom( public static com.google.spanner.executor.v1.AdminAction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.AdminAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.AdminAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.AdminAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.AdminAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.AdminAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2286,10 +2450,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2300,7 +2465,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.AdminAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.AdminAction) com.google.spanner.executor.v1.AdminActionOrBuilder { @@ -2310,7 +2475,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_AdminAction_fieldAccessorTable @@ -2322,7 +2487,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.AdminAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -2414,6 +2579,9 @@ public Builder clear() { if (changeQuorumCloudDatabaseBuilder_ != null) { changeQuorumCloudDatabaseBuilder_.clear(); } + if (addSplitPointsBuilder_ != null) { + addSplitPointsBuilder_.clear(); + } actionCase_ = 0; action_ = null; return this; @@ -2542,39 +2710,9 @@ private void buildPartialOneofs(com.google.spanner.executor.v1.AdminAction resul if (actionCase_ == 28 && changeQuorumCloudDatabaseBuilder_ != null) { result.action_ = changeQuorumCloudDatabaseBuilder_.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); + if (actionCase_ == 29 && addSplitPointsBuilder_ != null) { + result.action_ = addSplitPointsBuilder_.build(); + } } @java.lang.Override @@ -2730,6 +2868,11 @@ public Builder mergeFrom(com.google.spanner.executor.v1.AdminAction other) { mergeChangeQuorumCloudDatabase(other.getChangeQuorumCloudDatabase()); break; } + case ADD_SPLIT_POINTS: + { + mergeAddSplitPoints(other.getAddSplitPoints()); + break; + } case ACTION_NOT_SET: { break; @@ -2764,195 +2907,214 @@ public Builder mergeFrom( case 10: { input.readMessage( - getCreateUserInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetCreateUserInstanceConfigFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 1; break; } // case 10 case 18: { input.readMessage( - getUpdateUserInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetUpdateUserInstanceConfigFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 2; break; } // case 18 case 26: { input.readMessage( - getDeleteUserInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetDeleteUserInstanceConfigFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 3; break; } // case 26 case 34: { input.readMessage( - getGetCloudInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetGetCloudInstanceConfigFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 4; break; } // case 34 case 42: { input.readMessage( - getListInstanceConfigsFieldBuilder().getBuilder(), extensionRegistry); + internalGetListInstanceConfigsFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 5; break; } // case 42 case 50: { input.readMessage( - getCreateCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); + internalGetCreateCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 6; break; } // case 50 case 58: { input.readMessage( - getUpdateCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); + internalGetUpdateCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 7; break; } // case 58 case 66: { input.readMessage( - getDeleteCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); + internalGetDeleteCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 8; break; } // case 66 case 74: { input.readMessage( - getListCloudInstancesFieldBuilder().getBuilder(), extensionRegistry); + internalGetListCloudInstancesFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 9; break; } // case 74 case 82: { input.readMessage( - getGetCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); + internalGetGetCloudInstanceFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 10; break; } // case 82 case 90: { input.readMessage( - getCreateCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); + internalGetCreateCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 11; break; } // case 90 case 98: { input.readMessage( - getUpdateCloudDatabaseDdlFieldBuilder().getBuilder(), extensionRegistry); + internalGetUpdateCloudDatabaseDdlFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 12; break; } // case 98 case 106: { input.readMessage( - getDropCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); + internalGetDropCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 13; break; } // case 106 case 114: { input.readMessage( - getListCloudDatabasesFieldBuilder().getBuilder(), extensionRegistry); + internalGetListCloudDatabasesFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 14; break; } // case 114 case 122: { input.readMessage( - getListCloudDatabaseOperationsFieldBuilder().getBuilder(), extensionRegistry); + internalGetListCloudDatabaseOperationsFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 15; break; } // case 122 case 130: { input.readMessage( - getRestoreCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); + internalGetRestoreCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 16; break; } // case 130 case 138: { input.readMessage( - getGetCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); + internalGetGetCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 17; break; } // case 138 case 146: { input.readMessage( - getCreateCloudBackupFieldBuilder().getBuilder(), extensionRegistry); + internalGetCreateCloudBackupFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 18; break; } // case 146 case 154: { - input.readMessage(getCopyCloudBackupFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCopyCloudBackupFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 19; break; } // case 154 case 162: { - input.readMessage(getGetCloudBackupFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetGetCloudBackupFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 20; break; } // case 162 case 170: { input.readMessage( - getUpdateCloudBackupFieldBuilder().getBuilder(), extensionRegistry); + internalGetUpdateCloudBackupFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 21; break; } // case 170 case 178: { input.readMessage( - getDeleteCloudBackupFieldBuilder().getBuilder(), extensionRegistry); + internalGetDeleteCloudBackupFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 22; break; } // case 178 case 186: { input.readMessage( - getListCloudBackupsFieldBuilder().getBuilder(), extensionRegistry); + internalGetListCloudBackupsFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 23; break; } // case 186 case 194: { input.readMessage( - getListCloudBackupOperationsFieldBuilder().getBuilder(), extensionRegistry); + internalGetListCloudBackupOperationsFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 24; break; } // case 194 case 202: { - input.readMessage(getGetOperationFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetGetOperationFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 25; break; } // case 202 case 210: { - input.readMessage(getCancelOperationFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCancelOperationFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 26; break; } // case 210 case 218: { input.readMessage( - getUpdateCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); + internalGetUpdateCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 27; break; } // case 218 case 226: { input.readMessage( - getChangeQuorumCloudDatabaseFieldBuilder().getBuilder(), extensionRegistry); + internalGetChangeQuorumCloudDatabaseFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 28; break; } // case 226 + case 234: + { + input.readMessage( + internalGetAddSplitPointsFieldBuilder().getBuilder(), extensionRegistry); + actionCase_ = 29; + break; + } // case 234 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -2986,11 +3148,12 @@ public Builder clearAction() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateUserInstanceConfigAction, com.google.spanner.executor.v1.CreateUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.CreateUserInstanceConfigActionOrBuilder> createUserInstanceConfigBuilder_; + /** * * @@ -3008,6 +3171,7 @@ public Builder clearAction() { public boolean hasCreateUserInstanceConfig() { return actionCase_ == 1; } + /** * * @@ -3036,6 +3200,7 @@ public boolean hasCreateUserInstanceConfig() { return com.google.spanner.executor.v1.CreateUserInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3061,6 +3226,7 @@ public Builder setCreateUserInstanceConfig( actionCase_ = 1; return this; } + /** * * @@ -3083,6 +3249,7 @@ public Builder setCreateUserInstanceConfig( actionCase_ = 1; return this; } + /** * * @@ -3120,6 +3287,7 @@ public Builder mergeCreateUserInstanceConfig( actionCase_ = 1; return this; } + /** * * @@ -3147,6 +3315,7 @@ public Builder clearCreateUserInstanceConfig() { } return this; } + /** * * @@ -3160,8 +3329,9 @@ public Builder clearCreateUserInstanceConfig() { */ public com.google.spanner.executor.v1.CreateUserInstanceConfigAction.Builder getCreateUserInstanceConfigBuilder() { - return getCreateUserInstanceConfigFieldBuilder().getBuilder(); + return internalGetCreateUserInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -3185,6 +3355,7 @@ public Builder clearCreateUserInstanceConfig() { return com.google.spanner.executor.v1.CreateUserInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3196,18 +3367,18 @@ public Builder clearCreateUserInstanceConfig() { * .google.spanner.executor.v1.CreateUserInstanceConfigAction create_user_instance_config = 1; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateUserInstanceConfigAction, com.google.spanner.executor.v1.CreateUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.CreateUserInstanceConfigActionOrBuilder> - getCreateUserInstanceConfigFieldBuilder() { + internalGetCreateUserInstanceConfigFieldBuilder() { if (createUserInstanceConfigBuilder_ == null) { if (!(actionCase_ == 1)) { action_ = com.google.spanner.executor.v1.CreateUserInstanceConfigAction.getDefaultInstance(); } createUserInstanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateUserInstanceConfigAction, com.google.spanner.executor.v1.CreateUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.CreateUserInstanceConfigActionOrBuilder>( @@ -3221,11 +3392,12 @@ public Builder clearCreateUserInstanceConfig() { return createUserInstanceConfigBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateUserInstanceConfigAction, com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.UpdateUserInstanceConfigActionOrBuilder> updateUserInstanceConfigBuilder_; + /** * * @@ -3243,6 +3415,7 @@ public Builder clearCreateUserInstanceConfig() { public boolean hasUpdateUserInstanceConfig() { return actionCase_ == 2; } + /** * * @@ -3271,6 +3444,7 @@ public boolean hasUpdateUserInstanceConfig() { return com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3296,6 +3470,7 @@ public Builder setUpdateUserInstanceConfig( actionCase_ = 2; return this; } + /** * * @@ -3318,6 +3493,7 @@ public Builder setUpdateUserInstanceConfig( actionCase_ = 2; return this; } + /** * * @@ -3355,6 +3531,7 @@ public Builder mergeUpdateUserInstanceConfig( actionCase_ = 2; return this; } + /** * * @@ -3382,6 +3559,7 @@ public Builder clearUpdateUserInstanceConfig() { } return this; } + /** * * @@ -3395,8 +3573,9 @@ public Builder clearUpdateUserInstanceConfig() { */ public com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.Builder getUpdateUserInstanceConfigBuilder() { - return getUpdateUserInstanceConfigFieldBuilder().getBuilder(); + return internalGetUpdateUserInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -3420,6 +3599,7 @@ public Builder clearUpdateUserInstanceConfig() { return com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3431,18 +3611,18 @@ public Builder clearUpdateUserInstanceConfig() { * .google.spanner.executor.v1.UpdateUserInstanceConfigAction update_user_instance_config = 2; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateUserInstanceConfigAction, com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.UpdateUserInstanceConfigActionOrBuilder> - getUpdateUserInstanceConfigFieldBuilder() { + internalGetUpdateUserInstanceConfigFieldBuilder() { if (updateUserInstanceConfigBuilder_ == null) { if (!(actionCase_ == 2)) { action_ = com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.getDefaultInstance(); } updateUserInstanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateUserInstanceConfigAction, com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.UpdateUserInstanceConfigActionOrBuilder>( @@ -3456,11 +3636,12 @@ public Builder clearUpdateUserInstanceConfig() { return updateUserInstanceConfigBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteUserInstanceConfigAction, com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.DeleteUserInstanceConfigActionOrBuilder> deleteUserInstanceConfigBuilder_; + /** * * @@ -3478,6 +3659,7 @@ public Builder clearUpdateUserInstanceConfig() { public boolean hasDeleteUserInstanceConfig() { return actionCase_ == 3; } + /** * * @@ -3506,6 +3688,7 @@ public boolean hasDeleteUserInstanceConfig() { return com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3531,6 +3714,7 @@ public Builder setDeleteUserInstanceConfig( actionCase_ = 3; return this; } + /** * * @@ -3553,6 +3737,7 @@ public Builder setDeleteUserInstanceConfig( actionCase_ = 3; return this; } + /** * * @@ -3590,6 +3775,7 @@ public Builder mergeDeleteUserInstanceConfig( actionCase_ = 3; return this; } + /** * * @@ -3617,6 +3803,7 @@ public Builder clearDeleteUserInstanceConfig() { } return this; } + /** * * @@ -3630,8 +3817,9 @@ public Builder clearDeleteUserInstanceConfig() { */ public com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.Builder getDeleteUserInstanceConfigBuilder() { - return getDeleteUserInstanceConfigFieldBuilder().getBuilder(); + return internalGetDeleteUserInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -3655,6 +3843,7 @@ public Builder clearDeleteUserInstanceConfig() { return com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3666,18 +3855,18 @@ public Builder clearDeleteUserInstanceConfig() { * .google.spanner.executor.v1.DeleteUserInstanceConfigAction delete_user_instance_config = 3; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteUserInstanceConfigAction, com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.DeleteUserInstanceConfigActionOrBuilder> - getDeleteUserInstanceConfigFieldBuilder() { + internalGetDeleteUserInstanceConfigFieldBuilder() { if (deleteUserInstanceConfigBuilder_ == null) { if (!(actionCase_ == 3)) { action_ = com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.getDefaultInstance(); } deleteUserInstanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteUserInstanceConfigAction, com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.Builder, com.google.spanner.executor.v1.DeleteUserInstanceConfigActionOrBuilder>( @@ -3691,11 +3880,12 @@ public Builder clearDeleteUserInstanceConfig() { return deleteUserInstanceConfigBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudInstanceConfigAction, com.google.spanner.executor.v1.GetCloudInstanceConfigAction.Builder, com.google.spanner.executor.v1.GetCloudInstanceConfigActionOrBuilder> getCloudInstanceConfigBuilder_; + /** * * @@ -3712,6 +3902,7 @@ public Builder clearDeleteUserInstanceConfig() { public boolean hasGetCloudInstanceConfig() { return actionCase_ == 4; } + /** * * @@ -3738,6 +3929,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceConfigAction getGetCloudIn return com.google.spanner.executor.v1.GetCloudInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3762,6 +3954,7 @@ public Builder setGetCloudInstanceConfig( actionCase_ = 4; return this; } + /** * * @@ -3783,6 +3976,7 @@ public Builder setGetCloudInstanceConfig( actionCase_ = 4; return this; } + /** * * @@ -3819,6 +4013,7 @@ public Builder mergeGetCloudInstanceConfig( actionCase_ = 4; return this; } + /** * * @@ -3845,6 +4040,7 @@ public Builder clearGetCloudInstanceConfig() { } return this; } + /** * * @@ -3857,8 +4053,9 @@ public Builder clearGetCloudInstanceConfig() { */ public com.google.spanner.executor.v1.GetCloudInstanceConfigAction.Builder getGetCloudInstanceConfigBuilder() { - return getGetCloudInstanceConfigFieldBuilder().getBuilder(); + return internalGetGetCloudInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -3881,6 +4078,7 @@ public Builder clearGetCloudInstanceConfig() { return com.google.spanner.executor.v1.GetCloudInstanceConfigAction.getDefaultInstance(); } } + /** * * @@ -3891,18 +4089,18 @@ public Builder clearGetCloudInstanceConfig() { * .google.spanner.executor.v1.GetCloudInstanceConfigAction get_cloud_instance_config = 4; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudInstanceConfigAction, com.google.spanner.executor.v1.GetCloudInstanceConfigAction.Builder, com.google.spanner.executor.v1.GetCloudInstanceConfigActionOrBuilder> - getGetCloudInstanceConfigFieldBuilder() { + internalGetGetCloudInstanceConfigFieldBuilder() { if (getCloudInstanceConfigBuilder_ == null) { if (!(actionCase_ == 4)) { action_ = com.google.spanner.executor.v1.GetCloudInstanceConfigAction.getDefaultInstance(); } getCloudInstanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudInstanceConfigAction, com.google.spanner.executor.v1.GetCloudInstanceConfigAction.Builder, com.google.spanner.executor.v1.GetCloudInstanceConfigActionOrBuilder>( @@ -3916,11 +4114,12 @@ public Builder clearGetCloudInstanceConfig() { return getCloudInstanceConfigBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudInstanceConfigsAction, com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.Builder, com.google.spanner.executor.v1.ListCloudInstanceConfigsActionOrBuilder> listInstanceConfigsBuilder_; + /** * * @@ -3937,6 +4136,7 @@ public Builder clearGetCloudInstanceConfig() { public boolean hasListInstanceConfigs() { return actionCase_ == 5; } + /** * * @@ -3963,6 +4163,7 @@ public com.google.spanner.executor.v1.ListCloudInstanceConfigsAction getListInst return com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.getDefaultInstance(); } } + /** * * @@ -3987,6 +4188,7 @@ public Builder setListInstanceConfigs( actionCase_ = 5; return this; } + /** * * @@ -4008,6 +4210,7 @@ public Builder setListInstanceConfigs( actionCase_ = 5; return this; } + /** * * @@ -4044,6 +4247,7 @@ public Builder mergeListInstanceConfigs( actionCase_ = 5; return this; } + /** * * @@ -4070,6 +4274,7 @@ public Builder clearListInstanceConfigs() { } return this; } + /** * * @@ -4082,8 +4287,9 @@ public Builder clearListInstanceConfigs() { */ public com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.Builder getListInstanceConfigsBuilder() { - return getListInstanceConfigsFieldBuilder().getBuilder(); + return internalGetListInstanceConfigsFieldBuilder().getBuilder(); } + /** * * @@ -4106,6 +4312,7 @@ public Builder clearListInstanceConfigs() { return com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.getDefaultInstance(); } } + /** * * @@ -4116,18 +4323,18 @@ public Builder clearListInstanceConfigs() { * .google.spanner.executor.v1.ListCloudInstanceConfigsAction list_instance_configs = 5; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudInstanceConfigsAction, com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.Builder, com.google.spanner.executor.v1.ListCloudInstanceConfigsActionOrBuilder> - getListInstanceConfigsFieldBuilder() { + internalGetListInstanceConfigsFieldBuilder() { if (listInstanceConfigsBuilder_ == null) { if (!(actionCase_ == 5)) { action_ = com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.getDefaultInstance(); } listInstanceConfigsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudInstanceConfigsAction, com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.Builder, com.google.spanner.executor.v1.ListCloudInstanceConfigsActionOrBuilder>( @@ -4141,11 +4348,12 @@ public Builder clearListInstanceConfigs() { return listInstanceConfigsBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudInstanceAction, com.google.spanner.executor.v1.CreateCloudInstanceAction.Builder, com.google.spanner.executor.v1.CreateCloudInstanceActionOrBuilder> createCloudInstanceBuilder_; + /** * * @@ -4161,6 +4369,7 @@ public Builder clearListInstanceConfigs() { public boolean hasCreateCloudInstance() { return actionCase_ == 6; } + /** * * @@ -4186,6 +4395,7 @@ public com.google.spanner.executor.v1.CreateCloudInstanceAction getCreateCloudIn return com.google.spanner.executor.v1.CreateCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -4209,6 +4419,7 @@ public Builder setCreateCloudInstance( actionCase_ = 6; return this; } + /** * * @@ -4229,6 +4440,7 @@ public Builder setCreateCloudInstance( actionCase_ = 6; return this; } + /** * * @@ -4263,6 +4475,7 @@ public Builder mergeCreateCloudInstance( actionCase_ = 6; return this; } + /** * * @@ -4288,6 +4501,7 @@ public Builder clearCreateCloudInstance() { } return this; } + /** * * @@ -4299,8 +4513,9 @@ public Builder clearCreateCloudInstance() { */ public com.google.spanner.executor.v1.CreateCloudInstanceAction.Builder getCreateCloudInstanceBuilder() { - return getCreateCloudInstanceFieldBuilder().getBuilder(); + return internalGetCreateCloudInstanceFieldBuilder().getBuilder(); } + /** * * @@ -4322,6 +4537,7 @@ public Builder clearCreateCloudInstance() { return com.google.spanner.executor.v1.CreateCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -4331,17 +4547,17 @@ public Builder clearCreateCloudInstance() { * * .google.spanner.executor.v1.CreateCloudInstanceAction create_cloud_instance = 6; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudInstanceAction, com.google.spanner.executor.v1.CreateCloudInstanceAction.Builder, com.google.spanner.executor.v1.CreateCloudInstanceActionOrBuilder> - getCreateCloudInstanceFieldBuilder() { + internalGetCreateCloudInstanceFieldBuilder() { if (createCloudInstanceBuilder_ == null) { if (!(actionCase_ == 6)) { action_ = com.google.spanner.executor.v1.CreateCloudInstanceAction.getDefaultInstance(); } createCloudInstanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudInstanceAction, com.google.spanner.executor.v1.CreateCloudInstanceAction.Builder, com.google.spanner.executor.v1.CreateCloudInstanceActionOrBuilder>( @@ -4355,11 +4571,12 @@ public Builder clearCreateCloudInstance() { return createCloudInstanceBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudInstanceAction, com.google.spanner.executor.v1.UpdateCloudInstanceAction.Builder, com.google.spanner.executor.v1.UpdateCloudInstanceActionOrBuilder> updateCloudInstanceBuilder_; + /** * * @@ -4375,6 +4592,7 @@ public Builder clearCreateCloudInstance() { public boolean hasUpdateCloudInstance() { return actionCase_ == 7; } + /** * * @@ -4400,6 +4618,7 @@ public com.google.spanner.executor.v1.UpdateCloudInstanceAction getUpdateCloudIn return com.google.spanner.executor.v1.UpdateCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -4423,6 +4642,7 @@ public Builder setUpdateCloudInstance( actionCase_ = 7; return this; } + /** * * @@ -4443,6 +4663,7 @@ public Builder setUpdateCloudInstance( actionCase_ = 7; return this; } + /** * * @@ -4477,6 +4698,7 @@ public Builder mergeUpdateCloudInstance( actionCase_ = 7; return this; } + /** * * @@ -4502,6 +4724,7 @@ public Builder clearUpdateCloudInstance() { } return this; } + /** * * @@ -4513,8 +4736,9 @@ public Builder clearUpdateCloudInstance() { */ public com.google.spanner.executor.v1.UpdateCloudInstanceAction.Builder getUpdateCloudInstanceBuilder() { - return getUpdateCloudInstanceFieldBuilder().getBuilder(); + return internalGetUpdateCloudInstanceFieldBuilder().getBuilder(); } + /** * * @@ -4536,6 +4760,7 @@ public Builder clearUpdateCloudInstance() { return com.google.spanner.executor.v1.UpdateCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -4545,17 +4770,17 @@ public Builder clearUpdateCloudInstance() { * * .google.spanner.executor.v1.UpdateCloudInstanceAction update_cloud_instance = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudInstanceAction, com.google.spanner.executor.v1.UpdateCloudInstanceAction.Builder, com.google.spanner.executor.v1.UpdateCloudInstanceActionOrBuilder> - getUpdateCloudInstanceFieldBuilder() { + internalGetUpdateCloudInstanceFieldBuilder() { if (updateCloudInstanceBuilder_ == null) { if (!(actionCase_ == 7)) { action_ = com.google.spanner.executor.v1.UpdateCloudInstanceAction.getDefaultInstance(); } updateCloudInstanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudInstanceAction, com.google.spanner.executor.v1.UpdateCloudInstanceAction.Builder, com.google.spanner.executor.v1.UpdateCloudInstanceActionOrBuilder>( @@ -4569,11 +4794,12 @@ public Builder clearUpdateCloudInstance() { return updateCloudInstanceBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteCloudInstanceAction, com.google.spanner.executor.v1.DeleteCloudInstanceAction.Builder, com.google.spanner.executor.v1.DeleteCloudInstanceActionOrBuilder> deleteCloudInstanceBuilder_; + /** * * @@ -4589,6 +4815,7 @@ public Builder clearUpdateCloudInstance() { public boolean hasDeleteCloudInstance() { return actionCase_ == 8; } + /** * * @@ -4614,6 +4841,7 @@ public com.google.spanner.executor.v1.DeleteCloudInstanceAction getDeleteCloudIn return com.google.spanner.executor.v1.DeleteCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -4637,6 +4865,7 @@ public Builder setDeleteCloudInstance( actionCase_ = 8; return this; } + /** * * @@ -4657,6 +4886,7 @@ public Builder setDeleteCloudInstance( actionCase_ = 8; return this; } + /** * * @@ -4691,6 +4921,7 @@ public Builder mergeDeleteCloudInstance( actionCase_ = 8; return this; } + /** * * @@ -4716,6 +4947,7 @@ public Builder clearDeleteCloudInstance() { } return this; } + /** * * @@ -4727,8 +4959,9 @@ public Builder clearDeleteCloudInstance() { */ public com.google.spanner.executor.v1.DeleteCloudInstanceAction.Builder getDeleteCloudInstanceBuilder() { - return getDeleteCloudInstanceFieldBuilder().getBuilder(); + return internalGetDeleteCloudInstanceFieldBuilder().getBuilder(); } + /** * * @@ -4750,6 +4983,7 @@ public Builder clearDeleteCloudInstance() { return com.google.spanner.executor.v1.DeleteCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -4759,17 +4993,17 @@ public Builder clearDeleteCloudInstance() { * * .google.spanner.executor.v1.DeleteCloudInstanceAction delete_cloud_instance = 8; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteCloudInstanceAction, com.google.spanner.executor.v1.DeleteCloudInstanceAction.Builder, com.google.spanner.executor.v1.DeleteCloudInstanceActionOrBuilder> - getDeleteCloudInstanceFieldBuilder() { + internalGetDeleteCloudInstanceFieldBuilder() { if (deleteCloudInstanceBuilder_ == null) { if (!(actionCase_ == 8)) { action_ = com.google.spanner.executor.v1.DeleteCloudInstanceAction.getDefaultInstance(); } deleteCloudInstanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteCloudInstanceAction, com.google.spanner.executor.v1.DeleteCloudInstanceAction.Builder, com.google.spanner.executor.v1.DeleteCloudInstanceActionOrBuilder>( @@ -4783,11 +5017,12 @@ public Builder clearDeleteCloudInstance() { return deleteCloudInstanceBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudInstancesAction, com.google.spanner.executor.v1.ListCloudInstancesAction.Builder, com.google.spanner.executor.v1.ListCloudInstancesActionOrBuilder> listCloudInstancesBuilder_; + /** * * @@ -4803,6 +5038,7 @@ public Builder clearDeleteCloudInstance() { public boolean hasListCloudInstances() { return actionCase_ == 9; } + /** * * @@ -4828,6 +5064,7 @@ public com.google.spanner.executor.v1.ListCloudInstancesAction getListCloudInsta return com.google.spanner.executor.v1.ListCloudInstancesAction.getDefaultInstance(); } } + /** * * @@ -4851,6 +5088,7 @@ public Builder setListCloudInstances( actionCase_ = 9; return this; } + /** * * @@ -4871,6 +5109,7 @@ public Builder setListCloudInstances( actionCase_ = 9; return this; } + /** * * @@ -4905,6 +5144,7 @@ public Builder mergeListCloudInstances( actionCase_ = 9; return this; } + /** * * @@ -4930,6 +5170,7 @@ public Builder clearListCloudInstances() { } return this; } + /** * * @@ -4941,8 +5182,9 @@ public Builder clearListCloudInstances() { */ public com.google.spanner.executor.v1.ListCloudInstancesAction.Builder getListCloudInstancesBuilder() { - return getListCloudInstancesFieldBuilder().getBuilder(); + return internalGetListCloudInstancesFieldBuilder().getBuilder(); } + /** * * @@ -4964,6 +5206,7 @@ public Builder clearListCloudInstances() { return com.google.spanner.executor.v1.ListCloudInstancesAction.getDefaultInstance(); } } + /** * * @@ -4973,17 +5216,17 @@ public Builder clearListCloudInstances() { * * .google.spanner.executor.v1.ListCloudInstancesAction list_cloud_instances = 9; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudInstancesAction, com.google.spanner.executor.v1.ListCloudInstancesAction.Builder, com.google.spanner.executor.v1.ListCloudInstancesActionOrBuilder> - getListCloudInstancesFieldBuilder() { + internalGetListCloudInstancesFieldBuilder() { if (listCloudInstancesBuilder_ == null) { if (!(actionCase_ == 9)) { action_ = com.google.spanner.executor.v1.ListCloudInstancesAction.getDefaultInstance(); } listCloudInstancesBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudInstancesAction, com.google.spanner.executor.v1.ListCloudInstancesAction.Builder, com.google.spanner.executor.v1.ListCloudInstancesActionOrBuilder>( @@ -4997,11 +5240,12 @@ public Builder clearListCloudInstances() { return listCloudInstancesBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudInstanceAction, com.google.spanner.executor.v1.GetCloudInstanceAction.Builder, com.google.spanner.executor.v1.GetCloudInstanceActionOrBuilder> getCloudInstanceBuilder_; + /** * * @@ -5017,6 +5261,7 @@ public Builder clearListCloudInstances() { public boolean hasGetCloudInstance() { return actionCase_ == 10; } + /** * * @@ -5042,6 +5287,7 @@ public com.google.spanner.executor.v1.GetCloudInstanceAction getGetCloudInstance return com.google.spanner.executor.v1.GetCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -5065,6 +5311,7 @@ public Builder setGetCloudInstance( actionCase_ = 10; return this; } + /** * * @@ -5085,6 +5332,7 @@ public Builder setGetCloudInstance( actionCase_ = 10; return this; } + /** * * @@ -5119,6 +5367,7 @@ public Builder mergeGetCloudInstance( actionCase_ = 10; return this; } + /** * * @@ -5144,6 +5393,7 @@ public Builder clearGetCloudInstance() { } return this; } + /** * * @@ -5155,8 +5405,9 @@ public Builder clearGetCloudInstance() { */ public com.google.spanner.executor.v1.GetCloudInstanceAction.Builder getGetCloudInstanceBuilder() { - return getGetCloudInstanceFieldBuilder().getBuilder(); + return internalGetGetCloudInstanceFieldBuilder().getBuilder(); } + /** * * @@ -5178,6 +5429,7 @@ public Builder clearGetCloudInstance() { return com.google.spanner.executor.v1.GetCloudInstanceAction.getDefaultInstance(); } } + /** * * @@ -5187,17 +5439,17 @@ public Builder clearGetCloudInstance() { * * .google.spanner.executor.v1.GetCloudInstanceAction get_cloud_instance = 10; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudInstanceAction, com.google.spanner.executor.v1.GetCloudInstanceAction.Builder, com.google.spanner.executor.v1.GetCloudInstanceActionOrBuilder> - getGetCloudInstanceFieldBuilder() { + internalGetGetCloudInstanceFieldBuilder() { if (getCloudInstanceBuilder_ == null) { if (!(actionCase_ == 10)) { action_ = com.google.spanner.executor.v1.GetCloudInstanceAction.getDefaultInstance(); } getCloudInstanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudInstanceAction, com.google.spanner.executor.v1.GetCloudInstanceAction.Builder, com.google.spanner.executor.v1.GetCloudInstanceActionOrBuilder>( @@ -5211,11 +5463,12 @@ public Builder clearGetCloudInstance() { return getCloudInstanceBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudDatabaseAction, com.google.spanner.executor.v1.CreateCloudDatabaseAction.Builder, com.google.spanner.executor.v1.CreateCloudDatabaseActionOrBuilder> createCloudDatabaseBuilder_; + /** * * @@ -5232,6 +5485,7 @@ public Builder clearGetCloudInstance() { public boolean hasCreateCloudDatabase() { return actionCase_ == 11; } + /** * * @@ -5258,6 +5512,7 @@ public com.google.spanner.executor.v1.CreateCloudDatabaseAction getCreateCloudDa return com.google.spanner.executor.v1.CreateCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -5282,6 +5537,7 @@ public Builder setCreateCloudDatabase( actionCase_ = 11; return this; } + /** * * @@ -5303,6 +5559,7 @@ public Builder setCreateCloudDatabase( actionCase_ = 11; return this; } + /** * * @@ -5338,6 +5595,7 @@ public Builder mergeCreateCloudDatabase( actionCase_ = 11; return this; } + /** * * @@ -5364,6 +5622,7 @@ public Builder clearCreateCloudDatabase() { } return this; } + /** * * @@ -5376,8 +5635,9 @@ public Builder clearCreateCloudDatabase() { */ public com.google.spanner.executor.v1.CreateCloudDatabaseAction.Builder getCreateCloudDatabaseBuilder() { - return getCreateCloudDatabaseFieldBuilder().getBuilder(); + return internalGetCreateCloudDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -5400,6 +5660,7 @@ public Builder clearCreateCloudDatabase() { return com.google.spanner.executor.v1.CreateCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -5410,17 +5671,17 @@ public Builder clearCreateCloudDatabase() { * .google.spanner.executor.v1.CreateCloudDatabaseAction create_cloud_database = 11; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudDatabaseAction, com.google.spanner.executor.v1.CreateCloudDatabaseAction.Builder, com.google.spanner.executor.v1.CreateCloudDatabaseActionOrBuilder> - getCreateCloudDatabaseFieldBuilder() { + internalGetCreateCloudDatabaseFieldBuilder() { if (createCloudDatabaseBuilder_ == null) { if (!(actionCase_ == 11)) { action_ = com.google.spanner.executor.v1.CreateCloudDatabaseAction.getDefaultInstance(); } createCloudDatabaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudDatabaseAction, com.google.spanner.executor.v1.CreateCloudDatabaseAction.Builder, com.google.spanner.executor.v1.CreateCloudDatabaseActionOrBuilder>( @@ -5434,11 +5695,12 @@ public Builder clearCreateCloudDatabase() { return createCloudDatabaseBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction, com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.Builder, com.google.spanner.executor.v1.UpdateCloudDatabaseDdlActionOrBuilder> updateCloudDatabaseDdlBuilder_; + /** * * @@ -5456,6 +5718,7 @@ public Builder clearCreateCloudDatabase() { public boolean hasUpdateCloudDatabaseDdl() { return actionCase_ == 12; } + /** * * @@ -5483,6 +5746,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction getUpdateClou return com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.getDefaultInstance(); } } + /** * * @@ -5508,6 +5772,7 @@ public Builder setUpdateCloudDatabaseDdl( actionCase_ = 12; return this; } + /** * * @@ -5530,6 +5795,7 @@ public Builder setUpdateCloudDatabaseDdl( actionCase_ = 12; return this; } + /** * * @@ -5567,6 +5833,7 @@ public Builder mergeUpdateCloudDatabaseDdl( actionCase_ = 12; return this; } + /** * * @@ -5594,6 +5861,7 @@ public Builder clearUpdateCloudDatabaseDdl() { } return this; } + /** * * @@ -5607,8 +5875,9 @@ public Builder clearUpdateCloudDatabaseDdl() { */ public com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.Builder getUpdateCloudDatabaseDdlBuilder() { - return getUpdateCloudDatabaseDdlFieldBuilder().getBuilder(); + return internalGetUpdateCloudDatabaseDdlFieldBuilder().getBuilder(); } + /** * * @@ -5632,6 +5901,7 @@ public Builder clearUpdateCloudDatabaseDdl() { return com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.getDefaultInstance(); } } + /** * * @@ -5643,18 +5913,18 @@ public Builder clearUpdateCloudDatabaseDdl() { * .google.spanner.executor.v1.UpdateCloudDatabaseDdlAction update_cloud_database_ddl = 12; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction, com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.Builder, com.google.spanner.executor.v1.UpdateCloudDatabaseDdlActionOrBuilder> - getUpdateCloudDatabaseDdlFieldBuilder() { + internalGetUpdateCloudDatabaseDdlFieldBuilder() { if (updateCloudDatabaseDdlBuilder_ == null) { if (!(actionCase_ == 12)) { action_ = com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.getDefaultInstance(); } updateCloudDatabaseDdlBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction, com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.Builder, com.google.spanner.executor.v1.UpdateCloudDatabaseDdlActionOrBuilder>( @@ -5668,11 +5938,12 @@ public Builder clearUpdateCloudDatabaseDdl() { return updateCloudDatabaseDdlBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudDatabaseAction, com.google.spanner.executor.v1.UpdateCloudDatabaseAction.Builder, com.google.spanner.executor.v1.UpdateCloudDatabaseActionOrBuilder> updateCloudDatabaseBuilder_; + /** * * @@ -5689,6 +5960,7 @@ public Builder clearUpdateCloudDatabaseDdl() { public boolean hasUpdateCloudDatabase() { return actionCase_ == 27; } + /** * * @@ -5715,6 +5987,7 @@ public com.google.spanner.executor.v1.UpdateCloudDatabaseAction getUpdateCloudDa return com.google.spanner.executor.v1.UpdateCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -5739,6 +6012,7 @@ public Builder setUpdateCloudDatabase( actionCase_ = 27; return this; } + /** * * @@ -5760,6 +6034,7 @@ public Builder setUpdateCloudDatabase( actionCase_ = 27; return this; } + /** * * @@ -5795,6 +6070,7 @@ public Builder mergeUpdateCloudDatabase( actionCase_ = 27; return this; } + /** * * @@ -5821,6 +6097,7 @@ public Builder clearUpdateCloudDatabase() { } return this; } + /** * * @@ -5833,8 +6110,9 @@ public Builder clearUpdateCloudDatabase() { */ public com.google.spanner.executor.v1.UpdateCloudDatabaseAction.Builder getUpdateCloudDatabaseBuilder() { - return getUpdateCloudDatabaseFieldBuilder().getBuilder(); + return internalGetUpdateCloudDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -5857,6 +6135,7 @@ public Builder clearUpdateCloudDatabase() { return com.google.spanner.executor.v1.UpdateCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -5867,17 +6146,17 @@ public Builder clearUpdateCloudDatabase() { * .google.spanner.executor.v1.UpdateCloudDatabaseAction update_cloud_database = 27; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudDatabaseAction, com.google.spanner.executor.v1.UpdateCloudDatabaseAction.Builder, com.google.spanner.executor.v1.UpdateCloudDatabaseActionOrBuilder> - getUpdateCloudDatabaseFieldBuilder() { + internalGetUpdateCloudDatabaseFieldBuilder() { if (updateCloudDatabaseBuilder_ == null) { if (!(actionCase_ == 27)) { action_ = com.google.spanner.executor.v1.UpdateCloudDatabaseAction.getDefaultInstance(); } updateCloudDatabaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudDatabaseAction, com.google.spanner.executor.v1.UpdateCloudDatabaseAction.Builder, com.google.spanner.executor.v1.UpdateCloudDatabaseActionOrBuilder>( @@ -5891,11 +6170,12 @@ public Builder clearUpdateCloudDatabase() { return updateCloudDatabaseBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DropCloudDatabaseAction, com.google.spanner.executor.v1.DropCloudDatabaseAction.Builder, com.google.spanner.executor.v1.DropCloudDatabaseActionOrBuilder> dropCloudDatabaseBuilder_; + /** * * @@ -5911,6 +6191,7 @@ public Builder clearUpdateCloudDatabase() { public boolean hasDropCloudDatabase() { return actionCase_ == 13; } + /** * * @@ -5936,6 +6217,7 @@ public com.google.spanner.executor.v1.DropCloudDatabaseAction getDropCloudDataba return com.google.spanner.executor.v1.DropCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -5959,6 +6241,7 @@ public Builder setDropCloudDatabase( actionCase_ = 13; return this; } + /** * * @@ -5979,6 +6262,7 @@ public Builder setDropCloudDatabase( actionCase_ = 13; return this; } + /** * * @@ -6013,6 +6297,7 @@ public Builder mergeDropCloudDatabase( actionCase_ = 13; return this; } + /** * * @@ -6038,6 +6323,7 @@ public Builder clearDropCloudDatabase() { } return this; } + /** * * @@ -6049,8 +6335,9 @@ public Builder clearDropCloudDatabase() { */ public com.google.spanner.executor.v1.DropCloudDatabaseAction.Builder getDropCloudDatabaseBuilder() { - return getDropCloudDatabaseFieldBuilder().getBuilder(); + return internalGetDropCloudDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -6072,6 +6359,7 @@ public Builder clearDropCloudDatabase() { return com.google.spanner.executor.v1.DropCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -6081,17 +6369,17 @@ public Builder clearDropCloudDatabase() { * * .google.spanner.executor.v1.DropCloudDatabaseAction drop_cloud_database = 13; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DropCloudDatabaseAction, com.google.spanner.executor.v1.DropCloudDatabaseAction.Builder, com.google.spanner.executor.v1.DropCloudDatabaseActionOrBuilder> - getDropCloudDatabaseFieldBuilder() { + internalGetDropCloudDatabaseFieldBuilder() { if (dropCloudDatabaseBuilder_ == null) { if (!(actionCase_ == 13)) { action_ = com.google.spanner.executor.v1.DropCloudDatabaseAction.getDefaultInstance(); } dropCloudDatabaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DropCloudDatabaseAction, com.google.spanner.executor.v1.DropCloudDatabaseAction.Builder, com.google.spanner.executor.v1.DropCloudDatabaseActionOrBuilder>( @@ -6105,11 +6393,12 @@ public Builder clearDropCloudDatabase() { return dropCloudDatabaseBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudDatabasesAction, com.google.spanner.executor.v1.ListCloudDatabasesAction.Builder, com.google.spanner.executor.v1.ListCloudDatabasesActionOrBuilder> listCloudDatabasesBuilder_; + /** * * @@ -6125,6 +6414,7 @@ public Builder clearDropCloudDatabase() { public boolean hasListCloudDatabases() { return actionCase_ == 14; } + /** * * @@ -6150,6 +6440,7 @@ public com.google.spanner.executor.v1.ListCloudDatabasesAction getListCloudDatab return com.google.spanner.executor.v1.ListCloudDatabasesAction.getDefaultInstance(); } } + /** * * @@ -6173,6 +6464,7 @@ public Builder setListCloudDatabases( actionCase_ = 14; return this; } + /** * * @@ -6193,6 +6485,7 @@ public Builder setListCloudDatabases( actionCase_ = 14; return this; } + /** * * @@ -6227,6 +6520,7 @@ public Builder mergeListCloudDatabases( actionCase_ = 14; return this; } + /** * * @@ -6252,6 +6546,7 @@ public Builder clearListCloudDatabases() { } return this; } + /** * * @@ -6263,8 +6558,9 @@ public Builder clearListCloudDatabases() { */ public com.google.spanner.executor.v1.ListCloudDatabasesAction.Builder getListCloudDatabasesBuilder() { - return getListCloudDatabasesFieldBuilder().getBuilder(); + return internalGetListCloudDatabasesFieldBuilder().getBuilder(); } + /** * * @@ -6286,6 +6582,7 @@ public Builder clearListCloudDatabases() { return com.google.spanner.executor.v1.ListCloudDatabasesAction.getDefaultInstance(); } } + /** * * @@ -6295,17 +6592,17 @@ public Builder clearListCloudDatabases() { * * .google.spanner.executor.v1.ListCloudDatabasesAction list_cloud_databases = 14; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudDatabasesAction, com.google.spanner.executor.v1.ListCloudDatabasesAction.Builder, com.google.spanner.executor.v1.ListCloudDatabasesActionOrBuilder> - getListCloudDatabasesFieldBuilder() { + internalGetListCloudDatabasesFieldBuilder() { if (listCloudDatabasesBuilder_ == null) { if (!(actionCase_ == 14)) { action_ = com.google.spanner.executor.v1.ListCloudDatabasesAction.getDefaultInstance(); } listCloudDatabasesBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudDatabasesAction, com.google.spanner.executor.v1.ListCloudDatabasesAction.Builder, com.google.spanner.executor.v1.ListCloudDatabasesActionOrBuilder>( @@ -6319,11 +6616,12 @@ public Builder clearListCloudDatabases() { return listCloudDatabasesBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction, com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction.Builder, com.google.spanner.executor.v1.ListCloudDatabaseOperationsActionOrBuilder> listCloudDatabaseOperationsBuilder_; + /** * * @@ -6341,6 +6639,7 @@ public Builder clearListCloudDatabases() { public boolean hasListCloudDatabaseOperations() { return actionCase_ == 15; } + /** * * @@ -6371,6 +6670,7 @@ public boolean hasListCloudDatabaseOperations() { .getDefaultInstance(); } } + /** * * @@ -6396,6 +6696,7 @@ public Builder setListCloudDatabaseOperations( actionCase_ = 15; return this; } + /** * * @@ -6418,6 +6719,7 @@ public Builder setListCloudDatabaseOperations( actionCase_ = 15; return this; } + /** * * @@ -6455,6 +6757,7 @@ public Builder mergeListCloudDatabaseOperations( actionCase_ = 15; return this; } + /** * * @@ -6482,6 +6785,7 @@ public Builder clearListCloudDatabaseOperations() { } return this; } + /** * * @@ -6495,8 +6799,9 @@ public Builder clearListCloudDatabaseOperations() { */ public com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction.Builder getListCloudDatabaseOperationsBuilder() { - return getListCloudDatabaseOperationsFieldBuilder().getBuilder(); + return internalGetListCloudDatabaseOperationsFieldBuilder().getBuilder(); } + /** * * @@ -6521,6 +6826,7 @@ public Builder clearListCloudDatabaseOperations() { .getDefaultInstance(); } } + /** * * @@ -6532,18 +6838,18 @@ public Builder clearListCloudDatabaseOperations() { * .google.spanner.executor.v1.ListCloudDatabaseOperationsAction list_cloud_database_operations = 15; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction, com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction.Builder, com.google.spanner.executor.v1.ListCloudDatabaseOperationsActionOrBuilder> - getListCloudDatabaseOperationsFieldBuilder() { + internalGetListCloudDatabaseOperationsFieldBuilder() { if (listCloudDatabaseOperationsBuilder_ == null) { if (!(actionCase_ == 15)) { action_ = com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction.getDefaultInstance(); } listCloudDatabaseOperationsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction, com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction.Builder, com.google.spanner.executor.v1.ListCloudDatabaseOperationsActionOrBuilder>( @@ -6557,11 +6863,12 @@ public Builder clearListCloudDatabaseOperations() { return listCloudDatabaseOperationsBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.RestoreCloudDatabaseAction, com.google.spanner.executor.v1.RestoreCloudDatabaseAction.Builder, com.google.spanner.executor.v1.RestoreCloudDatabaseActionOrBuilder> restoreCloudDatabaseBuilder_; + /** * * @@ -6578,6 +6885,7 @@ public Builder clearListCloudDatabaseOperations() { public boolean hasRestoreCloudDatabase() { return actionCase_ == 16; } + /** * * @@ -6604,6 +6912,7 @@ public com.google.spanner.executor.v1.RestoreCloudDatabaseAction getRestoreCloud return com.google.spanner.executor.v1.RestoreCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -6628,6 +6937,7 @@ public Builder setRestoreCloudDatabase( actionCase_ = 16; return this; } + /** * * @@ -6649,6 +6959,7 @@ public Builder setRestoreCloudDatabase( actionCase_ = 16; return this; } + /** * * @@ -6684,6 +6995,7 @@ public Builder mergeRestoreCloudDatabase( actionCase_ = 16; return this; } + /** * * @@ -6710,6 +7022,7 @@ public Builder clearRestoreCloudDatabase() { } return this; } + /** * * @@ -6722,8 +7035,9 @@ public Builder clearRestoreCloudDatabase() { */ public com.google.spanner.executor.v1.RestoreCloudDatabaseAction.Builder getRestoreCloudDatabaseBuilder() { - return getRestoreCloudDatabaseFieldBuilder().getBuilder(); + return internalGetRestoreCloudDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -6746,6 +7060,7 @@ public Builder clearRestoreCloudDatabase() { return com.google.spanner.executor.v1.RestoreCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -6756,17 +7071,17 @@ public Builder clearRestoreCloudDatabase() { * .google.spanner.executor.v1.RestoreCloudDatabaseAction restore_cloud_database = 16; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.RestoreCloudDatabaseAction, com.google.spanner.executor.v1.RestoreCloudDatabaseAction.Builder, com.google.spanner.executor.v1.RestoreCloudDatabaseActionOrBuilder> - getRestoreCloudDatabaseFieldBuilder() { + internalGetRestoreCloudDatabaseFieldBuilder() { if (restoreCloudDatabaseBuilder_ == null) { if (!(actionCase_ == 16)) { action_ = com.google.spanner.executor.v1.RestoreCloudDatabaseAction.getDefaultInstance(); } restoreCloudDatabaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.RestoreCloudDatabaseAction, com.google.spanner.executor.v1.RestoreCloudDatabaseAction.Builder, com.google.spanner.executor.v1.RestoreCloudDatabaseActionOrBuilder>( @@ -6780,11 +7095,12 @@ public Builder clearRestoreCloudDatabase() { return restoreCloudDatabaseBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudDatabaseAction, com.google.spanner.executor.v1.GetCloudDatabaseAction.Builder, com.google.spanner.executor.v1.GetCloudDatabaseActionOrBuilder> getCloudDatabaseBuilder_; + /** * * @@ -6800,6 +7116,7 @@ public Builder clearRestoreCloudDatabase() { public boolean hasGetCloudDatabase() { return actionCase_ == 17; } + /** * * @@ -6825,6 +7142,7 @@ public com.google.spanner.executor.v1.GetCloudDatabaseAction getGetCloudDatabase return com.google.spanner.executor.v1.GetCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -6848,6 +7166,7 @@ public Builder setGetCloudDatabase( actionCase_ = 17; return this; } + /** * * @@ -6868,6 +7187,7 @@ public Builder setGetCloudDatabase( actionCase_ = 17; return this; } + /** * * @@ -6902,6 +7222,7 @@ public Builder mergeGetCloudDatabase( actionCase_ = 17; return this; } + /** * * @@ -6927,6 +7248,7 @@ public Builder clearGetCloudDatabase() { } return this; } + /** * * @@ -6938,8 +7260,9 @@ public Builder clearGetCloudDatabase() { */ public com.google.spanner.executor.v1.GetCloudDatabaseAction.Builder getGetCloudDatabaseBuilder() { - return getGetCloudDatabaseFieldBuilder().getBuilder(); + return internalGetGetCloudDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -6961,6 +7284,7 @@ public Builder clearGetCloudDatabase() { return com.google.spanner.executor.v1.GetCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -6970,17 +7294,17 @@ public Builder clearGetCloudDatabase() { * * .google.spanner.executor.v1.GetCloudDatabaseAction get_cloud_database = 17; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudDatabaseAction, com.google.spanner.executor.v1.GetCloudDatabaseAction.Builder, com.google.spanner.executor.v1.GetCloudDatabaseActionOrBuilder> - getGetCloudDatabaseFieldBuilder() { + internalGetGetCloudDatabaseFieldBuilder() { if (getCloudDatabaseBuilder_ == null) { if (!(actionCase_ == 17)) { action_ = com.google.spanner.executor.v1.GetCloudDatabaseAction.getDefaultInstance(); } getCloudDatabaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudDatabaseAction, com.google.spanner.executor.v1.GetCloudDatabaseAction.Builder, com.google.spanner.executor.v1.GetCloudDatabaseActionOrBuilder>( @@ -6994,11 +7318,12 @@ public Builder clearGetCloudDatabase() { return getCloudDatabaseBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudBackupAction, com.google.spanner.executor.v1.CreateCloudBackupAction.Builder, com.google.spanner.executor.v1.CreateCloudBackupActionOrBuilder> createCloudBackupBuilder_; + /** * * @@ -7014,6 +7339,7 @@ public Builder clearGetCloudDatabase() { public boolean hasCreateCloudBackup() { return actionCase_ == 18; } + /** * * @@ -7039,6 +7365,7 @@ public com.google.spanner.executor.v1.CreateCloudBackupAction getCreateCloudBack return com.google.spanner.executor.v1.CreateCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7062,6 +7389,7 @@ public Builder setCreateCloudBackup( actionCase_ = 18; return this; } + /** * * @@ -7082,6 +7410,7 @@ public Builder setCreateCloudBackup( actionCase_ = 18; return this; } + /** * * @@ -7116,6 +7445,7 @@ public Builder mergeCreateCloudBackup( actionCase_ = 18; return this; } + /** * * @@ -7141,6 +7471,7 @@ public Builder clearCreateCloudBackup() { } return this; } + /** * * @@ -7152,8 +7483,9 @@ public Builder clearCreateCloudBackup() { */ public com.google.spanner.executor.v1.CreateCloudBackupAction.Builder getCreateCloudBackupBuilder() { - return getCreateCloudBackupFieldBuilder().getBuilder(); + return internalGetCreateCloudBackupFieldBuilder().getBuilder(); } + /** * * @@ -7175,6 +7507,7 @@ public Builder clearCreateCloudBackup() { return com.google.spanner.executor.v1.CreateCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7184,17 +7517,17 @@ public Builder clearCreateCloudBackup() { * * .google.spanner.executor.v1.CreateCloudBackupAction create_cloud_backup = 18; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudBackupAction, com.google.spanner.executor.v1.CreateCloudBackupAction.Builder, com.google.spanner.executor.v1.CreateCloudBackupActionOrBuilder> - getCreateCloudBackupFieldBuilder() { + internalGetCreateCloudBackupFieldBuilder() { if (createCloudBackupBuilder_ == null) { if (!(actionCase_ == 18)) { action_ = com.google.spanner.executor.v1.CreateCloudBackupAction.getDefaultInstance(); } createCloudBackupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CreateCloudBackupAction, com.google.spanner.executor.v1.CreateCloudBackupAction.Builder, com.google.spanner.executor.v1.CreateCloudBackupActionOrBuilder>( @@ -7208,11 +7541,12 @@ public Builder clearCreateCloudBackup() { return createCloudBackupBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CopyCloudBackupAction, com.google.spanner.executor.v1.CopyCloudBackupAction.Builder, com.google.spanner.executor.v1.CopyCloudBackupActionOrBuilder> copyCloudBackupBuilder_; + /** * * @@ -7228,6 +7562,7 @@ public Builder clearCreateCloudBackup() { public boolean hasCopyCloudBackup() { return actionCase_ == 19; } + /** * * @@ -7253,6 +7588,7 @@ public com.google.spanner.executor.v1.CopyCloudBackupAction getCopyCloudBackup() return com.google.spanner.executor.v1.CopyCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7275,6 +7611,7 @@ public Builder setCopyCloudBackup(com.google.spanner.executor.v1.CopyCloudBackup actionCase_ = 19; return this; } + /** * * @@ -7295,6 +7632,7 @@ public Builder setCopyCloudBackup( actionCase_ = 19; return this; } + /** * * @@ -7329,6 +7667,7 @@ public Builder mergeCopyCloudBackup( actionCase_ = 19; return this; } + /** * * @@ -7354,6 +7693,7 @@ public Builder clearCopyCloudBackup() { } return this; } + /** * * @@ -7365,8 +7705,9 @@ public Builder clearCopyCloudBackup() { */ public com.google.spanner.executor.v1.CopyCloudBackupAction.Builder getCopyCloudBackupBuilder() { - return getCopyCloudBackupFieldBuilder().getBuilder(); + return internalGetCopyCloudBackupFieldBuilder().getBuilder(); } + /** * * @@ -7388,6 +7729,7 @@ public Builder clearCopyCloudBackup() { return com.google.spanner.executor.v1.CopyCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7397,17 +7739,17 @@ public Builder clearCopyCloudBackup() { * * .google.spanner.executor.v1.CopyCloudBackupAction copy_cloud_backup = 19; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CopyCloudBackupAction, com.google.spanner.executor.v1.CopyCloudBackupAction.Builder, com.google.spanner.executor.v1.CopyCloudBackupActionOrBuilder> - getCopyCloudBackupFieldBuilder() { + internalGetCopyCloudBackupFieldBuilder() { if (copyCloudBackupBuilder_ == null) { if (!(actionCase_ == 19)) { action_ = com.google.spanner.executor.v1.CopyCloudBackupAction.getDefaultInstance(); } copyCloudBackupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CopyCloudBackupAction, com.google.spanner.executor.v1.CopyCloudBackupAction.Builder, com.google.spanner.executor.v1.CopyCloudBackupActionOrBuilder>( @@ -7421,11 +7763,12 @@ public Builder clearCopyCloudBackup() { return copyCloudBackupBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudBackupAction, com.google.spanner.executor.v1.GetCloudBackupAction.Builder, com.google.spanner.executor.v1.GetCloudBackupActionOrBuilder> getCloudBackupBuilder_; + /** * * @@ -7441,6 +7784,7 @@ public Builder clearCopyCloudBackup() { public boolean hasGetCloudBackup() { return actionCase_ == 20; } + /** * * @@ -7466,6 +7810,7 @@ public com.google.spanner.executor.v1.GetCloudBackupAction getGetCloudBackup() { return com.google.spanner.executor.v1.GetCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7488,6 +7833,7 @@ public Builder setGetCloudBackup(com.google.spanner.executor.v1.GetCloudBackupAc actionCase_ = 20; return this; } + /** * * @@ -7508,6 +7854,7 @@ public Builder setGetCloudBackup( actionCase_ = 20; return this; } + /** * * @@ -7541,6 +7888,7 @@ public Builder mergeGetCloudBackup(com.google.spanner.executor.v1.GetCloudBackup actionCase_ = 20; return this; } + /** * * @@ -7566,6 +7914,7 @@ public Builder clearGetCloudBackup() { } return this; } + /** * * @@ -7576,8 +7925,9 @@ public Builder clearGetCloudBackup() { * .google.spanner.executor.v1.GetCloudBackupAction get_cloud_backup = 20; */ public com.google.spanner.executor.v1.GetCloudBackupAction.Builder getGetCloudBackupBuilder() { - return getGetCloudBackupFieldBuilder().getBuilder(); + return internalGetGetCloudBackupFieldBuilder().getBuilder(); } + /** * * @@ -7599,6 +7949,7 @@ public com.google.spanner.executor.v1.GetCloudBackupAction.Builder getGetCloudBa return com.google.spanner.executor.v1.GetCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7608,17 +7959,17 @@ public com.google.spanner.executor.v1.GetCloudBackupAction.Builder getGetCloudBa * * .google.spanner.executor.v1.GetCloudBackupAction get_cloud_backup = 20; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudBackupAction, com.google.spanner.executor.v1.GetCloudBackupAction.Builder, com.google.spanner.executor.v1.GetCloudBackupActionOrBuilder> - getGetCloudBackupFieldBuilder() { + internalGetGetCloudBackupFieldBuilder() { if (getCloudBackupBuilder_ == null) { if (!(actionCase_ == 20)) { action_ = com.google.spanner.executor.v1.GetCloudBackupAction.getDefaultInstance(); } getCloudBackupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetCloudBackupAction, com.google.spanner.executor.v1.GetCloudBackupAction.Builder, com.google.spanner.executor.v1.GetCloudBackupActionOrBuilder>( @@ -7632,11 +7983,12 @@ public com.google.spanner.executor.v1.GetCloudBackupAction.Builder getGetCloudBa return getCloudBackupBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudBackupAction, com.google.spanner.executor.v1.UpdateCloudBackupAction.Builder, com.google.spanner.executor.v1.UpdateCloudBackupActionOrBuilder> updateCloudBackupBuilder_; + /** * * @@ -7652,6 +8004,7 @@ public com.google.spanner.executor.v1.GetCloudBackupAction.Builder getGetCloudBa public boolean hasUpdateCloudBackup() { return actionCase_ == 21; } + /** * * @@ -7677,6 +8030,7 @@ public com.google.spanner.executor.v1.UpdateCloudBackupAction getUpdateCloudBack return com.google.spanner.executor.v1.UpdateCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7700,6 +8054,7 @@ public Builder setUpdateCloudBackup( actionCase_ = 21; return this; } + /** * * @@ -7720,6 +8075,7 @@ public Builder setUpdateCloudBackup( actionCase_ = 21; return this; } + /** * * @@ -7754,6 +8110,7 @@ public Builder mergeUpdateCloudBackup( actionCase_ = 21; return this; } + /** * * @@ -7779,6 +8136,7 @@ public Builder clearUpdateCloudBackup() { } return this; } + /** * * @@ -7790,8 +8148,9 @@ public Builder clearUpdateCloudBackup() { */ public com.google.spanner.executor.v1.UpdateCloudBackupAction.Builder getUpdateCloudBackupBuilder() { - return getUpdateCloudBackupFieldBuilder().getBuilder(); + return internalGetUpdateCloudBackupFieldBuilder().getBuilder(); } + /** * * @@ -7813,6 +8172,7 @@ public Builder clearUpdateCloudBackup() { return com.google.spanner.executor.v1.UpdateCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7822,17 +8182,17 @@ public Builder clearUpdateCloudBackup() { * * .google.spanner.executor.v1.UpdateCloudBackupAction update_cloud_backup = 21; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudBackupAction, com.google.spanner.executor.v1.UpdateCloudBackupAction.Builder, com.google.spanner.executor.v1.UpdateCloudBackupActionOrBuilder> - getUpdateCloudBackupFieldBuilder() { + internalGetUpdateCloudBackupFieldBuilder() { if (updateCloudBackupBuilder_ == null) { if (!(actionCase_ == 21)) { action_ = com.google.spanner.executor.v1.UpdateCloudBackupAction.getDefaultInstance(); } updateCloudBackupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.UpdateCloudBackupAction, com.google.spanner.executor.v1.UpdateCloudBackupAction.Builder, com.google.spanner.executor.v1.UpdateCloudBackupActionOrBuilder>( @@ -7846,11 +8206,12 @@ public Builder clearUpdateCloudBackup() { return updateCloudBackupBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteCloudBackupAction, com.google.spanner.executor.v1.DeleteCloudBackupAction.Builder, com.google.spanner.executor.v1.DeleteCloudBackupActionOrBuilder> deleteCloudBackupBuilder_; + /** * * @@ -7866,6 +8227,7 @@ public Builder clearUpdateCloudBackup() { public boolean hasDeleteCloudBackup() { return actionCase_ == 22; } + /** * * @@ -7891,6 +8253,7 @@ public com.google.spanner.executor.v1.DeleteCloudBackupAction getDeleteCloudBack return com.google.spanner.executor.v1.DeleteCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -7914,6 +8277,7 @@ public Builder setDeleteCloudBackup( actionCase_ = 22; return this; } + /** * * @@ -7934,6 +8298,7 @@ public Builder setDeleteCloudBackup( actionCase_ = 22; return this; } + /** * * @@ -7968,6 +8333,7 @@ public Builder mergeDeleteCloudBackup( actionCase_ = 22; return this; } + /** * * @@ -7993,6 +8359,7 @@ public Builder clearDeleteCloudBackup() { } return this; } + /** * * @@ -8004,8 +8371,9 @@ public Builder clearDeleteCloudBackup() { */ public com.google.spanner.executor.v1.DeleteCloudBackupAction.Builder getDeleteCloudBackupBuilder() { - return getDeleteCloudBackupFieldBuilder().getBuilder(); + return internalGetDeleteCloudBackupFieldBuilder().getBuilder(); } + /** * * @@ -8027,6 +8395,7 @@ public Builder clearDeleteCloudBackup() { return com.google.spanner.executor.v1.DeleteCloudBackupAction.getDefaultInstance(); } } + /** * * @@ -8036,17 +8405,17 @@ public Builder clearDeleteCloudBackup() { * * .google.spanner.executor.v1.DeleteCloudBackupAction delete_cloud_backup = 22; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteCloudBackupAction, com.google.spanner.executor.v1.DeleteCloudBackupAction.Builder, com.google.spanner.executor.v1.DeleteCloudBackupActionOrBuilder> - getDeleteCloudBackupFieldBuilder() { + internalGetDeleteCloudBackupFieldBuilder() { if (deleteCloudBackupBuilder_ == null) { if (!(actionCase_ == 22)) { action_ = com.google.spanner.executor.v1.DeleteCloudBackupAction.getDefaultInstance(); } deleteCloudBackupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DeleteCloudBackupAction, com.google.spanner.executor.v1.DeleteCloudBackupAction.Builder, com.google.spanner.executor.v1.DeleteCloudBackupActionOrBuilder>( @@ -8060,11 +8429,12 @@ public Builder clearDeleteCloudBackup() { return deleteCloudBackupBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudBackupsAction, com.google.spanner.executor.v1.ListCloudBackupsAction.Builder, com.google.spanner.executor.v1.ListCloudBackupsActionOrBuilder> listCloudBackupsBuilder_; + /** * * @@ -8080,6 +8450,7 @@ public Builder clearDeleteCloudBackup() { public boolean hasListCloudBackups() { return actionCase_ == 23; } + /** * * @@ -8105,6 +8476,7 @@ public com.google.spanner.executor.v1.ListCloudBackupsAction getListCloudBackups return com.google.spanner.executor.v1.ListCloudBackupsAction.getDefaultInstance(); } } + /** * * @@ -8128,6 +8500,7 @@ public Builder setListCloudBackups( actionCase_ = 23; return this; } + /** * * @@ -8148,6 +8521,7 @@ public Builder setListCloudBackups( actionCase_ = 23; return this; } + /** * * @@ -8182,6 +8556,7 @@ public Builder mergeListCloudBackups( actionCase_ = 23; return this; } + /** * * @@ -8207,6 +8582,7 @@ public Builder clearListCloudBackups() { } return this; } + /** * * @@ -8218,8 +8594,9 @@ public Builder clearListCloudBackups() { */ public com.google.spanner.executor.v1.ListCloudBackupsAction.Builder getListCloudBackupsBuilder() { - return getListCloudBackupsFieldBuilder().getBuilder(); + return internalGetListCloudBackupsFieldBuilder().getBuilder(); } + /** * * @@ -8241,6 +8618,7 @@ public Builder clearListCloudBackups() { return com.google.spanner.executor.v1.ListCloudBackupsAction.getDefaultInstance(); } } + /** * * @@ -8250,17 +8628,17 @@ public Builder clearListCloudBackups() { * * .google.spanner.executor.v1.ListCloudBackupsAction list_cloud_backups = 23; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudBackupsAction, com.google.spanner.executor.v1.ListCloudBackupsAction.Builder, com.google.spanner.executor.v1.ListCloudBackupsActionOrBuilder> - getListCloudBackupsFieldBuilder() { + internalGetListCloudBackupsFieldBuilder() { if (listCloudBackupsBuilder_ == null) { if (!(actionCase_ == 23)) { action_ = com.google.spanner.executor.v1.ListCloudBackupsAction.getDefaultInstance(); } listCloudBackupsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudBackupsAction, com.google.spanner.executor.v1.ListCloudBackupsAction.Builder, com.google.spanner.executor.v1.ListCloudBackupsActionOrBuilder>( @@ -8274,11 +8652,12 @@ public Builder clearListCloudBackups() { return listCloudBackupsBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudBackupOperationsAction, com.google.spanner.executor.v1.ListCloudBackupOperationsAction.Builder, com.google.spanner.executor.v1.ListCloudBackupOperationsActionOrBuilder> listCloudBackupOperationsBuilder_; + /** * * @@ -8296,6 +8675,7 @@ public Builder clearListCloudBackups() { public boolean hasListCloudBackupOperations() { return actionCase_ == 24; } + /** * * @@ -8324,6 +8704,7 @@ public boolean hasListCloudBackupOperations() { return com.google.spanner.executor.v1.ListCloudBackupOperationsAction.getDefaultInstance(); } } + /** * * @@ -8349,6 +8730,7 @@ public Builder setListCloudBackupOperations( actionCase_ = 24; return this; } + /** * * @@ -8371,6 +8753,7 @@ public Builder setListCloudBackupOperations( actionCase_ = 24; return this; } + /** * * @@ -8408,6 +8791,7 @@ public Builder mergeListCloudBackupOperations( actionCase_ = 24; return this; } + /** * * @@ -8435,6 +8819,7 @@ public Builder clearListCloudBackupOperations() { } return this; } + /** * * @@ -8448,8 +8833,9 @@ public Builder clearListCloudBackupOperations() { */ public com.google.spanner.executor.v1.ListCloudBackupOperationsAction.Builder getListCloudBackupOperationsBuilder() { - return getListCloudBackupOperationsFieldBuilder().getBuilder(); + return internalGetListCloudBackupOperationsFieldBuilder().getBuilder(); } + /** * * @@ -8473,6 +8859,7 @@ public Builder clearListCloudBackupOperations() { return com.google.spanner.executor.v1.ListCloudBackupOperationsAction.getDefaultInstance(); } } + /** * * @@ -8484,18 +8871,18 @@ public Builder clearListCloudBackupOperations() { * .google.spanner.executor.v1.ListCloudBackupOperationsAction list_cloud_backup_operations = 24; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudBackupOperationsAction, com.google.spanner.executor.v1.ListCloudBackupOperationsAction.Builder, com.google.spanner.executor.v1.ListCloudBackupOperationsActionOrBuilder> - getListCloudBackupOperationsFieldBuilder() { + internalGetListCloudBackupOperationsFieldBuilder() { if (listCloudBackupOperationsBuilder_ == null) { if (!(actionCase_ == 24)) { action_ = com.google.spanner.executor.v1.ListCloudBackupOperationsAction.getDefaultInstance(); } listCloudBackupOperationsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ListCloudBackupOperationsAction, com.google.spanner.executor.v1.ListCloudBackupOperationsAction.Builder, com.google.spanner.executor.v1.ListCloudBackupOperationsActionOrBuilder>( @@ -8509,11 +8896,12 @@ public Builder clearListCloudBackupOperations() { return listCloudBackupOperationsBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetOperationAction, com.google.spanner.executor.v1.GetOperationAction.Builder, com.google.spanner.executor.v1.GetOperationActionOrBuilder> getOperationBuilder_; + /** * * @@ -8529,6 +8917,7 @@ public Builder clearListCloudBackupOperations() { public boolean hasGetOperation() { return actionCase_ == 25; } + /** * * @@ -8554,6 +8943,7 @@ public com.google.spanner.executor.v1.GetOperationAction getGetOperation() { return com.google.spanner.executor.v1.GetOperationAction.getDefaultInstance(); } } + /** * * @@ -8576,6 +8966,7 @@ public Builder setGetOperation(com.google.spanner.executor.v1.GetOperationAction actionCase_ = 25; return this; } + /** * * @@ -8596,6 +8987,7 @@ public Builder setGetOperation( actionCase_ = 25; return this; } + /** * * @@ -8628,6 +9020,7 @@ public Builder mergeGetOperation(com.google.spanner.executor.v1.GetOperationActi actionCase_ = 25; return this; } + /** * * @@ -8653,6 +9046,7 @@ public Builder clearGetOperation() { } return this; } + /** * * @@ -8663,8 +9057,9 @@ public Builder clearGetOperation() { * .google.spanner.executor.v1.GetOperationAction get_operation = 25; */ public com.google.spanner.executor.v1.GetOperationAction.Builder getGetOperationBuilder() { - return getGetOperationFieldBuilder().getBuilder(); + return internalGetGetOperationFieldBuilder().getBuilder(); } + /** * * @@ -8685,6 +9080,7 @@ public com.google.spanner.executor.v1.GetOperationActionOrBuilder getGetOperatio return com.google.spanner.executor.v1.GetOperationAction.getDefaultInstance(); } } + /** * * @@ -8694,17 +9090,17 @@ public com.google.spanner.executor.v1.GetOperationActionOrBuilder getGetOperatio * * .google.spanner.executor.v1.GetOperationAction get_operation = 25; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetOperationAction, com.google.spanner.executor.v1.GetOperationAction.Builder, com.google.spanner.executor.v1.GetOperationActionOrBuilder> - getGetOperationFieldBuilder() { + internalGetGetOperationFieldBuilder() { if (getOperationBuilder_ == null) { if (!(actionCase_ == 25)) { action_ = com.google.spanner.executor.v1.GetOperationAction.getDefaultInstance(); } getOperationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GetOperationAction, com.google.spanner.executor.v1.GetOperationAction.Builder, com.google.spanner.executor.v1.GetOperationActionOrBuilder>( @@ -8718,11 +9114,12 @@ public com.google.spanner.executor.v1.GetOperationActionOrBuilder getGetOperatio return getOperationBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CancelOperationAction, com.google.spanner.executor.v1.CancelOperationAction.Builder, com.google.spanner.executor.v1.CancelOperationActionOrBuilder> cancelOperationBuilder_; + /** * * @@ -8738,6 +9135,7 @@ public com.google.spanner.executor.v1.GetOperationActionOrBuilder getGetOperatio public boolean hasCancelOperation() { return actionCase_ == 26; } + /** * * @@ -8763,6 +9161,7 @@ public com.google.spanner.executor.v1.CancelOperationAction getCancelOperation() return com.google.spanner.executor.v1.CancelOperationAction.getDefaultInstance(); } } + /** * * @@ -8785,6 +9184,7 @@ public Builder setCancelOperation(com.google.spanner.executor.v1.CancelOperation actionCase_ = 26; return this; } + /** * * @@ -8805,6 +9205,7 @@ public Builder setCancelOperation( actionCase_ = 26; return this; } + /** * * @@ -8839,6 +9240,7 @@ public Builder mergeCancelOperation( actionCase_ = 26; return this; } + /** * * @@ -8864,6 +9266,7 @@ public Builder clearCancelOperation() { } return this; } + /** * * @@ -8875,8 +9278,9 @@ public Builder clearCancelOperation() { */ public com.google.spanner.executor.v1.CancelOperationAction.Builder getCancelOperationBuilder() { - return getCancelOperationFieldBuilder().getBuilder(); + return internalGetCancelOperationFieldBuilder().getBuilder(); } + /** * * @@ -8898,6 +9302,7 @@ public Builder clearCancelOperation() { return com.google.spanner.executor.v1.CancelOperationAction.getDefaultInstance(); } } + /** * * @@ -8907,17 +9312,17 @@ public Builder clearCancelOperation() { * * .google.spanner.executor.v1.CancelOperationAction cancel_operation = 26; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CancelOperationAction, com.google.spanner.executor.v1.CancelOperationAction.Builder, com.google.spanner.executor.v1.CancelOperationActionOrBuilder> - getCancelOperationFieldBuilder() { + internalGetCancelOperationFieldBuilder() { if (cancelOperationBuilder_ == null) { if (!(actionCase_ == 26)) { action_ = com.google.spanner.executor.v1.CancelOperationAction.getDefaultInstance(); } cancelOperationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CancelOperationAction, com.google.spanner.executor.v1.CancelOperationAction.Builder, com.google.spanner.executor.v1.CancelOperationActionOrBuilder>( @@ -8931,11 +9336,12 @@ public Builder clearCancelOperation() { return cancelOperationBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction, com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.Builder, com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseActionOrBuilder> changeQuorumCloudDatabaseBuilder_; + /** * * @@ -8953,6 +9359,7 @@ public Builder clearCancelOperation() { public boolean hasChangeQuorumCloudDatabase() { return actionCase_ == 28; } + /** * * @@ -8981,6 +9388,7 @@ public boolean hasChangeQuorumCloudDatabase() { return com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -9006,6 +9414,7 @@ public Builder setChangeQuorumCloudDatabase( actionCase_ = 28; return this; } + /** * * @@ -9028,6 +9437,7 @@ public Builder setChangeQuorumCloudDatabase( actionCase_ = 28; return this; } + /** * * @@ -9065,6 +9475,7 @@ public Builder mergeChangeQuorumCloudDatabase( actionCase_ = 28; return this; } + /** * * @@ -9092,6 +9503,7 @@ public Builder clearChangeQuorumCloudDatabase() { } return this; } + /** * * @@ -9105,8 +9517,9 @@ public Builder clearChangeQuorumCloudDatabase() { */ public com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.Builder getChangeQuorumCloudDatabaseBuilder() { - return getChangeQuorumCloudDatabaseFieldBuilder().getBuilder(); + return internalGetChangeQuorumCloudDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -9130,6 +9543,7 @@ public Builder clearChangeQuorumCloudDatabase() { return com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.getDefaultInstance(); } } + /** * * @@ -9141,18 +9555,18 @@ public Builder clearChangeQuorumCloudDatabase() { * .google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction change_quorum_cloud_database = 28; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction, com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.Builder, com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseActionOrBuilder> - getChangeQuorumCloudDatabaseFieldBuilder() { + internalGetChangeQuorumCloudDatabaseFieldBuilder() { if (changeQuorumCloudDatabaseBuilder_ == null) { if (!(actionCase_ == 28)) { action_ = com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.getDefaultInstance(); } changeQuorumCloudDatabaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction, com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.Builder, com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseActionOrBuilder>( @@ -9166,15 +9580,224 @@ public Builder clearChangeQuorumCloudDatabase() { return changeQuorumCloudDatabaseBuilder_; } + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.executor.v1.AddSplitPointsAction, + com.google.spanner.executor.v1.AddSplitPointsAction.Builder, + com.google.spanner.executor.v1.AddSplitPointsActionOrBuilder> + addSplitPointsBuilder_; + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + * + * @return Whether the addSplitPoints field is set. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean hasAddSplitPoints() { + return actionCase_ == 29; } + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + * + * @return The addSplitPoints. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public com.google.spanner.executor.v1.AddSplitPointsAction getAddSplitPoints() { + if (addSplitPointsBuilder_ == null) { + if (actionCase_ == 29) { + return (com.google.spanner.executor.v1.AddSplitPointsAction) action_; + } + return com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance(); + } else { + if (actionCase_ == 29) { + return addSplitPointsBuilder_.getMessage(); + } + return com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + public Builder setAddSplitPoints(com.google.spanner.executor.v1.AddSplitPointsAction value) { + if (addSplitPointsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + action_ = value; + onChanged(); + } else { + addSplitPointsBuilder_.setMessage(value); + } + actionCase_ = 29; + return this; + } + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + public Builder setAddSplitPoints( + com.google.spanner.executor.v1.AddSplitPointsAction.Builder builderForValue) { + if (addSplitPointsBuilder_ == null) { + action_ = builderForValue.build(); + onChanged(); + } else { + addSplitPointsBuilder_.setMessage(builderForValue.build()); + } + actionCase_ = 29; + return this; + } + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + public Builder mergeAddSplitPoints(com.google.spanner.executor.v1.AddSplitPointsAction value) { + if (addSplitPointsBuilder_ == null) { + if (actionCase_ == 29 + && action_ + != com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance()) { + action_ = + com.google.spanner.executor.v1.AddSplitPointsAction.newBuilder( + (com.google.spanner.executor.v1.AddSplitPointsAction) action_) + .mergeFrom(value) + .buildPartial(); + } else { + action_ = value; + } + onChanged(); + } else { + if (actionCase_ == 29) { + addSplitPointsBuilder_.mergeFrom(value); + } else { + addSplitPointsBuilder_.setMessage(value); + } + } + actionCase_ = 29; + return this; + } + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + public Builder clearAddSplitPoints() { + if (addSplitPointsBuilder_ == null) { + if (actionCase_ == 29) { + actionCase_ = 0; + action_ = null; + onChanged(); + } + } else { + if (actionCase_ == 29) { + actionCase_ = 0; + action_ = null; + } + addSplitPointsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + public com.google.spanner.executor.v1.AddSplitPointsAction.Builder getAddSplitPointsBuilder() { + return internalGetAddSplitPointsFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + @java.lang.Override + public com.google.spanner.executor.v1.AddSplitPointsActionOrBuilder + getAddSplitPointsOrBuilder() { + if ((actionCase_ == 29) && (addSplitPointsBuilder_ != null)) { + return addSplitPointsBuilder_.getMessageOrBuilder(); + } else { + if (actionCase_ == 29) { + return (com.google.spanner.executor.v1.AddSplitPointsAction) action_; + } + return com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Action that adds splits to a Cloud Spanner database.
                                +     * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.executor.v1.AddSplitPointsAction, + com.google.spanner.executor.v1.AddSplitPointsAction.Builder, + com.google.spanner.executor.v1.AddSplitPointsActionOrBuilder> + internalGetAddSplitPointsFieldBuilder() { + if (addSplitPointsBuilder_ == null) { + if (!(actionCase_ == 29)) { + action_ = com.google.spanner.executor.v1.AddSplitPointsAction.getDefaultInstance(); + } + addSplitPointsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.executor.v1.AddSplitPointsAction, + com.google.spanner.executor.v1.AddSplitPointsAction.Builder, + com.google.spanner.executor.v1.AddSplitPointsActionOrBuilder>( + (com.google.spanner.executor.v1.AddSplitPointsAction) action_, + getParentForChildren(), + isClean()); + action_ = null; + } + actionCase_ = 29; + onChanged(); + return addSplitPointsBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.AdminAction) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java index fc8153bda20..7d595c13eb8 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface AdminActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.AdminAction) @@ -38,6 +40,7 @@ public interface AdminActionOrBuilder * @return Whether the createUserInstanceConfig field is set. */ boolean hasCreateUserInstanceConfig(); + /** * * @@ -52,6 +55,7 @@ public interface AdminActionOrBuilder * @return The createUserInstanceConfig. */ com.google.spanner.executor.v1.CreateUserInstanceConfigAction getCreateUserInstanceConfig(); + /** * * @@ -80,6 +84,7 @@ public interface AdminActionOrBuilder * @return Whether the updateUserInstanceConfig field is set. */ boolean hasUpdateUserInstanceConfig(); + /** * * @@ -94,6 +99,7 @@ public interface AdminActionOrBuilder * @return The updateUserInstanceConfig. */ com.google.spanner.executor.v1.UpdateUserInstanceConfigAction getUpdateUserInstanceConfig(); + /** * * @@ -122,6 +128,7 @@ public interface AdminActionOrBuilder * @return Whether the deleteUserInstanceConfig field is set. */ boolean hasDeleteUserInstanceConfig(); + /** * * @@ -136,6 +143,7 @@ public interface AdminActionOrBuilder * @return The deleteUserInstanceConfig. */ com.google.spanner.executor.v1.DeleteUserInstanceConfigAction getDeleteUserInstanceConfig(); + /** * * @@ -163,6 +171,7 @@ public interface AdminActionOrBuilder * @return Whether the getCloudInstanceConfig field is set. */ boolean hasGetCloudInstanceConfig(); + /** * * @@ -176,6 +185,7 @@ public interface AdminActionOrBuilder * @return The getCloudInstanceConfig. */ com.google.spanner.executor.v1.GetCloudInstanceConfigAction getGetCloudInstanceConfig(); + /** * * @@ -202,6 +212,7 @@ public interface AdminActionOrBuilder * @return Whether the listInstanceConfigs field is set. */ boolean hasListInstanceConfigs(); + /** * * @@ -215,6 +226,7 @@ public interface AdminActionOrBuilder * @return The listInstanceConfigs. */ com.google.spanner.executor.v1.ListCloudInstanceConfigsAction getListInstanceConfigs(); + /** * * @@ -240,6 +252,7 @@ public interface AdminActionOrBuilder * @return Whether the createCloudInstance field is set. */ boolean hasCreateCloudInstance(); + /** * * @@ -252,6 +265,7 @@ public interface AdminActionOrBuilder * @return The createCloudInstance. */ com.google.spanner.executor.v1.CreateCloudInstanceAction getCreateCloudInstance(); + /** * * @@ -276,6 +290,7 @@ public interface AdminActionOrBuilder * @return Whether the updateCloudInstance field is set. */ boolean hasUpdateCloudInstance(); + /** * * @@ -288,6 +303,7 @@ public interface AdminActionOrBuilder * @return The updateCloudInstance. */ com.google.spanner.executor.v1.UpdateCloudInstanceAction getUpdateCloudInstance(); + /** * * @@ -312,6 +328,7 @@ public interface AdminActionOrBuilder * @return Whether the deleteCloudInstance field is set. */ boolean hasDeleteCloudInstance(); + /** * * @@ -324,6 +341,7 @@ public interface AdminActionOrBuilder * @return The deleteCloudInstance. */ com.google.spanner.executor.v1.DeleteCloudInstanceAction getDeleteCloudInstance(); + /** * * @@ -348,6 +366,7 @@ public interface AdminActionOrBuilder * @return Whether the listCloudInstances field is set. */ boolean hasListCloudInstances(); + /** * * @@ -360,6 +379,7 @@ public interface AdminActionOrBuilder * @return The listCloudInstances. */ com.google.spanner.executor.v1.ListCloudInstancesAction getListCloudInstances(); + /** * * @@ -383,6 +403,7 @@ public interface AdminActionOrBuilder * @return Whether the getCloudInstance field is set. */ boolean hasGetCloudInstance(); + /** * * @@ -395,6 +416,7 @@ public interface AdminActionOrBuilder * @return The getCloudInstance. */ com.google.spanner.executor.v1.GetCloudInstanceAction getGetCloudInstance(); + /** * * @@ -418,6 +440,7 @@ public interface AdminActionOrBuilder * @return Whether the createCloudDatabase field is set. */ boolean hasCreateCloudDatabase(); + /** * * @@ -430,6 +453,7 @@ public interface AdminActionOrBuilder * @return The createCloudDatabase. */ com.google.spanner.executor.v1.CreateCloudDatabaseAction getCreateCloudDatabase(); + /** * * @@ -455,6 +479,7 @@ public interface AdminActionOrBuilder * @return Whether the updateCloudDatabaseDdl field is set. */ boolean hasUpdateCloudDatabaseDdl(); + /** * * @@ -468,6 +493,7 @@ public interface AdminActionOrBuilder * @return The updateCloudDatabaseDdl. */ com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction getUpdateCloudDatabaseDdl(); + /** * * @@ -493,6 +519,7 @@ public interface AdminActionOrBuilder * @return Whether the updateCloudDatabase field is set. */ boolean hasUpdateCloudDatabase(); + /** * * @@ -505,6 +532,7 @@ public interface AdminActionOrBuilder * @return The updateCloudDatabase. */ com.google.spanner.executor.v1.UpdateCloudDatabaseAction getUpdateCloudDatabase(); + /** * * @@ -529,6 +557,7 @@ public interface AdminActionOrBuilder * @return Whether the dropCloudDatabase field is set. */ boolean hasDropCloudDatabase(); + /** * * @@ -541,6 +570,7 @@ public interface AdminActionOrBuilder * @return The dropCloudDatabase. */ com.google.spanner.executor.v1.DropCloudDatabaseAction getDropCloudDatabase(); + /** * * @@ -564,6 +594,7 @@ public interface AdminActionOrBuilder * @return Whether the listCloudDatabases field is set. */ boolean hasListCloudDatabases(); + /** * * @@ -576,6 +607,7 @@ public interface AdminActionOrBuilder * @return The listCloudDatabases. */ com.google.spanner.executor.v1.ListCloudDatabasesAction getListCloudDatabases(); + /** * * @@ -601,6 +633,7 @@ public interface AdminActionOrBuilder * @return Whether the listCloudDatabaseOperations field is set. */ boolean hasListCloudDatabaseOperations(); + /** * * @@ -615,6 +648,7 @@ public interface AdminActionOrBuilder * @return The listCloudDatabaseOperations. */ com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction getListCloudDatabaseOperations(); + /** * * @@ -642,6 +676,7 @@ public interface AdminActionOrBuilder * @return Whether the restoreCloudDatabase field is set. */ boolean hasRestoreCloudDatabase(); + /** * * @@ -655,6 +690,7 @@ public interface AdminActionOrBuilder * @return The restoreCloudDatabase. */ com.google.spanner.executor.v1.RestoreCloudDatabaseAction getRestoreCloudDatabase(); + /** * * @@ -680,6 +716,7 @@ public interface AdminActionOrBuilder * @return Whether the getCloudDatabase field is set. */ boolean hasGetCloudDatabase(); + /** * * @@ -692,6 +729,7 @@ public interface AdminActionOrBuilder * @return The getCloudDatabase. */ com.google.spanner.executor.v1.GetCloudDatabaseAction getGetCloudDatabase(); + /** * * @@ -715,6 +753,7 @@ public interface AdminActionOrBuilder * @return Whether the createCloudBackup field is set. */ boolean hasCreateCloudBackup(); + /** * * @@ -727,6 +766,7 @@ public interface AdminActionOrBuilder * @return The createCloudBackup. */ com.google.spanner.executor.v1.CreateCloudBackupAction getCreateCloudBackup(); + /** * * @@ -750,6 +790,7 @@ public interface AdminActionOrBuilder * @return Whether the copyCloudBackup field is set. */ boolean hasCopyCloudBackup(); + /** * * @@ -762,6 +803,7 @@ public interface AdminActionOrBuilder * @return The copyCloudBackup. */ com.google.spanner.executor.v1.CopyCloudBackupAction getCopyCloudBackup(); + /** * * @@ -785,6 +827,7 @@ public interface AdminActionOrBuilder * @return Whether the getCloudBackup field is set. */ boolean hasGetCloudBackup(); + /** * * @@ -797,6 +840,7 @@ public interface AdminActionOrBuilder * @return The getCloudBackup. */ com.google.spanner.executor.v1.GetCloudBackupAction getGetCloudBackup(); + /** * * @@ -820,6 +864,7 @@ public interface AdminActionOrBuilder * @return Whether the updateCloudBackup field is set. */ boolean hasUpdateCloudBackup(); + /** * * @@ -832,6 +877,7 @@ public interface AdminActionOrBuilder * @return The updateCloudBackup. */ com.google.spanner.executor.v1.UpdateCloudBackupAction getUpdateCloudBackup(); + /** * * @@ -855,6 +901,7 @@ public interface AdminActionOrBuilder * @return Whether the deleteCloudBackup field is set. */ boolean hasDeleteCloudBackup(); + /** * * @@ -867,6 +914,7 @@ public interface AdminActionOrBuilder * @return The deleteCloudBackup. */ com.google.spanner.executor.v1.DeleteCloudBackupAction getDeleteCloudBackup(); + /** * * @@ -890,6 +938,7 @@ public interface AdminActionOrBuilder * @return Whether the listCloudBackups field is set. */ boolean hasListCloudBackups(); + /** * * @@ -902,6 +951,7 @@ public interface AdminActionOrBuilder * @return The listCloudBackups. */ com.google.spanner.executor.v1.ListCloudBackupsAction getListCloudBackups(); + /** * * @@ -927,6 +977,7 @@ public interface AdminActionOrBuilder * @return Whether the listCloudBackupOperations field is set. */ boolean hasListCloudBackupOperations(); + /** * * @@ -941,6 +992,7 @@ public interface AdminActionOrBuilder * @return The listCloudBackupOperations. */ com.google.spanner.executor.v1.ListCloudBackupOperationsAction getListCloudBackupOperations(); + /** * * @@ -967,6 +1019,7 @@ public interface AdminActionOrBuilder * @return Whether the getOperation field is set. */ boolean hasGetOperation(); + /** * * @@ -979,6 +1032,7 @@ public interface AdminActionOrBuilder * @return The getOperation. */ com.google.spanner.executor.v1.GetOperationAction getGetOperation(); + /** * * @@ -1002,6 +1056,7 @@ public interface AdminActionOrBuilder * @return Whether the cancelOperation field is set. */ boolean hasCancelOperation(); + /** * * @@ -1014,6 +1069,7 @@ public interface AdminActionOrBuilder * @return The cancelOperation. */ com.google.spanner.executor.v1.CancelOperationAction getCancelOperation(); + /** * * @@ -1039,6 +1095,7 @@ public interface AdminActionOrBuilder * @return Whether the changeQuorumCloudDatabase field is set. */ boolean hasChangeQuorumCloudDatabase(); + /** * * @@ -1053,6 +1110,7 @@ public interface AdminActionOrBuilder * @return The changeQuorumCloudDatabase. */ com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction getChangeQuorumCloudDatabase(); + /** * * @@ -1067,5 +1125,42 @@ public interface AdminActionOrBuilder com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseActionOrBuilder getChangeQuorumCloudDatabaseOrBuilder(); + /** + * + * + *
                                +   * Action that adds splits to a Cloud Spanner database.
                                +   * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + * + * @return Whether the addSplitPoints field is set. + */ + boolean hasAddSplitPoints(); + + /** + * + * + *
                                +   * Action that adds splits to a Cloud Spanner database.
                                +   * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + * + * @return The addSplitPoints. + */ + com.google.spanner.executor.v1.AddSplitPointsAction getAddSplitPoints(); + + /** + * + * + *
                                +   * Action that adds splits to a Cloud Spanner database.
                                +   * 
                                + * + * .google.spanner.executor.v1.AddSplitPointsAction add_split_points = 29; + */ + com.google.spanner.executor.v1.AddSplitPointsActionOrBuilder getAddSplitPointsOrBuilder(); + com.google.spanner.executor.v1.AdminAction.ActionCase getActionCase(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java index 00ad983952c..14b971c3cff 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.executor.v1.AdminResult} */ -public final class AdminResult extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class AdminResult extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.AdminResult) AdminResultOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AdminResult"); + } + // Use AdminResult.newBuilder() to construct. - private AdminResult(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private AdminResult(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private AdminResult() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AdminResult(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_AdminResult_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_AdminResult_fieldAccessorTable @@ -64,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int BACKUP_RESPONSE_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.CloudBackupResponse backupResponse_; + /** * * @@ -79,6 +87,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasBackupResponse() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -96,6 +105,7 @@ public com.google.spanner.executor.v1.CloudBackupResponse getBackupResponse() { ? com.google.spanner.executor.v1.CloudBackupResponse.getDefaultInstance() : backupResponse_; } + /** * * @@ -114,6 +124,7 @@ public com.google.spanner.executor.v1.CloudBackupResponseOrBuilder getBackupResp public static final int OPERATION_RESPONSE_FIELD_NUMBER = 2; private com.google.spanner.executor.v1.OperationResponse operationResponse_; + /** * * @@ -129,6 +140,7 @@ public com.google.spanner.executor.v1.CloudBackupResponseOrBuilder getBackupResp public boolean hasOperationResponse() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -146,6 +158,7 @@ public com.google.spanner.executor.v1.OperationResponse getOperationResponse() { ? com.google.spanner.executor.v1.OperationResponse.getDefaultInstance() : operationResponse_; } + /** * * @@ -164,6 +177,7 @@ public com.google.spanner.executor.v1.OperationResponseOrBuilder getOperationRes public static final int DATABASE_RESPONSE_FIELD_NUMBER = 3; private com.google.spanner.executor.v1.CloudDatabaseResponse databaseResponse_; + /** * * @@ -179,6 +193,7 @@ public com.google.spanner.executor.v1.OperationResponseOrBuilder getOperationRes public boolean hasDatabaseResponse() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -196,6 +211,7 @@ public com.google.spanner.executor.v1.CloudDatabaseResponse getDatabaseResponse( ? com.google.spanner.executor.v1.CloudDatabaseResponse.getDefaultInstance() : databaseResponse_; } + /** * * @@ -215,6 +231,7 @@ public com.google.spanner.executor.v1.CloudDatabaseResponse getDatabaseResponse( public static final int INSTANCE_RESPONSE_FIELD_NUMBER = 4; private com.google.spanner.executor.v1.CloudInstanceResponse instanceResponse_; + /** * * @@ -230,6 +247,7 @@ public com.google.spanner.executor.v1.CloudDatabaseResponse getDatabaseResponse( public boolean hasInstanceResponse() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -247,6 +265,7 @@ public com.google.spanner.executor.v1.CloudInstanceResponse getInstanceResponse( ? com.google.spanner.executor.v1.CloudInstanceResponse.getDefaultInstance() : instanceResponse_; } + /** * * @@ -266,6 +285,7 @@ public com.google.spanner.executor.v1.CloudInstanceResponse getInstanceResponse( public static final int INSTANCE_CONFIG_RESPONSE_FIELD_NUMBER = 5; private com.google.spanner.executor.v1.CloudInstanceConfigResponse instanceConfigResponse_; + /** * * @@ -282,6 +302,7 @@ public com.google.spanner.executor.v1.CloudInstanceResponse getInstanceResponse( public boolean hasInstanceConfigResponse() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -300,6 +321,7 @@ public com.google.spanner.executor.v1.CloudInstanceConfigResponse getInstanceCon ? com.google.spanner.executor.v1.CloudInstanceConfigResponse.getDefaultInstance() : instanceConfigResponse_; } + /** * * @@ -481,38 +503,38 @@ public static com.google.spanner.executor.v1.AdminResult parseFrom( public static com.google.spanner.executor.v1.AdminResult parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.AdminResult parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.AdminResult parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.AdminResult parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.AdminResult parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.AdminResult parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -535,10 +557,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -548,7 +571,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.AdminResult} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.AdminResult) com.google.spanner.executor.v1.AdminResultOrBuilder { @@ -558,7 +581,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_AdminResult_fieldAccessorTable @@ -572,18 +595,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getBackupResponseFieldBuilder(); - getOperationResponseFieldBuilder(); - getDatabaseResponseFieldBuilder(); - getInstanceResponseFieldBuilder(); - getInstanceConfigResponseFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetBackupResponseFieldBuilder(); + internalGetOperationResponseFieldBuilder(); + internalGetDatabaseResponseFieldBuilder(); + internalGetInstanceResponseFieldBuilder(); + internalGetInstanceConfigResponseFieldBuilder(); } } @@ -685,39 +708,6 @@ private void buildPartial0(com.google.spanner.executor.v1.AdminResult result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.AdminResult) { @@ -773,35 +763,37 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getBackupResponseFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetBackupResponseFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { input.readMessage( - getOperationResponseFieldBuilder().getBuilder(), extensionRegistry); + internalGetOperationResponseFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { input.readMessage( - getDatabaseResponseFieldBuilder().getBuilder(), extensionRegistry); + internalGetDatabaseResponseFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { input.readMessage( - getInstanceResponseFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstanceResponseFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 case 42: { input.readMessage( - getInstanceConfigResponseFieldBuilder().getBuilder(), extensionRegistry); + internalGetInstanceConfigResponseFieldBuilder().getBuilder(), + extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -825,11 +817,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.CloudBackupResponse backupResponse_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudBackupResponse, com.google.spanner.executor.v1.CloudBackupResponse.Builder, com.google.spanner.executor.v1.CloudBackupResponseOrBuilder> backupResponseBuilder_; + /** * * @@ -844,6 +837,7 @@ public Builder mergeFrom( public boolean hasBackupResponse() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -864,6 +858,7 @@ public com.google.spanner.executor.v1.CloudBackupResponse getBackupResponse() { return backupResponseBuilder_.getMessage(); } } + /** * * @@ -886,6 +881,7 @@ public Builder setBackupResponse(com.google.spanner.executor.v1.CloudBackupRespo onChanged(); return this; } + /** * * @@ -906,6 +902,7 @@ public Builder setBackupResponse( onChanged(); return this; } + /** * * @@ -934,6 +931,7 @@ public Builder mergeBackupResponse(com.google.spanner.executor.v1.CloudBackupRes } return this; } + /** * * @@ -953,6 +951,7 @@ public Builder clearBackupResponse() { onChanged(); return this; } + /** * * @@ -965,8 +964,9 @@ public Builder clearBackupResponse() { public com.google.spanner.executor.v1.CloudBackupResponse.Builder getBackupResponseBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getBackupResponseFieldBuilder().getBuilder(); + return internalGetBackupResponseFieldBuilder().getBuilder(); } + /** * * @@ -986,6 +986,7 @@ public com.google.spanner.executor.v1.CloudBackupResponse.Builder getBackupRespo : backupResponse_; } } + /** * * @@ -995,14 +996,14 @@ public com.google.spanner.executor.v1.CloudBackupResponse.Builder getBackupRespo * * .google.spanner.executor.v1.CloudBackupResponse backup_response = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudBackupResponse, com.google.spanner.executor.v1.CloudBackupResponse.Builder, com.google.spanner.executor.v1.CloudBackupResponseOrBuilder> - getBackupResponseFieldBuilder() { + internalGetBackupResponseFieldBuilder() { if (backupResponseBuilder_ == null) { backupResponseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudBackupResponse, com.google.spanner.executor.v1.CloudBackupResponse.Builder, com.google.spanner.executor.v1.CloudBackupResponseOrBuilder>( @@ -1013,11 +1014,12 @@ public com.google.spanner.executor.v1.CloudBackupResponse.Builder getBackupRespo } private com.google.spanner.executor.v1.OperationResponse operationResponse_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.OperationResponse, com.google.spanner.executor.v1.OperationResponse.Builder, com.google.spanner.executor.v1.OperationResponseOrBuilder> operationResponseBuilder_; + /** * * @@ -1032,6 +1034,7 @@ public com.google.spanner.executor.v1.CloudBackupResponse.Builder getBackupRespo public boolean hasOperationResponse() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1052,6 +1055,7 @@ public com.google.spanner.executor.v1.OperationResponse getOperationResponse() { return operationResponseBuilder_.getMessage(); } } + /** * * @@ -1074,6 +1078,7 @@ public Builder setOperationResponse(com.google.spanner.executor.v1.OperationResp onChanged(); return this; } + /** * * @@ -1094,6 +1099,7 @@ public Builder setOperationResponse( onChanged(); return this; } + /** * * @@ -1122,6 +1128,7 @@ public Builder mergeOperationResponse(com.google.spanner.executor.v1.OperationRe } return this; } + /** * * @@ -1141,6 +1148,7 @@ public Builder clearOperationResponse() { onChanged(); return this; } + /** * * @@ -1153,8 +1161,9 @@ public Builder clearOperationResponse() { public com.google.spanner.executor.v1.OperationResponse.Builder getOperationResponseBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getOperationResponseFieldBuilder().getBuilder(); + return internalGetOperationResponseFieldBuilder().getBuilder(); } + /** * * @@ -1174,6 +1183,7 @@ public com.google.spanner.executor.v1.OperationResponse.Builder getOperationResp : operationResponse_; } } + /** * * @@ -1183,14 +1193,14 @@ public com.google.spanner.executor.v1.OperationResponse.Builder getOperationResp * * .google.spanner.executor.v1.OperationResponse operation_response = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.OperationResponse, com.google.spanner.executor.v1.OperationResponse.Builder, com.google.spanner.executor.v1.OperationResponseOrBuilder> - getOperationResponseFieldBuilder() { + internalGetOperationResponseFieldBuilder() { if (operationResponseBuilder_ == null) { operationResponseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.OperationResponse, com.google.spanner.executor.v1.OperationResponse.Builder, com.google.spanner.executor.v1.OperationResponseOrBuilder>( @@ -1201,11 +1211,12 @@ public com.google.spanner.executor.v1.OperationResponse.Builder getOperationResp } private com.google.spanner.executor.v1.CloudDatabaseResponse databaseResponse_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudDatabaseResponse, com.google.spanner.executor.v1.CloudDatabaseResponse.Builder, com.google.spanner.executor.v1.CloudDatabaseResponseOrBuilder> databaseResponseBuilder_; + /** * * @@ -1220,6 +1231,7 @@ public com.google.spanner.executor.v1.OperationResponse.Builder getOperationResp public boolean hasDatabaseResponse() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1240,6 +1252,7 @@ public com.google.spanner.executor.v1.CloudDatabaseResponse getDatabaseResponse( return databaseResponseBuilder_.getMessage(); } } + /** * * @@ -1262,6 +1275,7 @@ public Builder setDatabaseResponse(com.google.spanner.executor.v1.CloudDatabaseR onChanged(); return this; } + /** * * @@ -1282,6 +1296,7 @@ public Builder setDatabaseResponse( onChanged(); return this; } + /** * * @@ -1311,6 +1326,7 @@ public Builder mergeDatabaseResponse( } return this; } + /** * * @@ -1330,6 +1346,7 @@ public Builder clearDatabaseResponse() { onChanged(); return this; } + /** * * @@ -1343,8 +1360,9 @@ public Builder clearDatabaseResponse() { getDatabaseResponseBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getDatabaseResponseFieldBuilder().getBuilder(); + return internalGetDatabaseResponseFieldBuilder().getBuilder(); } + /** * * @@ -1364,6 +1382,7 @@ public Builder clearDatabaseResponse() { : databaseResponse_; } } + /** * * @@ -1373,14 +1392,14 @@ public Builder clearDatabaseResponse() { * * .google.spanner.executor.v1.CloudDatabaseResponse database_response = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudDatabaseResponse, com.google.spanner.executor.v1.CloudDatabaseResponse.Builder, com.google.spanner.executor.v1.CloudDatabaseResponseOrBuilder> - getDatabaseResponseFieldBuilder() { + internalGetDatabaseResponseFieldBuilder() { if (databaseResponseBuilder_ == null) { databaseResponseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudDatabaseResponse, com.google.spanner.executor.v1.CloudDatabaseResponse.Builder, com.google.spanner.executor.v1.CloudDatabaseResponseOrBuilder>( @@ -1391,11 +1410,12 @@ public Builder clearDatabaseResponse() { } private com.google.spanner.executor.v1.CloudInstanceResponse instanceResponse_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudInstanceResponse, com.google.spanner.executor.v1.CloudInstanceResponse.Builder, com.google.spanner.executor.v1.CloudInstanceResponseOrBuilder> instanceResponseBuilder_; + /** * * @@ -1410,6 +1430,7 @@ public Builder clearDatabaseResponse() { public boolean hasInstanceResponse() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1430,6 +1451,7 @@ public com.google.spanner.executor.v1.CloudInstanceResponse getInstanceResponse( return instanceResponseBuilder_.getMessage(); } } + /** * * @@ -1452,6 +1474,7 @@ public Builder setInstanceResponse(com.google.spanner.executor.v1.CloudInstanceR onChanged(); return this; } + /** * * @@ -1472,6 +1495,7 @@ public Builder setInstanceResponse( onChanged(); return this; } + /** * * @@ -1501,6 +1525,7 @@ public Builder mergeInstanceResponse( } return this; } + /** * * @@ -1520,6 +1545,7 @@ public Builder clearInstanceResponse() { onChanged(); return this; } + /** * * @@ -1533,8 +1559,9 @@ public Builder clearInstanceResponse() { getInstanceResponseBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getInstanceResponseFieldBuilder().getBuilder(); + return internalGetInstanceResponseFieldBuilder().getBuilder(); } + /** * * @@ -1554,6 +1581,7 @@ public Builder clearInstanceResponse() { : instanceResponse_; } } + /** * * @@ -1563,14 +1591,14 @@ public Builder clearInstanceResponse() { * * .google.spanner.executor.v1.CloudInstanceResponse instance_response = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudInstanceResponse, com.google.spanner.executor.v1.CloudInstanceResponse.Builder, com.google.spanner.executor.v1.CloudInstanceResponseOrBuilder> - getInstanceResponseFieldBuilder() { + internalGetInstanceResponseFieldBuilder() { if (instanceResponseBuilder_ == null) { instanceResponseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudInstanceResponse, com.google.spanner.executor.v1.CloudInstanceResponse.Builder, com.google.spanner.executor.v1.CloudInstanceResponseOrBuilder>( @@ -1581,11 +1609,12 @@ public Builder clearInstanceResponse() { } private com.google.spanner.executor.v1.CloudInstanceConfigResponse instanceConfigResponse_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudInstanceConfigResponse, com.google.spanner.executor.v1.CloudInstanceConfigResponse.Builder, com.google.spanner.executor.v1.CloudInstanceConfigResponseOrBuilder> instanceConfigResponseBuilder_; + /** * * @@ -1601,6 +1630,7 @@ public Builder clearInstanceResponse() { public boolean hasInstanceConfigResponse() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1622,6 +1652,7 @@ public com.google.spanner.executor.v1.CloudInstanceConfigResponse getInstanceCon return instanceConfigResponseBuilder_.getMessage(); } } + /** * * @@ -1646,6 +1677,7 @@ public Builder setInstanceConfigResponse( onChanged(); return this; } + /** * * @@ -1667,6 +1699,7 @@ public Builder setInstanceConfigResponse( onChanged(); return this; } + /** * * @@ -1698,6 +1731,7 @@ public Builder mergeInstanceConfigResponse( } return this; } + /** * * @@ -1718,6 +1752,7 @@ public Builder clearInstanceConfigResponse() { onChanged(); return this; } + /** * * @@ -1732,8 +1767,9 @@ public Builder clearInstanceConfigResponse() { getInstanceConfigResponseBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getInstanceConfigResponseFieldBuilder().getBuilder(); + return internalGetInstanceConfigResponseFieldBuilder().getBuilder(); } + /** * * @@ -1754,6 +1790,7 @@ public Builder clearInstanceConfigResponse() { : instanceConfigResponse_; } } + /** * * @@ -1764,14 +1801,14 @@ public Builder clearInstanceConfigResponse() { * .google.spanner.executor.v1.CloudInstanceConfigResponse instance_config_response = 5; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudInstanceConfigResponse, com.google.spanner.executor.v1.CloudInstanceConfigResponse.Builder, com.google.spanner.executor.v1.CloudInstanceConfigResponseOrBuilder> - getInstanceConfigResponseFieldBuilder() { + internalGetInstanceConfigResponseFieldBuilder() { if (instanceConfigResponseBuilder_ == null) { instanceConfigResponseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloudInstanceConfigResponse, com.google.spanner.executor.v1.CloudInstanceConfigResponse.Builder, com.google.spanner.executor.v1.CloudInstanceConfigResponseOrBuilder>( @@ -1781,17 +1818,6 @@ public Builder clearInstanceConfigResponse() { return instanceConfigResponseBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.AdminResult) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java index dc334613ce2..c94d4b47cea 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface AdminResultOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.AdminResult) @@ -36,6 +38,7 @@ public interface AdminResultOrBuilder * @return Whether the backupResponse field is set. */ boolean hasBackupResponse(); + /** * * @@ -48,6 +51,7 @@ public interface AdminResultOrBuilder * @return The backupResponse. */ com.google.spanner.executor.v1.CloudBackupResponse getBackupResponse(); + /** * * @@ -71,6 +75,7 @@ public interface AdminResultOrBuilder * @return Whether the operationResponse field is set. */ boolean hasOperationResponse(); + /** * * @@ -83,6 +88,7 @@ public interface AdminResultOrBuilder * @return The operationResponse. */ com.google.spanner.executor.v1.OperationResponse getOperationResponse(); + /** * * @@ -106,6 +112,7 @@ public interface AdminResultOrBuilder * @return Whether the databaseResponse field is set. */ boolean hasDatabaseResponse(); + /** * * @@ -118,6 +125,7 @@ public interface AdminResultOrBuilder * @return The databaseResponse. */ com.google.spanner.executor.v1.CloudDatabaseResponse getDatabaseResponse(); + /** * * @@ -141,6 +149,7 @@ public interface AdminResultOrBuilder * @return Whether the instanceResponse field is set. */ boolean hasInstanceResponse(); + /** * * @@ -153,6 +162,7 @@ public interface AdminResultOrBuilder * @return The instanceResponse. */ com.google.spanner.executor.v1.CloudInstanceResponse getInstanceResponse(); + /** * * @@ -177,6 +187,7 @@ public interface AdminResultOrBuilder * @return Whether the instanceConfigResponse field is set. */ boolean hasInstanceConfigResponse(); + /** * * @@ -190,6 +201,7 @@ public interface AdminResultOrBuilder * @return The instanceConfigResponse. */ com.google.spanner.executor.v1.CloudInstanceConfigResponse getInstanceConfigResponse(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java index e80d6ed752f..fb25206e041 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.BatchDmlAction} */ -public final class BatchDmlAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BatchDmlAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.BatchDmlAction) BatchDmlActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BatchDmlAction"); + } + // Use BatchDmlAction.newBuilder() to construct. - private BatchDmlAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BatchDmlAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private BatchDmlAction() { updates_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchDmlAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_BatchDmlAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_BatchDmlAction_fieldAccessorTable @@ -63,10 +70,12 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { com.google.spanner.executor.v1.BatchDmlAction.Builder.class); } + private int bitField0_; public static final int UPDATES_FIELD_NUMBER = 1; @SuppressWarnings("serial") private java.util.List updates_; + /** * * @@ -80,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getUpdatesList() { return updates_; } + /** * * @@ -94,6 +104,7 @@ public java.util.List getUpdatesList getUpdatesOrBuilderList() { return updates_; } + /** * * @@ -107,6 +118,7 @@ public java.util.List getUpdatesList public int getUpdatesCount() { return updates_.size(); } + /** * * @@ -120,6 +132,7 @@ public int getUpdatesCount() { public com.google.spanner.executor.v1.QueryAction getUpdates(int index) { return updates_.get(index); } + /** * * @@ -134,6 +147,45 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdatesOrBuilder(i return updates_.get(index); } + public static final int LAST_STATEMENTS_FIELD_NUMBER = 2; + private boolean lastStatements_ = false; + + /** + * + * + *
                                +   * Whether to set this request with the last statement option in the
                                +   * transaction. The transaction should be committed after processing this
                                +   * request.
                                +   * 
                                + * + * optional bool last_statements = 2; + * + * @return Whether the lastStatements field is set. + */ + @java.lang.Override + public boolean hasLastStatements() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * Whether to set this request with the last statement option in the
                                +   * transaction. The transaction should be committed after processing this
                                +   * request.
                                +   * 
                                + * + * optional bool last_statements = 2; + * + * @return The lastStatements. + */ + @java.lang.Override + public boolean getLastStatements() { + return lastStatements_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -151,6 +203,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < updates_.size(); i++) { output.writeMessage(1, updates_.get(i)); } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeBool(2, lastStatements_); + } getUnknownFields().writeTo(output); } @@ -163,6 +218,9 @@ public int getSerializedSize() { for (int i = 0; i < updates_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, updates_.get(i)); } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, lastStatements_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -180,6 +238,10 @@ public boolean equals(final java.lang.Object obj) { (com.google.spanner.executor.v1.BatchDmlAction) obj; if (!getUpdatesList().equals(other.getUpdatesList())) return false; + if (hasLastStatements() != other.hasLastStatements()) return false; + if (hasLastStatements()) { + if (getLastStatements() != other.getLastStatements()) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -195,6 +257,10 @@ public int hashCode() { hash = (37 * hash) + UPDATES_FIELD_NUMBER; hash = (53 * hash) + getUpdatesList().hashCode(); } + if (hasLastStatements()) { + hash = (37 * hash) + LAST_STATEMENTS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getLastStatements()); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -237,38 +303,38 @@ public static com.google.spanner.executor.v1.BatchDmlAction parseFrom( public static com.google.spanner.executor.v1.BatchDmlAction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.BatchDmlAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.BatchDmlAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.BatchDmlAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.BatchDmlAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.BatchDmlAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -291,10 +357,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -304,7 +371,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.BatchDmlAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.BatchDmlAction) com.google.spanner.executor.v1.BatchDmlActionOrBuilder { @@ -314,7 +381,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_BatchDmlAction_fieldAccessorTable @@ -326,7 +393,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.BatchDmlAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -341,6 +408,7 @@ public Builder clear() { updatesBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000001); + lastStatements_ = false; return this; } @@ -390,39 +458,12 @@ private void buildPartialRepeatedFields(com.google.spanner.executor.v1.BatchDmlA private void buildPartial0(com.google.spanner.executor.v1.BatchDmlAction result) { int from_bitField0_ = 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); + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.lastStatements_ = lastStatements_; + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; } @java.lang.Override @@ -456,14 +497,17 @@ public Builder mergeFrom(com.google.spanner.executor.v1.BatchDmlAction other) { updates_ = other.updates_; bitField0_ = (bitField0_ & ~0x00000001); updatesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getUpdatesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetUpdatesFieldBuilder() : null; } else { updatesBuilder_.addAllMessages(other.updates_); } } } + if (other.hasLastStatements()) { + setLastStatements(other.getLastStatements()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -503,6 +547,12 @@ public Builder mergeFrom( } break; } // case 10 + case 16: + { + lastStatements_ = input.readBool(); + bitField0_ |= 0x00000002; + break; + } // case 16 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -532,7 +582,7 @@ private void ensureUpdatesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> @@ -554,6 +604,7 @@ public java.util.List getUpdatesList return updatesBuilder_.getMessageList(); } } + /** * * @@ -570,6 +621,7 @@ public int getUpdatesCount() { return updatesBuilder_.getCount(); } } + /** * * @@ -586,6 +638,7 @@ public com.google.spanner.executor.v1.QueryAction getUpdates(int index) { return updatesBuilder_.getMessage(index); } } + /** * * @@ -608,6 +661,7 @@ public Builder setUpdates(int index, com.google.spanner.executor.v1.QueryAction } return this; } + /** * * @@ -628,6 +682,7 @@ public Builder setUpdates( } return this; } + /** * * @@ -650,6 +705,7 @@ public Builder addUpdates(com.google.spanner.executor.v1.QueryAction value) { } return this; } + /** * * @@ -672,6 +728,7 @@ public Builder addUpdates(int index, com.google.spanner.executor.v1.QueryAction } return this; } + /** * * @@ -691,6 +748,7 @@ public Builder addUpdates(com.google.spanner.executor.v1.QueryAction.Builder bui } return this; } + /** * * @@ -711,6 +769,7 @@ public Builder addUpdates( } return this; } + /** * * @@ -731,6 +790,7 @@ public Builder addAllUpdates( } return this; } + /** * * @@ -750,6 +810,7 @@ public Builder clearUpdates() { } return this; } + /** * * @@ -769,6 +830,7 @@ public Builder removeUpdates(int index) { } return this; } + /** * * @@ -779,8 +841,9 @@ public Builder removeUpdates(int index) { * repeated .google.spanner.executor.v1.QueryAction updates = 1; */ public com.google.spanner.executor.v1.QueryAction.Builder getUpdatesBuilder(int index) { - return getUpdatesFieldBuilder().getBuilder(index); + return internalGetUpdatesFieldBuilder().getBuilder(index); } + /** * * @@ -797,6 +860,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdatesOrBuilder(i return updatesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -814,6 +878,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdatesOrBuilder(i return java.util.Collections.unmodifiableList(updates_); } } + /** * * @@ -824,9 +889,10 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdatesOrBuilder(i * repeated .google.spanner.executor.v1.QueryAction updates = 1; */ public com.google.spanner.executor.v1.QueryAction.Builder addUpdatesBuilder() { - return getUpdatesFieldBuilder() + return internalGetUpdatesFieldBuilder() .addBuilder(com.google.spanner.executor.v1.QueryAction.getDefaultInstance()); } + /** * * @@ -837,9 +903,10 @@ public com.google.spanner.executor.v1.QueryAction.Builder addUpdatesBuilder() { * repeated .google.spanner.executor.v1.QueryAction updates = 1; */ public com.google.spanner.executor.v1.QueryAction.Builder addUpdatesBuilder(int index) { - return getUpdatesFieldBuilder() + return internalGetUpdatesFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.QueryAction.getDefaultInstance()); } + /** * * @@ -851,17 +918,17 @@ public com.google.spanner.executor.v1.QueryAction.Builder addUpdatesBuilder(int */ public java.util.List getUpdatesBuilderList() { - return getUpdatesFieldBuilder().getBuilderList(); + return internalGetUpdatesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> - getUpdatesFieldBuilder() { + internalGetUpdatesFieldBuilder() { if (updatesBuilder_ == null) { updatesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder>( @@ -871,15 +938,84 @@ public com.google.spanner.executor.v1.QueryAction.Builder addUpdatesBuilder(int return updatesBuilder_; } + private boolean lastStatements_; + + /** + * + * + *
                                +     * Whether to set this request with the last statement option in the
                                +     * transaction. The transaction should be committed after processing this
                                +     * request.
                                +     * 
                                + * + * optional bool last_statements = 2; + * + * @return Whether the lastStatements field is set. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean hasLastStatements() { + return ((bitField0_ & 0x00000002) != 0); } + /** + * + * + *
                                +     * Whether to set this request with the last statement option in the
                                +     * transaction. The transaction should be committed after processing this
                                +     * request.
                                +     * 
                                + * + * optional bool last_statements = 2; + * + * @return The lastStatements. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public boolean getLastStatements() { + return lastStatements_; + } + + /** + * + * + *
                                +     * Whether to set this request with the last statement option in the
                                +     * transaction. The transaction should be committed after processing this
                                +     * request.
                                +     * 
                                + * + * optional bool last_statements = 2; + * + * @param value The lastStatements to set. + * @return This builder for chaining. + */ + public Builder setLastStatements(boolean value) { + + lastStatements_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Whether to set this request with the last statement option in the
                                +     * transaction. The transaction should be committed after processing this
                                +     * request.
                                +     * 
                                + * + * optional bool last_statements = 2; + * + * @return This builder for chaining. + */ + public Builder clearLastStatements() { + bitField0_ = (bitField0_ & ~0x00000002); + lastStatements_ = false; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.BatchDmlAction) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java index 9df64620fef..b2eefb53454 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface BatchDmlActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.BatchDmlAction) @@ -34,6 +36,7 @@ public interface BatchDmlActionOrBuilder * repeated .google.spanner.executor.v1.QueryAction updates = 1; */ java.util.List getUpdatesList(); + /** * * @@ -44,6 +47,7 @@ public interface BatchDmlActionOrBuilder * repeated .google.spanner.executor.v1.QueryAction updates = 1; */ com.google.spanner.executor.v1.QueryAction getUpdates(int index); + /** * * @@ -54,6 +58,7 @@ public interface BatchDmlActionOrBuilder * repeated .google.spanner.executor.v1.QueryAction updates = 1; */ int getUpdatesCount(); + /** * * @@ -65,6 +70,7 @@ public interface BatchDmlActionOrBuilder */ java.util.List getUpdatesOrBuilderList(); + /** * * @@ -75,4 +81,34 @@ public interface BatchDmlActionOrBuilder * repeated .google.spanner.executor.v1.QueryAction updates = 1; */ com.google.spanner.executor.v1.QueryActionOrBuilder getUpdatesOrBuilder(int index); + + /** + * + * + *
                                +   * Whether to set this request with the last statement option in the
                                +   * transaction. The transaction should be committed after processing this
                                +   * request.
                                +   * 
                                + * + * optional bool last_statements = 2; + * + * @return Whether the lastStatements field is set. + */ + boolean hasLastStatements(); + + /** + * + * + *
                                +   * Whether to set this request with the last statement option in the
                                +   * transaction. The transaction should be committed after processing this
                                +   * request.
                                +   * 
                                + * + * optional bool last_statements = 2; + * + * @return The lastStatements. + */ + boolean getLastStatements(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java index d63f9a2ee3c..4f68b2ac15d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.executor.v1.BatchPartition} */ -public final class BatchPartition extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BatchPartition extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.BatchPartition) BatchPartitionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BatchPartition"); + } + // Use BatchPartition.newBuilder() to construct. - private BatchPartition(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BatchPartition(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +59,13 @@ private BatchPartition() { index_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchPartition(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_BatchPartition_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_BatchPartition_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PARTITION_FIELD_NUMBER = 1; private com.google.protobuf.ByteString partition_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -88,6 +96,7 @@ public com.google.protobuf.ByteString getPartition() { public static final int PARTITION_TOKEN_FIELD_NUMBER = 2; private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -108,6 +117,7 @@ public com.google.protobuf.ByteString getPartitionToken() { @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -124,6 +134,7 @@ public com.google.protobuf.ByteString getPartitionToken() { public boolean hasTable() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -148,6 +159,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -177,6 +189,7 @@ public com.google.protobuf.ByteString getTableBytes() { @SuppressWarnings("serial") private volatile java.lang.Object index_ = ""; + /** * * @@ -192,6 +205,7 @@ public com.google.protobuf.ByteString getTableBytes() { public boolean hasIndex() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -215,6 +229,7 @@ public java.lang.String getIndex() { return s; } } + /** * * @@ -260,10 +275,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeBytes(2, partitionToken_); } if (((bitField0_ & 0x00000001) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, table_); + com.google.protobuf.GeneratedMessage.writeString(output, 3, table_); } if (((bitField0_ & 0x00000002) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, index_); + com.google.protobuf.GeneratedMessage.writeString(output, 4, index_); } getUnknownFields().writeTo(output); } @@ -281,10 +296,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, partitionToken_); } if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, table_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, table_); } if (((bitField0_ & 0x00000002) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, index_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, index_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -377,38 +392,38 @@ public static com.google.spanner.executor.v1.BatchPartition parseFrom( public static com.google.spanner.executor.v1.BatchPartition parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.BatchPartition parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.BatchPartition parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.BatchPartition parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.BatchPartition parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.BatchPartition parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -431,10 +446,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -445,7 +461,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.BatchPartition} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.BatchPartition) com.google.spanner.executor.v1.BatchPartitionOrBuilder { @@ -455,7 +471,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_BatchPartition_fieldAccessorTable @@ -467,7 +483,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.BatchPartition.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -533,39 +549,6 @@ private void buildPartial0(com.google.spanner.executor.v1.BatchPartition result) result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.BatchPartition) { @@ -578,10 +561,10 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(com.google.spanner.executor.v1.BatchPartition other) { if (other == com.google.spanner.executor.v1.BatchPartition.getDefaultInstance()) return this; - if (other.getPartition() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getPartition().isEmpty()) { setPartition(other.getPartition()); } - if (other.getPartitionToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getPartitionToken().isEmpty()) { setPartitionToken(other.getPartitionToken()); } if (other.hasTable()) { @@ -664,6 +647,7 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.ByteString partition_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -679,6 +663,7 @@ public Builder mergeFrom( public com.google.protobuf.ByteString getPartition() { return partition_; } + /** * * @@ -700,6 +685,7 @@ public Builder setPartition(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -719,6 +705,7 @@ public Builder clearPartition() { } private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -734,6 +721,7 @@ public Builder clearPartition() { public com.google.protobuf.ByteString getPartitionToken() { return partitionToken_; } + /** * * @@ -755,6 +743,7 @@ public Builder setPartitionToken(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -774,6 +763,7 @@ public Builder clearPartitionToken() { } private java.lang.Object table_ = ""; + /** * * @@ -789,6 +779,7 @@ public Builder clearPartitionToken() { public boolean hasTable() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -812,6 +803,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -835,6 +827,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -857,6 +850,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -875,6 +869,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -900,6 +895,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { } private java.lang.Object index_ = ""; + /** * * @@ -914,6 +910,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { public boolean hasIndex() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -936,6 +933,7 @@ public java.lang.String getIndex() { return (java.lang.String) ref; } } + /** * * @@ -958,6 +956,7 @@ public com.google.protobuf.ByteString getIndexBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -979,6 +978,7 @@ public Builder setIndex(java.lang.String value) { onChanged(); return this; } + /** * * @@ -996,6 +996,7 @@ public Builder clearIndex() { onChanged(); return this; } + /** * * @@ -1019,17 +1020,6 @@ public Builder setIndexBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.BatchPartition) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java index 2989a520696..ec2e07dbf6e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface BatchPartitionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.BatchPartition) @@ -63,6 +65,7 @@ public interface BatchPartitionOrBuilder * @return Whether the table field is set. */ boolean hasTable(); + /** * * @@ -76,6 +79,7 @@ public interface BatchPartitionOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -102,6 +106,7 @@ public interface BatchPartitionOrBuilder * @return Whether the index field is set. */ boolean hasIndex(); + /** * * @@ -114,6 +119,7 @@ public interface BatchPartitionOrBuilder * @return The index. */ java.lang.String getIndex(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java index c3ccec7cee9..c278e607f75 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CancelOperationAction} */ -public final class CancelOperationAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CancelOperationAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CancelOperationAction) CancelOperationActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CancelOperationAction"); + } + // Use CancelOperationAction.newBuilder() to construct. - private CancelOperationAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CancelOperationAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private CancelOperationAction() { operation_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CancelOperationAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CancelOperationAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CancelOperationAction_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object operation_ = ""; + /** * * @@ -90,6 +98,7 @@ public java.lang.String getOperation() { return s; } } + /** * * @@ -128,8 +137,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operation_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, operation_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operation_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, operation_); } getUnknownFields().writeTo(output); } @@ -140,8 +149,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operation_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, operation_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operation_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, operation_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -215,38 +224,38 @@ public static com.google.spanner.executor.v1.CancelOperationAction parseFrom( public static com.google.spanner.executor.v1.CancelOperationAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CancelOperationAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CancelOperationAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CancelOperationAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CancelOperationAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CancelOperationAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -269,10 +278,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -282,7 +292,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CancelOperationAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CancelOperationAction) com.google.spanner.executor.v1.CancelOperationActionOrBuilder { @@ -292,7 +302,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CancelOperationAction_fieldAccessorTable @@ -304,7 +314,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.CancelOperationAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -354,39 +364,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CancelOperationAction } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CancelOperationAction) { @@ -457,6 +434,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object operation_ = ""; + /** * * @@ -479,6 +457,7 @@ public java.lang.String getOperation() { return (java.lang.String) ref; } } + /** * * @@ -501,6 +480,7 @@ public com.google.protobuf.ByteString getOperationBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -522,6 +502,7 @@ public Builder setOperation(java.lang.String value) { onChanged(); return this; } + /** * * @@ -539,6 +520,7 @@ public Builder clearOperation() { onChanged(); return this; } + /** * * @@ -562,17 +544,6 @@ public Builder setOperationBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CancelOperationAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java index b523d4a24d5..20a22605de1 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CancelOperationActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CancelOperationAction) @@ -36,6 +38,7 @@ public interface CancelOperationActionOrBuilder * @return The operation. */ java.lang.String getOperation(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java index f9c8a99d4f2..8e7adf8ea95 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,14 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction} */ -public final class ChangeQuorumCloudDatabaseAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ChangeQuorumCloudDatabaseAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction) ChangeQuorumCloudDatabaseActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ChangeQuorumCloudDatabaseAction"); + } + // Use ChangeQuorumCloudDatabaseAction.newBuilder() to construct. - private ChangeQuorumCloudDatabaseAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ChangeQuorumCloudDatabaseAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +56,13 @@ private ChangeQuorumCloudDatabaseAction() { servingLocations_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ChangeQuorumCloudDatabaseAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_fieldAccessorTable @@ -70,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object databaseUri_ = ""; + /** * * @@ -85,6 +92,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasDatabaseUri() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -108,6 +116,7 @@ public java.lang.String getDatabaseUri() { return s; } } + /** * * @@ -137,6 +146,7 @@ public com.google.protobuf.ByteString getDatabaseUriBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList servingLocations_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -151,6 +161,7 @@ public com.google.protobuf.ByteString getDatabaseUriBytes() { public com.google.protobuf.ProtocolStringList getServingLocationsList() { return servingLocations_; } + /** * * @@ -165,6 +176,7 @@ public com.google.protobuf.ProtocolStringList getServingLocationsList() { public int getServingLocationsCount() { return servingLocations_.size(); } + /** * * @@ -180,6 +192,7 @@ public int getServingLocationsCount() { public java.lang.String getServingLocations(int index) { return servingLocations_.get(index); } + /** * * @@ -211,10 +224,10 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { if (((bitField0_ & 0x00000001) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, databaseUri_); + com.google.protobuf.GeneratedMessage.writeString(output, 1, databaseUri_); } for (int i = 0; i < servingLocations_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, servingLocations_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 2, servingLocations_.getRaw(i)); } getUnknownFields().writeTo(output); } @@ -226,7 +239,7 @@ public int getSerializedSize() { size = 0; if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, databaseUri_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, databaseUri_); } { int dataSize = 0; @@ -318,38 +331,38 @@ public static com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction par public static com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -373,10 +386,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -386,7 +400,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction) com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseActionOrBuilder { @@ -396,7 +410,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_fieldAccessorTable @@ -408,7 +422,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -468,39 +482,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction) { @@ -589,6 +570,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object databaseUri_ = ""; + /** * * @@ -603,6 +585,7 @@ public Builder mergeFrom( public boolean hasDatabaseUri() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -625,6 +608,7 @@ public java.lang.String getDatabaseUri() { return (java.lang.String) ref; } } + /** * * @@ -647,6 +631,7 @@ public com.google.protobuf.ByteString getDatabaseUriBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -668,6 +653,7 @@ public Builder setDatabaseUri(java.lang.String value) { onChanged(); return this; } + /** * * @@ -685,6 +671,7 @@ public Builder clearDatabaseUri() { onChanged(); return this; } + /** * * @@ -717,6 +704,7 @@ private void ensureServingLocationsIsMutable() { } bitField0_ |= 0x00000002; } + /** * * @@ -732,6 +720,7 @@ public com.google.protobuf.ProtocolStringList getServingLocationsList() { servingLocations_.makeImmutable(); return servingLocations_; } + /** * * @@ -746,6 +735,7 @@ public com.google.protobuf.ProtocolStringList getServingLocationsList() { public int getServingLocationsCount() { return servingLocations_.size(); } + /** * * @@ -761,6 +751,7 @@ public int getServingLocationsCount() { public java.lang.String getServingLocations(int index) { return servingLocations_.get(index); } + /** * * @@ -776,6 +767,7 @@ public java.lang.String getServingLocations(int index) { public com.google.protobuf.ByteString getServingLocationsBytes(int index) { return servingLocations_.getByteString(index); } + /** * * @@ -799,6 +791,7 @@ public Builder setServingLocations(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -821,6 +814,7 @@ public Builder addServingLocations(java.lang.String value) { onChanged(); return this; } + /** * * @@ -840,6 +834,7 @@ public Builder addAllServingLocations(java.lang.Iterable value onChanged(); return this; } + /** * * @@ -858,6 +853,7 @@ public Builder clearServingLocations() { onChanged(); return this; } + /** * * @@ -882,17 +878,6 @@ public Builder addServingLocationsBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java index 373ac4a663b..59c996dff72 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ChangeQuorumCloudDatabaseActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ChangeQuorumCloudDatabaseAction) @@ -36,6 +38,7 @@ public interface ChangeQuorumCloudDatabaseActionOrBuilder * @return Whether the databaseUri field is set. */ boolean hasDatabaseUri(); + /** * * @@ -48,6 +51,7 @@ public interface ChangeQuorumCloudDatabaseActionOrBuilder * @return The databaseUri. */ java.lang.String getDatabaseUri(); + /** * * @@ -73,6 +77,7 @@ public interface ChangeQuorumCloudDatabaseActionOrBuilder * @return A list containing the servingLocations. */ java.util.List getServingLocationsList(); + /** * * @@ -85,6 +90,7 @@ public interface ChangeQuorumCloudDatabaseActionOrBuilder * @return The count of servingLocations. */ int getServingLocationsCount(); + /** * * @@ -98,6 +104,7 @@ public interface ChangeQuorumCloudDatabaseActionOrBuilder * @return The servingLocations at the given index. */ java.lang.String getServingLocations(int index); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java index edbe5874f5f..e0084b3729e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -30,31 +31,37 @@ * * Protobuf type {@code google.spanner.executor.v1.ChangeStreamRecord} */ -public final class ChangeStreamRecord extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ChangeStreamRecord extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ChangeStreamRecord) ChangeStreamRecordOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ChangeStreamRecord"); + } + // Use ChangeStreamRecord.newBuilder() to construct. - private ChangeStreamRecord(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ChangeStreamRecord(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private ChangeStreamRecord() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ChangeStreamRecord(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChangeStreamRecord_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChangeStreamRecord_fieldAccessorTable @@ -81,6 +88,7 @@ public enum RecordCase private RecordCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -116,6 +124,7 @@ public RecordCase getRecordCase() { } public static final int DATA_CHANGE_FIELD_NUMBER = 1; + /** * * @@ -131,6 +140,7 @@ public RecordCase getRecordCase() { public boolean hasDataChange() { return recordCase_ == 1; } + /** * * @@ -149,6 +159,7 @@ public com.google.spanner.executor.v1.DataChangeRecord getDataChange() { } return com.google.spanner.executor.v1.DataChangeRecord.getDefaultInstance(); } + /** * * @@ -167,6 +178,7 @@ public com.google.spanner.executor.v1.DataChangeRecordOrBuilder getDataChangeOrB } public static final int CHILD_PARTITION_FIELD_NUMBER = 2; + /** * * @@ -182,6 +194,7 @@ public com.google.spanner.executor.v1.DataChangeRecordOrBuilder getDataChangeOrB public boolean hasChildPartition() { return recordCase_ == 2; } + /** * * @@ -200,6 +213,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord getChildPartition() } return com.google.spanner.executor.v1.ChildPartitionsRecord.getDefaultInstance(); } + /** * * @@ -219,6 +233,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord getChildPartition() } public static final int HEARTBEAT_FIELD_NUMBER = 3; + /** * * @@ -234,6 +249,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord getChildPartition() public boolean hasHeartbeat() { return recordCase_ == 3; } + /** * * @@ -252,6 +268,7 @@ public com.google.spanner.executor.v1.HeartbeatRecord getHeartbeat() { } return com.google.spanner.executor.v1.HeartbeatRecord.getDefaultInstance(); } + /** * * @@ -415,38 +432,38 @@ public static com.google.spanner.executor.v1.ChangeStreamRecord parseFrom( public static com.google.spanner.executor.v1.ChangeStreamRecord parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChangeStreamRecord parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChangeStreamRecord parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChangeStreamRecord parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChangeStreamRecord parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChangeStreamRecord parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -469,10 +486,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -484,7 +502,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ChangeStreamRecord} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ChangeStreamRecord) com.google.spanner.executor.v1.ChangeStreamRecordOrBuilder { @@ -494,7 +512,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChangeStreamRecord_fieldAccessorTable @@ -506,7 +524,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ChangeStreamRecord.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -578,39 +596,6 @@ private void buildPartialOneofs(com.google.spanner.executor.v1.ChangeStreamRecor } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ChangeStreamRecord) { @@ -673,19 +658,22 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getDataChangeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetDataChangeFieldBuilder().getBuilder(), extensionRegistry); recordCase_ = 1; break; } // case 10 case 18: { - input.readMessage(getChildPartitionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetChildPartitionFieldBuilder().getBuilder(), extensionRegistry); recordCase_ = 2; break; } // case 18 case 26: { - input.readMessage(getHeartbeatFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetHeartbeatFieldBuilder().getBuilder(), extensionRegistry); recordCase_ = 3; break; } // case 26 @@ -722,11 +710,12 @@ public Builder clearRecord() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord, com.google.spanner.executor.v1.DataChangeRecord.Builder, com.google.spanner.executor.v1.DataChangeRecordOrBuilder> dataChangeBuilder_; + /** * * @@ -742,6 +731,7 @@ public Builder clearRecord() { public boolean hasDataChange() { return recordCase_ == 1; } + /** * * @@ -767,6 +757,7 @@ public com.google.spanner.executor.v1.DataChangeRecord getDataChange() { return com.google.spanner.executor.v1.DataChangeRecord.getDefaultInstance(); } } + /** * * @@ -789,6 +780,7 @@ public Builder setDataChange(com.google.spanner.executor.v1.DataChangeRecord val recordCase_ = 1; return this; } + /** * * @@ -809,6 +801,7 @@ public Builder setDataChange( recordCase_ = 1; return this; } + /** * * @@ -841,6 +834,7 @@ public Builder mergeDataChange(com.google.spanner.executor.v1.DataChangeRecord v recordCase_ = 1; return this; } + /** * * @@ -866,6 +860,7 @@ public Builder clearDataChange() { } return this; } + /** * * @@ -876,8 +871,9 @@ public Builder clearDataChange() { * .google.spanner.executor.v1.DataChangeRecord data_change = 1; */ public com.google.spanner.executor.v1.DataChangeRecord.Builder getDataChangeBuilder() { - return getDataChangeFieldBuilder().getBuilder(); + return internalGetDataChangeFieldBuilder().getBuilder(); } + /** * * @@ -898,6 +894,7 @@ public com.google.spanner.executor.v1.DataChangeRecordOrBuilder getDataChangeOrB return com.google.spanner.executor.v1.DataChangeRecord.getDefaultInstance(); } } + /** * * @@ -907,17 +904,17 @@ public com.google.spanner.executor.v1.DataChangeRecordOrBuilder getDataChangeOrB * * .google.spanner.executor.v1.DataChangeRecord data_change = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord, com.google.spanner.executor.v1.DataChangeRecord.Builder, com.google.spanner.executor.v1.DataChangeRecordOrBuilder> - getDataChangeFieldBuilder() { + internalGetDataChangeFieldBuilder() { if (dataChangeBuilder_ == null) { if (!(recordCase_ == 1)) { record_ = com.google.spanner.executor.v1.DataChangeRecord.getDefaultInstance(); } dataChangeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord, com.google.spanner.executor.v1.DataChangeRecord.Builder, com.google.spanner.executor.v1.DataChangeRecordOrBuilder>( @@ -931,11 +928,12 @@ public com.google.spanner.executor.v1.DataChangeRecordOrBuilder getDataChangeOrB return dataChangeBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ChildPartitionsRecord, com.google.spanner.executor.v1.ChildPartitionsRecord.Builder, com.google.spanner.executor.v1.ChildPartitionsRecordOrBuilder> childPartitionBuilder_; + /** * * @@ -951,6 +949,7 @@ public com.google.spanner.executor.v1.DataChangeRecordOrBuilder getDataChangeOrB public boolean hasChildPartition() { return recordCase_ == 2; } + /** * * @@ -976,6 +975,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord getChildPartition() return com.google.spanner.executor.v1.ChildPartitionsRecord.getDefaultInstance(); } } + /** * * @@ -998,6 +998,7 @@ public Builder setChildPartition(com.google.spanner.executor.v1.ChildPartitionsR recordCase_ = 2; return this; } + /** * * @@ -1018,6 +1019,7 @@ public Builder setChildPartition( recordCase_ = 2; return this; } + /** * * @@ -1051,6 +1053,7 @@ public Builder mergeChildPartition(com.google.spanner.executor.v1.ChildPartition recordCase_ = 2; return this; } + /** * * @@ -1076,6 +1079,7 @@ public Builder clearChildPartition() { } return this; } + /** * * @@ -1086,8 +1090,9 @@ public Builder clearChildPartition() { * .google.spanner.executor.v1.ChildPartitionsRecord child_partition = 2; */ public com.google.spanner.executor.v1.ChildPartitionsRecord.Builder getChildPartitionBuilder() { - return getChildPartitionFieldBuilder().getBuilder(); + return internalGetChildPartitionFieldBuilder().getBuilder(); } + /** * * @@ -1109,6 +1114,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord.Builder getChildPart return com.google.spanner.executor.v1.ChildPartitionsRecord.getDefaultInstance(); } } + /** * * @@ -1118,17 +1124,17 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord.Builder getChildPart * * .google.spanner.executor.v1.ChildPartitionsRecord child_partition = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ChildPartitionsRecord, com.google.spanner.executor.v1.ChildPartitionsRecord.Builder, com.google.spanner.executor.v1.ChildPartitionsRecordOrBuilder> - getChildPartitionFieldBuilder() { + internalGetChildPartitionFieldBuilder() { if (childPartitionBuilder_ == null) { if (!(recordCase_ == 2)) { record_ = com.google.spanner.executor.v1.ChildPartitionsRecord.getDefaultInstance(); } childPartitionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ChildPartitionsRecord, com.google.spanner.executor.v1.ChildPartitionsRecord.Builder, com.google.spanner.executor.v1.ChildPartitionsRecordOrBuilder>( @@ -1142,11 +1148,12 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord.Builder getChildPart return childPartitionBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.HeartbeatRecord, com.google.spanner.executor.v1.HeartbeatRecord.Builder, com.google.spanner.executor.v1.HeartbeatRecordOrBuilder> heartbeatBuilder_; + /** * * @@ -1162,6 +1169,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord.Builder getChildPart public boolean hasHeartbeat() { return recordCase_ == 3; } + /** * * @@ -1187,6 +1195,7 @@ public com.google.spanner.executor.v1.HeartbeatRecord getHeartbeat() { return com.google.spanner.executor.v1.HeartbeatRecord.getDefaultInstance(); } } + /** * * @@ -1209,6 +1218,7 @@ public Builder setHeartbeat(com.google.spanner.executor.v1.HeartbeatRecord value recordCase_ = 3; return this; } + /** * * @@ -1229,6 +1239,7 @@ public Builder setHeartbeat( recordCase_ = 3; return this; } + /** * * @@ -1261,6 +1272,7 @@ public Builder mergeHeartbeat(com.google.spanner.executor.v1.HeartbeatRecord val recordCase_ = 3; return this; } + /** * * @@ -1286,6 +1298,7 @@ public Builder clearHeartbeat() { } return this; } + /** * * @@ -1296,8 +1309,9 @@ public Builder clearHeartbeat() { * .google.spanner.executor.v1.HeartbeatRecord heartbeat = 3; */ public com.google.spanner.executor.v1.HeartbeatRecord.Builder getHeartbeatBuilder() { - return getHeartbeatFieldBuilder().getBuilder(); + return internalGetHeartbeatFieldBuilder().getBuilder(); } + /** * * @@ -1318,6 +1332,7 @@ public com.google.spanner.executor.v1.HeartbeatRecordOrBuilder getHeartbeatOrBui return com.google.spanner.executor.v1.HeartbeatRecord.getDefaultInstance(); } } + /** * * @@ -1327,17 +1342,17 @@ public com.google.spanner.executor.v1.HeartbeatRecordOrBuilder getHeartbeatOrBui * * .google.spanner.executor.v1.HeartbeatRecord heartbeat = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.HeartbeatRecord, com.google.spanner.executor.v1.HeartbeatRecord.Builder, com.google.spanner.executor.v1.HeartbeatRecordOrBuilder> - getHeartbeatFieldBuilder() { + internalGetHeartbeatFieldBuilder() { if (heartbeatBuilder_ == null) { if (!(recordCase_ == 3)) { record_ = com.google.spanner.executor.v1.HeartbeatRecord.getDefaultInstance(); } heartbeatBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.HeartbeatRecord, com.google.spanner.executor.v1.HeartbeatRecord.Builder, com.google.spanner.executor.v1.HeartbeatRecordOrBuilder>( @@ -1351,17 +1366,6 @@ public com.google.spanner.executor.v1.HeartbeatRecordOrBuilder getHeartbeatOrBui return heartbeatBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ChangeStreamRecord) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java index a66cc1546ff..ea4777d9ba0 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ChangeStreamRecordOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ChangeStreamRecord) @@ -36,6 +38,7 @@ public interface ChangeStreamRecordOrBuilder * @return Whether the dataChange field is set. */ boolean hasDataChange(); + /** * * @@ -48,6 +51,7 @@ public interface ChangeStreamRecordOrBuilder * @return The dataChange. */ com.google.spanner.executor.v1.DataChangeRecord getDataChange(); + /** * * @@ -71,6 +75,7 @@ public interface ChangeStreamRecordOrBuilder * @return Whether the childPartition field is set. */ boolean hasChildPartition(); + /** * * @@ -83,6 +88,7 @@ public interface ChangeStreamRecordOrBuilder * @return The childPartition. */ com.google.spanner.executor.v1.ChildPartitionsRecord getChildPartition(); + /** * * @@ -106,6 +112,7 @@ public interface ChangeStreamRecordOrBuilder * @return Whether the heartbeat field is set. */ boolean hasHeartbeat(); + /** * * @@ -118,6 +125,7 @@ public interface ChangeStreamRecordOrBuilder * @return The heartbeat. */ com.google.spanner.executor.v1.HeartbeatRecord getHeartbeat(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java index 98d25aa0f56..de5b768d3c6 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ChildPartitionsRecord} */ -public final class ChildPartitionsRecord extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ChildPartitionsRecord extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ChildPartitionsRecord) ChildPartitionsRecordOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ChildPartitionsRecord"); + } + // Use ChildPartitionsRecord.newBuilder() to construct. - private ChildPartitionsRecord(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ChildPartitionsRecord(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private ChildPartitionsRecord() { childPartitions_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ChildPartitionsRecord(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChildPartitionsRecord_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChildPartitionsRecord_fieldAccessorTable @@ -81,6 +88,7 @@ public interface ChildPartitionOrBuilder * @return The token. */ java.lang.String getToken(); + /** * * @@ -106,6 +114,7 @@ public interface ChildPartitionOrBuilder * @return A list containing the parentPartitionTokens. */ java.util.List getParentPartitionTokensList(); + /** * * @@ -118,6 +127,7 @@ public interface ChildPartitionOrBuilder * @return The count of parentPartitionTokens. */ int getParentPartitionTokensCount(); + /** * * @@ -131,6 +141,7 @@ public interface ChildPartitionOrBuilder * @return The parentPartitionTokens at the given index. */ java.lang.String getParentPartitionTokens(int index); + /** * * @@ -145,6 +156,7 @@ public interface ChildPartitionOrBuilder */ com.google.protobuf.ByteString getParentPartitionTokensBytes(int index); } + /** * * @@ -154,13 +166,24 @@ public interface ChildPartitionOrBuilder * * Protobuf type {@code google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition} */ - public static final class ChildPartition extends com.google.protobuf.GeneratedMessageV3 + public static final class ChildPartition extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition) ChildPartitionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ChildPartition"); + } + // Use ChildPartition.newBuilder() to construct. - private ChildPartition(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ChildPartition(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -169,19 +192,13 @@ private ChildPartition() { parentPartitionTokens_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ChildPartition(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_fieldAccessorTable @@ -194,6 +211,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object token_ = ""; + /** * * @@ -217,6 +235,7 @@ public java.lang.String getToken() { return s; } } + /** * * @@ -246,6 +265,7 @@ public com.google.protobuf.ByteString getTokenBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList parentPartitionTokens_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -260,6 +280,7 @@ public com.google.protobuf.ByteString getTokenBytes() { public com.google.protobuf.ProtocolStringList getParentPartitionTokensList() { return parentPartitionTokens_; } + /** * * @@ -274,6 +295,7 @@ public com.google.protobuf.ProtocolStringList getParentPartitionTokensList() { public int getParentPartitionTokensCount() { return parentPartitionTokens_.size(); } + /** * * @@ -289,6 +311,7 @@ public int getParentPartitionTokensCount() { public java.lang.String getParentPartitionTokens(int index) { return parentPartitionTokens_.get(index); } + /** * * @@ -319,11 +342,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(token_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, token_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(token_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, token_); } for (int i = 0; i < parentPartitionTokens_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString( + com.google.protobuf.GeneratedMessage.writeString( output, 2, parentPartitionTokens_.getRaw(i)); } getUnknownFields().writeTo(output); @@ -335,8 +358,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(token_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, token_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(token_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, token_); } { int dataSize = 0; @@ -424,39 +447,39 @@ public static com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartitio public static com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -480,11 +503,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -494,8 +517,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition) com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartitionOrBuilder { @@ -505,7 +527,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_fieldAccessorTable @@ -518,7 +540,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -576,41 +598,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition) { @@ -701,6 +688,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object token_ = ""; + /** * * @@ -723,6 +711,7 @@ public java.lang.String getToken() { return (java.lang.String) ref; } } + /** * * @@ -745,6 +734,7 @@ public com.google.protobuf.ByteString getTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -766,6 +756,7 @@ public Builder setToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -783,6 +774,7 @@ public Builder clearToken() { onChanged(); return this; } + /** * * @@ -816,6 +808,7 @@ private void ensureParentPartitionTokensIsMutable() { } bitField0_ |= 0x00000002; } + /** * * @@ -831,6 +824,7 @@ public com.google.protobuf.ProtocolStringList getParentPartitionTokensList() { parentPartitionTokens_.makeImmutable(); return parentPartitionTokens_; } + /** * * @@ -845,6 +839,7 @@ public com.google.protobuf.ProtocolStringList getParentPartitionTokensList() { public int getParentPartitionTokensCount() { return parentPartitionTokens_.size(); } + /** * * @@ -860,6 +855,7 @@ public int getParentPartitionTokensCount() { public java.lang.String getParentPartitionTokens(int index) { return parentPartitionTokens_.get(index); } + /** * * @@ -875,6 +871,7 @@ public java.lang.String getParentPartitionTokens(int index) { public com.google.protobuf.ByteString getParentPartitionTokensBytes(int index) { return parentPartitionTokens_.getByteString(index); } + /** * * @@ -898,6 +895,7 @@ public Builder setParentPartitionTokens(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -920,6 +918,7 @@ public Builder addParentPartitionTokens(java.lang.String value) { onChanged(); return this; } + /** * * @@ -939,6 +938,7 @@ public Builder addAllParentPartitionTokens(java.lang.Iterable onChanged(); return this; } + /** * * @@ -957,6 +957,7 @@ public Builder clearParentPartitionTokens() { onChanged(); return this; } + /** * * @@ -981,18 +982,6 @@ public Builder addParentPartitionTokensBytes(com.google.protobuf.ByteString valu return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition) } @@ -1051,6 +1040,7 @@ public com.google.protobuf.Parser getParserForType() { private int bitField0_; public static final int START_TIME_FIELD_NUMBER = 1; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -1067,6 +1057,7 @@ public com.google.protobuf.Parser getParserForType() { public boolean hasStartTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1083,6 +1074,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -1102,6 +1094,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { @SuppressWarnings("serial") private volatile java.lang.Object recordSequence_ = ""; + /** * * @@ -1128,6 +1121,7 @@ public java.lang.String getRecordSequence() { return s; } } + /** * * @@ -1160,6 +1154,7 @@ public com.google.protobuf.ByteString getRecordSequenceBytes() { @SuppressWarnings("serial") private java.util.List childPartitions_; + /** * * @@ -1176,6 +1171,7 @@ public com.google.protobuf.ByteString getRecordSequenceBytes() { getChildPartitionsList() { return childPartitions_; } + /** * * @@ -1193,6 +1189,7 @@ public com.google.protobuf.ByteString getRecordSequenceBytes() { getChildPartitionsOrBuilderList() { return childPartitions_; } + /** * * @@ -1208,6 +1205,7 @@ public com.google.protobuf.ByteString getRecordSequenceBytes() { public int getChildPartitionsCount() { return childPartitions_.size(); } + /** * * @@ -1224,6 +1222,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition getCh int index) { return childPartitions_.get(index); } + /** * * @@ -1258,8 +1257,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(1, getStartTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recordSequence_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, recordSequence_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, recordSequence_); } for (int i = 0; i < childPartitions_.size(); i++) { output.writeMessage(3, childPartitions_.get(i)); @@ -1276,8 +1275,8 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getStartTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recordSequence_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, recordSequence_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, recordSequence_); } for (int i = 0; i < childPartitions_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, childPartitions_.get(i)); @@ -1367,38 +1366,38 @@ public static com.google.spanner.executor.v1.ChildPartitionsRecord parseFrom( public static com.google.spanner.executor.v1.ChildPartitionsRecord parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChildPartitionsRecord parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChildPartitionsRecord parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChildPartitionsRecord parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ChildPartitionsRecord parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ChildPartitionsRecord parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1421,10 +1420,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1434,7 +1434,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ChildPartitionsRecord} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ChildPartitionsRecord) com.google.spanner.executor.v1.ChildPartitionsRecordOrBuilder { @@ -1444,7 +1444,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ChildPartitionsRecord_fieldAccessorTable @@ -1458,15 +1458,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getStartTimeFieldBuilder(); - getChildPartitionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStartTimeFieldBuilder(); + internalGetChildPartitionsFieldBuilder(); } } @@ -1548,39 +1548,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ChildPartitionsRecord result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ChildPartitionsRecord) { @@ -1621,8 +1588,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.ChildPartitionsRecord ot childPartitions_ = other.childPartitions_; bitField0_ = (bitField0_ & ~0x00000004); childPartitionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getChildPartitionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetChildPartitionsFieldBuilder() : null; } else { childPartitionsBuilder_.addAllMessages(other.childPartitions_); @@ -1657,7 +1624,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -1702,11 +1670,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -1722,6 +1691,7 @@ public Builder mergeFrom( public boolean hasStartTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1741,6 +1711,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -1764,6 +1735,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1784,6 +1756,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -1812,6 +1785,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1832,6 +1806,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -1845,8 +1820,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -1864,6 +1840,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -1874,14 +1851,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1892,6 +1869,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private java.lang.Object recordSequence_ = ""; + /** * * @@ -1917,6 +1895,7 @@ public java.lang.String getRecordSequence() { return (java.lang.String) ref; } } + /** * * @@ -1942,6 +1921,7 @@ public com.google.protobuf.ByteString getRecordSequenceBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1966,6 +1946,7 @@ public Builder setRecordSequence(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1986,6 +1967,7 @@ public Builder clearRecordSequence() { onChanged(); return this; } + /** * * @@ -2025,7 +2007,7 @@ private void ensureChildPartitionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition, com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.Builder, com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartitionOrBuilder> @@ -2050,6 +2032,7 @@ private void ensureChildPartitionsIsMutable() { return childPartitionsBuilder_.getMessageList(); } } + /** * * @@ -2068,6 +2051,7 @@ public int getChildPartitionsCount() { return childPartitionsBuilder_.getCount(); } } + /** * * @@ -2087,6 +2071,7 @@ public com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition getCh return childPartitionsBuilder_.getMessage(index); } } + /** * * @@ -2112,6 +2097,7 @@ public Builder setChildPartitions( } return this; } + /** * * @@ -2136,6 +2122,7 @@ public Builder setChildPartitions( } return this; } + /** * * @@ -2161,6 +2148,7 @@ public Builder addChildPartitions( } return this; } + /** * * @@ -2186,6 +2174,7 @@ public Builder addChildPartitions( } return this; } + /** * * @@ -2209,6 +2198,7 @@ public Builder addChildPartitions( } return this; } + /** * * @@ -2233,6 +2223,7 @@ public Builder addChildPartitions( } return this; } + /** * * @@ -2257,6 +2248,7 @@ public Builder addAllChildPartitions( } return this; } + /** * * @@ -2278,6 +2270,7 @@ public Builder clearChildPartitions() { } return this; } + /** * * @@ -2299,6 +2292,7 @@ public Builder removeChildPartitions(int index) { } return this; } + /** * * @@ -2312,8 +2306,9 @@ public Builder removeChildPartitions(int index) { */ public com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.Builder getChildPartitionsBuilder(int index) { - return getChildPartitionsFieldBuilder().getBuilder(index); + return internalGetChildPartitionsFieldBuilder().getBuilder(index); } + /** * * @@ -2333,6 +2328,7 @@ public Builder removeChildPartitions(int index) { return childPartitionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2353,6 +2349,7 @@ public Builder removeChildPartitions(int index) { return java.util.Collections.unmodifiableList(childPartitions_); } } + /** * * @@ -2366,11 +2363,12 @@ public Builder removeChildPartitions(int index) { */ public com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.Builder addChildPartitionsBuilder() { - return getChildPartitionsFieldBuilder() + return internalGetChildPartitionsFieldBuilder() .addBuilder( com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition .getDefaultInstance()); } + /** * * @@ -2384,12 +2382,13 @@ public Builder removeChildPartitions(int index) { */ public com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.Builder addChildPartitionsBuilder(int index) { - return getChildPartitionsFieldBuilder() + return internalGetChildPartitionsFieldBuilder() .addBuilder( index, com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition .getDefaultInstance()); } + /** * * @@ -2404,17 +2403,17 @@ public Builder removeChildPartitions(int index) { public java.util.List< com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.Builder> getChildPartitionsBuilderList() { - return getChildPartitionsFieldBuilder().getBuilderList(); + return internalGetChildPartitionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition, com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.Builder, com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartitionOrBuilder> - getChildPartitionsFieldBuilder() { + internalGetChildPartitionsFieldBuilder() { if (childPartitionsBuilder_ == null) { childPartitionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition, com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition.Builder, com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartitionOrBuilder>( @@ -2427,17 +2426,6 @@ public Builder removeChildPartitions(int index) { return childPartitionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ChildPartitionsRecord) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java index 9276a82690a..43faee8ccf0 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ChildPartitionsRecordOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ChildPartitionsRecord) @@ -37,6 +39,7 @@ public interface ChildPartitionsRecordOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -50,6 +53,7 @@ public interface ChildPartitionsRecordOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -77,6 +81,7 @@ public interface ChildPartitionsRecordOrBuilder * @return The recordSequence. */ java.lang.String getRecordSequence(); + /** * * @@ -106,6 +111,7 @@ public interface ChildPartitionsRecordOrBuilder */ java.util.List getChildPartitionsList(); + /** * * @@ -118,6 +124,7 @@ public interface ChildPartitionsRecordOrBuilder * */ com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition getChildPartitions(int index); + /** * * @@ -130,6 +137,7 @@ public interface ChildPartitionsRecordOrBuilder * */ int getChildPartitionsCount(); + /** * * @@ -144,6 +152,7 @@ public interface ChildPartitionsRecordOrBuilder java.util.List< ? extends com.google.spanner.executor.v1.ChildPartitionsRecord.ChildPartitionOrBuilder> getChildPartitionsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java index 61428cbc5ab..e40df76973b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -36,31 +37,37 @@ * * Protobuf type {@code google.spanner.executor.v1.CloseBatchTransactionAction} */ -public final class CloseBatchTransactionAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CloseBatchTransactionAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CloseBatchTransactionAction) CloseBatchTransactionActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloseBatchTransactionAction"); + } + // Use CloseBatchTransactionAction.newBuilder() to construct. - private CloseBatchTransactionAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CloseBatchTransactionAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private CloseBatchTransactionAction() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CloseBatchTransactionAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int CLEANUP_FIELD_NUMBER = 1; private boolean cleanup_ = false; + /** * * @@ -188,38 +196,38 @@ public static com.google.spanner.executor.v1.CloseBatchTransactionAction parseFr public static com.google.spanner.executor.v1.CloseBatchTransactionAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloseBatchTransactionAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloseBatchTransactionAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloseBatchTransactionAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloseBatchTransactionAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloseBatchTransactionAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -243,10 +251,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -264,7 +273,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CloseBatchTransactionAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CloseBatchTransactionAction) com.google.spanner.executor.v1.CloseBatchTransactionActionOrBuilder { @@ -274,7 +283,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_fieldAccessorTable @@ -286,7 +295,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.CloseBatchTransactionAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -336,39 +345,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CloseBatchTransactionA } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CloseBatchTransactionAction) { @@ -437,6 +413,7 @@ public Builder mergeFrom( private int bitField0_; private boolean cleanup_; + /** * * @@ -452,6 +429,7 @@ public Builder mergeFrom( public boolean getCleanup() { return cleanup_; } + /** * * @@ -471,6 +449,7 @@ public Builder setCleanup(boolean value) { onChanged(); return this; } + /** * * @@ -489,17 +468,6 @@ public Builder clearCleanup() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CloseBatchTransactionAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java index 882a1d58afa..a5451ff1194 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CloseBatchTransactionActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CloseBatchTransactionAction) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java index 8704af5e5a8..216dc3e8bbf 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CloudBackupResponse} */ -public final class CloudBackupResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CloudBackupResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CloudBackupResponse) CloudBackupResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudBackupResponse"); + } + // Use CloudBackupResponse.newBuilder() to construct. - private CloudBackupResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CloudBackupResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private CloudBackupResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CloudBackupResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudBackupResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudBackupResponse_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List listedBackups_; + /** * * @@ -84,6 +92,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getListedBackupsList() { return listedBackups_; } + /** * * @@ -98,6 +107,7 @@ public java.util.List getListedBack getListedBackupsOrBuilderList() { return listedBackups_; } + /** * * @@ -111,6 +121,7 @@ public java.util.List getListedBack public int getListedBackupsCount() { return listedBackups_.size(); } + /** * * @@ -124,6 +135,7 @@ public int getListedBackupsCount() { public com.google.spanner.admin.database.v1.Backup getListedBackups(int index) { return listedBackups_.get(index); } + /** * * @@ -142,6 +154,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getListedBackupsOrBu @SuppressWarnings("serial") private java.util.List listedBackupOperations_; + /** * * @@ -155,6 +168,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getListedBackupsOrBu public java.util.List getListedBackupOperationsList() { return listedBackupOperations_; } + /** * * @@ -169,6 +183,7 @@ public java.util.List getListedBackupOperation getListedBackupOperationsOrBuilderList() { return listedBackupOperations_; } + /** * * @@ -182,6 +197,7 @@ public java.util.List getListedBackupOperation public int getListedBackupOperationsCount() { return listedBackupOperations_.size(); } + /** * * @@ -195,6 +211,7 @@ public int getListedBackupOperationsCount() { public com.google.longrunning.Operation getListedBackupOperations(int index) { return listedBackupOperations_.get(index); } + /** * * @@ -213,6 +230,7 @@ public com.google.longrunning.OperationOrBuilder getListedBackupOperationsOrBuil @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -237,6 +255,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -264,6 +283,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public static final int BACKUP_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.Backup backup_; + /** * * @@ -279,6 +299,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public boolean hasBackup() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -296,6 +317,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { ? com.google.spanner.admin.database.v1.Backup.getDefaultInstance() : backup_; } + /** * * @@ -332,8 +354,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < listedBackupOperations_.size(); i++) { output.writeMessage(2, listedBackupOperations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getBackup()); @@ -355,8 +377,8 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeMessageSize( 2, listedBackupOperations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getBackup()); @@ -452,38 +474,38 @@ public static com.google.spanner.executor.v1.CloudBackupResponse parseFrom( public static com.google.spanner.executor.v1.CloudBackupResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudBackupResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudBackupResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudBackupResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudBackupResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudBackupResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -506,10 +528,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -520,7 +543,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CloudBackupResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CloudBackupResponse) com.google.spanner.executor.v1.CloudBackupResponseOrBuilder { @@ -530,7 +553,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudBackupResponse_fieldAccessorTable @@ -544,16 +567,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getListedBackupsFieldBuilder(); - getListedBackupOperationsFieldBuilder(); - getBackupFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetListedBackupsFieldBuilder(); + internalGetListedBackupOperationsFieldBuilder(); + internalGetBackupFieldBuilder(); } } @@ -651,39 +674,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CloudBackupResponse re result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CloudBackupResponse) { @@ -716,8 +706,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CloudBackupResponse othe listedBackups_ = other.listedBackups_; bitField0_ = (bitField0_ & ~0x00000001); listedBackupsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getListedBackupsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetListedBackupsFieldBuilder() : null; } else { listedBackupsBuilder_.addAllMessages(other.listedBackups_); @@ -743,8 +733,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CloudBackupResponse othe listedBackupOperations_ = other.listedBackupOperations_; bitField0_ = (bitField0_ & ~0x00000002); listedBackupOperationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getListedBackupOperationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetListedBackupOperationsFieldBuilder() : null; } else { listedBackupOperationsBuilder_.addAllMessages(other.listedBackupOperations_); @@ -818,7 +808,7 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getBackupFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetBackupFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -852,7 +842,7 @@ private void ensureListedBackupsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> @@ -874,6 +864,7 @@ public java.util.List getListedBack return listedBackupsBuilder_.getMessageList(); } } + /** * * @@ -890,6 +881,7 @@ public int getListedBackupsCount() { return listedBackupsBuilder_.getCount(); } } + /** * * @@ -906,6 +898,7 @@ public com.google.spanner.admin.database.v1.Backup getListedBackups(int index) { return listedBackupsBuilder_.getMessage(index); } } + /** * * @@ -928,6 +921,7 @@ public Builder setListedBackups(int index, com.google.spanner.admin.database.v1. } return this; } + /** * * @@ -948,6 +942,7 @@ public Builder setListedBackups( } return this; } + /** * * @@ -970,6 +965,7 @@ public Builder addListedBackups(com.google.spanner.admin.database.v1.Backup valu } return this; } + /** * * @@ -992,6 +988,7 @@ public Builder addListedBackups(int index, com.google.spanner.admin.database.v1. } return this; } + /** * * @@ -1012,6 +1009,7 @@ public Builder addListedBackups( } return this; } + /** * * @@ -1032,6 +1030,7 @@ public Builder addListedBackups( } return this; } + /** * * @@ -1052,6 +1051,7 @@ public Builder addAllListedBackups( } return this; } + /** * * @@ -1071,6 +1071,7 @@ public Builder clearListedBackups() { } return this; } + /** * * @@ -1090,6 +1091,7 @@ public Builder removeListedBackups(int index) { } return this; } + /** * * @@ -1100,8 +1102,9 @@ public Builder removeListedBackups(int index) { * repeated .google.spanner.admin.database.v1.Backup listed_backups = 1; */ public com.google.spanner.admin.database.v1.Backup.Builder getListedBackupsBuilder(int index) { - return getListedBackupsFieldBuilder().getBuilder(index); + return internalGetListedBackupsFieldBuilder().getBuilder(index); } + /** * * @@ -1119,6 +1122,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getListedBackupsOrBu return listedBackupsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1136,6 +1140,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getListedBackupsOrBu return java.util.Collections.unmodifiableList(listedBackups_); } } + /** * * @@ -1146,9 +1151,10 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getListedBackupsOrBu * repeated .google.spanner.admin.database.v1.Backup listed_backups = 1; */ public com.google.spanner.admin.database.v1.Backup.Builder addListedBackupsBuilder() { - return getListedBackupsFieldBuilder() + return internalGetListedBackupsFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.Backup.getDefaultInstance()); } + /** * * @@ -1159,9 +1165,10 @@ public com.google.spanner.admin.database.v1.Backup.Builder addListedBackupsBuild * repeated .google.spanner.admin.database.v1.Backup listed_backups = 1; */ public com.google.spanner.admin.database.v1.Backup.Builder addListedBackupsBuilder(int index) { - return getListedBackupsFieldBuilder() + return internalGetListedBackupsFieldBuilder() .addBuilder(index, com.google.spanner.admin.database.v1.Backup.getDefaultInstance()); } + /** * * @@ -1173,17 +1180,17 @@ public com.google.spanner.admin.database.v1.Backup.Builder addListedBackupsBuild */ public java.util.List getListedBackupsBuilderList() { - return getListedBackupsFieldBuilder().getBuilderList(); + return internalGetListedBackupsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> - getListedBackupsFieldBuilder() { + internalGetListedBackupsFieldBuilder() { if (listedBackupsBuilder_ == null) { listedBackupsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder>( @@ -1207,7 +1214,7 @@ private void ensureListedBackupOperationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> @@ -1229,6 +1236,7 @@ public java.util.List getListedBackupOperation return listedBackupOperationsBuilder_.getMessageList(); } } + /** * * @@ -1245,6 +1253,7 @@ public int getListedBackupOperationsCount() { return listedBackupOperationsBuilder_.getCount(); } } + /** * * @@ -1261,6 +1270,7 @@ public com.google.longrunning.Operation getListedBackupOperations(int index) { return listedBackupOperationsBuilder_.getMessage(index); } } + /** * * @@ -1283,6 +1293,7 @@ public Builder setListedBackupOperations(int index, com.google.longrunning.Opera } return this; } + /** * * @@ -1303,6 +1314,7 @@ public Builder setListedBackupOperations( } return this; } + /** * * @@ -1325,6 +1337,7 @@ public Builder addListedBackupOperations(com.google.longrunning.Operation value) } return this; } + /** * * @@ -1347,6 +1360,7 @@ public Builder addListedBackupOperations(int index, com.google.longrunning.Opera } return this; } + /** * * @@ -1367,6 +1381,7 @@ public Builder addListedBackupOperations( } return this; } + /** * * @@ -1387,6 +1402,7 @@ public Builder addListedBackupOperations( } return this; } + /** * * @@ -1407,6 +1423,7 @@ public Builder addAllListedBackupOperations( } return this; } + /** * * @@ -1426,6 +1443,7 @@ public Builder clearListedBackupOperations() { } return this; } + /** * * @@ -1445,6 +1463,7 @@ public Builder removeListedBackupOperations(int index) { } return this; } + /** * * @@ -1455,8 +1474,9 @@ public Builder removeListedBackupOperations(int index) { * repeated .google.longrunning.Operation listed_backup_operations = 2; */ public com.google.longrunning.Operation.Builder getListedBackupOperationsBuilder(int index) { - return getListedBackupOperationsFieldBuilder().getBuilder(index); + return internalGetListedBackupOperationsFieldBuilder().getBuilder(index); } + /** * * @@ -1473,6 +1493,7 @@ public com.google.longrunning.OperationOrBuilder getListedBackupOperationsOrBuil return listedBackupOperationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1490,6 +1511,7 @@ public com.google.longrunning.OperationOrBuilder getListedBackupOperationsOrBuil return java.util.Collections.unmodifiableList(listedBackupOperations_); } } + /** * * @@ -1500,9 +1522,10 @@ public com.google.longrunning.OperationOrBuilder getListedBackupOperationsOrBuil * repeated .google.longrunning.Operation listed_backup_operations = 2; */ public com.google.longrunning.Operation.Builder addListedBackupOperationsBuilder() { - return getListedBackupOperationsFieldBuilder() + return internalGetListedBackupOperationsFieldBuilder() .addBuilder(com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1513,9 +1536,10 @@ public com.google.longrunning.Operation.Builder addListedBackupOperationsBuilder * repeated .google.longrunning.Operation listed_backup_operations = 2; */ public com.google.longrunning.Operation.Builder addListedBackupOperationsBuilder(int index) { - return getListedBackupOperationsFieldBuilder() + return internalGetListedBackupOperationsFieldBuilder() .addBuilder(index, com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1527,17 +1551,17 @@ public com.google.longrunning.Operation.Builder addListedBackupOperationsBuilder */ public java.util.List getListedBackupOperationsBuilderList() { - return getListedBackupOperationsFieldBuilder().getBuilderList(); + return internalGetListedBackupOperationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getListedBackupOperationsFieldBuilder() { + internalGetListedBackupOperationsFieldBuilder() { if (listedBackupOperationsBuilder_ == null) { listedBackupOperationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1551,6 +1575,7 @@ public com.google.longrunning.Operation.Builder addListedBackupOperationsBuilder } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1574,6 +1599,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1597,6 +1623,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1619,6 +1646,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1637,6 +1665,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1662,11 +1691,12 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.Backup backup_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> backupBuilder_; + /** * * @@ -1681,6 +1711,7 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { public boolean hasBackup() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1701,6 +1732,7 @@ public com.google.spanner.admin.database.v1.Backup getBackup() { return backupBuilder_.getMessage(); } } + /** * * @@ -1723,6 +1755,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup value) { onChanged(); return this; } + /** * * @@ -1742,6 +1775,7 @@ public Builder setBackup(com.google.spanner.admin.database.v1.Backup.Builder bui onChanged(); return this; } + /** * * @@ -1769,6 +1803,7 @@ public Builder mergeBackup(com.google.spanner.admin.database.v1.Backup value) { } return this; } + /** * * @@ -1788,6 +1823,7 @@ public Builder clearBackup() { onChanged(); return this; } + /** * * @@ -1800,8 +1836,9 @@ public Builder clearBackup() { public com.google.spanner.admin.database.v1.Backup.Builder getBackupBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getBackupFieldBuilder().getBuilder(); + return internalGetBackupFieldBuilder().getBuilder(); } + /** * * @@ -1820,6 +1857,7 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() : backup_; } } + /** * * @@ -1829,14 +1867,14 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() * * .google.spanner.admin.database.v1.Backup backup = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder> - getBackupFieldBuilder() { + internalGetBackupFieldBuilder() { if (backupBuilder_ == null) { backupBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Backup, com.google.spanner.admin.database.v1.Backup.Builder, com.google.spanner.admin.database.v1.BackupOrBuilder>( @@ -1846,17 +1884,6 @@ public com.google.spanner.admin.database.v1.BackupOrBuilder getBackupOrBuilder() return backupBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CloudBackupResponse) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java index 2b1da9bfa5f..5b10cd1f537 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CloudBackupResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CloudBackupResponse) @@ -34,6 +36,7 @@ public interface CloudBackupResponseOrBuilder * repeated .google.spanner.admin.database.v1.Backup listed_backups = 1; */ java.util.List getListedBackupsList(); + /** * * @@ -44,6 +47,7 @@ public interface CloudBackupResponseOrBuilder * repeated .google.spanner.admin.database.v1.Backup listed_backups = 1; */ com.google.spanner.admin.database.v1.Backup getListedBackups(int index); + /** * * @@ -54,6 +58,7 @@ public interface CloudBackupResponseOrBuilder * repeated .google.spanner.admin.database.v1.Backup listed_backups = 1; */ int getListedBackupsCount(); + /** * * @@ -65,6 +70,7 @@ public interface CloudBackupResponseOrBuilder */ java.util.List getListedBackupsOrBuilderList(); + /** * * @@ -86,6 +92,7 @@ public interface CloudBackupResponseOrBuilder * repeated .google.longrunning.Operation listed_backup_operations = 2; */ java.util.List getListedBackupOperationsList(); + /** * * @@ -96,6 +103,7 @@ public interface CloudBackupResponseOrBuilder * repeated .google.longrunning.Operation listed_backup_operations = 2; */ com.google.longrunning.Operation getListedBackupOperations(int index); + /** * * @@ -106,6 +114,7 @@ public interface CloudBackupResponseOrBuilder * repeated .google.longrunning.Operation listed_backup_operations = 2; */ int getListedBackupOperationsCount(); + /** * * @@ -117,6 +126,7 @@ public interface CloudBackupResponseOrBuilder */ java.util.List getListedBackupOperationsOrBuilderList(); + /** * * @@ -141,6 +151,7 @@ public interface CloudBackupResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -167,6 +178,7 @@ public interface CloudBackupResponseOrBuilder * @return Whether the backup field is set. */ boolean hasBackup(); + /** * * @@ -179,6 +191,7 @@ public interface CloudBackupResponseOrBuilder * @return The backup. */ com.google.spanner.admin.database.v1.Backup getBackup(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java index 7247bc811ff..911942c101d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CloudDatabaseResponse} */ -public final class CloudDatabaseResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CloudDatabaseResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CloudDatabaseResponse) CloudDatabaseResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudDatabaseResponse"); + } + // Use CloudDatabaseResponse.newBuilder() to construct. - private CloudDatabaseResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CloudDatabaseResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private CloudDatabaseResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CloudDatabaseResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudDatabaseResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudDatabaseResponse_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List listedDatabases_; + /** * * @@ -84,6 +92,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getListedDatabasesList() { return listedDatabases_; } + /** * * @@ -98,6 +107,7 @@ public java.util.List getListedDa getListedDatabasesOrBuilderList() { return listedDatabases_; } + /** * * @@ -111,6 +121,7 @@ public java.util.List getListedDa public int getListedDatabasesCount() { return listedDatabases_.size(); } + /** * * @@ -124,6 +135,7 @@ public int getListedDatabasesCount() { public com.google.spanner.admin.database.v1.Database getListedDatabases(int index) { return listedDatabases_.get(index); } + /** * * @@ -143,6 +155,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getListedDatabases @SuppressWarnings("serial") private java.util.List listedDatabaseOperations_; + /** * * @@ -156,6 +169,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getListedDatabases public java.util.List getListedDatabaseOperationsList() { return listedDatabaseOperations_; } + /** * * @@ -170,6 +184,7 @@ public java.util.List getListedDatabaseOperati getListedDatabaseOperationsOrBuilderList() { return listedDatabaseOperations_; } + /** * * @@ -183,6 +198,7 @@ public java.util.List getListedDatabaseOperati public int getListedDatabaseOperationsCount() { return listedDatabaseOperations_.size(); } + /** * * @@ -196,6 +212,7 @@ public int getListedDatabaseOperationsCount() { public com.google.longrunning.Operation getListedDatabaseOperations(int index) { return listedDatabaseOperations_.get(index); } + /** * * @@ -214,6 +231,7 @@ public com.google.longrunning.OperationOrBuilder getListedDatabaseOperationsOrBu @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -238,6 +256,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -265,6 +284,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public static final int DATABASE_FIELD_NUMBER = 4; private com.google.spanner.admin.database.v1.Database database_; + /** * * @@ -280,6 +300,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public boolean hasDatabase() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -297,6 +318,7 @@ public com.google.spanner.admin.database.v1.Database getDatabase() { ? com.google.spanner.admin.database.v1.Database.getDefaultInstance() : database_; } + /** * * @@ -333,8 +355,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < listedDatabaseOperations_.size(); i++) { output.writeMessage(2, listedDatabaseOperations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getDatabase()); @@ -356,8 +378,8 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeMessageSize( 2, listedDatabaseOperations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getDatabase()); @@ -453,38 +475,38 @@ public static com.google.spanner.executor.v1.CloudDatabaseResponse parseFrom( public static com.google.spanner.executor.v1.CloudDatabaseResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudDatabaseResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudDatabaseResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudDatabaseResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudDatabaseResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudDatabaseResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -507,10 +529,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -521,7 +544,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CloudDatabaseResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CloudDatabaseResponse) com.google.spanner.executor.v1.CloudDatabaseResponseOrBuilder { @@ -531,7 +554,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudDatabaseResponse_fieldAccessorTable @@ -545,16 +568,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getListedDatabasesFieldBuilder(); - getListedDatabaseOperationsFieldBuilder(); - getDatabaseFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetListedDatabasesFieldBuilder(); + internalGetListedDatabaseOperationsFieldBuilder(); + internalGetDatabaseFieldBuilder(); } } @@ -653,39 +676,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CloudDatabaseResponse result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CloudDatabaseResponse) { @@ -718,8 +708,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CloudDatabaseResponse ot listedDatabases_ = other.listedDatabases_; bitField0_ = (bitField0_ & ~0x00000001); listedDatabasesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getListedDatabasesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetListedDatabasesFieldBuilder() : null; } else { listedDatabasesBuilder_.addAllMessages(other.listedDatabases_); @@ -745,8 +735,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CloudDatabaseResponse ot listedDatabaseOperations_ = other.listedDatabaseOperations_; bitField0_ = (bitField0_ & ~0x00000002); listedDatabaseOperationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getListedDatabaseOperationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetListedDatabaseOperationsFieldBuilder() : null; } else { listedDatabaseOperationsBuilder_.addAllMessages(other.listedDatabaseOperations_); @@ -820,7 +810,8 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getDatabaseFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetDatabaseFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -855,7 +846,7 @@ private void ensureListedDatabasesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> @@ -877,6 +868,7 @@ public java.util.List getListedDa return listedDatabasesBuilder_.getMessageList(); } } + /** * * @@ -893,6 +885,7 @@ public int getListedDatabasesCount() { return listedDatabasesBuilder_.getCount(); } } + /** * * @@ -909,6 +902,7 @@ public com.google.spanner.admin.database.v1.Database getListedDatabases(int inde return listedDatabasesBuilder_.getMessage(index); } } + /** * * @@ -932,6 +926,7 @@ public Builder setListedDatabases( } return this; } + /** * * @@ -952,6 +947,7 @@ public Builder setListedDatabases( } return this; } + /** * * @@ -974,6 +970,7 @@ public Builder addListedDatabases(com.google.spanner.admin.database.v1.Database } return this; } + /** * * @@ -997,6 +994,7 @@ public Builder addListedDatabases( } return this; } + /** * * @@ -1017,6 +1015,7 @@ public Builder addListedDatabases( } return this; } + /** * * @@ -1037,6 +1036,7 @@ public Builder addListedDatabases( } return this; } + /** * * @@ -1057,6 +1057,7 @@ public Builder addAllListedDatabases( } return this; } + /** * * @@ -1076,6 +1077,7 @@ public Builder clearListedDatabases() { } return this; } + /** * * @@ -1095,6 +1097,7 @@ public Builder removeListedDatabases(int index) { } return this; } + /** * * @@ -1106,8 +1109,9 @@ public Builder removeListedDatabases(int index) { */ public com.google.spanner.admin.database.v1.Database.Builder getListedDatabasesBuilder( int index) { - return getListedDatabasesFieldBuilder().getBuilder(index); + return internalGetListedDatabasesFieldBuilder().getBuilder(index); } + /** * * @@ -1125,6 +1129,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getListedDatabases return listedDatabasesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1142,6 +1147,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getListedDatabases return java.util.Collections.unmodifiableList(listedDatabases_); } } + /** * * @@ -1152,9 +1158,10 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getListedDatabases * repeated .google.spanner.admin.database.v1.Database listed_databases = 1; */ public com.google.spanner.admin.database.v1.Database.Builder addListedDatabasesBuilder() { - return getListedDatabasesFieldBuilder() + return internalGetListedDatabasesFieldBuilder() .addBuilder(com.google.spanner.admin.database.v1.Database.getDefaultInstance()); } + /** * * @@ -1166,9 +1173,10 @@ public com.google.spanner.admin.database.v1.Database.Builder addListedDatabasesB */ public com.google.spanner.admin.database.v1.Database.Builder addListedDatabasesBuilder( int index) { - return getListedDatabasesFieldBuilder() + return internalGetListedDatabasesFieldBuilder() .addBuilder(index, com.google.spanner.admin.database.v1.Database.getDefaultInstance()); } + /** * * @@ -1180,17 +1188,17 @@ public com.google.spanner.admin.database.v1.Database.Builder addListedDatabasesB */ public java.util.List getListedDatabasesBuilderList() { - return getListedDatabasesFieldBuilder().getBuilderList(); + return internalGetListedDatabasesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> - getListedDatabasesFieldBuilder() { + internalGetListedDatabasesFieldBuilder() { if (listedDatabasesBuilder_ == null) { listedDatabasesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder>( @@ -1214,7 +1222,7 @@ private void ensureListedDatabaseOperationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> @@ -1236,6 +1244,7 @@ public java.util.List getListedDatabaseOperati return listedDatabaseOperationsBuilder_.getMessageList(); } } + /** * * @@ -1252,6 +1261,7 @@ public int getListedDatabaseOperationsCount() { return listedDatabaseOperationsBuilder_.getCount(); } } + /** * * @@ -1268,6 +1278,7 @@ public com.google.longrunning.Operation getListedDatabaseOperations(int index) { return listedDatabaseOperationsBuilder_.getMessage(index); } } + /** * * @@ -1290,6 +1301,7 @@ public Builder setListedDatabaseOperations(int index, com.google.longrunning.Ope } return this; } + /** * * @@ -1310,6 +1322,7 @@ public Builder setListedDatabaseOperations( } return this; } + /** * * @@ -1332,6 +1345,7 @@ public Builder addListedDatabaseOperations(com.google.longrunning.Operation valu } return this; } + /** * * @@ -1354,6 +1368,7 @@ public Builder addListedDatabaseOperations(int index, com.google.longrunning.Ope } return this; } + /** * * @@ -1374,6 +1389,7 @@ public Builder addListedDatabaseOperations( } return this; } + /** * * @@ -1394,6 +1410,7 @@ public Builder addListedDatabaseOperations( } return this; } + /** * * @@ -1414,6 +1431,7 @@ public Builder addAllListedDatabaseOperations( } return this; } + /** * * @@ -1433,6 +1451,7 @@ public Builder clearListedDatabaseOperations() { } return this; } + /** * * @@ -1452,6 +1471,7 @@ public Builder removeListedDatabaseOperations(int index) { } return this; } + /** * * @@ -1462,8 +1482,9 @@ public Builder removeListedDatabaseOperations(int index) { * repeated .google.longrunning.Operation listed_database_operations = 2; */ public com.google.longrunning.Operation.Builder getListedDatabaseOperationsBuilder(int index) { - return getListedDatabaseOperationsFieldBuilder().getBuilder(index); + return internalGetListedDatabaseOperationsFieldBuilder().getBuilder(index); } + /** * * @@ -1481,6 +1502,7 @@ public com.google.longrunning.OperationOrBuilder getListedDatabaseOperationsOrBu return listedDatabaseOperationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1498,6 +1520,7 @@ public com.google.longrunning.OperationOrBuilder getListedDatabaseOperationsOrBu return java.util.Collections.unmodifiableList(listedDatabaseOperations_); } } + /** * * @@ -1508,9 +1531,10 @@ public com.google.longrunning.OperationOrBuilder getListedDatabaseOperationsOrBu * repeated .google.longrunning.Operation listed_database_operations = 2; */ public com.google.longrunning.Operation.Builder addListedDatabaseOperationsBuilder() { - return getListedDatabaseOperationsFieldBuilder() + return internalGetListedDatabaseOperationsFieldBuilder() .addBuilder(com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1521,9 +1545,10 @@ public com.google.longrunning.Operation.Builder addListedDatabaseOperationsBuild * repeated .google.longrunning.Operation listed_database_operations = 2; */ public com.google.longrunning.Operation.Builder addListedDatabaseOperationsBuilder(int index) { - return getListedDatabaseOperationsFieldBuilder() + return internalGetListedDatabaseOperationsFieldBuilder() .addBuilder(index, com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1535,17 +1560,17 @@ public com.google.longrunning.Operation.Builder addListedDatabaseOperationsBuild */ public java.util.List getListedDatabaseOperationsBuilderList() { - return getListedDatabaseOperationsFieldBuilder().getBuilderList(); + return internalGetListedDatabaseOperationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getListedDatabaseOperationsFieldBuilder() { + internalGetListedDatabaseOperationsFieldBuilder() { if (listedDatabaseOperationsBuilder_ == null) { listedDatabaseOperationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1559,6 +1584,7 @@ public com.google.longrunning.Operation.Builder addListedDatabaseOperationsBuild } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1582,6 +1608,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1605,6 +1632,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1627,6 +1655,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1645,6 +1674,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1670,11 +1700,12 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.Database database_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> databaseBuilder_; + /** * * @@ -1689,6 +1720,7 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { public boolean hasDatabase() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1709,6 +1741,7 @@ public com.google.spanner.admin.database.v1.Database getDatabase() { return databaseBuilder_.getMessage(); } } + /** * * @@ -1731,6 +1764,7 @@ public Builder setDatabase(com.google.spanner.admin.database.v1.Database value) onChanged(); return this; } + /** * * @@ -1751,6 +1785,7 @@ public Builder setDatabase( onChanged(); return this; } + /** * * @@ -1778,6 +1813,7 @@ public Builder mergeDatabase(com.google.spanner.admin.database.v1.Database value } return this; } + /** * * @@ -1797,6 +1833,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -1809,8 +1846,9 @@ public Builder clearDatabase() { public com.google.spanner.admin.database.v1.Database.Builder getDatabaseBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getDatabaseFieldBuilder().getBuilder(); + return internalGetDatabaseFieldBuilder().getBuilder(); } + /** * * @@ -1829,6 +1867,7 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild : database_; } } + /** * * @@ -1838,14 +1877,14 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild * * .google.spanner.admin.database.v1.Database database = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder> - getDatabaseFieldBuilder() { + internalGetDatabaseFieldBuilder() { if (databaseBuilder_ == null) { databaseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.Database, com.google.spanner.admin.database.v1.Database.Builder, com.google.spanner.admin.database.v1.DatabaseOrBuilder>( @@ -1855,17 +1894,6 @@ public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuild return databaseBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CloudDatabaseResponse) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java index b9e880893b5..ae9f5799c98 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CloudDatabaseResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CloudDatabaseResponse) @@ -34,6 +36,7 @@ public interface CloudDatabaseResponseOrBuilder * repeated .google.spanner.admin.database.v1.Database listed_databases = 1; */ java.util.List getListedDatabasesList(); + /** * * @@ -44,6 +47,7 @@ public interface CloudDatabaseResponseOrBuilder * repeated .google.spanner.admin.database.v1.Database listed_databases = 1; */ com.google.spanner.admin.database.v1.Database getListedDatabases(int index); + /** * * @@ -54,6 +58,7 @@ public interface CloudDatabaseResponseOrBuilder * repeated .google.spanner.admin.database.v1.Database listed_databases = 1; */ int getListedDatabasesCount(); + /** * * @@ -65,6 +70,7 @@ public interface CloudDatabaseResponseOrBuilder */ java.util.List getListedDatabasesOrBuilderList(); + /** * * @@ -86,6 +92,7 @@ public interface CloudDatabaseResponseOrBuilder * repeated .google.longrunning.Operation listed_database_operations = 2; */ java.util.List getListedDatabaseOperationsList(); + /** * * @@ -96,6 +103,7 @@ public interface CloudDatabaseResponseOrBuilder * repeated .google.longrunning.Operation listed_database_operations = 2; */ com.google.longrunning.Operation getListedDatabaseOperations(int index); + /** * * @@ -106,6 +114,7 @@ public interface CloudDatabaseResponseOrBuilder * repeated .google.longrunning.Operation listed_database_operations = 2; */ int getListedDatabaseOperationsCount(); + /** * * @@ -117,6 +126,7 @@ public interface CloudDatabaseResponseOrBuilder */ java.util.List getListedDatabaseOperationsOrBuilderList(); + /** * * @@ -141,6 +151,7 @@ public interface CloudDatabaseResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -167,6 +178,7 @@ public interface CloudDatabaseResponseOrBuilder * @return Whether the database field is set. */ boolean hasDatabase(); + /** * * @@ -179,6 +191,7 @@ public interface CloudDatabaseResponseOrBuilder * @return The database. */ com.google.spanner.admin.database.v1.Database getDatabase(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java index 39feaa1bc0f..85079577198 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; -public final class CloudExecutorProto { +@com.google.protobuf.Generated +public final class CloudExecutorProto extends com.google.protobuf.GeneratedFile { private CloudExecutorProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudExecutorProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,335 +42,347 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_SpannerAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_SpannerAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ReadAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ReadAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_QueryAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_QueryAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_QueryAction_Parameter_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_QueryAction_Parameter_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DmlAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DmlAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_BatchDmlAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_BatchDmlAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_Value_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_Value_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_KeyRange_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_KeyRange_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_KeySet_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_KeySet_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ValueList_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ValueList_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_MutationAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_MutationAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_MutationAction_Mod_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_MutationAction_Mod_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_WriteMutationsAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_WriteMutationsAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_PartitionedUpdateAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_PartitionedUpdateAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_StartTransactionAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_StartTransactionAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_Concurrency_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_Concurrency_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_TableMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_TableMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ColumnMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ColumnMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_TransactionExecutionOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_TransactionExecutionOptions_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_FinishTransactionAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_FinishTransactionAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_AdminAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_AdminAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_LabelsEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_LabelsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_LabelsEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_LabelsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_LabelsEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_LabelsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_executor_v1_AdaptMessageAction_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_executor_v1_AdaptMessageAction_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_executor_v1_AdaptMessageAction_AttachmentsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_executor_v1_AdaptMessageAction_AttachmentsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ListCloudInstancesAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ListCloudInstancesAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_GetCloudInstanceAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_GetCloudInstanceAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CreateCloudBackupAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CreateCloudBackupAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CopyCloudBackupAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CopyCloudBackupAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_GetCloudBackupAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_GetCloudBackupAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ListCloudBackupsAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ListCloudBackupsAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_GetOperationAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_GetOperationAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_QueryCancellationAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_QueryCancellationAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CancelOperationAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CancelOperationAction_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_executor_v1_AddSplitPointsAction_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_executor_v1_AddSplitPointsAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_StartBatchTransactionAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_StartBatchTransactionAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_BatchPartition_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_BatchPartition_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ExecutePartitionAction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ExecutePartitionAction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_SpannerActionOutcome_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_SpannerActionOutcome_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_AdminResult_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_AdminResult_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CloudBackupResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CloudBackupResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_OperationResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_OperationResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CloudInstanceResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CloudInstanceResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_CloudDatabaseResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_CloudDatabaseResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ReadResult_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ReadResult_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_QueryResult_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_QueryResult_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ChangeStreamRecord_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ChangeStreamRecord_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DataChangeRecord_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ChildPartitionsRecord_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ChildPartitionsRecord_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_HeartbeatRecord_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_HeartbeatRecord_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_SpannerOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_SpannerOptions_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_executor_v1_SessionPoolOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_executor_v1_SessionPoolOptions_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -369,461 +393,630 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n/google/spanner/executor/v1/cloud_execu" + "\n" + + "/google/spanner/executor/v1/cloud_execu" + "tor.proto\022\032google.spanner.executor.v1\032\027g" + "oogle/api/client.proto\032\037google/api/field" + "_behavior.proto\032#google/longrunning/oper" + "ations.proto\032\037google/protobuf/timestamp." + "proto\032\027google/rpc/status.proto\032-google/s" - + "panner/admin/database/v1/backup.proto\032-g" - + "oogle/spanner/admin/database/v1/common.p" - + "roto\032=google/spanner/admin/database/v1/s" - + "panner_database_admin.proto\032=google/span" + + "panner/admin/database/v1/backup.proto\032-google/spanner/admin/database/v1/common.p" + + "roto\032=google/spanner/admin/database/v1/spanner_database_admin.proto\032=google/span" + "ner/admin/instance/v1/spanner_instance_a" - + "dmin.proto\032\037google/spanner/v1/spanner.pr" - + "oto\032\034google/spanner/v1/type.proto\"i\n\031Spa" - + "nnerAsyncActionRequest\022\021\n\taction_id\030\001 \001(" - + "\005\0229\n\006action\030\002 \001(\0132).google.spanner.execu" - + "tor.v1.SpannerAction\"r\n\032SpannerAsyncActi" - + "onResponse\022\021\n\taction_id\030\001 \001(\005\022A\n\007outcome" - + "\030\002 \001(\01320.google.spanner.executor.v1.Span" - + "nerActionOutcome\"\361\n\n\rSpannerAction\022\025\n\rda" - + "tabase_path\030\001 \001(\t\022C\n\017spanner_options\030\002 \001" - + "(\0132*.google.spanner.executor.v1.SpannerO" - + "ptions\022C\n\005start\030\n \001(\01322.google.spanner.e" - + "xecutor.v1.StartTransactionActionH\000\022E\n\006f" - + "inish\030\013 \001(\01323.google.spanner.executor.v1" - + ".FinishTransactionActionH\000\0226\n\004read\030\024 \001(\013" - + "2&.google.spanner.executor.v1.ReadAction" - + "H\000\0228\n\005query\030\025 \001(\0132\'.google.spanner.execu" - + "tor.v1.QueryActionH\000\022>\n\010mutation\030\026 \001(\0132*" - + ".google.spanner.executor.v1.MutationActi" - + "onH\000\0224\n\003dml\030\027 \001(\0132%.google.spanner.execu" - + "tor.v1.DmlActionH\000\022?\n\tbatch_dml\030\030 \001(\0132*." - + "google.spanner.executor.v1.BatchDmlActio" - + "nH\000\022A\n\005write\030\031 \001(\01320.google.spanner.exec" - + "utor.v1.WriteMutationsActionH\000\022Q\n\022partit" - + "ioned_update\030\033 \001(\01323.google.spanner.exec" - + "utor.v1.PartitionedUpdateActionH\000\0228\n\005adm" - + "in\030\036 \001(\0132\'.google.spanner.executor.v1.Ad" - + "minActionH\000\022R\n\017start_batch_txn\030( \001(\01327.g" - + "oogle.spanner.executor.v1.StartBatchTran" - + "sactionActionH\000\022R\n\017close_batch_txn\030) \001(\013" - + "27.google.spanner.executor.v1.CloseBatch" - + "TransactionActionH\000\022d\n\033generate_db_parti" - + "tions_read\030* \001(\0132=.google.spanner.execut" - + "or.v1.GenerateDbPartitionsForReadActionH" - + "\000\022f\n\034generate_db_partitions_query\030+ \001(\0132" - + ">.google.spanner.executor.v1.GenerateDbP" - + "artitionsForQueryActionH\000\022O\n\021execute_par" - + "tition\030, \001(\01322.google.spanner.executor.v" - + "1.ExecutePartitionActionH\000\022[\n\033execute_ch" - + "ange_stream_query\0302 \001(\01324.google.spanner" - + ".executor.v1.ExecuteChangeStreamQueryH\000\022" - + "Q\n\022query_cancellation\0303 \001(\01323.google.spa" - + "nner.executor.v1.QueryCancellationAction" - + "H\000B\010\n\006action\"\212\001\n\nReadAction\022\r\n\005table\030\001 \001" - + "(\t\022\022\n\005index\030\002 \001(\tH\000\210\001\001\022\016\n\006column\030\003 \003(\t\0220" - + "\n\004keys\030\004 \001(\0132\".google.spanner.executor.v" - + "1.KeySet\022\r\n\005limit\030\005 \001(\005B\010\n\006_index\"\321\001\n\013Qu" - + "eryAction\022\013\n\003sql\030\001 \001(\t\022A\n\006params\030\002 \003(\01321" - + ".google.spanner.executor.v1.QueryAction." - + "Parameter\032r\n\tParameter\022\014\n\004name\030\001 \001(\t\022%\n\004" - + "type\030\002 \001(\0132\027.google.spanner.v1.Type\0220\n\005v" - + "alue\030\003 \001(\0132!.google.spanner.executor.v1." - + "Value\"\206\001\n\tDmlAction\0227\n\006update\030\001 \001(\0132\'.go" - + "ogle.spanner.executor.v1.QueryAction\022$\n\027" - + "autocommit_if_supported\030\002 \001(\010H\000\210\001\001B\032\n\030_a" - + "utocommit_if_supported\"J\n\016BatchDmlAction" - + "\0228\n\007updates\030\001 \003(\0132\'.google.spanner.execu" - + "tor.v1.QueryAction\"\311\003\n\005Value\022\021\n\007is_null\030" - + "\001 \001(\010H\000\022\023\n\tint_value\030\002 \001(\003H\000\022\024\n\nbool_val" - + "ue\030\003 \001(\010H\000\022\026\n\014double_value\030\004 \001(\001H\000\022\025\n\013by" - + "tes_value\030\005 \001(\014H\000\022\026\n\014string_value\030\006 \001(\tH" - + "\000\022=\n\014struct_value\030\007 \001(\0132%.google.spanner" - + ".executor.v1.ValueListH\000\0225\n\017timestamp_va" - + "lue\030\010 \001(\0132\032.google.protobuf.TimestampH\000\022" - + "\031\n\017date_days_value\030\t \001(\005H\000\022\035\n\023is_commit_" - + "timestamp\030\n \001(\010H\000\022<\n\013array_value\030\013 \001(\0132%" - + ".google.spanner.executor.v1.ValueListH\000\022" - + "0\n\narray_type\030\014 \001(\0132\027.google.spanner.v1." - + "TypeH\001\210\001\001B\014\n\nvalue_typeB\r\n\013_array_type\"\237" - + "\002\n\010KeyRange\0224\n\005start\030\001 \001(\0132%.google.span" - + "ner.executor.v1.ValueList\0224\n\005limit\030\002 \001(\013" - + "2%.google.spanner.executor.v1.ValueList\022" - + "<\n\004type\030\003 \001(\0162).google.spanner.executor." - + "v1.KeyRange.TypeH\000\210\001\001\"`\n\004Type\022\024\n\020TYPE_UN" - + "SPECIFIED\020\000\022\021\n\rCLOSED_CLOSED\020\001\022\017\n\013CLOSED" - + "_OPEN\020\002\022\017\n\013OPEN_CLOSED\020\003\022\r\n\tOPEN_OPEN\020\004B" - + "\007\n\005_type\"\200\001\n\006KeySet\0224\n\005point\030\001 \003(\0132%.goo" - + "gle.spanner.executor.v1.ValueList\0223\n\005ran" - + "ge\030\002 \003(\0132$.google.spanner.executor.v1.Ke" - + "yRange\022\013\n\003all\030\003 \001(\010\"=\n\tValueList\0220\n\005valu" - + "e\030\001 \003(\0132!.google.spanner.executor.v1.Val" - + "ue\"\274\005\n\016MutationAction\022;\n\003mod\030\001 \003(\0132..goo" - + "gle.spanner.executor.v1.MutationAction.M" - + "od\032z\n\nInsertArgs\022\016\n\006column\030\001 \003(\t\022%\n\004type" - + "\030\002 \003(\0132\027.google.spanner.v1.Type\0225\n\006value" - + "s\030\003 \003(\0132%.google.spanner.executor.v1.Val" - + "ueList\032z\n\nUpdateArgs\022\016\n\006column\030\001 \003(\t\022%\n\004" - + "type\030\002 \003(\0132\027.google.spanner.v1.Type\0225\n\006v" - + "alues\030\003 \003(\0132%.google.spanner.executor.v1" - + ".ValueList\032\364\002\n\003Mod\022\r\n\005table\030\001 \001(\t\022E\n\006ins" - + "ert\030\002 \001(\01325.google.spanner.executor.v1.M" - + "utationAction.InsertArgs\022E\n\006update\030\003 \001(\013" - + "25.google.spanner.executor.v1.MutationAc" - + "tion.UpdateArgs\022O\n\020insert_or_update\030\004 \001(" - + "\01325.google.spanner.executor.v1.MutationA" - + "ction.InsertArgs\022F\n\007replace\030\005 \001(\01325.goog" - + "le.spanner.executor.v1.MutationAction.In" - + "sertArgs\0227\n\013delete_keys\030\006 \001(\0132\".google.s" - + "panner.executor.v1.KeySet\"T\n\024WriteMutati" - + "onsAction\022<\n\010mutation\030\001 \001(\0132*.google.spa" - + "nner.executor.v1.MutationAction\"\337\002\n\027Part" - + "itionedUpdateAction\022i\n\007options\030\001 \001(\0132S.g" - + "oogle.spanner.executor.v1.PartitionedUpd" - + "ateAction.ExecutePartitionedUpdateOption" - + "sH\000\210\001\001\0227\n\006update\030\002 \001(\0132\'.google.spanner." - + "executor.v1.QueryAction\032\223\001\n\037ExecuteParti" - + "tionedUpdateOptions\022E\n\014rpc_priority\030\001 \001(" - + "\0162*.google.spanner.v1.RequestOptions.Pri" - + "orityH\000\210\001\001\022\020\n\003tag\030\002 \001(\tH\001\210\001\001B\017\n\r_rpc_pri" - + "orityB\006\n\004_tagB\n\n\010_options\"\256\002\n\026StartTrans" - + "actionAction\022A\n\013concurrency\030\001 \001(\0132\'.goog" - + "le.spanner.executor.v1.ConcurrencyH\000\210\001\001\022" - + "8\n\005table\030\002 \003(\0132).google.spanner.executor" - + ".v1.TableMetadata\022\030\n\020transaction_seed\030\003 " - + "\001(\t\022W\n\021execution_options\030\004 \001(\01327.google." - + "spanner.executor.v1.TransactionExecution" - + "OptionsH\001\210\001\001B\016\n\014_concurrencyB\024\n\022_executi" - + "on_options\"\256\002\n\013Concurrency\022\033\n\021staleness_" - + "seconds\030\001 \001(\001H\000\022#\n\031min_read_timestamp_mi" - + "cros\030\002 \001(\003H\000\022\037\n\025max_staleness_seconds\030\003 " - + "\001(\001H\000\022 \n\026exact_timestamp_micros\030\004 \001(\003H\000\022" - + "\020\n\006strong\030\005 \001(\010H\000\022\017\n\005batch\030\006 \001(\010H\000\022\033\n\023sn" - + "apshot_epoch_read\030\007 \001(\010\022!\n\031snapshot_epoc" - + "h_root_table\030\010 \001(\t\022#\n\033batch_read_timesta" - + "mp_micros\030\t \001(\003B\022\n\020concurrency_mode\"\231\001\n\r" - + "TableMetadata\022\014\n\004name\030\001 \001(\t\022:\n\006column\030\002 " - + "\003(\0132*.google.spanner.executor.v1.ColumnM" - + "etadata\022>\n\nkey_column\030\003 \003(\0132*.google.spa" - + "nner.executor.v1.ColumnMetadata\"E\n\016Colum" - + "nMetadata\022\014\n\004name\030\001 \001(\t\022%\n\004type\030\002 \001(\0132\027." - + "google.spanner.v1.Type\"1\n\033TransactionExe" - + "cutionOptions\022\022\n\noptimistic\030\001 \001(\010\"\230\001\n\027Fi" - + "nishTransactionAction\022F\n\004mode\030\001 \001(\01628.go" - + "ogle.spanner.executor.v1.FinishTransacti" - + "onAction.Mode\"5\n\004Mode\022\024\n\020MODE_UNSPECIFIE" - + "D\020\000\022\n\n\006COMMIT\020\001\022\013\n\007ABANDON\020\002\"\310\023\n\013AdminAc" - + "tion\022a\n\033create_user_instance_config\030\001 \001(" - + "\0132:.google.spanner.executor.v1.CreateUse" - + "rInstanceConfigActionH\000\022a\n\033update_user_i" - + "nstance_config\030\002 \001(\0132:.google.spanner.ex" - + "ecutor.v1.UpdateUserInstanceConfigAction" - + "H\000\022a\n\033delete_user_instance_config\030\003 \001(\0132" - + ":.google.spanner.executor.v1.DeleteUserI" - + "nstanceConfigActionH\000\022]\n\031get_cloud_insta" - + "nce_config\030\004 \001(\01328.google.spanner.execut" - + "or.v1.GetCloudInstanceConfigActionH\000\022[\n\025" - + "list_instance_configs\030\005 \001(\0132:.google.spa" - + "nner.executor.v1.ListCloudInstanceConfig" - + "sActionH\000\022V\n\025create_cloud_instance\030\006 \001(\013" - + "25.google.spanner.executor.v1.CreateClou" - + "dInstanceActionH\000\022V\n\025update_cloud_instan" - + "ce\030\007 \001(\01325.google.spanner.executor.v1.Up" - + "dateCloudInstanceActionH\000\022V\n\025delete_clou" - + "d_instance\030\010 \001(\01325.google.spanner.execut" - + "or.v1.DeleteCloudInstanceActionH\000\022T\n\024lis" - + "t_cloud_instances\030\t \001(\01324.google.spanner" - + ".executor.v1.ListCloudInstancesActionH\000\022" - + "P\n\022get_cloud_instance\030\n \001(\01322.google.spa" - + "nner.executor.v1.GetCloudInstanceActionH" - + "\000\022V\n\025create_cloud_database\030\013 \001(\01325.googl" - + "e.spanner.executor.v1.CreateCloudDatabas" - + "eActionH\000\022]\n\031update_cloud_database_ddl\030\014" - + " \001(\01328.google.spanner.executor.v1.Update" - + "CloudDatabaseDdlActionH\000\022V\n\025update_cloud" - + "_database\030\033 \001(\01325.google.spanner.executo" - + "r.v1.UpdateCloudDatabaseActionH\000\022R\n\023drop" - + "_cloud_database\030\r \001(\01323.google.spanner.e" - + "xecutor.v1.DropCloudDatabaseActionH\000\022T\n\024" - + "list_cloud_databases\030\016 \001(\01324.google.span" - + "ner.executor.v1.ListCloudDatabasesAction" - + "H\000\022g\n\036list_cloud_database_operations\030\017 \001" - + "(\0132=.google.spanner.executor.v1.ListClou" - + "dDatabaseOperationsActionH\000\022X\n\026restore_c" - + "loud_database\030\020 \001(\01326.google.spanner.exe" - + "cutor.v1.RestoreCloudDatabaseActionH\000\022P\n" - + "\022get_cloud_database\030\021 \001(\01322.google.spann" - + "er.executor.v1.GetCloudDatabaseActionH\000\022" - + "R\n\023create_cloud_backup\030\022 \001(\01323.google.sp" - + "anner.executor.v1.CreateCloudBackupActio" - + "nH\000\022N\n\021copy_cloud_backup\030\023 \001(\01321.google." - + "spanner.executor.v1.CopyCloudBackupActio" - + "nH\000\022L\n\020get_cloud_backup\030\024 \001(\01320.google.s" - + "panner.executor.v1.GetCloudBackupActionH" - + "\000\022R\n\023update_cloud_backup\030\025 \001(\01323.google." - + "spanner.executor.v1.UpdateCloudBackupAct" - + "ionH\000\022R\n\023delete_cloud_backup\030\026 \001(\01323.goo" - + "gle.spanner.executor.v1.DeleteCloudBacku" - + "pActionH\000\022P\n\022list_cloud_backups\030\027 \001(\01322." - + "google.spanner.executor.v1.ListCloudBack" - + "upsActionH\000\022c\n\034list_cloud_backup_operati" - + "ons\030\030 \001(\0132;.google.spanner.executor.v1.L" - + "istCloudBackupOperationsActionH\000\022G\n\rget_" - + "operation\030\031 \001(\0132..google.spanner.executo" - + "r.v1.GetOperationActionH\000\022M\n\020cancel_oper" - + "ation\030\032 \001(\01321.google.spanner.executor.v1" - + ".CancelOperationActionH\000\022c\n\034change_quoru" - + "m_cloud_database\030\034 \001(\0132;.google.spanner." - + "executor.v1.ChangeQuorumCloudDatabaseAct" - + "ionH\000B\010\n\006action\"\245\001\n\036CreateUserInstanceCo" - + "nfigAction\022\026\n\016user_config_id\030\001 \001(\t\022\022\n\npr" - + "oject_id\030\002 \001(\t\022\026\n\016base_config_id\030\003 \001(\t\022?" - + "\n\010replicas\030\004 \003(\0132-.google.spanner.admin." - + "instance.v1.ReplicaInfo\"\377\001\n\036UpdateUserIn" - + "stanceConfigAction\022\026\n\016user_config_id\030\001 \001" - + "(\t\022\022\n\nproject_id\030\002 \001(\t\022\031\n\014display_name\030\003" - + " \001(\tH\000\210\001\001\022V\n\006labels\030\004 \003(\0132F.google.spann" - + "er.executor.v1.UpdateUserInstanceConfigA" - + "ction.LabelsEntry\032-\n\013LabelsEntry\022\013\n\003key\030" - + "\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\017\n\r_display_nam" - + "e\"N\n\034GetCloudInstanceConfigAction\022\032\n\022ins" - + "tance_config_id\030\001 \001(\t\022\022\n\nproject_id\030\002 \001(" - + "\t\"L\n\036DeleteUserInstanceConfigAction\022\026\n\016u" - + "ser_config_id\030\001 \001(\t\022\022\n\nproject_id\030\002 \001(\t\"" - + "\202\001\n\036ListCloudInstanceConfigsAction\022\022\n\npr" - + "oject_id\030\001 \001(\t\022\026\n\tpage_size\030\002 \001(\005H\000\210\001\001\022\027" - + "\n\npage_token\030\003 \001(\tH\001\210\001\001B\014\n\n_page_sizeB\r\n" - + "\013_page_token\"\253\003\n\031CreateCloudInstanceActi" - + "on\022\023\n\013instance_id\030\001 \001(\t\022\022\n\nproject_id\030\002 " - + "\001(\t\022\032\n\022instance_config_id\030\003 \001(\t\022\027\n\nnode_" - + "count\030\004 \001(\005H\000\210\001\001\022\035\n\020processing_units\030\006 \001" - + "(\005H\001\210\001\001\022T\n\022autoscaling_config\030\007 \001(\01323.go" - + "ogle.spanner.admin.instance.v1.Autoscali" - + "ngConfigH\002\210\001\001\022Q\n\006labels\030\005 \003(\0132A.google.s" - + "panner.executor.v1.CreateCloudInstanceAc" - + "tion.LabelsEntry\032-\n\013LabelsEntry\022\013\n\003key\030\001" - + " \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\r\n\013_node_countB\023" - + "\n\021_processing_unitsB\025\n\023_autoscaling_conf" - + "ig\"\273\003\n\031UpdateCloudInstanceAction\022\023\n\013inst" - + "ance_id\030\001 \001(\t\022\022\n\nproject_id\030\002 \001(\t\022\031\n\014dis" - + "play_name\030\003 \001(\tH\000\210\001\001\022\027\n\nnode_count\030\004 \001(\005" - + "H\001\210\001\001\022\035\n\020processing_units\030\005 \001(\005H\002\210\001\001\022T\n\022" - + "autoscaling_config\030\007 \001(\01323.google.spanne" - + "r.admin.instance.v1.AutoscalingConfigH\003\210" - + "\001\001\022Q\n\006labels\030\006 \003(\0132A.google.spanner.exec" - + "utor.v1.UpdateCloudInstanceAction.Labels" - + "Entry\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005val" - + "ue\030\002 \001(\t:\0028\001B\017\n\r_display_nameB\r\n\013_node_c" - + "ountB\023\n\021_processing_unitsB\025\n\023_autoscalin" - + "g_config\"D\n\031DeleteCloudInstanceAction\022\023\n" - + "\013instance_id\030\001 \001(\t\022\022\n\nproject_id\030\002 \001(\t\"\227" - + "\002\n\031CreateCloudDatabaseAction\022\023\n\013instance" - + "_id\030\001 \001(\t\022\022\n\nproject_id\030\002 \001(\t\022\023\n\013databas" - + "e_id\030\003 \001(\t\022\025\n\rsdl_statement\030\004 \003(\t\022M\n\021enc" - + "ryption_config\030\005 \001(\01322.google.spanner.ad" - + "min.database.v1.EncryptionConfig\022\024\n\007dial" - + "ect\030\006 \001(\tH\000\210\001\001\022\036\n\021proto_descriptors\030\007 \001(" - + "\014H\001\210\001\001B\n\n\010_dialectB\024\n\022_proto_descriptors" - + "\"\277\001\n\034UpdateCloudDatabaseDdlAction\022\023\n\013ins" - + "tance_id\030\001 \001(\t\022\022\n\nproject_id\030\002 \001(\t\022\023\n\013da" - + "tabase_id\030\003 \001(\t\022\025\n\rsdl_statement\030\004 \003(\t\022\024" - + "\n\014operation_id\030\005 \001(\t\022\036\n\021proto_descriptor" - + "s\030\006 \001(\014H\000\210\001\001B\024\n\022_proto_descriptors\"{\n\031Up" - + "dateCloudDatabaseAction\022\023\n\013instance_id\030\001" - + " \001(\t\022\022\n\nproject_id\030\002 \001(\t\022\025\n\rdatabase_nam" - + "e\030\003 \001(\t\022\036\n\026enable_drop_protection\030\004 \001(\010\"" - + "W\n\027DropCloudDatabaseAction\022\023\n\013instance_i" - + "d\030\001 \001(\t\022\022\n\nproject_id\030\002 \001(\t\022\023\n\013database_" - + "id\030\003 \001(\t\"h\n\037ChangeQuorumCloudDatabaseAct" - + "ion\022\031\n\014database_uri\030\001 \001(\tH\000\210\001\001\022\031\n\021servin" - + "g_locations\030\002 \003(\tB\017\n\r_database_uri\"j\n\030Li" - + "stCloudDatabasesAction\022\022\n\nproject_id\030\001 \001" - + "(\t\022\023\n\013instance_id\030\002 \001(\t\022\021\n\tpage_size\030\003 \001" - + "(\005\022\022\n\npage_token\030\004 \001(\t\"\234\001\n\030ListCloudInst" - + "ancesAction\022\022\n\nproject_id\030\001 \001(\t\022\023\n\006filte" - + "r\030\002 \001(\tH\000\210\001\001\022\026\n\tpage_size\030\003 \001(\005H\001\210\001\001\022\027\n\n" - + "page_token\030\004 \001(\tH\002\210\001\001B\t\n\007_filterB\014\n\n_pag" - + "e_sizeB\r\n\013_page_token\"A\n\026GetCloudInstanc" - + "eAction\022\022\n\nproject_id\030\001 \001(\t\022\023\n\013instance_" - + "id\030\002 \001(\t\"\203\001\n!ListCloudDatabaseOperations" - + "Action\022\022\n\nproject_id\030\001 \001(\t\022\023\n\013instance_i" - + "d\030\002 \001(\t\022\016\n\006filter\030\003 \001(\t\022\021\n\tpage_size\030\004 \001" - + "(\005\022\022\n\npage_token\030\005 \001(\t\"\341\001\n\032RestoreCloudD" - + "atabaseAction\022\022\n\nproject_id\030\001 \001(\t\022\032\n\022bac" - + "kup_instance_id\030\002 \001(\t\022\021\n\tbackup_id\030\003 \001(\t" - + "\022\034\n\024database_instance_id\030\004 \001(\t\022\023\n\013databa" - + "se_id\030\005 \001(\t\022M\n\021encryption_config\030\007 \001(\01322" - + ".google.spanner.admin.database.v1.Encryp" - + "tionConfig\"V\n\026GetCloudDatabaseAction\022\022\n\n" - + "project_id\030\001 \001(\t\022\023\n\013instance_id\030\002 \001(\t\022\023\n" - + "\013database_id\030\003 \001(\t\"\267\002\n\027CreateCloudBackup" - + "Action\022\022\n\nproject_id\030\001 \001(\t\022\023\n\013instance_i" - + "d\030\002 \001(\t\022\021\n\tbackup_id\030\003 \001(\t\022\023\n\013database_i" - + "d\030\004 \001(\t\0224\n\013expire_time\030\005 \001(\0132\032.google.pr" - + "otobuf.TimestampB\003\340A\003\0225\n\014version_time\030\006 " - + "\001(\0132\032.google.protobuf.TimestampH\000\210\001\001\022M\n\021" - + "encryption_config\030\007 \001(\01322.google.spanner" - + ".admin.database.v1.EncryptionConfigB\017\n\r_" - + "version_time\"\240\001\n\025CopyCloudBackupAction\022\022" - + "\n\nproject_id\030\001 \001(\t\022\023\n\013instance_id\030\002 \001(\t\022" - + "\021\n\tbackup_id\030\003 \001(\t\022\025\n\rsource_backup\030\004 \001(" - + "\t\0224\n\013expire_time\030\005 \001(\0132\032.google.protobuf" - + ".TimestampB\003\340A\003\"R\n\024GetCloudBackupAction\022" - + "\022\n\nproject_id\030\001 \001(\t\022\023\n\013instance_id\030\002 \001(\t" - + "\022\021\n\tbackup_id\030\003 \001(\t\"\213\001\n\027UpdateCloudBacku" - + "pAction\022\022\n\nproject_id\030\001 \001(\t\022\023\n\013instance_" - + "id\030\002 \001(\t\022\021\n\tbackup_id\030\003 \001(\t\0224\n\013expire_ti" - + "me\030\004 \001(\0132\032.google.protobuf.TimestampB\003\340A" - + "\003\"U\n\027DeleteCloudBackupAction\022\022\n\nproject_" - + "id\030\001 \001(\t\022\023\n\013instance_id\030\002 \001(\t\022\021\n\tbackup_" - + "id\030\003 \001(\t\"x\n\026ListCloudBackupsAction\022\022\n\npr" - + "oject_id\030\001 \001(\t\022\023\n\013instance_id\030\002 \001(\t\022\016\n\006f" - + "ilter\030\003 \001(\t\022\021\n\tpage_size\030\004 \001(\005\022\022\n\npage_t" - + "oken\030\005 \001(\t\"\201\001\n\037ListCloudBackupOperations" - + "Action\022\022\n\nproject_id\030\001 \001(\t\022\023\n\013instance_i" - + "d\030\002 \001(\t\022\016\n\006filter\030\003 \001(\t\022\021\n\tpage_size\030\004 \001" - + "(\005\022\022\n\npage_token\030\005 \001(\t\"\'\n\022GetOperationAc" - + "tion\022\021\n\toperation\030\001 \001(\t\"I\n\027QueryCancella" - + "tionAction\022\030\n\020long_running_sql\030\001 \001(\t\022\024\n\014" - + "cancel_query\030\002 \001(\t\"*\n\025CancelOperationAct" - + "ion\022\021\n\toperation\030\001 \001(\t\"\210\001\n\033StartBatchTra" - + "nsactionAction\0224\n\016batch_txn_time\030\001 \001(\0132\032" - + ".google.protobuf.TimestampH\000\022\r\n\003tid\030\002 \001(" - + "\014H\000\022\033\n\023cloud_database_role\030\003 \001(\tB\007\n\005para" - + "m\".\n\033CloseBatchTransactionAction\022\017\n\007clea" - + "nup\030\001 \001(\010\"\227\002\n!GenerateDbPartitionsForRea" - + "dAction\0224\n\004read\030\001 \001(\0132&.google.spanner.e" - + "xecutor.v1.ReadAction\0228\n\005table\030\002 \003(\0132).g" - + "oogle.spanner.executor.v1.TableMetadata\022" - + "(\n\033desired_bytes_per_partition\030\003 \001(\003H\000\210\001" - + "\001\022 \n\023max_partition_count\030\004 \001(\003H\001\210\001\001B\036\n\034_" - + "desired_bytes_per_partitionB\026\n\024_max_part" - + "ition_count\"\246\001\n\"GenerateDbPartitionsForQ" - + "ueryAction\0226\n\005query\030\001 \001(\0132\'.google.spann" - + "er.executor.v1.QueryAction\022(\n\033desired_by" - + "tes_per_partition\030\002 \001(\003H\000\210\001\001B\036\n\034_desired" - + "_bytes_per_partition\"x\n\016BatchPartition\022\021" - + "\n\tpartition\030\001 \001(\014\022\027\n\017partition_token\030\002 \001" - + "(\014\022\022\n\005table\030\003 \001(\tH\000\210\001\001\022\022\n\005index\030\004 \001(\tH\001\210" - + "\001\001B\010\n\006_tableB\010\n\006_index\"W\n\026ExecutePartiti" - + "onAction\022=\n\tpartition\030\001 \001(\0132*.google.spa" - + "nner.executor.v1.BatchPartition\"\216\003\n\030Exec" - + "uteChangeStreamQuery\022\014\n\004name\030\001 \001(\t\022.\n\nst" - + "art_time\030\002 \001(\0132\032.google.protobuf.Timesta" - + "mp\0221\n\010end_time\030\003 \001(\0132\032.google.protobuf.T" - + "imestampH\000\210\001\001\022\034\n\017partition_token\030\004 \001(\tH\001" - + "\210\001\001\022\024\n\014read_options\030\005 \003(\t\022#\n\026heartbeat_m" - + "illiseconds\030\006 \001(\005H\002\210\001\001\022\035\n\020deadline_secon" - + "ds\030\007 \001(\003H\003\210\001\001\022 \n\023cloud_database_role\030\010 \001" - + "(\tH\004\210\001\001B\013\n\t_end_timeB\022\n\020_partition_token" - + "B\031\n\027_heartbeat_millisecondsB\023\n\021_deadline" - + "_secondsB\026\n\024_cloud_database_role\"\242\005\n\024Spa" - + "nnerActionOutcome\022\'\n\006status\030\001 \001(\0132\022.goog" - + "le.rpc.StatusH\000\210\001\001\0224\n\013commit_time\030\002 \001(\0132" - + "\032.google.protobuf.TimestampH\001\210\001\001\022@\n\013read" - + "_result\030\003 \001(\0132&.google.spanner.executor." - + "v1.ReadResultH\002\210\001\001\022B\n\014query_result\030\004 \001(\013" - + "2\'.google.spanner.executor.v1.QueryResul" - + "tH\003\210\001\001\022\"\n\025transaction_restarted\030\005 \001(\010H\004\210" - + "\001\001\022\031\n\014batch_txn_id\030\006 \001(\014H\005\210\001\001\022@\n\014db_part" - + "ition\030\007 \003(\0132*.google.spanner.executor.v1" - + ".BatchPartition\022B\n\014admin_result\030\010 \001(\0132\'." - + "google.spanner.executor.v1.AdminResultH\006" - + "\210\001\001\022\031\n\021dml_rows_modified\030\t \003(\003\022M\n\025change" - + "_stream_records\030\n \003(\0132..google.spanner.e" - + "xecutor.v1.ChangeStreamRecordB\t\n\007_status" - + "B\016\n\014_commit_timeB\016\n\014_read_resultB\017\n\r_que" - + "ry_resultB\030\n\026_transaction_restartedB\017\n\r_" - + "batch_txn_idB\017\n\r_admin_result\"\231\003\n\013AdminR" - + "esult\022H\n\017backup_response\030\001 \001(\0132/.google." - + "spanner.executor.v1.CloudBackupResponse\022" - + "I\n\022operation_response\030\002 \001(\0132-.google.spa" - + "nner.executor.v1.OperationResponse\022L\n\021da" - + "tabase_response\030\003 \001(\01321.google.spanner.e" - + "xecutor.v1.CloudDatabaseResponse\022L\n\021inst" - + "ance_response\030\004 \001(\01321.google.spanner.exe" - + "cutor.v1.CloudInstanceResponse\022Y\n\030instan" - + "ce_config_response\030\005 \001(\01327.google.spanne" - + "r.executor.v1.CloudInstanceConfigRespons" - + "e\"\353\001\n\023CloudBackupResponse\022@\n\016listed_back" - + "ups\030\001 \003(\0132(.google.spanner.admin.databas" - + "e.v1.Backup\022?\n\030listed_backup_operations\030" - + "\002 \003(\0132\035.google.longrunning.Operation\022\027\n\017" - + "next_page_token\030\003 \001(\t\0228\n\006backup\030\004 \001(\0132(." - + "google.spanner.admin.database.v1.Backup\"" - + "\230\001\n\021OperationResponse\0228\n\021listed_operatio" - + "ns\030\001 \003(\0132\035.google.longrunning.Operation\022" - + "\027\n\017next_page_token\030\002 \001(\t\0220\n\toperation\030\003 " - + "\001(\0132\035.google.longrunning.Operation\"\264\001\n\025C" - + "loudInstanceResponse\022D\n\020listed_instances" - + "\030\001 \003(\0132*.google.spanner.admin.instance.v" - + "1.Instance\022\027\n\017next_page_token\030\002 \001(\t\022<\n\010i" - + "nstance\030\003 \001(\0132*.google.spanner.admin.ins" - + "tance.v1.Instance\"\324\001\n\033CloudInstanceConfi" - + "gResponse\022Q\n\027listed_instance_configs\030\001 \003" - + "(\01320.google.spanner.admin.instance.v1.In" - + "stanceConfig\022\027\n\017next_page_token\030\002 \001(\t\022I\n" - + "\017instance_config\030\003 \001(\01320.google.spanner." - + "admin.instance.v1.InstanceConfig\"\367\001\n\025Clo" - + "udDatabaseResponse\022D\n\020listed_databases\030\001" - + " \003(\0132*.google.spanner.admin.database.v1.", - "Database\022A\n\032listed_database_operations\030\002" - + " \003(\0132\035.google.longrunning.Operation\022\027\n\017n" - + "ext_page_token\030\003 \001(\t\022<\n\010database\030\004 \001(\0132*" - + ".google.spanner.admin.database.v1.Databa" - + "se\"\336\001\n\nReadResult\022\r\n\005table\030\001 \001(\t\022\022\n\005inde" - + "x\030\002 \001(\tH\000\210\001\001\022\032\n\rrequest_index\030\003 \001(\005H\001\210\001\001" - + "\0222\n\003row\030\004 \003(\0132%.google.spanner.executor." - + "v1.ValueList\0224\n\010row_type\030\005 \001(\0132\035.google." - + "spanner.v1.StructTypeH\002\210\001\001B\010\n\006_indexB\020\n\016" - + "_request_indexB\013\n\t_row_type\"\204\001\n\013QueryRes" - + "ult\0222\n\003row\030\001 \003(\0132%.google.spanner.execut" - + "or.v1.ValueList\0224\n\010row_type\030\002 \001(\0132\035.goog" - + "le.spanner.v1.StructTypeH\000\210\001\001B\013\n\t_row_ty" - + "pe\"\363\001\n\022ChangeStreamRecord\022C\n\013data_change" - + "\030\001 \001(\0132,.google.spanner.executor.v1.Data" - + "ChangeRecordH\000\022L\n\017child_partition\030\002 \001(\0132" - + "1.google.spanner.executor.v1.ChildPartit" - + "ionsRecordH\000\022@\n\theartbeat\030\003 \001(\0132+.google" - + ".spanner.executor.v1.HeartbeatRecordH\000B\010" - + "\n\006record\"\330\004\n\020DataChangeRecord\022/\n\013commit_" - + "time\030\001 \001(\0132\032.google.protobuf.Timestamp\022\027" - + "\n\017record_sequence\030\002 \001(\t\022\026\n\016transaction_i" - + "d\030\003 \001(\t\022\026\n\016is_last_record\030\004 \001(\010\022\r\n\005table" - + "\030\005 \001(\t\022M\n\014column_types\030\006 \003(\01327.google.sp" - + "anner.executor.v1.DataChangeRecord.Colum" - + "nType\022>\n\004mods\030\007 \003(\01320.google.spanner.exe" - + "cutor.v1.DataChangeRecord.Mod\022\020\n\010mod_typ" - + "e\030\010 \001(\t\022\032\n\022value_capture_type\030\t \001(\t\022\024\n\014r" - + "ecord_count\030\n \001(\003\022\027\n\017partition_count\030\013 \001" - + "(\003\022\027\n\017transaction_tag\030\014 \001(\t\022\035\n\025is_system" - + "_transaction\030\r \001(\010\032Z\n\nColumnType\022\014\n\004name" - + "\030\001 \001(\t\022\014\n\004type\030\002 \001(\t\022\026\n\016is_primary_key\030\003" - + " \001(\010\022\030\n\020ordinal_position\030\004 \001(\003\032;\n\003Mod\022\014\n" - + "\004keys\030\001 \001(\t\022\022\n\nnew_values\030\002 \001(\t\022\022\n\nold_v" - + "alues\030\003 \001(\t\"\376\001\n\025ChildPartitionsRecord\022.\n" - + "\nstart_time\030\001 \001(\0132\032.google.protobuf.Time" - + "stamp\022\027\n\017record_sequence\030\002 \001(\t\022Z\n\020child_" - + "partitions\030\003 \003(\0132@.google.spanner.execut" - + "or.v1.ChildPartitionsRecord.ChildPartiti" - + "on\032@\n\016ChildPartition\022\r\n\005token\030\001 \001(\t\022\037\n\027p" - + "arent_partition_tokens\030\002 \003(\t\"E\n\017Heartbea" - + "tRecord\0222\n\016heartbeat_time\030\001 \001(\0132\032.google" - + ".protobuf.Timestamp\"^\n\016SpannerOptions\022L\n" - + "\024session_pool_options\030\001 \001(\0132..google.spa" - + "nner.executor.v1.SessionPoolOptions\"-\n\022S" - + "essionPoolOptions\022\027\n\017use_multiplexed\030\001 \001" - + "(\0102\314\001\n\024SpannerExecutorProxy\022\211\001\n\022ExecuteA" - + "ctionAsync\0225.google.spanner.executor.v1." - + "SpannerAsyncActionRequest\0326.google.spann" - + "er.executor.v1.SpannerAsyncActionRespons" - + "e\"\000(\0010\001\032(\312A%spanner-cloud-executor.googl" - + "eapis.comBx\n\036com.google.spanner.executor" - + ".v1B\022CloudExecutorProtoP\001Z@cloud.google." - + "com/go/spanner/executor/apiv1/executorpb" - + ";executorpbb\006proto3" + + "dmin.proto\032\037google/spanner/v1/spanner.proto\032\034google/spanner/v1/type.proto\"i\n" + + "\031SpannerAsyncActionRequest\022\021\n" + + "\taction_id\030\001 \001(\005\0229\n" + + "\006action\030\002 \001(\0132).google.spanner.executor.v1.SpannerAction\"r\n" + + "\032SpannerAsyncActionResponse\022\021\n" + + "\taction_id\030\001 \001(\005\022A\n" + + "\007outcome\030\002" + + " \001(\01320.google.spanner.executor.v1.SpannerActionOutcome\"\272\013\n\r" + + "SpannerAction\022\025\n\r" + + "database_path\030\001 \001(\t\022C\n" + + "\017spanner_options\030\002 \001" + + "(\0132*.google.spanner.executor.v1.SpannerOptions\022C\n" + + "\005start\030\n" + + " \001(\01322.google.spanner.executor.v1.StartTransactionActionH\000\022E\n" + + "\006finish\030\013" + + " \001(\01323.google.spanner.executor.v1.FinishTransactionActionH\000\0226\n" + + "\004read\030\024 \001(\0132&.google.spanner.executor.v1.ReadActionH\000\0228\n" + + "\005query\030\025 \001(\0132\'.google.spanner.executor.v1.QueryActionH\000\022>\n" + + "\010mutation\030\026 \001(\0132*.google.spanner.executor.v1.MutationActionH\000\0224\n" + + "\003dml\030\027 \001(\0132%.google.spanner.executor.v1.DmlActionH\000\022?\n" + + "\tbatch_dml\030\030 \001(\0132*.google.spanner.executor.v1.BatchDmlActionH\000\022A\n" + + "\005write\030\031" + + " \001(\01320.google.spanner.executor.v1.WriteMutationsActionH\000\022Q\n" + + "\022partitioned_update\030\033" + + " \001(\01323.google.spanner.executor.v1.PartitionedUpdateActionH\000\0228\n" + + "\005admin\030\036 \001(\0132\'.google.spanner.executor.v1.AdminActionH\000\022R\n" + + "\017start_batch_txn\030( \001(\01327.g" + + "oogle.spanner.executor.v1.StartBatchTransactionActionH\000\022R\n" + + "\017close_batch_txn\030) \001(\013" + + "27.google.spanner.executor.v1.CloseBatchTransactionActionH\000\022d\n" + + "\033generate_db_partitions_read\030* \001(\0132=.google.spanner.execut" + + "or.v1.GenerateDbPartitionsForReadActionH\000\022f\n" + + "\034generate_db_partitions_query\030+ \001(\0132" + + ">.google.spanner.executor.v1.GenerateDbPartitionsForQueryActionH\000\022O\n" + + "\021execute_partition\030," + + " \001(\01322.google.spanner.executor.v1.ExecutePartitionActionH\000\022[\n" + + "\033execute_change_stream_query\0302 \001(\01324.google.spanner" + + ".executor.v1.ExecuteChangeStreamQueryH\000\022Q\n" + + "\022query_cancellation\0303 \001(\01323.google.spa" + + "nner.executor.v1.QueryCancellationActionH\000\022G\n\r" + + "adapt_message\0304" + + " \001(\0132..google.spanner.executor.v1.AdaptMessageActionH\000B\010\n" + + "\006action\"\212\001\n\n" + + "ReadAction\022\r\n" + + "\005table\030\001 \001(\t\022\022\n" + + "\005index\030\002 \001(\tH\000\210\001\001\022\016\n" + + "\006column\030\003 \003(\t\0220\n" + + "\004keys\030\004 \001(\0132\".google.spanner.executor.v1.KeySet\022\r\n" + + "\005limit\030\005 \001(\005B\010\n" + + "\006_index\"\321\001\n" + + "\013QueryAction\022\013\n" + + "\003sql\030\001 \001(\t\022A\n" + + "\006params\030\002 \003(\01321.google.spanner.executor.v1.QueryAction.Parameter\032r\n" + + "\tParameter\022\014\n" + + "\004name\030\001 \001(\t\022%\n" + + "\004type\030\002 \001(\0132\027.google.spanner.v1.Type\0220\n" + + "\005value\030\003 \001(\0132!.google.spanner.executor.v1.Value\"\266\001\n" + + "\tDmlAction\0227\n" + + "\006update\030\001 \001(\0132\'.google.spanner.executor.v1.QueryAction\022$\n" + + "\027autocommit_if_supported\030\002 \001(\010H\000\210\001\001\022\033\n" + + "\016last_statement\030\003 \001(\010H\001\210\001\001B\032\n" + + "\030_autocommit_if_supportedB\021\n" + + "\017_last_statement\"|\n" + + "\016BatchDmlAction\0228\n" + + "\007updates\030\001 \003(\0132\'.google.spanner.executor.v1.QueryAction\022\034\n" + + "\017last_statements\030\002 \001(\010H\000\210\001\001B\022\n" + + "\020_last_statements\"\311\003\n" + + "\005Value\022\021\n" + + "\007is_null\030\001 \001(\010H\000\022\023\n" + + "\tint_value\030\002 \001(\003H\000\022\024\n\n" + + "bool_value\030\003 \001(\010H\000\022\026\n" + + "\014double_value\030\004 \001(\001H\000\022\025\n" + + "\013bytes_value\030\005 \001(\014H\000\022\026\n" + + "\014string_value\030\006 \001(\tH\000\022=\n" + + "\014struct_value\030\007 \001(\0132%.google.spanner.executor.v1.ValueListH\000\0225\n" + + "\017timestamp_value\030\010 \001(\0132\032.google.protobuf.TimestampH\000\022\031\n" + + "\017date_days_value\030\t \001(\005H\000\022\035\n" + + "\023is_commit_timestamp\030\n" + + " \001(\010H\000\022<\n" + + "\013array_value\030\013 \001(\0132%.google.spanner.executor.v1.ValueListH\000\0220\n\n" + + "array_type\030\014 \001(\0132\027.google.spanner.v1.TypeH\001\210\001\001B\014\n\n" + + "value_typeB\r\n" + + "\013_array_type\"\237\002\n" + + "\010KeyRange\0224\n" + + "\005start\030\001 \001(\0132%.google.spanner.executor.v1.ValueList\0224\n" + + "\005limit\030\002 \001(\0132%.google.spanner.executor.v1.ValueList\022<\n" + + "\004type\030\003" + + " \001(\0162).google.spanner.executor.v1.KeyRange.TypeH\000\210\001\001\"`\n" + + "\004Type\022\024\n" + + "\020TYPE_UNSPECIFIED\020\000\022\021\n\r" + + "CLOSED_CLOSED\020\001\022\017\n" + + "\013CLOSED_OPEN\020\002\022\017\n" + + "\013OPEN_CLOSED\020\003\022\r\n" + + "\tOPEN_OPEN\020\004B\007\n" + + "\005_type\"\200\001\n" + + "\006KeySet\0224\n" + + "\005point\030\001 \003(\0132%.google.spanner.executor.v1.ValueList\0223\n" + + "\005range\030\002 \003(\0132$.google.spanner.executor.v1.KeyRange\022\013\n" + + "\003all\030\003 \001(\010\"=\n" + + "\tValueList\0220\n" + + "\005value\030\001 \003(\0132!.google.spanner.executor.v1.Value\"\274\005\n" + + "\016MutationAction\022;\n" + + "\003mod\030\001 \003(\0132..google.spanner.executor.v1.MutationAction.Mod\032z\n\n" + + "InsertArgs\022\016\n" + + "\006column\030\001 \003(\t\022%\n" + + "\004type\030\002 \003(\0132\027.google.spanner.v1.Type\0225\n" + + "\006values\030\003 \003(\0132%.google.spanner.executor.v1.ValueList\032z\n\n" + + "UpdateArgs\022\016\n" + + "\006column\030\001 \003(\t\022%\n" + + "\004type\030\002 \003(\0132\027.google.spanner.v1.Type\0225\n" + + "\006values\030\003 \003(\0132%.google.spanner.executor.v1.ValueList\032\364\002\n" + + "\003Mod\022\r\n" + + "\005table\030\001 \001(\t\022E\n" + + "\006insert\030\002" + + " \001(\01325.google.spanner.executor.v1.MutationAction.InsertArgs\022E\n" + + "\006update\030\003" + + " \001(\01325.google.spanner.executor.v1.MutationAction.UpdateArgs\022O\n" + + "\020insert_or_update\030\004" + + " \001(\01325.google.spanner.executor.v1.MutationAction.InsertArgs\022F\n" + + "\007replace\030\005" + + " \001(\01325.google.spanner.executor.v1.MutationAction.InsertArgs\0227\n" + + "\013delete_keys\030\006 \001(\0132\".google.spanner.executor.v1.KeySet\"T\n" + + "\024WriteMutationsAction\022<\n" + + "\010mutation\030\001 \001(\0132*.google.spanner.executor.v1.MutationAction\"\337\002\n" + + "\027PartitionedUpdateAction\022i\n" + + "\007options\030\001 \001(\0132S.google.spanner.executor.v1.Par" + + "titionedUpdateAction.ExecutePartitionedUpdateOptionsH\000\210\001\001\0227\n" + + "\006update\030\002 \001(\0132\'.google.spanner.executor.v1.QueryAction\032\223\001\n" + + "\037ExecutePartitionedUpdateOptions\022E\n" + + "\014rpc_priority\030\001" + + " \001(\0162*.google.spanner.v1.RequestOptions.PriorityH\000\210\001\001\022\020\n" + + "\003tag\030\002 \001(\tH\001\210\001\001B\017\n\r" + + "_rpc_priorityB\006\n" + + "\004_tagB\n\n" + + "\010_options\"\256\002\n" + + "\026StartTransactionAction\022A\n" + + "\013concurrency\030\001" + + " \001(\0132\'.google.spanner.executor.v1.ConcurrencyH\000\210\001\001\0228\n" + + "\005table\030\002 \003(\0132).google.spanner.executor.v1.TableMetadata\022\030\n" + + "\020transaction_seed\030\003 \001(\t\022W\n" + + "\021execution_options\030\004 \001(" + + "\01327.google.spanner.executor.v1.TransactionExecutionOptionsH\001\210\001\001B\016\n" + + "\014_concurrencyB\024\n" + + "\022_execution_options\"\256\002\n" + + "\013Concurrency\022\033\n" + + "\021staleness_seconds\030\001 \001(\001H\000\022#\n" + + "\031min_read_timestamp_micros\030\002 \001(\003H\000\022\037\n" + + "\025max_staleness_seconds\030\003 \001(\001H\000\022 \n" + + "\026exact_timestamp_micros\030\004 \001(\003H\000\022\020\n" + + "\006strong\030\005 \001(\010H\000\022\017\n" + + "\005batch\030\006 \001(\010H\000\022\033\n" + + "\023snapshot_epoch_read\030\007 \001(\010\022!\n" + + "\031snapshot_epoch_root_table\030\010 \001(\t\022#\n" + + "\033batch_read_timestamp_micros\030\t \001(\003B\022\n" + + "\020concurrency_mode\"\231\001\n\r" + + "TableMetadata\022\014\n" + + "\004name\030\001 \001(\t\022:\n" + + "\006column\030\002 \003(\0132*.google.spanner.executor.v1.ColumnMetadata\022>\n\n" + + "key_column\030\003 \003(\0132*.google.spanner.executor.v1.ColumnMetadata\"E\n" + + "\016ColumnMetadata\022\014\n" + + "\004name\030\001 \001(\t\022%\n" + + "\004type\030\002 \001(\0132\027.google.spanner.v1.Type\"\357\001\n" + + "\033TransactionExecutionOptions\022\022\n\n" + + "optimistic\030\001 \001(\010\022#\n" + + "\033exclude_from_change_streams\030\002 \001(\010\022\037\n" + + "\027serializable_optimistic\030\003 \001(\010\022%\n" + + "\035snapshot_isolation_optimistic\030\004 \001(\010\022&\n" + + "\036snapshot_isolation_pessimistic\030\005 \001(\010\022\'\n" + + "\037exclude_txn_from_change_streams\030\006 \001(\010\"\230\001\n" + + "\027FinishTransactionAction\022F\n" + + "\004mode\030\001 \001(\01628." + + "google.spanner.executor.v1.FinishTransactionAction.Mode\"5\n" + + "\004Mode\022\024\n" + + "\020MODE_UNSPECIFIED\020\000\022\n\n" + + "\006COMMIT\020\001\022\013\n" + + "\007ABANDON\020\002\"\226\024\n" + + "\013AdminAction\022a\n" + + "\033create_user_instance_config\030\001 " + + "\001(\0132:.google.spanner.executor.v1.CreateUserInstanceConfigActionH\000\022a\n" + + "\033update_user_instance_config\030\002 \001(\0132:.google.spanner." + + "executor.v1.UpdateUserInstanceConfigActionH\000\022a\n" + + "\033delete_user_instance_config\030\003 \001(" + + "\0132:.google.spanner.executor.v1.DeleteUserInstanceConfigActionH\000\022]\n" + + "\031get_cloud_instance_config\030\004 \001(\01328.google.spanner.exec" + + "utor.v1.GetCloudInstanceConfigActionH\000\022[\n" + + "\025list_instance_configs\030\005 \001(\0132:.google.s" + + "panner.executor.v1.ListCloudInstanceConfigsActionH\000\022V\n" + + "\025create_cloud_instance\030\006 \001" + + "(\01325.google.spanner.executor.v1.CreateCloudInstanceActionH\000\022V\n" + + "\025update_cloud_instance\030\007" + + " \001(\01325.google.spanner.executor.v1.UpdateCloudInstanceActionH\000\022V\n" + + "\025delete_cloud_instance\030\010" + + " \001(\01325.google.spanner.executor.v1.DeleteCloudInstanceActionH\000\022T\n" + + "\024list_cloud_instances\030\t \001(\01324.google.spann" + + "er.executor.v1.ListCloudInstancesActionH\000\022P\n" + + "\022get_cloud_instance\030\n" + + " \001(\01322.google.spanner.executor.v1.GetCloudInstanceActionH\000\022V\n" + + "\025create_cloud_database\030\013 \001(\01325.goo" + + "gle.spanner.executor.v1.CreateCloudDatabaseActionH\000\022]\n" + + "\031update_cloud_database_ddl\030\014" + + " \001(\01328.google.spanner.executor.v1.UpdateCloudDatabaseDdlActionH\000\022V\n" + + "\025update_cloud_database\030\033" + + " \001(\01325.google.spanner.executor.v1.UpdateCloudDatabaseActionH\000\022R\n" + + "\023drop_cloud_database\030\r" + + " \001(\01323.google.spanner.executor.v1.DropCloudDatabaseActionH\000\022T\n" + + "\024list_cloud_databases\030\016 \001(\01324.google.sp" + + "anner.executor.v1.ListCloudDatabasesActionH\000\022g\n" + + "\036list_cloud_database_operations\030\017" + + " \001(\0132=.google.spanner.executor.v1.ListCloudDatabaseOperationsActionH\000\022X\n" + + "\026restore_cloud_database\030\020 \001(\01326.google.spanner.e" + + "xecutor.v1.RestoreCloudDatabaseActionH\000\022P\n" + + "\022get_cloud_database\030\021 \001(\01322.google.spa" + + "nner.executor.v1.GetCloudDatabaseActionH\000\022R\n" + + "\023create_cloud_backup\030\022 \001(\01323.google." + + "spanner.executor.v1.CreateCloudBackupActionH\000\022N\n" + + "\021copy_cloud_backup\030\023 \001(\01321.googl" + + "e.spanner.executor.v1.CopyCloudBackupActionH\000\022L\n" + + "\020get_cloud_backup\030\024 \001(\01320.google" + + ".spanner.executor.v1.GetCloudBackupActionH\000\022R\n" + + "\023update_cloud_backup\030\025 \001(\01323.googl" + + "e.spanner.executor.v1.UpdateCloudBackupActionH\000\022R\n" + + "\023delete_cloud_backup\030\026 \001(\01323.g" + + "oogle.spanner.executor.v1.DeleteCloudBackupActionH\000\022P\n" + + "\022list_cloud_backups\030\027 \001(\0132" + + "2.google.spanner.executor.v1.ListCloudBackupsActionH\000\022c\n" + + "\034list_cloud_backup_operations\030\030" + + " \001(\0132;.google.spanner.executor.v1.ListCloudBackupOperationsActionH\000\022G\n\r" + + "get_operation\030\031" + + " \001(\0132..google.spanner.executor.v1.GetOperationActionH\000\022M\n" + + "\020cancel_operation\030\032" + + " \001(\01321.google.spanner.executor.v1.CancelOperationActionH\000\022c\n" + + "\034change_quorum_cloud_database\030\034 \001(\0132;.google.spanne" + + "r.executor.v1.ChangeQuorumCloudDatabaseActionH\000\022L\n" + + "\020add_split_points\030\035 \001(\01320.goog" + + "le.spanner.executor.v1.AddSplitPointsActionH\000B\010\n" + + "\006action\"\245\001\n" + + "\036CreateUserInstanceConfigAction\022\026\n" + + "\016user_config_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\026\n" + + "\016base_config_id\030\003 \001(\t\022?\n" + + "\010replicas\030\004" + + " \003(\0132-.google.spanner.admin.instance.v1.ReplicaInfo\"\377\001\n" + + "\036UpdateUserInstanceConfigAction\022\026\n" + + "\016user_config_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\031\n" + + "\014display_name\030\003 \001(\tH\000\210\001\001\022V\n" + + "\006labels\030\004 \003(\0132F.google.spann" + + "er.executor.v1.UpdateUserInstanceConfigAction.LabelsEntry\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001B\017\n\r" + + "_display_name\"N\n" + + "\034GetCloudInstanceConfigAction\022\032\n" + + "\022instance_config_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\"L\n" + + "\036DeleteUserInstanceConfigAction\022\026\n" + + "\016user_config_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\"\202\001\n" + + "\036ListCloudInstanceConfigsAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\026\n" + + "\tpage_size\030\002 \001(\005H\000\210\001\001\022\027\n\n" + + "page_token\030\003 \001(\tH\001\210\001\001B\014\n\n" + + "_page_sizeB\r\n" + + "\013_page_token\"\360\003\n" + + "\031CreateCloudInstanceAction\022\023\n" + + "\013instance_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\032\n" + + "\022instance_config_id\030\003 \001(\t\022\027\n\n" + + "node_count\030\004 \001(\005H\000\210\001\001\022\035\n" + + "\020processing_units\030\006 \001(\005H\001\210\001\001\022T\n" + + "\022autoscaling_config\030\007 \001(\01323.go" + + "ogle.spanner.admin.instance.v1.AutoscalingConfigH\002\210\001\001\022Q\n" + + "\006labels\030\005 \003(\0132A.google.s" + + "panner.executor.v1.CreateCloudInstanceAction.LabelsEntry\022C\n" + + "\007edition\030\010 \001(\01622.goog" + + "le.spanner.admin.instance.v1.Instance.Edition\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001B\r\n" + + "\013_node_countB\023\n" + + "\021_processing_unitsB\025\n" + + "\023_autoscaling_config\"\200\004\n" + + "\031UpdateCloudInstanceAction\022\023\n" + + "\013instance_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\031\n" + + "\014display_name\030\003 \001(\tH\000\210\001\001\022\027\n\n" + + "node_count\030\004 \001(\005H\001\210\001\001\022\035\n" + + "\020processing_units\030\005 \001(\005H\002\210\001\001\022T\n" + + "\022autoscaling_config\030\007" + + " \001(\01323.google.spanner.admin.instance.v1.AutoscalingConfigH\003\210\001\001\022Q\n" + + "\006labels\030\006" + + " \003(\0132A.google.spanner.executor.v1.UpdateCloudInstanceAction.LabelsEntry\022C\n" + + "\007edition\030\010" + + " \001(\01622.google.spanner.admin.instance.v1.Instance.Edition\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001B\017\n\r" + + "_display_nameB\r\n" + + "\013_node_countB\023\n" + + "\021_processing_unitsB\025\n" + + "\023_autoscaling_config\"D\n" + + "\031DeleteCloudInstanceAction\022\023\n" + + "\013instance_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\"\227\002\n" + + "\031CreateCloudDatabaseAction\022\023\n" + + "\013instance_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\023\n" + + "\013database_id\030\003 \001(\t\022\025\n\r" + + "sdl_statement\030\004 \003(\t\022M\n" + + "\021encryption_config\030\005 \001(\01322" + + ".google.spanner.admin.database.v1.EncryptionConfig\022\024\n" + + "\007dialect\030\006 \001(\tH\000\210\001\001\022\036\n" + + "\021proto_descriptors\030\007 \001(\014H\001\210\001\001B\n\n" + + "\010_dialectB\024\n" + + "\022_proto_descriptors\"\277\001\n" + + "\034UpdateCloudDatabaseDdlAction\022\023\n" + + "\013instance_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\023\n" + + "\013database_id\030\003 \001(\t\022\025\n\r" + + "sdl_statement\030\004 \003(\t\022\024\n" + + "\014operation_id\030\005 \001(\t\022\036\n" + + "\021proto_descriptors\030\006 \001(\014H\000\210\001\001B\024\n" + + "\022_proto_descriptors\"{\n" + + "\031UpdateCloudDatabaseAction\022\023\n" + + "\013instance_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\025\n\r" + + "database_name\030\003 \001(\t\022\036\n" + + "\026enable_drop_protection\030\004 \001(\010\"W\n" + + "\027DropCloudDatabaseAction\022\023\n" + + "\013instance_id\030\001 \001(\t\022\022\n\n" + + "project_id\030\002 \001(\t\022\023\n" + + "\013database_id\030\003 \001(\t\"h\n" + + "\037ChangeQuorumCloudDatabaseAction\022\031\n" + + "\014database_uri\030\001 \001(\tH\000\210\001\001\022\031\n" + + "\021serving_locations\030\002 \003(\tB\017\n\r" + + "_database_uri\"\204\002\n" + + "\022AdaptMessageAction\022\024\n" + + "\014database_uri\030\001 \001(\t\022\020\n" + + "\010protocol\030\002 \001(\t\022\017\n" + + "\007payload\030\003 \001(\014\022T\n" + + "\013attachments\030\004 \003(\0132?.goog" + + "le.spanner.executor.v1.AdaptMessageAction.AttachmentsEntry\022\r\n" + + "\005query\030\005 \001(\t\022\034\n" + + "\024prepare_then_execute\030\006 \001(\010\0322\n" + + "\020AttachmentsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"j\n" + + "\030ListCloudDatabasesAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\021\n" + + "\tpage_size\030\003 \001(\005\022\022\n\n" + + "page_token\030\004 \001(\t\"\234\001\n" + + "\030ListCloudInstancesAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\006filter\030\002 \001(\tH\000\210\001\001\022\026\n" + + "\tpage_size\030\003 \001(\005H\001\210\001\001\022\027\n" + + "\n" + + "page_token\030\004 \001(\tH\002\210\001\001B\t\n" + + "\007_filterB\014\n\n" + + "_page_sizeB\r\n" + + "\013_page_token\"A\n" + + "\026GetCloudInstanceAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\"\203\001\n" + + "!ListCloudDatabaseOperationsAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \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\"\341\001\n" + + "\032RestoreCloudDatabaseAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\032\n" + + "\022backup_instance_id\030\002 \001(\t\022\021\n" + + "\tbackup_id\030\003 \001(\t\022\034\n" + + "\024database_instance_id\030\004 \001(\t\022\023\n" + + "\013database_id\030\005 \001(\t\022M\n" + + "\021encryption_config\030\007 \001(\0132" + + "2.google.spanner.admin.database.v1.EncryptionConfig\"V\n" + + "\026GetCloudDatabaseAction\022\022\n" + + "\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\023\n" + + "\013database_id\030\003 \001(\t\"\267\002\n" + + "\027CreateCloudBackupAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\021\n" + + "\tbackup_id\030\003 \001(\t\022\023\n" + + "\013database_id\030\004 \001(\t\0224\n" + + "\013expire_time\030\005 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\0225\n" + + "\014version_time\030\006" + + " \001(\0132\032.google.protobuf.TimestampH\000\210\001\001\022M\n" + + "\021encryption_config\030\007" + + " \001(\01322.google.spanner.admin.database.v1.EncryptionConfigB\017\n\r" + + "_version_time\"\240\001\n" + + "\025CopyCloudBackupAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\021\n" + + "\tbackup_id\030\003 \001(\t\022\025\n\r" + + "source_backup\030\004 \001(\t\0224\n" + + "\013expire_time\030\005 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\"R\n" + + "\024GetCloudBackupAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\021\n" + + "\tbackup_id\030\003 \001(\t\"\213\001\n" + + "\027UpdateCloudBackupAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\021\n" + + "\tbackup_id\030\003 \001(\t\0224\n" + + "\013expire_time\030\004 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\"U\n" + + "\027DeleteCloudBackupAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\021\n" + + "\tbackup_id\030\003 \001(\t\"x\n" + + "\026ListCloudBackupsAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \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\"\201\001\n" + + "\037ListCloudBackupOperationsAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \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\"\'\n" + + "\022GetOperationAction\022\021\n" + + "\toperation\030\001 \001(\t\"I\n" + + "\027QueryCancellationAction\022\030\n" + + "\020long_running_sql\030\001 \001(\t\022\024\n" + + "\014cancel_query\030\002 \001(\t\"*\n" + + "\025CancelOperationAction\022\021\n" + + "\toperation\030\001 \001(\t\"\231\001\n" + + "\024AddSplitPointsAction\022\022\n\n" + + "project_id\030\001 \001(\t\022\023\n" + + "\013instance_id\030\002 \001(\t\022\023\n" + + "\013database_id\030\003 \001(\t\022C\n" + + "\014split_points\030\004" + + " \003(\0132-.google.spanner.admin.database.v1.SplitPoints\"\210\001\n" + + "\033StartBatchTransactionAction\0224\n" + + "\016batch_txn_time\030\001 \001(\0132\032.google.protobuf.TimestampH\000\022\r\n" + + "\003tid\030\002 \001(\014H\000\022\033\n" + + "\023cloud_database_role\030\003 \001(\tB\007\n" + + "\005param\".\n" + + "\033CloseBatchTransactionAction\022\017\n" + + "\007cleanup\030\001 \001(\010\"\227\002\n" + + "!GenerateDbPartitionsForReadAction\0224\n" + + "\004read\030\001 \001(\0132&.google.spanner.executor.v1.ReadAction\0228\n" + + "\005table\030\002 \003(\0132).google.spanner.executor.v1.TableMetadata\022(\n" + + "\033desired_bytes_per_partition\030\003 \001(\003H\000\210\001\001\022 \n" + + "\023max_partition_count\030\004 \001(\003H\001\210\001\001B\036\n" + + "\034_desired_bytes_per_partitionB\026\n" + + "\024_max_partition_count\"\246\001\n" + + "\"GenerateDbPartitionsForQueryAction\0226\n" + + "\005query\030\001 \001(\0132\'.google.spanner.executor.v1.QueryAction\022(\n" + + "\033desired_bytes_per_partition\030\002 \001(\003H\000\210\001\001B\036\n" + + "\034_desired_bytes_per_partition\"x\n" + + "\016BatchPartition\022\021\n" + + "\tpartition\030\001 \001(\014\022\027\n" + + "\017partition_token\030\002 \001(\014\022\022\n" + + "\005table\030\003 \001(\tH\000\210\001\001\022\022\n" + + "\005index\030\004 \001(\tH\001\210\001\001B\010\n" + + "\006_tableB\010\n" + + "\006_index\"W\n" + + "\026ExecutePartitionAction\022=\n" + + "\tpartition\030\001 \001(\0132*.google.spanner.executor.v1.BatchPartition\"\216\003\n" + + "\030ExecuteChangeStreamQuery\022\014\n" + + "\004name\030\001 \001(\t\022.\n\n" + + "start_time\030\002 \001(\0132\032.google.protobuf.Timestamp\0221\n" + + "\010end_time\030\003" + + " \001(\0132\032.google.protobuf.TimestampH\000\210\001\001\022\034\n" + + "\017partition_token\030\004 \001(\tH\001\210\001\001\022\024\n" + + "\014read_options\030\005 \003(\t\022#\n" + + "\026heartbeat_milliseconds\030\006 \001(\005H\002\210\001\001\022\035\n" + + "\020deadline_seconds\030\007 \001(\003H\003\210\001\001\022 \n" + + "\023cloud_database_role\030\010 \001(\tH\004\210\001\001B\013\n" + + "\t_end_timeB\022\n" + + "\020_partition_tokenB\031\n" + + "\027_heartbeat_millisecondsB\023\n" + + "\021_deadline_secondsB\026\n" + + "\024_cloud_database_role\"\200\006\n" + + "\024SpannerActionOutcome\022\'\n" + + "\006status\030\001 \001(\0132\022.google.rpc.StatusH\000\210\001\001\0224\n" + + "\013commit_time\030\002" + + " \001(\0132\032.google.protobuf.TimestampH\001\210\001\001\022@\n" + + "\013read_result\030\003" + + " \001(\0132&.google.spanner.executor.v1.ReadResultH\002\210\001\001\022B\n" + + "\014query_result\030\004 \001(\0132\'." + + "google.spanner.executor.v1.QueryResultH\003\210\001\001\022\"\n" + + "\025transaction_restarted\030\005 \001(\010H\004\210\001\001\022\031\n" + + "\014batch_txn_id\030\006 \001(\014H\005\210\001\001\022@\n" + + "\014db_partition\030\007 \003(\0132*.google.spanner.executor.v1.BatchPartition\022B\n" + + "\014admin_result\030\010 \001(\0132\'.goo" + + "gle.spanner.executor.v1.AdminResultH\006\210\001\001\022\031\n" + + "\021dml_rows_modified\030\t \003(\003\022M\n" + + "\025change_stream_records\030\n" + + " \003(\0132..google.spanner.executor.v1.ChangeStreamRecord\0222\n" + + "%snapshot_isolation_txn_read_timestamp\030\013 \001(\003H\007\210\001\001B\t\n" + + "\007_statusB\016\n" + + "\014_commit_timeB\016\n" + + "\014_read_resultB\017\n\r" + + "_query_resultB\030\n" + + "\026_transaction_restartedB\017\n\r" + + "_batch_txn_idB\017\n\r" + + "_admin_resultB(\n" + + "&_snapshot_isolation_txn_read_timestamp\"\231\003\n" + + "\013AdminResult\022H\n" + + "\017backup_response\030\001 \001(" + + "\0132/.google.spanner.executor.v1.CloudBackupResponse\022I\n" + + "\022operation_response\030\002 \001(\0132-" + + ".google.spanner.executor.v1.OperationResponse\022L\n" + + "\021database_response\030\003 \001(\01321.googl", + "e.spanner.executor.v1.CloudDatabaseResponse\022L\n" + + "\021instance_response\030\004 \001(\01321.google." + + "spanner.executor.v1.CloudInstanceResponse\022Y\n" + + "\030instance_config_response\030\005 \001(\01327.go" + + "ogle.spanner.executor.v1.CloudInstanceConfigResponse\"\353\001\n" + + "\023CloudBackupResponse\022@\n" + + "\016listed_backups\030\001 \003(\0132(.google.spanner.admin.database.v1.Backup\022?\n" + + "\030listed_backup_operations\030\002" + + " \003(\0132\035.google.longrunning.Operation\022\027\n" + + "\017next_page_token\030\003 \001(\t\0228\n" + + "\006backup\030\004 \001(\0132(.google.spanner.admin.database.v1.Backup\"\230\001\n" + + "\021OperationResponse\0228\n" + + "\021listed_operations\030\001 \003(\0132\035.google.longrunning.Operation\022\027\n" + + "\017next_page_token\030\002 \001(\t\0220\n" + + "\toperation\030\003 \001(\0132\035.google.longrunning.Operation\"\264\001\n" + + "\025CloudInstanceResponse\022D\n" + + "\020listed_instances\030\001" + + " \003(\0132*.google.spanner.admin.instance.v1.Instance\022\027\n" + + "\017next_page_token\030\002 \001(\t\022<\n" + + "\010instance\030\003 \001(\0132*.google.spanner.admin.instance.v1.Instance\"\324\001\n" + + "\033CloudInstanceConfigResponse\022Q\n" + + "\027listed_instance_configs\030\001" + + " \003(\01320.google.spanner.admin.instance.v1.InstanceConfig\022\027\n" + + "\017next_page_token\030\002 \001(\t\022I\n" + + "\017instance_config\030\003 \001(\01320.goog" + + "le.spanner.admin.instance.v1.InstanceConfig\"\367\001\n" + + "\025CloudDatabaseResponse\022D\n" + + "\020listed_databases\030\001" + + " \003(\0132*.google.spanner.admin.database.v1.Database\022A\n" + + "\032listed_database_operations\030\002" + + " \003(\0132\035.google.longrunning.Operation\022\027\n" + + "\017next_page_token\030\003 \001(\t\022<\n" + + "\010database\030\004" + + " \001(\0132*.google.spanner.admin.database.v1.Database\"\336\001\n\n" + + "ReadResult\022\r\n" + + "\005table\030\001 \001(\t\022\022\n" + + "\005index\030\002 \001(\tH\000\210\001\001\022\032\n\r" + + "request_index\030\003 \001(\005H\001\210\001\001\0222\n" + + "\003row\030\004 \003(\0132%.google.spanner.executor.v1.ValueList\0224\n" + + "\010row_type\030\005" + + " \001(\0132\035.google.spanner.v1.StructTypeH\002\210\001\001B\010\n" + + "\006_indexB\020\n" + + "\016_request_indexB\013\n" + + "\t_row_type\"\204\001\n" + + "\013QueryResult\0222\n" + + "\003row\030\001 \003(\0132%.google.spanner.executor.v1.ValueList\0224\n" + + "\010row_type\030\002" + + " \001(\0132\035.google.spanner.v1.StructTypeH\000\210\001\001B\013\n" + + "\t_row_type\"\363\001\n" + + "\022ChangeStreamRecord\022C\n" + + "\013data_change\030\001" + + " \001(\0132,.google.spanner.executor.v1.DataChangeRecordH\000\022L\n" + + "\017child_partition\030\002" + + " \001(\01321.google.spanner.executor.v1.ChildPartitionsRecordH\000\022@\n" + + "\theartbeat\030\003 \001(\0132+.google.spanner.executor.v1.HeartbeatRecordH\000B\010\n" + + "\006record\"\330\004\n" + + "\020DataChangeRecord\022/\n" + + "\013commit_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022\027\n" + + "\017record_sequence\030\002 \001(\t\022\026\n" + + "\016transaction_id\030\003 \001(\t\022\026\n" + + "\016is_last_record\030\004 \001(\010\022\r\n" + + "\005table\030\005 \001(\t\022M\n" + + "\014column_types\030\006 \003(\0132" + + "7.google.spanner.executor.v1.DataChangeRecord.ColumnType\022>\n" + + "\004mods\030\007 \003(\01320.google.spanner.executor.v1.DataChangeRecord.Mod\022\020\n" + + "\010mod_type\030\010 \001(\t\022\032\n" + + "\022value_capture_type\030\t \001(\t\022\024\n" + + "\014record_count\030\n" + + " \001(\003\022\027\n" + + "\017partition_count\030\013 \001(\003\022\027\n" + + "\017transaction_tag\030\014 \001(\t\022\035\n" + + "\025is_system_transaction\030\r" + + " \001(\010\032Z\n\n" + + "ColumnType\022\014\n" + + "\004name\030\001 \001(\t\022\014\n" + + "\004type\030\002 \001(\t\022\026\n" + + "\016is_primary_key\030\003 \001(\010\022\030\n" + + "\020ordinal_position\030\004 \001(\003\032;\n" + + "\003Mod\022\014\n" + + "\004keys\030\001 \001(\t\022\022\n\n" + + "new_values\030\002 \001(\t\022\022\n\n" + + "old_values\030\003 \001(\t\"\376\001\n" + + "\025ChildPartitionsRecord\022.\n\n" + + "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022\027\n" + + "\017record_sequence\030\002 \001(\t\022Z\n" + + "\020child_partitions\030\003 \003(\0132@.google.spa" + + "nner.executor.v1.ChildPartitionsRecord.ChildPartition\032@\n" + + "\016ChildPartition\022\r\n" + + "\005token\030\001 \001(\t\022\037\n" + + "\027parent_partition_tokens\030\002 \003(\t\"E\n" + + "\017HeartbeatRecord\0222\n" + + "\016heartbeat_time\030\001 \001(\0132\032.google.protobuf.Timestamp\"^\n" + + "\016SpannerOptions\022L\n" + + "\024session_pool_options\030\001 \001(\0132." + + ".google.spanner.executor.v1.SessionPoolOptions\"-\n" + + "\022SessionPoolOptions\022\027\n" + + "\017use_multiplexed\030\001 \001(\0102\314\001\n" + + "\024SpannerExecutorProxy\022\211\001\n" + + "\022ExecuteActionAsync\0225.google.spanner.e" + + "xecutor.v1.SpannerAsyncActionRequest\0326.google.spanner.executor.v1.SpannerAsyncAc" + + "tionResponse\"\000(\0010\001\032(\312A%spanner-cloud-executor.googleapis.comBx\n" + + "\036com.google.spanner.executor.v1B\022CloudExecutorProtoP\001Z@cl" + + "oud.google.com/go/spanner/executor/apiv1/executorpb;executorpbb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -842,25 +1035,25 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.spanner.v1.TypeProto.getDescriptor(), }); internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_descriptor, new java.lang.String[] { "ActionId", "Action", }); internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_descriptor, new java.lang.String[] { "ActionId", "Outcome", }); internal_static_google_spanner_executor_v1_SpannerAction_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_executor_v1_SpannerAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_SpannerAction_descriptor, new java.lang.String[] { "DatabasePath", @@ -882,52 +1075,52 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ExecutePartition", "ExecuteChangeStreamQuery", "QueryCancellation", + "AdaptMessage", "Action", }); internal_static_google_spanner_executor_v1_ReadAction_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageType(3); internal_static_google_spanner_executor_v1_ReadAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ReadAction_descriptor, new java.lang.String[] { "Table", "Index", "Column", "Keys", "Limit", }); internal_static_google_spanner_executor_v1_QueryAction_descriptor = - getDescriptor().getMessageTypes().get(4); + getDescriptor().getMessageType(4); internal_static_google_spanner_executor_v1_QueryAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_QueryAction_descriptor, new java.lang.String[] { "Sql", "Params", }); internal_static_google_spanner_executor_v1_QueryAction_Parameter_descriptor = - internal_static_google_spanner_executor_v1_QueryAction_descriptor.getNestedTypes().get(0); + internal_static_google_spanner_executor_v1_QueryAction_descriptor.getNestedType(0); internal_static_google_spanner_executor_v1_QueryAction_Parameter_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_QueryAction_Parameter_descriptor, new java.lang.String[] { "Name", "Type", "Value", }); internal_static_google_spanner_executor_v1_DmlAction_descriptor = - getDescriptor().getMessageTypes().get(5); + getDescriptor().getMessageType(5); internal_static_google_spanner_executor_v1_DmlAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DmlAction_descriptor, new java.lang.String[] { - "Update", "AutocommitIfSupported", + "Update", "AutocommitIfSupported", "LastStatement", }); internal_static_google_spanner_executor_v1_BatchDmlAction_descriptor = - getDescriptor().getMessageTypes().get(6); + getDescriptor().getMessageType(6); internal_static_google_spanner_executor_v1_BatchDmlAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_BatchDmlAction_descriptor, new java.lang.String[] { - "Updates", + "Updates", "LastStatements", }); - internal_static_google_spanner_executor_v1_Value_descriptor = - getDescriptor().getMessageTypes().get(7); + internal_static_google_spanner_executor_v1_Value_descriptor = getDescriptor().getMessageType(7); internal_static_google_spanner_executor_v1_Value_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_Value_descriptor, new java.lang.String[] { "IsNull", @@ -945,105 +1138,98 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ValueType", }); internal_static_google_spanner_executor_v1_KeyRange_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageType(8); internal_static_google_spanner_executor_v1_KeyRange_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_KeyRange_descriptor, new java.lang.String[] { "Start", "Limit", "Type", }); internal_static_google_spanner_executor_v1_KeySet_descriptor = - getDescriptor().getMessageTypes().get(9); + getDescriptor().getMessageType(9); internal_static_google_spanner_executor_v1_KeySet_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_KeySet_descriptor, new java.lang.String[] { "Point", "Range", "All", }); internal_static_google_spanner_executor_v1_ValueList_descriptor = - getDescriptor().getMessageTypes().get(10); + getDescriptor().getMessageType(10); internal_static_google_spanner_executor_v1_ValueList_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ValueList_descriptor, new java.lang.String[] { "Value", }); internal_static_google_spanner_executor_v1_MutationAction_descriptor = - getDescriptor().getMessageTypes().get(11); + getDescriptor().getMessageType(11); internal_static_google_spanner_executor_v1_MutationAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_MutationAction_descriptor, new java.lang.String[] { "Mod", }); internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_descriptor = - internal_static_google_spanner_executor_v1_MutationAction_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_executor_v1_MutationAction_descriptor.getNestedType(0); internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_descriptor, new java.lang.String[] { "Column", "Type", "Values", }); internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_descriptor = - internal_static_google_spanner_executor_v1_MutationAction_descriptor - .getNestedTypes() - .get(1); + internal_static_google_spanner_executor_v1_MutationAction_descriptor.getNestedType(1); internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_descriptor, new java.lang.String[] { "Column", "Type", "Values", }); internal_static_google_spanner_executor_v1_MutationAction_Mod_descriptor = - internal_static_google_spanner_executor_v1_MutationAction_descriptor - .getNestedTypes() - .get(2); + internal_static_google_spanner_executor_v1_MutationAction_descriptor.getNestedType(2); internal_static_google_spanner_executor_v1_MutationAction_Mod_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_MutationAction_Mod_descriptor, new java.lang.String[] { "Table", "Insert", "Update", "InsertOrUpdate", "Replace", "DeleteKeys", }); internal_static_google_spanner_executor_v1_WriteMutationsAction_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageType(12); internal_static_google_spanner_executor_v1_WriteMutationsAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_WriteMutationsAction_descriptor, new java.lang.String[] { "Mutation", }); internal_static_google_spanner_executor_v1_PartitionedUpdateAction_descriptor = - getDescriptor().getMessageTypes().get(13); + getDescriptor().getMessageType(13); internal_static_google_spanner_executor_v1_PartitionedUpdateAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_PartitionedUpdateAction_descriptor, new java.lang.String[] { "Options", "Update", }); internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_descriptor = - internal_static_google_spanner_executor_v1_PartitionedUpdateAction_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_executor_v1_PartitionedUpdateAction_descriptor.getNestedType( + 0); internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_descriptor, new java.lang.String[] { "RpcPriority", "Tag", }); internal_static_google_spanner_executor_v1_StartTransactionAction_descriptor = - getDescriptor().getMessageTypes().get(14); + getDescriptor().getMessageType(14); internal_static_google_spanner_executor_v1_StartTransactionAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_StartTransactionAction_descriptor, new java.lang.String[] { "Concurrency", "Table", "TransactionSeed", "ExecutionOptions", }); internal_static_google_spanner_executor_v1_Concurrency_descriptor = - getDescriptor().getMessageTypes().get(15); + getDescriptor().getMessageType(15); internal_static_google_spanner_executor_v1_Concurrency_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_Concurrency_descriptor, new java.lang.String[] { "StalenessSeconds", @@ -1058,41 +1244,46 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ConcurrencyMode", }); internal_static_google_spanner_executor_v1_TableMetadata_descriptor = - getDescriptor().getMessageTypes().get(16); + getDescriptor().getMessageType(16); internal_static_google_spanner_executor_v1_TableMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_TableMetadata_descriptor, new java.lang.String[] { "Name", "Column", "KeyColumn", }); internal_static_google_spanner_executor_v1_ColumnMetadata_descriptor = - getDescriptor().getMessageTypes().get(17); + getDescriptor().getMessageType(17); internal_static_google_spanner_executor_v1_ColumnMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ColumnMetadata_descriptor, new java.lang.String[] { "Name", "Type", }); internal_static_google_spanner_executor_v1_TransactionExecutionOptions_descriptor = - getDescriptor().getMessageTypes().get(18); + getDescriptor().getMessageType(18); internal_static_google_spanner_executor_v1_TransactionExecutionOptions_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_TransactionExecutionOptions_descriptor, new java.lang.String[] { "Optimistic", + "ExcludeFromChangeStreams", + "SerializableOptimistic", + "SnapshotIsolationOptimistic", + "SnapshotIsolationPessimistic", + "ExcludeTxnFromChangeStreams", }); internal_static_google_spanner_executor_v1_FinishTransactionAction_descriptor = - getDescriptor().getMessageTypes().get(19); + getDescriptor().getMessageType(19); internal_static_google_spanner_executor_v1_FinishTransactionAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_FinishTransactionAction_descriptor, new java.lang.String[] { "Mode", }); internal_static_google_spanner_executor_v1_AdminAction_descriptor = - getDescriptor().getMessageTypes().get(20); + getDescriptor().getMessageType(20); internal_static_google_spanner_executor_v1_AdminAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_AdminAction_descriptor, new java.lang.String[] { "CreateUserInstanceConfig", @@ -1123,62 +1314,62 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "GetOperation", "CancelOperation", "ChangeQuorumCloudDatabase", + "AddSplitPoints", "Action", }); internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_descriptor = - getDescriptor().getMessageTypes().get(21); + getDescriptor().getMessageType(21); internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_descriptor, new java.lang.String[] { "UserConfigId", "ProjectId", "BaseConfigId", "Replicas", }); internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_descriptor = - getDescriptor().getMessageTypes().get(22); + getDescriptor().getMessageType(22); internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_descriptor, new java.lang.String[] { "UserConfigId", "ProjectId", "DisplayName", "Labels", }); internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_LabelsEntry_descriptor = internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_descriptor - .getNestedTypes() - .get(0); + .getNestedType(0); internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_LabelsEntry_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_LabelsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_descriptor = - getDescriptor().getMessageTypes().get(23); + getDescriptor().getMessageType(23); internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_descriptor, new java.lang.String[] { "InstanceConfigId", "ProjectId", }); internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_descriptor = - getDescriptor().getMessageTypes().get(24); + getDescriptor().getMessageType(24); internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_descriptor, new java.lang.String[] { "UserConfigId", "ProjectId", }); internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_descriptor = - getDescriptor().getMessageTypes().get(25); + getDescriptor().getMessageType(25); internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_descriptor, new java.lang.String[] { "ProjectId", "PageSize", "PageToken", }); internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_descriptor = - getDescriptor().getMessageTypes().get(26); + getDescriptor().getMessageType(26); internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_descriptor, new java.lang.String[] { "InstanceId", @@ -1188,21 +1379,21 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ProcessingUnits", "AutoscalingConfig", "Labels", + "Edition", }); internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_LabelsEntry_descriptor = internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_descriptor - .getNestedTypes() - .get(0); + .getNestedType(0); internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_LabelsEntry_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_LabelsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_descriptor = - getDescriptor().getMessageTypes().get(27); + getDescriptor().getMessageType(27); internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_descriptor, new java.lang.String[] { "InstanceId", @@ -1212,29 +1403,29 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ProcessingUnits", "AutoscalingConfig", "Labels", + "Edition", }); internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_LabelsEntry_descriptor = internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_descriptor - .getNestedTypes() - .get(0); + .getNestedType(0); internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_LabelsEntry_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_LabelsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_descriptor = - getDescriptor().getMessageTypes().get(28); + getDescriptor().getMessageType(28); internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_descriptor, new java.lang.String[] { "InstanceId", "ProjectId", }); internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_descriptor = - getDescriptor().getMessageTypes().get(29); + getDescriptor().getMessageType(29); internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_descriptor, new java.lang.String[] { "InstanceId", @@ -1246,9 +1437,9 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ProtoDescriptors", }); internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_descriptor = - getDescriptor().getMessageTypes().get(30); + getDescriptor().getMessageType(30); internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_descriptor, new java.lang.String[] { "InstanceId", @@ -1259,65 +1450,81 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ProtoDescriptors", }); internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_descriptor = - getDescriptor().getMessageTypes().get(31); + getDescriptor().getMessageType(31); internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_descriptor, new java.lang.String[] { "InstanceId", "ProjectId", "DatabaseName", "EnableDropProtection", }); internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_descriptor = - getDescriptor().getMessageTypes().get(32); + getDescriptor().getMessageType(32); internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_descriptor, new java.lang.String[] { "InstanceId", "ProjectId", "DatabaseId", }); internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_descriptor = - getDescriptor().getMessageTypes().get(33); + getDescriptor().getMessageType(33); internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ChangeQuorumCloudDatabaseAction_descriptor, new java.lang.String[] { "DatabaseUri", "ServingLocations", }); + internal_static_google_spanner_executor_v1_AdaptMessageAction_descriptor = + getDescriptor().getMessageType(34); + internal_static_google_spanner_executor_v1_AdaptMessageAction_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_executor_v1_AdaptMessageAction_descriptor, + new java.lang.String[] { + "DatabaseUri", "Protocol", "Payload", "Attachments", "Query", "PrepareThenExecute", + }); + internal_static_google_spanner_executor_v1_AdaptMessageAction_AttachmentsEntry_descriptor = + internal_static_google_spanner_executor_v1_AdaptMessageAction_descriptor.getNestedType(0); + internal_static_google_spanner_executor_v1_AdaptMessageAction_AttachmentsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_executor_v1_AdaptMessageAction_AttachmentsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_descriptor = - getDescriptor().getMessageTypes().get(34); + getDescriptor().getMessageType(35); internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "PageSize", "PageToken", }); internal_static_google_spanner_executor_v1_ListCloudInstancesAction_descriptor = - getDescriptor().getMessageTypes().get(35); + getDescriptor().getMessageType(36); internal_static_google_spanner_executor_v1_ListCloudInstancesAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ListCloudInstancesAction_descriptor, new java.lang.String[] { "ProjectId", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_executor_v1_GetCloudInstanceAction_descriptor = - getDescriptor().getMessageTypes().get(36); + getDescriptor().getMessageType(37); internal_static_google_spanner_executor_v1_GetCloudInstanceAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_GetCloudInstanceAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", }); internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_descriptor = - getDescriptor().getMessageTypes().get(37); + getDescriptor().getMessageType(38); internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_descriptor = - getDescriptor().getMessageTypes().get(38); + getDescriptor().getMessageType(39); internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_descriptor, new java.lang.String[] { "ProjectId", @@ -1328,17 +1535,17 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "EncryptionConfig", }); internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_descriptor = - getDescriptor().getMessageTypes().get(39); + getDescriptor().getMessageType(40); internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "DatabaseId", }); internal_static_google_spanner_executor_v1_CreateCloudBackupAction_descriptor = - getDescriptor().getMessageTypes().get(40); + getDescriptor().getMessageType(41); internal_static_google_spanner_executor_v1_CreateCloudBackupAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CreateCloudBackupAction_descriptor, new java.lang.String[] { "ProjectId", @@ -1350,129 +1557,137 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "EncryptionConfig", }); internal_static_google_spanner_executor_v1_CopyCloudBackupAction_descriptor = - getDescriptor().getMessageTypes().get(41); + getDescriptor().getMessageType(42); internal_static_google_spanner_executor_v1_CopyCloudBackupAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CopyCloudBackupAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "BackupId", "SourceBackup", "ExpireTime", }); internal_static_google_spanner_executor_v1_GetCloudBackupAction_descriptor = - getDescriptor().getMessageTypes().get(42); + getDescriptor().getMessageType(43); internal_static_google_spanner_executor_v1_GetCloudBackupAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_GetCloudBackupAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "BackupId", }); internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_descriptor = - getDescriptor().getMessageTypes().get(43); + getDescriptor().getMessageType(44); internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "BackupId", "ExpireTime", }); internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_descriptor = - getDescriptor().getMessageTypes().get(44); + getDescriptor().getMessageType(45); internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "BackupId", }); internal_static_google_spanner_executor_v1_ListCloudBackupsAction_descriptor = - getDescriptor().getMessageTypes().get(45); + getDescriptor().getMessageType(46); internal_static_google_spanner_executor_v1_ListCloudBackupsAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ListCloudBackupsAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_descriptor = - getDescriptor().getMessageTypes().get(46); + getDescriptor().getMessageType(47); internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_descriptor, new java.lang.String[] { "ProjectId", "InstanceId", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_executor_v1_GetOperationAction_descriptor = - getDescriptor().getMessageTypes().get(47); + getDescriptor().getMessageType(48); internal_static_google_spanner_executor_v1_GetOperationAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_GetOperationAction_descriptor, new java.lang.String[] { "Operation", }); internal_static_google_spanner_executor_v1_QueryCancellationAction_descriptor = - getDescriptor().getMessageTypes().get(48); + getDescriptor().getMessageType(49); internal_static_google_spanner_executor_v1_QueryCancellationAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_QueryCancellationAction_descriptor, new java.lang.String[] { "LongRunningSql", "CancelQuery", }); internal_static_google_spanner_executor_v1_CancelOperationAction_descriptor = - getDescriptor().getMessageTypes().get(49); + getDescriptor().getMessageType(50); internal_static_google_spanner_executor_v1_CancelOperationAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CancelOperationAction_descriptor, new java.lang.String[] { "Operation", }); + internal_static_google_spanner_executor_v1_AddSplitPointsAction_descriptor = + getDescriptor().getMessageType(51); + internal_static_google_spanner_executor_v1_AddSplitPointsAction_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_executor_v1_AddSplitPointsAction_descriptor, + new java.lang.String[] { + "ProjectId", "InstanceId", "DatabaseId", "SplitPoints", + }); internal_static_google_spanner_executor_v1_StartBatchTransactionAction_descriptor = - getDescriptor().getMessageTypes().get(50); + getDescriptor().getMessageType(52); internal_static_google_spanner_executor_v1_StartBatchTransactionAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_StartBatchTransactionAction_descriptor, new java.lang.String[] { "BatchTxnTime", "Tid", "CloudDatabaseRole", "Param", }); internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_descriptor = - getDescriptor().getMessageTypes().get(51); + getDescriptor().getMessageType(53); internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CloseBatchTransactionAction_descriptor, new java.lang.String[] { "Cleanup", }); internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_descriptor = - getDescriptor().getMessageTypes().get(52); + getDescriptor().getMessageType(54); internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_descriptor, new java.lang.String[] { "Read", "Table", "DesiredBytesPerPartition", "MaxPartitionCount", }); internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_descriptor = - getDescriptor().getMessageTypes().get(53); + getDescriptor().getMessageType(55); internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_descriptor, new java.lang.String[] { "Query", "DesiredBytesPerPartition", }); internal_static_google_spanner_executor_v1_BatchPartition_descriptor = - getDescriptor().getMessageTypes().get(54); + getDescriptor().getMessageType(56); internal_static_google_spanner_executor_v1_BatchPartition_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_BatchPartition_descriptor, new java.lang.String[] { "Partition", "PartitionToken", "Table", "Index", }); internal_static_google_spanner_executor_v1_ExecutePartitionAction_descriptor = - getDescriptor().getMessageTypes().get(55); + getDescriptor().getMessageType(57); internal_static_google_spanner_executor_v1_ExecutePartitionAction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ExecutePartitionAction_descriptor, new java.lang.String[] { "Partition", }); internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_descriptor = - getDescriptor().getMessageTypes().get(56); + getDescriptor().getMessageType(58); internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_descriptor, new java.lang.String[] { "Name", @@ -1485,9 +1700,9 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "CloudDatabaseRole", }); internal_static_google_spanner_executor_v1_SpannerActionOutcome_descriptor = - getDescriptor().getMessageTypes().get(57); + getDescriptor().getMessageType(59); internal_static_google_spanner_executor_v1_SpannerActionOutcome_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_SpannerActionOutcome_descriptor, new java.lang.String[] { "Status", @@ -1500,11 +1715,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "AdminResult", "DmlRowsModified", "ChangeStreamRecords", + "SnapshotIsolationTxnReadTimestamp", }); internal_static_google_spanner_executor_v1_AdminResult_descriptor = - getDescriptor().getMessageTypes().get(58); + getDescriptor().getMessageType(60); internal_static_google_spanner_executor_v1_AdminResult_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_AdminResult_descriptor, new java.lang.String[] { "BackupResponse", @@ -1514,73 +1730,73 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "InstanceConfigResponse", }); internal_static_google_spanner_executor_v1_CloudBackupResponse_descriptor = - getDescriptor().getMessageTypes().get(59); + getDescriptor().getMessageType(61); internal_static_google_spanner_executor_v1_CloudBackupResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CloudBackupResponse_descriptor, new java.lang.String[] { "ListedBackups", "ListedBackupOperations", "NextPageToken", "Backup", }); internal_static_google_spanner_executor_v1_OperationResponse_descriptor = - getDescriptor().getMessageTypes().get(60); + getDescriptor().getMessageType(62); internal_static_google_spanner_executor_v1_OperationResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_OperationResponse_descriptor, new java.lang.String[] { "ListedOperations", "NextPageToken", "Operation", }); internal_static_google_spanner_executor_v1_CloudInstanceResponse_descriptor = - getDescriptor().getMessageTypes().get(61); + getDescriptor().getMessageType(63); internal_static_google_spanner_executor_v1_CloudInstanceResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CloudInstanceResponse_descriptor, new java.lang.String[] { "ListedInstances", "NextPageToken", "Instance", }); internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_descriptor = - getDescriptor().getMessageTypes().get(62); + getDescriptor().getMessageType(64); internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_descriptor, new java.lang.String[] { "ListedInstanceConfigs", "NextPageToken", "InstanceConfig", }); internal_static_google_spanner_executor_v1_CloudDatabaseResponse_descriptor = - getDescriptor().getMessageTypes().get(63); + getDescriptor().getMessageType(65); internal_static_google_spanner_executor_v1_CloudDatabaseResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_CloudDatabaseResponse_descriptor, new java.lang.String[] { "ListedDatabases", "ListedDatabaseOperations", "NextPageToken", "Database", }); internal_static_google_spanner_executor_v1_ReadResult_descriptor = - getDescriptor().getMessageTypes().get(64); + getDescriptor().getMessageType(66); internal_static_google_spanner_executor_v1_ReadResult_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ReadResult_descriptor, new java.lang.String[] { "Table", "Index", "RequestIndex", "Row", "RowType", }); internal_static_google_spanner_executor_v1_QueryResult_descriptor = - getDescriptor().getMessageTypes().get(65); + getDescriptor().getMessageType(67); internal_static_google_spanner_executor_v1_QueryResult_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_QueryResult_descriptor, new java.lang.String[] { "Row", "RowType", }); internal_static_google_spanner_executor_v1_ChangeStreamRecord_descriptor = - getDescriptor().getMessageTypes().get(66); + getDescriptor().getMessageType(68); internal_static_google_spanner_executor_v1_ChangeStreamRecord_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ChangeStreamRecord_descriptor, new java.lang.String[] { "DataChange", "ChildPartition", "Heartbeat", "Record", }); internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor = - getDescriptor().getMessageTypes().get(67); + getDescriptor().getMessageType(69); internal_static_google_spanner_executor_v1_DataChangeRecord_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor, new java.lang.String[] { "CommitTime", @@ -1598,73 +1814,63 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "IsSystemTransaction", }); internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_descriptor = - internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor.getNestedType(0); internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_descriptor, new java.lang.String[] { "Name", "Type", "IsPrimaryKey", "OrdinalPosition", }); internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_descriptor = - internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor - .getNestedTypes() - .get(1); + internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor.getNestedType(1); internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_descriptor, new java.lang.String[] { "Keys", "NewValues", "OldValues", }); internal_static_google_spanner_executor_v1_ChildPartitionsRecord_descriptor = - getDescriptor().getMessageTypes().get(68); + getDescriptor().getMessageType(70); internal_static_google_spanner_executor_v1_ChildPartitionsRecord_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ChildPartitionsRecord_descriptor, new java.lang.String[] { "StartTime", "RecordSequence", "ChildPartitions", }); internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_descriptor = - internal_static_google_spanner_executor_v1_ChildPartitionsRecord_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_executor_v1_ChildPartitionsRecord_descriptor.getNestedType( + 0); internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_ChildPartitionsRecord_ChildPartition_descriptor, new java.lang.String[] { "Token", "ParentPartitionTokens", }); internal_static_google_spanner_executor_v1_HeartbeatRecord_descriptor = - getDescriptor().getMessageTypes().get(69); + getDescriptor().getMessageType(71); internal_static_google_spanner_executor_v1_HeartbeatRecord_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_HeartbeatRecord_descriptor, new java.lang.String[] { "HeartbeatTime", }); internal_static_google_spanner_executor_v1_SpannerOptions_descriptor = - getDescriptor().getMessageTypes().get(70); + getDescriptor().getMessageType(72); internal_static_google_spanner_executor_v1_SpannerOptions_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_SpannerOptions_descriptor, new java.lang.String[] { "SessionPoolOptions", }); internal_static_google_spanner_executor_v1_SessionPoolOptions_descriptor = - getDescriptor().getMessageTypes().get(71); + getDescriptor().getMessageType(73); internal_static_google_spanner_executor_v1_SessionPoolOptions_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_executor_v1_SessionPoolOptions_descriptor, new java.lang.String[] { "UseMultiplexed", }); - com.google.protobuf.ExtensionRegistry registry = - com.google.protobuf.ExtensionRegistry.newInstance(); - registry.add(com.google.api.ClientProto.defaultHost); - registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); - com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( - descriptor, registry); + descriptor.resolveAllFeaturesImmutable(); com.google.api.ClientProto.getDescriptor(); com.google.api.FieldBehaviorProto.getDescriptor(); com.google.longrunning.OperationsProto.getDescriptor(); @@ -1676,6 +1882,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto.getDescriptor(); com.google.spanner.v1.SpannerProto.getDescriptor(); com.google.spanner.v1.TypeProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.ClientProto.defaultHost); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java index 67190d5fb20..9773de30729 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CloudInstanceConfigResponse} */ -public final class CloudInstanceConfigResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CloudInstanceConfigResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CloudInstanceConfigResponse) CloudInstanceConfigResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudInstanceConfigResponse"); + } + // Use CloudInstanceConfigResponse.newBuilder() to construct. - private CloudInstanceConfigResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CloudInstanceConfigResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CloudInstanceConfigResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CloudInstanceConfigResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List listedInstanceConfigs_; + /** * * @@ -86,6 +94,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getListedInstanceConfigsList() { return listedInstanceConfigs_; } + /** * * @@ -101,6 +110,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getListedInstanceConfigsOrBuilderList() { return listedInstanceConfigs_; } + /** * * @@ -115,6 +125,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getListedInstanceConfigsCount() { return listedInstanceConfigs_.size(); } + /** * * @@ -129,6 +140,7 @@ public int getListedInstanceConfigsCount() { public com.google.spanner.admin.instance.v1.InstanceConfig getListedInstanceConfigs(int index) { return listedInstanceConfigs_.get(index); } + /** * * @@ -149,6 +161,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getListedInstanceConf @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -173,6 +186,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -200,6 +214,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public static final int INSTANCE_CONFIG_FIELD_NUMBER = 3; private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; + /** * * @@ -215,6 +230,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -232,6 +248,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { ? com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance() : instanceConfig_; } + /** * * @@ -265,8 +282,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < listedInstanceConfigs_.size(); i++) { output.writeMessage(1, listedInstanceConfigs_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getInstanceConfig()); @@ -285,8 +302,8 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeMessageSize( 1, listedInstanceConfigs_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getInstanceConfig()); @@ -376,38 +393,38 @@ public static com.google.spanner.executor.v1.CloudInstanceConfigResponse parseFr public static com.google.spanner.executor.v1.CloudInstanceConfigResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudInstanceConfigResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudInstanceConfigResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudInstanceConfigResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudInstanceConfigResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudInstanceConfigResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -431,10 +448,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -445,7 +463,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CloudInstanceConfigResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CloudInstanceConfigResponse) com.google.spanner.executor.v1.CloudInstanceConfigResponseOrBuilder { @@ -455,7 +473,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudInstanceConfigResponse_fieldAccessorTable @@ -469,15 +487,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getListedInstanceConfigsFieldBuilder(); - getInstanceConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetListedInstanceConfigsFieldBuilder(); + internalGetInstanceConfigFieldBuilder(); } } @@ -560,39 +578,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CloudInstanceConfigRes result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CloudInstanceConfigResponse) { @@ -625,8 +610,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CloudInstanceConfigRespo listedInstanceConfigs_ = other.listedInstanceConfigs_; bitField0_ = (bitField0_ & ~0x00000001); listedInstanceConfigsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getListedInstanceConfigsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetListedInstanceConfigsFieldBuilder() : null; } else { listedInstanceConfigsBuilder_.addAllMessages(other.listedInstanceConfigs_); @@ -689,7 +674,8 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -724,7 +710,7 @@ private void ensureListedInstanceConfigsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> @@ -748,6 +734,7 @@ private void ensureListedInstanceConfigsIsMutable() { return listedInstanceConfigsBuilder_.getMessageList(); } } + /** * * @@ -765,6 +752,7 @@ public int getListedInstanceConfigsCount() { return listedInstanceConfigsBuilder_.getCount(); } } + /** * * @@ -782,6 +770,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getListedInstanceConf return listedInstanceConfigsBuilder_.getMessage(index); } } + /** * * @@ -806,6 +795,7 @@ public Builder setListedInstanceConfigs( } return this; } + /** * * @@ -827,6 +817,7 @@ public Builder setListedInstanceConfigs( } return this; } + /** * * @@ -851,6 +842,7 @@ public Builder addListedInstanceConfigs( } return this; } + /** * * @@ -875,6 +867,7 @@ public Builder addListedInstanceConfigs( } return this; } + /** * * @@ -896,6 +889,7 @@ public Builder addListedInstanceConfigs( } return this; } + /** * * @@ -917,6 +911,7 @@ public Builder addListedInstanceConfigs( } return this; } + /** * * @@ -938,6 +933,7 @@ public Builder addAllListedInstanceConfigs( } return this; } + /** * * @@ -958,6 +954,7 @@ public Builder clearListedInstanceConfigs() { } return this; } + /** * * @@ -978,6 +975,7 @@ public Builder removeListedInstanceConfigs(int index) { } return this; } + /** * * @@ -990,8 +988,9 @@ public Builder removeListedInstanceConfigs(int index) { */ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getListedInstanceConfigsBuilder(int index) { - return getListedInstanceConfigsFieldBuilder().getBuilder(index); + return internalGetListedInstanceConfigsFieldBuilder().getBuilder(index); } + /** * * @@ -1010,6 +1009,7 @@ public Builder removeListedInstanceConfigs(int index) { return listedInstanceConfigsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1028,6 +1028,7 @@ public Builder removeListedInstanceConfigs(int index) { return java.util.Collections.unmodifiableList(listedInstanceConfigs_); } } + /** * * @@ -1040,9 +1041,10 @@ public Builder removeListedInstanceConfigs(int index) { */ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder addListedInstanceConfigsBuilder() { - return getListedInstanceConfigsFieldBuilder() + return internalGetListedInstanceConfigsFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance()); } + /** * * @@ -1055,10 +1057,11 @@ public Builder removeListedInstanceConfigs(int index) { */ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder addListedInstanceConfigsBuilder(int index) { - return getListedInstanceConfigsFieldBuilder() + return internalGetListedInstanceConfigsFieldBuilder() .addBuilder( index, com.google.spanner.admin.instance.v1.InstanceConfig.getDefaultInstance()); } + /** * * @@ -1071,17 +1074,17 @@ public Builder removeListedInstanceConfigs(int index) { */ public java.util.List getListedInstanceConfigsBuilderList() { - return getListedInstanceConfigsFieldBuilder().getBuilderList(); + return internalGetListedInstanceConfigsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> - getListedInstanceConfigsFieldBuilder() { + internalGetListedInstanceConfigsFieldBuilder() { if (listedInstanceConfigsBuilder_ == null) { listedInstanceConfigsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder>( @@ -1095,6 +1098,7 @@ public Builder removeListedInstanceConfigs(int index) { } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1118,6 +1122,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1141,6 +1146,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1163,6 +1169,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1181,6 +1188,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1206,11 +1214,12 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.instance.v1.InstanceConfig instanceConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> instanceConfigBuilder_; + /** * * @@ -1225,6 +1234,7 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { public boolean hasInstanceConfig() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1245,6 +1255,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig() { return instanceConfigBuilder_.getMessage(); } } + /** * * @@ -1267,6 +1278,7 @@ public Builder setInstanceConfig(com.google.spanner.admin.instance.v1.InstanceCo onChanged(); return this; } + /** * * @@ -1287,6 +1299,7 @@ public Builder setInstanceConfig( onChanged(); return this; } + /** * * @@ -1315,6 +1328,7 @@ public Builder mergeInstanceConfig(com.google.spanner.admin.instance.v1.Instance } return this; } + /** * * @@ -1334,6 +1348,7 @@ public Builder clearInstanceConfig() { onChanged(); return this; } + /** * * @@ -1346,8 +1361,9 @@ public Builder clearInstanceConfig() { public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceConfigBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getInstanceConfigFieldBuilder().getBuilder(); + return internalGetInstanceConfigFieldBuilder().getBuilder(); } + /** * * @@ -1367,6 +1383,7 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo : instanceConfig_; } } + /** * * @@ -1376,14 +1393,14 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo * * .google.spanner.admin.instance.v1.InstanceConfig instance_config = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder> - getInstanceConfigFieldBuilder() { + internalGetInstanceConfigFieldBuilder() { if (instanceConfigBuilder_ == null) { instanceConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.InstanceConfig, com.google.spanner.admin.instance.v1.InstanceConfig.Builder, com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder>( @@ -1393,17 +1410,6 @@ public com.google.spanner.admin.instance.v1.InstanceConfig.Builder getInstanceCo return instanceConfigBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CloudInstanceConfigResponse) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java index 4d390a8c193..83486d1db43 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CloudInstanceConfigResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CloudInstanceConfigResponse) @@ -36,6 +38,7 @@ public interface CloudInstanceConfigResponseOrBuilder */ java.util.List getListedInstanceConfigsList(); + /** * * @@ -47,6 +50,7 @@ public interface CloudInstanceConfigResponseOrBuilder * */ com.google.spanner.admin.instance.v1.InstanceConfig getListedInstanceConfigs(int index); + /** * * @@ -58,6 +62,7 @@ public interface CloudInstanceConfigResponseOrBuilder * */ int getListedInstanceConfigsCount(); + /** * * @@ -70,6 +75,7 @@ public interface CloudInstanceConfigResponseOrBuilder */ java.util.List getListedInstanceConfigsOrBuilderList(); + /** * * @@ -96,6 +102,7 @@ com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getListedInstanceCo * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -122,6 +129,7 @@ com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getListedInstanceCo * @return Whether the instanceConfig field is set. */ boolean hasInstanceConfig(); + /** * * @@ -134,6 +142,7 @@ com.google.spanner.admin.instance.v1.InstanceConfigOrBuilder getListedInstanceCo * @return The instanceConfig. */ com.google.spanner.admin.instance.v1.InstanceConfig getInstanceConfig(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java index 5daa23c11dc..cb6e538edd9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CloudInstanceResponse} */ -public final class CloudInstanceResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CloudInstanceResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CloudInstanceResponse) CloudInstanceResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudInstanceResponse"); + } + // Use CloudInstanceResponse.newBuilder() to construct. - private CloudInstanceResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CloudInstanceResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private CloudInstanceResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CloudInstanceResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudInstanceResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudInstanceResponse_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List listedInstances_; + /** * * @@ -83,6 +91,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getListedInstancesList() { return listedInstances_; } + /** * * @@ -97,6 +106,7 @@ public java.util.List getListedIn getListedInstancesOrBuilderList() { return listedInstances_; } + /** * * @@ -110,6 +120,7 @@ public java.util.List getListedIn public int getListedInstancesCount() { return listedInstances_.size(); } + /** * * @@ -123,6 +134,7 @@ public int getListedInstancesCount() { public com.google.spanner.admin.instance.v1.Instance getListedInstances(int index) { return listedInstances_.get(index); } + /** * * @@ -142,6 +154,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getListedInstances @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -166,6 +179,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -193,6 +207,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public static final int INSTANCE_FIELD_NUMBER = 3; private com.google.spanner.admin.instance.v1.Instance instance_; + /** * * @@ -208,6 +223,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public boolean hasInstance() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -225,6 +241,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { ? com.google.spanner.admin.instance.v1.Instance.getDefaultInstance() : instance_; } + /** * * @@ -258,8 +275,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < listedInstances_.size(); i++) { output.writeMessage(1, listedInstances_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getInstance()); @@ -276,8 +293,8 @@ public int getSerializedSize() { for (int i = 0; i < listedInstances_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, listedInstances_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getInstance()); @@ -367,38 +384,38 @@ public static com.google.spanner.executor.v1.CloudInstanceResponse parseFrom( public static com.google.spanner.executor.v1.CloudInstanceResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudInstanceResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudInstanceResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudInstanceResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CloudInstanceResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CloudInstanceResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -421,10 +438,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -435,7 +453,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CloudInstanceResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CloudInstanceResponse) com.google.spanner.executor.v1.CloudInstanceResponseOrBuilder { @@ -445,7 +463,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CloudInstanceResponse_fieldAccessorTable @@ -459,15 +477,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getListedInstancesFieldBuilder(); - getInstanceFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetListedInstancesFieldBuilder(); + internalGetInstanceFieldBuilder(); } } @@ -549,39 +567,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CloudInstanceResponse result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CloudInstanceResponse) { @@ -614,8 +599,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CloudInstanceResponse ot listedInstances_ = other.listedInstances_; bitField0_ = (bitField0_ & ~0x00000001); listedInstancesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getListedInstancesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetListedInstancesFieldBuilder() : null; } else { listedInstancesBuilder_.addAllMessages(other.listedInstances_); @@ -677,7 +662,8 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getInstanceFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInstanceFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -712,7 +698,7 @@ private void ensureListedInstancesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> @@ -734,6 +720,7 @@ public java.util.List getListedIn return listedInstancesBuilder_.getMessageList(); } } + /** * * @@ -750,6 +737,7 @@ public int getListedInstancesCount() { return listedInstancesBuilder_.getCount(); } } + /** * * @@ -766,6 +754,7 @@ public com.google.spanner.admin.instance.v1.Instance getListedInstances(int inde return listedInstancesBuilder_.getMessage(index); } } + /** * * @@ -789,6 +778,7 @@ public Builder setListedInstances( } return this; } + /** * * @@ -809,6 +799,7 @@ public Builder setListedInstances( } return this; } + /** * * @@ -831,6 +822,7 @@ public Builder addListedInstances(com.google.spanner.admin.instance.v1.Instance } return this; } + /** * * @@ -854,6 +846,7 @@ public Builder addListedInstances( } return this; } + /** * * @@ -874,6 +867,7 @@ public Builder addListedInstances( } return this; } + /** * * @@ -894,6 +888,7 @@ public Builder addListedInstances( } return this; } + /** * * @@ -914,6 +909,7 @@ public Builder addAllListedInstances( } return this; } + /** * * @@ -933,6 +929,7 @@ public Builder clearListedInstances() { } return this; } + /** * * @@ -952,6 +949,7 @@ public Builder removeListedInstances(int index) { } return this; } + /** * * @@ -963,8 +961,9 @@ public Builder removeListedInstances(int index) { */ public com.google.spanner.admin.instance.v1.Instance.Builder getListedInstancesBuilder( int index) { - return getListedInstancesFieldBuilder().getBuilder(index); + return internalGetListedInstancesFieldBuilder().getBuilder(index); } + /** * * @@ -982,6 +981,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getListedInstances return listedInstancesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -999,6 +999,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getListedInstances return java.util.Collections.unmodifiableList(listedInstances_); } } + /** * * @@ -1009,9 +1010,10 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getListedInstances * repeated .google.spanner.admin.instance.v1.Instance listed_instances = 1; */ public com.google.spanner.admin.instance.v1.Instance.Builder addListedInstancesBuilder() { - return getListedInstancesFieldBuilder() + return internalGetListedInstancesFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.Instance.getDefaultInstance()); } + /** * * @@ -1023,9 +1025,10 @@ public com.google.spanner.admin.instance.v1.Instance.Builder addListedInstancesB */ public com.google.spanner.admin.instance.v1.Instance.Builder addListedInstancesBuilder( int index) { - return getListedInstancesFieldBuilder() + return internalGetListedInstancesFieldBuilder() .addBuilder(index, com.google.spanner.admin.instance.v1.Instance.getDefaultInstance()); } + /** * * @@ -1037,17 +1040,17 @@ public com.google.spanner.admin.instance.v1.Instance.Builder addListedInstancesB */ public java.util.List getListedInstancesBuilderList() { - return getListedInstancesFieldBuilder().getBuilderList(); + return internalGetListedInstancesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> - getListedInstancesFieldBuilder() { + internalGetListedInstancesFieldBuilder() { if (listedInstancesBuilder_ == null) { listedInstancesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder>( @@ -1061,6 +1064,7 @@ public com.google.spanner.admin.instance.v1.Instance.Builder addListedInstancesB } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1084,6 +1088,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1107,6 +1112,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1129,6 +1135,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1147,6 +1154,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1172,11 +1180,12 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.instance.v1.Instance instance_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> instanceBuilder_; + /** * * @@ -1191,6 +1200,7 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { public boolean hasInstance() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1211,6 +1221,7 @@ public com.google.spanner.admin.instance.v1.Instance getInstance() { return instanceBuilder_.getMessage(); } } + /** * * @@ -1233,6 +1244,7 @@ public Builder setInstance(com.google.spanner.admin.instance.v1.Instance value) onChanged(); return this; } + /** * * @@ -1253,6 +1265,7 @@ public Builder setInstance( onChanged(); return this; } + /** * * @@ -1280,6 +1293,7 @@ public Builder mergeInstance(com.google.spanner.admin.instance.v1.Instance value } return this; } + /** * * @@ -1299,6 +1313,7 @@ public Builder clearInstance() { onChanged(); return this; } + /** * * @@ -1311,8 +1326,9 @@ public Builder clearInstance() { public com.google.spanner.admin.instance.v1.Instance.Builder getInstanceBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getInstanceFieldBuilder().getBuilder(); + return internalGetInstanceFieldBuilder().getBuilder(); } + /** * * @@ -1331,6 +1347,7 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild : instance_; } } + /** * * @@ -1340,14 +1357,14 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild * * .google.spanner.admin.instance.v1.Instance instance = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder> - getInstanceFieldBuilder() { + internalGetInstanceFieldBuilder() { if (instanceBuilder_ == null) { instanceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.Instance, com.google.spanner.admin.instance.v1.Instance.Builder, com.google.spanner.admin.instance.v1.InstanceOrBuilder>( @@ -1357,17 +1374,6 @@ public com.google.spanner.admin.instance.v1.InstanceOrBuilder getInstanceOrBuild return instanceBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CloudInstanceResponse) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java index 8743f534a55..37efde132bb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CloudInstanceResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CloudInstanceResponse) @@ -34,6 +36,7 @@ public interface CloudInstanceResponseOrBuilder * repeated .google.spanner.admin.instance.v1.Instance listed_instances = 1; */ java.util.List getListedInstancesList(); + /** * * @@ -44,6 +47,7 @@ public interface CloudInstanceResponseOrBuilder * repeated .google.spanner.admin.instance.v1.Instance listed_instances = 1; */ com.google.spanner.admin.instance.v1.Instance getListedInstances(int index); + /** * * @@ -54,6 +58,7 @@ public interface CloudInstanceResponseOrBuilder * repeated .google.spanner.admin.instance.v1.Instance listed_instances = 1; */ int getListedInstancesCount(); + /** * * @@ -65,6 +70,7 @@ public interface CloudInstanceResponseOrBuilder */ java.util.List getListedInstancesOrBuilderList(); + /** * * @@ -89,6 +95,7 @@ public interface CloudInstanceResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -115,6 +122,7 @@ public interface CloudInstanceResponseOrBuilder * @return Whether the instance field is set. */ boolean hasInstance(); + /** * * @@ -127,6 +135,7 @@ public interface CloudInstanceResponseOrBuilder * @return The instance. */ com.google.spanner.admin.instance.v1.Instance getInstance(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java index efa4897ed23..ba2787df35b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ColumnMetadata} */ -public final class ColumnMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ColumnMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ColumnMetadata) ColumnMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ColumnMetadata"); + } + // Use ColumnMetadata.newBuilder() to construct. - private ColumnMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ColumnMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private ColumnMetadata() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ColumnMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ColumnMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ColumnMetadata_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -91,6 +99,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -117,6 +126,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int TYPE_FIELD_NUMBER = 2; private com.google.spanner.v1.Type type_; + /** * * @@ -132,6 +142,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -147,6 +158,7 @@ public boolean hasType() { public com.google.spanner.v1.Type getType() { return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; } + /** * * @@ -175,8 +187,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getType()); @@ -190,8 +202,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getType()); @@ -276,38 +288,38 @@ public static com.google.spanner.executor.v1.ColumnMetadata parseFrom( public static com.google.spanner.executor.v1.ColumnMetadata parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ColumnMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ColumnMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ColumnMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ColumnMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ColumnMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -330,10 +342,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -343,7 +356,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ColumnMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ColumnMetadata) com.google.spanner.executor.v1.ColumnMetadataOrBuilder { @@ -353,7 +366,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ColumnMetadata_fieldAccessorTable @@ -367,14 +380,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTypeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTypeFieldBuilder(); } } @@ -435,39 +448,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ColumnMetadata result) result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ColumnMetadata) { @@ -522,7 +502,7 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -546,6 +526,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -568,6 +549,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -590,6 +572,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -611,6 +594,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -628,6 +612,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -652,11 +637,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.Type type_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> typeBuilder_; + /** * * @@ -671,6 +657,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasType() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -689,6 +676,7 @@ public com.google.spanner.v1.Type getType() { return typeBuilder_.getMessage(); } } + /** * * @@ -711,6 +699,7 @@ public Builder setType(com.google.spanner.v1.Type value) { onChanged(); return this; } + /** * * @@ -730,6 +719,7 @@ public Builder setType(com.google.spanner.v1.Type.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -757,6 +747,7 @@ public Builder mergeType(com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -776,6 +767,7 @@ public Builder clearType() { onChanged(); return this; } + /** * * @@ -788,8 +780,9 @@ public Builder clearType() { public com.google.spanner.v1.Type.Builder getTypeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTypeFieldBuilder().getBuilder(); + return internalGetTypeFieldBuilder().getBuilder(); } + /** * * @@ -806,6 +799,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; } } + /** * * @@ -815,14 +809,14 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { * * .google.spanner.v1.Type type = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> - getTypeFieldBuilder() { + internalGetTypeFieldBuilder() { if (typeBuilder_ == null) { typeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder>(getType(), getParentForChildren(), isClean()); @@ -831,17 +825,6 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { return typeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ColumnMetadata) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java index 49102eda637..979b87da083 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ColumnMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ColumnMetadata) @@ -36,6 +38,7 @@ public interface ColumnMetadataOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -61,6 +64,7 @@ public interface ColumnMetadataOrBuilder * @return Whether the type field is set. */ boolean hasType(); + /** * * @@ -73,6 +77,7 @@ public interface ColumnMetadataOrBuilder * @return The type. */ com.google.spanner.v1.Type getType(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java index 9adeb54dee2..d50f497cf33 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.Concurrency} */ -public final class Concurrency extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Concurrency extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.Concurrency) ConcurrencyOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Concurrency"); + } + // Use Concurrency.newBuilder() to construct. - private Concurrency(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Concurrency(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private Concurrency() { snapshotEpochRootTable_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Concurrency(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_Concurrency_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_Concurrency_fieldAccessorTable @@ -84,6 +91,7 @@ public enum ConcurrencyModeCase private ConcurrencyModeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -125,6 +133,7 @@ public ConcurrencyModeCase getConcurrencyModeCase() { } public static final int STALENESS_SECONDS_FIELD_NUMBER = 1; + /** * * @@ -142,6 +151,7 @@ public ConcurrencyModeCase getConcurrencyModeCase() { public boolean hasStalenessSeconds() { return concurrencyModeCase_ == 1; } + /** * * @@ -164,6 +174,7 @@ public double getStalenessSeconds() { } public static final int MIN_READ_TIMESTAMP_MICROS_FIELD_NUMBER = 2; + /** * * @@ -179,6 +190,7 @@ public double getStalenessSeconds() { public boolean hasMinReadTimestampMicros() { return concurrencyModeCase_ == 2; } + /** * * @@ -199,6 +211,7 @@ public long getMinReadTimestampMicros() { } public static final int MAX_STALENESS_SECONDS_FIELD_NUMBER = 3; + /** * * @@ -214,6 +227,7 @@ public long getMinReadTimestampMicros() { public boolean hasMaxStalenessSeconds() { return concurrencyModeCase_ == 3; } + /** * * @@ -234,6 +248,7 @@ public double getMaxStalenessSeconds() { } public static final int EXACT_TIMESTAMP_MICROS_FIELD_NUMBER = 4; + /** * * @@ -249,6 +264,7 @@ public double getMaxStalenessSeconds() { public boolean hasExactTimestampMicros() { return concurrencyModeCase_ == 4; } + /** * * @@ -269,6 +285,7 @@ public long getExactTimestampMicros() { } public static final int STRONG_FIELD_NUMBER = 5; + /** * * @@ -284,6 +301,7 @@ public long getExactTimestampMicros() { public boolean hasStrong() { return concurrencyModeCase_ == 5; } + /** * * @@ -304,6 +322,7 @@ public boolean getStrong() { } public static final int BATCH_FIELD_NUMBER = 6; + /** * * @@ -319,6 +338,7 @@ public boolean getStrong() { public boolean hasBatch() { return concurrencyModeCase_ == 6; } + /** * * @@ -340,6 +360,7 @@ public boolean getBatch() { public static final int SNAPSHOT_EPOCH_READ_FIELD_NUMBER = 7; private boolean snapshotEpochRead_ = false; + /** * * @@ -361,6 +382,7 @@ public boolean getSnapshotEpochRead() { @SuppressWarnings("serial") private volatile java.lang.Object snapshotEpochRootTable_ = ""; + /** * * @@ -386,6 +408,7 @@ public java.lang.String getSnapshotEpochRootTable() { return s; } } + /** * * @@ -414,6 +437,7 @@ public com.google.protobuf.ByteString getSnapshotEpochRootTableBytes() { public static final int BATCH_READ_TIMESTAMP_MICROS_FIELD_NUMBER = 9; private long batchReadTimestampMicros_ = 0L; + /** * * @@ -465,8 +489,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (snapshotEpochRead_ != false) { output.writeBool(7, snapshotEpochRead_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(snapshotEpochRootTable_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 8, snapshotEpochRootTable_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(snapshotEpochRootTable_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 8, snapshotEpochRootTable_); } if (batchReadTimestampMicros_ != 0L) { output.writeInt64(9, batchReadTimestampMicros_); @@ -513,8 +537,8 @@ public int getSerializedSize() { if (snapshotEpochRead_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(7, snapshotEpochRead_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(snapshotEpochRootTable_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, snapshotEpochRootTable_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(snapshotEpochRootTable_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(8, snapshotEpochRootTable_); } if (batchReadTimestampMicros_ != 0L) { size += com.google.protobuf.CodedOutputStream.computeInt64Size(9, batchReadTimestampMicros_); @@ -656,38 +680,38 @@ public static com.google.spanner.executor.v1.Concurrency parseFrom( public static com.google.spanner.executor.v1.Concurrency parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.Concurrency parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.Concurrency parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.Concurrency parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.Concurrency parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.Concurrency parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -710,10 +734,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -723,7 +748,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.Concurrency} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.Concurrency) com.google.spanner.executor.v1.ConcurrencyOrBuilder { @@ -733,7 +758,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_Concurrency_fieldAccessorTable @@ -745,7 +770,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.Concurrency.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -811,39 +836,6 @@ private void buildPartialOneofs(com.google.spanner.executor.v1.Concurrency resul result.concurrencyMode_ = this.concurrencyMode_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.Concurrency) { @@ -1032,6 +1024,7 @@ public Builder clearConcurrencyMode() { public boolean hasStalenessSeconds() { return concurrencyModeCase_ == 1; } + /** * * @@ -1051,6 +1044,7 @@ public double getStalenessSeconds() { } return 0D; } + /** * * @@ -1072,6 +1066,7 @@ public Builder setStalenessSeconds(double value) { onChanged(); return this; } + /** * * @@ -1108,6 +1103,7 @@ public Builder clearStalenessSeconds() { public boolean hasMinReadTimestampMicros() { return concurrencyModeCase_ == 2; } + /** * * @@ -1125,6 +1121,7 @@ public long getMinReadTimestampMicros() { } return 0L; } + /** * * @@ -1144,6 +1141,7 @@ public Builder setMinReadTimestampMicros(long value) { onChanged(); return this; } + /** * * @@ -1178,6 +1176,7 @@ public Builder clearMinReadTimestampMicros() { public boolean hasMaxStalenessSeconds() { return concurrencyModeCase_ == 3; } + /** * * @@ -1195,6 +1194,7 @@ public double getMaxStalenessSeconds() { } return 0D; } + /** * * @@ -1214,6 +1214,7 @@ public Builder setMaxStalenessSeconds(double value) { onChanged(); return this; } + /** * * @@ -1248,6 +1249,7 @@ public Builder clearMaxStalenessSeconds() { public boolean hasExactTimestampMicros() { return concurrencyModeCase_ == 4; } + /** * * @@ -1265,6 +1267,7 @@ public long getExactTimestampMicros() { } return 0L; } + /** * * @@ -1284,6 +1287,7 @@ public Builder setExactTimestampMicros(long value) { onChanged(); return this; } + /** * * @@ -1318,6 +1322,7 @@ public Builder clearExactTimestampMicros() { public boolean hasStrong() { return concurrencyModeCase_ == 5; } + /** * * @@ -1335,6 +1340,7 @@ public boolean getStrong() { } return false; } + /** * * @@ -1354,6 +1360,7 @@ public Builder setStrong(boolean value) { onChanged(); return this; } + /** * * @@ -1388,6 +1395,7 @@ public Builder clearStrong() { public boolean hasBatch() { return concurrencyModeCase_ == 6; } + /** * * @@ -1405,6 +1413,7 @@ public boolean getBatch() { } return false; } + /** * * @@ -1424,6 +1433,7 @@ public Builder setBatch(boolean value) { onChanged(); return this; } + /** * * @@ -1445,6 +1455,7 @@ public Builder clearBatch() { } private boolean snapshotEpochRead_; + /** * * @@ -1461,6 +1472,7 @@ public Builder clearBatch() { public boolean getSnapshotEpochRead() { return snapshotEpochRead_; } + /** * * @@ -1481,6 +1493,7 @@ public Builder setSnapshotEpochRead(boolean value) { onChanged(); return this; } + /** * * @@ -1501,6 +1514,7 @@ public Builder clearSnapshotEpochRead() { } private java.lang.Object snapshotEpochRootTable_ = ""; + /** * * @@ -1525,6 +1539,7 @@ public java.lang.String getSnapshotEpochRootTable() { return (java.lang.String) ref; } } + /** * * @@ -1549,6 +1564,7 @@ public com.google.protobuf.ByteString getSnapshotEpochRootTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1572,6 +1588,7 @@ public Builder setSnapshotEpochRootTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1591,6 +1608,7 @@ public Builder clearSnapshotEpochRootTable() { onChanged(); return this; } + /** * * @@ -1617,6 +1635,7 @@ public Builder setSnapshotEpochRootTableBytes(com.google.protobuf.ByteString val } private long batchReadTimestampMicros_; + /** * * @@ -1632,6 +1651,7 @@ public Builder setSnapshotEpochRootTableBytes(com.google.protobuf.ByteString val public long getBatchReadTimestampMicros() { return batchReadTimestampMicros_; } + /** * * @@ -1651,6 +1671,7 @@ public Builder setBatchReadTimestampMicros(long value) { onChanged(); return this; } + /** * * @@ -1669,17 +1690,6 @@ public Builder clearBatchReadTimestampMicros() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.Concurrency) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java index 0ded5469c65..4fed9fa7f70 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ConcurrencyOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.Concurrency) @@ -38,6 +40,7 @@ public interface ConcurrencyOrBuilder * @return Whether the stalenessSeconds field is set. */ boolean hasStalenessSeconds(); + /** * * @@ -65,6 +68,7 @@ public interface ConcurrencyOrBuilder * @return Whether the minReadTimestampMicros field is set. */ boolean hasMinReadTimestampMicros(); + /** * * @@ -90,6 +94,7 @@ public interface ConcurrencyOrBuilder * @return Whether the maxStalenessSeconds field is set. */ boolean hasMaxStalenessSeconds(); + /** * * @@ -115,6 +120,7 @@ public interface ConcurrencyOrBuilder * @return Whether the exactTimestampMicros field is set. */ boolean hasExactTimestampMicros(); + /** * * @@ -140,6 +146,7 @@ public interface ConcurrencyOrBuilder * @return Whether the strong field is set. */ boolean hasStrong(); + /** * * @@ -165,6 +172,7 @@ public interface ConcurrencyOrBuilder * @return Whether the batch field is set. */ boolean hasBatch(); + /** * * @@ -206,6 +214,7 @@ public interface ConcurrencyOrBuilder * @return The snapshotEpochRootTable. */ java.lang.String getSnapshotEpochRootTable(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java index dcf46e36608..0a1dea9e414 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CopyCloudBackupAction} */ -public final class CopyCloudBackupAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CopyCloudBackupAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CopyCloudBackupAction) CopyCloudBackupActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CopyCloudBackupAction"); + } + // Use CopyCloudBackupAction.newBuilder() to construct. - private CopyCloudBackupAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CopyCloudBackupAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private CopyCloudBackupAction() { sourceBackup_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CopyCloudBackupAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CopyCloudBackupAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CopyCloudBackupAction_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -122,6 +131,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -145,6 +155,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -173,6 +184,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -196,6 +208,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -224,6 +237,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object sourceBackup_ = ""; + /** * * @@ -249,6 +263,7 @@ public java.lang.String getSourceBackup() { return s; } } + /** * * @@ -277,6 +292,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { public static final int EXPIRE_TIME_FIELD_NUMBER = 5; private com.google.protobuf.Timestamp expireTime_; + /** * * @@ -294,6 +310,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { public boolean hasExpireTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -311,6 +328,7 @@ public boolean hasExpireTime() { public com.google.protobuf.Timestamp getExpireTime() { return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; } + /** * * @@ -341,17 +359,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, sourceBackup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceBackup_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, sourceBackup_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(5, getExpireTime()); @@ -365,17 +383,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, sourceBackup_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourceBackup_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, sourceBackup_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getExpireTime()); @@ -469,38 +487,38 @@ public static com.google.spanner.executor.v1.CopyCloudBackupAction parseFrom( public static com.google.spanner.executor.v1.CopyCloudBackupAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CopyCloudBackupAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CopyCloudBackupAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CopyCloudBackupAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CopyCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CopyCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -523,10 +541,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -536,7 +555,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CopyCloudBackupAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CopyCloudBackupAction) com.google.spanner.executor.v1.CopyCloudBackupActionOrBuilder { @@ -546,7 +565,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CopyCloudBackupAction_fieldAccessorTable @@ -560,14 +579,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getExpireTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetExpireTimeFieldBuilder(); } } @@ -640,39 +659,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CopyCloudBackupAction result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CopyCloudBackupAction) { @@ -761,7 +747,8 @@ public Builder mergeFrom( } // case 34 case 42: { - input.readMessage(getExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -785,6 +772,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -807,6 +795,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -829,6 +818,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -850,6 +840,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -867,6 +858,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -891,6 +883,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -913,6 +906,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -935,6 +929,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -956,6 +951,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -973,6 +969,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -997,6 +994,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -1019,6 +1017,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -1041,6 +1040,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1062,6 +1062,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1079,6 +1080,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -1103,6 +1105,7 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object sourceBackup_ = ""; + /** * * @@ -1127,6 +1130,7 @@ public java.lang.String getSourceBackup() { return (java.lang.String) ref; } } + /** * * @@ -1151,6 +1155,7 @@ public com.google.protobuf.ByteString getSourceBackupBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1174,6 +1179,7 @@ public Builder setSourceBackup(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1193,6 +1199,7 @@ public Builder clearSourceBackup() { onChanged(); return this; } + /** * * @@ -1219,11 +1226,12 @@ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp expireTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> expireTimeBuilder_; + /** * * @@ -1241,6 +1249,7 @@ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) { public boolean hasExpireTime() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1264,6 +1273,7 @@ public com.google.protobuf.Timestamp getExpireTime() { return expireTimeBuilder_.getMessage(); } } + /** * * @@ -1289,6 +1299,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1311,6 +1322,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1341,6 +1353,7 @@ public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1363,6 +1376,7 @@ public Builder clearExpireTime() { onChanged(); return this; } + /** * * @@ -1378,8 +1392,9 @@ public Builder clearExpireTime() { public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getExpireTimeFieldBuilder().getBuilder(); + return internalGetExpireTimeFieldBuilder().getBuilder(); } + /** * * @@ -1401,6 +1416,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { : expireTime_; } } + /** * * @@ -1413,14 +1429,14 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getExpireTimeFieldBuilder() { + internalGetExpireTimeFieldBuilder() { if (expireTimeBuilder_ == null) { expireTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1430,17 +1446,6 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { return expireTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CopyCloudBackupAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java index 0d41bf0e713..9c1acde0f99 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CopyCloudBackupActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CopyCloudBackupAction) @@ -36,6 +38,7 @@ public interface CopyCloudBackupActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface CopyCloudBackupActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -86,6 +90,7 @@ public interface CopyCloudBackupActionOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * @@ -113,6 +118,7 @@ public interface CopyCloudBackupActionOrBuilder * @return The sourceBackup. */ java.lang.String getSourceBackup(); + /** * * @@ -142,6 +148,7 @@ public interface CopyCloudBackupActionOrBuilder * @return Whether the expireTime field is set. */ boolean hasExpireTime(); + /** * * @@ -156,6 +163,7 @@ public interface CopyCloudBackupActionOrBuilder * @return The expireTime. */ com.google.protobuf.Timestamp getExpireTime(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java index a1ccd28f481..d1dc1060482 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CreateCloudBackupAction} */ -public final class CreateCloudBackupAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateCloudBackupAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CreateCloudBackupAction) CreateCloudBackupActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateCloudBackupAction"); + } + // Use CreateCloudBackupAction.newBuilder() to construct. - private CreateCloudBackupAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateCloudBackupAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private CreateCloudBackupAction() { databaseId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateCloudBackupAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudBackupAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudBackupAction_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -122,6 +131,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -145,6 +155,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -173,6 +184,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -196,6 +208,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -224,6 +237,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -249,6 +263,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -277,6 +292,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int EXPIRE_TIME_FIELD_NUMBER = 5; private com.google.protobuf.Timestamp expireTime_; + /** * * @@ -294,6 +310,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public boolean hasExpireTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -311,6 +328,7 @@ public boolean hasExpireTime() { public com.google.protobuf.Timestamp getExpireTime() { return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; } + /** * * @@ -329,6 +347,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { public static final int VERSION_TIME_FIELD_NUMBER = 6; private com.google.protobuf.Timestamp versionTime_; + /** * * @@ -346,6 +365,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { public boolean hasVersionTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -363,6 +383,7 @@ public boolean hasVersionTime() { public com.google.protobuf.Timestamp getVersionTime() { return versionTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : versionTime_; } + /** * * @@ -381,6 +402,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 7; private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; + /** * * @@ -397,6 +419,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -415,6 +438,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig ? com.google.spanner.admin.database.v1.EncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -447,17 +471,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, databaseId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(5, getExpireTime()); @@ -477,17 +501,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, databaseId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getExpireTime()); @@ -603,38 +627,38 @@ public static com.google.spanner.executor.v1.CreateCloudBackupAction parseFrom( public static com.google.spanner.executor.v1.CreateCloudBackupAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudBackupAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateCloudBackupAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudBackupAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -658,10 +682,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -671,7 +696,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CreateCloudBackupAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CreateCloudBackupAction) com.google.spanner.executor.v1.CreateCloudBackupActionOrBuilder { @@ -681,7 +706,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudBackupAction_fieldAccessorTable @@ -695,16 +720,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getExpireTimeFieldBuilder(); - getVersionTimeFieldBuilder(); - getEncryptionConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetExpireTimeFieldBuilder(); + internalGetVersionTimeFieldBuilder(); + internalGetEncryptionConfigFieldBuilder(); } } @@ -797,39 +822,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CreateCloudBackupActio result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CreateCloudBackupAction) { @@ -924,20 +916,22 @@ public Builder mergeFrom( } // case 34 case 42: { - input.readMessage(getExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 case 50: { - input.readMessage(getVersionTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetVersionTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 50 case 58: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000040; break; } // case 58 @@ -961,6 +955,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -983,6 +978,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -1005,6 +1001,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1026,6 +1023,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1043,6 +1041,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1067,6 +1066,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -1089,6 +1089,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -1111,6 +1112,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1132,6 +1134,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1149,6 +1152,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -1173,6 +1177,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -1195,6 +1200,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -1217,6 +1223,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1238,6 +1245,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1255,6 +1263,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -1279,6 +1288,7 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -1303,6 +1313,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1327,6 +1338,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1350,6 +1362,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1369,6 +1382,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1395,11 +1409,12 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp expireTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> expireTimeBuilder_; + /** * * @@ -1417,6 +1432,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public boolean hasExpireTime() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1440,6 +1456,7 @@ public com.google.protobuf.Timestamp getExpireTime() { return expireTimeBuilder_.getMessage(); } } + /** * * @@ -1465,6 +1482,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1487,6 +1505,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1517,6 +1536,7 @@ public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1539,6 +1559,7 @@ public Builder clearExpireTime() { onChanged(); return this; } + /** * * @@ -1554,8 +1575,9 @@ public Builder clearExpireTime() { public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getExpireTimeFieldBuilder().getBuilder(); + return internalGetExpireTimeFieldBuilder().getBuilder(); } + /** * * @@ -1577,6 +1599,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { : expireTime_; } } + /** * * @@ -1589,14 +1612,14 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { * .google.protobuf.Timestamp expire_time = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getExpireTimeFieldBuilder() { + internalGetExpireTimeFieldBuilder() { if (expireTimeBuilder_ == null) { expireTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1607,11 +1630,12 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { } private com.google.protobuf.Timestamp versionTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> versionTimeBuilder_; + /** * * @@ -1628,6 +1652,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { public boolean hasVersionTime() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1650,6 +1675,7 @@ public com.google.protobuf.Timestamp getVersionTime() { return versionTimeBuilder_.getMessage(); } } + /** * * @@ -1674,6 +1700,7 @@ public Builder setVersionTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1695,6 +1722,7 @@ public Builder setVersionTime(com.google.protobuf.Timestamp.Builder builderForVa onChanged(); return this; } + /** * * @@ -1724,6 +1752,7 @@ public Builder mergeVersionTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1745,6 +1774,7 @@ public Builder clearVersionTime() { onChanged(); return this; } + /** * * @@ -1759,8 +1789,9 @@ public Builder clearVersionTime() { public com.google.protobuf.Timestamp.Builder getVersionTimeBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getVersionTimeFieldBuilder().getBuilder(); + return internalGetVersionTimeFieldBuilder().getBuilder(); } + /** * * @@ -1781,6 +1812,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { : versionTime_; } } + /** * * @@ -1792,14 +1824,14 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { * * optional .google.protobuf.Timestamp version_time = 6; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getVersionTimeFieldBuilder() { + internalGetVersionTimeFieldBuilder() { if (versionTimeBuilder_ == null) { versionTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1810,11 +1842,12 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { } private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1830,6 +1863,7 @@ public com.google.protobuf.TimestampOrBuilder getVersionTimeOrBuilder() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -1851,6 +1885,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1875,6 +1910,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1896,6 +1932,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1926,6 +1963,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1946,6 +1984,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1960,8 +1999,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000040; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1982,6 +2022,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1992,14 +2033,14 @@ public Builder clearEncryptionConfig() { * * .google.spanner.admin.database.v1.EncryptionConfig encryption_config = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder>( @@ -2009,17 +2050,6 @@ public Builder clearEncryptionConfig() { return encryptionConfigBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CreateCloudBackupAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java index 16396ec7031..ac639243b49 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CreateCloudBackupActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CreateCloudBackupAction) @@ -36,6 +38,7 @@ public interface CreateCloudBackupActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface CreateCloudBackupActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -86,6 +90,7 @@ public interface CreateCloudBackupActionOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * @@ -113,6 +118,7 @@ public interface CreateCloudBackupActionOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -142,6 +148,7 @@ public interface CreateCloudBackupActionOrBuilder * @return Whether the expireTime field is set. */ boolean hasExpireTime(); + /** * * @@ -156,6 +163,7 @@ public interface CreateCloudBackupActionOrBuilder * @return The expireTime. */ com.google.protobuf.Timestamp getExpireTime(); + /** * * @@ -183,6 +191,7 @@ public interface CreateCloudBackupActionOrBuilder * @return Whether the versionTime field is set. */ boolean hasVersionTime(); + /** * * @@ -197,6 +206,7 @@ public interface CreateCloudBackupActionOrBuilder * @return The versionTime. */ com.google.protobuf.Timestamp getVersionTime(); + /** * * @@ -223,6 +233,7 @@ public interface CreateCloudBackupActionOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -236,6 +247,7 @@ public interface CreateCloudBackupActionOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java index 8bea5889e35..deae557eaeb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CreateCloudDatabaseAction} */ -public final class CreateCloudDatabaseAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateCloudDatabaseAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CreateCloudDatabaseAction) CreateCloudDatabaseActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateCloudDatabaseAction"); + } + // Use CreateCloudDatabaseAction.newBuilder() to construct. - private CreateCloudDatabaseAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateCloudDatabaseAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +60,13 @@ private CreateCloudDatabaseAction() { protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateCloudDatabaseAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_fieldAccessorTable @@ -73,6 +80,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -147,6 +157,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -175,6 +186,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -198,6 +210,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -227,6 +240,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList sdlStatement_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -241,6 +255,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public com.google.protobuf.ProtocolStringList getSdlStatementList() { return sdlStatement_; } + /** * * @@ -255,6 +270,7 @@ public com.google.protobuf.ProtocolStringList getSdlStatementList() { public int getSdlStatementCount() { return sdlStatement_.size(); } + /** * * @@ -270,6 +286,7 @@ public int getSdlStatementCount() { public java.lang.String getSdlStatement(int index) { return sdlStatement_.get(index); } + /** * * @@ -288,6 +305,7 @@ public com.google.protobuf.ByteString getSdlStatementBytes(int index) { public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 5; private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; + /** * * @@ -304,6 +322,7 @@ public com.google.protobuf.ByteString getSdlStatementBytes(int index) { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -322,6 +341,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig ? com.google.spanner.admin.database.v1.EncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -344,6 +364,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig @SuppressWarnings("serial") private volatile java.lang.Object dialect_ = ""; + /** * * @@ -359,6 +380,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig public boolean hasDialect() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -382,6 +404,7 @@ public java.lang.String getDialect() { return s; } } + /** * * @@ -408,6 +431,7 @@ public com.google.protobuf.ByteString getDialectBytes() { public static final int PROTO_DESCRIPTORS_FIELD_NUMBER = 7; private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * optional bytes proto_descriptors = 7; * @@ -417,6 +441,7 @@ public com.google.protobuf.ByteString getDialectBytes() { public boolean hasProtoDescriptors() { return ((bitField0_ & 0x00000004) != 0); } + /** * optional bytes proto_descriptors = 7; * @@ -441,23 +466,23 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, databaseId_); } for (int i = 0; i < sdlStatement_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, sdlStatement_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 4, sdlStatement_.getRaw(i)); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(5, getEncryptionConfig()); } if (((bitField0_ & 0x00000002) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 6, dialect_); + com.google.protobuf.GeneratedMessage.writeString(output, 6, dialect_); } if (((bitField0_ & 0x00000004) != 0)) { output.writeBytes(7, protoDescriptors_); @@ -471,14 +496,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, databaseId_); } { int dataSize = 0; @@ -492,7 +517,7 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getEncryptionConfig()); } if (((bitField0_ & 0x00000002) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, dialect_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(6, dialect_); } if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeBytesSize(7, protoDescriptors_); @@ -604,38 +629,38 @@ public static com.google.spanner.executor.v1.CreateCloudDatabaseAction parseFrom public static com.google.spanner.executor.v1.CreateCloudDatabaseAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudDatabaseAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -659,10 +684,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -672,7 +698,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CreateCloudDatabaseAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CreateCloudDatabaseAction) com.google.spanner.executor.v1.CreateCloudDatabaseActionOrBuilder { @@ -682,7 +708,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudDatabaseAction_fieldAccessorTable @@ -696,14 +722,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getEncryptionConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetEncryptionConfigFieldBuilder(); } } @@ -788,39 +814,6 @@ private void buildPartial0(com.google.spanner.executor.v1.CreateCloudDatabaseAct result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CreateCloudDatabaseAction) { @@ -924,7 +917,7 @@ public Builder mergeFrom( case 42: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -960,6 +953,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceId_ = ""; + /** * * @@ -982,6 +976,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -1004,6 +999,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1025,6 +1021,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1042,6 +1039,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -1066,6 +1064,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -1088,6 +1087,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -1110,6 +1110,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1131,6 +1132,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1148,6 +1150,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1172,6 +1175,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -1194,6 +1198,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1216,6 +1221,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1237,6 +1243,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1254,6 +1261,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1286,6 +1294,7 @@ private void ensureSdlStatementIsMutable() { } bitField0_ |= 0x00000008; } + /** * * @@ -1301,6 +1310,7 @@ public com.google.protobuf.ProtocolStringList getSdlStatementList() { sdlStatement_.makeImmutable(); return sdlStatement_; } + /** * * @@ -1315,6 +1325,7 @@ public com.google.protobuf.ProtocolStringList getSdlStatementList() { public int getSdlStatementCount() { return sdlStatement_.size(); } + /** * * @@ -1330,6 +1341,7 @@ public int getSdlStatementCount() { public java.lang.String getSdlStatement(int index) { return sdlStatement_.get(index); } + /** * * @@ -1345,6 +1357,7 @@ public java.lang.String getSdlStatement(int index) { public com.google.protobuf.ByteString getSdlStatementBytes(int index) { return sdlStatement_.getByteString(index); } + /** * * @@ -1368,6 +1381,7 @@ public Builder setSdlStatement(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1390,6 +1404,7 @@ public Builder addSdlStatement(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1409,6 +1424,7 @@ public Builder addAllSdlStatement(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1427,6 +1443,7 @@ public Builder clearSdlStatement() { onChanged(); return this; } + /** * * @@ -1452,11 +1469,12 @@ public Builder addSdlStatementBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1472,6 +1490,7 @@ public Builder addSdlStatementBytes(com.google.protobuf.ByteString value) { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1493,6 +1512,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1517,6 +1537,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1538,6 +1559,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1568,6 +1590,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1588,6 +1611,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1602,8 +1626,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1624,6 +1649,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1634,14 +1660,14 @@ public Builder clearEncryptionConfig() { * * .google.spanner.admin.database.v1.EncryptionConfig encryption_config = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder>( @@ -1652,6 +1678,7 @@ public Builder clearEncryptionConfig() { } private java.lang.Object dialect_ = ""; + /** * * @@ -1666,6 +1693,7 @@ public Builder clearEncryptionConfig() { public boolean hasDialect() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1688,6 +1716,7 @@ public java.lang.String getDialect() { return (java.lang.String) ref; } } + /** * * @@ -1710,6 +1739,7 @@ public com.google.protobuf.ByteString getDialectBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1731,6 +1761,7 @@ public Builder setDialect(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1748,6 +1779,7 @@ public Builder clearDialect() { onChanged(); return this; } + /** * * @@ -1772,6 +1804,7 @@ public Builder setDialectBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * optional bytes proto_descriptors = 7; * @@ -1781,6 +1814,7 @@ public Builder setDialectBytes(com.google.protobuf.ByteString value) { public boolean hasProtoDescriptors() { return ((bitField0_ & 0x00000040) != 0); } + /** * optional bytes proto_descriptors = 7; * @@ -1790,6 +1824,7 @@ public boolean hasProtoDescriptors() { public com.google.protobuf.ByteString getProtoDescriptors() { return protoDescriptors_; } + /** * optional bytes proto_descriptors = 7; * @@ -1805,6 +1840,7 @@ public Builder setProtoDescriptors(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * optional bytes proto_descriptors = 7; * @@ -1817,17 +1853,6 @@ public Builder clearProtoDescriptors() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CreateCloudDatabaseAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java index 497b65feea1..2760710196b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CreateCloudDatabaseActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CreateCloudDatabaseAction) @@ -36,6 +38,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -61,6 +64,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -86,6 +90,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -111,6 +116,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return A list containing the sdlStatement. */ java.util.List getSdlStatementList(); + /** * * @@ -123,6 +129,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return The count of sdlStatement. */ int getSdlStatementCount(); + /** * * @@ -136,6 +143,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return The sdlStatement at the given index. */ java.lang.String getSdlStatement(int index); + /** * * @@ -163,6 +171,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -176,6 +185,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig(); + /** * * @@ -200,6 +210,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return Whether the dialect field is set. */ boolean hasDialect(); + /** * * @@ -212,6 +223,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return The dialect. */ java.lang.String getDialect(); + /** * * @@ -231,6 +243,7 @@ public interface CreateCloudDatabaseActionOrBuilder * @return Whether the protoDescriptors field is set. */ boolean hasProtoDescriptors(); + /** * optional bytes proto_descriptors = 7; * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java index 72cd94889bf..6f49bbbaf03 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CreateCloudInstanceAction} */ -public final class CreateCloudInstanceAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateCloudInstanceAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CreateCloudInstanceAction) CreateCloudInstanceActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateCloudInstanceAction"); + } + // Use CreateCloudInstanceAction.newBuilder() to construct. - private CreateCloudInstanceAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateCloudInstanceAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,12 +55,7 @@ private CreateCloudInstanceAction() { instanceId_ = ""; projectId_ = ""; instanceConfigId_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateCloudInstanceAction(); + edition_ = 0; } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @@ -68,7 +76,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_fieldAccessorTable @@ -82,6 +90,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -105,6 +114,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -133,6 +143,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -156,6 +167,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -184,6 +196,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceConfigId_ = ""; + /** * * @@ -207,6 +220,7 @@ public java.lang.String getInstanceConfigId() { return s; } } + /** * * @@ -233,6 +247,7 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { public static final int NODE_COUNT_FIELD_NUMBER = 4; private int nodeCount_ = 0; + /** * * @@ -248,6 +263,7 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { public boolean hasNodeCount() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -266,6 +282,7 @@ public int getNodeCount() { public static final int PROCESSING_UNITS_FIELD_NUMBER = 6; private int processingUnits_ = 0; + /** * * @@ -281,6 +298,7 @@ public int getNodeCount() { public boolean hasProcessingUnits() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -299,6 +317,7 @@ public int getProcessingUnits() { public static final int AUTOSCALING_CONFIG_FIELD_NUMBER = 7; private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; + /** * * @@ -317,6 +336,7 @@ public int getProcessingUnits() { public boolean hasAutoscalingConfig() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -337,6 +357,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf ? com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance() : autoscalingConfig_; } + /** * * @@ -383,6 +404,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -399,12 +421,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(); } + /** * * @@ -418,6 +442,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -438,6 +463,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -459,6 +485,45 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { return map.get(key); } + public static final int EDITION_FIELD_NUMBER = 8; + private int edition_ = 0; + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The enum numeric value on the wire for edition. + */ + @java.lang.Override + public int getEditionValue() { + return edition_; + } + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The edition. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.Instance.Edition getEdition() { + com.google.spanner.admin.instance.v1.Instance.Edition result = + com.google.spanner.admin.instance.v1.Instance.Edition.forNumber(edition_); + return result == null + ? com.google.spanner.admin.instance.v1.Instance.Edition.UNRECOGNIZED + : result; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -473,19 +538,19 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceConfigId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, instanceConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceConfigId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, instanceConfigId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeInt32(4, nodeCount_); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 5); if (((bitField0_ & 0x00000002) != 0)) { output.writeInt32(6, processingUnits_); @@ -493,6 +558,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(7, getAutoscalingConfig()); } + if (edition_ + != com.google.spanner.admin.instance.v1.Instance.Edition.EDITION_UNSPECIFIED.getNumber()) { + output.writeEnum(8, edition_); + } getUnknownFields().writeTo(output); } @@ -502,14 +571,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceConfigId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, instanceConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceConfigId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, instanceConfigId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, nodeCount_); @@ -530,6 +599,10 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, getAutoscalingConfig()); } + if (edition_ + != com.google.spanner.admin.instance.v1.Instance.Edition.EDITION_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(8, edition_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -562,6 +635,7 @@ public boolean equals(final java.lang.Object obj) { if (!getAutoscalingConfig().equals(other.getAutoscalingConfig())) return false; } if (!internalGetLabels().equals(other.internalGetLabels())) return false; + if (edition_ != other.edition_) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -595,6 +669,8 @@ public int hashCode() { hash = (37 * hash) + LABELS_FIELD_NUMBER; hash = (53 * hash) + internalGetLabels().hashCode(); } + hash = (37 * hash) + EDITION_FIELD_NUMBER; + hash = (53 * hash) + edition_; hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -637,38 +713,38 @@ public static com.google.spanner.executor.v1.CreateCloudInstanceAction parseFrom public static com.google.spanner.executor.v1.CreateCloudInstanceAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudInstanceAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateCloudInstanceAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudInstanceAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -692,10 +768,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -705,7 +782,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CreateCloudInstanceAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CreateCloudInstanceAction) com.google.spanner.executor.v1.CreateCloudInstanceActionOrBuilder { @@ -737,7 +814,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateCloudInstanceAction_fieldAccessorTable @@ -751,14 +828,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getAutoscalingConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetAutoscalingConfigFieldBuilder(); } } @@ -777,6 +854,7 @@ public Builder clear() { autoscalingConfigBuilder_ = null; } internalGetMutableLabels().clear(); + edition_ = 0; return this; } @@ -842,42 +920,12 @@ private void buildPartial0(com.google.spanner.executor.v1.CreateCloudInstanceAct result.labels_ = internalGetLabels(); result.labels_.makeImmutable(); } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.edition_ = edition_; + } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CreateCloudInstanceAction) { @@ -917,6 +965,9 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CreateCloudInstanceActio } internalGetMutableLabels().mergeFrom(other.internalGetLabels()); bitField0_ |= 0x00000040; + if (other.edition_ != 0) { + setEditionValue(other.getEditionValue()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -988,10 +1039,16 @@ public Builder mergeFrom( case 58: { input.readMessage( - getAutoscalingConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetAutoscalingConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 58 + case 64: + { + edition_ = input.readEnum(); + bitField0_ |= 0x00000080; + break; + } // case 64 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1012,6 +1069,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceId_ = ""; + /** * * @@ -1034,6 +1092,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -1056,6 +1115,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1077,6 +1137,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1094,6 +1155,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -1118,6 +1180,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -1140,6 +1203,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -1162,6 +1226,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1183,6 +1248,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1200,6 +1266,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1224,6 +1291,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceConfigId_ = ""; + /** * * @@ -1246,6 +1314,7 @@ public java.lang.String getInstanceConfigId() { return (java.lang.String) ref; } } + /** * * @@ -1268,6 +1337,7 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1289,6 +1359,7 @@ public Builder setInstanceConfigId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1306,6 +1377,7 @@ public Builder clearInstanceConfigId() { onChanged(); return this; } + /** * * @@ -1330,6 +1402,7 @@ public Builder setInstanceConfigIdBytes(com.google.protobuf.ByteString value) { } private int nodeCount_; + /** * * @@ -1345,6 +1418,7 @@ public Builder setInstanceConfigIdBytes(com.google.protobuf.ByteString value) { public boolean hasNodeCount() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1360,6 +1434,7 @@ public boolean hasNodeCount() { public int getNodeCount() { return nodeCount_; } + /** * * @@ -1379,6 +1454,7 @@ public Builder setNodeCount(int value) { onChanged(); return this; } + /** * * @@ -1398,6 +1474,7 @@ public Builder clearNodeCount() { } private int processingUnits_; + /** * * @@ -1413,6 +1490,7 @@ public Builder clearNodeCount() { public boolean hasProcessingUnits() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1428,6 +1506,7 @@ public boolean hasProcessingUnits() { public int getProcessingUnits() { return processingUnits_; } + /** * * @@ -1447,6 +1526,7 @@ public Builder setProcessingUnits(int value) { onChanged(); return this; } + /** * * @@ -1466,11 +1546,12 @@ public Builder clearProcessingUnits() { } private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> autoscalingConfigBuilder_; + /** * * @@ -1488,6 +1569,7 @@ public Builder clearProcessingUnits() { public boolean hasAutoscalingConfig() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1511,6 +1593,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf return autoscalingConfigBuilder_.getMessage(); } } + /** * * @@ -1537,6 +1620,7 @@ public Builder setAutoscalingConfig( onChanged(); return this; } + /** * * @@ -1560,6 +1644,7 @@ public Builder setAutoscalingConfig( onChanged(); return this; } + /** * * @@ -1592,6 +1677,7 @@ public Builder mergeAutoscalingConfig( } return this; } + /** * * @@ -1614,6 +1700,7 @@ public Builder clearAutoscalingConfig() { onChanged(); return this; } + /** * * @@ -1630,8 +1717,9 @@ public Builder clearAutoscalingConfig() { getAutoscalingConfigBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getAutoscalingConfigFieldBuilder().getBuilder(); + return internalGetAutoscalingConfigFieldBuilder().getBuilder(); } + /** * * @@ -1654,6 +1742,7 @@ public Builder clearAutoscalingConfig() { : autoscalingConfig_; } } + /** * * @@ -1666,14 +1755,14 @@ public Builder clearAutoscalingConfig() { * optional .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 7; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> - getAutoscalingConfigFieldBuilder() { + internalGetAutoscalingConfigFieldBuilder() { if (autoscalingConfigBuilder_ == null) { autoscalingConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder>( @@ -1708,6 +1797,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -1724,12 +1814,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(); } + /** * * @@ -1743,6 +1835,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -1763,6 +1856,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1789,6 +1883,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -1805,12 +1900,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_ |= 0x00000040; return internalGetMutableLabels().getMutableMap(); } + /** * * @@ -1831,6 +1928,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000040; return this; } + /** * * @@ -1846,15 +1944,101 @@ public Builder putAllLabels(java.util.Map va return this; } + private int edition_ = 0; + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The enum numeric value on the wire for edition. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public int getEditionValue() { + return edition_; + } + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @param value The enum numeric value on the wire for edition to set. + * @return This builder for chaining. + */ + public Builder setEditionValue(int value) { + edition_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; } + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The edition. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public com.google.spanner.admin.instance.v1.Instance.Edition getEdition() { + com.google.spanner.admin.instance.v1.Instance.Edition result = + com.google.spanner.admin.instance.v1.Instance.Edition.forNumber(edition_); + return result == null + ? com.google.spanner.admin.instance.v1.Instance.Edition.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @param value The edition to set. + * @return This builder for chaining. + */ + public Builder setEdition(com.google.spanner.admin.instance.v1.Instance.Edition value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + edition_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return This builder for chaining. + */ + public Builder clearEdition() { + bitField0_ = (bitField0_ & ~0x00000080); + edition_ = 0; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CreateCloudInstanceAction) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java index cab30a9d925..85a3715f09e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CreateCloudInstanceActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CreateCloudInstanceAction) @@ -36,6 +38,7 @@ public interface CreateCloudInstanceActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -61,6 +64,7 @@ public interface CreateCloudInstanceActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -86,6 +90,7 @@ public interface CreateCloudInstanceActionOrBuilder * @return The instanceConfigId. */ java.lang.String getInstanceConfigId(); + /** * * @@ -111,6 +116,7 @@ public interface CreateCloudInstanceActionOrBuilder * @return Whether the nodeCount field is set. */ boolean hasNodeCount(); + /** * * @@ -136,6 +142,7 @@ public interface CreateCloudInstanceActionOrBuilder * @return Whether the processingUnits field is set. */ boolean hasProcessingUnits(); + /** * * @@ -164,6 +171,7 @@ public interface CreateCloudInstanceActionOrBuilder * @return Whether the autoscalingConfig field is set. */ boolean hasAutoscalingConfig(); + /** * * @@ -179,6 +187,7 @@ public interface CreateCloudInstanceActionOrBuilder * @return The autoscalingConfig. */ com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConfig(); + /** * * @@ -203,6 +212,7 @@ public interface CreateCloudInstanceActionOrBuilder * map<string, string> labels = 5; */ int getLabelsCount(); + /** * * @@ -213,9 +223,11 @@ public interface CreateCloudInstanceActionOrBuilder * map<string, string> labels = 5; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -226,6 +238,7 @@ public interface CreateCloudInstanceActionOrBuilder * map<string, string> labels = 5; */ java.util.Map getLabelsMap(); + /** * * @@ -240,6 +253,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * @@ -250,4 +264,30 @@ java.lang.String getLabelsOrDefault( * map<string, string> labels = 5; */ java.lang.String getLabelsOrThrow(java.lang.String key); + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The enum numeric value on the wire for edition. + */ + int getEditionValue(); + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The edition. + */ + com.google.spanner.admin.instance.v1.Instance.Edition getEdition(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java index f81a3df41bc..6cd1d04f938 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,14 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.CreateUserInstanceConfigAction} */ -public final class CreateUserInstanceConfigAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateUserInstanceConfigAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.CreateUserInstanceConfigAction) CreateUserInstanceConfigActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateUserInstanceConfigAction"); + } + // Use CreateUserInstanceConfigAction.newBuilder() to construct. - private CreateUserInstanceConfigAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateUserInstanceConfigAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +58,13 @@ private CreateUserInstanceConfigAction() { replicas_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateUserInstanceConfigAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_fieldAccessorTable @@ -71,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object userConfigId_ = ""; + /** * * @@ -94,6 +101,7 @@ public java.lang.String getUserConfigId() { return s; } } + /** * * @@ -122,6 +130,7 @@ public com.google.protobuf.ByteString getUserConfigIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -145,6 +154,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -173,6 +183,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object baseConfigId_ = ""; + /** * * @@ -196,6 +207,7 @@ public java.lang.String getBaseConfigId() { return s; } } + /** * * @@ -224,6 +236,7 @@ public com.google.protobuf.ByteString getBaseConfigIdBytes() { @SuppressWarnings("serial") private java.util.List replicas_; + /** * * @@ -237,6 +250,7 @@ public com.google.protobuf.ByteString getBaseConfigIdBytes() { public java.util.List getReplicasList() { return replicas_; } + /** * * @@ -251,6 +265,7 @@ public java.util.List getRepli getReplicasOrBuilderList() { return replicas_; } + /** * * @@ -264,6 +279,7 @@ public java.util.List getRepli public int getReplicasCount() { return replicas_.size(); } + /** * * @@ -277,6 +293,7 @@ public int getReplicasCount() { public com.google.spanner.admin.instance.v1.ReplicaInfo getReplicas(int index) { return replicas_.get(index); } + /** * * @@ -305,14 +322,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userConfigId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, userConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(userConfigId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, userConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(baseConfigId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, baseConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(baseConfigId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, baseConfigId_); } for (int i = 0; i < replicas_.size(); i++) { output.writeMessage(4, replicas_.get(i)); @@ -326,14 +343,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userConfigId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, userConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(userConfigId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, userConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(baseConfigId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, baseConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(baseConfigId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, baseConfigId_); } for (int i = 0; i < replicas_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, replicas_.get(i)); @@ -421,38 +438,38 @@ public static com.google.spanner.executor.v1.CreateUserInstanceConfigAction pars public static com.google.spanner.executor.v1.CreateUserInstanceConfigAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateUserInstanceConfigAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateUserInstanceConfigAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateUserInstanceConfigAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.CreateUserInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.CreateUserInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -476,10 +493,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -489,7 +507,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.CreateUserInstanceConfigAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.CreateUserInstanceConfigAction) com.google.spanner.executor.v1.CreateUserInstanceConfigActionOrBuilder { @@ -499,7 +517,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_CreateUserInstanceConfigAction_fieldAccessorTable @@ -511,7 +529,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.CreateUserInstanceConfigAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -592,39 +610,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.CreateUserInstanceConfigAction) { @@ -673,8 +658,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.CreateUserInstanceConfig replicas_ = other.replicas_; bitField0_ = (bitField0_ & ~0x00000008); replicasBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getReplicasFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetReplicasFieldBuilder() : null; } else { replicasBuilder_.addAllMessages(other.replicas_); @@ -759,6 +744,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object userConfigId_ = ""; + /** * * @@ -781,6 +767,7 @@ public java.lang.String getUserConfigId() { return (java.lang.String) ref; } } + /** * * @@ -803,6 +790,7 @@ public com.google.protobuf.ByteString getUserConfigIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -824,6 +812,7 @@ public Builder setUserConfigId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -841,6 +830,7 @@ public Builder clearUserConfigId() { onChanged(); return this; } + /** * * @@ -865,6 +855,7 @@ public Builder setUserConfigIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -887,6 +878,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -909,6 +901,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -930,6 +923,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -947,6 +941,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -971,6 +966,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object baseConfigId_ = ""; + /** * * @@ -993,6 +989,7 @@ public java.lang.String getBaseConfigId() { return (java.lang.String) ref; } } + /** * * @@ -1015,6 +1012,7 @@ public com.google.protobuf.ByteString getBaseConfigIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1036,6 +1034,7 @@ public Builder setBaseConfigId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1053,6 +1052,7 @@ public Builder clearBaseConfigId() { onChanged(); return this; } + /** * * @@ -1087,7 +1087,7 @@ private void ensureReplicasIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder> @@ -1109,6 +1109,7 @@ public java.util.List getRepli return replicasBuilder_.getMessageList(); } } + /** * * @@ -1125,6 +1126,7 @@ public int getReplicasCount() { return replicasBuilder_.getCount(); } } + /** * * @@ -1141,6 +1143,7 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo getReplicas(int index) { return replicasBuilder_.getMessage(index); } } + /** * * @@ -1163,6 +1166,7 @@ public Builder setReplicas(int index, com.google.spanner.admin.instance.v1.Repli } return this; } + /** * * @@ -1183,6 +1187,7 @@ public Builder setReplicas( } return this; } + /** * * @@ -1205,6 +1210,7 @@ public Builder addReplicas(com.google.spanner.admin.instance.v1.ReplicaInfo valu } return this; } + /** * * @@ -1227,6 +1233,7 @@ public Builder addReplicas(int index, com.google.spanner.admin.instance.v1.Repli } return this; } + /** * * @@ -1247,6 +1254,7 @@ public Builder addReplicas( } return this; } + /** * * @@ -1267,6 +1275,7 @@ public Builder addReplicas( } return this; } + /** * * @@ -1287,6 +1296,7 @@ public Builder addAllReplicas( } return this; } + /** * * @@ -1306,6 +1316,7 @@ public Builder clearReplicas() { } return this; } + /** * * @@ -1325,6 +1336,7 @@ public Builder removeReplicas(int index) { } return this; } + /** * * @@ -1335,8 +1347,9 @@ public Builder removeReplicas(int index) { * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder getReplicasBuilder(int index) { - return getReplicasFieldBuilder().getBuilder(index); + return internalGetReplicasFieldBuilder().getBuilder(index); } + /** * * @@ -1354,6 +1367,7 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu return replicasBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1371,6 +1385,7 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu return java.util.Collections.unmodifiableList(replicas_); } } + /** * * @@ -1381,9 +1396,10 @@ public com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder getReplicasOrBu * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addReplicasBuilder() { - return getReplicasFieldBuilder() + return internalGetReplicasFieldBuilder() .addBuilder(com.google.spanner.admin.instance.v1.ReplicaInfo.getDefaultInstance()); } + /** * * @@ -1394,9 +1410,10 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addReplicasBuild * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; */ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addReplicasBuilder(int index) { - return getReplicasFieldBuilder() + return internalGetReplicasFieldBuilder() .addBuilder(index, com.google.spanner.admin.instance.v1.ReplicaInfo.getDefaultInstance()); } + /** * * @@ -1408,17 +1425,17 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addReplicasBuild */ public java.util.List getReplicasBuilderList() { - return getReplicasFieldBuilder().getBuilderList(); + return internalGetReplicasFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder> - getReplicasFieldBuilder() { + internalGetReplicasFieldBuilder() { if (replicasBuilder_ == null) { replicasBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.admin.instance.v1.ReplicaInfo, com.google.spanner.admin.instance.v1.ReplicaInfo.Builder, com.google.spanner.admin.instance.v1.ReplicaInfoOrBuilder>( @@ -1428,17 +1445,6 @@ public com.google.spanner.admin.instance.v1.ReplicaInfo.Builder addReplicasBuild return replicasBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.CreateUserInstanceConfigAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java index 74cb8b47b12..0f72401a577 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface CreateUserInstanceConfigActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.CreateUserInstanceConfigAction) @@ -36,6 +38,7 @@ public interface CreateUserInstanceConfigActionOrBuilder * @return The userConfigId. */ java.lang.String getUserConfigId(); + /** * * @@ -61,6 +64,7 @@ public interface CreateUserInstanceConfigActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -86,6 +90,7 @@ public interface CreateUserInstanceConfigActionOrBuilder * @return The baseConfigId. */ java.lang.String getBaseConfigId(); + /** * * @@ -109,6 +114,7 @@ public interface CreateUserInstanceConfigActionOrBuilder * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; */ java.util.List getReplicasList(); + /** * * @@ -119,6 +125,7 @@ public interface CreateUserInstanceConfigActionOrBuilder * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; */ com.google.spanner.admin.instance.v1.ReplicaInfo getReplicas(int index); + /** * * @@ -129,6 +136,7 @@ public interface CreateUserInstanceConfigActionOrBuilder * repeated .google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; */ int getReplicasCount(); + /** * * @@ -140,6 +148,7 @@ public interface CreateUserInstanceConfigActionOrBuilder */ java.util.List getReplicasOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java index f8fcada48a4..56b81536c80 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.DataChangeRecord} */ -public final class DataChangeRecord extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DataChangeRecord extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DataChangeRecord) DataChangeRecordOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DataChangeRecord"); + } + // Use DataChangeRecord.newBuilder() to construct. - private DataChangeRecord(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DataChangeRecord(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -49,19 +62,13 @@ private DataChangeRecord() { transactionTag_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DataChangeRecord(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_fieldAccessorTable @@ -87,6 +94,7 @@ public interface ColumnTypeOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -112,6 +120,7 @@ public interface ColumnTypeOrBuilder * @return The type. */ java.lang.String getType(); + /** * * @@ -151,6 +160,7 @@ public interface ColumnTypeOrBuilder */ long getOrdinalPosition(); } + /** * * @@ -160,13 +170,24 @@ public interface ColumnTypeOrBuilder * * Protobuf type {@code google.spanner.executor.v1.DataChangeRecord.ColumnType} */ - public static final class ColumnType extends com.google.protobuf.GeneratedMessageV3 + public static final class ColumnType extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DataChangeRecord.ColumnType) ColumnTypeOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ColumnType"); + } + // Use ColumnType.newBuilder() to construct. - private ColumnType(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ColumnType(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -175,19 +196,13 @@ private ColumnType() { type_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ColumnType(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_fieldAccessorTable @@ -200,6 +215,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -223,6 +239,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -251,6 +268,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private volatile java.lang.Object type_ = ""; + /** * * @@ -274,6 +292,7 @@ public java.lang.String getType() { return s; } } + /** * * @@ -300,6 +319,7 @@ public com.google.protobuf.ByteString getTypeBytes() { public static final int IS_PRIMARY_KEY_FIELD_NUMBER = 3; private boolean isPrimaryKey_ = false; + /** * * @@ -318,6 +338,7 @@ public boolean getIsPrimaryKey() { public static final int ORDINAL_POSITION_FIELD_NUMBER = 4; private long ordinalPosition_ = 0L; + /** * * @@ -348,11 +369,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, type_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(type_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, type_); } if (isPrimaryKey_ != false) { output.writeBool(3, isPrimaryKey_); @@ -369,11 +390,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, type_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(type_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, type_); } if (isPrimaryKey_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, isPrimaryKey_); @@ -462,38 +483,38 @@ public static com.google.spanner.executor.v1.DataChangeRecord.ColumnType parseFr public static com.google.spanner.executor.v1.DataChangeRecord.ColumnType parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord.ColumnType parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DataChangeRecord.ColumnType parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord.ColumnType parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DataChangeRecord.ColumnType parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord.ColumnType parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -517,11 +538,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -531,8 +552,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.executor.v1.DataChangeRecord.ColumnType} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DataChangeRecord.ColumnType) com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder { @@ -542,7 +562,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_ColumnType_fieldAccessorTable @@ -554,7 +574,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.DataChangeRecord.ColumnType.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -618,41 +638,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DataChangeRecord.ColumnType) { @@ -753,6 +738,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -775,6 +761,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -797,6 +784,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -818,6 +806,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -835,6 +824,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -859,6 +849,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private java.lang.Object type_ = ""; + /** * * @@ -881,6 +872,7 @@ public java.lang.String getType() { return (java.lang.String) ref; } } + /** * * @@ -903,6 +895,7 @@ public com.google.protobuf.ByteString getTypeBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -924,6 +917,7 @@ public Builder setType(java.lang.String value) { onChanged(); return this; } + /** * * @@ -941,6 +935,7 @@ public Builder clearType() { onChanged(); return this; } + /** * * @@ -965,6 +960,7 @@ public Builder setTypeBytes(com.google.protobuf.ByteString value) { } private boolean isPrimaryKey_; + /** * * @@ -980,6 +976,7 @@ public Builder setTypeBytes(com.google.protobuf.ByteString value) { public boolean getIsPrimaryKey() { return isPrimaryKey_; } + /** * * @@ -999,6 +996,7 @@ public Builder setIsPrimaryKey(boolean value) { onChanged(); return this; } + /** * * @@ -1018,6 +1016,7 @@ public Builder clearIsPrimaryKey() { } private long ordinalPosition_; + /** * * @@ -1033,6 +1032,7 @@ public Builder clearIsPrimaryKey() { public long getOrdinalPosition() { return ordinalPosition_; } + /** * * @@ -1052,6 +1052,7 @@ public Builder setOrdinalPosition(long value) { onChanged(); return this; } + /** * * @@ -1070,18 +1071,6 @@ public Builder clearOrdinalPosition() { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DataChangeRecord.ColumnType) } @@ -1152,6 +1141,7 @@ public interface ModOrBuilder * @return The keys. */ java.lang.String getKeys(); + /** * * @@ -1178,6 +1168,7 @@ public interface ModOrBuilder * @return The newValues. */ java.lang.String getNewValues(); + /** * * @@ -1205,6 +1196,7 @@ public interface ModOrBuilder * @return The oldValues. */ java.lang.String getOldValues(); + /** * * @@ -1219,6 +1211,7 @@ public interface ModOrBuilder */ com.google.protobuf.ByteString getOldValuesBytes(); } + /** * * @@ -1228,13 +1221,24 @@ public interface ModOrBuilder * * Protobuf type {@code google.spanner.executor.v1.DataChangeRecord.Mod} */ - public static final class Mod extends com.google.protobuf.GeneratedMessageV3 + public static final class Mod extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DataChangeRecord.Mod) ModOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Mod"); + } + // Use Mod.newBuilder() to construct. - private Mod(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Mod(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -1244,19 +1248,13 @@ private Mod() { oldValues_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Mod(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_fieldAccessorTable @@ -1269,6 +1267,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object keys_ = ""; + /** * * @@ -1292,6 +1291,7 @@ public java.lang.String getKeys() { return s; } } + /** * * @@ -1320,6 +1320,7 @@ public com.google.protobuf.ByteString getKeysBytes() { @SuppressWarnings("serial") private volatile java.lang.Object newValues_ = ""; + /** * * @@ -1344,6 +1345,7 @@ public java.lang.String getNewValues() { return s; } } + /** * * @@ -1373,6 +1375,7 @@ public com.google.protobuf.ByteString getNewValuesBytes() { @SuppressWarnings("serial") private volatile java.lang.Object oldValues_ = ""; + /** * * @@ -1397,6 +1400,7 @@ public java.lang.String getOldValues() { return s; } } + /** * * @@ -1436,14 +1440,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keys_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, keys_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(keys_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, keys_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(newValues_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, newValues_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(newValues_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, newValues_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(oldValues_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, oldValues_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(oldValues_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, oldValues_); } getUnknownFields().writeTo(output); } @@ -1454,14 +1458,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keys_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, keys_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(keys_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, keys_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(newValues_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, newValues_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(newValues_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, newValues_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(oldValues_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, oldValues_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(oldValues_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, oldValues_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -1541,38 +1545,38 @@ public static com.google.spanner.executor.v1.DataChangeRecord.Mod parseFrom( public static com.google.spanner.executor.v1.DataChangeRecord.Mod parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord.Mod parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DataChangeRecord.Mod parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord.Mod parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DataChangeRecord.Mod parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord.Mod parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1596,11 +1600,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1610,8 +1614,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.executor.v1.DataChangeRecord.Mod} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DataChangeRecord.Mod) com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder { @@ -1621,7 +1624,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_Mod_fieldAccessorTable @@ -1633,7 +1636,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.DataChangeRecord.Mod.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1691,41 +1694,6 @@ private void buildPartial0(com.google.spanner.executor.v1.DataChangeRecord.Mod r } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DataChangeRecord.Mod) { @@ -1818,6 +1786,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object keys_ = ""; + /** * * @@ -1840,6 +1809,7 @@ public java.lang.String getKeys() { return (java.lang.String) ref; } } + /** * * @@ -1862,6 +1832,7 @@ public com.google.protobuf.ByteString getKeysBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1883,6 +1854,7 @@ public Builder setKeys(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1900,6 +1872,7 @@ public Builder clearKeys() { onChanged(); return this; } + /** * * @@ -1924,6 +1897,7 @@ public Builder setKeysBytes(com.google.protobuf.ByteString value) { } private java.lang.Object newValues_ = ""; + /** * * @@ -1947,6 +1921,7 @@ public java.lang.String getNewValues() { return (java.lang.String) ref; } } + /** * * @@ -1970,6 +1945,7 @@ public com.google.protobuf.ByteString getNewValuesBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1992,6 +1968,7 @@ public Builder setNewValues(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2010,6 +1987,7 @@ public Builder clearNewValues() { onChanged(); return this; } + /** * * @@ -2035,6 +2013,7 @@ public Builder setNewValuesBytes(com.google.protobuf.ByteString value) { } private java.lang.Object oldValues_ = ""; + /** * * @@ -2058,6 +2037,7 @@ public java.lang.String getOldValues() { return (java.lang.String) ref; } } + /** * * @@ -2081,6 +2061,7 @@ public com.google.protobuf.ByteString getOldValuesBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2103,6 +2084,7 @@ public Builder setOldValues(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2121,6 +2103,7 @@ public Builder clearOldValues() { onChanged(); return this; } + /** * * @@ -2145,18 +2128,6 @@ public Builder setOldValuesBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DataChangeRecord.Mod) } @@ -2212,6 +2183,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.Mod getDefaultInstanceFor private int bitField0_; public static final int COMMIT_TIME_FIELD_NUMBER = 1; private com.google.protobuf.Timestamp commitTime_; + /** * * @@ -2227,6 +2199,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.Mod getDefaultInstanceFor public boolean hasCommitTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -2242,6 +2215,7 @@ public boolean hasCommitTime() { public com.google.protobuf.Timestamp getCommitTime() { return commitTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : commitTime_; } + /** * * @@ -2260,6 +2234,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { @SuppressWarnings("serial") private volatile java.lang.Object recordSequence_ = ""; + /** * * @@ -2283,6 +2258,7 @@ public java.lang.String getRecordSequence() { return s; } } + /** * * @@ -2311,6 +2287,7 @@ public com.google.protobuf.ByteString getRecordSequenceBytes() { @SuppressWarnings("serial") private volatile java.lang.Object transactionId_ = ""; + /** * * @@ -2335,6 +2312,7 @@ public java.lang.String getTransactionId() { return s; } } + /** * * @@ -2362,6 +2340,7 @@ public com.google.protobuf.ByteString getTransactionIdBytes() { public static final int IS_LAST_RECORD_FIELD_NUMBER = 4; private boolean isLastRecord_ = false; + /** * * @@ -2383,6 +2362,7 @@ public boolean getIsLastRecord() { @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -2406,6 +2386,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -2434,6 +2415,7 @@ public com.google.protobuf.ByteString getTableBytes() { @SuppressWarnings("serial") private java.util.List columnTypes_; + /** * * @@ -2448,6 +2430,7 @@ public com.google.protobuf.ByteString getTableBytes() { getColumnTypesList() { return columnTypes_; } + /** * * @@ -2463,6 +2446,7 @@ public com.google.protobuf.ByteString getTableBytes() { getColumnTypesOrBuilderList() { return columnTypes_; } + /** * * @@ -2476,6 +2460,7 @@ public com.google.protobuf.ByteString getTableBytes() { public int getColumnTypesCount() { return columnTypes_.size(); } + /** * * @@ -2489,6 +2474,7 @@ public int getColumnTypesCount() { public com.google.spanner.executor.v1.DataChangeRecord.ColumnType getColumnTypes(int index) { return columnTypes_.get(index); } + /** * * @@ -2508,6 +2494,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType getColumnTypes @SuppressWarnings("serial") private java.util.List mods_; + /** * * @@ -2521,6 +2508,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType getColumnTypes public java.util.List getModsList() { return mods_; } + /** * * @@ -2535,6 +2523,7 @@ public java.util.List getMo getModsOrBuilderList() { return mods_; } + /** * * @@ -2548,6 +2537,7 @@ public java.util.List getMo public int getModsCount() { return mods_.size(); } + /** * * @@ -2561,6 +2551,7 @@ public int getModsCount() { public com.google.spanner.executor.v1.DataChangeRecord.Mod getMods(int index) { return mods_.get(index); } + /** * * @@ -2579,6 +2570,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder getModsOrBui @SuppressWarnings("serial") private volatile java.lang.Object modType_ = ""; + /** * * @@ -2602,6 +2594,7 @@ public java.lang.String getModType() { return s; } } + /** * * @@ -2630,6 +2623,7 @@ public com.google.protobuf.ByteString getModTypeBytes() { @SuppressWarnings("serial") private volatile java.lang.Object valueCaptureType_ = ""; + /** * * @@ -2653,6 +2647,7 @@ public java.lang.String getValueCaptureType() { return s; } } + /** * * @@ -2679,6 +2674,7 @@ public com.google.protobuf.ByteString getValueCaptureTypeBytes() { public static final int RECORD_COUNT_FIELD_NUMBER = 10; private long recordCount_ = 0L; + /** * * @@ -2697,6 +2693,7 @@ public long getRecordCount() { public static final int PARTITION_COUNT_FIELD_NUMBER = 11; private long partitionCount_ = 0L; + /** * * @@ -2717,6 +2714,7 @@ public long getPartitionCount() { @SuppressWarnings("serial") private volatile java.lang.Object transactionTag_ = ""; + /** * * @@ -2740,6 +2738,7 @@ public java.lang.String getTransactionTag() { return s; } } + /** * * @@ -2766,6 +2765,7 @@ public com.google.protobuf.ByteString getTransactionTagBytes() { public static final int IS_SYSTEM_TRANSACTION_FIELD_NUMBER = 13; private boolean isSystemTransaction_ = false; + /** * * @@ -2799,17 +2799,17 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(1, getCommitTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recordSequence_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, recordSequence_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, recordSequence_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, transactionId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, transactionId_); } if (isLastRecord_ != false) { output.writeBool(4, isLastRecord_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, table_); } for (int i = 0; i < columnTypes_.size(); i++) { output.writeMessage(6, columnTypes_.get(i)); @@ -2817,11 +2817,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < mods_.size(); i++) { output.writeMessage(7, mods_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(modType_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 8, modType_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(modType_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 8, modType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(valueCaptureType_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 9, valueCaptureType_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(valueCaptureType_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 9, valueCaptureType_); } if (recordCount_ != 0L) { output.writeInt64(10, recordCount_); @@ -2829,8 +2829,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (partitionCount_ != 0L) { output.writeInt64(11, partitionCount_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionTag_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 12, transactionTag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionTag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 12, transactionTag_); } if (isSystemTransaction_ != false) { output.writeBool(13, isSystemTransaction_); @@ -2847,17 +2847,17 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getCommitTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recordSequence_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, recordSequence_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, recordSequence_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, transactionId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, transactionId_); } if (isLastRecord_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, isLastRecord_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, table_); } for (int i = 0; i < columnTypes_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, columnTypes_.get(i)); @@ -2865,11 +2865,11 @@ public int getSerializedSize() { for (int i = 0; i < mods_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, mods_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(modType_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, modType_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(modType_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(8, modType_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(valueCaptureType_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, valueCaptureType_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(valueCaptureType_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(9, valueCaptureType_); } if (recordCount_ != 0L) { size += com.google.protobuf.CodedOutputStream.computeInt64Size(10, recordCount_); @@ -2877,8 +2877,8 @@ public int getSerializedSize() { if (partitionCount_ != 0L) { size += com.google.protobuf.CodedOutputStream.computeInt64Size(11, partitionCount_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionTag_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, transactionTag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionTag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(12, transactionTag_); } if (isSystemTransaction_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(13, isSystemTransaction_); @@ -3000,38 +3000,38 @@ public static com.google.spanner.executor.v1.DataChangeRecord parseFrom( public static com.google.spanner.executor.v1.DataChangeRecord parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DataChangeRecord parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DataChangeRecord parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DataChangeRecord parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -3054,10 +3054,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -3067,7 +3068,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.DataChangeRecord} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DataChangeRecord) com.google.spanner.executor.v1.DataChangeRecordOrBuilder { @@ -3077,7 +3078,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DataChangeRecord_fieldAccessorTable @@ -3091,16 +3092,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getCommitTimeFieldBuilder(); - getColumnTypesFieldBuilder(); - getModsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetCommitTimeFieldBuilder(); + internalGetColumnTypesFieldBuilder(); + internalGetModsFieldBuilder(); } } @@ -3234,39 +3235,6 @@ private void buildPartial0(com.google.spanner.executor.v1.DataChangeRecord resul result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DataChangeRecord) { @@ -3320,8 +3288,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.DataChangeRecord other) columnTypes_ = other.columnTypes_; bitField0_ = (bitField0_ & ~0x00000020); columnTypesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getColumnTypesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetColumnTypesFieldBuilder() : null; } else { columnTypesBuilder_.addAllMessages(other.columnTypes_); @@ -3347,8 +3315,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.DataChangeRecord other) mods_ = other.mods_; bitField0_ = (bitField0_ & ~0x00000040); modsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getModsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetModsFieldBuilder() : null; } else { modsBuilder_.addAllMessages(other.mods_); @@ -3407,7 +3375,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getCommitTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCommitTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -3519,11 +3488,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.Timestamp commitTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> commitTimeBuilder_; + /** * * @@ -3538,6 +3508,7 @@ public Builder mergeFrom( public boolean hasCommitTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -3558,6 +3529,7 @@ public com.google.protobuf.Timestamp getCommitTime() { return commitTimeBuilder_.getMessage(); } } + /** * * @@ -3580,6 +3552,7 @@ public Builder setCommitTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -3599,6 +3572,7 @@ public Builder setCommitTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -3626,6 +3600,7 @@ public Builder mergeCommitTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -3645,6 +3620,7 @@ public Builder clearCommitTime() { onChanged(); return this; } + /** * * @@ -3657,8 +3633,9 @@ public Builder clearCommitTime() { public com.google.protobuf.Timestamp.Builder getCommitTimeBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getCommitTimeFieldBuilder().getBuilder(); + return internalGetCommitTimeFieldBuilder().getBuilder(); } + /** * * @@ -3677,6 +3654,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { : commitTime_; } } + /** * * @@ -3686,14 +3664,14 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { * * .google.protobuf.Timestamp commit_time = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCommitTimeFieldBuilder() { + internalGetCommitTimeFieldBuilder() { if (commitTimeBuilder_ == null) { commitTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -3704,6 +3682,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { } private java.lang.Object recordSequence_ = ""; + /** * * @@ -3726,6 +3705,7 @@ public java.lang.String getRecordSequence() { return (java.lang.String) ref; } } + /** * * @@ -3748,6 +3728,7 @@ public com.google.protobuf.ByteString getRecordSequenceBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3769,6 +3750,7 @@ public Builder setRecordSequence(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3786,6 +3768,7 @@ public Builder clearRecordSequence() { onChanged(); return this; } + /** * * @@ -3810,6 +3793,7 @@ public Builder setRecordSequenceBytes(com.google.protobuf.ByteString value) { } private java.lang.Object transactionId_ = ""; + /** * * @@ -3833,6 +3817,7 @@ public java.lang.String getTransactionId() { return (java.lang.String) ref; } } + /** * * @@ -3856,6 +3841,7 @@ public com.google.protobuf.ByteString getTransactionIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3878,6 +3864,7 @@ public Builder setTransactionId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3896,6 +3883,7 @@ public Builder clearTransactionId() { onChanged(); return this; } + /** * * @@ -3921,6 +3909,7 @@ public Builder setTransactionIdBytes(com.google.protobuf.ByteString value) { } private boolean isLastRecord_; + /** * * @@ -3937,6 +3926,7 @@ public Builder setTransactionIdBytes(com.google.protobuf.ByteString value) { public boolean getIsLastRecord() { return isLastRecord_; } + /** * * @@ -3957,6 +3947,7 @@ public Builder setIsLastRecord(boolean value) { onChanged(); return this; } + /** * * @@ -3977,6 +3968,7 @@ public Builder clearIsLastRecord() { } private java.lang.Object table_ = ""; + /** * * @@ -3999,6 +3991,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -4021,6 +4014,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -4042,6 +4036,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -4059,6 +4054,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -4094,7 +4090,7 @@ private void ensureColumnTypesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord.ColumnType, com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder, com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder> @@ -4118,6 +4114,7 @@ private void ensureColumnTypesIsMutable() { return columnTypesBuilder_.getMessageList(); } } + /** * * @@ -4135,6 +4132,7 @@ public int getColumnTypesCount() { return columnTypesBuilder_.getCount(); } } + /** * * @@ -4152,6 +4150,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType getColumnTypes return columnTypesBuilder_.getMessage(index); } } + /** * * @@ -4176,6 +4175,7 @@ public Builder setColumnTypes( } return this; } + /** * * @@ -4198,6 +4198,7 @@ public Builder setColumnTypes( } return this; } + /** * * @@ -4222,6 +4223,7 @@ public Builder addColumnTypes( } return this; } + /** * * @@ -4246,6 +4248,7 @@ public Builder addColumnTypes( } return this; } + /** * * @@ -4267,6 +4270,7 @@ public Builder addColumnTypes( } return this; } + /** * * @@ -4289,6 +4293,7 @@ public Builder addColumnTypes( } return this; } + /** * * @@ -4311,6 +4316,7 @@ public Builder addAllColumnTypes( } return this; } + /** * * @@ -4331,6 +4337,7 @@ public Builder clearColumnTypes() { } return this; } + /** * * @@ -4351,6 +4358,7 @@ public Builder removeColumnTypes(int index) { } return this; } + /** * * @@ -4363,8 +4371,9 @@ public Builder removeColumnTypes(int index) { */ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder getColumnTypesBuilder( int index) { - return getColumnTypesFieldBuilder().getBuilder(index); + return internalGetColumnTypesFieldBuilder().getBuilder(index); } + /** * * @@ -4383,6 +4392,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder getCol return columnTypesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -4402,6 +4412,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder getCol return java.util.Collections.unmodifiableList(columnTypes_); } } + /** * * @@ -4414,10 +4425,11 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder getCol */ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder addColumnTypesBuilder() { - return getColumnTypesFieldBuilder() + return internalGetColumnTypesFieldBuilder() .addBuilder( com.google.spanner.executor.v1.DataChangeRecord.ColumnType.getDefaultInstance()); } + /** * * @@ -4430,11 +4442,12 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder getCol */ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder addColumnTypesBuilder( int index) { - return getColumnTypesFieldBuilder() + return internalGetColumnTypesFieldBuilder() .addBuilder( index, com.google.spanner.executor.v1.DataChangeRecord.ColumnType.getDefaultInstance()); } + /** * * @@ -4447,17 +4460,17 @@ public com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder addCol */ public java.util.List getColumnTypesBuilderList() { - return getColumnTypesFieldBuilder().getBuilderList(); + return internalGetColumnTypesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord.ColumnType, com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder, com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder> - getColumnTypesFieldBuilder() { + internalGetColumnTypesFieldBuilder() { if (columnTypesBuilder_ == null) { columnTypesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord.ColumnType, com.google.spanner.executor.v1.DataChangeRecord.ColumnType.Builder, com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder>( @@ -4477,7 +4490,7 @@ private void ensureModsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord.Mod, com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder, com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder> @@ -4499,6 +4512,7 @@ public java.util.List getMo return modsBuilder_.getMessageList(); } } + /** * * @@ -4515,6 +4529,7 @@ public int getModsCount() { return modsBuilder_.getCount(); } } + /** * * @@ -4531,6 +4546,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.Mod getMods(int index) { return modsBuilder_.getMessage(index); } } + /** * * @@ -4553,6 +4569,7 @@ public Builder setMods(int index, com.google.spanner.executor.v1.DataChangeRecor } return this; } + /** * * @@ -4573,6 +4590,7 @@ public Builder setMods( } return this; } + /** * * @@ -4595,6 +4613,7 @@ public Builder addMods(com.google.spanner.executor.v1.DataChangeRecord.Mod value } return this; } + /** * * @@ -4617,6 +4636,7 @@ public Builder addMods(int index, com.google.spanner.executor.v1.DataChangeRecor } return this; } + /** * * @@ -4637,6 +4657,7 @@ public Builder addMods( } return this; } + /** * * @@ -4657,6 +4678,7 @@ public Builder addMods( } return this; } + /** * * @@ -4677,6 +4699,7 @@ public Builder addAllMods( } return this; } + /** * * @@ -4696,6 +4719,7 @@ public Builder clearMods() { } return this; } + /** * * @@ -4715,6 +4739,7 @@ public Builder removeMods(int index) { } return this; } + /** * * @@ -4725,8 +4750,9 @@ public Builder removeMods(int index) { * repeated .google.spanner.executor.v1.DataChangeRecord.Mod mods = 7; */ public com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder getModsBuilder(int index) { - return getModsFieldBuilder().getBuilder(index); + return internalGetModsFieldBuilder().getBuilder(index); } + /** * * @@ -4744,6 +4770,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder getModsOrBui return modsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -4761,6 +4788,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder getModsOrBui return java.util.Collections.unmodifiableList(mods_); } } + /** * * @@ -4771,9 +4799,10 @@ public com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder getModsOrBui * repeated .google.spanner.executor.v1.DataChangeRecord.Mod mods = 7; */ public com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder addModsBuilder() { - return getModsFieldBuilder() + return internalGetModsFieldBuilder() .addBuilder(com.google.spanner.executor.v1.DataChangeRecord.Mod.getDefaultInstance()); } + /** * * @@ -4784,10 +4813,11 @@ public com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder addModsBuilde * repeated .google.spanner.executor.v1.DataChangeRecord.Mod mods = 7; */ public com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder addModsBuilder(int index) { - return getModsFieldBuilder() + return internalGetModsFieldBuilder() .addBuilder( index, com.google.spanner.executor.v1.DataChangeRecord.Mod.getDefaultInstance()); } + /** * * @@ -4799,17 +4829,17 @@ public com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder addModsBuilde */ public java.util.List getModsBuilderList() { - return getModsFieldBuilder().getBuilderList(); + return internalGetModsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord.Mod, com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder, com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder> - getModsFieldBuilder() { + internalGetModsFieldBuilder() { if (modsBuilder_ == null) { modsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.DataChangeRecord.Mod, com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder, com.google.spanner.executor.v1.DataChangeRecord.ModOrBuilder>( @@ -4820,6 +4850,7 @@ public com.google.spanner.executor.v1.DataChangeRecord.Mod.Builder addModsBuilde } private java.lang.Object modType_ = ""; + /** * * @@ -4842,6 +4873,7 @@ public java.lang.String getModType() { return (java.lang.String) ref; } } + /** * * @@ -4864,6 +4896,7 @@ public com.google.protobuf.ByteString getModTypeBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -4885,6 +4918,7 @@ public Builder setModType(java.lang.String value) { onChanged(); return this; } + /** * * @@ -4902,6 +4936,7 @@ public Builder clearModType() { onChanged(); return this; } + /** * * @@ -4926,6 +4961,7 @@ public Builder setModTypeBytes(com.google.protobuf.ByteString value) { } private java.lang.Object valueCaptureType_ = ""; + /** * * @@ -4948,6 +4984,7 @@ public java.lang.String getValueCaptureType() { return (java.lang.String) ref; } } + /** * * @@ -4970,6 +5007,7 @@ public com.google.protobuf.ByteString getValueCaptureTypeBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -4991,6 +5029,7 @@ public Builder setValueCaptureType(java.lang.String value) { onChanged(); return this; } + /** * * @@ -5008,6 +5047,7 @@ public Builder clearValueCaptureType() { onChanged(); return this; } + /** * * @@ -5032,6 +5072,7 @@ public Builder setValueCaptureTypeBytes(com.google.protobuf.ByteString value) { } private long recordCount_; + /** * * @@ -5047,6 +5088,7 @@ public Builder setValueCaptureTypeBytes(com.google.protobuf.ByteString value) { public long getRecordCount() { return recordCount_; } + /** * * @@ -5066,6 +5108,7 @@ public Builder setRecordCount(long value) { onChanged(); return this; } + /** * * @@ -5085,6 +5128,7 @@ public Builder clearRecordCount() { } private long partitionCount_; + /** * * @@ -5100,6 +5144,7 @@ public Builder clearRecordCount() { public long getPartitionCount() { return partitionCount_; } + /** * * @@ -5119,6 +5164,7 @@ public Builder setPartitionCount(long value) { onChanged(); return this; } + /** * * @@ -5138,6 +5184,7 @@ public Builder clearPartitionCount() { } private java.lang.Object transactionTag_ = ""; + /** * * @@ -5160,6 +5207,7 @@ public java.lang.String getTransactionTag() { return (java.lang.String) ref; } } + /** * * @@ -5182,6 +5230,7 @@ public com.google.protobuf.ByteString getTransactionTagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -5203,6 +5252,7 @@ public Builder setTransactionTag(java.lang.String value) { onChanged(); return this; } + /** * * @@ -5220,6 +5270,7 @@ public Builder clearTransactionTag() { onChanged(); return this; } + /** * * @@ -5244,6 +5295,7 @@ public Builder setTransactionTagBytes(com.google.protobuf.ByteString value) { } private boolean isSystemTransaction_; + /** * * @@ -5259,6 +5311,7 @@ public Builder setTransactionTagBytes(com.google.protobuf.ByteString value) { public boolean getIsSystemTransaction() { return isSystemTransaction_; } + /** * * @@ -5278,6 +5331,7 @@ public Builder setIsSystemTransaction(boolean value) { onChanged(); return this; } + /** * * @@ -5296,17 +5350,6 @@ public Builder clearIsSystemTransaction() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DataChangeRecord) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java index c140d3a70d8..e14b7c5a006 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface DataChangeRecordOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.DataChangeRecord) @@ -36,6 +38,7 @@ public interface DataChangeRecordOrBuilder * @return Whether the commitTime field is set. */ boolean hasCommitTime(); + /** * * @@ -48,6 +51,7 @@ public interface DataChangeRecordOrBuilder * @return The commitTime. */ com.google.protobuf.Timestamp getCommitTime(); + /** * * @@ -71,6 +75,7 @@ public interface DataChangeRecordOrBuilder * @return The recordSequence. */ java.lang.String getRecordSequence(); + /** * * @@ -97,6 +102,7 @@ public interface DataChangeRecordOrBuilder * @return The transactionId. */ java.lang.String getTransactionId(); + /** * * @@ -137,6 +143,7 @@ public interface DataChangeRecordOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -160,6 +167,7 @@ public interface DataChangeRecordOrBuilder * repeated .google.spanner.executor.v1.DataChangeRecord.ColumnType column_types = 6; */ java.util.List getColumnTypesList(); + /** * * @@ -170,6 +178,7 @@ public interface DataChangeRecordOrBuilder * repeated .google.spanner.executor.v1.DataChangeRecord.ColumnType column_types = 6; */ com.google.spanner.executor.v1.DataChangeRecord.ColumnType getColumnTypes(int index); + /** * * @@ -180,6 +189,7 @@ public interface DataChangeRecordOrBuilder * repeated .google.spanner.executor.v1.DataChangeRecord.ColumnType column_types = 6; */ int getColumnTypesCount(); + /** * * @@ -191,6 +201,7 @@ public interface DataChangeRecordOrBuilder */ java.util.List getColumnTypesOrBuilderList(); + /** * * @@ -213,6 +224,7 @@ com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder getColumnTyp * repeated .google.spanner.executor.v1.DataChangeRecord.Mod mods = 7; */ java.util.List getModsList(); + /** * * @@ -223,6 +235,7 @@ com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder getColumnTyp * repeated .google.spanner.executor.v1.DataChangeRecord.Mod mods = 7; */ com.google.spanner.executor.v1.DataChangeRecord.Mod getMods(int index); + /** * * @@ -233,6 +246,7 @@ com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder getColumnTyp * repeated .google.spanner.executor.v1.DataChangeRecord.Mod mods = 7; */ int getModsCount(); + /** * * @@ -244,6 +258,7 @@ com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder getColumnTyp */ java.util.List getModsOrBuilderList(); + /** * * @@ -267,6 +282,7 @@ com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder getColumnTyp * @return The modType. */ java.lang.String getModType(); + /** * * @@ -292,6 +308,7 @@ com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder getColumnTyp * @return The valueCaptureType. */ java.lang.String getValueCaptureType(); + /** * * @@ -343,6 +360,7 @@ com.google.spanner.executor.v1.DataChangeRecord.ColumnTypeOrBuilder getColumnTyp * @return The transactionTag. */ java.lang.String getTransactionTag(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java index 84dd934f78e..6d26b911de5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.DeleteCloudBackupAction} */ -public final class DeleteCloudBackupAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteCloudBackupAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DeleteCloudBackupAction) DeleteCloudBackupActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteCloudBackupAction"); + } + // Use DeleteCloudBackupAction.newBuilder() to construct. - private DeleteCloudBackupAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteCloudBackupAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private DeleteCloudBackupAction() { backupId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteCloudBackupAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -171,6 +182,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -194,6 +206,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -232,14 +245,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, backupId_); } getUnknownFields().writeTo(output); } @@ -250,14 +263,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, backupId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -337,38 +350,38 @@ public static com.google.spanner.executor.v1.DeleteCloudBackupAction parseFrom( public static com.google.spanner.executor.v1.DeleteCloudBackupAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteCloudBackupAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DeleteCloudBackupAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteCloudBackupAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DeleteCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -392,10 +405,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -405,7 +419,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.DeleteCloudBackupAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DeleteCloudBackupAction) com.google.spanner.executor.v1.DeleteCloudBackupActionOrBuilder { @@ -415,7 +429,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteCloudBackupAction_fieldAccessorTable @@ -427,7 +441,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.DeleteCloudBackupAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -485,39 +499,6 @@ private void buildPartial0(com.google.spanner.executor.v1.DeleteCloudBackupActio } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DeleteCloudBackupAction) { @@ -610,6 +591,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -632,6 +614,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -654,6 +637,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -675,6 +659,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -692,6 +677,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -716,6 +702,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -738,6 +725,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -760,6 +748,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -781,6 +770,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -798,6 +788,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -822,6 +813,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -844,6 +836,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -866,6 +859,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -887,6 +881,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -904,6 +899,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -927,17 +923,6 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DeleteCloudBackupAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java index 08f6225aafc..f896c6a3717 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface DeleteCloudBackupActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.DeleteCloudBackupAction) @@ -36,6 +38,7 @@ public interface DeleteCloudBackupActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface DeleteCloudBackupActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -86,6 +90,7 @@ public interface DeleteCloudBackupActionOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java index f295a72ab96..3a3e5fbd6c5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.DeleteCloudInstanceAction} */ -public final class DeleteCloudInstanceAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteCloudInstanceAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DeleteCloudInstanceAction) DeleteCloudInstanceActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteCloudInstanceAction"); + } + // Use DeleteCloudInstanceAction.newBuilder() to construct. - private DeleteCloudInstanceAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteCloudInstanceAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private DeleteCloudInstanceAction() { projectId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteCloudInstanceAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -91,6 +99,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -119,6 +128,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -142,6 +152,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -180,11 +191,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } getUnknownFields().writeTo(output); } @@ -195,11 +206,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -276,38 +287,38 @@ public static com.google.spanner.executor.v1.DeleteCloudInstanceAction parseFrom public static com.google.spanner.executor.v1.DeleteCloudInstanceAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteCloudInstanceAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DeleteCloudInstanceAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteCloudInstanceAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DeleteCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -331,10 +342,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -344,7 +356,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.DeleteCloudInstanceAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DeleteCloudInstanceAction) com.google.spanner.executor.v1.DeleteCloudInstanceActionOrBuilder { @@ -354,7 +366,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteCloudInstanceAction_fieldAccessorTable @@ -366,7 +378,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.DeleteCloudInstanceAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -420,39 +432,6 @@ private void buildPartial0(com.google.spanner.executor.v1.DeleteCloudInstanceAct } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DeleteCloudInstanceAction) { @@ -534,6 +513,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceId_ = ""; + /** * * @@ -556,6 +536,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -578,6 +559,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -599,6 +581,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -616,6 +599,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -640,6 +624,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -662,6 +647,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -684,6 +670,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -705,6 +692,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -722,6 +710,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -745,17 +734,6 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DeleteCloudInstanceAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java index a5fab50c050..ac90394f58a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface DeleteCloudInstanceActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.DeleteCloudInstanceAction) @@ -36,6 +38,7 @@ public interface DeleteCloudInstanceActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -61,6 +64,7 @@ public interface DeleteCloudInstanceActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java index b3572a35abc..e31d83470e1 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,14 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.DeleteUserInstanceConfigAction} */ -public final class DeleteUserInstanceConfigAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteUserInstanceConfigAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DeleteUserInstanceConfigAction) DeleteUserInstanceConfigActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteUserInstanceConfigAction"); + } + // Use DeleteUserInstanceConfigAction.newBuilder() to construct. - private DeleteUserInstanceConfigAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteUserInstanceConfigAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +56,13 @@ private DeleteUserInstanceConfigAction() { projectId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteUserInstanceConfigAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_fieldAccessorTable @@ -69,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object userConfigId_ = ""; + /** * * @@ -92,6 +99,7 @@ public java.lang.String getUserConfigId() { return s; } } + /** * * @@ -120,6 +128,7 @@ public com.google.protobuf.ByteString getUserConfigIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -143,6 +152,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -181,11 +191,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userConfigId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, userConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(userConfigId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, userConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } getUnknownFields().writeTo(output); } @@ -196,11 +206,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userConfigId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, userConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(userConfigId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, userConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -277,38 +287,38 @@ public static com.google.spanner.executor.v1.DeleteUserInstanceConfigAction pars public static com.google.spanner.executor.v1.DeleteUserInstanceConfigAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteUserInstanceConfigAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DeleteUserInstanceConfigAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteUserInstanceConfigAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DeleteUserInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DeleteUserInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -332,10 +342,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -345,7 +356,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.DeleteUserInstanceConfigAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DeleteUserInstanceConfigAction) com.google.spanner.executor.v1.DeleteUserInstanceConfigActionOrBuilder { @@ -355,7 +366,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DeleteUserInstanceConfigAction_fieldAccessorTable @@ -367,7 +378,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.DeleteUserInstanceConfigAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -423,39 +434,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DeleteUserInstanceConfigAction) { @@ -538,6 +516,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object userConfigId_ = ""; + /** * * @@ -560,6 +539,7 @@ public java.lang.String getUserConfigId() { return (java.lang.String) ref; } } + /** * * @@ -582,6 +562,7 @@ public com.google.protobuf.ByteString getUserConfigIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -603,6 +584,7 @@ public Builder setUserConfigId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -620,6 +602,7 @@ public Builder clearUserConfigId() { onChanged(); return this; } + /** * * @@ -644,6 +627,7 @@ public Builder setUserConfigIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -666,6 +650,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -688,6 +673,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -709,6 +695,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -726,6 +713,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -749,17 +737,6 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DeleteUserInstanceConfigAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java index 5ba94831da6..87afb9605b3 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface DeleteUserInstanceConfigActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.DeleteUserInstanceConfigAction) @@ -36,6 +38,7 @@ public interface DeleteUserInstanceConfigActionOrBuilder * @return The userConfigId. */ java.lang.String getUserConfigId(); + /** * * @@ -61,6 +64,7 @@ public interface DeleteUserInstanceConfigActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java index 8b0f8a21382..19206b84b17 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.executor.v1.DmlAction} */ -public final class DmlAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DmlAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DmlAction) DmlActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DmlAction"); + } + // Use DmlAction.newBuilder() to construct. - private DmlAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DmlAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private DmlAction() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DmlAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DmlAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DmlAction_fieldAccessorTable @@ -64,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int UPDATE_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.QueryAction update_; + /** * * @@ -79,6 +87,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasUpdate() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -96,6 +105,7 @@ public com.google.spanner.executor.v1.QueryAction getUpdate() { ? com.google.spanner.executor.v1.QueryAction.getDefaultInstance() : update_; } + /** * * @@ -114,6 +124,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() public static final int AUTOCOMMIT_IF_SUPPORTED_FIELD_NUMBER = 2; private boolean autocommitIfSupported_ = false; + /** * * @@ -130,6 +141,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() public boolean hasAutocommitIfSupported() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -147,6 +159,45 @@ public boolean getAutocommitIfSupported() { return autocommitIfSupported_; } + public static final int LAST_STATEMENT_FIELD_NUMBER = 3; + private boolean lastStatement_ = false; + + /** + * + * + *
                                +   * Whether to set this DML statement as the last statement in the
                                +   * transaction. The transaction should be committed after processing this DML
                                +   * statement.
                                +   * 
                                + * + * optional bool last_statement = 3; + * + * @return Whether the lastStatement field is set. + */ + @java.lang.Override + public boolean hasLastStatement() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
                                +   * Whether to set this DML statement as the last statement in the
                                +   * transaction. The transaction should be committed after processing this DML
                                +   * statement.
                                +   * 
                                + * + * optional bool last_statement = 3; + * + * @return The lastStatement. + */ + @java.lang.Override + public boolean getLastStatement() { + return lastStatement_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -167,6 +218,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000002) != 0)) { output.writeBool(2, autocommitIfSupported_); } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeBool(3, lastStatement_); + } getUnknownFields().writeTo(output); } @@ -182,6 +236,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, autocommitIfSupported_); } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, lastStatement_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -205,6 +262,10 @@ public boolean equals(final java.lang.Object obj) { if (hasAutocommitIfSupported()) { if (getAutocommitIfSupported() != other.getAutocommitIfSupported()) return false; } + if (hasLastStatement() != other.hasLastStatement()) return false; + if (hasLastStatement()) { + if (getLastStatement() != other.getLastStatement()) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -224,6 +285,10 @@ public int hashCode() { hash = (37 * hash) + AUTOCOMMIT_IF_SUPPORTED_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getAutocommitIfSupported()); } + if (hasLastStatement()) { + hash = (37 * hash) + LAST_STATEMENT_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getLastStatement()); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -266,38 +331,38 @@ public static com.google.spanner.executor.v1.DmlAction parseFrom( public static com.google.spanner.executor.v1.DmlAction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DmlAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DmlAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DmlAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DmlAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DmlAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -320,10 +385,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -333,7 +399,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.DmlAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DmlAction) com.google.spanner.executor.v1.DmlActionOrBuilder { @@ -343,7 +409,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DmlAction_fieldAccessorTable @@ -357,14 +423,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getUpdateFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetUpdateFieldBuilder(); } } @@ -378,6 +444,7 @@ public Builder clear() { updateBuilder_ = null; } autocommitIfSupported_ = false; + lastStatement_ = false; return this; } @@ -423,42 +490,13 @@ private void buildPartial0(com.google.spanner.executor.v1.DmlAction result) { result.autocommitIfSupported_ = autocommitIfSupported_; to_bitField0_ |= 0x00000002; } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.lastStatement_ = lastStatement_; + to_bitField0_ |= 0x00000004; + } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DmlAction) { @@ -477,6 +515,9 @@ public Builder mergeFrom(com.google.spanner.executor.v1.DmlAction other) { if (other.hasAutocommitIfSupported()) { setAutocommitIfSupported(other.getAutocommitIfSupported()); } + if (other.hasLastStatement()) { + setLastStatement(other.getLastStatement()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -505,7 +546,7 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getUpdateFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetUpdateFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -515,6 +556,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000002; break; } // case 16 + case 24: + { + lastStatement_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -535,11 +582,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.QueryAction update_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> updateBuilder_; + /** * * @@ -554,6 +602,7 @@ public Builder mergeFrom( public boolean hasUpdate() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -574,6 +623,7 @@ public com.google.spanner.executor.v1.QueryAction getUpdate() { return updateBuilder_.getMessage(); } } + /** * * @@ -596,6 +646,7 @@ public Builder setUpdate(com.google.spanner.executor.v1.QueryAction value) { onChanged(); return this; } + /** * * @@ -615,6 +666,7 @@ public Builder setUpdate(com.google.spanner.executor.v1.QueryAction.Builder buil onChanged(); return this; } + /** * * @@ -642,6 +694,7 @@ public Builder mergeUpdate(com.google.spanner.executor.v1.QueryAction value) { } return this; } + /** * * @@ -661,6 +714,7 @@ public Builder clearUpdate() { onChanged(); return this; } + /** * * @@ -673,8 +727,9 @@ public Builder clearUpdate() { public com.google.spanner.executor.v1.QueryAction.Builder getUpdateBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getUpdateFieldBuilder().getBuilder(); + return internalGetUpdateFieldBuilder().getBuilder(); } + /** * * @@ -693,6 +748,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() : update_; } } + /** * * @@ -702,14 +758,14 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() * * .google.spanner.executor.v1.QueryAction update = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> - getUpdateFieldBuilder() { + internalGetUpdateFieldBuilder() { if (updateBuilder_ == null) { updateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder>( @@ -720,6 +776,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() } private boolean autocommitIfSupported_; + /** * * @@ -736,6 +793,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() public boolean hasAutocommitIfSupported() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -752,6 +810,7 @@ public boolean hasAutocommitIfSupported() { public boolean getAutocommitIfSupported() { return autocommitIfSupported_; } + /** * * @@ -772,6 +831,7 @@ public Builder setAutocommitIfSupported(boolean value) { onChanged(); return this; } + /** * * @@ -791,15 +851,84 @@ public Builder clearAutocommitIfSupported() { return this; } + private boolean lastStatement_; + + /** + * + * + *
                                +     * Whether to set this DML statement as the last statement in the
                                +     * transaction. The transaction should be committed after processing this DML
                                +     * statement.
                                +     * 
                                + * + * optional bool last_statement = 3; + * + * @return Whether the lastStatement field is set. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean hasLastStatement() { + return ((bitField0_ & 0x00000004) != 0); } + /** + * + * + *
                                +     * Whether to set this DML statement as the last statement in the
                                +     * transaction. The transaction should be committed after processing this DML
                                +     * statement.
                                +     * 
                                + * + * optional bool last_statement = 3; + * + * @return The lastStatement. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public boolean getLastStatement() { + return lastStatement_; + } + + /** + * + * + *
                                +     * Whether to set this DML statement as the last statement in the
                                +     * transaction. The transaction should be committed after processing this DML
                                +     * statement.
                                +     * 
                                + * + * optional bool last_statement = 3; + * + * @param value The lastStatement to set. + * @return This builder for chaining. + */ + public Builder setLastStatement(boolean value) { + + lastStatement_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Whether to set this DML statement as the last statement in the
                                +     * transaction. The transaction should be committed after processing this DML
                                +     * statement.
                                +     * 
                                + * + * optional bool last_statement = 3; + * + * @return This builder for chaining. + */ + public Builder clearLastStatement() { + bitField0_ = (bitField0_ & ~0x00000004); + lastStatement_ = false; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DmlAction) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java index a612bd0367e..9f4ec9ebc82 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface DmlActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.DmlAction) @@ -36,6 +38,7 @@ public interface DmlActionOrBuilder * @return Whether the update field is set. */ boolean hasUpdate(); + /** * * @@ -48,6 +51,7 @@ public interface DmlActionOrBuilder * @return The update. */ com.google.spanner.executor.v1.QueryAction getUpdate(); + /** * * @@ -72,6 +76,7 @@ public interface DmlActionOrBuilder * @return Whether the autocommitIfSupported field is set. */ boolean hasAutocommitIfSupported(); + /** * * @@ -85,4 +90,34 @@ public interface DmlActionOrBuilder * @return The autocommitIfSupported. */ boolean getAutocommitIfSupported(); + + /** + * + * + *
                                +   * Whether to set this DML statement as the last statement in the
                                +   * transaction. The transaction should be committed after processing this DML
                                +   * statement.
                                +   * 
                                + * + * optional bool last_statement = 3; + * + * @return Whether the lastStatement field is set. + */ + boolean hasLastStatement(); + + /** + * + * + *
                                +   * Whether to set this DML statement as the last statement in the
                                +   * transaction. The transaction should be committed after processing this DML
                                +   * statement.
                                +   * 
                                + * + * optional bool last_statement = 3; + * + * @return The lastStatement. + */ + boolean getLastStatement(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java index aa5b68d1ffb..735e11106b7 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.DropCloudDatabaseAction} */ -public final class DropCloudDatabaseAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DropCloudDatabaseAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.DropCloudDatabaseAction) DropCloudDatabaseActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DropCloudDatabaseAction"); + } + // Use DropCloudDatabaseAction.newBuilder() to construct. - private DropCloudDatabaseAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DropCloudDatabaseAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private DropCloudDatabaseAction() { databaseId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DropCloudDatabaseAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -171,6 +182,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -194,6 +206,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -232,14 +245,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, databaseId_); } getUnknownFields().writeTo(output); } @@ -250,14 +263,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, databaseId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -337,38 +350,38 @@ public static com.google.spanner.executor.v1.DropCloudDatabaseAction parseFrom( public static com.google.spanner.executor.v1.DropCloudDatabaseAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DropCloudDatabaseAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DropCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DropCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.DropCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.DropCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -392,10 +405,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -405,7 +419,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.DropCloudDatabaseAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.DropCloudDatabaseAction) com.google.spanner.executor.v1.DropCloudDatabaseActionOrBuilder { @@ -415,7 +429,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_DropCloudDatabaseAction_fieldAccessorTable @@ -427,7 +441,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.DropCloudDatabaseAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -485,39 +499,6 @@ private void buildPartial0(com.google.spanner.executor.v1.DropCloudDatabaseActio } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.DropCloudDatabaseAction) { @@ -610,6 +591,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceId_ = ""; + /** * * @@ -632,6 +614,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -654,6 +637,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -675,6 +659,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -692,6 +677,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -716,6 +702,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -738,6 +725,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -760,6 +748,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -781,6 +770,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -798,6 +788,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -822,6 +813,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -844,6 +836,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -866,6 +859,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -887,6 +881,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -904,6 +899,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -927,17 +923,6 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.DropCloudDatabaseAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java index c0cf24374b5..e4ab5af63ad 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface DropCloudDatabaseActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.DropCloudDatabaseAction) @@ -36,6 +38,7 @@ public interface DropCloudDatabaseActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -61,6 +64,7 @@ public interface DropCloudDatabaseActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -86,6 +90,7 @@ public interface DropCloudDatabaseActionOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java index 35bc4936dbb..f605cdc4132 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ExecuteChangeStreamQuery} */ -public final class ExecuteChangeStreamQuery extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ExecuteChangeStreamQuery extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ExecuteChangeStreamQuery) ExecuteChangeStreamQueryOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExecuteChangeStreamQuery"); + } + // Use ExecuteChangeStreamQuery.newBuilder() to construct. - private ExecuteChangeStreamQuery(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ExecuteChangeStreamQuery(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private ExecuteChangeStreamQuery() { cloudDatabaseRole_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ExecuteChangeStreamQuery(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int START_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -136,6 +146,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasStartTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -152,6 +163,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -169,6 +181,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -185,6 +198,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -201,6 +215,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -220,6 +235,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { @SuppressWarnings("serial") private volatile java.lang.Object partitionToken_ = ""; + /** * * @@ -236,6 +252,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public boolean hasPartitionToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -260,6 +277,7 @@ public java.lang.String getPartitionToken() { return s; } } + /** * * @@ -290,6 +308,7 @@ public com.google.protobuf.ByteString getPartitionTokenBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList readOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -304,6 +323,7 @@ public com.google.protobuf.ByteString getPartitionTokenBytes() { public com.google.protobuf.ProtocolStringList getReadOptionsList() { return readOptions_; } + /** * * @@ -318,6 +338,7 @@ public com.google.protobuf.ProtocolStringList getReadOptionsList() { public int getReadOptionsCount() { return readOptions_.size(); } + /** * * @@ -333,6 +354,7 @@ public int getReadOptionsCount() { public java.lang.String getReadOptions(int index) { return readOptions_.get(index); } + /** * * @@ -351,6 +373,7 @@ public com.google.protobuf.ByteString getReadOptionsBytes(int index) { public static final int HEARTBEAT_MILLISECONDS_FIELD_NUMBER = 6; private int heartbeatMilliseconds_ = 0; + /** * * @@ -367,6 +390,7 @@ public com.google.protobuf.ByteString getReadOptionsBytes(int index) { public boolean hasHeartbeatMilliseconds() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -386,6 +410,7 @@ public int getHeartbeatMilliseconds() { public static final int DEADLINE_SECONDS_FIELD_NUMBER = 7; private long deadlineSeconds_ = 0L; + /** * * @@ -401,6 +426,7 @@ public int getHeartbeatMilliseconds() { public boolean hasDeadlineSeconds() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -421,6 +447,7 @@ public long getDeadlineSeconds() { @SuppressWarnings("serial") private volatile java.lang.Object cloudDatabaseRole_ = ""; + /** * * @@ -438,6 +465,7 @@ public long getDeadlineSeconds() { public boolean hasCloudDatabaseRole() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -463,6 +491,7 @@ public java.lang.String getCloudDatabaseRole() { return s; } } + /** * * @@ -503,8 +532,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getStartTime()); @@ -513,10 +542,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeMessage(3, getEndTime()); } if (((bitField0_ & 0x00000004) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, partitionToken_); + com.google.protobuf.GeneratedMessage.writeString(output, 4, partitionToken_); } for (int i = 0; i < readOptions_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, readOptions_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 5, readOptions_.getRaw(i)); } if (((bitField0_ & 0x00000008) != 0)) { output.writeInt32(6, heartbeatMilliseconds_); @@ -525,7 +554,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeInt64(7, deadlineSeconds_); } if (((bitField0_ & 0x00000020) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 8, cloudDatabaseRole_); + com.google.protobuf.GeneratedMessage.writeString(output, 8, cloudDatabaseRole_); } getUnknownFields().writeTo(output); } @@ -536,8 +565,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getStartTime()); @@ -546,7 +575,7 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getEndTime()); } if (((bitField0_ & 0x00000004) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, partitionToken_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, partitionToken_); } { int dataSize = 0; @@ -563,7 +592,7 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeInt64Size(7, deadlineSeconds_); } if (((bitField0_ & 0x00000020) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, cloudDatabaseRole_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(8, cloudDatabaseRole_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -690,38 +719,38 @@ public static com.google.spanner.executor.v1.ExecuteChangeStreamQuery parseFrom( public static com.google.spanner.executor.v1.ExecuteChangeStreamQuery parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ExecuteChangeStreamQuery parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ExecuteChangeStreamQuery parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ExecuteChangeStreamQuery parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ExecuteChangeStreamQuery parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ExecuteChangeStreamQuery parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -745,10 +774,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -758,7 +788,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ExecuteChangeStreamQuery} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ExecuteChangeStreamQuery) com.google.spanner.executor.v1.ExecuteChangeStreamQueryOrBuilder { @@ -768,7 +798,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ExecuteChangeStreamQuery_fieldAccessorTable @@ -782,15 +812,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getStartTimeFieldBuilder(); - getEndTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStartTimeFieldBuilder(); + internalGetEndTimeFieldBuilder(); } } @@ -885,39 +915,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ExecuteChangeStreamQue result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ExecuteChangeStreamQuery) { @@ -1002,13 +999,14 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getStartTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -1063,6 +1061,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -1085,6 +1084,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1107,6 +1107,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1128,6 +1129,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1145,6 +1147,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -1169,11 +1172,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp startTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -1189,6 +1193,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasStartTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1208,6 +1213,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -1231,6 +1237,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1251,6 +1258,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -1279,6 +1287,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1299,6 +1308,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -1312,8 +1322,9 @@ public Builder clearStartTime() { public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStartTimeFieldBuilder().getBuilder(); + return internalGetStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -1331,6 +1342,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -1341,14 +1353,14 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { * * .google.protobuf.Timestamp start_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getStartTimeFieldBuilder() { + internalGetStartTimeFieldBuilder() { if (startTimeBuilder_ == null) { startTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1359,11 +1371,12 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { } private com.google.protobuf.Timestamp endTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -1379,6 +1392,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1398,6 +1412,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -1421,6 +1436,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1441,6 +1457,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1469,6 +1486,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1489,6 +1507,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -1502,8 +1521,9 @@ public Builder clearEndTime() { public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getEndTimeFieldBuilder().getBuilder(); + return internalGetEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -1521,6 +1541,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1531,14 +1552,14 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { * * optional .google.protobuf.Timestamp end_time = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getEndTimeFieldBuilder() { + internalGetEndTimeFieldBuilder() { if (endTimeBuilder_ == null) { endTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1549,6 +1570,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { } private java.lang.Object partitionToken_ = ""; + /** * * @@ -1564,6 +1586,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public boolean hasPartitionToken() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1587,6 +1610,7 @@ public java.lang.String getPartitionToken() { return (java.lang.String) ref; } } + /** * * @@ -1610,6 +1634,7 @@ public com.google.protobuf.ByteString getPartitionTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1632,6 +1657,7 @@ public Builder setPartitionToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1650,6 +1676,7 @@ public Builder clearPartitionToken() { onChanged(); return this; } + /** * * @@ -1683,6 +1710,7 @@ private void ensureReadOptionsIsMutable() { } bitField0_ |= 0x00000010; } + /** * * @@ -1698,6 +1726,7 @@ public com.google.protobuf.ProtocolStringList getReadOptionsList() { readOptions_.makeImmutable(); return readOptions_; } + /** * * @@ -1712,6 +1741,7 @@ public com.google.protobuf.ProtocolStringList getReadOptionsList() { public int getReadOptionsCount() { return readOptions_.size(); } + /** * * @@ -1727,6 +1757,7 @@ public int getReadOptionsCount() { public java.lang.String getReadOptions(int index) { return readOptions_.get(index); } + /** * * @@ -1742,6 +1773,7 @@ public java.lang.String getReadOptions(int index) { public com.google.protobuf.ByteString getReadOptionsBytes(int index) { return readOptions_.getByteString(index); } + /** * * @@ -1765,6 +1797,7 @@ public Builder setReadOptions(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1787,6 +1820,7 @@ public Builder addReadOptions(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1806,6 +1840,7 @@ public Builder addAllReadOptions(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1824,6 +1859,7 @@ public Builder clearReadOptions() { onChanged(); return this; } + /** * * @@ -1849,6 +1885,7 @@ public Builder addReadOptionsBytes(com.google.protobuf.ByteString value) { } private int heartbeatMilliseconds_; + /** * * @@ -1865,6 +1902,7 @@ public Builder addReadOptionsBytes(com.google.protobuf.ByteString value) { public boolean hasHeartbeatMilliseconds() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1881,6 +1919,7 @@ public boolean hasHeartbeatMilliseconds() { public int getHeartbeatMilliseconds() { return heartbeatMilliseconds_; } + /** * * @@ -1901,6 +1940,7 @@ public Builder setHeartbeatMilliseconds(int value) { onChanged(); return this; } + /** * * @@ -1921,6 +1961,7 @@ public Builder clearHeartbeatMilliseconds() { } private long deadlineSeconds_; + /** * * @@ -1936,6 +1977,7 @@ public Builder clearHeartbeatMilliseconds() { public boolean hasDeadlineSeconds() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -1951,6 +1993,7 @@ public boolean hasDeadlineSeconds() { public long getDeadlineSeconds() { return deadlineSeconds_; } + /** * * @@ -1970,6 +2013,7 @@ public Builder setDeadlineSeconds(long value) { onChanged(); return this; } + /** * * @@ -1989,6 +2033,7 @@ public Builder clearDeadlineSeconds() { } private java.lang.Object cloudDatabaseRole_ = ""; + /** * * @@ -2005,6 +2050,7 @@ public Builder clearDeadlineSeconds() { public boolean hasCloudDatabaseRole() { return ((bitField0_ & 0x00000080) != 0); } + /** * * @@ -2029,6 +2075,7 @@ public java.lang.String getCloudDatabaseRole() { return (java.lang.String) ref; } } + /** * * @@ -2053,6 +2100,7 @@ public com.google.protobuf.ByteString getCloudDatabaseRoleBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2076,6 +2124,7 @@ public Builder setCloudDatabaseRole(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2095,6 +2144,7 @@ public Builder clearCloudDatabaseRole() { onChanged(); return this; } + /** * * @@ -2120,17 +2170,6 @@ public Builder setCloudDatabaseRoleBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ExecuteChangeStreamQuery) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java index afc2fca4a3d..8883d60f917 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ExecuteChangeStreamQueryOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ExecuteChangeStreamQuery) @@ -36,6 +38,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -62,6 +65,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -75,6 +79,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -100,6 +105,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -113,6 +119,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * @@ -138,6 +145,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return Whether the partitionToken field is set. */ boolean hasPartitionToken(); + /** * * @@ -151,6 +159,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return The partitionToken. */ java.lang.String getPartitionToken(); + /** * * @@ -177,6 +186,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return A list containing the readOptions. */ java.util.List getReadOptionsList(); + /** * * @@ -189,6 +199,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return The count of readOptions. */ int getReadOptionsCount(); + /** * * @@ -202,6 +213,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return The readOptions at the given index. */ java.lang.String getReadOptions(int index); + /** * * @@ -229,6 +241,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return Whether the heartbeatMilliseconds field is set. */ boolean hasHeartbeatMilliseconds(); + /** * * @@ -255,6 +268,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return Whether the deadlineSeconds field is set. */ boolean hasDeadlineSeconds(); + /** * * @@ -282,6 +296,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return Whether the cloudDatabaseRole field is set. */ boolean hasCloudDatabaseRole(); + /** * * @@ -296,6 +311,7 @@ public interface ExecuteChangeStreamQueryOrBuilder * @return The cloudDatabaseRole. */ java.lang.String getCloudDatabaseRole(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java index f69dc662c6c..873ea820e11 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -30,31 +31,37 @@ * * Protobuf type {@code google.spanner.executor.v1.ExecutePartitionAction} */ -public final class ExecutePartitionAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ExecutePartitionAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ExecutePartitionAction) ExecutePartitionActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExecutePartitionAction"); + } + // Use ExecutePartitionAction.newBuilder() to construct. - private ExecutePartitionAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ExecutePartitionAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private ExecutePartitionAction() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ExecutePartitionAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ExecutePartitionAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ExecutePartitionAction_fieldAccessorTable @@ -66,6 +73,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PARTITION_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.BatchPartition partition_; + /** * * @@ -81,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasPartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +107,7 @@ public com.google.spanner.executor.v1.BatchPartition getPartition() { ? com.google.spanner.executor.v1.BatchPartition.getDefaultInstance() : partition_; } + /** * * @@ -220,38 +230,38 @@ public static com.google.spanner.executor.v1.ExecutePartitionAction parseFrom( public static com.google.spanner.executor.v1.ExecutePartitionAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ExecutePartitionAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ExecutePartitionAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ExecutePartitionAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ExecutePartitionAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ExecutePartitionAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -275,10 +285,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -290,7 +301,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ExecutePartitionAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ExecutePartitionAction) com.google.spanner.executor.v1.ExecutePartitionActionOrBuilder { @@ -300,7 +311,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ExecutePartitionAction_fieldAccessorTable @@ -314,14 +325,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getPartitionFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPartitionFieldBuilder(); } } @@ -378,39 +389,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ExecutePartitionAction result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ExecutePartitionAction) { @@ -455,7 +433,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getPartitionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPartitionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -479,11 +458,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.BatchPartition partition_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.BatchPartition, com.google.spanner.executor.v1.BatchPartition.Builder, com.google.spanner.executor.v1.BatchPartitionOrBuilder> partitionBuilder_; + /** * * @@ -498,6 +478,7 @@ public Builder mergeFrom( public boolean hasPartition() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -518,6 +499,7 @@ public com.google.spanner.executor.v1.BatchPartition getPartition() { return partitionBuilder_.getMessage(); } } + /** * * @@ -540,6 +522,7 @@ public Builder setPartition(com.google.spanner.executor.v1.BatchPartition value) onChanged(); return this; } + /** * * @@ -560,6 +543,7 @@ public Builder setPartition( onChanged(); return this; } + /** * * @@ -587,6 +571,7 @@ public Builder mergePartition(com.google.spanner.executor.v1.BatchPartition valu } return this; } + /** * * @@ -606,6 +591,7 @@ public Builder clearPartition() { onChanged(); return this; } + /** * * @@ -618,8 +604,9 @@ public Builder clearPartition() { public com.google.spanner.executor.v1.BatchPartition.Builder getPartitionBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getPartitionFieldBuilder().getBuilder(); + return internalGetPartitionFieldBuilder().getBuilder(); } + /** * * @@ -638,6 +625,7 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getPartitionOrBuil : partition_; } } + /** * * @@ -647,14 +635,14 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getPartitionOrBuil * * .google.spanner.executor.v1.BatchPartition partition = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.BatchPartition, com.google.spanner.executor.v1.BatchPartition.Builder, com.google.spanner.executor.v1.BatchPartitionOrBuilder> - getPartitionFieldBuilder() { + internalGetPartitionFieldBuilder() { if (partitionBuilder_ == null) { partitionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.BatchPartition, com.google.spanner.executor.v1.BatchPartition.Builder, com.google.spanner.executor.v1.BatchPartitionOrBuilder>( @@ -664,17 +652,6 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getPartitionOrBuil return partitionBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ExecutePartitionAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java index 2dba093d25d..d68a98c2da9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ExecutePartitionActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ExecutePartitionAction) @@ -36,6 +38,7 @@ public interface ExecutePartitionActionOrBuilder * @return Whether the partition field is set. */ boolean hasPartition(); + /** * * @@ -48,6 +51,7 @@ public interface ExecutePartitionActionOrBuilder * @return The partition. */ com.google.spanner.executor.v1.BatchPartition getPartition(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java index 49796934a5d..2b986acb481 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.FinishTransactionAction} */ -public final class FinishTransactionAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class FinishTransactionAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.FinishTransactionAction) FinishTransactionActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "FinishTransactionAction"); + } + // Use FinishTransactionAction.newBuilder() to construct. - private FinishTransactionAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private FinishTransactionAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private FinishTransactionAction() { mode_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new FinishTransactionAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_FinishTransactionAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_FinishTransactionAction_fieldAccessorTable @@ -106,6 +113,16 @@ public enum Mode implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Mode"); + } + /** * * @@ -116,6 +133,7 @@ public enum Mode implements com.google.protobuf.ProtocolMessageEnum { * MODE_UNSPECIFIED = 0; */ public static final int MODE_UNSPECIFIED_VALUE = 0; + /** * * @@ -126,6 +144,7 @@ public enum Mode implements com.google.protobuf.ProtocolMessageEnum { * COMMIT = 1; */ public static final int COMMIT_VALUE = 1; + /** * * @@ -195,7 +214,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.executor.v1.FinishTransactionAction.getDescriptor() .getEnumTypes() .get(0); @@ -224,6 +243,7 @@ private Mode(int value) { public static final int MODE_FIELD_NUMBER = 1; private int mode_ = 0; + /** * * @@ -240,6 +260,7 @@ private Mode(int value) { public int getModeValue() { return mode_; } + /** * * @@ -366,38 +387,38 @@ public static com.google.spanner.executor.v1.FinishTransactionAction parseFrom( public static com.google.spanner.executor.v1.FinishTransactionAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.FinishTransactionAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.FinishTransactionAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.FinishTransactionAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.FinishTransactionAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.FinishTransactionAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -421,10 +442,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -434,7 +456,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.FinishTransactionAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.FinishTransactionAction) com.google.spanner.executor.v1.FinishTransactionActionOrBuilder { @@ -444,7 +466,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_FinishTransactionAction_fieldAccessorTable @@ -456,7 +478,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.FinishTransactionAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -506,39 +528,6 @@ private void buildPartial0(com.google.spanner.executor.v1.FinishTransactionActio } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.FinishTransactionAction) { @@ -607,6 +596,7 @@ public Builder mergeFrom( private int bitField0_; private int mode_ = 0; + /** * * @@ -623,6 +613,7 @@ public Builder mergeFrom( public int getModeValue() { return mode_; } + /** * * @@ -642,6 +633,7 @@ public Builder setModeValue(int value) { onChanged(); return this; } + /** * * @@ -662,6 +654,7 @@ public com.google.spanner.executor.v1.FinishTransactionAction.Mode getMode() { ? com.google.spanner.executor.v1.FinishTransactionAction.Mode.UNRECOGNIZED : result; } + /** * * @@ -684,6 +677,7 @@ public Builder setMode(com.google.spanner.executor.v1.FinishTransactionAction.Mo onChanged(); return this; } + /** * * @@ -703,17 +697,6 @@ public Builder clearMode() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.FinishTransactionAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java index 195482c8757..5192a3203e2 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface FinishTransactionActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.FinishTransactionAction) @@ -37,6 +39,7 @@ public interface FinishTransactionActionOrBuilder * @return The enum numeric value on the wire for mode. */ int getModeValue(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java index 88fd4928884..86782df7640 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,32 +30,38 @@ * * Protobuf type {@code google.spanner.executor.v1.GenerateDbPartitionsForQueryAction} */ -public final class GenerateDbPartitionsForQueryAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GenerateDbPartitionsForQueryAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.GenerateDbPartitionsForQueryAction) GenerateDbPartitionsForQueryActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GenerateDbPartitionsForQueryAction"); + } + // Use GenerateDbPartitionsForQueryAction.newBuilder() to construct. private GenerateDbPartitionsForQueryAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private GenerateDbPartitionsForQueryAction() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GenerateDbPartitionsForQueryAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_fieldAccessorTable @@ -66,6 +73,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int QUERY_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.QueryAction query_; + /** * * @@ -81,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasQuery() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +107,7 @@ public com.google.spanner.executor.v1.QueryAction getQuery() { ? com.google.spanner.executor.v1.QueryAction.getDefaultInstance() : query_; } + /** * * @@ -116,6 +126,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { public static final int DESIRED_BYTES_PER_PARTITION_FIELD_NUMBER = 2; private long desiredBytesPerPartition_ = 0L; + /** * * @@ -132,6 +143,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { public boolean hasDesiredBytesPerPartition() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -269,39 +281,39 @@ public static com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction public static com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -325,10 +337,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -339,7 +352,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.GenerateDbPartitionsForQueryAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.GenerateDbPartitionsForQueryAction) com.google.spanner.executor.v1.GenerateDbPartitionsForQueryActionOrBuilder { @@ -349,7 +362,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GenerateDbPartitionsForQueryAction_fieldAccessorTable @@ -364,14 +377,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getQueryFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetQueryFieldBuilder(); } } @@ -435,39 +448,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction) { @@ -517,7 +497,7 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getQueryFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetQueryFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -547,11 +527,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.QueryAction query_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> queryBuilder_; + /** * * @@ -566,6 +547,7 @@ public Builder mergeFrom( public boolean hasQuery() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -586,6 +568,7 @@ public com.google.spanner.executor.v1.QueryAction getQuery() { return queryBuilder_.getMessage(); } } + /** * * @@ -608,6 +591,7 @@ public Builder setQuery(com.google.spanner.executor.v1.QueryAction value) { onChanged(); return this; } + /** * * @@ -627,6 +611,7 @@ public Builder setQuery(com.google.spanner.executor.v1.QueryAction.Builder build onChanged(); return this; } + /** * * @@ -654,6 +639,7 @@ public Builder mergeQuery(com.google.spanner.executor.v1.QueryAction value) { } return this; } + /** * * @@ -673,6 +659,7 @@ public Builder clearQuery() { onChanged(); return this; } + /** * * @@ -685,8 +672,9 @@ public Builder clearQuery() { public com.google.spanner.executor.v1.QueryAction.Builder getQueryBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getQueryFieldBuilder().getBuilder(); + return internalGetQueryFieldBuilder().getBuilder(); } + /** * * @@ -705,6 +693,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { : query_; } } + /** * * @@ -714,14 +703,14 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { * * .google.spanner.executor.v1.QueryAction query = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> - getQueryFieldBuilder() { + internalGetQueryFieldBuilder() { if (queryBuilder_ == null) { queryBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder>( @@ -732,6 +721,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { } private long desiredBytesPerPartition_; + /** * * @@ -748,6 +738,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { public boolean hasDesiredBytesPerPartition() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -764,6 +755,7 @@ public boolean hasDesiredBytesPerPartition() { public long getDesiredBytesPerPartition() { return desiredBytesPerPartition_; } + /** * * @@ -784,6 +776,7 @@ public Builder setDesiredBytesPerPartition(long value) { onChanged(); return this; } + /** * * @@ -803,17 +796,6 @@ public Builder clearDesiredBytesPerPartition() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.GenerateDbPartitionsForQueryAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java index 08be7723894..417c35af6d4 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface GenerateDbPartitionsForQueryActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.GenerateDbPartitionsForQueryAction) @@ -36,6 +38,7 @@ public interface GenerateDbPartitionsForQueryActionOrBuilder * @return Whether the query field is set. */ boolean hasQuery(); + /** * * @@ -48,6 +51,7 @@ public interface GenerateDbPartitionsForQueryActionOrBuilder * @return The query. */ com.google.spanner.executor.v1.QueryAction getQuery(); + /** * * @@ -72,6 +76,7 @@ public interface GenerateDbPartitionsForQueryActionOrBuilder * @return Whether the desiredBytesPerPartition field is set. */ boolean hasDesiredBytesPerPartition(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java index 6e9aa3e92d0..f3d0c178534 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,14 +30,26 @@ * * Protobuf type {@code google.spanner.executor.v1.GenerateDbPartitionsForReadAction} */ -public final class GenerateDbPartitionsForReadAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GenerateDbPartitionsForReadAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.GenerateDbPartitionsForReadAction) GenerateDbPartitionsForReadActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GenerateDbPartitionsForReadAction"); + } + // Use GenerateDbPartitionsForReadAction.newBuilder() to construct. private GenerateDbPartitionsForReadAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private GenerateDbPartitionsForReadAction() { table_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GenerateDbPartitionsForReadAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int READ_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.ReadAction read_; + /** * * @@ -83,6 +91,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasRead() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +107,7 @@ public boolean hasRead() { public com.google.spanner.executor.v1.ReadAction getRead() { return read_ == null ? com.google.spanner.executor.v1.ReadAction.getDefaultInstance() : read_; } + /** * * @@ -116,6 +126,7 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { @SuppressWarnings("serial") private java.util.List table_; + /** * * @@ -129,6 +140,7 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { public java.util.List getTableList() { return table_; } + /** * * @@ -143,6 +155,7 @@ public java.util.List getTableList getTableOrBuilderList() { return table_; } + /** * * @@ -156,6 +169,7 @@ public java.util.List getTableList public int getTableCount() { return table_.size(); } + /** * * @@ -169,6 +183,7 @@ public int getTableCount() { public com.google.spanner.executor.v1.TableMetadata getTable(int index) { return table_.get(index); } + /** * * @@ -185,6 +200,7 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i public static final int DESIRED_BYTES_PER_PARTITION_FIELD_NUMBER = 3; private long desiredBytesPerPartition_ = 0L; + /** * * @@ -201,6 +217,7 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i public boolean hasDesiredBytesPerPartition() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -220,6 +237,7 @@ public long getDesiredBytesPerPartition() { public static final int MAX_PARTITION_COUNT_FIELD_NUMBER = 4; private long maxPartitionCount_ = 0L; + /** * * @@ -236,6 +254,7 @@ public long getDesiredBytesPerPartition() { public boolean hasMaxPartitionCount() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -398,38 +417,38 @@ public static com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction p public static com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -453,10 +472,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -467,7 +487,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.GenerateDbPartitionsForReadAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.GenerateDbPartitionsForReadAction) com.google.spanner.executor.v1.GenerateDbPartitionsForReadActionOrBuilder { @@ -477,7 +497,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GenerateDbPartitionsForReadAction_fieldAccessorTable @@ -491,15 +511,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getReadFieldBuilder(); - getTableFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetReadFieldBuilder(); + internalGetTableFieldBuilder(); } } @@ -589,39 +609,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction) { @@ -659,8 +646,8 @@ public Builder mergeFrom( table_ = other.table_; bitField0_ = (bitField0_ & ~0x00000002); tableBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getTableFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetTableFieldBuilder() : null; } else { tableBuilder_.addAllMessages(other.table_); @@ -701,7 +688,7 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getReadFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetReadFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -750,11 +737,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.ReadAction read_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadAction, com.google.spanner.executor.v1.ReadAction.Builder, com.google.spanner.executor.v1.ReadActionOrBuilder> readBuilder_; + /** * * @@ -769,6 +757,7 @@ public Builder mergeFrom( public boolean hasRead() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -789,6 +778,7 @@ public com.google.spanner.executor.v1.ReadAction getRead() { return readBuilder_.getMessage(); } } + /** * * @@ -811,6 +801,7 @@ public Builder setRead(com.google.spanner.executor.v1.ReadAction value) { onChanged(); return this; } + /** * * @@ -830,6 +821,7 @@ public Builder setRead(com.google.spanner.executor.v1.ReadAction.Builder builder onChanged(); return this; } + /** * * @@ -857,6 +849,7 @@ public Builder mergeRead(com.google.spanner.executor.v1.ReadAction value) { } return this; } + /** * * @@ -876,6 +869,7 @@ public Builder clearRead() { onChanged(); return this; } + /** * * @@ -888,8 +882,9 @@ public Builder clearRead() { public com.google.spanner.executor.v1.ReadAction.Builder getReadBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getReadFieldBuilder().getBuilder(); + return internalGetReadFieldBuilder().getBuilder(); } + /** * * @@ -908,6 +903,7 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { : read_; } } + /** * * @@ -917,14 +913,14 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { * * .google.spanner.executor.v1.ReadAction read = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadAction, com.google.spanner.executor.v1.ReadAction.Builder, com.google.spanner.executor.v1.ReadActionOrBuilder> - getReadFieldBuilder() { + internalGetReadFieldBuilder() { if (readBuilder_ == null) { readBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadAction, com.google.spanner.executor.v1.ReadAction.Builder, com.google.spanner.executor.v1.ReadActionOrBuilder>( @@ -944,7 +940,7 @@ private void ensureTableIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.TableMetadata, com.google.spanner.executor.v1.TableMetadata.Builder, com.google.spanner.executor.v1.TableMetadataOrBuilder> @@ -966,6 +962,7 @@ public java.util.List getTableList return tableBuilder_.getMessageList(); } } + /** * * @@ -982,6 +979,7 @@ public int getTableCount() { return tableBuilder_.getCount(); } } + /** * * @@ -998,6 +996,7 @@ public com.google.spanner.executor.v1.TableMetadata getTable(int index) { return tableBuilder_.getMessage(index); } } + /** * * @@ -1020,6 +1019,7 @@ public Builder setTable(int index, com.google.spanner.executor.v1.TableMetadata } return this; } + /** * * @@ -1040,6 +1040,7 @@ public Builder setTable( } return this; } + /** * * @@ -1062,6 +1063,7 @@ public Builder addTable(com.google.spanner.executor.v1.TableMetadata value) { } return this; } + /** * * @@ -1084,6 +1086,7 @@ public Builder addTable(int index, com.google.spanner.executor.v1.TableMetadata } return this; } + /** * * @@ -1103,6 +1106,7 @@ public Builder addTable(com.google.spanner.executor.v1.TableMetadata.Builder bui } return this; } + /** * * @@ -1123,6 +1127,7 @@ public Builder addTable( } return this; } + /** * * @@ -1143,6 +1148,7 @@ public Builder addAllTable( } return this; } + /** * * @@ -1162,6 +1168,7 @@ public Builder clearTable() { } return this; } + /** * * @@ -1181,6 +1188,7 @@ public Builder removeTable(int index) { } return this; } + /** * * @@ -1191,8 +1199,9 @@ public Builder removeTable(int index) { * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ public com.google.spanner.executor.v1.TableMetadata.Builder getTableBuilder(int index) { - return getTableFieldBuilder().getBuilder(index); + return internalGetTableFieldBuilder().getBuilder(index); } + /** * * @@ -1209,6 +1218,7 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i return tableBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1226,6 +1236,7 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i return java.util.Collections.unmodifiableList(table_); } } + /** * * @@ -1236,9 +1247,10 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder() { - return getTableFieldBuilder() + return internalGetTableFieldBuilder() .addBuilder(com.google.spanner.executor.v1.TableMetadata.getDefaultInstance()); } + /** * * @@ -1249,9 +1261,10 @@ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder() { * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder(int index) { - return getTableFieldBuilder() + return internalGetTableFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.TableMetadata.getDefaultInstance()); } + /** * * @@ -1263,17 +1276,17 @@ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder(int */ public java.util.List getTableBuilderList() { - return getTableFieldBuilder().getBuilderList(); + return internalGetTableFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.TableMetadata, com.google.spanner.executor.v1.TableMetadata.Builder, com.google.spanner.executor.v1.TableMetadataOrBuilder> - getTableFieldBuilder() { + internalGetTableFieldBuilder() { if (tableBuilder_ == null) { tableBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.TableMetadata, com.google.spanner.executor.v1.TableMetadata.Builder, com.google.spanner.executor.v1.TableMetadataOrBuilder>( @@ -1284,6 +1297,7 @@ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder(int } private long desiredBytesPerPartition_; + /** * * @@ -1300,6 +1314,7 @@ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder(int public boolean hasDesiredBytesPerPartition() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1316,6 +1331,7 @@ public boolean hasDesiredBytesPerPartition() { public long getDesiredBytesPerPartition() { return desiredBytesPerPartition_; } + /** * * @@ -1336,6 +1352,7 @@ public Builder setDesiredBytesPerPartition(long value) { onChanged(); return this; } + /** * * @@ -1356,6 +1373,7 @@ public Builder clearDesiredBytesPerPartition() { } private long maxPartitionCount_; + /** * * @@ -1372,6 +1390,7 @@ public Builder clearDesiredBytesPerPartition() { public boolean hasMaxPartitionCount() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1388,6 +1407,7 @@ public boolean hasMaxPartitionCount() { public long getMaxPartitionCount() { return maxPartitionCount_; } + /** * * @@ -1408,6 +1428,7 @@ public Builder setMaxPartitionCount(long value) { onChanged(); return this; } + /** * * @@ -1427,17 +1448,6 @@ public Builder clearMaxPartitionCount() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.GenerateDbPartitionsForReadAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java index e059e024903..ee1632fb6dc 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface GenerateDbPartitionsForReadActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.GenerateDbPartitionsForReadAction) @@ -36,6 +38,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder * @return Whether the read field is set. */ boolean hasRead(); + /** * * @@ -48,6 +51,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder * @return The read. */ com.google.spanner.executor.v1.ReadAction getRead(); + /** * * @@ -69,6 +73,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ java.util.List getTableList(); + /** * * @@ -79,6 +84,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ com.google.spanner.executor.v1.TableMetadata getTable(int index); + /** * * @@ -89,6 +95,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ int getTableCount(); + /** * * @@ -100,6 +107,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder */ java.util.List getTableOrBuilderList(); + /** * * @@ -124,6 +132,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder * @return Whether the desiredBytesPerPartition field is set. */ boolean hasDesiredBytesPerPartition(); + /** * * @@ -151,6 +160,7 @@ public interface GenerateDbPartitionsForReadActionOrBuilder * @return Whether the maxPartitionCount field is set. */ boolean hasMaxPartitionCount(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java index cc7a3d665f4..e57bdb7e348 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.GetCloudBackupAction} */ -public final class GetCloudBackupAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetCloudBackupAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.GetCloudBackupAction) GetCloudBackupActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetCloudBackupAction"); + } + // Use GetCloudBackupAction.newBuilder() to construct. - private GetCloudBackupAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetCloudBackupAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private GetCloudBackupAction() { backupId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetCloudBackupAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudBackupAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudBackupAction_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -171,6 +182,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -194,6 +206,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -232,14 +245,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, backupId_); } getUnknownFields().writeTo(output); } @@ -250,14 +263,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, backupId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -337,38 +350,38 @@ public static com.google.spanner.executor.v1.GetCloudBackupAction parseFrom( public static com.google.spanner.executor.v1.GetCloudBackupAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudBackupAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudBackupAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudBackupAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -391,10 +404,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -404,7 +418,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.GetCloudBackupAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.GetCloudBackupAction) com.google.spanner.executor.v1.GetCloudBackupActionOrBuilder { @@ -414,7 +428,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudBackupAction_fieldAccessorTable @@ -426,7 +440,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.GetCloudBackupAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -484,39 +498,6 @@ private void buildPartial0(com.google.spanner.executor.v1.GetCloudBackupAction r } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.GetCloudBackupAction) { @@ -609,6 +590,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -631,6 +613,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -653,6 +636,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -674,6 +658,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -691,6 +676,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -715,6 +701,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -737,6 +724,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -759,6 +747,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -780,6 +769,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -797,6 +787,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -821,6 +812,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -843,6 +835,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -865,6 +858,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -886,6 +880,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -903,6 +898,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -926,17 +922,6 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.GetCloudBackupAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java index 5f382c06704..a42478d1132 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface GetCloudBackupActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.GetCloudBackupAction) @@ -36,6 +38,7 @@ public interface GetCloudBackupActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface GetCloudBackupActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -86,6 +90,7 @@ public interface GetCloudBackupActionOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java index 383448c669a..fc799e82d6c 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.GetCloudDatabaseAction} */ -public final class GetCloudDatabaseAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetCloudDatabaseAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.GetCloudDatabaseAction) GetCloudDatabaseActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetCloudDatabaseAction"); + } + // Use GetCloudDatabaseAction.newBuilder() to construct. - private GetCloudDatabaseAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetCloudDatabaseAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private GetCloudDatabaseAction() { databaseId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetCloudDatabaseAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -171,6 +182,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -194,6 +206,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -232,14 +245,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, databaseId_); } getUnknownFields().writeTo(output); } @@ -250,14 +263,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, databaseId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -337,38 +350,38 @@ public static com.google.spanner.executor.v1.GetCloudDatabaseAction parseFrom( public static com.google.spanner.executor.v1.GetCloudDatabaseAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudDatabaseAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -392,10 +405,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -405,7 +419,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.GetCloudDatabaseAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.GetCloudDatabaseAction) com.google.spanner.executor.v1.GetCloudDatabaseActionOrBuilder { @@ -415,7 +429,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudDatabaseAction_fieldAccessorTable @@ -427,7 +441,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.GetCloudDatabaseAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -485,39 +499,6 @@ private void buildPartial0(com.google.spanner.executor.v1.GetCloudDatabaseAction } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.GetCloudDatabaseAction) { @@ -610,6 +591,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -632,6 +614,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -654,6 +637,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -675,6 +659,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -692,6 +677,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -716,6 +702,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -738,6 +725,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -760,6 +748,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -781,6 +770,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -798,6 +788,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -822,6 +813,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -844,6 +836,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -866,6 +859,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -887,6 +881,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -904,6 +899,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -927,17 +923,6 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.GetCloudDatabaseAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java index 192d3bc6b49..b33e2d8bfad 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface GetCloudDatabaseActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.GetCloudDatabaseAction) @@ -36,6 +38,7 @@ public interface GetCloudDatabaseActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface GetCloudDatabaseActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -86,6 +90,7 @@ public interface GetCloudDatabaseActionOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java index 8c047998222..7fde64569b5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.GetCloudInstanceAction} */ -public final class GetCloudInstanceAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetCloudInstanceAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.GetCloudInstanceAction) GetCloudInstanceActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetCloudInstanceAction"); + } + // Use GetCloudInstanceAction.newBuilder() to construct. - private GetCloudInstanceAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetCloudInstanceAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetCloudInstanceAction() { instanceId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetCloudInstanceAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudInstanceAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudInstanceAction_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -91,6 +99,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -119,6 +128,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -182,11 +193,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } getUnknownFields().writeTo(output); } @@ -197,11 +208,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -278,38 +289,38 @@ public static com.google.spanner.executor.v1.GetCloudInstanceAction parseFrom( public static com.google.spanner.executor.v1.GetCloudInstanceAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudInstanceAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudInstanceAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudInstanceAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -333,10 +344,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -346,7 +358,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.GetCloudInstanceAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.GetCloudInstanceAction) com.google.spanner.executor.v1.GetCloudInstanceActionOrBuilder { @@ -356,7 +368,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudInstanceAction_fieldAccessorTable @@ -368,7 +380,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.GetCloudInstanceAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -422,39 +434,6 @@ private void buildPartial0(com.google.spanner.executor.v1.GetCloudInstanceAction } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.GetCloudInstanceAction) { @@ -536,6 +515,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -558,6 +538,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -580,6 +561,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -601,6 +583,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -618,6 +601,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -642,6 +626,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -665,6 +650,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -688,6 +674,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -710,6 +697,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -728,6 +716,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -752,17 +741,6 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.GetCloudInstanceAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java index 15cffa46487..05811d3ae4b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface GetCloudInstanceActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.GetCloudInstanceAction) @@ -36,6 +38,7 @@ public interface GetCloudInstanceActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -62,6 +65,7 @@ public interface GetCloudInstanceActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java index 671253eefd9..fd37c45e375 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.GetCloudInstanceConfigAction} */ -public final class GetCloudInstanceConfigAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetCloudInstanceConfigAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.GetCloudInstanceConfigAction) GetCloudInstanceConfigActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetCloudInstanceConfigAction"); + } + // Use GetCloudInstanceConfigAction.newBuilder() to construct. - private GetCloudInstanceConfigAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetCloudInstanceConfigAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private GetCloudInstanceConfigAction() { projectId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetCloudInstanceConfigAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object instanceConfigId_ = ""; + /** * * @@ -91,6 +99,7 @@ public java.lang.String getInstanceConfigId() { return s; } } + /** * * @@ -119,6 +128,7 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -142,6 +152,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -180,11 +191,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceConfigId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceConfigId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } getUnknownFields().writeTo(output); } @@ -195,11 +206,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceConfigId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceConfigId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -276,38 +287,38 @@ public static com.google.spanner.executor.v1.GetCloudInstanceConfigAction parseF public static com.google.spanner.executor.v1.GetCloudInstanceConfigAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudInstanceConfigAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudInstanceConfigAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudInstanceConfigAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetCloudInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetCloudInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -331,10 +342,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -344,7 +356,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.GetCloudInstanceConfigAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.GetCloudInstanceConfigAction) com.google.spanner.executor.v1.GetCloudInstanceConfigActionOrBuilder { @@ -354,7 +366,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetCloudInstanceConfigAction_fieldAccessorTable @@ -366,7 +378,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.GetCloudInstanceConfigAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -420,39 +432,6 @@ private void buildPartial0(com.google.spanner.executor.v1.GetCloudInstanceConfig } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.GetCloudInstanceConfigAction) { @@ -534,6 +513,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceConfigId_ = ""; + /** * * @@ -556,6 +536,7 @@ public java.lang.String getInstanceConfigId() { return (java.lang.String) ref; } } + /** * * @@ -578,6 +559,7 @@ public com.google.protobuf.ByteString getInstanceConfigIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -599,6 +581,7 @@ public Builder setInstanceConfigId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -616,6 +599,7 @@ public Builder clearInstanceConfigId() { onChanged(); return this; } + /** * * @@ -640,6 +624,7 @@ public Builder setInstanceConfigIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -662,6 +647,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -684,6 +670,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -705,6 +692,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -722,6 +710,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -745,17 +734,6 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.GetCloudInstanceConfigAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java index c6710d56a25..d4517c60c82 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface GetCloudInstanceConfigActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.GetCloudInstanceConfigAction) @@ -36,6 +38,7 @@ public interface GetCloudInstanceConfigActionOrBuilder * @return The instanceConfigId. */ java.lang.String getInstanceConfigId(); + /** * * @@ -61,6 +64,7 @@ public interface GetCloudInstanceConfigActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java index 527fc85c710..e1612142993 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.GetOperationAction} */ -public final class GetOperationAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetOperationAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.GetOperationAction) GetOperationActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetOperationAction"); + } + // Use GetOperationAction.newBuilder() to construct. - private GetOperationAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetOperationAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private GetOperationAction() { operation_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetOperationAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetOperationAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetOperationAction_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object operation_ = ""; + /** * * @@ -90,6 +98,7 @@ public java.lang.String getOperation() { return s; } } + /** * * @@ -128,8 +137,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operation_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, operation_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operation_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, operation_); } getUnknownFields().writeTo(output); } @@ -140,8 +149,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operation_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, operation_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operation_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, operation_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -215,38 +224,38 @@ public static com.google.spanner.executor.v1.GetOperationAction parseFrom( public static com.google.spanner.executor.v1.GetOperationAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetOperationAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetOperationAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetOperationAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.GetOperationAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.GetOperationAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -269,10 +278,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -282,7 +292,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.GetOperationAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.GetOperationAction) com.google.spanner.executor.v1.GetOperationActionOrBuilder { @@ -292,7 +302,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_GetOperationAction_fieldAccessorTable @@ -304,7 +314,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.GetOperationAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -354,39 +364,6 @@ private void buildPartial0(com.google.spanner.executor.v1.GetOperationAction res } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.GetOperationAction) { @@ -457,6 +434,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object operation_ = ""; + /** * * @@ -479,6 +457,7 @@ public java.lang.String getOperation() { return (java.lang.String) ref; } } + /** * * @@ -501,6 +480,7 @@ public com.google.protobuf.ByteString getOperationBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -522,6 +502,7 @@ public Builder setOperation(java.lang.String value) { onChanged(); return this; } + /** * * @@ -539,6 +520,7 @@ public Builder clearOperation() { onChanged(); return this; } + /** * * @@ -562,17 +544,6 @@ public Builder setOperationBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.GetOperationAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java index f08e868df4c..01de76b42ec 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface GetOperationActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.GetOperationAction) @@ -36,6 +38,7 @@ public interface GetOperationActionOrBuilder * @return The operation. */ java.lang.String getOperation(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java index ce195909568..e7b5e27ed78 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.executor.v1.HeartbeatRecord} */ -public final class HeartbeatRecord extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class HeartbeatRecord extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.HeartbeatRecord) HeartbeatRecordOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "HeartbeatRecord"); + } + // Use HeartbeatRecord.newBuilder() to construct. - private HeartbeatRecord(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private HeartbeatRecord(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private HeartbeatRecord() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new HeartbeatRecord(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_HeartbeatRecord_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_HeartbeatRecord_fieldAccessorTable @@ -64,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int HEARTBEAT_TIME_FIELD_NUMBER = 1; private com.google.protobuf.Timestamp heartbeatTime_; + /** * * @@ -79,6 +87,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasHeartbeatTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -96,6 +105,7 @@ public com.google.protobuf.Timestamp getHeartbeatTime() { ? com.google.protobuf.Timestamp.getDefaultInstance() : heartbeatTime_; } + /** * * @@ -218,38 +228,38 @@ public static com.google.spanner.executor.v1.HeartbeatRecord parseFrom( public static com.google.spanner.executor.v1.HeartbeatRecord parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.HeartbeatRecord parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.HeartbeatRecord parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.HeartbeatRecord parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.HeartbeatRecord parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.HeartbeatRecord parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -272,10 +282,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -285,7 +296,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.HeartbeatRecord} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.HeartbeatRecord) com.google.spanner.executor.v1.HeartbeatRecordOrBuilder { @@ -295,7 +306,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_HeartbeatRecord_fieldAccessorTable @@ -309,14 +320,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getHeartbeatTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetHeartbeatTimeFieldBuilder(); } } @@ -374,39 +385,6 @@ private void buildPartial0(com.google.spanner.executor.v1.HeartbeatRecord result result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.HeartbeatRecord) { @@ -450,7 +428,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getHeartbeatTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetHeartbeatTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -474,11 +453,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.Timestamp heartbeatTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> heartbeatTimeBuilder_; + /** * * @@ -493,6 +473,7 @@ public Builder mergeFrom( public boolean hasHeartbeatTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -513,6 +494,7 @@ public com.google.protobuf.Timestamp getHeartbeatTime() { return heartbeatTimeBuilder_.getMessage(); } } + /** * * @@ -535,6 +517,7 @@ public Builder setHeartbeatTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -554,6 +537,7 @@ public Builder setHeartbeatTime(com.google.protobuf.Timestamp.Builder builderFor onChanged(); return this; } + /** * * @@ -581,6 +565,7 @@ public Builder mergeHeartbeatTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -600,6 +585,7 @@ public Builder clearHeartbeatTime() { onChanged(); return this; } + /** * * @@ -612,8 +598,9 @@ public Builder clearHeartbeatTime() { public com.google.protobuf.Timestamp.Builder getHeartbeatTimeBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getHeartbeatTimeFieldBuilder().getBuilder(); + return internalGetHeartbeatTimeFieldBuilder().getBuilder(); } + /** * * @@ -632,6 +619,7 @@ public com.google.protobuf.TimestampOrBuilder getHeartbeatTimeOrBuilder() { : heartbeatTime_; } } + /** * * @@ -641,14 +629,14 @@ public com.google.protobuf.TimestampOrBuilder getHeartbeatTimeOrBuilder() { * * .google.protobuf.Timestamp heartbeat_time = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getHeartbeatTimeFieldBuilder() { + internalGetHeartbeatTimeFieldBuilder() { if (heartbeatTimeBuilder_ == null) { heartbeatTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -658,17 +646,6 @@ public com.google.protobuf.TimestampOrBuilder getHeartbeatTimeOrBuilder() { return heartbeatTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.HeartbeatRecord) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java index f664ff2818e..e2ba4d9b723 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface HeartbeatRecordOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.HeartbeatRecord) @@ -36,6 +38,7 @@ public interface HeartbeatRecordOrBuilder * @return Whether the heartbeatTime field is set. */ boolean hasHeartbeatTime(); + /** * * @@ -48,6 +51,7 @@ public interface HeartbeatRecordOrBuilder * @return The heartbeatTime. */ com.google.protobuf.Timestamp getHeartbeatTime(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java index 6b3060318b7..1abd7c7d77d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -34,13 +35,25 @@ * * Protobuf type {@code google.spanner.executor.v1.KeyRange} */ -public final class KeyRange extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class KeyRange extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.KeyRange) KeyRangeOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "KeyRange"); + } + // Use KeyRange.newBuilder() to construct. - private KeyRange(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private KeyRange(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -48,19 +61,13 @@ private KeyRange() { type_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new KeyRange(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_KeyRange_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_KeyRange_fieldAccessorTable @@ -133,6 +140,16 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Type"); + } + /** * * @@ -143,6 +160,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * TYPE_UNSPECIFIED = 0; */ public static final int TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -153,6 +171,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * CLOSED_CLOSED = 1; */ public static final int CLOSED_CLOSED_VALUE = 1; + /** * * @@ -163,6 +182,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * CLOSED_OPEN = 2; */ public static final int CLOSED_OPEN_VALUE = 2; + /** * * @@ -173,6 +193,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * OPEN_CLOSED = 3; */ public static final int OPEN_CLOSED_VALUE = 3; + /** * * @@ -246,7 +267,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.executor.v1.KeyRange.getDescriptor().getEnumTypes().get(0); } @@ -274,6 +295,7 @@ private Type(int value) { private int bitField0_; public static final int START_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.ValueList start_; + /** * * @@ -291,6 +313,7 @@ private Type(int value) { public boolean hasStart() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -308,6 +331,7 @@ public boolean hasStart() { public com.google.spanner.executor.v1.ValueList getStart() { return start_ == null ? com.google.spanner.executor.v1.ValueList.getDefaultInstance() : start_; } + /** * * @@ -326,6 +350,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStartOrBuilder() { public static final int LIMIT_FIELD_NUMBER = 2; private com.google.spanner.executor.v1.ValueList limit_; + /** * * @@ -341,6 +366,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStartOrBuilder() { public boolean hasLimit() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -356,6 +382,7 @@ public boolean hasLimit() { public com.google.spanner.executor.v1.ValueList getLimit() { return limit_ == null ? com.google.spanner.executor.v1.ValueList.getDefaultInstance() : limit_; } + /** * * @@ -372,6 +399,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getLimitOrBuilder() { public static final int TYPE_FIELD_NUMBER = 3; private int type_ = 0; + /** * * @@ -387,6 +415,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getLimitOrBuilder() { public boolean hasType() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -402,6 +431,7 @@ public boolean hasType() { public int getTypeValue() { return type_; } + /** * * @@ -553,38 +583,38 @@ public static com.google.spanner.executor.v1.KeyRange parseFrom( public static com.google.spanner.executor.v1.KeyRange parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.KeyRange parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.KeyRange parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.KeyRange parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.KeyRange parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.KeyRange parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -607,10 +637,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -626,7 +657,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.KeyRange} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.KeyRange) com.google.spanner.executor.v1.KeyRangeOrBuilder { @@ -636,7 +667,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_KeyRange_fieldAccessorTable @@ -650,15 +681,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getStartFieldBuilder(); - getLimitFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStartFieldBuilder(); + internalGetLimitFieldBuilder(); } } @@ -729,39 +760,6 @@ private void buildPartial0(com.google.spanner.executor.v1.KeyRange result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.KeyRange) { @@ -781,7 +779,7 @@ public Builder mergeFrom(com.google.spanner.executor.v1.KeyRange other) { mergeLimit(other.getLimit()); } if (other.hasType()) { - setType(other.getType()); + setTypeValue(other.getTypeValue()); } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); @@ -811,13 +809,13 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getStartFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetStartFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getLimitFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetLimitFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -847,11 +845,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.ValueList start_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> startBuilder_; + /** * * @@ -868,6 +867,7 @@ public Builder mergeFrom( public boolean hasStart() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -890,6 +890,7 @@ public com.google.spanner.executor.v1.ValueList getStart() { return startBuilder_.getMessage(); } } + /** * * @@ -914,6 +915,7 @@ public Builder setStart(com.google.spanner.executor.v1.ValueList value) { onChanged(); return this; } + /** * * @@ -935,6 +937,7 @@ public Builder setStart(com.google.spanner.executor.v1.ValueList.Builder builder onChanged(); return this; } + /** * * @@ -964,6 +967,7 @@ public Builder mergeStart(com.google.spanner.executor.v1.ValueList value) { } return this; } + /** * * @@ -985,6 +989,7 @@ public Builder clearStart() { onChanged(); return this; } + /** * * @@ -999,8 +1004,9 @@ public Builder clearStart() { public com.google.spanner.executor.v1.ValueList.Builder getStartBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getStartFieldBuilder().getBuilder(); + return internalGetStartFieldBuilder().getBuilder(); } + /** * * @@ -1021,6 +1027,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStartOrBuilder() { : start_; } } + /** * * @@ -1032,14 +1039,14 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStartOrBuilder() { * * .google.spanner.executor.v1.ValueList start = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getStartFieldBuilder() { + internalGetStartFieldBuilder() { if (startBuilder_ == null) { startBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -1050,11 +1057,12 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStartOrBuilder() { } private com.google.spanner.executor.v1.ValueList limit_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> limitBuilder_; + /** * * @@ -1069,6 +1077,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStartOrBuilder() { public boolean hasLimit() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1089,6 +1098,7 @@ public com.google.spanner.executor.v1.ValueList getLimit() { return limitBuilder_.getMessage(); } } + /** * * @@ -1111,6 +1121,7 @@ public Builder setLimit(com.google.spanner.executor.v1.ValueList value) { onChanged(); return this; } + /** * * @@ -1130,6 +1141,7 @@ public Builder setLimit(com.google.spanner.executor.v1.ValueList.Builder builder onChanged(); return this; } + /** * * @@ -1157,6 +1169,7 @@ public Builder mergeLimit(com.google.spanner.executor.v1.ValueList value) { } return this; } + /** * * @@ -1176,6 +1189,7 @@ public Builder clearLimit() { onChanged(); return this; } + /** * * @@ -1188,8 +1202,9 @@ public Builder clearLimit() { public com.google.spanner.executor.v1.ValueList.Builder getLimitBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getLimitFieldBuilder().getBuilder(); + return internalGetLimitFieldBuilder().getBuilder(); } + /** * * @@ -1208,6 +1223,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getLimitOrBuilder() { : limit_; } } + /** * * @@ -1217,14 +1233,14 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getLimitOrBuilder() { * * .google.spanner.executor.v1.ValueList limit = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getLimitFieldBuilder() { + internalGetLimitFieldBuilder() { if (limitBuilder_ == null) { limitBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -1235,6 +1251,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getLimitOrBuilder() { } private int type_ = 0; + /** * * @@ -1250,6 +1267,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getLimitOrBuilder() { public boolean hasType() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1265,6 +1283,7 @@ public boolean hasType() { public int getTypeValue() { return type_; } + /** * * @@ -1283,6 +1302,7 @@ public Builder setTypeValue(int value) { onChanged(); return this; } + /** * * @@ -1300,6 +1320,7 @@ public com.google.spanner.executor.v1.KeyRange.Type getType() { com.google.spanner.executor.v1.KeyRange.Type.forNumber(type_); return result == null ? com.google.spanner.executor.v1.KeyRange.Type.UNRECOGNIZED : result; } + /** * * @@ -1321,6 +1342,7 @@ public Builder setType(com.google.spanner.executor.v1.KeyRange.Type value) { onChanged(); return this; } + /** * * @@ -1339,17 +1361,6 @@ public Builder clearType() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.KeyRange) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java index f2113b669ac..19db055c907 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface KeyRangeOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.KeyRange) @@ -38,6 +40,7 @@ public interface KeyRangeOrBuilder * @return Whether the start field is set. */ boolean hasStart(); + /** * * @@ -52,6 +55,7 @@ public interface KeyRangeOrBuilder * @return The start. */ com.google.spanner.executor.v1.ValueList getStart(); + /** * * @@ -77,6 +81,7 @@ public interface KeyRangeOrBuilder * @return Whether the limit field is set. */ boolean hasLimit(); + /** * * @@ -89,6 +94,7 @@ public interface KeyRangeOrBuilder * @return The limit. */ com.google.spanner.executor.v1.ValueList getLimit(); + /** * * @@ -112,6 +118,7 @@ public interface KeyRangeOrBuilder * @return Whether the type field is set. */ boolean hasType(); + /** * * @@ -124,6 +131,7 @@ public interface KeyRangeOrBuilder * @return The enum numeric value on the wire for type. */ int getTypeValue(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java index 5f1f5b70b4f..569f3f28134 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -30,13 +31,25 @@ * * Protobuf type {@code google.spanner.executor.v1.KeySet} */ -public final class KeySet extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class KeySet extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.KeySet) KeySetOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "KeySet"); + } + // Use KeySet.newBuilder() to construct. - private KeySet(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private KeySet(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private KeySet() { range_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new KeySet(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_KeySet_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_KeySet_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List point_; + /** * * @@ -85,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getPointList() { return point_; } + /** * * @@ -101,6 +110,7 @@ public java.util.List getPointList() { getPointOrBuilderList() { return point_; } + /** * * @@ -116,6 +126,7 @@ public java.util.List getPointList() { public int getPointCount() { return point_.size(); } + /** * * @@ -131,6 +142,7 @@ public int getPointCount() { public com.google.spanner.executor.v1.ValueList getPoint(int index) { return point_.get(index); } + /** * * @@ -151,6 +163,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getPointOrBuilder(int i @SuppressWarnings("serial") private java.util.List range_; + /** * * @@ -164,6 +177,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getPointOrBuilder(int i public java.util.List getRangeList() { return range_; } + /** * * @@ -178,6 +192,7 @@ public java.util.List getRangeList() { getRangeOrBuilderList() { return range_; } + /** * * @@ -191,6 +206,7 @@ public java.util.List getRangeList() { public int getRangeCount() { return range_.size(); } + /** * * @@ -204,6 +220,7 @@ public int getRangeCount() { public com.google.spanner.executor.v1.KeyRange getRange(int index) { return range_.get(index); } + /** * * @@ -220,6 +237,7 @@ public com.google.spanner.executor.v1.KeyRangeOrBuilder getRangeOrBuilder(int in public static final int ALL_FIELD_NUMBER = 3; private boolean all_ = false; + /** * * @@ -359,38 +377,38 @@ public static com.google.spanner.executor.v1.KeySet parseFrom( public static com.google.spanner.executor.v1.KeySet parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.KeySet parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.KeySet parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.KeySet parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.KeySet parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.KeySet parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -413,10 +431,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -428,7 +447,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.KeySet} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.KeySet) com.google.spanner.executor.v1.KeySetOrBuilder { @@ -438,7 +457,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_KeySet_fieldAccessorTable @@ -450,7 +469,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.KeySet.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -536,39 +555,6 @@ private void buildPartial0(com.google.spanner.executor.v1.KeySet result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.KeySet) { @@ -600,8 +586,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.KeySet other) { point_ = other.point_; bitField0_ = (bitField0_ & ~0x00000001); pointBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getPointFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetPointFieldBuilder() : null; } else { pointBuilder_.addAllMessages(other.point_); @@ -627,8 +613,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.KeySet other) { range_ = other.range_; bitField0_ = (bitField0_ & ~0x00000002); rangeBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getRangeFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetRangeFieldBuilder() : null; } else { rangeBuilder_.addAllMessages(other.range_); @@ -725,7 +711,7 @@ private void ensurePointIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> @@ -749,6 +735,7 @@ public java.util.List getPointList() { return pointBuilder_.getMessageList(); } } + /** * * @@ -767,6 +754,7 @@ public int getPointCount() { return pointBuilder_.getCount(); } } + /** * * @@ -785,6 +773,7 @@ public com.google.spanner.executor.v1.ValueList getPoint(int index) { return pointBuilder_.getMessage(index); } } + /** * * @@ -809,6 +798,7 @@ public Builder setPoint(int index, com.google.spanner.executor.v1.ValueList valu } return this; } + /** * * @@ -831,6 +821,7 @@ public Builder setPoint( } return this; } + /** * * @@ -855,6 +846,7 @@ public Builder addPoint(com.google.spanner.executor.v1.ValueList value) { } return this; } + /** * * @@ -879,6 +871,7 @@ public Builder addPoint(int index, com.google.spanner.executor.v1.ValueList valu } return this; } + /** * * @@ -900,6 +893,7 @@ public Builder addPoint(com.google.spanner.executor.v1.ValueList.Builder builder } return this; } + /** * * @@ -922,6 +916,7 @@ public Builder addPoint( } return this; } + /** * * @@ -944,6 +939,7 @@ public Builder addAllPoint( } return this; } + /** * * @@ -965,6 +961,7 @@ public Builder clearPoint() { } return this; } + /** * * @@ -986,6 +983,7 @@ public Builder removePoint(int index) { } return this; } + /** * * @@ -998,8 +996,9 @@ public Builder removePoint(int index) { * repeated .google.spanner.executor.v1.ValueList point = 1; */ public com.google.spanner.executor.v1.ValueList.Builder getPointBuilder(int index) { - return getPointFieldBuilder().getBuilder(index); + return internalGetPointFieldBuilder().getBuilder(index); } + /** * * @@ -1018,6 +1017,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getPointOrBuilder(int i return pointBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1037,6 +1037,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getPointOrBuilder(int i return java.util.Collections.unmodifiableList(point_); } } + /** * * @@ -1049,9 +1050,10 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getPointOrBuilder(int i * repeated .google.spanner.executor.v1.ValueList point = 1; */ public com.google.spanner.executor.v1.ValueList.Builder addPointBuilder() { - return getPointFieldBuilder() + return internalGetPointFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -1064,9 +1066,10 @@ public com.google.spanner.executor.v1.ValueList.Builder addPointBuilder() { * repeated .google.spanner.executor.v1.ValueList point = 1; */ public com.google.spanner.executor.v1.ValueList.Builder addPointBuilder(int index) { - return getPointFieldBuilder() + return internalGetPointFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -1079,17 +1082,17 @@ public com.google.spanner.executor.v1.ValueList.Builder addPointBuilder(int inde * repeated .google.spanner.executor.v1.ValueList point = 1; */ public java.util.List getPointBuilderList() { - return getPointFieldBuilder().getBuilderList(); + return internalGetPointFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getPointFieldBuilder() { + internalGetPointFieldBuilder() { if (pointBuilder_ == null) { pointBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -1109,7 +1112,7 @@ private void ensureRangeIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.KeyRange, com.google.spanner.executor.v1.KeyRange.Builder, com.google.spanner.executor.v1.KeyRangeOrBuilder> @@ -1131,6 +1134,7 @@ public java.util.List getRangeList() { return rangeBuilder_.getMessageList(); } } + /** * * @@ -1147,6 +1151,7 @@ public int getRangeCount() { return rangeBuilder_.getCount(); } } + /** * * @@ -1163,6 +1168,7 @@ public com.google.spanner.executor.v1.KeyRange getRange(int index) { return rangeBuilder_.getMessage(index); } } + /** * * @@ -1185,6 +1191,7 @@ public Builder setRange(int index, com.google.spanner.executor.v1.KeyRange value } return this; } + /** * * @@ -1205,6 +1212,7 @@ public Builder setRange( } return this; } + /** * * @@ -1227,6 +1235,7 @@ public Builder addRange(com.google.spanner.executor.v1.KeyRange value) { } return this; } + /** * * @@ -1249,6 +1258,7 @@ public Builder addRange(int index, com.google.spanner.executor.v1.KeyRange value } return this; } + /** * * @@ -1268,6 +1278,7 @@ public Builder addRange(com.google.spanner.executor.v1.KeyRange.Builder builderF } return this; } + /** * * @@ -1288,6 +1299,7 @@ public Builder addRange( } return this; } + /** * * @@ -1308,6 +1320,7 @@ public Builder addAllRange( } return this; } + /** * * @@ -1327,6 +1340,7 @@ public Builder clearRange() { } return this; } + /** * * @@ -1346,6 +1360,7 @@ public Builder removeRange(int index) { } return this; } + /** * * @@ -1356,8 +1371,9 @@ public Builder removeRange(int index) { * repeated .google.spanner.executor.v1.KeyRange range = 2; */ public com.google.spanner.executor.v1.KeyRange.Builder getRangeBuilder(int index) { - return getRangeFieldBuilder().getBuilder(index); + return internalGetRangeFieldBuilder().getBuilder(index); } + /** * * @@ -1374,6 +1390,7 @@ public com.google.spanner.executor.v1.KeyRangeOrBuilder getRangeOrBuilder(int in return rangeBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1391,6 +1408,7 @@ public com.google.spanner.executor.v1.KeyRangeOrBuilder getRangeOrBuilder(int in return java.util.Collections.unmodifiableList(range_); } } + /** * * @@ -1401,9 +1419,10 @@ public com.google.spanner.executor.v1.KeyRangeOrBuilder getRangeOrBuilder(int in * repeated .google.spanner.executor.v1.KeyRange range = 2; */ public com.google.spanner.executor.v1.KeyRange.Builder addRangeBuilder() { - return getRangeFieldBuilder() + return internalGetRangeFieldBuilder() .addBuilder(com.google.spanner.executor.v1.KeyRange.getDefaultInstance()); } + /** * * @@ -1414,9 +1433,10 @@ public com.google.spanner.executor.v1.KeyRange.Builder addRangeBuilder() { * repeated .google.spanner.executor.v1.KeyRange range = 2; */ public com.google.spanner.executor.v1.KeyRange.Builder addRangeBuilder(int index) { - return getRangeFieldBuilder() + return internalGetRangeFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.KeyRange.getDefaultInstance()); } + /** * * @@ -1427,17 +1447,17 @@ public com.google.spanner.executor.v1.KeyRange.Builder addRangeBuilder(int index * repeated .google.spanner.executor.v1.KeyRange range = 2; */ public java.util.List getRangeBuilderList() { - return getRangeFieldBuilder().getBuilderList(); + return internalGetRangeFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.KeyRange, com.google.spanner.executor.v1.KeyRange.Builder, com.google.spanner.executor.v1.KeyRangeOrBuilder> - getRangeFieldBuilder() { + internalGetRangeFieldBuilder() { if (rangeBuilder_ == null) { rangeBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.KeyRange, com.google.spanner.executor.v1.KeyRange.Builder, com.google.spanner.executor.v1.KeyRangeOrBuilder>( @@ -1448,6 +1468,7 @@ public java.util.List getRangeB } private boolean all_; + /** * * @@ -1465,6 +1486,7 @@ public java.util.List getRangeB public boolean getAll() { return all_; } + /** * * @@ -1486,6 +1508,7 @@ public Builder setAll(boolean value) { onChanged(); return this; } + /** * * @@ -1506,17 +1529,6 @@ public Builder clearAll() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.KeySet) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java index b3d98222c13..eea2bd4f6e0 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface KeySetOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.KeySet) @@ -36,6 +38,7 @@ public interface KeySetOrBuilder * repeated .google.spanner.executor.v1.ValueList point = 1; */ java.util.List getPointList(); + /** * * @@ -48,6 +51,7 @@ public interface KeySetOrBuilder * repeated .google.spanner.executor.v1.ValueList point = 1; */ com.google.spanner.executor.v1.ValueList getPoint(int index); + /** * * @@ -60,6 +64,7 @@ public interface KeySetOrBuilder * repeated .google.spanner.executor.v1.ValueList point = 1; */ int getPointCount(); + /** * * @@ -73,6 +78,7 @@ public interface KeySetOrBuilder */ java.util.List getPointOrBuilderList(); + /** * * @@ -96,6 +102,7 @@ public interface KeySetOrBuilder * repeated .google.spanner.executor.v1.KeyRange range = 2; */ java.util.List getRangeList(); + /** * * @@ -106,6 +113,7 @@ public interface KeySetOrBuilder * repeated .google.spanner.executor.v1.KeyRange range = 2; */ com.google.spanner.executor.v1.KeyRange getRange(int index); + /** * * @@ -116,6 +124,7 @@ public interface KeySetOrBuilder * repeated .google.spanner.executor.v1.KeyRange range = 2; */ int getRangeCount(); + /** * * @@ -127,6 +136,7 @@ public interface KeySetOrBuilder */ java.util.List getRangeOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java index 6057e6c203b..27d39e09ff2 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,14 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ListCloudBackupOperationsAction} */ -public final class ListCloudBackupOperationsAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListCloudBackupOperationsAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ListCloudBackupOperationsAction) ListCloudBackupOperationsActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListCloudBackupOperationsAction"); + } + // Use ListCloudBackupOperationsAction.newBuilder() to construct. - private ListCloudBackupOperationsAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListCloudBackupOperationsAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +58,13 @@ private ListCloudBackupOperationsAction() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListCloudBackupOperationsAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_fieldAccessorTable @@ -71,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -94,6 +101,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -122,6 +130,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -146,6 +155,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -175,6 +185,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -202,6 +213,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -232,6 +244,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 4; private int pageSize_ = 0; + /** * * @@ -253,6 +266,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -278,6 +292,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -318,20 +333,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, filter_); } if (pageSize_ != 0) { output.writeInt32(4, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, pageToken_); } getUnknownFields().writeTo(output); } @@ -342,20 +357,20 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -441,38 +456,38 @@ public static com.google.spanner.executor.v1.ListCloudBackupOperationsAction par public static com.google.spanner.executor.v1.ListCloudBackupOperationsAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudBackupOperationsAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudBackupOperationsAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudBackupOperationsAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudBackupOperationsAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudBackupOperationsAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -496,10 +511,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -509,7 +525,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ListCloudBackupOperationsAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ListCloudBackupOperationsAction) com.google.spanner.executor.v1.ListCloudBackupOperationsActionOrBuilder { @@ -519,7 +535,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudBackupOperationsAction_fieldAccessorTable @@ -531,7 +547,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ListCloudBackupOperationsAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -599,39 +615,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ListCloudBackupOperationsAction) { @@ -745,6 +728,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -767,6 +751,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -789,6 +774,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -810,6 +796,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -827,6 +814,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -851,6 +839,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -874,6 +863,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -897,6 +887,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -919,6 +910,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -937,6 +929,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -962,6 +955,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -988,6 +982,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -1014,6 +1009,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1039,6 +1035,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1060,6 +1057,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1088,6 +1086,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1104,6 +1103,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1124,6 +1124,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1144,6 +1145,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1168,6 +1170,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1192,6 +1195,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1215,6 +1219,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1234,6 +1239,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1259,17 +1265,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ListCloudBackupOperationsAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java index a57baa78b1c..88915e7c847 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ListCloudBackupOperationsActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ListCloudBackupOperationsAction) @@ -36,6 +38,7 @@ public interface ListCloudBackupOperationsActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -62,6 +65,7 @@ public interface ListCloudBackupOperationsActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -92,6 +96,7 @@ public interface ListCloudBackupOperationsActionOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -137,6 +142,7 @@ public interface ListCloudBackupOperationsActionOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java index e03d2436472..f9c2f246ab9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ListCloudBackupsAction} */ -public final class ListCloudBackupsAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListCloudBackupsAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ListCloudBackupsAction) ListCloudBackupsActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListCloudBackupsAction"); + } + // Use ListCloudBackupsAction.newBuilder() to construct. - private ListCloudBackupsAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListCloudBackupsAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private ListCloudBackupsAction() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListCloudBackupsAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudBackupsAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudBackupsAction_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -144,6 +154,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -172,6 +183,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -198,6 +210,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -227,6 +240,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 4; private int pageSize_ = 0; + /** * * @@ -248,6 +262,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -273,6 +288,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -313,20 +329,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, filter_); } if (pageSize_ != 0) { output.writeInt32(4, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, pageToken_); } getUnknownFields().writeTo(output); } @@ -337,20 +353,20 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -436,38 +452,38 @@ public static com.google.spanner.executor.v1.ListCloudBackupsAction parseFrom( public static com.google.spanner.executor.v1.ListCloudBackupsAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudBackupsAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudBackupsAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudBackupsAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudBackupsAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudBackupsAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -491,10 +507,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -504,7 +521,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ListCloudBackupsAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ListCloudBackupsAction) com.google.spanner.executor.v1.ListCloudBackupsActionOrBuilder { @@ -514,7 +531,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudBackupsAction_fieldAccessorTable @@ -526,7 +543,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ListCloudBackupsAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -592,39 +609,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ListCloudBackupsAction } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ListCloudBackupsAction) { @@ -737,6 +721,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -759,6 +744,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -781,6 +767,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -802,6 +789,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -819,6 +807,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -843,6 +832,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -865,6 +855,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -887,6 +878,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -908,6 +900,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -925,6 +918,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -949,6 +943,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -974,6 +969,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -999,6 +995,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1023,6 +1020,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1043,6 +1041,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1070,6 +1069,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1086,6 +1086,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1106,6 +1107,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1126,6 +1128,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1150,6 +1153,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1174,6 +1178,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1197,6 +1202,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1216,6 +1222,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1241,17 +1248,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ListCloudBackupsAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java index 91997a02545..4a8ee9bdc71 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ListCloudBackupsActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ListCloudBackupsAction) @@ -36,6 +38,7 @@ public interface ListCloudBackupsActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface ListCloudBackupsActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -89,6 +93,7 @@ public interface ListCloudBackupsActionOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -133,6 +138,7 @@ public interface ListCloudBackupsActionOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java index 8ae117cb752..8eb8a9a81d9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,14 +29,26 @@ * * Protobuf type {@code google.spanner.executor.v1.ListCloudDatabaseOperationsAction} */ -public final class ListCloudDatabaseOperationsAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListCloudDatabaseOperationsAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ListCloudDatabaseOperationsAction) ListCloudDatabaseOperationsActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListCloudDatabaseOperationsAction"); + } + // Use ListCloudDatabaseOperationsAction.newBuilder() to construct. private ListCloudDatabaseOperationsAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +59,13 @@ private ListCloudDatabaseOperationsAction() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListCloudDatabaseOperationsAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -122,6 +131,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -146,6 +156,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -175,6 +186,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -203,6 +215,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -234,6 +247,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 4; private int pageSize_ = 0; + /** * * @@ -255,6 +269,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -280,6 +295,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -320,20 +336,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, filter_); } if (pageSize_ != 0) { output.writeInt32(4, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, pageToken_); } getUnknownFields().writeTo(output); } @@ -344,20 +360,20 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, filter_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -443,38 +459,38 @@ public static com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction p public static com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -498,10 +514,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -511,7 +528,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ListCloudDatabaseOperationsAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ListCloudDatabaseOperationsAction) com.google.spanner.executor.v1.ListCloudDatabaseOperationsActionOrBuilder { @@ -521,7 +538,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudDatabaseOperationsAction_fieldAccessorTable @@ -533,7 +550,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -601,39 +618,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ListCloudDatabaseOperationsAction) { @@ -748,6 +732,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -770,6 +755,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -792,6 +778,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -813,6 +800,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -830,6 +818,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -854,6 +843,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -877,6 +867,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -900,6 +891,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -922,6 +914,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -940,6 +933,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -965,6 +959,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -992,6 +987,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -1019,6 +1015,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1045,6 +1042,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1067,6 +1065,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1096,6 +1095,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1112,6 +1112,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -1132,6 +1133,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1152,6 +1154,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1176,6 +1179,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1200,6 +1204,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1223,6 +1228,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1242,6 +1248,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1267,17 +1274,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ListCloudDatabaseOperationsAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java index 0545a14b32a..885c26988d9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ListCloudDatabaseOperationsActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ListCloudDatabaseOperationsAction) @@ -36,6 +38,7 @@ public interface ListCloudDatabaseOperationsActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -62,6 +65,7 @@ public interface ListCloudDatabaseOperationsActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -93,6 +97,7 @@ public interface ListCloudDatabaseOperationsActionOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -139,6 +144,7 @@ public interface ListCloudDatabaseOperationsActionOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java index f4d3638279f..863aabdbdf8 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ListCloudDatabasesAction} */ -public final class ListCloudDatabasesAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListCloudDatabasesAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ListCloudDatabasesAction) ListCloudDatabasesActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListCloudDatabasesAction"); + } + // Use ListCloudDatabasesAction.newBuilder() to construct. - private ListCloudDatabasesAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListCloudDatabasesAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListCloudDatabasesAction() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListCloudDatabasesAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -169,6 +180,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -190,6 +202,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -215,6 +228,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -255,17 +269,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } if (pageSize_ != 0) { output.writeInt32(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -276,17 +290,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -369,38 +383,38 @@ public static com.google.spanner.executor.v1.ListCloudDatabasesAction parseFrom( public static com.google.spanner.executor.v1.ListCloudDatabasesAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudDatabasesAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudDatabasesAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudDatabasesAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudDatabasesAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudDatabasesAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -424,10 +438,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -437,7 +452,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ListCloudDatabasesAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ListCloudDatabasesAction) com.google.spanner.executor.v1.ListCloudDatabasesActionOrBuilder { @@ -447,7 +462,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudDatabasesAction_fieldAccessorTable @@ -459,7 +474,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ListCloudDatabasesAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -521,39 +536,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ListCloudDatabasesActi } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ListCloudDatabasesAction) { @@ -655,6 +637,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -677,6 +660,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -699,6 +683,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -720,6 +705,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -737,6 +723,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -761,6 +748,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -783,6 +771,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -805,6 +794,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -826,6 +816,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -843,6 +834,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -867,6 +859,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -883,6 +876,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -903,6 +897,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -923,6 +918,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -947,6 +943,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -971,6 +968,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -994,6 +992,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1013,6 +1012,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1038,17 +1038,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ListCloudDatabasesAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java index 81092b3e290..5e877fe4601 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ListCloudDatabasesActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ListCloudDatabasesAction) @@ -36,6 +38,7 @@ public interface ListCloudDatabasesActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface ListCloudDatabasesActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -102,6 +106,7 @@ public interface ListCloudDatabasesActionOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java index 0e3b56796f2..07783c3dc33 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,14 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ListCloudInstanceConfigsAction} */ -public final class ListCloudInstanceConfigsAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListCloudInstanceConfigsAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ListCloudInstanceConfigsAction) ListCloudInstanceConfigsActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListCloudInstanceConfigsAction"); + } + // Use ListCloudInstanceConfigsAction.newBuilder() to construct. - private ListCloudInstanceConfigsAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListCloudInstanceConfigsAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +56,13 @@ private ListCloudInstanceConfigsAction() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListCloudInstanceConfigsAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_fieldAccessorTable @@ -70,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +100,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -119,6 +127,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 2; private int pageSize_ = 0; + /** * * @@ -135,6 +144,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { public boolean hasPageSize() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -156,6 +166,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -172,6 +183,7 @@ public int getPageSize() { public boolean hasPageToken() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -196,6 +208,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -235,14 +248,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeInt32(2, pageSize_); } if (((bitField0_ & 0x00000002) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pageToken_); + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); } getUnknownFields().writeTo(output); } @@ -253,14 +266,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); } if (((bitField0_ & 0x00000002) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pageToken_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -350,38 +363,38 @@ public static com.google.spanner.executor.v1.ListCloudInstanceConfigsAction pars public static com.google.spanner.executor.v1.ListCloudInstanceConfigsAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudInstanceConfigsAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudInstanceConfigsAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudInstanceConfigsAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudInstanceConfigsAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudInstanceConfigsAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -405,10 +418,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -418,7 +432,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ListCloudInstanceConfigsAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ListCloudInstanceConfigsAction) com.google.spanner.executor.v1.ListCloudInstanceConfigsActionOrBuilder { @@ -428,7 +442,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudInstanceConfigsAction_fieldAccessorTable @@ -440,7 +454,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ListCloudInstanceConfigsAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -504,39 +518,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ListCloudInstanceConfigsAction) { @@ -628,6 +609,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -650,6 +632,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -672,6 +655,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -693,6 +677,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -710,6 +695,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -734,6 +720,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -750,6 +737,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { public boolean hasPageSize() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -766,6 +754,7 @@ public boolean hasPageSize() { public int getPageSize() { return pageSize_; } + /** * * @@ -786,6 +775,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -806,6 +796,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -821,6 +812,7 @@ public Builder clearPageSize() { public boolean hasPageToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -844,6 +836,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -867,6 +860,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -889,6 +883,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -907,6 +902,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -931,17 +927,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ListCloudInstanceConfigsAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java index 59dc08f669a..f5605722c40 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ListCloudInstanceConfigsActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ListCloudInstanceConfigsAction) @@ -36,6 +38,7 @@ public interface ListCloudInstanceConfigsActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -62,6 +65,7 @@ public interface ListCloudInstanceConfigsActionOrBuilder * @return Whether the pageSize field is set. */ boolean hasPageSize(); + /** * * @@ -89,6 +93,7 @@ public interface ListCloudInstanceConfigsActionOrBuilder * @return Whether the pageToken field is set. */ boolean hasPageToken(); + /** * * @@ -102,6 +107,7 @@ public interface ListCloudInstanceConfigsActionOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java index 4c68c112e03..8c75267e142 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,27 +14,40 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** * * *
                                - * Action that lists Cloud Spanner databases.
                                + * Action that lists Cloud Spanner instances.
                                  * 
                                * * Protobuf type {@code google.spanner.executor.v1.ListCloudInstancesAction} */ -public final class ListCloudInstancesAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListCloudInstancesAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ListCloudInstancesAction) ListCloudInstancesActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListCloudInstancesAction"); + } + // Use ListCloudInstancesAction.newBuilder() to construct. - private ListCloudInstancesAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListCloudInstancesAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListCloudInstancesAction() { pageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListCloudInstancesAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudInstancesAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudInstancesAction_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -141,6 +151,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { public boolean hasFilter() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -169,6 +180,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -200,6 +212,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 3; private int pageSize_ = 0; + /** * * @@ -216,6 +229,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public boolean hasPageSize() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -237,6 +251,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -254,6 +269,7 @@ public int getPageSize() { public boolean hasPageToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -279,6 +295,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -319,17 +336,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, filter_); + com.google.protobuf.GeneratedMessage.writeString(output, 2, filter_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeInt32(3, pageSize_); } if (((bitField0_ & 0x00000004) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_); + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); } getUnknownFields().writeTo(output); } @@ -340,17 +357,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, filter_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, filter_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); } if (((bitField0_ & 0x00000004) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -448,38 +465,38 @@ public static com.google.spanner.executor.v1.ListCloudInstancesAction parseFrom( public static com.google.spanner.executor.v1.ListCloudInstancesAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudInstancesAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudInstancesAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudInstancesAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ListCloudInstancesAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ListCloudInstancesAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -503,20 +520,21 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -   * Action that lists Cloud Spanner databases.
                                +   * Action that lists Cloud Spanner instances.
                                    * 
                                * * Protobuf type {@code google.spanner.executor.v1.ListCloudInstancesAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ListCloudInstancesAction) com.google.spanner.executor.v1.ListCloudInstancesActionOrBuilder { @@ -526,7 +544,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ListCloudInstancesAction_fieldAccessorTable @@ -538,7 +556,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ListCloudInstancesAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -605,39 +623,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ListCloudInstancesActi result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ListCloudInstancesAction) { @@ -739,6 +724,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -761,6 +747,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -783,6 +770,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -804,6 +792,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -821,6 +810,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -845,6 +835,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -864,6 +855,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { public boolean hasFilter() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -891,6 +883,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -918,6 +911,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -944,6 +938,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -966,6 +961,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -995,6 +991,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -1011,6 +1008,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public boolean hasPageSize() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1027,6 +1025,7 @@ public boolean hasPageSize() { public int getPageSize() { return pageSize_; } + /** * * @@ -1047,6 +1046,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -1067,6 +1067,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -1083,6 +1084,7 @@ public Builder clearPageSize() { public boolean hasPageToken() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1107,6 +1109,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1131,6 +1134,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1154,6 +1158,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1173,6 +1178,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -1198,17 +1204,6 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ListCloudInstancesAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java index d095177d649..05a23503d17 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ListCloudInstancesActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ListCloudInstancesAction) @@ -36,6 +38,7 @@ public interface ListCloudInstancesActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -66,6 +69,7 @@ public interface ListCloudInstancesActionOrBuilder * @return Whether the filter field is set. */ boolean hasFilter(); + /** * * @@ -83,6 +87,7 @@ public interface ListCloudInstancesActionOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -114,6 +119,7 @@ public interface ListCloudInstancesActionOrBuilder * @return Whether the pageSize field is set. */ boolean hasPageSize(); + /** * * @@ -142,6 +148,7 @@ public interface ListCloudInstancesActionOrBuilder * @return Whether the pageToken field is set. */ boolean hasPageToken(); + /** * * @@ -156,6 +163,7 @@ public interface ListCloudInstancesActionOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java index d2b4b02aea3..e1b8bc62386 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.MutationAction} */ -public final class MutationAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class MutationAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.MutationAction) MutationActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MutationAction"); + } + // Use MutationAction.newBuilder() to construct. - private MutationAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private MutationAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private MutationAction() { mod_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new MutationAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_fieldAccessorTable @@ -80,6 +87,7 @@ public interface InsertArgsOrBuilder * @return A list containing the column. */ java.util.List getColumnList(); + /** * * @@ -92,6 +100,7 @@ public interface InsertArgsOrBuilder * @return The count of column. */ int getColumnCount(); + /** * * @@ -105,6 +114,7 @@ public interface InsertArgsOrBuilder * @return The column at the given index. */ java.lang.String getColumn(int index); + /** * * @@ -129,6 +139,7 @@ public interface InsertArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ java.util.List getTypeList(); + /** * * @@ -139,6 +150,7 @@ public interface InsertArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ com.google.spanner.v1.Type getType(int index); + /** * * @@ -149,6 +161,7 @@ public interface InsertArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ int getTypeCount(); + /** * * @@ -159,6 +172,7 @@ public interface InsertArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ java.util.List getTypeOrBuilderList(); + /** * * @@ -180,6 +194,7 @@ public interface InsertArgsOrBuilder * repeated .google.spanner.executor.v1.ValueList values = 3; */ java.util.List getValuesList(); + /** * * @@ -190,6 +205,7 @@ public interface InsertArgsOrBuilder * repeated .google.spanner.executor.v1.ValueList values = 3; */ com.google.spanner.executor.v1.ValueList getValues(int index); + /** * * @@ -200,6 +216,7 @@ public interface InsertArgsOrBuilder * repeated .google.spanner.executor.v1.ValueList values = 3; */ int getValuesCount(); + /** * * @@ -211,6 +228,7 @@ public interface InsertArgsOrBuilder */ java.util.List getValuesOrBuilderList(); + /** * * @@ -222,6 +240,7 @@ public interface InsertArgsOrBuilder */ com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int index); } + /** * * @@ -231,13 +250,24 @@ public interface InsertArgsOrBuilder * * Protobuf type {@code google.spanner.executor.v1.MutationAction.InsertArgs} */ - public static final class InsertArgs extends com.google.protobuf.GeneratedMessageV3 + public static final class InsertArgs extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.MutationAction.InsertArgs) InsertArgsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "InsertArgs"); + } + // Use InsertArgs.newBuilder() to construct. - private InsertArgs(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private InsertArgs(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -247,19 +277,13 @@ private InsertArgs() { values_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new InsertArgs(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_fieldAccessorTable @@ -273,6 +297,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList column_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -287,6 +312,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public com.google.protobuf.ProtocolStringList getColumnList() { return column_; } + /** * * @@ -301,6 +327,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { public int getColumnCount() { return column_.size(); } + /** * * @@ -316,6 +343,7 @@ public int getColumnCount() { public java.lang.String getColumn(int index) { return column_.get(index); } + /** * * @@ -336,6 +364,7 @@ public com.google.protobuf.ByteString getColumnBytes(int index) { @SuppressWarnings("serial") private java.util.List type_; + /** * * @@ -349,6 +378,7 @@ public com.google.protobuf.ByteString getColumnBytes(int index) { public java.util.List getTypeList() { return type_; } + /** * * @@ -362,6 +392,7 @@ public java.util.List getTypeList() { public java.util.List getTypeOrBuilderList() { return type_; } + /** * * @@ -375,6 +406,7 @@ public java.util.List getTypeOrBu public int getTypeCount() { return type_.size(); } + /** * * @@ -388,6 +420,7 @@ public int getTypeCount() { public com.google.spanner.v1.Type getType(int index) { return type_.get(index); } + /** * * @@ -406,6 +439,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(int index) { @SuppressWarnings("serial") private java.util.List values_; + /** * * @@ -419,6 +453,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(int index) { public java.util.List getValuesList() { return values_; } + /** * * @@ -433,6 +468,7 @@ public java.util.List getValuesList() getValuesOrBuilderList() { return values_; } + /** * * @@ -446,6 +482,7 @@ public java.util.List getValuesList() public int getValuesCount() { return values_.size(); } + /** * * @@ -459,6 +496,7 @@ public int getValuesCount() { public com.google.spanner.executor.v1.ValueList getValues(int index) { return values_.get(index); } + /** * * @@ -488,7 +526,7 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { for (int i = 0; i < column_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, column_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 1, column_.getRaw(i)); } for (int i = 0; i < type_.size(); i++) { output.writeMessage(2, type_.get(i)); @@ -603,38 +641,38 @@ public static com.google.spanner.executor.v1.MutationAction.InsertArgs parseFrom public static com.google.spanner.executor.v1.MutationAction.InsertArgs parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.InsertArgs parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction.InsertArgs parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.InsertArgs parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction.InsertArgs parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.InsertArgs parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -658,11 +696,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -672,8 +710,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.executor.v1.MutationAction.InsertArgs} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.MutationAction.InsertArgs) com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder { @@ -683,7 +720,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_InsertArgs_fieldAccessorTable @@ -695,7 +732,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.MutationAction.InsertArgs.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -783,41 +820,6 @@ private void buildPartial0(com.google.spanner.executor.v1.MutationAction.InsertA } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.MutationAction.InsertArgs) { @@ -860,8 +862,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.MutationAction.InsertArg type_ = other.type_; bitField0_ = (bitField0_ & ~0x00000002); typeBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getTypeFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetTypeFieldBuilder() : null; } else { typeBuilder_.addAllMessages(other.type_); @@ -887,8 +889,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.MutationAction.InsertArg values_ = other.values_; bitField0_ = (bitField0_ & ~0x00000004); valuesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getValuesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetValuesFieldBuilder() : null; } else { valuesBuilder_.addAllMessages(other.values_); @@ -981,6 +983,7 @@ private void ensureColumnIsMutable() { } bitField0_ |= 0x00000001; } + /** * * @@ -996,6 +999,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { column_.makeImmutable(); return column_; } + /** * * @@ -1010,6 +1014,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { public int getColumnCount() { return column_.size(); } + /** * * @@ -1025,6 +1030,7 @@ public int getColumnCount() { public java.lang.String getColumn(int index) { return column_.get(index); } + /** * * @@ -1040,6 +1046,7 @@ public java.lang.String getColumn(int index) { public com.google.protobuf.ByteString getColumnBytes(int index) { return column_.getByteString(index); } + /** * * @@ -1063,6 +1070,7 @@ public Builder setColumn(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1085,6 +1093,7 @@ public Builder addColumn(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1104,6 +1113,7 @@ public Builder addAllColumn(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1122,6 +1132,7 @@ public Builder clearColumn() { onChanged(); return this; } + /** * * @@ -1155,7 +1166,7 @@ private void ensureTypeIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> @@ -1177,6 +1188,7 @@ public java.util.List getTypeList() { return typeBuilder_.getMessageList(); } } + /** * * @@ -1193,6 +1205,7 @@ public int getTypeCount() { return typeBuilder_.getCount(); } } + /** * * @@ -1209,6 +1222,7 @@ public com.google.spanner.v1.Type getType(int index) { return typeBuilder_.getMessage(index); } } + /** * * @@ -1231,6 +1245,7 @@ public Builder setType(int index, com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -1250,6 +1265,7 @@ public Builder setType(int index, com.google.spanner.v1.Type.Builder builderForV } return this; } + /** * * @@ -1272,6 +1288,7 @@ public Builder addType(com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -1294,6 +1311,7 @@ public Builder addType(int index, com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -1313,6 +1331,7 @@ public Builder addType(com.google.spanner.v1.Type.Builder builderForValue) { } return this; } + /** * * @@ -1332,6 +1351,7 @@ public Builder addType(int index, com.google.spanner.v1.Type.Builder builderForV } return this; } + /** * * @@ -1351,6 +1371,7 @@ public Builder addAllType(java.lang.Iterablerepeated .google.spanner.v1.Type type = 2; */ public com.google.spanner.v1.Type.Builder getTypeBuilder(int index) { - return getTypeFieldBuilder().getBuilder(index); + return internalGetTypeFieldBuilder().getBuilder(index); } + /** * * @@ -1417,6 +1441,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(int index) { return typeBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1433,6 +1458,7 @@ public java.util.List getTypeOrBu return java.util.Collections.unmodifiableList(type_); } } + /** * * @@ -1443,8 +1469,10 @@ public java.util.List getTypeOrBu * repeated .google.spanner.v1.Type type = 2; */ public com.google.spanner.v1.Type.Builder addTypeBuilder() { - return getTypeFieldBuilder().addBuilder(com.google.spanner.v1.Type.getDefaultInstance()); + return internalGetTypeFieldBuilder() + .addBuilder(com.google.spanner.v1.Type.getDefaultInstance()); } + /** * * @@ -1455,9 +1483,10 @@ public com.google.spanner.v1.Type.Builder addTypeBuilder() { * repeated .google.spanner.v1.Type type = 2; */ public com.google.spanner.v1.Type.Builder addTypeBuilder(int index) { - return getTypeFieldBuilder() + return internalGetTypeFieldBuilder() .addBuilder(index, com.google.spanner.v1.Type.getDefaultInstance()); } + /** * * @@ -1468,17 +1497,17 @@ public com.google.spanner.v1.Type.Builder addTypeBuilder(int index) { * repeated .google.spanner.v1.Type type = 2; */ public java.util.List getTypeBuilderList() { - return getTypeFieldBuilder().getBuilderList(); + return internalGetTypeFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> - getTypeFieldBuilder() { + internalGetTypeFieldBuilder() { if (typeBuilder_ == null) { typeBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder>( @@ -1498,7 +1527,7 @@ private void ensureValuesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> @@ -1520,6 +1549,7 @@ public java.util.List getValuesList() return valuesBuilder_.getMessageList(); } } + /** * * @@ -1536,6 +1566,7 @@ public int getValuesCount() { return valuesBuilder_.getCount(); } } + /** * * @@ -1552,6 +1583,7 @@ public com.google.spanner.executor.v1.ValueList getValues(int index) { return valuesBuilder_.getMessage(index); } } + /** * * @@ -1574,6 +1606,7 @@ public Builder setValues(int index, com.google.spanner.executor.v1.ValueList val } return this; } + /** * * @@ -1594,6 +1627,7 @@ public Builder setValues( } return this; } + /** * * @@ -1616,6 +1650,7 @@ public Builder addValues(com.google.spanner.executor.v1.ValueList value) { } return this; } + /** * * @@ -1638,6 +1673,7 @@ public Builder addValues(int index, com.google.spanner.executor.v1.ValueList val } return this; } + /** * * @@ -1657,6 +1693,7 @@ public Builder addValues(com.google.spanner.executor.v1.ValueList.Builder builde } return this; } + /** * * @@ -1677,6 +1714,7 @@ public Builder addValues( } return this; } + /** * * @@ -1697,6 +1735,7 @@ public Builder addAllValues( } return this; } + /** * * @@ -1716,6 +1755,7 @@ public Builder clearValues() { } return this; } + /** * * @@ -1735,6 +1775,7 @@ public Builder removeValues(int index) { } return this; } + /** * * @@ -1745,8 +1786,9 @@ public Builder removeValues(int index) { * repeated .google.spanner.executor.v1.ValueList values = 3; */ public com.google.spanner.executor.v1.ValueList.Builder getValuesBuilder(int index) { - return getValuesFieldBuilder().getBuilder(index); + return internalGetValuesFieldBuilder().getBuilder(index); } + /** * * @@ -1763,6 +1805,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int return valuesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1780,6 +1823,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int return java.util.Collections.unmodifiableList(values_); } } + /** * * @@ -1790,9 +1834,10 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int * repeated .google.spanner.executor.v1.ValueList values = 3; */ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder() { - return getValuesFieldBuilder() + return internalGetValuesFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -1803,9 +1848,10 @@ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder() { * repeated .google.spanner.executor.v1.ValueList values = 3; */ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder(int index) { - return getValuesFieldBuilder() + return internalGetValuesFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -1817,17 +1863,17 @@ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder(int ind */ public java.util.List getValuesBuilderList() { - return getValuesFieldBuilder().getBuilderList(); + return internalGetValuesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getValuesFieldBuilder() { + internalGetValuesFieldBuilder() { if (valuesBuilder_ == null) { valuesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -1837,18 +1883,6 @@ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder(int ind return valuesBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.MutationAction.InsertArgs) } @@ -1918,6 +1952,7 @@ public interface UpdateArgsOrBuilder * @return A list containing the column. */ java.util.List getColumnList(); + /** * * @@ -1930,6 +1965,7 @@ public interface UpdateArgsOrBuilder * @return The count of column. */ int getColumnCount(); + /** * * @@ -1943,6 +1979,7 @@ public interface UpdateArgsOrBuilder * @return The column at the given index. */ java.lang.String getColumn(int index); + /** * * @@ -1967,6 +2004,7 @@ public interface UpdateArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ java.util.List getTypeList(); + /** * * @@ -1977,6 +2015,7 @@ public interface UpdateArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ com.google.spanner.v1.Type getType(int index); + /** * * @@ -1987,6 +2026,7 @@ public interface UpdateArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ int getTypeCount(); + /** * * @@ -1997,6 +2037,7 @@ public interface UpdateArgsOrBuilder * repeated .google.spanner.v1.Type type = 2; */ java.util.List getTypeOrBuilderList(); + /** * * @@ -2018,6 +2059,7 @@ public interface UpdateArgsOrBuilder * repeated .google.spanner.executor.v1.ValueList values = 3; */ java.util.List getValuesList(); + /** * * @@ -2028,6 +2070,7 @@ public interface UpdateArgsOrBuilder * repeated .google.spanner.executor.v1.ValueList values = 3; */ com.google.spanner.executor.v1.ValueList getValues(int index); + /** * * @@ -2038,6 +2081,7 @@ public interface UpdateArgsOrBuilder * repeated .google.spanner.executor.v1.ValueList values = 3; */ int getValuesCount(); + /** * * @@ -2049,6 +2093,7 @@ public interface UpdateArgsOrBuilder */ java.util.List getValuesOrBuilderList(); + /** * * @@ -2060,6 +2105,7 @@ public interface UpdateArgsOrBuilder */ com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int index); } + /** * * @@ -2069,13 +2115,24 @@ public interface UpdateArgsOrBuilder * * Protobuf type {@code google.spanner.executor.v1.MutationAction.UpdateArgs} */ - public static final class UpdateArgs extends com.google.protobuf.GeneratedMessageV3 + public static final class UpdateArgs extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.MutationAction.UpdateArgs) UpdateArgsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateArgs"); + } + // Use UpdateArgs.newBuilder() to construct. - private UpdateArgs(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateArgs(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -2085,19 +2142,13 @@ private UpdateArgs() { values_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateArgs(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_fieldAccessorTable @@ -2111,6 +2162,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList column_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -2125,6 +2177,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public com.google.protobuf.ProtocolStringList getColumnList() { return column_; } + /** * * @@ -2139,6 +2192,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { public int getColumnCount() { return column_.size(); } + /** * * @@ -2154,6 +2208,7 @@ public int getColumnCount() { public java.lang.String getColumn(int index) { return column_.get(index); } + /** * * @@ -2174,6 +2229,7 @@ public com.google.protobuf.ByteString getColumnBytes(int index) { @SuppressWarnings("serial") private java.util.List type_; + /** * * @@ -2187,6 +2243,7 @@ public com.google.protobuf.ByteString getColumnBytes(int index) { public java.util.List getTypeList() { return type_; } + /** * * @@ -2200,6 +2257,7 @@ public java.util.List getTypeList() { public java.util.List getTypeOrBuilderList() { return type_; } + /** * * @@ -2213,6 +2271,7 @@ public java.util.List getTypeOrBu public int getTypeCount() { return type_.size(); } + /** * * @@ -2226,6 +2285,7 @@ public int getTypeCount() { public com.google.spanner.v1.Type getType(int index) { return type_.get(index); } + /** * * @@ -2244,6 +2304,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(int index) { @SuppressWarnings("serial") private java.util.List values_; + /** * * @@ -2257,6 +2318,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(int index) { public java.util.List getValuesList() { return values_; } + /** * * @@ -2271,6 +2333,7 @@ public java.util.List getValuesList() getValuesOrBuilderList() { return values_; } + /** * * @@ -2284,6 +2347,7 @@ public java.util.List getValuesList() public int getValuesCount() { return values_.size(); } + /** * * @@ -2297,6 +2361,7 @@ public int getValuesCount() { public com.google.spanner.executor.v1.ValueList getValues(int index) { return values_.get(index); } + /** * * @@ -2326,7 +2391,7 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { for (int i = 0; i < column_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, column_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 1, column_.getRaw(i)); } for (int i = 0; i < type_.size(); i++) { output.writeMessage(2, type_.get(i)); @@ -2441,38 +2506,38 @@ public static com.google.spanner.executor.v1.MutationAction.UpdateArgs parseFrom public static com.google.spanner.executor.v1.MutationAction.UpdateArgs parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.UpdateArgs parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction.UpdateArgs parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.UpdateArgs parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction.UpdateArgs parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.UpdateArgs parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2496,11 +2561,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2510,8 +2575,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.executor.v1.MutationAction.UpdateArgs} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.MutationAction.UpdateArgs) com.google.spanner.executor.v1.MutationAction.UpdateArgsOrBuilder { @@ -2521,7 +2585,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_UpdateArgs_fieldAccessorTable @@ -2533,7 +2597,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.MutationAction.UpdateArgs.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -2621,41 +2685,6 @@ private void buildPartial0(com.google.spanner.executor.v1.MutationAction.UpdateA } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.MutationAction.UpdateArgs) { @@ -2698,8 +2727,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.MutationAction.UpdateArg type_ = other.type_; bitField0_ = (bitField0_ & ~0x00000002); typeBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getTypeFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetTypeFieldBuilder() : null; } else { typeBuilder_.addAllMessages(other.type_); @@ -2725,8 +2754,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.MutationAction.UpdateArg values_ = other.values_; bitField0_ = (bitField0_ & ~0x00000004); valuesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getValuesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetValuesFieldBuilder() : null; } else { valuesBuilder_.addAllMessages(other.values_); @@ -2819,6 +2848,7 @@ private void ensureColumnIsMutable() { } bitField0_ |= 0x00000001; } + /** * * @@ -2834,6 +2864,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { column_.makeImmutable(); return column_; } + /** * * @@ -2848,6 +2879,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { public int getColumnCount() { return column_.size(); } + /** * * @@ -2863,6 +2895,7 @@ public int getColumnCount() { public java.lang.String getColumn(int index) { return column_.get(index); } + /** * * @@ -2878,6 +2911,7 @@ public java.lang.String getColumn(int index) { public com.google.protobuf.ByteString getColumnBytes(int index) { return column_.getByteString(index); } + /** * * @@ -2901,6 +2935,7 @@ public Builder setColumn(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -2923,6 +2958,7 @@ public Builder addColumn(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2942,6 +2978,7 @@ public Builder addAllColumn(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -2960,6 +2997,7 @@ public Builder clearColumn() { onChanged(); return this; } + /** * * @@ -2993,7 +3031,7 @@ private void ensureTypeIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> @@ -3015,6 +3053,7 @@ public java.util.List getTypeList() { return typeBuilder_.getMessageList(); } } + /** * * @@ -3031,6 +3070,7 @@ public int getTypeCount() { return typeBuilder_.getCount(); } } + /** * * @@ -3047,6 +3087,7 @@ public com.google.spanner.v1.Type getType(int index) { return typeBuilder_.getMessage(index); } } + /** * * @@ -3069,6 +3110,7 @@ public Builder setType(int index, com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -3088,6 +3130,7 @@ public Builder setType(int index, com.google.spanner.v1.Type.Builder builderForV } return this; } + /** * * @@ -3110,6 +3153,7 @@ public Builder addType(com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -3132,6 +3176,7 @@ public Builder addType(int index, com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -3151,6 +3196,7 @@ public Builder addType(com.google.spanner.v1.Type.Builder builderForValue) { } return this; } + /** * * @@ -3170,6 +3216,7 @@ public Builder addType(int index, com.google.spanner.v1.Type.Builder builderForV } return this; } + /** * * @@ -3189,6 +3236,7 @@ public Builder addAllType(java.lang.Iterablerepeated .google.spanner.v1.Type type = 2; */ public com.google.spanner.v1.Type.Builder getTypeBuilder(int index) { - return getTypeFieldBuilder().getBuilder(index); + return internalGetTypeFieldBuilder().getBuilder(index); } + /** * * @@ -3255,6 +3306,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(int index) { return typeBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3271,6 +3323,7 @@ public java.util.List getTypeOrBu return java.util.Collections.unmodifiableList(type_); } } + /** * * @@ -3281,8 +3334,10 @@ public java.util.List getTypeOrBu * repeated .google.spanner.v1.Type type = 2; */ public com.google.spanner.v1.Type.Builder addTypeBuilder() { - return getTypeFieldBuilder().addBuilder(com.google.spanner.v1.Type.getDefaultInstance()); + return internalGetTypeFieldBuilder() + .addBuilder(com.google.spanner.v1.Type.getDefaultInstance()); } + /** * * @@ -3293,9 +3348,10 @@ public com.google.spanner.v1.Type.Builder addTypeBuilder() { * repeated .google.spanner.v1.Type type = 2; */ public com.google.spanner.v1.Type.Builder addTypeBuilder(int index) { - return getTypeFieldBuilder() + return internalGetTypeFieldBuilder() .addBuilder(index, com.google.spanner.v1.Type.getDefaultInstance()); } + /** * * @@ -3306,17 +3362,17 @@ public com.google.spanner.v1.Type.Builder addTypeBuilder(int index) { * repeated .google.spanner.v1.Type type = 2; */ public java.util.List getTypeBuilderList() { - return getTypeFieldBuilder().getBuilderList(); + return internalGetTypeFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> - getTypeFieldBuilder() { + internalGetTypeFieldBuilder() { if (typeBuilder_ == null) { typeBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder>( @@ -3336,7 +3392,7 @@ private void ensureValuesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> @@ -3358,6 +3414,7 @@ public java.util.List getValuesList() return valuesBuilder_.getMessageList(); } } + /** * * @@ -3374,6 +3431,7 @@ public int getValuesCount() { return valuesBuilder_.getCount(); } } + /** * * @@ -3390,6 +3448,7 @@ public com.google.spanner.executor.v1.ValueList getValues(int index) { return valuesBuilder_.getMessage(index); } } + /** * * @@ -3412,6 +3471,7 @@ public Builder setValues(int index, com.google.spanner.executor.v1.ValueList val } return this; } + /** * * @@ -3432,6 +3492,7 @@ public Builder setValues( } return this; } + /** * * @@ -3454,6 +3515,7 @@ public Builder addValues(com.google.spanner.executor.v1.ValueList value) { } return this; } + /** * * @@ -3476,6 +3538,7 @@ public Builder addValues(int index, com.google.spanner.executor.v1.ValueList val } return this; } + /** * * @@ -3495,6 +3558,7 @@ public Builder addValues(com.google.spanner.executor.v1.ValueList.Builder builde } return this; } + /** * * @@ -3515,6 +3579,7 @@ public Builder addValues( } return this; } + /** * * @@ -3535,6 +3600,7 @@ public Builder addAllValues( } return this; } + /** * * @@ -3554,6 +3620,7 @@ public Builder clearValues() { } return this; } + /** * * @@ -3573,6 +3640,7 @@ public Builder removeValues(int index) { } return this; } + /** * * @@ -3583,8 +3651,9 @@ public Builder removeValues(int index) { * repeated .google.spanner.executor.v1.ValueList values = 3; */ public com.google.spanner.executor.v1.ValueList.Builder getValuesBuilder(int index) { - return getValuesFieldBuilder().getBuilder(index); + return internalGetValuesFieldBuilder().getBuilder(index); } + /** * * @@ -3601,6 +3670,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int return valuesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3618,6 +3688,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int return java.util.Collections.unmodifiableList(values_); } } + /** * * @@ -3628,9 +3699,10 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getValuesOrBuilder(int * repeated .google.spanner.executor.v1.ValueList values = 3; */ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder() { - return getValuesFieldBuilder() + return internalGetValuesFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -3641,9 +3713,10 @@ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder() { * repeated .google.spanner.executor.v1.ValueList values = 3; */ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder(int index) { - return getValuesFieldBuilder() + return internalGetValuesFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -3655,17 +3728,17 @@ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder(int ind */ public java.util.List getValuesBuilderList() { - return getValuesFieldBuilder().getBuilderList(); + return internalGetValuesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getValuesFieldBuilder() { + internalGetValuesFieldBuilder() { if (valuesBuilder_ == null) { valuesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -3675,18 +3748,6 @@ public com.google.spanner.executor.v1.ValueList.Builder addValuesBuilder(int ind return valuesBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.MutationAction.UpdateArgs) } @@ -3756,6 +3817,7 @@ public interface ModOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -3782,6 +3844,7 @@ public interface ModOrBuilder * @return Whether the insert field is set. */ boolean hasInsert(); + /** * * @@ -3795,6 +3858,7 @@ public interface ModOrBuilder * @return The insert. */ com.google.spanner.executor.v1.MutationAction.InsertArgs getInsert(); + /** * * @@ -3819,6 +3883,7 @@ public interface ModOrBuilder * @return Whether the update field is set. */ boolean hasUpdate(); + /** * * @@ -3831,6 +3896,7 @@ public interface ModOrBuilder * @return The update. */ com.google.spanner.executor.v1.MutationAction.UpdateArgs getUpdate(); + /** * * @@ -3854,6 +3920,7 @@ public interface ModOrBuilder * @return Whether the insertOrUpdate field is set. */ boolean hasInsertOrUpdate(); + /** * * @@ -3866,6 +3933,7 @@ public interface ModOrBuilder * @return The insertOrUpdate. */ com.google.spanner.executor.v1.MutationAction.InsertArgs getInsertOrUpdate(); + /** * * @@ -3889,6 +3957,7 @@ public interface ModOrBuilder * @return Whether the replace field is set. */ boolean hasReplace(); + /** * * @@ -3901,6 +3970,7 @@ public interface ModOrBuilder * @return The replace. */ com.google.spanner.executor.v1.MutationAction.InsertArgs getReplace(); + /** * * @@ -3924,6 +3994,7 @@ public interface ModOrBuilder * @return Whether the deleteKeys field is set. */ boolean hasDeleteKeys(); + /** * * @@ -3936,6 +4007,7 @@ public interface ModOrBuilder * @return The deleteKeys. */ com.google.spanner.executor.v1.KeySet getDeleteKeys(); + /** * * @@ -3947,6 +4019,7 @@ public interface ModOrBuilder */ com.google.spanner.executor.v1.KeySetOrBuilder getDeleteKeysOrBuilder(); } + /** * * @@ -3958,13 +4031,24 @@ public interface ModOrBuilder * * Protobuf type {@code google.spanner.executor.v1.MutationAction.Mod} */ - public static final class Mod extends com.google.protobuf.GeneratedMessageV3 + public static final class Mod extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.MutationAction.Mod) ModOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Mod"); + } + // Use Mod.newBuilder() to construct. - private Mod(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Mod(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -3972,19 +4056,13 @@ private Mod() { table_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Mod(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_Mod_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_Mod_fieldAccessorTable @@ -3998,6 +4076,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -4021,6 +4100,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -4047,6 +4127,7 @@ public com.google.protobuf.ByteString getTableBytes() { public static final int INSERT_FIELD_NUMBER = 2; private com.google.spanner.executor.v1.MutationAction.InsertArgs insert_; + /** * * @@ -4063,6 +4144,7 @@ public com.google.protobuf.ByteString getTableBytes() { public boolean hasInsert() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -4081,6 +4163,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getInsert() { ? com.google.spanner.executor.v1.MutationAction.InsertArgs.getDefaultInstance() : insert_; } + /** * * @@ -4100,6 +4183,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder getInse public static final int UPDATE_FIELD_NUMBER = 3; private com.google.spanner.executor.v1.MutationAction.UpdateArgs update_; + /** * * @@ -4115,6 +4199,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder getInse public boolean hasUpdate() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -4132,6 +4217,7 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgs getUpdate() { ? com.google.spanner.executor.v1.MutationAction.UpdateArgs.getDefaultInstance() : update_; } + /** * * @@ -4150,6 +4236,7 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgsOrBuilder getUpda public static final int INSERT_OR_UPDATE_FIELD_NUMBER = 4; private com.google.spanner.executor.v1.MutationAction.InsertArgs insertOrUpdate_; + /** * * @@ -4165,6 +4252,7 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgsOrBuilder getUpda public boolean hasInsertOrUpdate() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -4182,6 +4270,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getInsertOrUpdat ? com.google.spanner.executor.v1.MutationAction.InsertArgs.getDefaultInstance() : insertOrUpdate_; } + /** * * @@ -4201,6 +4290,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getInsertOrUpdat public static final int REPLACE_FIELD_NUMBER = 5; private com.google.spanner.executor.v1.MutationAction.InsertArgs replace_; + /** * * @@ -4216,6 +4306,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getInsertOrUpdat public boolean hasReplace() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -4233,6 +4324,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getReplace() { ? com.google.spanner.executor.v1.MutationAction.InsertArgs.getDefaultInstance() : replace_; } + /** * * @@ -4251,6 +4343,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder getRepl public static final int DELETE_KEYS_FIELD_NUMBER = 6; private com.google.spanner.executor.v1.KeySet deleteKeys_; + /** * * @@ -4266,6 +4359,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder getRepl public boolean hasDeleteKeys() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -4283,6 +4377,7 @@ public com.google.spanner.executor.v1.KeySet getDeleteKeys() { ? com.google.spanner.executor.v1.KeySet.getDefaultInstance() : deleteKeys_; } + /** * * @@ -4313,8 +4408,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getInsert()); @@ -4340,8 +4435,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getInsert()); @@ -4470,38 +4565,38 @@ public static com.google.spanner.executor.v1.MutationAction.Mod parseFrom( public static com.google.spanner.executor.v1.MutationAction.Mod parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.Mod parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction.Mod parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.Mod parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction.Mod parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction.Mod parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -4524,11 +4619,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -4540,8 +4635,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.executor.v1.MutationAction.Mod} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.MutationAction.Mod) com.google.spanner.executor.v1.MutationAction.ModOrBuilder { @@ -4551,7 +4645,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_Mod_fieldAccessorTable @@ -4565,18 +4659,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getInsertFieldBuilder(); - getUpdateFieldBuilder(); - getInsertOrUpdateFieldBuilder(); - getReplaceFieldBuilder(); - getDeleteKeysFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetInsertFieldBuilder(); + internalGetUpdateFieldBuilder(); + internalGetInsertOrUpdateFieldBuilder(); + internalGetReplaceFieldBuilder(); + internalGetDeleteKeysFieldBuilder(); } } @@ -4675,41 +4769,6 @@ private void buildPartial0(com.google.spanner.executor.v1.MutationAction.Mod res result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.MutationAction.Mod) { @@ -4777,32 +4836,36 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getInsertFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetInsertFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getUpdateFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetUpdateFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { input.readMessage( - getInsertOrUpdateFieldBuilder().getBuilder(), extensionRegistry); + internalGetInsertOrUpdateFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 case 42: { - input.readMessage(getReplaceFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetReplaceFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 case 50: { - input.readMessage(getDeleteKeysFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetDeleteKeysFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 50 @@ -4826,6 +4889,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object table_ = ""; + /** * * @@ -4848,6 +4912,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -4870,6 +4935,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -4891,6 +4957,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -4908,6 +4975,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -4932,11 +5000,12 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.executor.v1.MutationAction.InsertArgs insert_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder> insertBuilder_; + /** * * @@ -4952,6 +5021,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { public boolean hasInsert() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -4973,6 +5043,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getInsert() { return insertBuilder_.getMessage(); } } + /** * * @@ -4996,6 +5067,7 @@ public Builder setInsert(com.google.spanner.executor.v1.MutationAction.InsertArg onChanged(); return this; } + /** * * @@ -5017,6 +5089,7 @@ public Builder setInsert( onChanged(); return this; } + /** * * @@ -5047,6 +5120,7 @@ public Builder mergeInsert(com.google.spanner.executor.v1.MutationAction.InsertA } return this; } + /** * * @@ -5067,6 +5141,7 @@ public Builder clearInsert() { onChanged(); return this; } + /** * * @@ -5080,8 +5155,9 @@ public Builder clearInsert() { public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getInsertBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getInsertFieldBuilder().getBuilder(); + return internalGetInsertFieldBuilder().getBuilder(); } + /** * * @@ -5102,6 +5178,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getInser : insert_; } } + /** * * @@ -5112,14 +5189,14 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getInser * * .google.spanner.executor.v1.MutationAction.InsertArgs insert = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder> - getInsertFieldBuilder() { + internalGetInsertFieldBuilder() { if (insertBuilder_ == null) { insertBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder>( @@ -5130,11 +5207,12 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getInser } private com.google.spanner.executor.v1.MutationAction.UpdateArgs update_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.UpdateArgs, com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder, com.google.spanner.executor.v1.MutationAction.UpdateArgsOrBuilder> updateBuilder_; + /** * * @@ -5149,6 +5227,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getInser public boolean hasUpdate() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -5169,6 +5248,7 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgs getUpdate() { return updateBuilder_.getMessage(); } } + /** * * @@ -5191,6 +5271,7 @@ public Builder setUpdate(com.google.spanner.executor.v1.MutationAction.UpdateArg onChanged(); return this; } + /** * * @@ -5211,6 +5292,7 @@ public Builder setUpdate( onChanged(); return this; } + /** * * @@ -5240,6 +5322,7 @@ public Builder mergeUpdate(com.google.spanner.executor.v1.MutationAction.UpdateA } return this; } + /** * * @@ -5259,6 +5342,7 @@ public Builder clearUpdate() { onChanged(); return this; } + /** * * @@ -5271,8 +5355,9 @@ public Builder clearUpdate() { public com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder getUpdateBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getUpdateFieldBuilder().getBuilder(); + return internalGetUpdateFieldBuilder().getBuilder(); } + /** * * @@ -5292,6 +5377,7 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder getUpdat : update_; } } + /** * * @@ -5301,14 +5387,14 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder getUpdat * * .google.spanner.executor.v1.MutationAction.UpdateArgs update = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.UpdateArgs, com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder, com.google.spanner.executor.v1.MutationAction.UpdateArgsOrBuilder> - getUpdateFieldBuilder() { + internalGetUpdateFieldBuilder() { if (updateBuilder_ == null) { updateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.UpdateArgs, com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder, com.google.spanner.executor.v1.MutationAction.UpdateArgsOrBuilder>( @@ -5319,11 +5405,12 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder getUpdat } private com.google.spanner.executor.v1.MutationAction.InsertArgs insertOrUpdate_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder> insertOrUpdateBuilder_; + /** * * @@ -5338,6 +5425,7 @@ public com.google.spanner.executor.v1.MutationAction.UpdateArgs.Builder getUpdat public boolean hasInsertOrUpdate() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -5358,6 +5446,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getInsertOrUpdat return insertOrUpdateBuilder_.getMessage(); } } + /** * * @@ -5381,6 +5470,7 @@ public Builder setInsertOrUpdate( onChanged(); return this; } + /** * * @@ -5401,6 +5491,7 @@ public Builder setInsertOrUpdate( onChanged(); return this; } + /** * * @@ -5431,6 +5522,7 @@ public Builder mergeInsertOrUpdate( } return this; } + /** * * @@ -5450,6 +5542,7 @@ public Builder clearInsertOrUpdate() { onChanged(); return this; } + /** * * @@ -5463,8 +5556,9 @@ public Builder clearInsertOrUpdate() { getInsertOrUpdateBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getInsertOrUpdateFieldBuilder().getBuilder(); + return internalGetInsertOrUpdateFieldBuilder().getBuilder(); } + /** * * @@ -5484,6 +5578,7 @@ public Builder clearInsertOrUpdate() { : insertOrUpdate_; } } + /** * * @@ -5493,14 +5588,14 @@ public Builder clearInsertOrUpdate() { * * .google.spanner.executor.v1.MutationAction.InsertArgs insert_or_update = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder> - getInsertOrUpdateFieldBuilder() { + internalGetInsertOrUpdateFieldBuilder() { if (insertOrUpdateBuilder_ == null) { insertOrUpdateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder>( @@ -5511,11 +5606,12 @@ public Builder clearInsertOrUpdate() { } private com.google.spanner.executor.v1.MutationAction.InsertArgs replace_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder> replaceBuilder_; + /** * * @@ -5530,6 +5626,7 @@ public Builder clearInsertOrUpdate() { public boolean hasReplace() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -5550,6 +5647,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs getReplace() { return replaceBuilder_.getMessage(); } } + /** * * @@ -5572,6 +5670,7 @@ public Builder setReplace(com.google.spanner.executor.v1.MutationAction.InsertAr onChanged(); return this; } + /** * * @@ -5592,6 +5691,7 @@ public Builder setReplace( onChanged(); return this; } + /** * * @@ -5621,6 +5721,7 @@ public Builder mergeReplace(com.google.spanner.executor.v1.MutationAction.Insert } return this; } + /** * * @@ -5640,6 +5741,7 @@ public Builder clearReplace() { onChanged(); return this; } + /** * * @@ -5652,8 +5754,9 @@ public Builder clearReplace() { public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getReplaceBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getReplaceFieldBuilder().getBuilder(); + return internalGetReplaceFieldBuilder().getBuilder(); } + /** * * @@ -5673,6 +5776,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getRepla : replace_; } } + /** * * @@ -5682,14 +5786,14 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getRepla * * .google.spanner.executor.v1.MutationAction.InsertArgs replace = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder> - getReplaceFieldBuilder() { + internalGetReplaceFieldBuilder() { if (replaceBuilder_ == null) { replaceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction.InsertArgs, com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder, com.google.spanner.executor.v1.MutationAction.InsertArgsOrBuilder>( @@ -5700,11 +5804,12 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getRepla } private com.google.spanner.executor.v1.KeySet deleteKeys_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.KeySet, com.google.spanner.executor.v1.KeySet.Builder, com.google.spanner.executor.v1.KeySetOrBuilder> deleteKeysBuilder_; + /** * * @@ -5719,6 +5824,7 @@ public com.google.spanner.executor.v1.MutationAction.InsertArgs.Builder getRepla public boolean hasDeleteKeys() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -5739,6 +5845,7 @@ public com.google.spanner.executor.v1.KeySet getDeleteKeys() { return deleteKeysBuilder_.getMessage(); } } + /** * * @@ -5761,6 +5868,7 @@ public Builder setDeleteKeys(com.google.spanner.executor.v1.KeySet value) { onChanged(); return this; } + /** * * @@ -5780,6 +5888,7 @@ public Builder setDeleteKeys(com.google.spanner.executor.v1.KeySet.Builder build onChanged(); return this; } + /** * * @@ -5807,6 +5916,7 @@ public Builder mergeDeleteKeys(com.google.spanner.executor.v1.KeySet value) { } return this; } + /** * * @@ -5826,6 +5936,7 @@ public Builder clearDeleteKeys() { onChanged(); return this; } + /** * * @@ -5838,8 +5949,9 @@ public Builder clearDeleteKeys() { public com.google.spanner.executor.v1.KeySet.Builder getDeleteKeysBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getDeleteKeysFieldBuilder().getBuilder(); + return internalGetDeleteKeysFieldBuilder().getBuilder(); } + /** * * @@ -5858,6 +5970,7 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getDeleteKeysOrBuilder() { : deleteKeys_; } } + /** * * @@ -5867,14 +5980,14 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getDeleteKeysOrBuilder() { * * .google.spanner.executor.v1.KeySet delete_keys = 6; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.KeySet, com.google.spanner.executor.v1.KeySet.Builder, com.google.spanner.executor.v1.KeySetOrBuilder> - getDeleteKeysFieldBuilder() { + internalGetDeleteKeysFieldBuilder() { if (deleteKeysBuilder_ == null) { deleteKeysBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.KeySet, com.google.spanner.executor.v1.KeySet.Builder, com.google.spanner.executor.v1.KeySetOrBuilder>( @@ -5884,18 +5997,6 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getDeleteKeysOrBuilder() { return deleteKeysBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.MutationAction.Mod) } @@ -5952,6 +6053,7 @@ public com.google.spanner.executor.v1.MutationAction.Mod getDefaultInstanceForTy @SuppressWarnings("serial") private java.util.List mod_; + /** * * @@ -5965,6 +6067,7 @@ public com.google.spanner.executor.v1.MutationAction.Mod getDefaultInstanceForTy public java.util.List getModList() { return mod_; } + /** * * @@ -5979,6 +6082,7 @@ public java.util.List getModL getModOrBuilderList() { return mod_; } + /** * * @@ -5992,6 +6096,7 @@ public java.util.List getModL public int getModCount() { return mod_.size(); } + /** * * @@ -6005,6 +6110,7 @@ public int getModCount() { public com.google.spanner.executor.v1.MutationAction.Mod getMod(int index) { return mod_.get(index); } + /** * * @@ -6122,38 +6228,38 @@ public static com.google.spanner.executor.v1.MutationAction parseFrom( public static com.google.spanner.executor.v1.MutationAction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.MutationAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.MutationAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -6176,10 +6282,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -6189,7 +6296,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.MutationAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.MutationAction) com.google.spanner.executor.v1.MutationActionOrBuilder { @@ -6199,7 +6306,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_MutationAction_fieldAccessorTable @@ -6211,7 +6318,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.MutationAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -6277,39 +6384,6 @@ private void buildPartial0(com.google.spanner.executor.v1.MutationAction result) int from_bitField0_ = bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.MutationAction) { @@ -6341,8 +6415,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.MutationAction other) { mod_ = other.mod_; bitField0_ = (bitField0_ & ~0x00000001); modBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getModFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetModFieldBuilder() : null; } else { modBuilder_.addAllMessages(other.mod_); @@ -6418,7 +6492,7 @@ private void ensureModIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.MutationAction.Mod, com.google.spanner.executor.v1.MutationAction.Mod.Builder, com.google.spanner.executor.v1.MutationAction.ModOrBuilder> @@ -6440,6 +6514,7 @@ public java.util.List getModL return modBuilder_.getMessageList(); } } + /** * * @@ -6456,6 +6531,7 @@ public int getModCount() { return modBuilder_.getCount(); } } + /** * * @@ -6472,6 +6548,7 @@ public com.google.spanner.executor.v1.MutationAction.Mod getMod(int index) { return modBuilder_.getMessage(index); } } + /** * * @@ -6494,6 +6571,7 @@ public Builder setMod(int index, com.google.spanner.executor.v1.MutationAction.M } return this; } + /** * * @@ -6514,6 +6592,7 @@ public Builder setMod( } return this; } + /** * * @@ -6536,6 +6615,7 @@ public Builder addMod(com.google.spanner.executor.v1.MutationAction.Mod value) { } return this; } + /** * * @@ -6558,6 +6638,7 @@ public Builder addMod(int index, com.google.spanner.executor.v1.MutationAction.M } return this; } + /** * * @@ -6578,6 +6659,7 @@ public Builder addMod( } return this; } + /** * * @@ -6598,6 +6680,7 @@ public Builder addMod( } return this; } + /** * * @@ -6618,6 +6701,7 @@ public Builder addAllMod( } return this; } + /** * * @@ -6637,6 +6721,7 @@ public Builder clearMod() { } return this; } + /** * * @@ -6656,6 +6741,7 @@ public Builder removeMod(int index) { } return this; } + /** * * @@ -6666,8 +6752,9 @@ public Builder removeMod(int index) { * repeated .google.spanner.executor.v1.MutationAction.Mod mod = 1; */ public com.google.spanner.executor.v1.MutationAction.Mod.Builder getModBuilder(int index) { - return getModFieldBuilder().getBuilder(index); + return internalGetModFieldBuilder().getBuilder(index); } + /** * * @@ -6684,6 +6771,7 @@ public com.google.spanner.executor.v1.MutationAction.ModOrBuilder getModOrBuilde return modBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -6701,6 +6789,7 @@ public com.google.spanner.executor.v1.MutationAction.ModOrBuilder getModOrBuilde return java.util.Collections.unmodifiableList(mod_); } } + /** * * @@ -6711,9 +6800,10 @@ public com.google.spanner.executor.v1.MutationAction.ModOrBuilder getModOrBuilde * repeated .google.spanner.executor.v1.MutationAction.Mod mod = 1; */ public com.google.spanner.executor.v1.MutationAction.Mod.Builder addModBuilder() { - return getModFieldBuilder() + return internalGetModFieldBuilder() .addBuilder(com.google.spanner.executor.v1.MutationAction.Mod.getDefaultInstance()); } + /** * * @@ -6724,10 +6814,11 @@ public com.google.spanner.executor.v1.MutationAction.Mod.Builder addModBuilder() * repeated .google.spanner.executor.v1.MutationAction.Mod mod = 1; */ public com.google.spanner.executor.v1.MutationAction.Mod.Builder addModBuilder(int index) { - return getModFieldBuilder() + return internalGetModFieldBuilder() .addBuilder( index, com.google.spanner.executor.v1.MutationAction.Mod.getDefaultInstance()); } + /** * * @@ -6739,17 +6830,17 @@ public com.google.spanner.executor.v1.MutationAction.Mod.Builder addModBuilder(i */ public java.util.List getModBuilderList() { - return getModFieldBuilder().getBuilderList(); + return internalGetModFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.MutationAction.Mod, com.google.spanner.executor.v1.MutationAction.Mod.Builder, com.google.spanner.executor.v1.MutationAction.ModOrBuilder> - getModFieldBuilder() { + internalGetModFieldBuilder() { if (modBuilder_ == null) { modBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.MutationAction.Mod, com.google.spanner.executor.v1.MutationAction.Mod.Builder, com.google.spanner.executor.v1.MutationAction.ModOrBuilder>( @@ -6759,17 +6850,6 @@ public com.google.spanner.executor.v1.MutationAction.Mod.Builder addModBuilder(i return modBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.MutationAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java index fc5aec3be20..06622159be6 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface MutationActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.MutationAction) @@ -34,6 +36,7 @@ public interface MutationActionOrBuilder * repeated .google.spanner.executor.v1.MutationAction.Mod mod = 1; */ java.util.List getModList(); + /** * * @@ -44,6 +47,7 @@ public interface MutationActionOrBuilder * repeated .google.spanner.executor.v1.MutationAction.Mod mod = 1; */ com.google.spanner.executor.v1.MutationAction.Mod getMod(int index); + /** * * @@ -54,6 +58,7 @@ public interface MutationActionOrBuilder * repeated .google.spanner.executor.v1.MutationAction.Mod mod = 1; */ int getModCount(); + /** * * @@ -65,6 +70,7 @@ public interface MutationActionOrBuilder */ java.util.List getModOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java index 08d25a8733b..7e35e7eb968 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.OperationResponse} */ -public final class OperationResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class OperationResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.OperationResponse) OperationResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "OperationResponse"); + } + // Use OperationResponse.newBuilder() to construct. - private OperationResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private OperationResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private OperationResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new OperationResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_OperationResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_OperationResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List listedOperations_; + /** * * @@ -82,6 +90,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getListedOperationsList() { return listedOperations_; } + /** * * @@ -96,6 +105,7 @@ public java.util.List getListedOperationsList( getListedOperationsOrBuilderList() { return listedOperations_; } + /** * * @@ -109,6 +119,7 @@ public java.util.List getListedOperationsList( public int getListedOperationsCount() { return listedOperations_.size(); } + /** * * @@ -122,6 +133,7 @@ public int getListedOperationsCount() { public com.google.longrunning.Operation getListedOperations(int index) { return listedOperations_.get(index); } + /** * * @@ -140,6 +152,7 @@ public com.google.longrunning.OperationOrBuilder getListedOperationsOrBuilder(in @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -164,6 +177,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -191,6 +205,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public static final int OPERATION_FIELD_NUMBER = 3; private com.google.longrunning.Operation operation_; + /** * * @@ -206,6 +221,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { public boolean hasOperation() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -221,6 +237,7 @@ public boolean hasOperation() { public com.google.longrunning.Operation getOperation() { return operation_ == null ? com.google.longrunning.Operation.getDefaultInstance() : operation_; } + /** * * @@ -252,8 +269,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < listedOperations_.size(); i++) { output.writeMessage(1, listedOperations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getOperation()); @@ -270,8 +287,8 @@ public int getSerializedSize() { for (int i = 0; i < listedOperations_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, listedOperations_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getOperation()); @@ -361,38 +378,38 @@ public static com.google.spanner.executor.v1.OperationResponse parseFrom( public static com.google.spanner.executor.v1.OperationResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.OperationResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.OperationResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.OperationResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.OperationResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.OperationResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -415,10 +432,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -428,7 +446,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.OperationResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.OperationResponse) com.google.spanner.executor.v1.OperationResponseOrBuilder { @@ -438,7 +456,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_OperationResponse_fieldAccessorTable @@ -452,15 +470,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getListedOperationsFieldBuilder(); - getOperationFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetListedOperationsFieldBuilder(); + internalGetOperationFieldBuilder(); } } @@ -542,39 +560,6 @@ private void buildPartial0(com.google.spanner.executor.v1.OperationResponse resu result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.OperationResponse) { @@ -607,8 +592,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.OperationResponse other) listedOperations_ = other.listedOperations_; bitField0_ = (bitField0_ & ~0x00000001); listedOperationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getListedOperationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetListedOperationsFieldBuilder() : null; } else { listedOperationsBuilder_.addAllMessages(other.listedOperations_); @@ -669,7 +654,8 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getOperationFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetOperationFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -703,7 +689,7 @@ private void ensureListedOperationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> @@ -725,6 +711,7 @@ public java.util.List getListedOperationsList( return listedOperationsBuilder_.getMessageList(); } } + /** * * @@ -741,6 +728,7 @@ public int getListedOperationsCount() { return listedOperationsBuilder_.getCount(); } } + /** * * @@ -757,6 +745,7 @@ public com.google.longrunning.Operation getListedOperations(int index) { return listedOperationsBuilder_.getMessage(index); } } + /** * * @@ -779,6 +768,7 @@ public Builder setListedOperations(int index, com.google.longrunning.Operation v } return this; } + /** * * @@ -799,6 +789,7 @@ public Builder setListedOperations( } return this; } + /** * * @@ -821,6 +812,7 @@ public Builder addListedOperations(com.google.longrunning.Operation value) { } return this; } + /** * * @@ -843,6 +835,7 @@ public Builder addListedOperations(int index, com.google.longrunning.Operation v } return this; } + /** * * @@ -862,6 +855,7 @@ public Builder addListedOperations(com.google.longrunning.Operation.Builder buil } return this; } + /** * * @@ -882,6 +876,7 @@ public Builder addListedOperations( } return this; } + /** * * @@ -902,6 +897,7 @@ public Builder addAllListedOperations( } return this; } + /** * * @@ -921,6 +917,7 @@ public Builder clearListedOperations() { } return this; } + /** * * @@ -940,6 +937,7 @@ public Builder removeListedOperations(int index) { } return this; } + /** * * @@ -950,8 +948,9 @@ public Builder removeListedOperations(int index) { * repeated .google.longrunning.Operation listed_operations = 1; */ public com.google.longrunning.Operation.Builder getListedOperationsBuilder(int index) { - return getListedOperationsFieldBuilder().getBuilder(index); + return internalGetListedOperationsFieldBuilder().getBuilder(index); } + /** * * @@ -968,6 +967,7 @@ public com.google.longrunning.OperationOrBuilder getListedOperationsOrBuilder(in return listedOperationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -985,6 +985,7 @@ public com.google.longrunning.OperationOrBuilder getListedOperationsOrBuilder(in return java.util.Collections.unmodifiableList(listedOperations_); } } + /** * * @@ -995,9 +996,10 @@ public com.google.longrunning.OperationOrBuilder getListedOperationsOrBuilder(in * repeated .google.longrunning.Operation listed_operations = 1; */ public com.google.longrunning.Operation.Builder addListedOperationsBuilder() { - return getListedOperationsFieldBuilder() + return internalGetListedOperationsFieldBuilder() .addBuilder(com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1008,9 +1010,10 @@ public com.google.longrunning.Operation.Builder addListedOperationsBuilder() { * repeated .google.longrunning.Operation listed_operations = 1; */ public com.google.longrunning.Operation.Builder addListedOperationsBuilder(int index) { - return getListedOperationsFieldBuilder() + return internalGetListedOperationsFieldBuilder() .addBuilder(index, com.google.longrunning.Operation.getDefaultInstance()); } + /** * * @@ -1022,17 +1025,17 @@ public com.google.longrunning.Operation.Builder addListedOperationsBuilder(int i */ public java.util.List getListedOperationsBuilderList() { - return getListedOperationsFieldBuilder().getBuilderList(); + return internalGetListedOperationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getListedOperationsFieldBuilder() { + internalGetListedOperationsFieldBuilder() { if (listedOperationsBuilder_ == null) { listedOperationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1046,6 +1049,7 @@ public com.google.longrunning.Operation.Builder addListedOperationsBuilder(int i } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -1069,6 +1073,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -1092,6 +1097,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1114,6 +1120,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1132,6 +1139,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1157,11 +1165,12 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { } private com.google.longrunning.Operation operation_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> operationBuilder_; + /** * * @@ -1176,6 +1185,7 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { public boolean hasOperation() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1196,6 +1206,7 @@ public com.google.longrunning.Operation getOperation() { return operationBuilder_.getMessage(); } } + /** * * @@ -1218,6 +1229,7 @@ public Builder setOperation(com.google.longrunning.Operation value) { onChanged(); return this; } + /** * * @@ -1237,6 +1249,7 @@ public Builder setOperation(com.google.longrunning.Operation.Builder builderForV onChanged(); return this; } + /** * * @@ -1264,6 +1277,7 @@ public Builder mergeOperation(com.google.longrunning.Operation value) { } return this; } + /** * * @@ -1283,6 +1297,7 @@ public Builder clearOperation() { onChanged(); return this; } + /** * * @@ -1295,8 +1310,9 @@ public Builder clearOperation() { public com.google.longrunning.Operation.Builder getOperationBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getOperationFieldBuilder().getBuilder(); + return internalGetOperationFieldBuilder().getBuilder(); } + /** * * @@ -1315,6 +1331,7 @@ public com.google.longrunning.OperationOrBuilder getOperationOrBuilder() { : operation_; } } + /** * * @@ -1324,14 +1341,14 @@ public com.google.longrunning.OperationOrBuilder getOperationOrBuilder() { * * .google.longrunning.Operation operation = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder> - getOperationFieldBuilder() { + internalGetOperationFieldBuilder() { if (operationBuilder_ == null) { operationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.longrunning.Operation, com.google.longrunning.Operation.Builder, com.google.longrunning.OperationOrBuilder>( @@ -1341,17 +1358,6 @@ public com.google.longrunning.OperationOrBuilder getOperationOrBuilder() { return operationBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.OperationResponse) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java index f92c1a39701..e14a77029a4 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface OperationResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.OperationResponse) @@ -34,6 +36,7 @@ public interface OperationResponseOrBuilder * repeated .google.longrunning.Operation listed_operations = 1; */ java.util.List getListedOperationsList(); + /** * * @@ -44,6 +47,7 @@ public interface OperationResponseOrBuilder * repeated .google.longrunning.Operation listed_operations = 1; */ com.google.longrunning.Operation getListedOperations(int index); + /** * * @@ -54,6 +58,7 @@ public interface OperationResponseOrBuilder * repeated .google.longrunning.Operation listed_operations = 1; */ int getListedOperationsCount(); + /** * * @@ -65,6 +70,7 @@ public interface OperationResponseOrBuilder */ java.util.List getListedOperationsOrBuilderList(); + /** * * @@ -89,6 +95,7 @@ public interface OperationResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * @@ -115,6 +122,7 @@ public interface OperationResponseOrBuilder * @return Whether the operation field is set. */ boolean hasOperation(); + /** * * @@ -127,6 +135,7 @@ public interface OperationResponseOrBuilder * @return The operation. */ com.google.longrunning.Operation getOperation(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java index 8d6598ee5c2..409b254f30d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.executor.v1.PartitionedUpdateAction} */ -public final class PartitionedUpdateAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class PartitionedUpdateAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.PartitionedUpdateAction) PartitionedUpdateActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionedUpdateAction"); + } + // Use PartitionedUpdateAction.newBuilder() to construct. - private PartitionedUpdateAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PartitionedUpdateAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private PartitionedUpdateAction() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PartitionedUpdateAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_PartitionedUpdateAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_PartitionedUpdateAction_fieldAccessorTable @@ -79,6 +86,7 @@ public interface ExecutePartitionedUpdateOptionsOrBuilder * @return Whether the rpcPriority field is set. */ boolean hasRpcPriority(); + /** * * @@ -91,6 +99,7 @@ public interface ExecutePartitionedUpdateOptionsOrBuilder * @return The enum numeric value on the wire for rpcPriority. */ int getRpcPriorityValue(); + /** * * @@ -116,6 +125,7 @@ public interface ExecutePartitionedUpdateOptionsOrBuilder * @return Whether the tag field is set. */ boolean hasTag(); + /** * * @@ -128,6 +138,7 @@ public interface ExecutePartitionedUpdateOptionsOrBuilder * @return The tag. */ java.lang.String getTag(); + /** * * @@ -141,19 +152,31 @@ public interface ExecutePartitionedUpdateOptionsOrBuilder */ com.google.protobuf.ByteString getTagBytes(); } + /** * Protobuf type {@code * google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions} */ public static final class ExecutePartitionedUpdateOptions - extends com.google.protobuf.GeneratedMessageV3 + extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions) ExecutePartitionedUpdateOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExecutePartitionedUpdateOptions"); + } + // Use ExecutePartitionedUpdateOptions.newBuilder() to construct. private ExecutePartitionedUpdateOptions( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -162,19 +185,13 @@ private ExecutePartitionedUpdateOptions() { tag_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ExecutePartitionedUpdateOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_fieldAccessorTable @@ -188,6 +205,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int RPC_PRIORITY_FIELD_NUMBER = 1; private int rpcPriority_ = 0; + /** * * @@ -203,6 +221,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasRpcPriority() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -218,6 +237,7 @@ public boolean hasRpcPriority() { public int getRpcPriorityValue() { return rpcPriority_; } + /** * * @@ -240,6 +260,7 @@ public com.google.spanner.v1.RequestOptions.Priority getRpcPriority() { @SuppressWarnings("serial") private volatile java.lang.Object tag_ = ""; + /** * * @@ -255,6 +276,7 @@ public com.google.spanner.v1.RequestOptions.Priority getRpcPriority() { public boolean hasTag() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -278,6 +300,7 @@ public java.lang.String getTag() { return s; } } + /** * * @@ -320,7 +343,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeEnum(1, rpcPriority_); } if (((bitField0_ & 0x00000002) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, tag_); + com.google.protobuf.GeneratedMessage.writeString(output, 2, tag_); } getUnknownFields().writeTo(output); } @@ -335,7 +358,7 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, rpcPriority_); } if (((bitField0_ & 0x00000002) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, tag_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, tag_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -435,7 +458,7 @@ public int hashCode() { public static com.google.spanner.executor.v1.PartitionedUpdateAction .ExecutePartitionedUpdateOptions parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.PartitionedUpdateAction @@ -443,14 +466,14 @@ public int hashCode() { parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.PartitionedUpdateAction .ExecutePartitionedUpdateOptions parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.PartitionedUpdateAction @@ -458,14 +481,14 @@ public int hashCode() { parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.PartitionedUpdateAction .ExecutePartitionedUpdateOptions parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.PartitionedUpdateAction @@ -474,7 +497,7 @@ public int hashCode() { com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -499,17 +522,16 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * Protobuf type {@code * google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions) com.google.spanner.executor.v1.PartitionedUpdateAction @@ -520,7 +542,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_PartitionedUpdateAction_ExecutePartitionedUpdateOptions_fieldAccessorTable @@ -535,7 +557,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -602,41 +624,6 @@ private void buildPartial0( 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 @@ -660,7 +647,7 @@ public Builder mergeFrom( == com.google.spanner.executor.v1.PartitionedUpdateAction .ExecutePartitionedUpdateOptions.getDefaultInstance()) return this; if (other.hasRpcPriority()) { - setRpcPriority(other.getRpcPriority()); + setRpcPriorityValue(other.getRpcPriorityValue()); } if (other.hasTag()) { tag_ = other.tag_; @@ -725,6 +712,7 @@ public Builder mergeFrom( private int bitField0_; private int rpcPriority_ = 0; + /** * * @@ -740,6 +728,7 @@ public Builder mergeFrom( public boolean hasRpcPriority() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -755,6 +744,7 @@ public boolean hasRpcPriority() { public int getRpcPriorityValue() { return rpcPriority_; } + /** * * @@ -773,6 +763,7 @@ public Builder setRpcPriorityValue(int value) { onChanged(); return this; } + /** * * @@ -790,6 +781,7 @@ public com.google.spanner.v1.RequestOptions.Priority getRpcPriority() { com.google.spanner.v1.RequestOptions.Priority.forNumber(rpcPriority_); return result == null ? com.google.spanner.v1.RequestOptions.Priority.UNRECOGNIZED : result; } + /** * * @@ -811,6 +803,7 @@ public Builder setRpcPriority(com.google.spanner.v1.RequestOptions.Priority valu onChanged(); return this; } + /** * * @@ -830,6 +823,7 @@ public Builder clearRpcPriority() { } private java.lang.Object tag_ = ""; + /** * * @@ -844,6 +838,7 @@ public Builder clearRpcPriority() { public boolean hasTag() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -866,6 +861,7 @@ public java.lang.String getTag() { return (java.lang.String) ref; } } + /** * * @@ -888,6 +884,7 @@ public com.google.protobuf.ByteString getTagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -909,6 +906,7 @@ public Builder setTag(java.lang.String value) { onChanged(); return this; } + /** * * @@ -926,6 +924,7 @@ public Builder clearTag() { onChanged(); return this; } + /** * * @@ -949,18 +948,6 @@ public Builder setTagBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions) } @@ -1024,6 +1011,7 @@ public com.google.protobuf.Parser getParserForT public static final int OPTIONS_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions options_; + /** * * @@ -1041,6 +1029,7 @@ public com.google.protobuf.Parser getParserForT public boolean hasOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1062,6 +1051,7 @@ public boolean hasOptions() { .getDefaultInstance() : options_; } + /** * * @@ -1085,6 +1075,7 @@ public boolean hasOptions() { public static final int UPDATE_FIELD_NUMBER = 2; private com.google.spanner.executor.v1.QueryAction update_; + /** * * @@ -1100,6 +1091,7 @@ public boolean hasOptions() { public boolean hasUpdate() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1117,6 +1109,7 @@ public com.google.spanner.executor.v1.QueryAction getUpdate() { ? com.google.spanner.executor.v1.QueryAction.getDefaultInstance() : update_; } + /** * * @@ -1253,38 +1246,38 @@ public static com.google.spanner.executor.v1.PartitionedUpdateAction parseFrom( public static com.google.spanner.executor.v1.PartitionedUpdateAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.PartitionedUpdateAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.PartitionedUpdateAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.PartitionedUpdateAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.PartitionedUpdateAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.PartitionedUpdateAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1308,10 +1301,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1322,7 +1316,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.PartitionedUpdateAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.PartitionedUpdateAction) com.google.spanner.executor.v1.PartitionedUpdateActionOrBuilder { @@ -1332,7 +1326,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_PartitionedUpdateAction_fieldAccessorTable @@ -1346,15 +1340,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getOptionsFieldBuilder(); - getUpdateFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetOptionsFieldBuilder(); + internalGetUpdateFieldBuilder(); } } @@ -1420,39 +1414,6 @@ private void buildPartial0(com.google.spanner.executor.v1.PartitionedUpdateActio result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.PartitionedUpdateAction) { @@ -1500,13 +1461,13 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getUpdateFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetUpdateFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -1531,13 +1492,14 @@ public Builder mergeFrom( private com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions options_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions, com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions .Builder, com.google.spanner.executor.v1.PartitionedUpdateAction .ExecutePartitionedUpdateOptionsOrBuilder> optionsBuilder_; + /** * * @@ -1554,6 +1516,7 @@ public Builder mergeFrom( public boolean hasOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1578,6 +1541,7 @@ public boolean hasOptions() { return optionsBuilder_.getMessage(); } } + /** * * @@ -1604,6 +1568,7 @@ public Builder setOptions( onChanged(); return this; } + /** * * @@ -1628,6 +1593,7 @@ public Builder setOptions( onChanged(); return this; } + /** * * @@ -1661,6 +1627,7 @@ public Builder mergeOptions( } return this; } + /** * * @@ -1682,6 +1649,7 @@ public Builder clearOptions() { onChanged(); return this; } + /** * * @@ -1698,8 +1666,9 @@ public Builder clearOptions() { getOptionsBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getOptionsFieldBuilder().getBuilder(); + return internalGetOptionsFieldBuilder().getBuilder(); } + /** * * @@ -1723,6 +1692,7 @@ public Builder clearOptions() { : options_; } } + /** * * @@ -1734,16 +1704,16 @@ public Builder clearOptions() { * optional .google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions options = 1; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions, com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions .Builder, com.google.spanner.executor.v1.PartitionedUpdateAction .ExecutePartitionedUpdateOptionsOrBuilder> - getOptionsFieldBuilder() { + internalGetOptionsFieldBuilder() { if (optionsBuilder_ == null) { optionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.PartitionedUpdateAction .ExecutePartitionedUpdateOptions, com.google.spanner.executor.v1.PartitionedUpdateAction @@ -1757,11 +1727,12 @@ public Builder clearOptions() { } private com.google.spanner.executor.v1.QueryAction update_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> updateBuilder_; + /** * * @@ -1776,6 +1747,7 @@ public Builder clearOptions() { public boolean hasUpdate() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1796,6 +1768,7 @@ public com.google.spanner.executor.v1.QueryAction getUpdate() { return updateBuilder_.getMessage(); } } + /** * * @@ -1818,6 +1791,7 @@ public Builder setUpdate(com.google.spanner.executor.v1.QueryAction value) { onChanged(); return this; } + /** * * @@ -1837,6 +1811,7 @@ public Builder setUpdate(com.google.spanner.executor.v1.QueryAction.Builder buil onChanged(); return this; } + /** * * @@ -1864,6 +1839,7 @@ public Builder mergeUpdate(com.google.spanner.executor.v1.QueryAction value) { } return this; } + /** * * @@ -1883,6 +1859,7 @@ public Builder clearUpdate() { onChanged(); return this; } + /** * * @@ -1895,8 +1872,9 @@ public Builder clearUpdate() { public com.google.spanner.executor.v1.QueryAction.Builder getUpdateBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getUpdateFieldBuilder().getBuilder(); + return internalGetUpdateFieldBuilder().getBuilder(); } + /** * * @@ -1915,6 +1893,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() : update_; } } + /** * * @@ -1924,14 +1903,14 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() * * .google.spanner.executor.v1.QueryAction update = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> - getUpdateFieldBuilder() { + internalGetUpdateFieldBuilder() { if (updateBuilder_ == null) { updateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder>( @@ -1941,17 +1920,6 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getUpdateOrBuilder() return updateBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.PartitionedUpdateAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java index d825815586b..b369d382833 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface PartitionedUpdateActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.PartitionedUpdateAction) @@ -38,6 +40,7 @@ public interface PartitionedUpdateActionOrBuilder * @return Whether the options field is set. */ boolean hasOptions(); + /** * * @@ -53,6 +56,7 @@ public interface PartitionedUpdateActionOrBuilder */ com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions getOptions(); + /** * * @@ -79,6 +83,7 @@ public interface PartitionedUpdateActionOrBuilder * @return Whether the update field is set. */ boolean hasUpdate(); + /** * * @@ -91,6 +96,7 @@ public interface PartitionedUpdateActionOrBuilder * @return The update. */ com.google.spanner.executor.v1.QueryAction getUpdate(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java index f392894a231..80f44547aae 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.QueryAction} */ -public final class QueryAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class QueryAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.QueryAction) QueryActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryAction"); + } + // Use QueryAction.newBuilder() to construct. - private QueryAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private QueryAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private QueryAction() { params_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new QueryAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryAction_fieldAccessorTable @@ -81,6 +88,7 @@ public interface ParameterOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -106,6 +114,7 @@ public interface ParameterOrBuilder * @return Whether the type field is set. */ boolean hasType(); + /** * * @@ -118,6 +127,7 @@ public interface ParameterOrBuilder * @return The type. */ com.google.spanner.v1.Type getType(); + /** * * @@ -141,6 +151,7 @@ public interface ParameterOrBuilder * @return Whether the value field is set. */ boolean hasValue(); + /** * * @@ -153,6 +164,7 @@ public interface ParameterOrBuilder * @return The value. */ com.google.spanner.executor.v1.Value getValue(); + /** * * @@ -164,6 +176,7 @@ public interface ParameterOrBuilder */ com.google.spanner.executor.v1.ValueOrBuilder getValueOrBuilder(); } + /** * * @@ -173,13 +186,24 @@ public interface ParameterOrBuilder * * Protobuf type {@code google.spanner.executor.v1.QueryAction.Parameter} */ - public static final class Parameter extends com.google.protobuf.GeneratedMessageV3 + public static final class Parameter extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.QueryAction.Parameter) ParameterOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Parameter"); + } + // Use Parameter.newBuilder() to construct. - private Parameter(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Parameter(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -187,19 +211,13 @@ private Parameter() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Parameter(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryAction_Parameter_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryAction_Parameter_fieldAccessorTable @@ -213,6 +231,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -236,6 +255,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -262,6 +282,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int TYPE_FIELD_NUMBER = 2; private com.google.spanner.v1.Type type_; + /** * * @@ -277,6 +298,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -292,6 +314,7 @@ public boolean hasType() { public com.google.spanner.v1.Type getType() { return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; } + /** * * @@ -308,6 +331,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { public static final int VALUE_FIELD_NUMBER = 3; private com.google.spanner.executor.v1.Value value_; + /** * * @@ -323,6 +347,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { public boolean hasValue() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -338,6 +363,7 @@ public boolean hasValue() { public com.google.spanner.executor.v1.Value getValue() { return value_ == null ? com.google.spanner.executor.v1.Value.getDefaultInstance() : value_; } + /** * * @@ -366,8 +392,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getType()); @@ -384,8 +410,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getType()); @@ -481,38 +507,38 @@ public static com.google.spanner.executor.v1.QueryAction.Parameter parseFrom( public static com.google.spanner.executor.v1.QueryAction.Parameter parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryAction.Parameter parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryAction.Parameter parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryAction.Parameter parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryAction.Parameter parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryAction.Parameter parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -536,11 +562,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -550,8 +576,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.executor.v1.QueryAction.Parameter} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.QueryAction.Parameter) com.google.spanner.executor.v1.QueryAction.ParameterOrBuilder { @@ -561,7 +586,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryAction_Parameter_fieldAccessorTable @@ -575,15 +600,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTypeFieldBuilder(); - getValueFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTypeFieldBuilder(); + internalGetValueFieldBuilder(); } } @@ -653,41 +678,6 @@ private void buildPartial0(com.google.spanner.executor.v1.QueryAction.Parameter result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.QueryAction.Parameter) { @@ -746,13 +736,13 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getValueFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetValueFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -776,6 +766,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -798,6 +789,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -820,6 +812,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -841,6 +834,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -858,6 +852,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -882,11 +877,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.Type type_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> typeBuilder_; + /** * * @@ -901,6 +897,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasType() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -919,6 +916,7 @@ public com.google.spanner.v1.Type getType() { return typeBuilder_.getMessage(); } } + /** * * @@ -941,6 +939,7 @@ public Builder setType(com.google.spanner.v1.Type value) { onChanged(); return this; } + /** * * @@ -960,6 +959,7 @@ public Builder setType(com.google.spanner.v1.Type.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -987,6 +987,7 @@ public Builder mergeType(com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -1006,6 +1007,7 @@ public Builder clearType() { onChanged(); return this; } + /** * * @@ -1018,8 +1020,9 @@ public Builder clearType() { public com.google.spanner.v1.Type.Builder getTypeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTypeFieldBuilder().getBuilder(); + return internalGetTypeFieldBuilder().getBuilder(); } + /** * * @@ -1036,6 +1039,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; } } + /** * * @@ -1045,14 +1049,14 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { * * .google.spanner.v1.Type type = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> - getTypeFieldBuilder() { + internalGetTypeFieldBuilder() { if (typeBuilder_ == null) { typeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder>( @@ -1063,11 +1067,12 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { } private com.google.spanner.executor.v1.Value value_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.Value, com.google.spanner.executor.v1.Value.Builder, com.google.spanner.executor.v1.ValueOrBuilder> valueBuilder_; + /** * * @@ -1082,6 +1087,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { public boolean hasValue() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1102,6 +1108,7 @@ public com.google.spanner.executor.v1.Value getValue() { return valueBuilder_.getMessage(); } } + /** * * @@ -1124,6 +1131,7 @@ public Builder setValue(com.google.spanner.executor.v1.Value value) { onChanged(); return this; } + /** * * @@ -1143,6 +1151,7 @@ public Builder setValue(com.google.spanner.executor.v1.Value.Builder builderForV onChanged(); return this; } + /** * * @@ -1170,6 +1179,7 @@ public Builder mergeValue(com.google.spanner.executor.v1.Value value) { } return this; } + /** * * @@ -1189,6 +1199,7 @@ public Builder clearValue() { onChanged(); return this; } + /** * * @@ -1201,8 +1212,9 @@ public Builder clearValue() { public com.google.spanner.executor.v1.Value.Builder getValueBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getValueFieldBuilder().getBuilder(); + return internalGetValueFieldBuilder().getBuilder(); } + /** * * @@ -1221,6 +1233,7 @@ public com.google.spanner.executor.v1.ValueOrBuilder getValueOrBuilder() { : value_; } } + /** * * @@ -1230,14 +1243,14 @@ public com.google.spanner.executor.v1.ValueOrBuilder getValueOrBuilder() { * * .google.spanner.executor.v1.Value value = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.Value, com.google.spanner.executor.v1.Value.Builder, com.google.spanner.executor.v1.ValueOrBuilder> - getValueFieldBuilder() { + internalGetValueFieldBuilder() { if (valueBuilder_ == null) { valueBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.Value, com.google.spanner.executor.v1.Value.Builder, com.google.spanner.executor.v1.ValueOrBuilder>( @@ -1247,18 +1260,6 @@ public com.google.spanner.executor.v1.ValueOrBuilder getValueOrBuilder() { return valueBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.QueryAction.Parameter) } @@ -1315,6 +1316,7 @@ public com.google.spanner.executor.v1.QueryAction.Parameter getDefaultInstanceFo @SuppressWarnings("serial") private volatile java.lang.Object sql_ = ""; + /** * * @@ -1338,6 +1340,7 @@ public java.lang.String getSql() { return s; } } + /** * * @@ -1366,6 +1369,7 @@ public com.google.protobuf.ByteString getSqlBytes() { @SuppressWarnings("serial") private java.util.List params_; + /** * * @@ -1379,6 +1383,7 @@ public com.google.protobuf.ByteString getSqlBytes() { public java.util.List getParamsList() { return params_; } + /** * * @@ -1393,6 +1398,7 @@ public java.util.List getP getParamsOrBuilderList() { return params_; } + /** * * @@ -1406,6 +1412,7 @@ public java.util.List getP public int getParamsCount() { return params_.size(); } + /** * * @@ -1419,6 +1426,7 @@ public int getParamsCount() { public com.google.spanner.executor.v1.QueryAction.Parameter getParams(int index) { return params_.get(index); } + /** * * @@ -1448,8 +1456,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, sql_); } for (int i = 0; i < params_.size(); i++) { output.writeMessage(2, params_.get(i)); @@ -1463,8 +1471,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, sql_); } for (int i = 0; i < params_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, params_.get(i)); @@ -1546,38 +1554,38 @@ public static com.google.spanner.executor.v1.QueryAction parseFrom( public static com.google.spanner.executor.v1.QueryAction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1600,10 +1608,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1613,7 +1622,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.QueryAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.QueryAction) com.google.spanner.executor.v1.QueryActionOrBuilder { @@ -1623,7 +1632,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryAction_fieldAccessorTable @@ -1635,7 +1644,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.QueryAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1705,39 +1714,6 @@ private void buildPartial0(com.google.spanner.executor.v1.QueryAction result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.QueryAction) { @@ -1774,8 +1750,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.QueryAction other) { params_ = other.params_; bitField0_ = (bitField0_ & ~0x00000002); paramsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getParamsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetParamsFieldBuilder() : null; } else { paramsBuilder_.addAllMessages(other.params_); @@ -1848,6 +1824,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object sql_ = ""; + /** * * @@ -1870,6 +1847,7 @@ public java.lang.String getSql() { return (java.lang.String) ref; } } + /** * * @@ -1892,6 +1870,7 @@ public com.google.protobuf.ByteString getSqlBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1913,6 +1892,7 @@ public Builder setSql(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1930,6 +1910,7 @@ public Builder clearSql() { onChanged(); return this; } + /** * * @@ -1964,7 +1945,7 @@ private void ensureParamsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.QueryAction.Parameter, com.google.spanner.executor.v1.QueryAction.Parameter.Builder, com.google.spanner.executor.v1.QueryAction.ParameterOrBuilder> @@ -1986,6 +1967,7 @@ public java.util.List getP return paramsBuilder_.getMessageList(); } } + /** * * @@ -2002,6 +1984,7 @@ public int getParamsCount() { return paramsBuilder_.getCount(); } } + /** * * @@ -2018,6 +2001,7 @@ public com.google.spanner.executor.v1.QueryAction.Parameter getParams(int index) return paramsBuilder_.getMessage(index); } } + /** * * @@ -2041,6 +2025,7 @@ public Builder setParams( } return this; } + /** * * @@ -2061,6 +2046,7 @@ public Builder setParams( } return this; } + /** * * @@ -2083,6 +2069,7 @@ public Builder addParams(com.google.spanner.executor.v1.QueryAction.Parameter va } return this; } + /** * * @@ -2106,6 +2093,7 @@ public Builder addParams( } return this; } + /** * * @@ -2126,6 +2114,7 @@ public Builder addParams( } return this; } + /** * * @@ -2146,6 +2135,7 @@ public Builder addParams( } return this; } + /** * * @@ -2166,6 +2156,7 @@ public Builder addAllParams( } return this; } + /** * * @@ -2185,6 +2176,7 @@ public Builder clearParams() { } return this; } + /** * * @@ -2204,6 +2196,7 @@ public Builder removeParams(int index) { } return this; } + /** * * @@ -2215,8 +2208,9 @@ public Builder removeParams(int index) { */ public com.google.spanner.executor.v1.QueryAction.Parameter.Builder getParamsBuilder( int index) { - return getParamsFieldBuilder().getBuilder(index); + return internalGetParamsFieldBuilder().getBuilder(index); } + /** * * @@ -2234,6 +2228,7 @@ public com.google.spanner.executor.v1.QueryAction.ParameterOrBuilder getParamsOr return paramsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2251,6 +2246,7 @@ public com.google.spanner.executor.v1.QueryAction.ParameterOrBuilder getParamsOr return java.util.Collections.unmodifiableList(params_); } } + /** * * @@ -2261,9 +2257,10 @@ public com.google.spanner.executor.v1.QueryAction.ParameterOrBuilder getParamsOr * repeated .google.spanner.executor.v1.QueryAction.Parameter params = 2; */ public com.google.spanner.executor.v1.QueryAction.Parameter.Builder addParamsBuilder() { - return getParamsFieldBuilder() + return internalGetParamsFieldBuilder() .addBuilder(com.google.spanner.executor.v1.QueryAction.Parameter.getDefaultInstance()); } + /** * * @@ -2275,10 +2272,11 @@ public com.google.spanner.executor.v1.QueryAction.Parameter.Builder addParamsBui */ public com.google.spanner.executor.v1.QueryAction.Parameter.Builder addParamsBuilder( int index) { - return getParamsFieldBuilder() + return internalGetParamsFieldBuilder() .addBuilder( index, com.google.spanner.executor.v1.QueryAction.Parameter.getDefaultInstance()); } + /** * * @@ -2290,17 +2288,17 @@ public com.google.spanner.executor.v1.QueryAction.Parameter.Builder addParamsBui */ public java.util.List getParamsBuilderList() { - return getParamsFieldBuilder().getBuilderList(); + return internalGetParamsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.QueryAction.Parameter, com.google.spanner.executor.v1.QueryAction.Parameter.Builder, com.google.spanner.executor.v1.QueryAction.ParameterOrBuilder> - getParamsFieldBuilder() { + internalGetParamsFieldBuilder() { if (paramsBuilder_ == null) { paramsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.QueryAction.Parameter, com.google.spanner.executor.v1.QueryAction.Parameter.Builder, com.google.spanner.executor.v1.QueryAction.ParameterOrBuilder>( @@ -2310,17 +2308,6 @@ public com.google.spanner.executor.v1.QueryAction.Parameter.Builder addParamsBui return paramsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.QueryAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java index 271f50bdadf..f1e479598c0 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface QueryActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.QueryAction) @@ -36,6 +38,7 @@ public interface QueryActionOrBuilder * @return The sql. */ java.lang.String getSql(); + /** * * @@ -59,6 +62,7 @@ public interface QueryActionOrBuilder * repeated .google.spanner.executor.v1.QueryAction.Parameter params = 2; */ java.util.List getParamsList(); + /** * * @@ -69,6 +73,7 @@ public interface QueryActionOrBuilder * repeated .google.spanner.executor.v1.QueryAction.Parameter params = 2; */ com.google.spanner.executor.v1.QueryAction.Parameter getParams(int index); + /** * * @@ -79,6 +84,7 @@ public interface QueryActionOrBuilder * repeated .google.spanner.executor.v1.QueryAction.Parameter params = 2; */ int getParamsCount(); + /** * * @@ -90,6 +96,7 @@ public interface QueryActionOrBuilder */ java.util.List getParamsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationAction.java index 62cdb66e8f7..ffe852b0941 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.executor.v1.QueryCancellationAction} */ -public final class QueryCancellationAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class QueryCancellationAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.QueryCancellationAction) QueryCancellationActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryCancellationAction"); + } + // Use QueryCancellationAction.newBuilder() to construct. - private QueryCancellationAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private QueryCancellationAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private QueryCancellationAction() { cancelQuery_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new QueryCancellationAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryCancellationAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryCancellationAction_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object longRunningSql_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getLongRunningSql() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getLongRunningSqlBytes() { @SuppressWarnings("serial") private volatile java.lang.Object cancelQuery_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getCancelQuery() { return s; } } + /** * * @@ -181,11 +192,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(longRunningSql_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, longRunningSql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(longRunningSql_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, longRunningSql_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cancelQuery_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, cancelQuery_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(cancelQuery_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, cancelQuery_); } getUnknownFields().writeTo(output); } @@ -196,11 +207,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(longRunningSql_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, longRunningSql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(longRunningSql_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, longRunningSql_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cancelQuery_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, cancelQuery_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(cancelQuery_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, cancelQuery_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -277,38 +288,38 @@ public static com.google.spanner.executor.v1.QueryCancellationAction parseFrom( public static com.google.spanner.executor.v1.QueryCancellationAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryCancellationAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryCancellationAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryCancellationAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryCancellationAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryCancellationAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -332,10 +343,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -346,7 +358,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.QueryCancellationAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.QueryCancellationAction) com.google.spanner.executor.v1.QueryCancellationActionOrBuilder { @@ -356,7 +368,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryCancellationAction_fieldAccessorTable @@ -368,7 +380,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.QueryCancellationAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -422,39 +434,6 @@ private void buildPartial0(com.google.spanner.executor.v1.QueryCancellationActio } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.QueryCancellationAction) { @@ -536,6 +515,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object longRunningSql_ = ""; + /** * * @@ -558,6 +538,7 @@ public java.lang.String getLongRunningSql() { return (java.lang.String) ref; } } + /** * * @@ -580,6 +561,7 @@ public com.google.protobuf.ByteString getLongRunningSqlBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -601,6 +583,7 @@ public Builder setLongRunningSql(java.lang.String value) { onChanged(); return this; } + /** * * @@ -618,6 +601,7 @@ public Builder clearLongRunningSql() { onChanged(); return this; } + /** * * @@ -642,6 +626,7 @@ public Builder setLongRunningSqlBytes(com.google.protobuf.ByteString value) { } private java.lang.Object cancelQuery_ = ""; + /** * * @@ -664,6 +649,7 @@ public java.lang.String getCancelQuery() { return (java.lang.String) ref; } } + /** * * @@ -686,6 +672,7 @@ public com.google.protobuf.ByteString getCancelQueryBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -707,6 +694,7 @@ public Builder setCancelQuery(java.lang.String value) { onChanged(); return this; } + /** * * @@ -724,6 +712,7 @@ public Builder clearCancelQuery() { onChanged(); return this; } + /** * * @@ -747,17 +736,6 @@ public Builder setCancelQueryBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.QueryCancellationAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationActionOrBuilder.java index bb0b958bfba..74bf2fe5e7f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryCancellationActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface QueryCancellationActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.QueryCancellationAction) @@ -36,6 +38,7 @@ public interface QueryCancellationActionOrBuilder * @return The longRunningSql. */ java.lang.String getLongRunningSql(); + /** * * @@ -61,6 +64,7 @@ public interface QueryCancellationActionOrBuilder * @return The cancelQuery. */ java.lang.String getCancelQuery(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java index 57b043b1aea..23bde12400c 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.QueryResult} */ -public final class QueryResult extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class QueryResult extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.QueryResult) QueryResultOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryResult"); + } + // Use QueryResult.newBuilder() to construct. - private QueryResult(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private QueryResult(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private QueryResult() { row_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new QueryResult(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryResult_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryResult_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List row_; + /** * * @@ -82,6 +90,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getRowList() { return row_; } + /** * * @@ -97,6 +106,7 @@ public java.util.List getRowList() { getRowOrBuilderList() { return row_; } + /** * * @@ -111,6 +121,7 @@ public java.util.List getRowList() { public int getRowCount() { return row_.size(); } + /** * * @@ -125,6 +136,7 @@ public int getRowCount() { public com.google.spanner.executor.v1.ValueList getRow(int index) { return row_.get(index); } + /** * * @@ -142,6 +154,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind public static final int ROW_TYPE_FIELD_NUMBER = 2; private com.google.spanner.v1.StructType rowType_; + /** * * @@ -157,6 +170,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind public boolean hasRowType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -172,6 +186,7 @@ public boolean hasRowType() { public com.google.spanner.v1.StructType getRowType() { return rowType_ == null ? com.google.spanner.v1.StructType.getDefaultInstance() : rowType_; } + /** * * @@ -303,38 +318,38 @@ public static com.google.spanner.executor.v1.QueryResult parseFrom( public static com.google.spanner.executor.v1.QueryResult parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryResult parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryResult parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryResult parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.QueryResult parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.QueryResult parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -357,10 +372,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -370,7 +386,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.QueryResult} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.QueryResult) com.google.spanner.executor.v1.QueryResultOrBuilder { @@ -380,7 +396,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_QueryResult_fieldAccessorTable @@ -394,15 +410,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getRowFieldBuilder(); - getRowTypeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRowFieldBuilder(); + internalGetRowTypeFieldBuilder(); } } @@ -479,39 +495,6 @@ private void buildPartial0(com.google.spanner.executor.v1.QueryResult result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.QueryResult) { @@ -543,8 +526,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.QueryResult other) { row_ = other.row_; bitField0_ = (bitField0_ & ~0x00000001); rowBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getRowFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetRowFieldBuilder() : null; } else { rowBuilder_.addAllMessages(other.row_); @@ -595,7 +578,7 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getRowTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetRowTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -628,7 +611,7 @@ private void ensureRowIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> @@ -651,6 +634,7 @@ public java.util.List getRowList() { return rowBuilder_.getMessageList(); } } + /** * * @@ -668,6 +652,7 @@ public int getRowCount() { return rowBuilder_.getCount(); } } + /** * * @@ -685,6 +670,7 @@ public com.google.spanner.executor.v1.ValueList getRow(int index) { return rowBuilder_.getMessage(index); } } + /** * * @@ -708,6 +694,7 @@ public Builder setRow(int index, com.google.spanner.executor.v1.ValueList value) } return this; } + /** * * @@ -729,6 +716,7 @@ public Builder setRow( } return this; } + /** * * @@ -752,6 +740,7 @@ public Builder addRow(com.google.spanner.executor.v1.ValueList value) { } return this; } + /** * * @@ -775,6 +764,7 @@ public Builder addRow(int index, com.google.spanner.executor.v1.ValueList value) } return this; } + /** * * @@ -795,6 +785,7 @@ public Builder addRow(com.google.spanner.executor.v1.ValueList.Builder builderFo } return this; } + /** * * @@ -816,6 +807,7 @@ public Builder addRow( } return this; } + /** * * @@ -837,6 +829,7 @@ public Builder addAllRow( } return this; } + /** * * @@ -857,6 +850,7 @@ public Builder clearRow() { } return this; } + /** * * @@ -877,6 +871,7 @@ public Builder removeRow(int index) { } return this; } + /** * * @@ -888,8 +883,9 @@ public Builder removeRow(int index) { * repeated .google.spanner.executor.v1.ValueList row = 1; */ public com.google.spanner.executor.v1.ValueList.Builder getRowBuilder(int index) { - return getRowFieldBuilder().getBuilder(index); + return internalGetRowFieldBuilder().getBuilder(index); } + /** * * @@ -907,6 +903,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind return rowBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -925,6 +922,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind return java.util.Collections.unmodifiableList(row_); } } + /** * * @@ -936,9 +934,10 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind * repeated .google.spanner.executor.v1.ValueList row = 1; */ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder() { - return getRowFieldBuilder() + return internalGetRowFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -950,9 +949,10 @@ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder() { * repeated .google.spanner.executor.v1.ValueList row = 1; */ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder(int index) { - return getRowFieldBuilder() + return internalGetRowFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -964,17 +964,17 @@ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder(int index) * repeated .google.spanner.executor.v1.ValueList row = 1; */ public java.util.List getRowBuilderList() { - return getRowFieldBuilder().getBuilderList(); + return internalGetRowFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getRowFieldBuilder() { + internalGetRowFieldBuilder() { if (rowBuilder_ == null) { rowBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -985,11 +985,12 @@ public java.util.List getRowBu } private com.google.spanner.v1.StructType rowType_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> rowTypeBuilder_; + /** * * @@ -1004,6 +1005,7 @@ public java.util.List getRowBu public boolean hasRowType() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1022,6 +1024,7 @@ public com.google.spanner.v1.StructType getRowType() { return rowTypeBuilder_.getMessage(); } } + /** * * @@ -1044,6 +1047,7 @@ public Builder setRowType(com.google.spanner.v1.StructType value) { onChanged(); return this; } + /** * * @@ -1063,6 +1067,7 @@ public Builder setRowType(com.google.spanner.v1.StructType.Builder builderForVal onChanged(); return this; } + /** * * @@ -1090,6 +1095,7 @@ public Builder mergeRowType(com.google.spanner.v1.StructType value) { } return this; } + /** * * @@ -1109,6 +1115,7 @@ public Builder clearRowType() { onChanged(); return this; } + /** * * @@ -1121,8 +1128,9 @@ public Builder clearRowType() { public com.google.spanner.v1.StructType.Builder getRowTypeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getRowTypeFieldBuilder().getBuilder(); + return internalGetRowTypeFieldBuilder().getBuilder(); } + /** * * @@ -1139,6 +1147,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { return rowType_ == null ? com.google.spanner.v1.StructType.getDefaultInstance() : rowType_; } } + /** * * @@ -1148,14 +1157,14 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { * * optional .google.spanner.v1.StructType row_type = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> - getRowTypeFieldBuilder() { + internalGetRowTypeFieldBuilder() { if (rowTypeBuilder_ == null) { rowTypeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder>( @@ -1165,17 +1174,6 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { return rowTypeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.QueryResult) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java index aee841900ae..70fd618004b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface QueryResultOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.QueryResult) @@ -35,6 +37,7 @@ public interface QueryResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 1; */ java.util.List getRowList(); + /** * * @@ -46,6 +49,7 @@ public interface QueryResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 1; */ com.google.spanner.executor.v1.ValueList getRow(int index); + /** * * @@ -57,6 +61,7 @@ public interface QueryResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 1; */ int getRowCount(); + /** * * @@ -68,6 +73,7 @@ public interface QueryResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 1; */ java.util.List getRowOrBuilderList(); + /** * * @@ -92,6 +98,7 @@ public interface QueryResultOrBuilder * @return Whether the rowType field is set. */ boolean hasRowType(); + /** * * @@ -104,6 +111,7 @@ public interface QueryResultOrBuilder * @return The rowType. */ com.google.spanner.v1.StructType getRowType(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java index 8d4d14438bc..5a915125408 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ReadAction} */ -public final class ReadAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ReadAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ReadAction) ReadActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReadAction"); + } + // Use ReadAction.newBuilder() to construct. - private ReadAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReadAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ReadAction() { column_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReadAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ReadAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ReadAction_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getTableBytes() { @SuppressWarnings("serial") private volatile java.lang.Object index_ = ""; + /** * * @@ -136,6 +146,7 @@ public com.google.protobuf.ByteString getTableBytes() { public boolean hasIndex() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -159,6 +170,7 @@ public java.lang.String getIndex() { return s; } } + /** * * @@ -188,6 +200,7 @@ public com.google.protobuf.ByteString getIndexBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList column_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -202,6 +215,7 @@ public com.google.protobuf.ByteString getIndexBytes() { public com.google.protobuf.ProtocolStringList getColumnList() { return column_; } + /** * * @@ -216,6 +230,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { public int getColumnCount() { return column_.size(); } + /** * * @@ -231,6 +246,7 @@ public int getColumnCount() { public java.lang.String getColumn(int index) { return column_.get(index); } + /** * * @@ -249,6 +265,7 @@ public com.google.protobuf.ByteString getColumnBytes(int index) { public static final int KEYS_FIELD_NUMBER = 4; private com.google.spanner.executor.v1.KeySet keys_; + /** * * @@ -264,6 +281,7 @@ public com.google.protobuf.ByteString getColumnBytes(int index) { public boolean hasKeys() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -279,6 +297,7 @@ public boolean hasKeys() { public com.google.spanner.executor.v1.KeySet getKeys() { return keys_ == null ? com.google.spanner.executor.v1.KeySet.getDefaultInstance() : keys_; } + /** * * @@ -295,6 +314,7 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getKeysOrBuilder() { public static final int LIMIT_FIELD_NUMBER = 5; private int limit_ = 0; + /** * * @@ -325,14 +345,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); } if (((bitField0_ & 0x00000001) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, index_); + com.google.protobuf.GeneratedMessage.writeString(output, 2, index_); } for (int i = 0; i < column_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, column_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 3, column_.getRaw(i)); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(4, getKeys()); @@ -349,11 +369,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); } if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, index_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, index_); } { int dataSize = 0; @@ -465,38 +485,38 @@ public static com.google.spanner.executor.v1.ReadAction parseFrom( public static com.google.spanner.executor.v1.ReadAction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ReadAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ReadAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ReadAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ReadAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ReadAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -519,10 +539,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -532,7 +553,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ReadAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ReadAction) com.google.spanner.executor.v1.ReadActionOrBuilder { @@ -542,7 +563,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ReadAction_fieldAccessorTable @@ -556,14 +577,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getKeysFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetKeysFieldBuilder(); } } @@ -638,39 +659,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ReadAction result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ReadAction) { @@ -756,7 +744,7 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getKeysFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetKeysFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -786,6 +774,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object table_ = ""; + /** * * @@ -808,6 +797,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -830,6 +820,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -851,6 +842,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -868,6 +860,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -892,6 +885,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { } private java.lang.Object index_ = ""; + /** * * @@ -906,6 +900,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { public boolean hasIndex() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -928,6 +923,7 @@ public java.lang.String getIndex() { return (java.lang.String) ref; } } + /** * * @@ -950,6 +946,7 @@ public com.google.protobuf.ByteString getIndexBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -971,6 +968,7 @@ public Builder setIndex(java.lang.String value) { onChanged(); return this; } + /** * * @@ -988,6 +986,7 @@ public Builder clearIndex() { onChanged(); return this; } + /** * * @@ -1020,6 +1019,7 @@ private void ensureColumnIsMutable() { } bitField0_ |= 0x00000004; } + /** * * @@ -1035,6 +1035,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { column_.makeImmutable(); return column_; } + /** * * @@ -1049,6 +1050,7 @@ public com.google.protobuf.ProtocolStringList getColumnList() { public int getColumnCount() { return column_.size(); } + /** * * @@ -1064,6 +1066,7 @@ public int getColumnCount() { public java.lang.String getColumn(int index) { return column_.get(index); } + /** * * @@ -1079,6 +1082,7 @@ public java.lang.String getColumn(int index) { public com.google.protobuf.ByteString getColumnBytes(int index) { return column_.getByteString(index); } + /** * * @@ -1102,6 +1106,7 @@ public Builder setColumn(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1124,6 +1129,7 @@ public Builder addColumn(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1143,6 +1149,7 @@ public Builder addAllColumn(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1161,6 +1168,7 @@ public Builder clearColumn() { onChanged(); return this; } + /** * * @@ -1186,11 +1194,12 @@ public Builder addColumnBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.executor.v1.KeySet keys_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.KeySet, com.google.spanner.executor.v1.KeySet.Builder, com.google.spanner.executor.v1.KeySetOrBuilder> keysBuilder_; + /** * * @@ -1205,6 +1214,7 @@ public Builder addColumnBytes(com.google.protobuf.ByteString value) { public boolean hasKeys() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1223,6 +1233,7 @@ public com.google.spanner.executor.v1.KeySet getKeys() { return keysBuilder_.getMessage(); } } + /** * * @@ -1245,6 +1256,7 @@ public Builder setKeys(com.google.spanner.executor.v1.KeySet value) { onChanged(); return this; } + /** * * @@ -1264,6 +1276,7 @@ public Builder setKeys(com.google.spanner.executor.v1.KeySet.Builder builderForV onChanged(); return this; } + /** * * @@ -1291,6 +1304,7 @@ public Builder mergeKeys(com.google.spanner.executor.v1.KeySet value) { } return this; } + /** * * @@ -1310,6 +1324,7 @@ public Builder clearKeys() { onChanged(); return this; } + /** * * @@ -1322,8 +1337,9 @@ public Builder clearKeys() { public com.google.spanner.executor.v1.KeySet.Builder getKeysBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getKeysFieldBuilder().getBuilder(); + return internalGetKeysFieldBuilder().getBuilder(); } + /** * * @@ -1340,6 +1356,7 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getKeysOrBuilder() { return keys_ == null ? com.google.spanner.executor.v1.KeySet.getDefaultInstance() : keys_; } } + /** * * @@ -1349,14 +1366,14 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getKeysOrBuilder() { * * .google.spanner.executor.v1.KeySet keys = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.KeySet, com.google.spanner.executor.v1.KeySet.Builder, com.google.spanner.executor.v1.KeySetOrBuilder> - getKeysFieldBuilder() { + internalGetKeysFieldBuilder() { if (keysBuilder_ == null) { keysBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.KeySet, com.google.spanner.executor.v1.KeySet.Builder, com.google.spanner.executor.v1.KeySetOrBuilder>( @@ -1367,6 +1384,7 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getKeysOrBuilder() { } private int limit_; + /** * * @@ -1382,6 +1400,7 @@ public com.google.spanner.executor.v1.KeySetOrBuilder getKeysOrBuilder() { public int getLimit() { return limit_; } + /** * * @@ -1401,6 +1420,7 @@ public Builder setLimit(int value) { onChanged(); return this; } + /** * * @@ -1419,17 +1439,6 @@ public Builder clearLimit() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ReadAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java index f47465d3822..a7233bc91ac 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ReadActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ReadAction) @@ -36,6 +38,7 @@ public interface ReadActionOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -61,6 +64,7 @@ public interface ReadActionOrBuilder * @return Whether the index field is set. */ boolean hasIndex(); + /** * * @@ -73,6 +77,7 @@ public interface ReadActionOrBuilder * @return The index. */ java.lang.String getIndex(); + /** * * @@ -98,6 +103,7 @@ public interface ReadActionOrBuilder * @return A list containing the column. */ java.util.List getColumnList(); + /** * * @@ -110,6 +116,7 @@ public interface ReadActionOrBuilder * @return The count of column. */ int getColumnCount(); + /** * * @@ -123,6 +130,7 @@ public interface ReadActionOrBuilder * @return The column at the given index. */ java.lang.String getColumn(int index); + /** * * @@ -149,6 +157,7 @@ public interface ReadActionOrBuilder * @return Whether the keys field is set. */ boolean hasKeys(); + /** * * @@ -161,6 +170,7 @@ public interface ReadActionOrBuilder * @return The keys. */ com.google.spanner.executor.v1.KeySet getKeys(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java index 61210f94f80..f7fc7d204e7 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ReadResult} */ -public final class ReadResult extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ReadResult extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ReadResult) ReadResultOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReadResult"); + } + // Use ReadResult.newBuilder() to construct. - private ReadResult(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReadResult(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ReadResult() { row_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReadResult(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ReadResult_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ReadResult_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getTableBytes() { @SuppressWarnings("serial") private volatile java.lang.Object index_ = ""; + /** * * @@ -136,6 +146,7 @@ public com.google.protobuf.ByteString getTableBytes() { public boolean hasIndex() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -159,6 +170,7 @@ public java.lang.String getIndex() { return s; } } + /** * * @@ -185,6 +197,7 @@ public com.google.protobuf.ByteString getIndexBytes() { public static final int REQUEST_INDEX_FIELD_NUMBER = 3; private int requestIndex_ = 0; + /** * * @@ -200,6 +213,7 @@ public com.google.protobuf.ByteString getIndexBytes() { public boolean hasRequestIndex() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -220,6 +234,7 @@ public int getRequestIndex() { @SuppressWarnings("serial") private java.util.List row_; + /** * * @@ -234,6 +249,7 @@ public int getRequestIndex() { public java.util.List getRowList() { return row_; } + /** * * @@ -249,6 +265,7 @@ public java.util.List getRowList() { getRowOrBuilderList() { return row_; } + /** * * @@ -263,6 +280,7 @@ public java.util.List getRowList() { public int getRowCount() { return row_.size(); } + /** * * @@ -277,6 +295,7 @@ public int getRowCount() { public com.google.spanner.executor.v1.ValueList getRow(int index) { return row_.get(index); } + /** * * @@ -294,6 +313,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind public static final int ROW_TYPE_FIELD_NUMBER = 5; private com.google.spanner.v1.StructType rowType_; + /** * * @@ -309,6 +329,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind public boolean hasRowType() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -324,6 +345,7 @@ public boolean hasRowType() { public com.google.spanner.v1.StructType getRowType() { return rowType_ == null ? com.google.spanner.v1.StructType.getDefaultInstance() : rowType_; } + /** * * @@ -352,11 +374,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); } if (((bitField0_ & 0x00000001) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, index_); + com.google.protobuf.GeneratedMessage.writeString(output, 2, index_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeInt32(3, requestIndex_); @@ -376,11 +398,11 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); } if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, index_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, index_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, requestIndex_); @@ -492,38 +514,38 @@ public static com.google.spanner.executor.v1.ReadResult parseFrom( public static com.google.spanner.executor.v1.ReadResult parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ReadResult parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ReadResult parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ReadResult parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ReadResult parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ReadResult parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -546,10 +568,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -559,7 +582,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ReadResult} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ReadResult) com.google.spanner.executor.v1.ReadResultOrBuilder { @@ -569,7 +592,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ReadResult_fieldAccessorTable @@ -583,15 +606,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getRowFieldBuilder(); - getRowTypeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRowFieldBuilder(); + internalGetRowTypeFieldBuilder(); } } @@ -682,39 +705,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ReadResult result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ReadResult) { @@ -759,8 +749,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.ReadResult other) { row_ = other.row_; bitField0_ = (bitField0_ & ~0x00000008); rowBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getRowFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetRowFieldBuilder() : null; } else { rowBuilder_.addAllMessages(other.row_); @@ -829,7 +819,7 @@ public Builder mergeFrom( } // case 34 case 42: { - input.readMessage(getRowTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetRowTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -853,6 +843,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object table_ = ""; + /** * * @@ -875,6 +866,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -897,6 +889,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -918,6 +911,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -935,6 +929,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -959,6 +954,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { } private java.lang.Object index_ = ""; + /** * * @@ -973,6 +969,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { public boolean hasIndex() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -995,6 +992,7 @@ public java.lang.String getIndex() { return (java.lang.String) ref; } } + /** * * @@ -1017,6 +1015,7 @@ public com.google.protobuf.ByteString getIndexBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1038,6 +1037,7 @@ public Builder setIndex(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1055,6 +1055,7 @@ public Builder clearIndex() { onChanged(); return this; } + /** * * @@ -1079,6 +1080,7 @@ public Builder setIndexBytes(com.google.protobuf.ByteString value) { } private int requestIndex_; + /** * * @@ -1094,6 +1096,7 @@ public Builder setIndexBytes(com.google.protobuf.ByteString value) { public boolean hasRequestIndex() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1109,6 +1112,7 @@ public boolean hasRequestIndex() { public int getRequestIndex() { return requestIndex_; } + /** * * @@ -1128,6 +1132,7 @@ public Builder setRequestIndex(int value) { onChanged(); return this; } + /** * * @@ -1156,7 +1161,7 @@ private void ensureRowIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> @@ -1179,6 +1184,7 @@ public java.util.List getRowList() { return rowBuilder_.getMessageList(); } } + /** * * @@ -1196,6 +1202,7 @@ public int getRowCount() { return rowBuilder_.getCount(); } } + /** * * @@ -1213,6 +1220,7 @@ public com.google.spanner.executor.v1.ValueList getRow(int index) { return rowBuilder_.getMessage(index); } } + /** * * @@ -1236,6 +1244,7 @@ public Builder setRow(int index, com.google.spanner.executor.v1.ValueList value) } return this; } + /** * * @@ -1257,6 +1266,7 @@ public Builder setRow( } return this; } + /** * * @@ -1280,6 +1290,7 @@ public Builder addRow(com.google.spanner.executor.v1.ValueList value) { } return this; } + /** * * @@ -1303,6 +1314,7 @@ public Builder addRow(int index, com.google.spanner.executor.v1.ValueList value) } return this; } + /** * * @@ -1323,6 +1335,7 @@ public Builder addRow(com.google.spanner.executor.v1.ValueList.Builder builderFo } return this; } + /** * * @@ -1344,6 +1357,7 @@ public Builder addRow( } return this; } + /** * * @@ -1365,6 +1379,7 @@ public Builder addAllRow( } return this; } + /** * * @@ -1385,6 +1400,7 @@ public Builder clearRow() { } return this; } + /** * * @@ -1405,6 +1421,7 @@ public Builder removeRow(int index) { } return this; } + /** * * @@ -1416,8 +1433,9 @@ public Builder removeRow(int index) { * repeated .google.spanner.executor.v1.ValueList row = 4; */ public com.google.spanner.executor.v1.ValueList.Builder getRowBuilder(int index) { - return getRowFieldBuilder().getBuilder(index); + return internalGetRowFieldBuilder().getBuilder(index); } + /** * * @@ -1435,6 +1453,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind return rowBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1453,6 +1472,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind return java.util.Collections.unmodifiableList(row_); } } + /** * * @@ -1464,9 +1484,10 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getRowOrBuilder(int ind * repeated .google.spanner.executor.v1.ValueList row = 4; */ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder() { - return getRowFieldBuilder() + return internalGetRowFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -1478,9 +1499,10 @@ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder() { * repeated .google.spanner.executor.v1.ValueList row = 4; */ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder(int index) { - return getRowFieldBuilder() + return internalGetRowFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.ValueList.getDefaultInstance()); } + /** * * @@ -1492,17 +1514,17 @@ public com.google.spanner.executor.v1.ValueList.Builder addRowBuilder(int index) * repeated .google.spanner.executor.v1.ValueList row = 4; */ public java.util.List getRowBuilderList() { - return getRowFieldBuilder().getBuilderList(); + return internalGetRowFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getRowFieldBuilder() { + internalGetRowFieldBuilder() { if (rowBuilder_ == null) { rowBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -1513,11 +1535,12 @@ public java.util.List getRowBu } private com.google.spanner.v1.StructType rowType_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> rowTypeBuilder_; + /** * * @@ -1532,6 +1555,7 @@ public java.util.List getRowBu public boolean hasRowType() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1550,6 +1574,7 @@ public com.google.spanner.v1.StructType getRowType() { return rowTypeBuilder_.getMessage(); } } + /** * * @@ -1572,6 +1597,7 @@ public Builder setRowType(com.google.spanner.v1.StructType value) { onChanged(); return this; } + /** * * @@ -1591,6 +1617,7 @@ public Builder setRowType(com.google.spanner.v1.StructType.Builder builderForVal onChanged(); return this; } + /** * * @@ -1618,6 +1645,7 @@ public Builder mergeRowType(com.google.spanner.v1.StructType value) { } return this; } + /** * * @@ -1637,6 +1665,7 @@ public Builder clearRowType() { onChanged(); return this; } + /** * * @@ -1649,8 +1678,9 @@ public Builder clearRowType() { public com.google.spanner.v1.StructType.Builder getRowTypeBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getRowTypeFieldBuilder().getBuilder(); + return internalGetRowTypeFieldBuilder().getBuilder(); } + /** * * @@ -1667,6 +1697,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { return rowType_ == null ? com.google.spanner.v1.StructType.getDefaultInstance() : rowType_; } } + /** * * @@ -1676,14 +1707,14 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { * * optional .google.spanner.v1.StructType row_type = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> - getRowTypeFieldBuilder() { + internalGetRowTypeFieldBuilder() { if (rowTypeBuilder_ == null) { rowTypeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder>( @@ -1693,17 +1724,6 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { return rowTypeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ReadResult) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java index 39d0266629b..70b29905f12 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ReadResultOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ReadResult) @@ -36,6 +38,7 @@ public interface ReadResultOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -61,6 +64,7 @@ public interface ReadResultOrBuilder * @return Whether the index field is set. */ boolean hasIndex(); + /** * * @@ -73,6 +77,7 @@ public interface ReadResultOrBuilder * @return The index. */ java.lang.String getIndex(); + /** * * @@ -98,6 +103,7 @@ public interface ReadResultOrBuilder * @return Whether the requestIndex field is set. */ boolean hasRequestIndex(); + /** * * @@ -122,6 +128,7 @@ public interface ReadResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 4; */ java.util.List getRowList(); + /** * * @@ -133,6 +140,7 @@ public interface ReadResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 4; */ com.google.spanner.executor.v1.ValueList getRow(int index); + /** * * @@ -144,6 +152,7 @@ public interface ReadResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 4; */ int getRowCount(); + /** * * @@ -155,6 +164,7 @@ public interface ReadResultOrBuilder * repeated .google.spanner.executor.v1.ValueList row = 4; */ java.util.List getRowOrBuilderList(); + /** * * @@ -179,6 +189,7 @@ public interface ReadResultOrBuilder * @return Whether the rowType field is set. */ boolean hasRowType(); + /** * * @@ -191,6 +202,7 @@ public interface ReadResultOrBuilder * @return The rowType. */ com.google.spanner.v1.StructType getRowType(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java index 5a75808ba13..41a1eaca23b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.RestoreCloudDatabaseAction} */ -public final class RestoreCloudDatabaseAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class RestoreCloudDatabaseAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.RestoreCloudDatabaseAction) RestoreCloudDatabaseActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RestoreCloudDatabaseAction"); + } + // Use RestoreCloudDatabaseAction.newBuilder() to construct. - private RestoreCloudDatabaseAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private RestoreCloudDatabaseAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +59,13 @@ private RestoreCloudDatabaseAction() { databaseId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RestoreCloudDatabaseAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_fieldAccessorTable @@ -72,6 +79,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -95,6 +103,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -123,6 +132,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupInstanceId_ = ""; + /** * * @@ -146,6 +156,7 @@ public java.lang.String getBackupInstanceId() { return s; } } + /** * * @@ -174,6 +185,7 @@ public com.google.protobuf.ByteString getBackupInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -197,6 +209,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -225,6 +238,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseInstanceId_ = ""; + /** * * @@ -249,6 +263,7 @@ public java.lang.String getDatabaseInstanceId() { return s; } } + /** * * @@ -278,6 +293,7 @@ public com.google.protobuf.ByteString getDatabaseInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -302,6 +318,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -329,6 +346,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 7; private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; + /** * * @@ -345,6 +363,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -363,6 +382,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig ? com.google.spanner.admin.database.v1.EncryptionConfig.getDefaultInstance() : encryptionConfig_; } + /** * * @@ -395,20 +415,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupInstanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, backupInstanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupInstanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, backupInstanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseInstanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, databaseInstanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseInstanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, databaseInstanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, databaseId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(7, getEncryptionConfig()); @@ -422,20 +442,20 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupInstanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, backupInstanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupInstanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, backupInstanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, backupId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseInstanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, databaseInstanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseInstanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, databaseInstanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, databaseId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, getEncryptionConfig()); @@ -532,38 +552,38 @@ public static com.google.spanner.executor.v1.RestoreCloudDatabaseAction parseFro public static com.google.spanner.executor.v1.RestoreCloudDatabaseAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.RestoreCloudDatabaseAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.RestoreCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.RestoreCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.RestoreCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.RestoreCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -587,10 +607,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -600,7 +621,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.RestoreCloudDatabaseAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.RestoreCloudDatabaseAction) com.google.spanner.executor.v1.RestoreCloudDatabaseActionOrBuilder { @@ -610,7 +631,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_RestoreCloudDatabaseAction_fieldAccessorTable @@ -624,14 +645,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getEncryptionConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetEncryptionConfigFieldBuilder(); } } @@ -709,39 +730,6 @@ private void buildPartial0(com.google.spanner.executor.v1.RestoreCloudDatabaseAc result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.RestoreCloudDatabaseAction) { @@ -842,7 +830,7 @@ public Builder mergeFrom( case 58: { input.readMessage( - getEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetEncryptionConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 58 @@ -866,6 +854,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -888,6 +877,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -910,6 +900,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -931,6 +922,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -948,6 +940,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -972,6 +965,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupInstanceId_ = ""; + /** * * @@ -994,6 +988,7 @@ public java.lang.String getBackupInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -1016,6 +1011,7 @@ public com.google.protobuf.ByteString getBackupInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1037,6 +1033,7 @@ public Builder setBackupInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1054,6 +1051,7 @@ public Builder clearBackupInstanceId() { onChanged(); return this; } + /** * * @@ -1078,6 +1076,7 @@ public Builder setBackupInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -1100,6 +1099,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -1122,6 +1122,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1143,6 +1144,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1160,6 +1162,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -1184,6 +1187,7 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseInstanceId_ = ""; + /** * * @@ -1207,6 +1211,7 @@ public java.lang.String getDatabaseInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -1230,6 +1235,7 @@ public com.google.protobuf.ByteString getDatabaseInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1252,6 +1258,7 @@ public Builder setDatabaseInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1270,6 +1277,7 @@ public Builder clearDatabaseInstanceId() { onChanged(); return this; } + /** * * @@ -1295,6 +1303,7 @@ public Builder setDatabaseInstanceIdBytes(com.google.protobuf.ByteString value) } private java.lang.Object databaseId_ = ""; + /** * * @@ -1318,6 +1327,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1341,6 +1351,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1363,6 +1374,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1381,6 +1393,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1406,11 +1419,12 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.admin.database.v1.EncryptionConfig encryptionConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> encryptionConfigBuilder_; + /** * * @@ -1426,6 +1440,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public boolean hasEncryptionConfig() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1447,6 +1462,7 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig return encryptionConfigBuilder_.getMessage(); } } + /** * * @@ -1471,6 +1487,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1492,6 +1509,7 @@ public Builder setEncryptionConfig( onChanged(); return this; } + /** * * @@ -1522,6 +1540,7 @@ public Builder mergeEncryptionConfig( } return this; } + /** * * @@ -1542,6 +1561,7 @@ public Builder clearEncryptionConfig() { onChanged(); return this; } + /** * * @@ -1556,8 +1576,9 @@ public Builder clearEncryptionConfig() { getEncryptionConfigBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getEncryptionConfigFieldBuilder().getBuilder(); + return internalGetEncryptionConfigFieldBuilder().getBuilder(); } + /** * * @@ -1578,6 +1599,7 @@ public Builder clearEncryptionConfig() { : encryptionConfig_; } } + /** * * @@ -1588,14 +1610,14 @@ public Builder clearEncryptionConfig() { * * .google.spanner.admin.database.v1.EncryptionConfig encryption_config = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder> - getEncryptionConfigFieldBuilder() { + internalGetEncryptionConfigFieldBuilder() { if (encryptionConfigBuilder_ == null) { encryptionConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.database.v1.EncryptionConfig, com.google.spanner.admin.database.v1.EncryptionConfig.Builder, com.google.spanner.admin.database.v1.EncryptionConfigOrBuilder>( @@ -1605,17 +1627,6 @@ public Builder clearEncryptionConfig() { return encryptionConfigBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.RestoreCloudDatabaseAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java index c9c8435dedf..ebded7a2c12 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface RestoreCloudDatabaseActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.RestoreCloudDatabaseAction) @@ -36,6 +38,7 @@ public interface RestoreCloudDatabaseActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface RestoreCloudDatabaseActionOrBuilder * @return The backupInstanceId. */ java.lang.String getBackupInstanceId(); + /** * * @@ -86,6 +90,7 @@ public interface RestoreCloudDatabaseActionOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * @@ -112,6 +117,7 @@ public interface RestoreCloudDatabaseActionOrBuilder * @return The databaseInstanceId. */ java.lang.String getDatabaseInstanceId(); + /** * * @@ -139,6 +145,7 @@ public interface RestoreCloudDatabaseActionOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -166,6 +173,7 @@ public interface RestoreCloudDatabaseActionOrBuilder * @return Whether the encryptionConfig field is set. */ boolean hasEncryptionConfig(); + /** * * @@ -179,6 +187,7 @@ public interface RestoreCloudDatabaseActionOrBuilder * @return The encryptionConfig. */ com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java index 248ae7f4e7c..33cd6d845fc 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.executor.v1.SessionPoolOptions} */ -public final class SessionPoolOptions extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class SessionPoolOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.SessionPoolOptions) SessionPoolOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SessionPoolOptions"); + } + // Use SessionPoolOptions.newBuilder() to construct. - private SessionPoolOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private SessionPoolOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private SessionPoolOptions() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SessionPoolOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SessionPoolOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SessionPoolOptions_fieldAccessorTable @@ -63,6 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int USE_MULTIPLEXED_FIELD_NUMBER = 1; private boolean useMultiplexed_ = false; + /** * * @@ -181,38 +189,38 @@ public static com.google.spanner.executor.v1.SessionPoolOptions parseFrom( public static com.google.spanner.executor.v1.SessionPoolOptions parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SessionPoolOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SessionPoolOptions parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SessionPoolOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SessionPoolOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SessionPoolOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -235,10 +243,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -248,7 +257,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.SessionPoolOptions} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.SessionPoolOptions) com.google.spanner.executor.v1.SessionPoolOptionsOrBuilder { @@ -258,7 +267,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SessionPoolOptions_fieldAccessorTable @@ -270,7 +279,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.SessionPoolOptions.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -320,39 +329,6 @@ private void buildPartial0(com.google.spanner.executor.v1.SessionPoolOptions res } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.SessionPoolOptions) { @@ -421,6 +397,7 @@ public Builder mergeFrom( private int bitField0_; private boolean useMultiplexed_; + /** * * @@ -437,6 +414,7 @@ public Builder mergeFrom( public boolean getUseMultiplexed() { return useMultiplexed_; } + /** * * @@ -457,6 +435,7 @@ public Builder setUseMultiplexed(boolean value) { onChanged(); return this; } + /** * * @@ -476,17 +455,6 @@ public Builder clearUseMultiplexed() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.SessionPoolOptions) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java index 1e113fb29bd..bfa7bd42f90 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface SessionPoolOptionsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.SessionPoolOptions) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java index e0898144da3..31f571f9569 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -30,13 +31,25 @@ * * Protobuf type {@code google.spanner.executor.v1.SpannerAction} */ -public final class SpannerAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class SpannerAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.SpannerAction) SpannerActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerAction"); + } + // Use SpannerAction.newBuilder() to construct. - private SpannerAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private SpannerAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private SpannerAction() { databasePath_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SpannerAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAction_fieldAccessorTable @@ -92,12 +99,14 @@ public enum ActionCase EXECUTE_PARTITION(44), EXECUTE_CHANGE_STREAM_QUERY(50), QUERY_CANCELLATION(51), + ADAPT_MESSAGE(52), ACTION_NOT_SET(0); private final int value; private ActionCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -144,6 +153,8 @@ public static ActionCase forNumber(int value) { return EXECUTE_CHANGE_STREAM_QUERY; case 51: return QUERY_CANCELLATION; + case 52: + return ADAPT_MESSAGE; case 0: return ACTION_NOT_SET; default: @@ -164,6 +175,7 @@ public ActionCase getActionCase() { @SuppressWarnings("serial") private volatile java.lang.Object databasePath_ = ""; + /** * * @@ -189,6 +201,7 @@ public java.lang.String getDatabasePath() { return s; } } + /** * * @@ -217,6 +230,7 @@ public com.google.protobuf.ByteString getDatabasePathBytes() { public static final int SPANNER_OPTIONS_FIELD_NUMBER = 2; private com.google.spanner.executor.v1.SpannerOptions spannerOptions_; + /** * * @@ -232,6 +246,7 @@ public com.google.protobuf.ByteString getDatabasePathBytes() { public boolean hasSpannerOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -249,6 +264,7 @@ public com.google.spanner.executor.v1.SpannerOptions getSpannerOptions() { ? com.google.spanner.executor.v1.SpannerOptions.getDefaultInstance() : spannerOptions_; } + /** * * @@ -266,6 +282,7 @@ public com.google.spanner.executor.v1.SpannerOptionsOrBuilder getSpannerOptionsO } public static final int START_FIELD_NUMBER = 10; + /** * * @@ -281,6 +298,7 @@ public com.google.spanner.executor.v1.SpannerOptionsOrBuilder getSpannerOptionsO public boolean hasStart() { return actionCase_ == 10; } + /** * * @@ -299,6 +317,7 @@ public com.google.spanner.executor.v1.StartTransactionAction getStart() { } return com.google.spanner.executor.v1.StartTransactionAction.getDefaultInstance(); } + /** * * @@ -317,6 +336,7 @@ public com.google.spanner.executor.v1.StartTransactionActionOrBuilder getStartOr } public static final int FINISH_FIELD_NUMBER = 11; + /** * * @@ -332,6 +352,7 @@ public com.google.spanner.executor.v1.StartTransactionActionOrBuilder getStartOr public boolean hasFinish() { return actionCase_ == 11; } + /** * * @@ -350,6 +371,7 @@ public com.google.spanner.executor.v1.FinishTransactionAction getFinish() { } return com.google.spanner.executor.v1.FinishTransactionAction.getDefaultInstance(); } + /** * * @@ -368,6 +390,7 @@ public com.google.spanner.executor.v1.FinishTransactionActionOrBuilder getFinish } public static final int READ_FIELD_NUMBER = 20; + /** * * @@ -383,6 +406,7 @@ public com.google.spanner.executor.v1.FinishTransactionActionOrBuilder getFinish public boolean hasRead() { return actionCase_ == 20; } + /** * * @@ -401,6 +425,7 @@ public com.google.spanner.executor.v1.ReadAction getRead() { } return com.google.spanner.executor.v1.ReadAction.getDefaultInstance(); } + /** * * @@ -419,6 +444,7 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { } public static final int QUERY_FIELD_NUMBER = 21; + /** * * @@ -434,6 +460,7 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { public boolean hasQuery() { return actionCase_ == 21; } + /** * * @@ -452,6 +479,7 @@ public com.google.spanner.executor.v1.QueryAction getQuery() { } return com.google.spanner.executor.v1.QueryAction.getDefaultInstance(); } + /** * * @@ -470,6 +498,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { } public static final int MUTATION_FIELD_NUMBER = 22; + /** * * @@ -485,6 +514,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { public boolean hasMutation() { return actionCase_ == 22; } + /** * * @@ -503,6 +533,7 @@ public com.google.spanner.executor.v1.MutationAction getMutation() { } return com.google.spanner.executor.v1.MutationAction.getDefaultInstance(); } + /** * * @@ -521,6 +552,7 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild } public static final int DML_FIELD_NUMBER = 23; + /** * * @@ -536,6 +568,7 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild public boolean hasDml() { return actionCase_ == 23; } + /** * * @@ -554,6 +587,7 @@ public com.google.spanner.executor.v1.DmlAction getDml() { } return com.google.spanner.executor.v1.DmlAction.getDefaultInstance(); } + /** * * @@ -572,6 +606,7 @@ public com.google.spanner.executor.v1.DmlActionOrBuilder getDmlOrBuilder() { } public static final int BATCH_DML_FIELD_NUMBER = 24; + /** * * @@ -587,6 +622,7 @@ public com.google.spanner.executor.v1.DmlActionOrBuilder getDmlOrBuilder() { public boolean hasBatchDml() { return actionCase_ == 24; } + /** * * @@ -605,6 +641,7 @@ public com.google.spanner.executor.v1.BatchDmlAction getBatchDml() { } return com.google.spanner.executor.v1.BatchDmlAction.getDefaultInstance(); } + /** * * @@ -623,6 +660,7 @@ public com.google.spanner.executor.v1.BatchDmlActionOrBuilder getBatchDmlOrBuild } public static final int WRITE_FIELD_NUMBER = 25; + /** * * @@ -638,6 +676,7 @@ public com.google.spanner.executor.v1.BatchDmlActionOrBuilder getBatchDmlOrBuild public boolean hasWrite() { return actionCase_ == 25; } + /** * * @@ -656,6 +695,7 @@ public com.google.spanner.executor.v1.WriteMutationsAction getWrite() { } return com.google.spanner.executor.v1.WriteMutationsAction.getDefaultInstance(); } + /** * * @@ -674,6 +714,7 @@ public com.google.spanner.executor.v1.WriteMutationsActionOrBuilder getWriteOrBu } public static final int PARTITIONED_UPDATE_FIELD_NUMBER = 27; + /** * * @@ -689,6 +730,7 @@ public com.google.spanner.executor.v1.WriteMutationsActionOrBuilder getWriteOrBu public boolean hasPartitionedUpdate() { return actionCase_ == 27; } + /** * * @@ -707,6 +749,7 @@ public com.google.spanner.executor.v1.PartitionedUpdateAction getPartitionedUpda } return com.google.spanner.executor.v1.PartitionedUpdateAction.getDefaultInstance(); } + /** * * @@ -726,6 +769,7 @@ public com.google.spanner.executor.v1.PartitionedUpdateAction getPartitionedUpda } public static final int ADMIN_FIELD_NUMBER = 30; + /** * * @@ -742,6 +786,7 @@ public com.google.spanner.executor.v1.PartitionedUpdateAction getPartitionedUpda public boolean hasAdmin() { return actionCase_ == 30; } + /** * * @@ -761,6 +806,7 @@ public com.google.spanner.executor.v1.AdminAction getAdmin() { } return com.google.spanner.executor.v1.AdminAction.getDefaultInstance(); } + /** * * @@ -780,6 +826,7 @@ public com.google.spanner.executor.v1.AdminActionOrBuilder getAdminOrBuilder() { } public static final int START_BATCH_TXN_FIELD_NUMBER = 40; + /** * * @@ -795,6 +842,7 @@ public com.google.spanner.executor.v1.AdminActionOrBuilder getAdminOrBuilder() { public boolean hasStartBatchTxn() { return actionCase_ == 40; } + /** * * @@ -813,6 +861,7 @@ public com.google.spanner.executor.v1.StartBatchTransactionAction getStartBatchT } return com.google.spanner.executor.v1.StartBatchTransactionAction.getDefaultInstance(); } + /** * * @@ -832,6 +881,7 @@ public com.google.spanner.executor.v1.StartBatchTransactionAction getStartBatchT } public static final int CLOSE_BATCH_TXN_FIELD_NUMBER = 41; + /** * * @@ -847,6 +897,7 @@ public com.google.spanner.executor.v1.StartBatchTransactionAction getStartBatchT public boolean hasCloseBatchTxn() { return actionCase_ == 41; } + /** * * @@ -865,6 +916,7 @@ public com.google.spanner.executor.v1.CloseBatchTransactionAction getCloseBatchT } return com.google.spanner.executor.v1.CloseBatchTransactionAction.getDefaultInstance(); } + /** * * @@ -884,6 +936,7 @@ public com.google.spanner.executor.v1.CloseBatchTransactionAction getCloseBatchT } public static final int GENERATE_DB_PARTITIONS_READ_FIELD_NUMBER = 42; + /** * * @@ -901,6 +954,7 @@ public com.google.spanner.executor.v1.CloseBatchTransactionAction getCloseBatchT public boolean hasGenerateDbPartitionsRead() { return actionCase_ == 42; } + /** * * @@ -922,6 +976,7 @@ public boolean hasGenerateDbPartitionsRead() { } return com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction.getDefaultInstance(); } + /** * * @@ -943,6 +998,7 @@ public boolean hasGenerateDbPartitionsRead() { } public static final int GENERATE_DB_PARTITIONS_QUERY_FIELD_NUMBER = 43; + /** * * @@ -960,6 +1016,7 @@ public boolean hasGenerateDbPartitionsRead() { public boolean hasGenerateDbPartitionsQuery() { return actionCase_ == 43; } + /** * * @@ -981,6 +1038,7 @@ public boolean hasGenerateDbPartitionsQuery() { } return com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction.getDefaultInstance(); } + /** * * @@ -1002,6 +1060,7 @@ public boolean hasGenerateDbPartitionsQuery() { } public static final int EXECUTE_PARTITION_FIELD_NUMBER = 44; + /** * * @@ -1017,6 +1076,7 @@ public boolean hasGenerateDbPartitionsQuery() { public boolean hasExecutePartition() { return actionCase_ == 44; } + /** * * @@ -1035,6 +1095,7 @@ public com.google.spanner.executor.v1.ExecutePartitionAction getExecutePartition } return com.google.spanner.executor.v1.ExecutePartitionAction.getDefaultInstance(); } + /** * * @@ -1054,6 +1115,7 @@ public com.google.spanner.executor.v1.ExecutePartitionAction getExecutePartition } public static final int EXECUTE_CHANGE_STREAM_QUERY_FIELD_NUMBER = 50; + /** * * @@ -1070,6 +1132,7 @@ public com.google.spanner.executor.v1.ExecutePartitionAction getExecutePartition public boolean hasExecuteChangeStreamQuery() { return actionCase_ == 50; } + /** * * @@ -1089,6 +1152,7 @@ public com.google.spanner.executor.v1.ExecuteChangeStreamQuery getExecuteChangeS } return com.google.spanner.executor.v1.ExecuteChangeStreamQuery.getDefaultInstance(); } + /** * * @@ -1109,6 +1173,7 @@ public com.google.spanner.executor.v1.ExecuteChangeStreamQuery getExecuteChangeS } public static final int QUERY_CANCELLATION_FIELD_NUMBER = 51; + /** * * @@ -1124,6 +1189,7 @@ public com.google.spanner.executor.v1.ExecuteChangeStreamQuery getExecuteChangeS public boolean hasQueryCancellation() { return actionCase_ == 51; } + /** * * @@ -1142,6 +1208,7 @@ public com.google.spanner.executor.v1.QueryCancellationAction getQueryCancellati } return com.google.spanner.executor.v1.QueryCancellationAction.getDefaultInstance(); } + /** * * @@ -1160,6 +1227,60 @@ public com.google.spanner.executor.v1.QueryCancellationAction getQueryCancellati return com.google.spanner.executor.v1.QueryCancellationAction.getDefaultInstance(); } + public static final int ADAPT_MESSAGE_FIELD_NUMBER = 52; + + /** + * + * + *
                                +   * Action to adapt a message.
                                +   * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + * + * @return Whether the adaptMessage field is set. + */ + @java.lang.Override + public boolean hasAdaptMessage() { + return actionCase_ == 52; + } + + /** + * + * + *
                                +   * Action to adapt a message.
                                +   * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + * + * @return The adaptMessage. + */ + @java.lang.Override + public com.google.spanner.executor.v1.AdaptMessageAction getAdaptMessage() { + if (actionCase_ == 52) { + return (com.google.spanner.executor.v1.AdaptMessageAction) action_; + } + return com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Action to adapt a message.
                                +   * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + @java.lang.Override + public com.google.spanner.executor.v1.AdaptMessageActionOrBuilder getAdaptMessageOrBuilder() { + if (actionCase_ == 52) { + return (com.google.spanner.executor.v1.AdaptMessageAction) action_; + } + return com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -1174,8 +1295,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databasePath_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, databasePath_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databasePath_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, databasePath_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getSpannerOptions()); @@ -1233,6 +1354,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (actionCase_ == 51) { output.writeMessage(51, (com.google.spanner.executor.v1.QueryCancellationAction) action_); } + if (actionCase_ == 52) { + output.writeMessage(52, (com.google.spanner.executor.v1.AdaptMessageAction) action_); + } getUnknownFields().writeTo(output); } @@ -1242,8 +1366,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databasePath_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, databasePath_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databasePath_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, databasePath_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSpannerOptions()); @@ -1333,6 +1457,11 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeMessageSize( 51, (com.google.spanner.executor.v1.QueryCancellationAction) action_); } + if (actionCase_ == 52) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 52, (com.google.spanner.executor.v1.AdaptMessageAction) action_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -1410,6 +1539,9 @@ public boolean equals(final java.lang.Object obj) { case 51: if (!getQueryCancellation().equals(other.getQueryCancellation())) return false; break; + case 52: + if (!getAdaptMessage().equals(other.getAdaptMessage())) return false; + break; case 0: default: } @@ -1499,6 +1631,10 @@ public int hashCode() { hash = (37 * hash) + QUERY_CANCELLATION_FIELD_NUMBER; hash = (53 * hash) + getQueryCancellation().hashCode(); break; + case 52: + hash = (37 * hash) + ADAPT_MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getAdaptMessage().hashCode(); + break; case 0: default: } @@ -1544,38 +1680,38 @@ public static com.google.spanner.executor.v1.SpannerAction parseFrom( public static com.google.spanner.executor.v1.SpannerAction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1598,10 +1734,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1613,7 +1750,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.SpannerAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.SpannerAction) com.google.spanner.executor.v1.SpannerActionOrBuilder { @@ -1623,7 +1760,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAction_fieldAccessorTable @@ -1637,14 +1774,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getSpannerOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSpannerOptionsFieldBuilder(); } } @@ -1709,6 +1846,9 @@ public Builder clear() { if (queryCancellationBuilder_ != null) { queryCancellationBuilder_.clear(); } + if (adaptMessageBuilder_ != null) { + adaptMessageBuilder_.clear(); + } actionCase_ = 0; action_ = null; return this; @@ -1814,39 +1954,9 @@ private void buildPartialOneofs(com.google.spanner.executor.v1.SpannerAction res if (actionCase_ == 51 && queryCancellationBuilder_ != null) { result.action_ = queryCancellationBuilder_.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); + if (actionCase_ == 52 && adaptMessageBuilder_ != null) { + result.action_ = adaptMessageBuilder_.build(); + } } @java.lang.Override @@ -1955,6 +2065,11 @@ public Builder mergeFrom(com.google.spanner.executor.v1.SpannerAction other) { mergeQueryCancellation(other.getQueryCancellation()); break; } + case ADAPT_MESSAGE: + { + mergeAdaptMessage(other.getAdaptMessage()); + break; + } case ACTION_NOT_SET: { break; @@ -1994,118 +2109,133 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getSpannerOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetSpannerOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 82: { - input.readMessage(getStartFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetStartFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 10; break; } // case 82 case 90: { - input.readMessage(getFinishFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetFinishFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 11; break; } // case 90 case 162: { - input.readMessage(getReadFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetReadFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 20; break; } // case 162 case 170: { - input.readMessage(getQueryFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetQueryFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 21; break; } // case 170 case 178: { - input.readMessage(getMutationFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMutationFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 22; break; } // case 178 case 186: { - input.readMessage(getDmlFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetDmlFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 23; break; } // case 186 case 194: { - input.readMessage(getBatchDmlFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetBatchDmlFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 24; break; } // case 194 case 202: { - input.readMessage(getWriteFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetWriteFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 25; break; } // case 202 case 218: { input.readMessage( - getPartitionedUpdateFieldBuilder().getBuilder(), extensionRegistry); + internalGetPartitionedUpdateFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 27; break; } // case 218 case 242: { - input.readMessage(getAdminFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetAdminFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 30; break; } // case 242 case 322: { - input.readMessage(getStartBatchTxnFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartBatchTxnFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 40; break; } // case 322 case 330: { - input.readMessage(getCloseBatchTxnFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCloseBatchTxnFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 41; break; } // case 330 case 338: { input.readMessage( - getGenerateDbPartitionsReadFieldBuilder().getBuilder(), extensionRegistry); + internalGetGenerateDbPartitionsReadFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 42; break; } // case 338 case 346: { input.readMessage( - getGenerateDbPartitionsQueryFieldBuilder().getBuilder(), extensionRegistry); + internalGetGenerateDbPartitionsQueryFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 43; break; } // case 346 case 354: { input.readMessage( - getExecutePartitionFieldBuilder().getBuilder(), extensionRegistry); + internalGetExecutePartitionFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 44; break; } // case 354 case 402: { input.readMessage( - getExecuteChangeStreamQueryFieldBuilder().getBuilder(), extensionRegistry); + internalGetExecuteChangeStreamQueryFieldBuilder().getBuilder(), + extensionRegistry); actionCase_ = 50; break; } // case 402 case 410: { input.readMessage( - getQueryCancellationFieldBuilder().getBuilder(), extensionRegistry); + internalGetQueryCancellationFieldBuilder().getBuilder(), extensionRegistry); actionCase_ = 51; break; } // case 410 + case 418: + { + input.readMessage( + internalGetAdaptMessageFieldBuilder().getBuilder(), extensionRegistry); + actionCase_ = 52; + break; + } // case 418 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -2140,6 +2270,7 @@ public Builder clearAction() { private int bitField0_; private java.lang.Object databasePath_ = ""; + /** * * @@ -2164,6 +2295,7 @@ public java.lang.String getDatabasePath() { return (java.lang.String) ref; } } + /** * * @@ -2188,6 +2320,7 @@ public com.google.protobuf.ByteString getDatabasePathBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2211,6 +2344,7 @@ public Builder setDatabasePath(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2230,6 +2364,7 @@ public Builder clearDatabasePath() { onChanged(); return this; } + /** * * @@ -2256,11 +2391,12 @@ public Builder setDatabasePathBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.executor.v1.SpannerOptions spannerOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerOptions, com.google.spanner.executor.v1.SpannerOptions.Builder, com.google.spanner.executor.v1.SpannerOptionsOrBuilder> spannerOptionsBuilder_; + /** * * @@ -2275,6 +2411,7 @@ public Builder setDatabasePathBytes(com.google.protobuf.ByteString value) { public boolean hasSpannerOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -2295,6 +2432,7 @@ public com.google.spanner.executor.v1.SpannerOptions getSpannerOptions() { return spannerOptionsBuilder_.getMessage(); } } + /** * * @@ -2317,6 +2455,7 @@ public Builder setSpannerOptions(com.google.spanner.executor.v1.SpannerOptions v onChanged(); return this; } + /** * * @@ -2337,6 +2476,7 @@ public Builder setSpannerOptions( onChanged(); return this; } + /** * * @@ -2365,6 +2505,7 @@ public Builder mergeSpannerOptions(com.google.spanner.executor.v1.SpannerOptions } return this; } + /** * * @@ -2384,6 +2525,7 @@ public Builder clearSpannerOptions() { onChanged(); return this; } + /** * * @@ -2396,8 +2538,9 @@ public Builder clearSpannerOptions() { public com.google.spanner.executor.v1.SpannerOptions.Builder getSpannerOptionsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getSpannerOptionsFieldBuilder().getBuilder(); + return internalGetSpannerOptionsFieldBuilder().getBuilder(); } + /** * * @@ -2416,6 +2559,7 @@ public com.google.spanner.executor.v1.SpannerOptionsOrBuilder getSpannerOptionsO : spannerOptions_; } } + /** * * @@ -2425,14 +2569,14 @@ public com.google.spanner.executor.v1.SpannerOptionsOrBuilder getSpannerOptionsO * * .google.spanner.executor.v1.SpannerOptions spanner_options = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerOptions, com.google.spanner.executor.v1.SpannerOptions.Builder, com.google.spanner.executor.v1.SpannerOptionsOrBuilder> - getSpannerOptionsFieldBuilder() { + internalGetSpannerOptionsFieldBuilder() { if (spannerOptionsBuilder_ == null) { spannerOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerOptions, com.google.spanner.executor.v1.SpannerOptions.Builder, com.google.spanner.executor.v1.SpannerOptionsOrBuilder>( @@ -2442,11 +2586,12 @@ public com.google.spanner.executor.v1.SpannerOptionsOrBuilder getSpannerOptionsO return spannerOptionsBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.StartTransactionAction, com.google.spanner.executor.v1.StartTransactionAction.Builder, com.google.spanner.executor.v1.StartTransactionActionOrBuilder> startBuilder_; + /** * * @@ -2462,6 +2607,7 @@ public com.google.spanner.executor.v1.SpannerOptionsOrBuilder getSpannerOptionsO public boolean hasStart() { return actionCase_ == 10; } + /** * * @@ -2487,6 +2633,7 @@ public com.google.spanner.executor.v1.StartTransactionAction getStart() { return com.google.spanner.executor.v1.StartTransactionAction.getDefaultInstance(); } } + /** * * @@ -2509,6 +2656,7 @@ public Builder setStart(com.google.spanner.executor.v1.StartTransactionAction va actionCase_ = 10; return this; } + /** * * @@ -2529,6 +2677,7 @@ public Builder setStart( actionCase_ = 10; return this; } + /** * * @@ -2562,6 +2711,7 @@ public Builder mergeStart(com.google.spanner.executor.v1.StartTransactionAction actionCase_ = 10; return this; } + /** * * @@ -2587,6 +2737,7 @@ public Builder clearStart() { } return this; } + /** * * @@ -2597,8 +2748,9 @@ public Builder clearStart() { * .google.spanner.executor.v1.StartTransactionAction start = 10; */ public com.google.spanner.executor.v1.StartTransactionAction.Builder getStartBuilder() { - return getStartFieldBuilder().getBuilder(); + return internalGetStartFieldBuilder().getBuilder(); } + /** * * @@ -2619,6 +2771,7 @@ public com.google.spanner.executor.v1.StartTransactionActionOrBuilder getStartOr return com.google.spanner.executor.v1.StartTransactionAction.getDefaultInstance(); } } + /** * * @@ -2628,17 +2781,17 @@ public com.google.spanner.executor.v1.StartTransactionActionOrBuilder getStartOr * * .google.spanner.executor.v1.StartTransactionAction start = 10; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.StartTransactionAction, com.google.spanner.executor.v1.StartTransactionAction.Builder, com.google.spanner.executor.v1.StartTransactionActionOrBuilder> - getStartFieldBuilder() { + internalGetStartFieldBuilder() { if (startBuilder_ == null) { if (!(actionCase_ == 10)) { action_ = com.google.spanner.executor.v1.StartTransactionAction.getDefaultInstance(); } startBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.StartTransactionAction, com.google.spanner.executor.v1.StartTransactionAction.Builder, com.google.spanner.executor.v1.StartTransactionActionOrBuilder>( @@ -2652,11 +2805,12 @@ public com.google.spanner.executor.v1.StartTransactionActionOrBuilder getStartOr return startBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.FinishTransactionAction, com.google.spanner.executor.v1.FinishTransactionAction.Builder, com.google.spanner.executor.v1.FinishTransactionActionOrBuilder> finishBuilder_; + /** * * @@ -2672,6 +2826,7 @@ public com.google.spanner.executor.v1.StartTransactionActionOrBuilder getStartOr public boolean hasFinish() { return actionCase_ == 11; } + /** * * @@ -2697,6 +2852,7 @@ public com.google.spanner.executor.v1.FinishTransactionAction getFinish() { return com.google.spanner.executor.v1.FinishTransactionAction.getDefaultInstance(); } } + /** * * @@ -2719,6 +2875,7 @@ public Builder setFinish(com.google.spanner.executor.v1.FinishTransactionAction actionCase_ = 11; return this; } + /** * * @@ -2739,6 +2896,7 @@ public Builder setFinish( actionCase_ = 11; return this; } + /** * * @@ -2772,6 +2930,7 @@ public Builder mergeFinish(com.google.spanner.executor.v1.FinishTransactionActio actionCase_ = 11; return this; } + /** * * @@ -2797,6 +2956,7 @@ public Builder clearFinish() { } return this; } + /** * * @@ -2807,8 +2967,9 @@ public Builder clearFinish() { * .google.spanner.executor.v1.FinishTransactionAction finish = 11; */ public com.google.spanner.executor.v1.FinishTransactionAction.Builder getFinishBuilder() { - return getFinishFieldBuilder().getBuilder(); + return internalGetFinishFieldBuilder().getBuilder(); } + /** * * @@ -2829,6 +2990,7 @@ public com.google.spanner.executor.v1.FinishTransactionActionOrBuilder getFinish return com.google.spanner.executor.v1.FinishTransactionAction.getDefaultInstance(); } } + /** * * @@ -2838,17 +3000,17 @@ public com.google.spanner.executor.v1.FinishTransactionActionOrBuilder getFinish * * .google.spanner.executor.v1.FinishTransactionAction finish = 11; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.FinishTransactionAction, com.google.spanner.executor.v1.FinishTransactionAction.Builder, com.google.spanner.executor.v1.FinishTransactionActionOrBuilder> - getFinishFieldBuilder() { + internalGetFinishFieldBuilder() { if (finishBuilder_ == null) { if (!(actionCase_ == 11)) { action_ = com.google.spanner.executor.v1.FinishTransactionAction.getDefaultInstance(); } finishBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.FinishTransactionAction, com.google.spanner.executor.v1.FinishTransactionAction.Builder, com.google.spanner.executor.v1.FinishTransactionActionOrBuilder>( @@ -2862,11 +3024,12 @@ public com.google.spanner.executor.v1.FinishTransactionActionOrBuilder getFinish return finishBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadAction, com.google.spanner.executor.v1.ReadAction.Builder, com.google.spanner.executor.v1.ReadActionOrBuilder> readBuilder_; + /** * * @@ -2882,6 +3045,7 @@ public com.google.spanner.executor.v1.FinishTransactionActionOrBuilder getFinish public boolean hasRead() { return actionCase_ == 20; } + /** * * @@ -2907,6 +3071,7 @@ public com.google.spanner.executor.v1.ReadAction getRead() { return com.google.spanner.executor.v1.ReadAction.getDefaultInstance(); } } + /** * * @@ -2929,6 +3094,7 @@ public Builder setRead(com.google.spanner.executor.v1.ReadAction value) { actionCase_ = 20; return this; } + /** * * @@ -2948,6 +3114,7 @@ public Builder setRead(com.google.spanner.executor.v1.ReadAction.Builder builder actionCase_ = 20; return this; } + /** * * @@ -2980,6 +3147,7 @@ public Builder mergeRead(com.google.spanner.executor.v1.ReadAction value) { actionCase_ = 20; return this; } + /** * * @@ -3005,6 +3173,7 @@ public Builder clearRead() { } return this; } + /** * * @@ -3015,8 +3184,9 @@ public Builder clearRead() { * .google.spanner.executor.v1.ReadAction read = 20; */ public com.google.spanner.executor.v1.ReadAction.Builder getReadBuilder() { - return getReadFieldBuilder().getBuilder(); + return internalGetReadFieldBuilder().getBuilder(); } + /** * * @@ -3037,6 +3207,7 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { return com.google.spanner.executor.v1.ReadAction.getDefaultInstance(); } } + /** * * @@ -3046,17 +3217,17 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { * * .google.spanner.executor.v1.ReadAction read = 20; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadAction, com.google.spanner.executor.v1.ReadAction.Builder, com.google.spanner.executor.v1.ReadActionOrBuilder> - getReadFieldBuilder() { + internalGetReadFieldBuilder() { if (readBuilder_ == null) { if (!(actionCase_ == 20)) { action_ = com.google.spanner.executor.v1.ReadAction.getDefaultInstance(); } readBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadAction, com.google.spanner.executor.v1.ReadAction.Builder, com.google.spanner.executor.v1.ReadActionOrBuilder>( @@ -3070,11 +3241,12 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { return readBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> queryBuilder_; + /** * * @@ -3090,6 +3262,7 @@ public com.google.spanner.executor.v1.ReadActionOrBuilder getReadOrBuilder() { public boolean hasQuery() { return actionCase_ == 21; } + /** * * @@ -3115,6 +3288,7 @@ public com.google.spanner.executor.v1.QueryAction getQuery() { return com.google.spanner.executor.v1.QueryAction.getDefaultInstance(); } } + /** * * @@ -3137,6 +3311,7 @@ public Builder setQuery(com.google.spanner.executor.v1.QueryAction value) { actionCase_ = 21; return this; } + /** * * @@ -3156,6 +3331,7 @@ public Builder setQuery(com.google.spanner.executor.v1.QueryAction.Builder build actionCase_ = 21; return this; } + /** * * @@ -3188,6 +3364,7 @@ public Builder mergeQuery(com.google.spanner.executor.v1.QueryAction value) { actionCase_ = 21; return this; } + /** * * @@ -3213,6 +3390,7 @@ public Builder clearQuery() { } return this; } + /** * * @@ -3223,8 +3401,9 @@ public Builder clearQuery() { * .google.spanner.executor.v1.QueryAction query = 21; */ public com.google.spanner.executor.v1.QueryAction.Builder getQueryBuilder() { - return getQueryFieldBuilder().getBuilder(); + return internalGetQueryFieldBuilder().getBuilder(); } + /** * * @@ -3245,6 +3424,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { return com.google.spanner.executor.v1.QueryAction.getDefaultInstance(); } } + /** * * @@ -3254,17 +3434,17 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { * * .google.spanner.executor.v1.QueryAction query = 21; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder> - getQueryFieldBuilder() { + internalGetQueryFieldBuilder() { if (queryBuilder_ == null) { if (!(actionCase_ == 21)) { action_ = com.google.spanner.executor.v1.QueryAction.getDefaultInstance(); } queryBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryAction, com.google.spanner.executor.v1.QueryAction.Builder, com.google.spanner.executor.v1.QueryActionOrBuilder>( @@ -3278,11 +3458,12 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { return queryBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction, com.google.spanner.executor.v1.MutationAction.Builder, com.google.spanner.executor.v1.MutationActionOrBuilder> mutationBuilder_; + /** * * @@ -3298,6 +3479,7 @@ public com.google.spanner.executor.v1.QueryActionOrBuilder getQueryOrBuilder() { public boolean hasMutation() { return actionCase_ == 22; } + /** * * @@ -3323,6 +3505,7 @@ public com.google.spanner.executor.v1.MutationAction getMutation() { return com.google.spanner.executor.v1.MutationAction.getDefaultInstance(); } } + /** * * @@ -3345,6 +3528,7 @@ public Builder setMutation(com.google.spanner.executor.v1.MutationAction value) actionCase_ = 22; return this; } + /** * * @@ -3365,6 +3549,7 @@ public Builder setMutation( actionCase_ = 22; return this; } + /** * * @@ -3397,6 +3582,7 @@ public Builder mergeMutation(com.google.spanner.executor.v1.MutationAction value actionCase_ = 22; return this; } + /** * * @@ -3422,6 +3608,7 @@ public Builder clearMutation() { } return this; } + /** * * @@ -3432,8 +3619,9 @@ public Builder clearMutation() { * .google.spanner.executor.v1.MutationAction mutation = 22; */ public com.google.spanner.executor.v1.MutationAction.Builder getMutationBuilder() { - return getMutationFieldBuilder().getBuilder(); + return internalGetMutationFieldBuilder().getBuilder(); } + /** * * @@ -3454,6 +3642,7 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild return com.google.spanner.executor.v1.MutationAction.getDefaultInstance(); } } + /** * * @@ -3463,17 +3652,17 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild * * .google.spanner.executor.v1.MutationAction mutation = 22; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction, com.google.spanner.executor.v1.MutationAction.Builder, com.google.spanner.executor.v1.MutationActionOrBuilder> - getMutationFieldBuilder() { + internalGetMutationFieldBuilder() { if (mutationBuilder_ == null) { if (!(actionCase_ == 22)) { action_ = com.google.spanner.executor.v1.MutationAction.getDefaultInstance(); } mutationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction, com.google.spanner.executor.v1.MutationAction.Builder, com.google.spanner.executor.v1.MutationActionOrBuilder>( @@ -3487,11 +3676,12 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild return mutationBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DmlAction, com.google.spanner.executor.v1.DmlAction.Builder, com.google.spanner.executor.v1.DmlActionOrBuilder> dmlBuilder_; + /** * * @@ -3507,6 +3697,7 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild public boolean hasDml() { return actionCase_ == 23; } + /** * * @@ -3532,6 +3723,7 @@ public com.google.spanner.executor.v1.DmlAction getDml() { return com.google.spanner.executor.v1.DmlAction.getDefaultInstance(); } } + /** * * @@ -3554,6 +3746,7 @@ public Builder setDml(com.google.spanner.executor.v1.DmlAction value) { actionCase_ = 23; return this; } + /** * * @@ -3573,6 +3766,7 @@ public Builder setDml(com.google.spanner.executor.v1.DmlAction.Builder builderFo actionCase_ = 23; return this; } + /** * * @@ -3605,6 +3799,7 @@ public Builder mergeDml(com.google.spanner.executor.v1.DmlAction value) { actionCase_ = 23; return this; } + /** * * @@ -3630,6 +3825,7 @@ public Builder clearDml() { } return this; } + /** * * @@ -3640,8 +3836,9 @@ public Builder clearDml() { * .google.spanner.executor.v1.DmlAction dml = 23; */ public com.google.spanner.executor.v1.DmlAction.Builder getDmlBuilder() { - return getDmlFieldBuilder().getBuilder(); + return internalGetDmlFieldBuilder().getBuilder(); } + /** * * @@ -3662,6 +3859,7 @@ public com.google.spanner.executor.v1.DmlActionOrBuilder getDmlOrBuilder() { return com.google.spanner.executor.v1.DmlAction.getDefaultInstance(); } } + /** * * @@ -3671,17 +3869,17 @@ public com.google.spanner.executor.v1.DmlActionOrBuilder getDmlOrBuilder() { * * .google.spanner.executor.v1.DmlAction dml = 23; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DmlAction, com.google.spanner.executor.v1.DmlAction.Builder, com.google.spanner.executor.v1.DmlActionOrBuilder> - getDmlFieldBuilder() { + internalGetDmlFieldBuilder() { if (dmlBuilder_ == null) { if (!(actionCase_ == 23)) { action_ = com.google.spanner.executor.v1.DmlAction.getDefaultInstance(); } dmlBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.DmlAction, com.google.spanner.executor.v1.DmlAction.Builder, com.google.spanner.executor.v1.DmlActionOrBuilder>( @@ -3695,11 +3893,12 @@ public com.google.spanner.executor.v1.DmlActionOrBuilder getDmlOrBuilder() { return dmlBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.BatchDmlAction, com.google.spanner.executor.v1.BatchDmlAction.Builder, com.google.spanner.executor.v1.BatchDmlActionOrBuilder> batchDmlBuilder_; + /** * * @@ -3715,6 +3914,7 @@ public com.google.spanner.executor.v1.DmlActionOrBuilder getDmlOrBuilder() { public boolean hasBatchDml() { return actionCase_ == 24; } + /** * * @@ -3740,6 +3940,7 @@ public com.google.spanner.executor.v1.BatchDmlAction getBatchDml() { return com.google.spanner.executor.v1.BatchDmlAction.getDefaultInstance(); } } + /** * * @@ -3762,6 +3963,7 @@ public Builder setBatchDml(com.google.spanner.executor.v1.BatchDmlAction value) actionCase_ = 24; return this; } + /** * * @@ -3782,6 +3984,7 @@ public Builder setBatchDml( actionCase_ = 24; return this; } + /** * * @@ -3814,6 +4017,7 @@ public Builder mergeBatchDml(com.google.spanner.executor.v1.BatchDmlAction value actionCase_ = 24; return this; } + /** * * @@ -3839,6 +4043,7 @@ public Builder clearBatchDml() { } return this; } + /** * * @@ -3849,8 +4054,9 @@ public Builder clearBatchDml() { * .google.spanner.executor.v1.BatchDmlAction batch_dml = 24; */ public com.google.spanner.executor.v1.BatchDmlAction.Builder getBatchDmlBuilder() { - return getBatchDmlFieldBuilder().getBuilder(); + return internalGetBatchDmlFieldBuilder().getBuilder(); } + /** * * @@ -3871,6 +4077,7 @@ public com.google.spanner.executor.v1.BatchDmlActionOrBuilder getBatchDmlOrBuild return com.google.spanner.executor.v1.BatchDmlAction.getDefaultInstance(); } } + /** * * @@ -3880,17 +4087,17 @@ public com.google.spanner.executor.v1.BatchDmlActionOrBuilder getBatchDmlOrBuild * * .google.spanner.executor.v1.BatchDmlAction batch_dml = 24; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.BatchDmlAction, com.google.spanner.executor.v1.BatchDmlAction.Builder, com.google.spanner.executor.v1.BatchDmlActionOrBuilder> - getBatchDmlFieldBuilder() { + internalGetBatchDmlFieldBuilder() { if (batchDmlBuilder_ == null) { if (!(actionCase_ == 24)) { action_ = com.google.spanner.executor.v1.BatchDmlAction.getDefaultInstance(); } batchDmlBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.BatchDmlAction, com.google.spanner.executor.v1.BatchDmlAction.Builder, com.google.spanner.executor.v1.BatchDmlActionOrBuilder>( @@ -3904,11 +4111,12 @@ public com.google.spanner.executor.v1.BatchDmlActionOrBuilder getBatchDmlOrBuild return batchDmlBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.WriteMutationsAction, com.google.spanner.executor.v1.WriteMutationsAction.Builder, com.google.spanner.executor.v1.WriteMutationsActionOrBuilder> writeBuilder_; + /** * * @@ -3924,6 +4132,7 @@ public com.google.spanner.executor.v1.BatchDmlActionOrBuilder getBatchDmlOrBuild public boolean hasWrite() { return actionCase_ == 25; } + /** * * @@ -3949,6 +4158,7 @@ public com.google.spanner.executor.v1.WriteMutationsAction getWrite() { return com.google.spanner.executor.v1.WriteMutationsAction.getDefaultInstance(); } } + /** * * @@ -3971,6 +4181,7 @@ public Builder setWrite(com.google.spanner.executor.v1.WriteMutationsAction valu actionCase_ = 25; return this; } + /** * * @@ -3991,6 +4202,7 @@ public Builder setWrite( actionCase_ = 25; return this; } + /** * * @@ -4024,6 +4236,7 @@ public Builder mergeWrite(com.google.spanner.executor.v1.WriteMutationsAction va actionCase_ = 25; return this; } + /** * * @@ -4049,6 +4262,7 @@ public Builder clearWrite() { } return this; } + /** * * @@ -4059,8 +4273,9 @@ public Builder clearWrite() { * .google.spanner.executor.v1.WriteMutationsAction write = 25; */ public com.google.spanner.executor.v1.WriteMutationsAction.Builder getWriteBuilder() { - return getWriteFieldBuilder().getBuilder(); + return internalGetWriteFieldBuilder().getBuilder(); } + /** * * @@ -4081,6 +4296,7 @@ public com.google.spanner.executor.v1.WriteMutationsActionOrBuilder getWriteOrBu return com.google.spanner.executor.v1.WriteMutationsAction.getDefaultInstance(); } } + /** * * @@ -4090,17 +4306,17 @@ public com.google.spanner.executor.v1.WriteMutationsActionOrBuilder getWriteOrBu * * .google.spanner.executor.v1.WriteMutationsAction write = 25; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.WriteMutationsAction, com.google.spanner.executor.v1.WriteMutationsAction.Builder, com.google.spanner.executor.v1.WriteMutationsActionOrBuilder> - getWriteFieldBuilder() { + internalGetWriteFieldBuilder() { if (writeBuilder_ == null) { if (!(actionCase_ == 25)) { action_ = com.google.spanner.executor.v1.WriteMutationsAction.getDefaultInstance(); } writeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.WriteMutationsAction, com.google.spanner.executor.v1.WriteMutationsAction.Builder, com.google.spanner.executor.v1.WriteMutationsActionOrBuilder>( @@ -4114,11 +4330,12 @@ public com.google.spanner.executor.v1.WriteMutationsActionOrBuilder getWriteOrBu return writeBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.PartitionedUpdateAction, com.google.spanner.executor.v1.PartitionedUpdateAction.Builder, com.google.spanner.executor.v1.PartitionedUpdateActionOrBuilder> partitionedUpdateBuilder_; + /** * * @@ -4134,6 +4351,7 @@ public com.google.spanner.executor.v1.WriteMutationsActionOrBuilder getWriteOrBu public boolean hasPartitionedUpdate() { return actionCase_ == 27; } + /** * * @@ -4159,6 +4377,7 @@ public com.google.spanner.executor.v1.PartitionedUpdateAction getPartitionedUpda return com.google.spanner.executor.v1.PartitionedUpdateAction.getDefaultInstance(); } } + /** * * @@ -4182,6 +4401,7 @@ public Builder setPartitionedUpdate( actionCase_ = 27; return this; } + /** * * @@ -4202,6 +4422,7 @@ public Builder setPartitionedUpdate( actionCase_ = 27; return this; } + /** * * @@ -4236,6 +4457,7 @@ public Builder mergePartitionedUpdate( actionCase_ = 27; return this; } + /** * * @@ -4261,6 +4483,7 @@ public Builder clearPartitionedUpdate() { } return this; } + /** * * @@ -4272,8 +4495,9 @@ public Builder clearPartitionedUpdate() { */ public com.google.spanner.executor.v1.PartitionedUpdateAction.Builder getPartitionedUpdateBuilder() { - return getPartitionedUpdateFieldBuilder().getBuilder(); + return internalGetPartitionedUpdateFieldBuilder().getBuilder(); } + /** * * @@ -4295,6 +4519,7 @@ public Builder clearPartitionedUpdate() { return com.google.spanner.executor.v1.PartitionedUpdateAction.getDefaultInstance(); } } + /** * * @@ -4304,17 +4529,17 @@ public Builder clearPartitionedUpdate() { * * .google.spanner.executor.v1.PartitionedUpdateAction partitioned_update = 27; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.PartitionedUpdateAction, com.google.spanner.executor.v1.PartitionedUpdateAction.Builder, com.google.spanner.executor.v1.PartitionedUpdateActionOrBuilder> - getPartitionedUpdateFieldBuilder() { + internalGetPartitionedUpdateFieldBuilder() { if (partitionedUpdateBuilder_ == null) { if (!(actionCase_ == 27)) { action_ = com.google.spanner.executor.v1.PartitionedUpdateAction.getDefaultInstance(); } partitionedUpdateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.PartitionedUpdateAction, com.google.spanner.executor.v1.PartitionedUpdateAction.Builder, com.google.spanner.executor.v1.PartitionedUpdateActionOrBuilder>( @@ -4328,11 +4553,12 @@ public Builder clearPartitionedUpdate() { return partitionedUpdateBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.AdminAction, com.google.spanner.executor.v1.AdminAction.Builder, com.google.spanner.executor.v1.AdminActionOrBuilder> adminBuilder_; + /** * * @@ -4349,6 +4575,7 @@ public Builder clearPartitionedUpdate() { public boolean hasAdmin() { return actionCase_ == 30; } + /** * * @@ -4375,6 +4602,7 @@ public com.google.spanner.executor.v1.AdminAction getAdmin() { return com.google.spanner.executor.v1.AdminAction.getDefaultInstance(); } } + /** * * @@ -4398,6 +4626,7 @@ public Builder setAdmin(com.google.spanner.executor.v1.AdminAction value) { actionCase_ = 30; return this; } + /** * * @@ -4418,6 +4647,7 @@ public Builder setAdmin(com.google.spanner.executor.v1.AdminAction.Builder build actionCase_ = 30; return this; } + /** * * @@ -4451,6 +4681,7 @@ public Builder mergeAdmin(com.google.spanner.executor.v1.AdminAction value) { actionCase_ = 30; return this; } + /** * * @@ -4477,6 +4708,7 @@ public Builder clearAdmin() { } return this; } + /** * * @@ -4488,8 +4720,9 @@ public Builder clearAdmin() { * .google.spanner.executor.v1.AdminAction admin = 30; */ public com.google.spanner.executor.v1.AdminAction.Builder getAdminBuilder() { - return getAdminFieldBuilder().getBuilder(); + return internalGetAdminFieldBuilder().getBuilder(); } + /** * * @@ -4511,6 +4744,7 @@ public com.google.spanner.executor.v1.AdminActionOrBuilder getAdminOrBuilder() { return com.google.spanner.executor.v1.AdminAction.getDefaultInstance(); } } + /** * * @@ -4521,17 +4755,17 @@ public com.google.spanner.executor.v1.AdminActionOrBuilder getAdminOrBuilder() { * * .google.spanner.executor.v1.AdminAction admin = 30; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.AdminAction, com.google.spanner.executor.v1.AdminAction.Builder, com.google.spanner.executor.v1.AdminActionOrBuilder> - getAdminFieldBuilder() { + internalGetAdminFieldBuilder() { if (adminBuilder_ == null) { if (!(actionCase_ == 30)) { action_ = com.google.spanner.executor.v1.AdminAction.getDefaultInstance(); } adminBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.AdminAction, com.google.spanner.executor.v1.AdminAction.Builder, com.google.spanner.executor.v1.AdminActionOrBuilder>( @@ -4545,11 +4779,12 @@ public com.google.spanner.executor.v1.AdminActionOrBuilder getAdminOrBuilder() { return adminBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.StartBatchTransactionAction, com.google.spanner.executor.v1.StartBatchTransactionAction.Builder, com.google.spanner.executor.v1.StartBatchTransactionActionOrBuilder> startBatchTxnBuilder_; + /** * * @@ -4565,6 +4800,7 @@ public com.google.spanner.executor.v1.AdminActionOrBuilder getAdminOrBuilder() { public boolean hasStartBatchTxn() { return actionCase_ == 40; } + /** * * @@ -4590,6 +4826,7 @@ public com.google.spanner.executor.v1.StartBatchTransactionAction getStartBatchT return com.google.spanner.executor.v1.StartBatchTransactionAction.getDefaultInstance(); } } + /** * * @@ -4613,6 +4850,7 @@ public Builder setStartBatchTxn( actionCase_ = 40; return this; } + /** * * @@ -4633,6 +4871,7 @@ public Builder setStartBatchTxn( actionCase_ = 40; return this; } + /** * * @@ -4668,6 +4907,7 @@ public Builder mergeStartBatchTxn( actionCase_ = 40; return this; } + /** * * @@ -4693,6 +4933,7 @@ public Builder clearStartBatchTxn() { } return this; } + /** * * @@ -4704,8 +4945,9 @@ public Builder clearStartBatchTxn() { */ public com.google.spanner.executor.v1.StartBatchTransactionAction.Builder getStartBatchTxnBuilder() { - return getStartBatchTxnFieldBuilder().getBuilder(); + return internalGetStartBatchTxnFieldBuilder().getBuilder(); } + /** * * @@ -4727,6 +4969,7 @@ public Builder clearStartBatchTxn() { return com.google.spanner.executor.v1.StartBatchTransactionAction.getDefaultInstance(); } } + /** * * @@ -4736,17 +4979,17 @@ public Builder clearStartBatchTxn() { * * .google.spanner.executor.v1.StartBatchTransactionAction start_batch_txn = 40; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.StartBatchTransactionAction, com.google.spanner.executor.v1.StartBatchTransactionAction.Builder, com.google.spanner.executor.v1.StartBatchTransactionActionOrBuilder> - getStartBatchTxnFieldBuilder() { + internalGetStartBatchTxnFieldBuilder() { if (startBatchTxnBuilder_ == null) { if (!(actionCase_ == 40)) { action_ = com.google.spanner.executor.v1.StartBatchTransactionAction.getDefaultInstance(); } startBatchTxnBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.StartBatchTransactionAction, com.google.spanner.executor.v1.StartBatchTransactionAction.Builder, com.google.spanner.executor.v1.StartBatchTransactionActionOrBuilder>( @@ -4760,11 +5003,12 @@ public Builder clearStartBatchTxn() { return startBatchTxnBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloseBatchTransactionAction, com.google.spanner.executor.v1.CloseBatchTransactionAction.Builder, com.google.spanner.executor.v1.CloseBatchTransactionActionOrBuilder> closeBatchTxnBuilder_; + /** * * @@ -4780,6 +5024,7 @@ public Builder clearStartBatchTxn() { public boolean hasCloseBatchTxn() { return actionCase_ == 41; } + /** * * @@ -4805,6 +5050,7 @@ public com.google.spanner.executor.v1.CloseBatchTransactionAction getCloseBatchT return com.google.spanner.executor.v1.CloseBatchTransactionAction.getDefaultInstance(); } } + /** * * @@ -4828,6 +5074,7 @@ public Builder setCloseBatchTxn( actionCase_ = 41; return this; } + /** * * @@ -4848,6 +5095,7 @@ public Builder setCloseBatchTxn( actionCase_ = 41; return this; } + /** * * @@ -4883,6 +5131,7 @@ public Builder mergeCloseBatchTxn( actionCase_ = 41; return this; } + /** * * @@ -4908,6 +5157,7 @@ public Builder clearCloseBatchTxn() { } return this; } + /** * * @@ -4919,8 +5169,9 @@ public Builder clearCloseBatchTxn() { */ public com.google.spanner.executor.v1.CloseBatchTransactionAction.Builder getCloseBatchTxnBuilder() { - return getCloseBatchTxnFieldBuilder().getBuilder(); + return internalGetCloseBatchTxnFieldBuilder().getBuilder(); } + /** * * @@ -4942,6 +5193,7 @@ public Builder clearCloseBatchTxn() { return com.google.spanner.executor.v1.CloseBatchTransactionAction.getDefaultInstance(); } } + /** * * @@ -4951,17 +5203,17 @@ public Builder clearCloseBatchTxn() { * * .google.spanner.executor.v1.CloseBatchTransactionAction close_batch_txn = 41; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloseBatchTransactionAction, com.google.spanner.executor.v1.CloseBatchTransactionAction.Builder, com.google.spanner.executor.v1.CloseBatchTransactionActionOrBuilder> - getCloseBatchTxnFieldBuilder() { + internalGetCloseBatchTxnFieldBuilder() { if (closeBatchTxnBuilder_ == null) { if (!(actionCase_ == 41)) { action_ = com.google.spanner.executor.v1.CloseBatchTransactionAction.getDefaultInstance(); } closeBatchTxnBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.CloseBatchTransactionAction, com.google.spanner.executor.v1.CloseBatchTransactionAction.Builder, com.google.spanner.executor.v1.CloseBatchTransactionActionOrBuilder>( @@ -4975,11 +5227,12 @@ public Builder clearCloseBatchTxn() { return closeBatchTxnBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction, com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction.Builder, com.google.spanner.executor.v1.GenerateDbPartitionsForReadActionOrBuilder> generateDbPartitionsReadBuilder_; + /** * * @@ -4997,6 +5250,7 @@ public Builder clearCloseBatchTxn() { public boolean hasGenerateDbPartitionsRead() { return actionCase_ == 42; } + /** * * @@ -5027,6 +5281,7 @@ public boolean hasGenerateDbPartitionsRead() { .getDefaultInstance(); } } + /** * * @@ -5052,6 +5307,7 @@ public Builder setGenerateDbPartitionsRead( actionCase_ = 42; return this; } + /** * * @@ -5074,6 +5330,7 @@ public Builder setGenerateDbPartitionsRead( actionCase_ = 42; return this; } + /** * * @@ -5111,6 +5368,7 @@ public Builder mergeGenerateDbPartitionsRead( actionCase_ = 42; return this; } + /** * * @@ -5138,6 +5396,7 @@ public Builder clearGenerateDbPartitionsRead() { } return this; } + /** * * @@ -5151,8 +5410,9 @@ public Builder clearGenerateDbPartitionsRead() { */ public com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction.Builder getGenerateDbPartitionsReadBuilder() { - return getGenerateDbPartitionsReadFieldBuilder().getBuilder(); + return internalGetGenerateDbPartitionsReadFieldBuilder().getBuilder(); } + /** * * @@ -5177,6 +5437,7 @@ public Builder clearGenerateDbPartitionsRead() { .getDefaultInstance(); } } + /** * * @@ -5188,18 +5449,18 @@ public Builder clearGenerateDbPartitionsRead() { * .google.spanner.executor.v1.GenerateDbPartitionsForReadAction generate_db_partitions_read = 42; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction, com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction.Builder, com.google.spanner.executor.v1.GenerateDbPartitionsForReadActionOrBuilder> - getGenerateDbPartitionsReadFieldBuilder() { + internalGetGenerateDbPartitionsReadFieldBuilder() { if (generateDbPartitionsReadBuilder_ == null) { if (!(actionCase_ == 42)) { action_ = com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction.getDefaultInstance(); } generateDbPartitionsReadBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction, com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction.Builder, com.google.spanner.executor.v1.GenerateDbPartitionsForReadActionOrBuilder>( @@ -5213,11 +5474,12 @@ public Builder clearGenerateDbPartitionsRead() { return generateDbPartitionsReadBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction, com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction.Builder, com.google.spanner.executor.v1.GenerateDbPartitionsForQueryActionOrBuilder> generateDbPartitionsQueryBuilder_; + /** * * @@ -5235,6 +5497,7 @@ public Builder clearGenerateDbPartitionsRead() { public boolean hasGenerateDbPartitionsQuery() { return actionCase_ == 43; } + /** * * @@ -5265,6 +5528,7 @@ public boolean hasGenerateDbPartitionsQuery() { .getDefaultInstance(); } } + /** * * @@ -5290,6 +5554,7 @@ public Builder setGenerateDbPartitionsQuery( actionCase_ = 43; return this; } + /** * * @@ -5312,6 +5577,7 @@ public Builder setGenerateDbPartitionsQuery( actionCase_ = 43; return this; } + /** * * @@ -5349,6 +5615,7 @@ public Builder mergeGenerateDbPartitionsQuery( actionCase_ = 43; return this; } + /** * * @@ -5376,6 +5643,7 @@ public Builder clearGenerateDbPartitionsQuery() { } return this; } + /** * * @@ -5389,8 +5657,9 @@ public Builder clearGenerateDbPartitionsQuery() { */ public com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction.Builder getGenerateDbPartitionsQueryBuilder() { - return getGenerateDbPartitionsQueryFieldBuilder().getBuilder(); + return internalGetGenerateDbPartitionsQueryFieldBuilder().getBuilder(); } + /** * * @@ -5415,6 +5684,7 @@ public Builder clearGenerateDbPartitionsQuery() { .getDefaultInstance(); } } + /** * * @@ -5426,11 +5696,11 @@ public Builder clearGenerateDbPartitionsQuery() { * .google.spanner.executor.v1.GenerateDbPartitionsForQueryAction generate_db_partitions_query = 43; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction, com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction.Builder, com.google.spanner.executor.v1.GenerateDbPartitionsForQueryActionOrBuilder> - getGenerateDbPartitionsQueryFieldBuilder() { + internalGetGenerateDbPartitionsQueryFieldBuilder() { if (generateDbPartitionsQueryBuilder_ == null) { if (!(actionCase_ == 43)) { action_ = @@ -5438,7 +5708,7 @@ public Builder clearGenerateDbPartitionsQuery() { .getDefaultInstance(); } generateDbPartitionsQueryBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction, com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction.Builder, com.google.spanner.executor.v1.GenerateDbPartitionsForQueryActionOrBuilder>( @@ -5452,11 +5722,12 @@ public Builder clearGenerateDbPartitionsQuery() { return generateDbPartitionsQueryBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ExecutePartitionAction, com.google.spanner.executor.v1.ExecutePartitionAction.Builder, com.google.spanner.executor.v1.ExecutePartitionActionOrBuilder> executePartitionBuilder_; + /** * * @@ -5472,6 +5743,7 @@ public Builder clearGenerateDbPartitionsQuery() { public boolean hasExecutePartition() { return actionCase_ == 44; } + /** * * @@ -5497,6 +5769,7 @@ public com.google.spanner.executor.v1.ExecutePartitionAction getExecutePartition return com.google.spanner.executor.v1.ExecutePartitionAction.getDefaultInstance(); } } + /** * * @@ -5520,6 +5793,7 @@ public Builder setExecutePartition( actionCase_ = 44; return this; } + /** * * @@ -5540,6 +5814,7 @@ public Builder setExecutePartition( actionCase_ = 44; return this; } + /** * * @@ -5574,6 +5849,7 @@ public Builder mergeExecutePartition( actionCase_ = 44; return this; } + /** * * @@ -5599,6 +5875,7 @@ public Builder clearExecutePartition() { } return this; } + /** * * @@ -5610,8 +5887,9 @@ public Builder clearExecutePartition() { */ public com.google.spanner.executor.v1.ExecutePartitionAction.Builder getExecutePartitionBuilder() { - return getExecutePartitionFieldBuilder().getBuilder(); + return internalGetExecutePartitionFieldBuilder().getBuilder(); } + /** * * @@ -5633,6 +5911,7 @@ public Builder clearExecutePartition() { return com.google.spanner.executor.v1.ExecutePartitionAction.getDefaultInstance(); } } + /** * * @@ -5642,17 +5921,17 @@ public Builder clearExecutePartition() { * * .google.spanner.executor.v1.ExecutePartitionAction execute_partition = 44; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ExecutePartitionAction, com.google.spanner.executor.v1.ExecutePartitionAction.Builder, com.google.spanner.executor.v1.ExecutePartitionActionOrBuilder> - getExecutePartitionFieldBuilder() { + internalGetExecutePartitionFieldBuilder() { if (executePartitionBuilder_ == null) { if (!(actionCase_ == 44)) { action_ = com.google.spanner.executor.v1.ExecutePartitionAction.getDefaultInstance(); } executePartitionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ExecutePartitionAction, com.google.spanner.executor.v1.ExecutePartitionAction.Builder, com.google.spanner.executor.v1.ExecutePartitionActionOrBuilder>( @@ -5666,11 +5945,12 @@ public Builder clearExecutePartition() { return executePartitionBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ExecuteChangeStreamQuery, com.google.spanner.executor.v1.ExecuteChangeStreamQuery.Builder, com.google.spanner.executor.v1.ExecuteChangeStreamQueryOrBuilder> executeChangeStreamQueryBuilder_; + /** * * @@ -5687,6 +5967,7 @@ public Builder clearExecutePartition() { public boolean hasExecuteChangeStreamQuery() { return actionCase_ == 50; } + /** * * @@ -5713,6 +5994,7 @@ public com.google.spanner.executor.v1.ExecuteChangeStreamQuery getExecuteChangeS return com.google.spanner.executor.v1.ExecuteChangeStreamQuery.getDefaultInstance(); } } + /** * * @@ -5737,6 +6019,7 @@ public Builder setExecuteChangeStreamQuery( actionCase_ = 50; return this; } + /** * * @@ -5758,6 +6041,7 @@ public Builder setExecuteChangeStreamQuery( actionCase_ = 50; return this; } + /** * * @@ -5793,6 +6077,7 @@ public Builder mergeExecuteChangeStreamQuery( actionCase_ = 50; return this; } + /** * * @@ -5819,6 +6104,7 @@ public Builder clearExecuteChangeStreamQuery() { } return this; } + /** * * @@ -5831,8 +6117,9 @@ public Builder clearExecuteChangeStreamQuery() { */ public com.google.spanner.executor.v1.ExecuteChangeStreamQuery.Builder getExecuteChangeStreamQueryBuilder() { - return getExecuteChangeStreamQueryFieldBuilder().getBuilder(); + return internalGetExecuteChangeStreamQueryFieldBuilder().getBuilder(); } + /** * * @@ -5855,6 +6142,7 @@ public Builder clearExecuteChangeStreamQuery() { return com.google.spanner.executor.v1.ExecuteChangeStreamQuery.getDefaultInstance(); } } + /** * * @@ -5865,17 +6153,17 @@ public Builder clearExecuteChangeStreamQuery() { * .google.spanner.executor.v1.ExecuteChangeStreamQuery execute_change_stream_query = 50; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ExecuteChangeStreamQuery, com.google.spanner.executor.v1.ExecuteChangeStreamQuery.Builder, com.google.spanner.executor.v1.ExecuteChangeStreamQueryOrBuilder> - getExecuteChangeStreamQueryFieldBuilder() { + internalGetExecuteChangeStreamQueryFieldBuilder() { if (executeChangeStreamQueryBuilder_ == null) { if (!(actionCase_ == 50)) { action_ = com.google.spanner.executor.v1.ExecuteChangeStreamQuery.getDefaultInstance(); } executeChangeStreamQueryBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ExecuteChangeStreamQuery, com.google.spanner.executor.v1.ExecuteChangeStreamQuery.Builder, com.google.spanner.executor.v1.ExecuteChangeStreamQueryOrBuilder>( @@ -5889,11 +6177,12 @@ public Builder clearExecuteChangeStreamQuery() { return executeChangeStreamQueryBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryCancellationAction, com.google.spanner.executor.v1.QueryCancellationAction.Builder, com.google.spanner.executor.v1.QueryCancellationActionOrBuilder> queryCancellationBuilder_; + /** * * @@ -5909,6 +6198,7 @@ public Builder clearExecuteChangeStreamQuery() { public boolean hasQueryCancellation() { return actionCase_ == 51; } + /** * * @@ -5934,6 +6224,7 @@ public com.google.spanner.executor.v1.QueryCancellationAction getQueryCancellati return com.google.spanner.executor.v1.QueryCancellationAction.getDefaultInstance(); } } + /** * * @@ -5957,6 +6248,7 @@ public Builder setQueryCancellation( actionCase_ = 51; return this; } + /** * * @@ -5977,6 +6269,7 @@ public Builder setQueryCancellation( actionCase_ = 51; return this; } + /** * * @@ -6011,6 +6304,7 @@ public Builder mergeQueryCancellation( actionCase_ = 51; return this; } + /** * * @@ -6036,6 +6330,7 @@ public Builder clearQueryCancellation() { } return this; } + /** * * @@ -6047,8 +6342,9 @@ public Builder clearQueryCancellation() { */ public com.google.spanner.executor.v1.QueryCancellationAction.Builder getQueryCancellationBuilder() { - return getQueryCancellationFieldBuilder().getBuilder(); + return internalGetQueryCancellationFieldBuilder().getBuilder(); } + /** * * @@ -6070,6 +6366,7 @@ public Builder clearQueryCancellation() { return com.google.spanner.executor.v1.QueryCancellationAction.getDefaultInstance(); } } + /** * * @@ -6079,17 +6376,17 @@ public Builder clearQueryCancellation() { * * .google.spanner.executor.v1.QueryCancellationAction query_cancellation = 51; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryCancellationAction, com.google.spanner.executor.v1.QueryCancellationAction.Builder, com.google.spanner.executor.v1.QueryCancellationActionOrBuilder> - getQueryCancellationFieldBuilder() { + internalGetQueryCancellationFieldBuilder() { if (queryCancellationBuilder_ == null) { if (!(actionCase_ == 51)) { action_ = com.google.spanner.executor.v1.QueryCancellationAction.getDefaultInstance(); } queryCancellationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryCancellationAction, com.google.spanner.executor.v1.QueryCancellationAction.Builder, com.google.spanner.executor.v1.QueryCancellationActionOrBuilder>( @@ -6103,15 +6400,222 @@ public Builder clearQueryCancellation() { return queryCancellationBuilder_; } + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.executor.v1.AdaptMessageAction, + com.google.spanner.executor.v1.AdaptMessageAction.Builder, + com.google.spanner.executor.v1.AdaptMessageActionOrBuilder> + adaptMessageBuilder_; + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + * + * @return Whether the adaptMessage field is set. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean hasAdaptMessage() { + return actionCase_ == 52; + } + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + * + * @return The adaptMessage. + */ + @java.lang.Override + public com.google.spanner.executor.v1.AdaptMessageAction getAdaptMessage() { + if (adaptMessageBuilder_ == null) { + if (actionCase_ == 52) { + return (com.google.spanner.executor.v1.AdaptMessageAction) action_; + } + return com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance(); + } else { + if (actionCase_ == 52) { + return adaptMessageBuilder_.getMessage(); + } + return com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + public Builder setAdaptMessage(com.google.spanner.executor.v1.AdaptMessageAction value) { + if (adaptMessageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + action_ = value; + onChanged(); + } else { + adaptMessageBuilder_.setMessage(value); + } + actionCase_ = 52; + return this; + } + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + public Builder setAdaptMessage( + com.google.spanner.executor.v1.AdaptMessageAction.Builder builderForValue) { + if (adaptMessageBuilder_ == null) { + action_ = builderForValue.build(); + onChanged(); + } else { + adaptMessageBuilder_.setMessage(builderForValue.build()); + } + actionCase_ = 52; + return this; + } + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + public Builder mergeAdaptMessage(com.google.spanner.executor.v1.AdaptMessageAction value) { + if (adaptMessageBuilder_ == null) { + if (actionCase_ == 52 + && action_ != com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance()) { + action_ = + com.google.spanner.executor.v1.AdaptMessageAction.newBuilder( + (com.google.spanner.executor.v1.AdaptMessageAction) action_) + .mergeFrom(value) + .buildPartial(); + } else { + action_ = value; + } + onChanged(); + } else { + if (actionCase_ == 52) { + adaptMessageBuilder_.mergeFrom(value); + } else { + adaptMessageBuilder_.setMessage(value); + } + } + actionCase_ = 52; + return this; + } + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + public Builder clearAdaptMessage() { + if (adaptMessageBuilder_ == null) { + if (actionCase_ == 52) { + actionCase_ = 0; + action_ = null; + onChanged(); + } + } else { + if (actionCase_ == 52) { + actionCase_ = 0; + action_ = null; + } + adaptMessageBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + public com.google.spanner.executor.v1.AdaptMessageAction.Builder getAdaptMessageBuilder() { + return internalGetAdaptMessageFieldBuilder().getBuilder(); } + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public com.google.spanner.executor.v1.AdaptMessageActionOrBuilder getAdaptMessageOrBuilder() { + if ((actionCase_ == 52) && (adaptMessageBuilder_ != null)) { + return adaptMessageBuilder_.getMessageOrBuilder(); + } else { + if (actionCase_ == 52) { + return (com.google.spanner.executor.v1.AdaptMessageAction) action_; + } + return com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Action to adapt a message.
                                +     * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.executor.v1.AdaptMessageAction, + com.google.spanner.executor.v1.AdaptMessageAction.Builder, + com.google.spanner.executor.v1.AdaptMessageActionOrBuilder> + internalGetAdaptMessageFieldBuilder() { + if (adaptMessageBuilder_ == null) { + if (!(actionCase_ == 52)) { + action_ = com.google.spanner.executor.v1.AdaptMessageAction.getDefaultInstance(); + } + adaptMessageBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.executor.v1.AdaptMessageAction, + com.google.spanner.executor.v1.AdaptMessageAction.Builder, + com.google.spanner.executor.v1.AdaptMessageActionOrBuilder>( + (com.google.spanner.executor.v1.AdaptMessageAction) action_, + getParentForChildren(), + isClean()); + action_ = null; + } + actionCase_ = 52; + onChanged(); + return adaptMessageBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.SpannerAction) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java index 8ac7916ade2..05e5744b046 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface SpannerActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.SpannerAction) @@ -38,6 +40,7 @@ public interface SpannerActionOrBuilder * @return The databasePath. */ java.lang.String getDatabasePath(); + /** * * @@ -65,6 +68,7 @@ public interface SpannerActionOrBuilder * @return Whether the spannerOptions field is set. */ boolean hasSpannerOptions(); + /** * * @@ -77,6 +81,7 @@ public interface SpannerActionOrBuilder * @return The spannerOptions. */ com.google.spanner.executor.v1.SpannerOptions getSpannerOptions(); + /** * * @@ -100,6 +105,7 @@ public interface SpannerActionOrBuilder * @return Whether the start field is set. */ boolean hasStart(); + /** * * @@ -112,6 +118,7 @@ public interface SpannerActionOrBuilder * @return The start. */ com.google.spanner.executor.v1.StartTransactionAction getStart(); + /** * * @@ -135,6 +142,7 @@ public interface SpannerActionOrBuilder * @return Whether the finish field is set. */ boolean hasFinish(); + /** * * @@ -147,6 +155,7 @@ public interface SpannerActionOrBuilder * @return The finish. */ com.google.spanner.executor.v1.FinishTransactionAction getFinish(); + /** * * @@ -170,6 +179,7 @@ public interface SpannerActionOrBuilder * @return Whether the read field is set. */ boolean hasRead(); + /** * * @@ -182,6 +192,7 @@ public interface SpannerActionOrBuilder * @return The read. */ com.google.spanner.executor.v1.ReadAction getRead(); + /** * * @@ -205,6 +216,7 @@ public interface SpannerActionOrBuilder * @return Whether the query field is set. */ boolean hasQuery(); + /** * * @@ -217,6 +229,7 @@ public interface SpannerActionOrBuilder * @return The query. */ com.google.spanner.executor.v1.QueryAction getQuery(); + /** * * @@ -240,6 +253,7 @@ public interface SpannerActionOrBuilder * @return Whether the mutation field is set. */ boolean hasMutation(); + /** * * @@ -252,6 +266,7 @@ public interface SpannerActionOrBuilder * @return The mutation. */ com.google.spanner.executor.v1.MutationAction getMutation(); + /** * * @@ -275,6 +290,7 @@ public interface SpannerActionOrBuilder * @return Whether the dml field is set. */ boolean hasDml(); + /** * * @@ -287,6 +303,7 @@ public interface SpannerActionOrBuilder * @return The dml. */ com.google.spanner.executor.v1.DmlAction getDml(); + /** * * @@ -310,6 +327,7 @@ public interface SpannerActionOrBuilder * @return Whether the batchDml field is set. */ boolean hasBatchDml(); + /** * * @@ -322,6 +340,7 @@ public interface SpannerActionOrBuilder * @return The batchDml. */ com.google.spanner.executor.v1.BatchDmlAction getBatchDml(); + /** * * @@ -345,6 +364,7 @@ public interface SpannerActionOrBuilder * @return Whether the write field is set. */ boolean hasWrite(); + /** * * @@ -357,6 +377,7 @@ public interface SpannerActionOrBuilder * @return The write. */ com.google.spanner.executor.v1.WriteMutationsAction getWrite(); + /** * * @@ -380,6 +401,7 @@ public interface SpannerActionOrBuilder * @return Whether the partitionedUpdate field is set. */ boolean hasPartitionedUpdate(); + /** * * @@ -392,6 +414,7 @@ public interface SpannerActionOrBuilder * @return The partitionedUpdate. */ com.google.spanner.executor.v1.PartitionedUpdateAction getPartitionedUpdate(); + /** * * @@ -416,6 +439,7 @@ public interface SpannerActionOrBuilder * @return Whether the admin field is set. */ boolean hasAdmin(); + /** * * @@ -429,6 +453,7 @@ public interface SpannerActionOrBuilder * @return The admin. */ com.google.spanner.executor.v1.AdminAction getAdmin(); + /** * * @@ -453,6 +478,7 @@ public interface SpannerActionOrBuilder * @return Whether the startBatchTxn field is set. */ boolean hasStartBatchTxn(); + /** * * @@ -465,6 +491,7 @@ public interface SpannerActionOrBuilder * @return The startBatchTxn. */ com.google.spanner.executor.v1.StartBatchTransactionAction getStartBatchTxn(); + /** * * @@ -488,6 +515,7 @@ public interface SpannerActionOrBuilder * @return Whether the closeBatchTxn field is set. */ boolean hasCloseBatchTxn(); + /** * * @@ -500,6 +528,7 @@ public interface SpannerActionOrBuilder * @return The closeBatchTxn. */ com.google.spanner.executor.v1.CloseBatchTransactionAction getCloseBatchTxn(); + /** * * @@ -525,6 +554,7 @@ public interface SpannerActionOrBuilder * @return Whether the generateDbPartitionsRead field is set. */ boolean hasGenerateDbPartitionsRead(); + /** * * @@ -539,6 +569,7 @@ public interface SpannerActionOrBuilder * @return The generateDbPartitionsRead. */ com.google.spanner.executor.v1.GenerateDbPartitionsForReadAction getGenerateDbPartitionsRead(); + /** * * @@ -567,6 +598,7 @@ public interface SpannerActionOrBuilder * @return Whether the generateDbPartitionsQuery field is set. */ boolean hasGenerateDbPartitionsQuery(); + /** * * @@ -581,6 +613,7 @@ public interface SpannerActionOrBuilder * @return The generateDbPartitionsQuery. */ com.google.spanner.executor.v1.GenerateDbPartitionsForQueryAction getGenerateDbPartitionsQuery(); + /** * * @@ -607,6 +640,7 @@ public interface SpannerActionOrBuilder * @return Whether the executePartition field is set. */ boolean hasExecutePartition(); + /** * * @@ -619,6 +653,7 @@ public interface SpannerActionOrBuilder * @return The executePartition. */ com.google.spanner.executor.v1.ExecutePartitionAction getExecutePartition(); + /** * * @@ -643,6 +678,7 @@ public interface SpannerActionOrBuilder * @return Whether the executeChangeStreamQuery field is set. */ boolean hasExecuteChangeStreamQuery(); + /** * * @@ -656,6 +692,7 @@ public interface SpannerActionOrBuilder * @return The executeChangeStreamQuery. */ com.google.spanner.executor.v1.ExecuteChangeStreamQuery getExecuteChangeStreamQuery(); + /** * * @@ -681,6 +718,7 @@ public interface SpannerActionOrBuilder * @return Whether the queryCancellation field is set. */ boolean hasQueryCancellation(); + /** * * @@ -693,6 +731,7 @@ public interface SpannerActionOrBuilder * @return The queryCancellation. */ com.google.spanner.executor.v1.QueryCancellationAction getQueryCancellation(); + /** * * @@ -704,5 +743,42 @@ public interface SpannerActionOrBuilder */ com.google.spanner.executor.v1.QueryCancellationActionOrBuilder getQueryCancellationOrBuilder(); + /** + * + * + *
                                +   * Action to adapt a message.
                                +   * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + * + * @return Whether the adaptMessage field is set. + */ + boolean hasAdaptMessage(); + + /** + * + * + *
                                +   * Action to adapt a message.
                                +   * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + * + * @return The adaptMessage. + */ + com.google.spanner.executor.v1.AdaptMessageAction getAdaptMessage(); + + /** + * + * + *
                                +   * Action to adapt a message.
                                +   * 
                                + * + * .google.spanner.executor.v1.AdaptMessageAction adapt_message = 52; + */ + com.google.spanner.executor.v1.AdaptMessageActionOrBuilder getAdaptMessageOrBuilder(); + com.google.spanner.executor.v1.SpannerAction.ActionCase getActionCase(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java index f55f6e922e2..ff10ce58be7 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.SpannerActionOutcome} */ -public final class SpannerActionOutcome extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class SpannerActionOutcome extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.SpannerActionOutcome) SpannerActionOutcomeOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerActionOutcome"); + } + // Use SpannerActionOutcome.newBuilder() to construct. - private SpannerActionOutcome(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private SpannerActionOutcome(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private SpannerActionOutcome() { changeStreamRecords_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SpannerActionOutcome(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerActionOutcome_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerActionOutcome_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int STATUS_FIELD_NUMBER = 1; private com.google.rpc.Status status_; + /** * * @@ -85,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasStatus() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -101,6 +110,7 @@ public boolean hasStatus() { public com.google.rpc.Status getStatus() { return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; } + /** * * @@ -118,6 +128,7 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public static final int COMMIT_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp commitTime_; + /** * * @@ -133,6 +144,7 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public boolean hasCommitTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -148,6 +160,7 @@ public boolean hasCommitTime() { public com.google.protobuf.Timestamp getCommitTime() { return commitTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : commitTime_; } + /** * * @@ -164,6 +177,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { public static final int READ_RESULT_FIELD_NUMBER = 3; private com.google.spanner.executor.v1.ReadResult readResult_; + /** * * @@ -180,6 +194,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { public boolean hasReadResult() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -198,6 +213,7 @@ public com.google.spanner.executor.v1.ReadResult getReadResult() { ? com.google.spanner.executor.v1.ReadResult.getDefaultInstance() : readResult_; } + /** * * @@ -217,6 +233,7 @@ public com.google.spanner.executor.v1.ReadResultOrBuilder getReadResultOrBuilder public static final int QUERY_RESULT_FIELD_NUMBER = 4; private com.google.spanner.executor.v1.QueryResult queryResult_; + /** * * @@ -233,6 +250,7 @@ public com.google.spanner.executor.v1.ReadResultOrBuilder getReadResultOrBuilder public boolean hasQueryResult() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -251,6 +269,7 @@ public com.google.spanner.executor.v1.QueryResult getQueryResult() { ? com.google.spanner.executor.v1.QueryResult.getDefaultInstance() : queryResult_; } + /** * * @@ -270,6 +289,7 @@ public com.google.spanner.executor.v1.QueryResultOrBuilder getQueryResultOrBuild public static final int TRANSACTION_RESTARTED_FIELD_NUMBER = 5; private boolean transactionRestarted_ = false; + /** * * @@ -288,6 +308,7 @@ public com.google.spanner.executor.v1.QueryResultOrBuilder getQueryResultOrBuild public boolean hasTransactionRestarted() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -309,6 +330,7 @@ public boolean getTransactionRestarted() { public static final int BATCH_TXN_ID_FIELD_NUMBER = 6; private com.google.protobuf.ByteString batchTxnId_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -325,6 +347,7 @@ public boolean getTransactionRestarted() { public boolean hasBatchTxnId() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -346,6 +369,7 @@ public com.google.protobuf.ByteString getBatchTxnId() { @SuppressWarnings("serial") private java.util.List dbPartition_; + /** * * @@ -360,6 +384,7 @@ public com.google.protobuf.ByteString getBatchTxnId() { public java.util.List getDbPartitionList() { return dbPartition_; } + /** * * @@ -375,6 +400,7 @@ public java.util.List getDbPartit getDbPartitionOrBuilderList() { return dbPartition_; } + /** * * @@ -389,6 +415,7 @@ public java.util.List getDbPartit public int getDbPartitionCount() { return dbPartition_.size(); } + /** * * @@ -403,6 +430,7 @@ public int getDbPartitionCount() { public com.google.spanner.executor.v1.BatchPartition getDbPartition(int index) { return dbPartition_.get(index); } + /** * * @@ -420,6 +448,7 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getDbPartitionOrBu public static final int ADMIN_RESULT_FIELD_NUMBER = 8; private com.google.spanner.executor.v1.AdminResult adminResult_; + /** * * @@ -435,6 +464,7 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getDbPartitionOrBu public boolean hasAdminResult() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -452,6 +482,7 @@ public com.google.spanner.executor.v1.AdminResult getAdminResult() { ? com.google.spanner.executor.v1.AdminResult.getDefaultInstance() : adminResult_; } + /** * * @@ -472,6 +503,7 @@ public com.google.spanner.executor.v1.AdminResultOrBuilder getAdminResultOrBuild @SuppressWarnings("serial") private com.google.protobuf.Internal.LongList dmlRowsModified_ = emptyLongList(); + /** * * @@ -488,6 +520,7 @@ public com.google.spanner.executor.v1.AdminResultOrBuilder getAdminResultOrBuild public java.util.List getDmlRowsModifiedList() { return dmlRowsModified_; } + /** * * @@ -503,6 +536,7 @@ public java.util.List getDmlRowsModifiedList() { public int getDmlRowsModifiedCount() { return dmlRowsModified_.size(); } + /** * * @@ -526,6 +560,7 @@ public long getDmlRowsModified(int index) { @SuppressWarnings("serial") private java.util.List changeStreamRecords_; + /** * * @@ -541,6 +576,7 @@ public long getDmlRowsModified(int index) { getChangeStreamRecordsList() { return changeStreamRecords_; } + /** * * @@ -556,6 +592,7 @@ public long getDmlRowsModified(int index) { getChangeStreamRecordsOrBuilderList() { return changeStreamRecords_; } + /** * * @@ -570,6 +607,7 @@ public long getDmlRowsModified(int index) { public int getChangeStreamRecordsCount() { return changeStreamRecords_.size(); } + /** * * @@ -584,6 +622,7 @@ public int getChangeStreamRecordsCount() { public com.google.spanner.executor.v1.ChangeStreamRecord getChangeStreamRecords(int index) { return changeStreamRecords_.get(index); } + /** * * @@ -600,6 +639,43 @@ public com.google.spanner.executor.v1.ChangeStreamRecordOrBuilder getChangeStrea return changeStreamRecords_.get(index); } + public static final int SNAPSHOT_ISOLATION_TXN_READ_TIMESTAMP_FIELD_NUMBER = 11; + private long snapshotIsolationTxnReadTimestamp_ = 0L; + + /** + * + * + *
                                +   * If not zero, it indicates the read timestamp to use for validating
                                +   * the SnapshotIsolation transaction.
                                +   * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @return Whether the snapshotIsolationTxnReadTimestamp field is set. + */ + @java.lang.Override + public boolean hasSnapshotIsolationTxnReadTimestamp() { + return ((bitField0_ & 0x00000080) != 0); + } + + /** + * + * + *
                                +   * If not zero, it indicates the read timestamp to use for validating
                                +   * the SnapshotIsolation transaction.
                                +   * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @return The snapshotIsolationTxnReadTimestamp. + */ + @java.lang.Override + public long getSnapshotIsolationTxnReadTimestamp() { + return snapshotIsolationTxnReadTimestamp_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -649,6 +725,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < changeStreamRecords_.size(); i++) { output.writeMessage(10, changeStreamRecords_.get(i)); } + if (((bitField0_ & 0x00000080) != 0)) { + output.writeInt64(11, snapshotIsolationTxnReadTimestamp_); + } getUnknownFields().writeTo(output); } @@ -700,6 +779,11 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, changeStreamRecords_.get(i)); } + if (((bitField0_ & 0x00000080) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeInt64Size( + 11, snapshotIsolationTxnReadTimestamp_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -747,6 +831,12 @@ public boolean equals(final java.lang.Object obj) { } if (!getDmlRowsModifiedList().equals(other.getDmlRowsModifiedList())) return false; if (!getChangeStreamRecordsList().equals(other.getChangeStreamRecordsList())) return false; + if (hasSnapshotIsolationTxnReadTimestamp() != other.hasSnapshotIsolationTxnReadTimestamp()) + return false; + if (hasSnapshotIsolationTxnReadTimestamp()) { + if (getSnapshotIsolationTxnReadTimestamp() != other.getSnapshotIsolationTxnReadTimestamp()) + return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -798,6 +888,12 @@ public int hashCode() { hash = (37 * hash) + CHANGE_STREAM_RECORDS_FIELD_NUMBER; hash = (53 * hash) + getChangeStreamRecordsList().hashCode(); } + if (hasSnapshotIsolationTxnReadTimestamp()) { + hash = (37 * hash) + SNAPSHOT_ISOLATION_TXN_READ_TIMESTAMP_FIELD_NUMBER; + hash = + (53 * hash) + + com.google.protobuf.Internal.hashLong(getSnapshotIsolationTxnReadTimestamp()); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -840,38 +936,38 @@ public static com.google.spanner.executor.v1.SpannerActionOutcome parseFrom( public static com.google.spanner.executor.v1.SpannerActionOutcome parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerActionOutcome parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerActionOutcome parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerActionOutcome parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerActionOutcome parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerActionOutcome parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -894,10 +990,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -907,7 +1004,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.SpannerActionOutcome} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.SpannerActionOutcome) com.google.spanner.executor.v1.SpannerActionOutcomeOrBuilder { @@ -917,7 +1014,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerActionOutcome_fieldAccessorTable @@ -931,20 +1028,20 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getStatusFieldBuilder(); - getCommitTimeFieldBuilder(); - getReadResultFieldBuilder(); - getQueryResultFieldBuilder(); - getDbPartitionFieldBuilder(); - getAdminResultFieldBuilder(); - getChangeStreamRecordsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStatusFieldBuilder(); + internalGetCommitTimeFieldBuilder(); + internalGetReadResultFieldBuilder(); + internalGetQueryResultFieldBuilder(); + internalGetDbPartitionFieldBuilder(); + internalGetAdminResultFieldBuilder(); + internalGetChangeStreamRecordsFieldBuilder(); } } @@ -994,6 +1091,7 @@ public Builder clear() { changeStreamRecordsBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000200); + snapshotIsolationTxnReadTimestamp_ = 0L; return this; } @@ -1088,42 +1186,13 @@ private void buildPartial0(com.google.spanner.executor.v1.SpannerActionOutcome r dmlRowsModified_.makeImmutable(); result.dmlRowsModified_ = dmlRowsModified_; } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.snapshotIsolationTxnReadTimestamp_ = snapshotIsolationTxnReadTimestamp_; + to_bitField0_ |= 0x00000080; + } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.SpannerActionOutcome) { @@ -1174,8 +1243,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.SpannerActionOutcome oth dbPartition_ = other.dbPartition_; bitField0_ = (bitField0_ & ~0x00000040); dbPartitionBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getDbPartitionFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetDbPartitionFieldBuilder() : null; } else { dbPartitionBuilder_.addAllMessages(other.dbPartition_); @@ -1215,14 +1284,17 @@ public Builder mergeFrom(com.google.spanner.executor.v1.SpannerActionOutcome oth changeStreamRecords_ = other.changeStreamRecords_; bitField0_ = (bitField0_ & ~0x00000200); changeStreamRecordsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getChangeStreamRecordsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetChangeStreamRecordsFieldBuilder() : null; } else { changeStreamRecordsBuilder_.addAllMessages(other.changeStreamRecords_); } } } + if (other.hasSnapshotIsolationTxnReadTimestamp()) { + setSnapshotIsolationTxnReadTimestamp(other.getSnapshotIsolationTxnReadTimestamp()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1251,25 +1323,28 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getStatusFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetStatusFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getCommitTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCommitTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getReadResultFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetReadResultFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getQueryResultFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetQueryResultFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -1300,7 +1375,8 @@ public Builder mergeFrom( } // case 58 case 66: { - input.readMessage(getAdminResultFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetAdminResultFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000080; break; } // case 66 @@ -1336,6 +1412,12 @@ public Builder mergeFrom( } break; } // case 82 + case 88: + { + snapshotIsolationTxnReadTimestamp_ = input.readInt64(); + bitField0_ |= 0x00000400; + break; + } // case 88 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1356,9 +1438,10 @@ public Builder mergeFrom( private int bitField0_; private com.google.rpc.Status status_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> statusBuilder_; + /** * * @@ -1374,6 +1457,7 @@ public Builder mergeFrom( public boolean hasStatus() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1393,6 +1477,7 @@ public com.google.rpc.Status getStatus() { return statusBuilder_.getMessage(); } } + /** * * @@ -1416,6 +1501,7 @@ public Builder setStatus(com.google.rpc.Status value) { onChanged(); return this; } + /** * * @@ -1436,6 +1522,7 @@ public Builder setStatus(com.google.rpc.Status.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -1464,6 +1551,7 @@ public Builder mergeStatus(com.google.rpc.Status value) { } return this; } + /** * * @@ -1484,6 +1572,7 @@ public Builder clearStatus() { onChanged(); return this; } + /** * * @@ -1497,8 +1586,9 @@ public Builder clearStatus() { public com.google.rpc.Status.Builder getStatusBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getStatusFieldBuilder().getBuilder(); + return internalGetStatusFieldBuilder().getBuilder(); } + /** * * @@ -1516,6 +1606,7 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; } } + /** * * @@ -1526,12 +1617,12 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { * * optional .google.rpc.Status status = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> - getStatusFieldBuilder() { + internalGetStatusFieldBuilder() { if (statusBuilder_ == null) { statusBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder>(getStatus(), getParentForChildren(), isClean()); @@ -1541,11 +1632,12 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { } private com.google.protobuf.Timestamp commitTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> commitTimeBuilder_; + /** * * @@ -1560,6 +1652,7 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public boolean hasCommitTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1580,6 +1673,7 @@ public com.google.protobuf.Timestamp getCommitTime() { return commitTimeBuilder_.getMessage(); } } + /** * * @@ -1602,6 +1696,7 @@ public Builder setCommitTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1621,6 +1716,7 @@ public Builder setCommitTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1648,6 +1744,7 @@ public Builder mergeCommitTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1667,6 +1764,7 @@ public Builder clearCommitTime() { onChanged(); return this; } + /** * * @@ -1679,8 +1777,9 @@ public Builder clearCommitTime() { public com.google.protobuf.Timestamp.Builder getCommitTimeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getCommitTimeFieldBuilder().getBuilder(); + return internalGetCommitTimeFieldBuilder().getBuilder(); } + /** * * @@ -1699,6 +1798,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { : commitTime_; } } + /** * * @@ -1708,14 +1808,14 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { * * optional .google.protobuf.Timestamp commit_time = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCommitTimeFieldBuilder() { + internalGetCommitTimeFieldBuilder() { if (commitTimeBuilder_ == null) { commitTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1726,11 +1826,12 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { } private com.google.spanner.executor.v1.ReadResult readResult_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadResult, com.google.spanner.executor.v1.ReadResult.Builder, com.google.spanner.executor.v1.ReadResultOrBuilder> readResultBuilder_; + /** * * @@ -1746,6 +1847,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { public boolean hasReadResult() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1767,6 +1869,7 @@ public com.google.spanner.executor.v1.ReadResult getReadResult() { return readResultBuilder_.getMessage(); } } + /** * * @@ -1790,6 +1893,7 @@ public Builder setReadResult(com.google.spanner.executor.v1.ReadResult value) { onChanged(); return this; } + /** * * @@ -1811,6 +1915,7 @@ public Builder setReadResult( onChanged(); return this; } + /** * * @@ -1839,6 +1944,7 @@ public Builder mergeReadResult(com.google.spanner.executor.v1.ReadResult value) } return this; } + /** * * @@ -1859,6 +1965,7 @@ public Builder clearReadResult() { onChanged(); return this; } + /** * * @@ -1872,8 +1979,9 @@ public Builder clearReadResult() { public com.google.spanner.executor.v1.ReadResult.Builder getReadResultBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getReadResultFieldBuilder().getBuilder(); + return internalGetReadResultFieldBuilder().getBuilder(); } + /** * * @@ -1893,6 +2001,7 @@ public com.google.spanner.executor.v1.ReadResultOrBuilder getReadResultOrBuilder : readResult_; } } + /** * * @@ -1903,14 +2012,14 @@ public com.google.spanner.executor.v1.ReadResultOrBuilder getReadResultOrBuilder * * optional .google.spanner.executor.v1.ReadResult read_result = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadResult, com.google.spanner.executor.v1.ReadResult.Builder, com.google.spanner.executor.v1.ReadResultOrBuilder> - getReadResultFieldBuilder() { + internalGetReadResultFieldBuilder() { if (readResultBuilder_ == null) { readResultBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ReadResult, com.google.spanner.executor.v1.ReadResult.Builder, com.google.spanner.executor.v1.ReadResultOrBuilder>( @@ -1921,11 +2030,12 @@ public com.google.spanner.executor.v1.ReadResultOrBuilder getReadResultOrBuilder } private com.google.spanner.executor.v1.QueryResult queryResult_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryResult, com.google.spanner.executor.v1.QueryResult.Builder, com.google.spanner.executor.v1.QueryResultOrBuilder> queryResultBuilder_; + /** * * @@ -1941,6 +2051,7 @@ public com.google.spanner.executor.v1.ReadResultOrBuilder getReadResultOrBuilder public boolean hasQueryResult() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1962,6 +2073,7 @@ public com.google.spanner.executor.v1.QueryResult getQueryResult() { return queryResultBuilder_.getMessage(); } } + /** * * @@ -1985,6 +2097,7 @@ public Builder setQueryResult(com.google.spanner.executor.v1.QueryResult value) onChanged(); return this; } + /** * * @@ -2006,6 +2119,7 @@ public Builder setQueryResult( onChanged(); return this; } + /** * * @@ -2034,6 +2148,7 @@ public Builder mergeQueryResult(com.google.spanner.executor.v1.QueryResult value } return this; } + /** * * @@ -2054,6 +2169,7 @@ public Builder clearQueryResult() { onChanged(); return this; } + /** * * @@ -2067,8 +2183,9 @@ public Builder clearQueryResult() { public com.google.spanner.executor.v1.QueryResult.Builder getQueryResultBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getQueryResultFieldBuilder().getBuilder(); + return internalGetQueryResultFieldBuilder().getBuilder(); } + /** * * @@ -2088,6 +2205,7 @@ public com.google.spanner.executor.v1.QueryResultOrBuilder getQueryResultOrBuild : queryResult_; } } + /** * * @@ -2098,14 +2216,14 @@ public com.google.spanner.executor.v1.QueryResultOrBuilder getQueryResultOrBuild * * optional .google.spanner.executor.v1.QueryResult query_result = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryResult, com.google.spanner.executor.v1.QueryResult.Builder, com.google.spanner.executor.v1.QueryResultOrBuilder> - getQueryResultFieldBuilder() { + internalGetQueryResultFieldBuilder() { if (queryResultBuilder_ == null) { queryResultBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.QueryResult, com.google.spanner.executor.v1.QueryResult.Builder, com.google.spanner.executor.v1.QueryResultOrBuilder>( @@ -2116,6 +2234,7 @@ public com.google.spanner.executor.v1.QueryResultOrBuilder getQueryResultOrBuild } private boolean transactionRestarted_; + /** * * @@ -2134,6 +2253,7 @@ public com.google.spanner.executor.v1.QueryResultOrBuilder getQueryResultOrBuild public boolean hasTransactionRestarted() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -2152,6 +2272,7 @@ public boolean hasTransactionRestarted() { public boolean getTransactionRestarted() { return transactionRestarted_; } + /** * * @@ -2174,6 +2295,7 @@ public Builder setTransactionRestarted(boolean value) { onChanged(); return this; } + /** * * @@ -2196,6 +2318,7 @@ public Builder clearTransactionRestarted() { } private com.google.protobuf.ByteString batchTxnId_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -2212,6 +2335,7 @@ public Builder clearTransactionRestarted() { public boolean hasBatchTxnId() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -2228,6 +2352,7 @@ public boolean hasBatchTxnId() { public com.google.protobuf.ByteString getBatchTxnId() { return batchTxnId_; } + /** * * @@ -2250,6 +2375,7 @@ public Builder setBatchTxnId(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -2280,7 +2406,7 @@ private void ensureDbPartitionIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.BatchPartition, com.google.spanner.executor.v1.BatchPartition.Builder, com.google.spanner.executor.v1.BatchPartitionOrBuilder> @@ -2303,6 +2429,7 @@ public java.util.List getDbPartit return dbPartitionBuilder_.getMessageList(); } } + /** * * @@ -2320,6 +2447,7 @@ public int getDbPartitionCount() { return dbPartitionBuilder_.getCount(); } } + /** * * @@ -2337,6 +2465,7 @@ public com.google.spanner.executor.v1.BatchPartition getDbPartition(int index) { return dbPartitionBuilder_.getMessage(index); } } + /** * * @@ -2360,6 +2489,7 @@ public Builder setDbPartition(int index, com.google.spanner.executor.v1.BatchPar } return this; } + /** * * @@ -2381,6 +2511,7 @@ public Builder setDbPartition( } return this; } + /** * * @@ -2404,6 +2535,7 @@ public Builder addDbPartition(com.google.spanner.executor.v1.BatchPartition valu } return this; } + /** * * @@ -2427,6 +2559,7 @@ public Builder addDbPartition(int index, com.google.spanner.executor.v1.BatchPar } return this; } + /** * * @@ -2448,6 +2581,7 @@ public Builder addDbPartition( } return this; } + /** * * @@ -2469,6 +2603,7 @@ public Builder addDbPartition( } return this; } + /** * * @@ -2490,6 +2625,7 @@ public Builder addAllDbPartition( } return this; } + /** * * @@ -2510,6 +2646,7 @@ public Builder clearDbPartition() { } return this; } + /** * * @@ -2530,6 +2667,7 @@ public Builder removeDbPartition(int index) { } return this; } + /** * * @@ -2541,8 +2679,9 @@ public Builder removeDbPartition(int index) { * repeated .google.spanner.executor.v1.BatchPartition db_partition = 7; */ public com.google.spanner.executor.v1.BatchPartition.Builder getDbPartitionBuilder(int index) { - return getDbPartitionFieldBuilder().getBuilder(index); + return internalGetDbPartitionFieldBuilder().getBuilder(index); } + /** * * @@ -2561,6 +2700,7 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getDbPartitionOrBu return dbPartitionBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2579,6 +2719,7 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getDbPartitionOrBu return java.util.Collections.unmodifiableList(dbPartition_); } } + /** * * @@ -2590,9 +2731,10 @@ public com.google.spanner.executor.v1.BatchPartitionOrBuilder getDbPartitionOrBu * repeated .google.spanner.executor.v1.BatchPartition db_partition = 7; */ public com.google.spanner.executor.v1.BatchPartition.Builder addDbPartitionBuilder() { - return getDbPartitionFieldBuilder() + return internalGetDbPartitionFieldBuilder() .addBuilder(com.google.spanner.executor.v1.BatchPartition.getDefaultInstance()); } + /** * * @@ -2604,9 +2746,10 @@ public com.google.spanner.executor.v1.BatchPartition.Builder addDbPartitionBuild * repeated .google.spanner.executor.v1.BatchPartition db_partition = 7; */ public com.google.spanner.executor.v1.BatchPartition.Builder addDbPartitionBuilder(int index) { - return getDbPartitionFieldBuilder() + return internalGetDbPartitionFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.BatchPartition.getDefaultInstance()); } + /** * * @@ -2619,17 +2762,17 @@ public com.google.spanner.executor.v1.BatchPartition.Builder addDbPartitionBuild */ public java.util.List getDbPartitionBuilderList() { - return getDbPartitionFieldBuilder().getBuilderList(); + return internalGetDbPartitionFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.BatchPartition, com.google.spanner.executor.v1.BatchPartition.Builder, com.google.spanner.executor.v1.BatchPartitionOrBuilder> - getDbPartitionFieldBuilder() { + internalGetDbPartitionFieldBuilder() { if (dbPartitionBuilder_ == null) { dbPartitionBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.BatchPartition, com.google.spanner.executor.v1.BatchPartition.Builder, com.google.spanner.executor.v1.BatchPartitionOrBuilder>( @@ -2640,11 +2783,12 @@ public com.google.spanner.executor.v1.BatchPartition.Builder addDbPartitionBuild } private com.google.spanner.executor.v1.AdminResult adminResult_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.AdminResult, com.google.spanner.executor.v1.AdminResult.Builder, com.google.spanner.executor.v1.AdminResultOrBuilder> adminResultBuilder_; + /** * * @@ -2659,6 +2803,7 @@ public com.google.spanner.executor.v1.BatchPartition.Builder addDbPartitionBuild public boolean hasAdminResult() { return ((bitField0_ & 0x00000080) != 0); } + /** * * @@ -2679,6 +2824,7 @@ public com.google.spanner.executor.v1.AdminResult getAdminResult() { return adminResultBuilder_.getMessage(); } } + /** * * @@ -2701,6 +2847,7 @@ public Builder setAdminResult(com.google.spanner.executor.v1.AdminResult value) onChanged(); return this; } + /** * * @@ -2721,6 +2868,7 @@ public Builder setAdminResult( onChanged(); return this; } + /** * * @@ -2748,6 +2896,7 @@ public Builder mergeAdminResult(com.google.spanner.executor.v1.AdminResult value } return this; } + /** * * @@ -2767,6 +2916,7 @@ public Builder clearAdminResult() { onChanged(); return this; } + /** * * @@ -2779,8 +2929,9 @@ public Builder clearAdminResult() { public com.google.spanner.executor.v1.AdminResult.Builder getAdminResultBuilder() { bitField0_ |= 0x00000080; onChanged(); - return getAdminResultFieldBuilder().getBuilder(); + return internalGetAdminResultFieldBuilder().getBuilder(); } + /** * * @@ -2799,6 +2950,7 @@ public com.google.spanner.executor.v1.AdminResultOrBuilder getAdminResultOrBuild : adminResult_; } } + /** * * @@ -2808,14 +2960,14 @@ public com.google.spanner.executor.v1.AdminResultOrBuilder getAdminResultOrBuild * * optional .google.spanner.executor.v1.AdminResult admin_result = 8; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.AdminResult, com.google.spanner.executor.v1.AdminResult.Builder, com.google.spanner.executor.v1.AdminResultOrBuilder> - getAdminResultFieldBuilder() { + internalGetAdminResultFieldBuilder() { if (adminResultBuilder_ == null) { adminResultBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.AdminResult, com.google.spanner.executor.v1.AdminResult.Builder, com.google.spanner.executor.v1.AdminResultOrBuilder>( @@ -2833,6 +2985,7 @@ private void ensureDmlRowsModifiedIsMutable() { } bitField0_ |= 0x00000100; } + /** * * @@ -2849,6 +3002,7 @@ public java.util.List getDmlRowsModifiedList() { dmlRowsModified_.makeImmutable(); return dmlRowsModified_; } + /** * * @@ -2864,6 +3018,7 @@ public java.util.List getDmlRowsModifiedList() { public int getDmlRowsModifiedCount() { return dmlRowsModified_.size(); } + /** * * @@ -2880,6 +3035,7 @@ public int getDmlRowsModifiedCount() { public long getDmlRowsModified(int index) { return dmlRowsModified_.getLong(index); } + /** * * @@ -2902,6 +3058,7 @@ public Builder setDmlRowsModified(int index, long value) { onChanged(); return this; } + /** * * @@ -2923,6 +3080,7 @@ public Builder addDmlRowsModified(long value) { onChanged(); return this; } + /** * * @@ -2943,6 +3101,7 @@ public Builder addAllDmlRowsModified(java.lang.Iterable @@ -2998,6 +3157,7 @@ private void ensureChangeStreamRecordsIsMutable() { return changeStreamRecordsBuilder_.getMessageList(); } } + /** * * @@ -3015,6 +3175,7 @@ public int getChangeStreamRecordsCount() { return changeStreamRecordsBuilder_.getCount(); } } + /** * * @@ -3032,6 +3193,7 @@ public com.google.spanner.executor.v1.ChangeStreamRecord getChangeStreamRecords( return changeStreamRecordsBuilder_.getMessage(index); } } + /** * * @@ -3056,6 +3218,7 @@ public Builder setChangeStreamRecords( } return this; } + /** * * @@ -3077,6 +3240,7 @@ public Builder setChangeStreamRecords( } return this; } + /** * * @@ -3100,6 +3264,7 @@ public Builder addChangeStreamRecords(com.google.spanner.executor.v1.ChangeStrea } return this; } + /** * * @@ -3124,6 +3289,7 @@ public Builder addChangeStreamRecords( } return this; } + /** * * @@ -3145,6 +3311,7 @@ public Builder addChangeStreamRecords( } return this; } + /** * * @@ -3166,6 +3333,7 @@ public Builder addChangeStreamRecords( } return this; } + /** * * @@ -3187,6 +3355,7 @@ public Builder addAllChangeStreamRecords( } return this; } + /** * * @@ -3207,6 +3376,7 @@ public Builder clearChangeStreamRecords() { } return this; } + /** * * @@ -3227,6 +3397,7 @@ public Builder removeChangeStreamRecords(int index) { } return this; } + /** * * @@ -3239,8 +3410,9 @@ public Builder removeChangeStreamRecords(int index) { */ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder getChangeStreamRecordsBuilder( int index) { - return getChangeStreamRecordsFieldBuilder().getBuilder(index); + return internalGetChangeStreamRecordsFieldBuilder().getBuilder(index); } + /** * * @@ -3259,6 +3431,7 @@ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder getChangeStream return changeStreamRecordsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3277,6 +3450,7 @@ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder getChangeStream return java.util.Collections.unmodifiableList(changeStreamRecords_); } } + /** * * @@ -3289,9 +3463,10 @@ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder getChangeStream */ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder addChangeStreamRecordsBuilder() { - return getChangeStreamRecordsFieldBuilder() + return internalGetChangeStreamRecordsFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ChangeStreamRecord.getDefaultInstance()); } + /** * * @@ -3304,10 +3479,11 @@ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder getChangeStream */ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder addChangeStreamRecordsBuilder( int index) { - return getChangeStreamRecordsFieldBuilder() + return internalGetChangeStreamRecordsFieldBuilder() .addBuilder( index, com.google.spanner.executor.v1.ChangeStreamRecord.getDefaultInstance()); } + /** * * @@ -3320,17 +3496,17 @@ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder addChangeStream */ public java.util.List getChangeStreamRecordsBuilderList() { - return getChangeStreamRecordsFieldBuilder().getBuilderList(); + return internalGetChangeStreamRecordsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ChangeStreamRecord, com.google.spanner.executor.v1.ChangeStreamRecord.Builder, com.google.spanner.executor.v1.ChangeStreamRecordOrBuilder> - getChangeStreamRecordsFieldBuilder() { + internalGetChangeStreamRecordsFieldBuilder() { if (changeStreamRecordsBuilder_ == null) { changeStreamRecordsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ChangeStreamRecord, com.google.spanner.executor.v1.ChangeStreamRecord.Builder, com.google.spanner.executor.v1.ChangeStreamRecordOrBuilder>( @@ -3343,15 +3519,80 @@ public com.google.spanner.executor.v1.ChangeStreamRecord.Builder addChangeStream return changeStreamRecordsBuilder_; } + private long snapshotIsolationTxnReadTimestamp_; + + /** + * + * + *
                                +     * If not zero, it indicates the read timestamp to use for validating
                                +     * the SnapshotIsolation transaction.
                                +     * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @return Whether the snapshotIsolationTxnReadTimestamp field is set. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean hasSnapshotIsolationTxnReadTimestamp() { + return ((bitField0_ & 0x00000400) != 0); } + /** + * + * + *
                                +     * If not zero, it indicates the read timestamp to use for validating
                                +     * the SnapshotIsolation transaction.
                                +     * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @return The snapshotIsolationTxnReadTimestamp. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public long getSnapshotIsolationTxnReadTimestamp() { + return snapshotIsolationTxnReadTimestamp_; + } + + /** + * + * + *
                                +     * If not zero, it indicates the read timestamp to use for validating
                                +     * the SnapshotIsolation transaction.
                                +     * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @param value The snapshotIsolationTxnReadTimestamp to set. + * @return This builder for chaining. + */ + public Builder setSnapshotIsolationTxnReadTimestamp(long value) { + + snapshotIsolationTxnReadTimestamp_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If not zero, it indicates the read timestamp to use for validating
                                +     * the SnapshotIsolation transaction.
                                +     * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @return This builder for chaining. + */ + public Builder clearSnapshotIsolationTxnReadTimestamp() { + bitField0_ = (bitField0_ & ~0x00000400); + snapshotIsolationTxnReadTimestamp_ = 0L; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.SpannerActionOutcome) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java index d4cf3918de7..f4670e974cc 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface SpannerActionOutcomeOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.SpannerActionOutcome) @@ -37,6 +39,7 @@ public interface SpannerActionOutcomeOrBuilder * @return Whether the status field is set. */ boolean hasStatus(); + /** * * @@ -50,6 +53,7 @@ public interface SpannerActionOutcomeOrBuilder * @return The status. */ com.google.rpc.Status getStatus(); + /** * * @@ -74,6 +78,7 @@ public interface SpannerActionOutcomeOrBuilder * @return Whether the commitTime field is set. */ boolean hasCommitTime(); + /** * * @@ -86,6 +91,7 @@ public interface SpannerActionOutcomeOrBuilder * @return The commitTime. */ com.google.protobuf.Timestamp getCommitTime(); + /** * * @@ -110,6 +116,7 @@ public interface SpannerActionOutcomeOrBuilder * @return Whether the readResult field is set. */ boolean hasReadResult(); + /** * * @@ -123,6 +130,7 @@ public interface SpannerActionOutcomeOrBuilder * @return The readResult. */ com.google.spanner.executor.v1.ReadResult getReadResult(); + /** * * @@ -148,6 +156,7 @@ public interface SpannerActionOutcomeOrBuilder * @return Whether the queryResult field is set. */ boolean hasQueryResult(); + /** * * @@ -161,6 +170,7 @@ public interface SpannerActionOutcomeOrBuilder * @return The queryResult. */ com.google.spanner.executor.v1.QueryResult getQueryResult(); + /** * * @@ -188,6 +198,7 @@ public interface SpannerActionOutcomeOrBuilder * @return Whether the transactionRestarted field is set. */ boolean hasTransactionRestarted(); + /** * * @@ -217,6 +228,7 @@ public interface SpannerActionOutcomeOrBuilder * @return Whether the batchTxnId field is set. */ boolean hasBatchTxnId(); + /** * * @@ -242,6 +254,7 @@ public interface SpannerActionOutcomeOrBuilder * repeated .google.spanner.executor.v1.BatchPartition db_partition = 7; */ java.util.List getDbPartitionList(); + /** * * @@ -253,6 +266,7 @@ public interface SpannerActionOutcomeOrBuilder * repeated .google.spanner.executor.v1.BatchPartition db_partition = 7; */ com.google.spanner.executor.v1.BatchPartition getDbPartition(int index); + /** * * @@ -264,6 +278,7 @@ public interface SpannerActionOutcomeOrBuilder * repeated .google.spanner.executor.v1.BatchPartition db_partition = 7; */ int getDbPartitionCount(); + /** * * @@ -276,6 +291,7 @@ public interface SpannerActionOutcomeOrBuilder */ java.util.List getDbPartitionOrBuilderList(); + /** * * @@ -300,6 +316,7 @@ public interface SpannerActionOutcomeOrBuilder * @return Whether the adminResult field is set. */ boolean hasAdminResult(); + /** * * @@ -312,6 +329,7 @@ public interface SpannerActionOutcomeOrBuilder * @return The adminResult. */ com.google.spanner.executor.v1.AdminResult getAdminResult(); + /** * * @@ -336,6 +354,7 @@ public interface SpannerActionOutcomeOrBuilder * @return A list containing the dmlRowsModified. */ java.util.List getDmlRowsModifiedList(); + /** * * @@ -349,6 +368,7 @@ public interface SpannerActionOutcomeOrBuilder * @return The count of dmlRowsModified. */ int getDmlRowsModifiedCount(); + /** * * @@ -375,6 +395,7 @@ public interface SpannerActionOutcomeOrBuilder * */ java.util.List getChangeStreamRecordsList(); + /** * * @@ -386,6 +407,7 @@ public interface SpannerActionOutcomeOrBuilder * */ com.google.spanner.executor.v1.ChangeStreamRecord getChangeStreamRecords(int index); + /** * * @@ -397,6 +419,7 @@ public interface SpannerActionOutcomeOrBuilder * */ int getChangeStreamRecordsCount(); + /** * * @@ -409,6 +432,7 @@ public interface SpannerActionOutcomeOrBuilder */ java.util.List getChangeStreamRecordsOrBuilderList(); + /** * * @@ -421,4 +445,32 @@ public interface SpannerActionOutcomeOrBuilder */ com.google.spanner.executor.v1.ChangeStreamRecordOrBuilder getChangeStreamRecordsOrBuilder( int index); + + /** + * + * + *
                                +   * If not zero, it indicates the read timestamp to use for validating
                                +   * the SnapshotIsolation transaction.
                                +   * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @return Whether the snapshotIsolationTxnReadTimestamp field is set. + */ + boolean hasSnapshotIsolationTxnReadTimestamp(); + + /** + * + * + *
                                +   * If not zero, it indicates the read timestamp to use for validating
                                +   * the SnapshotIsolation transaction.
                                +   * 
                                + * + * optional int64 snapshot_isolation_txn_read_timestamp = 11; + * + * @return The snapshotIsolationTxnReadTimestamp. + */ + long getSnapshotIsolationTxnReadTimestamp(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java index 60eea387403..8234124e88b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.executor.v1.SpannerAsyncActionRequest} */ -public final class SpannerAsyncActionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class SpannerAsyncActionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.SpannerAsyncActionRequest) SpannerAsyncActionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerAsyncActionRequest"); + } + // Use SpannerAsyncActionRequest.newBuilder() to construct. - private SpannerAsyncActionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private SpannerAsyncActionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private SpannerAsyncActionRequest() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SpannerAsyncActionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_fieldAccessorTable @@ -64,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int ACTION_ID_FIELD_NUMBER = 1; private int actionId_ = 0; + /** * * @@ -82,6 +90,7 @@ public int getActionId() { public static final int ACTION_FIELD_NUMBER = 2; private com.google.spanner.executor.v1.SpannerAction action_; + /** * * @@ -97,6 +106,7 @@ public int getActionId() { public boolean hasAction() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -114,6 +124,7 @@ public com.google.spanner.executor.v1.SpannerAction getAction() { ? com.google.spanner.executor.v1.SpannerAction.getDefaultInstance() : action_; } + /** * * @@ -245,38 +256,38 @@ public static com.google.spanner.executor.v1.SpannerAsyncActionRequest parseFrom public static com.google.spanner.executor.v1.SpannerAsyncActionRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAsyncActionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerAsyncActionRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAsyncActionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerAsyncActionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAsyncActionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -300,10 +311,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -313,7 +325,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.SpannerAsyncActionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.SpannerAsyncActionRequest) com.google.spanner.executor.v1.SpannerAsyncActionRequestOrBuilder { @@ -323,7 +335,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAsyncActionRequest_fieldAccessorTable @@ -337,14 +349,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getActionFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetActionFieldBuilder(); } } @@ -405,39 +417,6 @@ private void buildPartial0(com.google.spanner.executor.v1.SpannerAsyncActionRequ result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.SpannerAsyncActionRequest) { @@ -491,7 +470,7 @@ public Builder mergeFrom( } // case 8 case 18: { - input.readMessage(getActionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetActionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -515,6 +494,7 @@ public Builder mergeFrom( private int bitField0_; private int actionId_; + /** * * @@ -530,6 +510,7 @@ public Builder mergeFrom( public int getActionId() { return actionId_; } + /** * * @@ -549,6 +530,7 @@ public Builder setActionId(int value) { onChanged(); return this; } + /** * * @@ -568,11 +550,12 @@ public Builder clearActionId() { } private com.google.spanner.executor.v1.SpannerAction action_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerAction, com.google.spanner.executor.v1.SpannerAction.Builder, com.google.spanner.executor.v1.SpannerActionOrBuilder> actionBuilder_; + /** * * @@ -587,6 +570,7 @@ public Builder clearActionId() { public boolean hasAction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -607,6 +591,7 @@ public com.google.spanner.executor.v1.SpannerAction getAction() { return actionBuilder_.getMessage(); } } + /** * * @@ -629,6 +614,7 @@ public Builder setAction(com.google.spanner.executor.v1.SpannerAction value) { onChanged(); return this; } + /** * * @@ -648,6 +634,7 @@ public Builder setAction(com.google.spanner.executor.v1.SpannerAction.Builder bu onChanged(); return this; } + /** * * @@ -675,6 +662,7 @@ public Builder mergeAction(com.google.spanner.executor.v1.SpannerAction value) { } return this; } + /** * * @@ -694,6 +682,7 @@ public Builder clearAction() { onChanged(); return this; } + /** * * @@ -706,8 +695,9 @@ public Builder clearAction() { public com.google.spanner.executor.v1.SpannerAction.Builder getActionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getActionFieldBuilder().getBuilder(); + return internalGetActionFieldBuilder().getBuilder(); } + /** * * @@ -726,6 +716,7 @@ public com.google.spanner.executor.v1.SpannerActionOrBuilder getActionOrBuilder( : action_; } } + /** * * @@ -735,14 +726,14 @@ public com.google.spanner.executor.v1.SpannerActionOrBuilder getActionOrBuilder( * * .google.spanner.executor.v1.SpannerAction action = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerAction, com.google.spanner.executor.v1.SpannerAction.Builder, com.google.spanner.executor.v1.SpannerActionOrBuilder> - getActionFieldBuilder() { + internalGetActionFieldBuilder() { if (actionBuilder_ == null) { actionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerAction, com.google.spanner.executor.v1.SpannerAction.Builder, com.google.spanner.executor.v1.SpannerActionOrBuilder>( @@ -752,17 +743,6 @@ public com.google.spanner.executor.v1.SpannerActionOrBuilder getActionOrBuilder( return actionBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.SpannerAsyncActionRequest) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java index 48ba7dbab00..2def902b47f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface SpannerAsyncActionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.SpannerAsyncActionRequest) @@ -49,6 +51,7 @@ public interface SpannerAsyncActionRequestOrBuilder * @return Whether the action field is set. */ boolean hasAction(); + /** * * @@ -61,6 +64,7 @@ public interface SpannerAsyncActionRequestOrBuilder * @return The action. */ com.google.spanner.executor.v1.SpannerAction getAction(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java index 3a76404589b..aff91a1e20e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.executor.v1.SpannerAsyncActionResponse} */ -public final class SpannerAsyncActionResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class SpannerAsyncActionResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.SpannerAsyncActionResponse) SpannerAsyncActionResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerAsyncActionResponse"); + } + // Use SpannerAsyncActionResponse.newBuilder() to construct. - private SpannerAsyncActionResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private SpannerAsyncActionResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private SpannerAsyncActionResponse() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SpannerAsyncActionResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_fieldAccessorTable @@ -64,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int ACTION_ID_FIELD_NUMBER = 1; private int actionId_ = 0; + /** * * @@ -82,6 +90,7 @@ public int getActionId() { public static final int OUTCOME_FIELD_NUMBER = 2; private com.google.spanner.executor.v1.SpannerActionOutcome outcome_; + /** * * @@ -98,6 +107,7 @@ public int getActionId() { public boolean hasOutcome() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -116,6 +126,7 @@ public com.google.spanner.executor.v1.SpannerActionOutcome getOutcome() { ? com.google.spanner.executor.v1.SpannerActionOutcome.getDefaultInstance() : outcome_; } + /** * * @@ -248,38 +259,38 @@ public static com.google.spanner.executor.v1.SpannerAsyncActionResponse parseFro public static com.google.spanner.executor.v1.SpannerAsyncActionResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAsyncActionResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerAsyncActionResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAsyncActionResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerAsyncActionResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerAsyncActionResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -303,10 +314,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -316,7 +328,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.SpannerAsyncActionResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.SpannerAsyncActionResponse) com.google.spanner.executor.v1.SpannerAsyncActionResponseOrBuilder { @@ -326,7 +338,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerAsyncActionResponse_fieldAccessorTable @@ -340,14 +352,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getOutcomeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetOutcomeFieldBuilder(); } } @@ -408,39 +420,6 @@ private void buildPartial0(com.google.spanner.executor.v1.SpannerAsyncActionResp result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.SpannerAsyncActionResponse) { @@ -494,7 +473,7 @@ public Builder mergeFrom( } // case 8 case 18: { - input.readMessage(getOutcomeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetOutcomeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -518,6 +497,7 @@ public Builder mergeFrom( private int bitField0_; private int actionId_; + /** * * @@ -533,6 +513,7 @@ public Builder mergeFrom( public int getActionId() { return actionId_; } + /** * * @@ -552,6 +533,7 @@ public Builder setActionId(int value) { onChanged(); return this; } + /** * * @@ -571,11 +553,12 @@ public Builder clearActionId() { } private com.google.spanner.executor.v1.SpannerActionOutcome outcome_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerActionOutcome, com.google.spanner.executor.v1.SpannerActionOutcome.Builder, com.google.spanner.executor.v1.SpannerActionOutcomeOrBuilder> outcomeBuilder_; + /** * * @@ -591,6 +574,7 @@ public Builder clearActionId() { public boolean hasOutcome() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -612,6 +596,7 @@ public com.google.spanner.executor.v1.SpannerActionOutcome getOutcome() { return outcomeBuilder_.getMessage(); } } + /** * * @@ -635,6 +620,7 @@ public Builder setOutcome(com.google.spanner.executor.v1.SpannerActionOutcome va onChanged(); return this; } + /** * * @@ -656,6 +642,7 @@ public Builder setOutcome( onChanged(); return this; } + /** * * @@ -685,6 +672,7 @@ public Builder mergeOutcome(com.google.spanner.executor.v1.SpannerActionOutcome } return this; } + /** * * @@ -705,6 +693,7 @@ public Builder clearOutcome() { onChanged(); return this; } + /** * * @@ -718,8 +707,9 @@ public Builder clearOutcome() { public com.google.spanner.executor.v1.SpannerActionOutcome.Builder getOutcomeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getOutcomeFieldBuilder().getBuilder(); + return internalGetOutcomeFieldBuilder().getBuilder(); } + /** * * @@ -739,6 +729,7 @@ public com.google.spanner.executor.v1.SpannerActionOutcomeOrBuilder getOutcomeOr : outcome_; } } + /** * * @@ -749,14 +740,14 @@ public com.google.spanner.executor.v1.SpannerActionOutcomeOrBuilder getOutcomeOr * * .google.spanner.executor.v1.SpannerActionOutcome outcome = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerActionOutcome, com.google.spanner.executor.v1.SpannerActionOutcome.Builder, com.google.spanner.executor.v1.SpannerActionOutcomeOrBuilder> - getOutcomeFieldBuilder() { + internalGetOutcomeFieldBuilder() { if (outcomeBuilder_ == null) { outcomeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SpannerActionOutcome, com.google.spanner.executor.v1.SpannerActionOutcome.Builder, com.google.spanner.executor.v1.SpannerActionOutcomeOrBuilder>( @@ -766,17 +757,6 @@ public com.google.spanner.executor.v1.SpannerActionOutcomeOrBuilder getOutcomeOr return outcomeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.SpannerAsyncActionResponse) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java index fca831e6295..b65ccd6e3cb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface SpannerAsyncActionResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.SpannerAsyncActionResponse) @@ -50,6 +52,7 @@ public interface SpannerAsyncActionResponseOrBuilder * @return Whether the outcome field is set. */ boolean hasOutcome(); + /** * * @@ -63,6 +66,7 @@ public interface SpannerAsyncActionResponseOrBuilder * @return The outcome. */ com.google.spanner.executor.v1.SpannerActionOutcome getOutcome(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java index 9bcea7611a1..26c5fb160bf 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.executor.v1.SpannerOptions} */ -public final class SpannerOptions extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class SpannerOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.SpannerOptions) SpannerOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerOptions"); + } + // Use SpannerOptions.newBuilder() to construct. - private SpannerOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private SpannerOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private SpannerOptions() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SpannerOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerOptions_fieldAccessorTable @@ -64,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int SESSION_POOL_OPTIONS_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.SessionPoolOptions sessionPoolOptions_; + /** * * @@ -79,6 +87,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasSessionPoolOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -96,6 +105,7 @@ public com.google.spanner.executor.v1.SessionPoolOptions getSessionPoolOptions() ? com.google.spanner.executor.v1.SessionPoolOptions.getDefaultInstance() : sessionPoolOptions_; } + /** * * @@ -219,38 +229,38 @@ public static com.google.spanner.executor.v1.SpannerOptions parseFrom( public static com.google.spanner.executor.v1.SpannerOptions parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerOptions parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.SpannerOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.SpannerOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -273,10 +283,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -286,7 +297,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.SpannerOptions} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.SpannerOptions) com.google.spanner.executor.v1.SpannerOptionsOrBuilder { @@ -296,7 +307,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_SpannerOptions_fieldAccessorTable @@ -310,14 +321,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getSessionPoolOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSessionPoolOptionsFieldBuilder(); } } @@ -377,39 +388,6 @@ private void buildPartial0(com.google.spanner.executor.v1.SpannerOptions result) result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.SpannerOptions) { @@ -454,7 +432,7 @@ public Builder mergeFrom( case 10: { input.readMessage( - getSessionPoolOptionsFieldBuilder().getBuilder(), extensionRegistry); + internalGetSessionPoolOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -478,11 +456,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.SessionPoolOptions sessionPoolOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SessionPoolOptions, com.google.spanner.executor.v1.SessionPoolOptions.Builder, com.google.spanner.executor.v1.SessionPoolOptionsOrBuilder> sessionPoolOptionsBuilder_; + /** * * @@ -497,6 +476,7 @@ public Builder mergeFrom( public boolean hasSessionPoolOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -517,6 +497,7 @@ public com.google.spanner.executor.v1.SessionPoolOptions getSessionPoolOptions() return sessionPoolOptionsBuilder_.getMessage(); } } + /** * * @@ -539,6 +520,7 @@ public Builder setSessionPoolOptions(com.google.spanner.executor.v1.SessionPoolO onChanged(); return this; } + /** * * @@ -559,6 +541,7 @@ public Builder setSessionPoolOptions( onChanged(); return this; } + /** * * @@ -588,6 +571,7 @@ public Builder mergeSessionPoolOptions( } return this; } + /** * * @@ -607,6 +591,7 @@ public Builder clearSessionPoolOptions() { onChanged(); return this; } + /** * * @@ -620,8 +605,9 @@ public Builder clearSessionPoolOptions() { getSessionPoolOptionsBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getSessionPoolOptionsFieldBuilder().getBuilder(); + return internalGetSessionPoolOptionsFieldBuilder().getBuilder(); } + /** * * @@ -641,6 +627,7 @@ public Builder clearSessionPoolOptions() { : sessionPoolOptions_; } } + /** * * @@ -650,14 +637,14 @@ public Builder clearSessionPoolOptions() { * * .google.spanner.executor.v1.SessionPoolOptions session_pool_options = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SessionPoolOptions, com.google.spanner.executor.v1.SessionPoolOptions.Builder, com.google.spanner.executor.v1.SessionPoolOptionsOrBuilder> - getSessionPoolOptionsFieldBuilder() { + internalGetSessionPoolOptionsFieldBuilder() { if (sessionPoolOptionsBuilder_ == null) { sessionPoolOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.SessionPoolOptions, com.google.spanner.executor.v1.SessionPoolOptions.Builder, com.google.spanner.executor.v1.SessionPoolOptionsOrBuilder>( @@ -667,17 +654,6 @@ public Builder clearSessionPoolOptions() { return sessionPoolOptionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.SpannerOptions) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java index 6aefeac531c..724808e7355 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface SpannerOptionsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.SpannerOptions) @@ -36,6 +38,7 @@ public interface SpannerOptionsOrBuilder * @return Whether the sessionPoolOptions field is set. */ boolean hasSessionPoolOptions(); + /** * * @@ -48,6 +51,7 @@ public interface SpannerOptionsOrBuilder * @return The sessionPoolOptions. */ com.google.spanner.executor.v1.SessionPoolOptions getSessionPoolOptions(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java index ac9b62c5dab..da00551fc00 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -59,13 +60,25 @@ * * Protobuf type {@code google.spanner.executor.v1.StartBatchTransactionAction} */ -public final class StartBatchTransactionAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class StartBatchTransactionAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.StartBatchTransactionAction) StartBatchTransactionActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "StartBatchTransactionAction"); + } + // Use StartBatchTransactionAction.newBuilder() to construct. - private StartBatchTransactionAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private StartBatchTransactionAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -73,19 +86,13 @@ private StartBatchTransactionAction() { cloudDatabaseRole_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new StartBatchTransactionAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_StartBatchTransactionAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_StartBatchTransactionAction_fieldAccessorTable @@ -111,6 +118,7 @@ public enum ParamCase private ParamCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -144,6 +152,7 @@ public ParamCase getParamCase() { } public static final int BATCH_TXN_TIME_FIELD_NUMBER = 1; + /** * * @@ -159,6 +168,7 @@ public ParamCase getParamCase() { public boolean hasBatchTxnTime() { return paramCase_ == 1; } + /** * * @@ -177,6 +187,7 @@ public com.google.protobuf.Timestamp getBatchTxnTime() { } return com.google.protobuf.Timestamp.getDefaultInstance(); } + /** * * @@ -195,6 +206,7 @@ public com.google.protobuf.TimestampOrBuilder getBatchTxnTimeOrBuilder() { } public static final int TID_FIELD_NUMBER = 2; + /** * * @@ -212,6 +224,7 @@ public com.google.protobuf.TimestampOrBuilder getBatchTxnTimeOrBuilder() { public boolean hasTid() { return paramCase_ == 2; } + /** * * @@ -237,6 +250,7 @@ public com.google.protobuf.ByteString getTid() { @SuppressWarnings("serial") private volatile java.lang.Object cloudDatabaseRole_ = ""; + /** * * @@ -262,6 +276,7 @@ public java.lang.String getCloudDatabaseRole() { return s; } } + /** * * @@ -308,8 +323,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (paramCase_ == 2) { output.writeBytes(2, (com.google.protobuf.ByteString) param_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cloudDatabaseRole_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, cloudDatabaseRole_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(cloudDatabaseRole_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, cloudDatabaseRole_); } getUnknownFields().writeTo(output); } @@ -330,8 +345,8 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeBytesSize( 2, (com.google.protobuf.ByteString) param_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cloudDatabaseRole_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, cloudDatabaseRole_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(cloudDatabaseRole_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, cloudDatabaseRole_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -428,38 +443,38 @@ public static com.google.spanner.executor.v1.StartBatchTransactionAction parseFr public static com.google.spanner.executor.v1.StartBatchTransactionAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.StartBatchTransactionAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.StartBatchTransactionAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.StartBatchTransactionAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.StartBatchTransactionAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.StartBatchTransactionAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -483,10 +498,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -527,7 +543,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.StartBatchTransactionAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.StartBatchTransactionAction) com.google.spanner.executor.v1.StartBatchTransactionActionOrBuilder { @@ -537,7 +553,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_StartBatchTransactionAction_fieldAccessorTable @@ -549,7 +565,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.StartBatchTransactionAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -614,39 +630,6 @@ private void buildPartialOneofs( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.StartBatchTransactionAction) { @@ -709,7 +692,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getBatchTxnTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetBatchTxnTimeFieldBuilder().getBuilder(), extensionRegistry); paramCase_ = 1; break; } // case 10 @@ -758,11 +742,12 @@ public Builder clearParam() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> batchTxnTimeBuilder_; + /** * * @@ -778,6 +763,7 @@ public Builder clearParam() { public boolean hasBatchTxnTime() { return paramCase_ == 1; } + /** * * @@ -803,6 +789,7 @@ public com.google.protobuf.Timestamp getBatchTxnTime() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -825,6 +812,7 @@ public Builder setBatchTxnTime(com.google.protobuf.Timestamp value) { paramCase_ = 1; return this; } + /** * * @@ -844,6 +832,7 @@ public Builder setBatchTxnTime(com.google.protobuf.Timestamp.Builder builderForV paramCase_ = 1; return this; } + /** * * @@ -874,6 +863,7 @@ public Builder mergeBatchTxnTime(com.google.protobuf.Timestamp value) { paramCase_ = 1; return this; } + /** * * @@ -899,6 +889,7 @@ public Builder clearBatchTxnTime() { } return this; } + /** * * @@ -909,8 +900,9 @@ public Builder clearBatchTxnTime() { * .google.protobuf.Timestamp batch_txn_time = 1; */ public com.google.protobuf.Timestamp.Builder getBatchTxnTimeBuilder() { - return getBatchTxnTimeFieldBuilder().getBuilder(); + return internalGetBatchTxnTimeFieldBuilder().getBuilder(); } + /** * * @@ -931,6 +923,7 @@ public com.google.protobuf.TimestampOrBuilder getBatchTxnTimeOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -940,17 +933,17 @@ public com.google.protobuf.TimestampOrBuilder getBatchTxnTimeOrBuilder() { * * .google.protobuf.Timestamp batch_txn_time = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getBatchTxnTimeFieldBuilder() { + internalGetBatchTxnTimeFieldBuilder() { if (batchTxnTimeBuilder_ == null) { if (!(paramCase_ == 1)) { param_ = com.google.protobuf.Timestamp.getDefaultInstance(); } batchTxnTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -978,6 +971,7 @@ public com.google.protobuf.TimestampOrBuilder getBatchTxnTimeOrBuilder() { public boolean hasTid() { return paramCase_ == 2; } + /** * * @@ -997,6 +991,7 @@ public com.google.protobuf.ByteString getTid() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -1020,6 +1015,7 @@ public Builder setTid(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1043,6 +1039,7 @@ public Builder clearTid() { } private java.lang.Object cloudDatabaseRole_ = ""; + /** * * @@ -1067,6 +1064,7 @@ public java.lang.String getCloudDatabaseRole() { return (java.lang.String) ref; } } + /** * * @@ -1091,6 +1089,7 @@ public com.google.protobuf.ByteString getCloudDatabaseRoleBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1114,6 +1113,7 @@ public Builder setCloudDatabaseRole(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1133,6 +1133,7 @@ public Builder clearCloudDatabaseRole() { onChanged(); return this; } + /** * * @@ -1158,17 +1159,6 @@ public Builder setCloudDatabaseRoleBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.StartBatchTransactionAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java index ef9cea72b07..01187e03acb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface StartBatchTransactionActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.StartBatchTransactionAction) @@ -36,6 +38,7 @@ public interface StartBatchTransactionActionOrBuilder * @return Whether the batchTxnTime field is set. */ boolean hasBatchTxnTime(); + /** * * @@ -48,6 +51,7 @@ public interface StartBatchTransactionActionOrBuilder * @return The batchTxnTime. */ com.google.protobuf.Timestamp getBatchTxnTime(); + /** * * @@ -73,6 +77,7 @@ public interface StartBatchTransactionActionOrBuilder * @return Whether the tid field is set. */ boolean hasTid(); + /** * * @@ -102,6 +107,7 @@ public interface StartBatchTransactionActionOrBuilder * @return The cloudDatabaseRole. */ java.lang.String getCloudDatabaseRole(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java index 0664bee8b70..3cce17f84b5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.StartTransactionAction} */ -public final class StartTransactionAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class StartTransactionAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.StartTransactionAction) StartTransactionActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "StartTransactionAction"); + } + // Use StartTransactionAction.newBuilder() to construct. - private StartTransactionAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private StartTransactionAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private StartTransactionAction() { transactionSeed_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new StartTransactionAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_StartTransactionAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_StartTransactionAction_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int CONCURRENCY_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.Concurrency concurrency_; + /** * * @@ -83,6 +91,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasConcurrency() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -101,6 +110,7 @@ public com.google.spanner.executor.v1.Concurrency getConcurrency() { ? com.google.spanner.executor.v1.Concurrency.getDefaultInstance() : concurrency_; } + /** * * @@ -122,6 +132,7 @@ public com.google.spanner.executor.v1.ConcurrencyOrBuilder getConcurrencyOrBuild @SuppressWarnings("serial") private java.util.List table_; + /** * * @@ -136,6 +147,7 @@ public com.google.spanner.executor.v1.ConcurrencyOrBuilder getConcurrencyOrBuild public java.util.List getTableList() { return table_; } + /** * * @@ -151,6 +163,7 @@ public java.util.List getTableList getTableOrBuilderList() { return table_; } + /** * * @@ -165,6 +178,7 @@ public java.util.List getTableList public int getTableCount() { return table_.size(); } + /** * * @@ -179,6 +193,7 @@ public int getTableCount() { public com.google.spanner.executor.v1.TableMetadata getTable(int index) { return table_.get(index); } + /** * * @@ -198,6 +213,7 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i @SuppressWarnings("serial") private volatile java.lang.Object transactionSeed_ = ""; + /** * * @@ -222,6 +238,7 @@ public java.lang.String getTransactionSeed() { return s; } } + /** * * @@ -249,11 +266,13 @@ public com.google.protobuf.ByteString getTransactionSeedBytes() { public static final int EXECUTION_OPTIONS_FIELD_NUMBER = 4; private com.google.spanner.executor.v1.TransactionExecutionOptions executionOptions_; + /** * * *
                                -   * Execution options (e.g., whether transaction is opaque, optimistic).
                                +   * Execution options (e.g., whether transaction is opaque, optimistic,
                                +   * excluded from change streams).
                                    * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -265,11 +284,13 @@ public com.google.protobuf.ByteString getTransactionSeedBytes() { public boolean hasExecutionOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -   * Execution options (e.g., whether transaction is opaque, optimistic).
                                +   * Execution options (e.g., whether transaction is opaque, optimistic,
                                +   * excluded from change streams).
                                    * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -283,11 +304,13 @@ public com.google.spanner.executor.v1.TransactionExecutionOptions getExecutionOp ? com.google.spanner.executor.v1.TransactionExecutionOptions.getDefaultInstance() : executionOptions_; } + /** * * *
                                -   * Execution options (e.g., whether transaction is opaque, optimistic).
                                +   * Execution options (e.g., whether transaction is opaque, optimistic,
                                +   * excluded from change streams).
                                    * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -321,8 +344,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < table_.size(); i++) { output.writeMessage(2, table_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionSeed_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, transactionSeed_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionSeed_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, transactionSeed_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(4, getExecutionOptions()); @@ -342,8 +365,8 @@ public int getSerializedSize() { for (int i = 0; i < table_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, table_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionSeed_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, transactionSeed_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionSeed_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, transactionSeed_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getExecutionOptions()); @@ -441,38 +464,38 @@ public static com.google.spanner.executor.v1.StartTransactionAction parseFrom( public static com.google.spanner.executor.v1.StartTransactionAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.StartTransactionAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.StartTransactionAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.StartTransactionAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.StartTransactionAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.StartTransactionAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -496,10 +519,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -509,7 +533,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.StartTransactionAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.StartTransactionAction) com.google.spanner.executor.v1.StartTransactionActionOrBuilder { @@ -519,7 +543,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_StartTransactionAction_fieldAccessorTable @@ -533,16 +557,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getConcurrencyFieldBuilder(); - getTableFieldBuilder(); - getExecutionOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetConcurrencyFieldBuilder(); + internalGetTableFieldBuilder(); + internalGetExecutionOptionsFieldBuilder(); } } @@ -635,39 +659,6 @@ private void buildPartial0(com.google.spanner.executor.v1.StartTransactionAction result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.StartTransactionAction) { @@ -703,8 +694,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.StartTransactionAction o table_ = other.table_; bitField0_ = (bitField0_ & ~0x00000002); tableBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getTableFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetTableFieldBuilder() : null; } else { tableBuilder_.addAllMessages(other.table_); @@ -747,7 +738,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getConcurrencyFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetConcurrencyFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -773,7 +765,7 @@ public Builder mergeFrom( case 34: { input.readMessage( - getExecutionOptionsFieldBuilder().getBuilder(), extensionRegistry); + internalGetExecutionOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -797,11 +789,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.Concurrency concurrency_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.Concurrency, com.google.spanner.executor.v1.Concurrency.Builder, com.google.spanner.executor.v1.ConcurrencyOrBuilder> concurrencyBuilder_; + /** * * @@ -817,6 +810,7 @@ public Builder mergeFrom( public boolean hasConcurrency() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -838,6 +832,7 @@ public com.google.spanner.executor.v1.Concurrency getConcurrency() { return concurrencyBuilder_.getMessage(); } } + /** * * @@ -861,6 +856,7 @@ public Builder setConcurrency(com.google.spanner.executor.v1.Concurrency value) onChanged(); return this; } + /** * * @@ -882,6 +878,7 @@ public Builder setConcurrency( onChanged(); return this; } + /** * * @@ -910,6 +907,7 @@ public Builder mergeConcurrency(com.google.spanner.executor.v1.Concurrency value } return this; } + /** * * @@ -930,6 +928,7 @@ public Builder clearConcurrency() { onChanged(); return this; } + /** * * @@ -943,8 +942,9 @@ public Builder clearConcurrency() { public com.google.spanner.executor.v1.Concurrency.Builder getConcurrencyBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getConcurrencyFieldBuilder().getBuilder(); + return internalGetConcurrencyFieldBuilder().getBuilder(); } + /** * * @@ -964,6 +964,7 @@ public com.google.spanner.executor.v1.ConcurrencyOrBuilder getConcurrencyOrBuild : concurrency_; } } + /** * * @@ -974,14 +975,14 @@ public com.google.spanner.executor.v1.ConcurrencyOrBuilder getConcurrencyOrBuild * * optional .google.spanner.executor.v1.Concurrency concurrency = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.Concurrency, com.google.spanner.executor.v1.Concurrency.Builder, com.google.spanner.executor.v1.ConcurrencyOrBuilder> - getConcurrencyFieldBuilder() { + internalGetConcurrencyFieldBuilder() { if (concurrencyBuilder_ == null) { concurrencyBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.Concurrency, com.google.spanner.executor.v1.Concurrency.Builder, com.google.spanner.executor.v1.ConcurrencyOrBuilder>( @@ -1001,7 +1002,7 @@ private void ensureTableIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.TableMetadata, com.google.spanner.executor.v1.TableMetadata.Builder, com.google.spanner.executor.v1.TableMetadataOrBuilder> @@ -1024,6 +1025,7 @@ public java.util.List getTableList return tableBuilder_.getMessageList(); } } + /** * * @@ -1041,6 +1043,7 @@ public int getTableCount() { return tableBuilder_.getCount(); } } + /** * * @@ -1058,6 +1061,7 @@ public com.google.spanner.executor.v1.TableMetadata getTable(int index) { return tableBuilder_.getMessage(index); } } + /** * * @@ -1081,6 +1085,7 @@ public Builder setTable(int index, com.google.spanner.executor.v1.TableMetadata } return this; } + /** * * @@ -1102,6 +1107,7 @@ public Builder setTable( } return this; } + /** * * @@ -1125,6 +1131,7 @@ public Builder addTable(com.google.spanner.executor.v1.TableMetadata value) { } return this; } + /** * * @@ -1148,6 +1155,7 @@ public Builder addTable(int index, com.google.spanner.executor.v1.TableMetadata } return this; } + /** * * @@ -1168,6 +1176,7 @@ public Builder addTable(com.google.spanner.executor.v1.TableMetadata.Builder bui } return this; } + /** * * @@ -1189,6 +1198,7 @@ public Builder addTable( } return this; } + /** * * @@ -1210,6 +1220,7 @@ public Builder addAllTable( } return this; } + /** * * @@ -1230,6 +1241,7 @@ public Builder clearTable() { } return this; } + /** * * @@ -1250,6 +1262,7 @@ public Builder removeTable(int index) { } return this; } + /** * * @@ -1261,8 +1274,9 @@ public Builder removeTable(int index) { * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ public com.google.spanner.executor.v1.TableMetadata.Builder getTableBuilder(int index) { - return getTableFieldBuilder().getBuilder(index); + return internalGetTableFieldBuilder().getBuilder(index); } + /** * * @@ -1280,6 +1294,7 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i return tableBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1298,6 +1313,7 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i return java.util.Collections.unmodifiableList(table_); } } + /** * * @@ -1309,9 +1325,10 @@ public com.google.spanner.executor.v1.TableMetadataOrBuilder getTableOrBuilder(i * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder() { - return getTableFieldBuilder() + return internalGetTableFieldBuilder() .addBuilder(com.google.spanner.executor.v1.TableMetadata.getDefaultInstance()); } + /** * * @@ -1323,9 +1340,10 @@ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder() { * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder(int index) { - return getTableFieldBuilder() + return internalGetTableFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.TableMetadata.getDefaultInstance()); } + /** * * @@ -1338,17 +1356,17 @@ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder(int */ public java.util.List getTableBuilderList() { - return getTableFieldBuilder().getBuilderList(); + return internalGetTableFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.TableMetadata, com.google.spanner.executor.v1.TableMetadata.Builder, com.google.spanner.executor.v1.TableMetadataOrBuilder> - getTableFieldBuilder() { + internalGetTableFieldBuilder() { if (tableBuilder_ == null) { tableBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.TableMetadata, com.google.spanner.executor.v1.TableMetadata.Builder, com.google.spanner.executor.v1.TableMetadataOrBuilder>( @@ -1359,6 +1377,7 @@ public com.google.spanner.executor.v1.TableMetadata.Builder addTableBuilder(int } private java.lang.Object transactionSeed_ = ""; + /** * * @@ -1382,6 +1401,7 @@ public java.lang.String getTransactionSeed() { return (java.lang.String) ref; } } + /** * * @@ -1405,6 +1425,7 @@ public com.google.protobuf.ByteString getTransactionSeedBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1427,6 +1448,7 @@ public Builder setTransactionSeed(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1445,6 +1467,7 @@ public Builder clearTransactionSeed() { onChanged(); return this; } + /** * * @@ -1470,16 +1493,18 @@ public Builder setTransactionSeedBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.executor.v1.TransactionExecutionOptions executionOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.TransactionExecutionOptions, com.google.spanner.executor.v1.TransactionExecutionOptions.Builder, com.google.spanner.executor.v1.TransactionExecutionOptionsOrBuilder> executionOptionsBuilder_; + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1490,11 +1515,13 @@ public Builder setTransactionSeedBytes(com.google.protobuf.ByteString value) { public boolean hasExecutionOptions() { return ((bitField0_ & 0x00000008) != 0); } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1511,11 +1538,13 @@ public com.google.spanner.executor.v1.TransactionExecutionOptions getExecutionOp return executionOptionsBuilder_.getMessage(); } } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1535,11 +1564,13 @@ public Builder setExecutionOptions( onChanged(); return this; } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1556,11 +1587,13 @@ public Builder setExecutionOptions( onChanged(); return this; } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1587,11 +1620,13 @@ public Builder mergeExecutionOptions( } return this; } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1607,11 +1642,13 @@ public Builder clearExecutionOptions() { onChanged(); return this; } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1621,13 +1658,15 @@ public Builder clearExecutionOptions() { getExecutionOptionsBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getExecutionOptionsFieldBuilder().getBuilder(); + return internalGetExecutionOptionsFieldBuilder().getBuilder(); } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -1643,24 +1682,26 @@ public Builder clearExecutionOptions() { : executionOptions_; } } + /** * * *
                                -     * Execution options (e.g., whether transaction is opaque, optimistic).
                                +     * Execution options (e.g., whether transaction is opaque, optimistic,
                                +     * excluded from change streams).
                                      * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.TransactionExecutionOptions, com.google.spanner.executor.v1.TransactionExecutionOptions.Builder, com.google.spanner.executor.v1.TransactionExecutionOptionsOrBuilder> - getExecutionOptionsFieldBuilder() { + internalGetExecutionOptionsFieldBuilder() { if (executionOptionsBuilder_ == null) { executionOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.TransactionExecutionOptions, com.google.spanner.executor.v1.TransactionExecutionOptions.Builder, com.google.spanner.executor.v1.TransactionExecutionOptionsOrBuilder>( @@ -1670,17 +1711,6 @@ public Builder clearExecutionOptions() { return executionOptionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.StartTransactionAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java index 0bcb5020dcc..e82420ed5a9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface StartTransactionActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.StartTransactionAction) @@ -37,6 +39,7 @@ public interface StartTransactionActionOrBuilder * @return Whether the concurrency field is set. */ boolean hasConcurrency(); + /** * * @@ -50,6 +53,7 @@ public interface StartTransactionActionOrBuilder * @return The concurrency. */ com.google.spanner.executor.v1.Concurrency getConcurrency(); + /** * * @@ -73,6 +77,7 @@ public interface StartTransactionActionOrBuilder * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ java.util.List getTableList(); + /** * * @@ -84,6 +89,7 @@ public interface StartTransactionActionOrBuilder * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ com.google.spanner.executor.v1.TableMetadata getTable(int index); + /** * * @@ -95,6 +101,7 @@ public interface StartTransactionActionOrBuilder * repeated .google.spanner.executor.v1.TableMetadata table = 2; */ int getTableCount(); + /** * * @@ -107,6 +114,7 @@ public interface StartTransactionActionOrBuilder */ java.util.List getTableOrBuilderList(); + /** * * @@ -132,6 +140,7 @@ public interface StartTransactionActionOrBuilder * @return The transactionSeed. */ java.lang.String getTransactionSeed(); + /** * * @@ -150,7 +159,8 @@ public interface StartTransactionActionOrBuilder * * *
                                -   * Execution options (e.g., whether transaction is opaque, optimistic).
                                +   * Execution options (e.g., whether transaction is opaque, optimistic,
                                +   * excluded from change streams).
                                    * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -159,11 +169,13 @@ public interface StartTransactionActionOrBuilder * @return Whether the executionOptions field is set. */ boolean hasExecutionOptions(); + /** * * *
                                -   * Execution options (e.g., whether transaction is opaque, optimistic).
                                +   * Execution options (e.g., whether transaction is opaque, optimistic,
                                +   * excluded from change streams).
                                    * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; @@ -172,11 +184,13 @@ public interface StartTransactionActionOrBuilder * @return The executionOptions. */ com.google.spanner.executor.v1.TransactionExecutionOptions getExecutionOptions(); + /** * * *
                                -   * Execution options (e.g., whether transaction is opaque, optimistic).
                                +   * Execution options (e.g., whether transaction is opaque, optimistic,
                                +   * excluded from change streams).
                                    * 
                                * * optional .google.spanner.executor.v1.TransactionExecutionOptions execution_options = 4; diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java index 82128f674e7..a7f2dcc8b33 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.TableMetadata} */ -public final class TableMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class TableMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.TableMetadata) TableMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TableMetadata"); + } + // Use TableMetadata.newBuilder() to construct. - private TableMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private TableMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private TableMetadata() { keyColumn_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new TableMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_TableMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_TableMetadata_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getNameBytes() { @SuppressWarnings("serial") private java.util.List column_; + /** * * @@ -133,6 +143,7 @@ public com.google.protobuf.ByteString getNameBytes() { public java.util.List getColumnList() { return column_; } + /** * * @@ -147,6 +158,7 @@ public java.util.List getColumnLi getColumnOrBuilderList() { return column_; } + /** * * @@ -160,6 +172,7 @@ public java.util.List getColumnLi public int getColumnCount() { return column_.size(); } + /** * * @@ -173,6 +186,7 @@ public int getColumnCount() { public com.google.spanner.executor.v1.ColumnMetadata getColumn(int index) { return column_.get(index); } + /** * * @@ -191,6 +205,7 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getColumnOrBuilder @SuppressWarnings("serial") private java.util.List keyColumn_; + /** * * @@ -204,6 +219,7 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getColumnOrBuilder public java.util.List getKeyColumnList() { return keyColumn_; } + /** * * @@ -218,6 +234,7 @@ public java.util.List getKeyColum getKeyColumnOrBuilderList() { return keyColumn_; } + /** * * @@ -231,6 +248,7 @@ public java.util.List getKeyColum public int getKeyColumnCount() { return keyColumn_.size(); } + /** * * @@ -244,6 +262,7 @@ public int getKeyColumnCount() { public com.google.spanner.executor.v1.ColumnMetadata getKeyColumn(int index) { return keyColumn_.get(index); } + /** * * @@ -272,8 +291,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } for (int i = 0; i < column_.size(); i++) { output.writeMessage(2, column_.get(i)); @@ -290,8 +309,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } for (int i = 0; i < column_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, column_.get(i)); @@ -381,38 +400,38 @@ public static com.google.spanner.executor.v1.TableMetadata parseFrom( public static com.google.spanner.executor.v1.TableMetadata parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.TableMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.TableMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.TableMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.TableMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.TableMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -435,10 +454,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -448,7 +468,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.TableMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.TableMetadata) com.google.spanner.executor.v1.TableMetadataOrBuilder { @@ -458,7 +478,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_TableMetadata_fieldAccessorTable @@ -470,7 +490,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.TableMetadata.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -556,39 +576,6 @@ private void buildPartial0(com.google.spanner.executor.v1.TableMetadata result) } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.TableMetadata) { @@ -625,8 +612,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.TableMetadata other) { column_ = other.column_; bitField0_ = (bitField0_ & ~0x00000002); columnBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getColumnFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetColumnFieldBuilder() : null; } else { columnBuilder_.addAllMessages(other.column_); @@ -652,8 +639,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.TableMetadata other) { keyColumn_ = other.keyColumn_; bitField0_ = (bitField0_ & ~0x00000004); keyColumnBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getKeyColumnFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetKeyColumnFieldBuilder() : null; } else { keyColumnBuilder_.addAllMessages(other.keyColumn_); @@ -738,6 +725,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -760,6 +748,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -782,6 +771,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -803,6 +793,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -820,6 +811,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -853,7 +845,7 @@ private void ensureColumnIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ColumnMetadata, com.google.spanner.executor.v1.ColumnMetadata.Builder, com.google.spanner.executor.v1.ColumnMetadataOrBuilder> @@ -875,6 +867,7 @@ public java.util.List getColumnLi return columnBuilder_.getMessageList(); } } + /** * * @@ -891,6 +884,7 @@ public int getColumnCount() { return columnBuilder_.getCount(); } } + /** * * @@ -907,6 +901,7 @@ public com.google.spanner.executor.v1.ColumnMetadata getColumn(int index) { return columnBuilder_.getMessage(index); } } + /** * * @@ -929,6 +924,7 @@ public Builder setColumn(int index, com.google.spanner.executor.v1.ColumnMetadat } return this; } + /** * * @@ -949,6 +945,7 @@ public Builder setColumn( } return this; } + /** * * @@ -971,6 +968,7 @@ public Builder addColumn(com.google.spanner.executor.v1.ColumnMetadata value) { } return this; } + /** * * @@ -993,6 +991,7 @@ public Builder addColumn(int index, com.google.spanner.executor.v1.ColumnMetadat } return this; } + /** * * @@ -1013,6 +1012,7 @@ public Builder addColumn( } return this; } + /** * * @@ -1033,6 +1033,7 @@ public Builder addColumn( } return this; } + /** * * @@ -1053,6 +1054,7 @@ public Builder addAllColumn( } return this; } + /** * * @@ -1072,6 +1074,7 @@ public Builder clearColumn() { } return this; } + /** * * @@ -1091,6 +1094,7 @@ public Builder removeColumn(int index) { } return this; } + /** * * @@ -1101,8 +1105,9 @@ public Builder removeColumn(int index) { * repeated .google.spanner.executor.v1.ColumnMetadata column = 2; */ public com.google.spanner.executor.v1.ColumnMetadata.Builder getColumnBuilder(int index) { - return getColumnFieldBuilder().getBuilder(index); + return internalGetColumnFieldBuilder().getBuilder(index); } + /** * * @@ -1119,6 +1124,7 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getColumnOrBuilder return columnBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1136,6 +1142,7 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getColumnOrBuilder return java.util.Collections.unmodifiableList(column_); } } + /** * * @@ -1146,9 +1153,10 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getColumnOrBuilder * repeated .google.spanner.executor.v1.ColumnMetadata column = 2; */ public com.google.spanner.executor.v1.ColumnMetadata.Builder addColumnBuilder() { - return getColumnFieldBuilder() + return internalGetColumnFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ColumnMetadata.getDefaultInstance()); } + /** * * @@ -1159,9 +1167,10 @@ public com.google.spanner.executor.v1.ColumnMetadata.Builder addColumnBuilder() * repeated .google.spanner.executor.v1.ColumnMetadata column = 2; */ public com.google.spanner.executor.v1.ColumnMetadata.Builder addColumnBuilder(int index) { - return getColumnFieldBuilder() + return internalGetColumnFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.ColumnMetadata.getDefaultInstance()); } + /** * * @@ -1173,17 +1182,17 @@ public com.google.spanner.executor.v1.ColumnMetadata.Builder addColumnBuilder(in */ public java.util.List getColumnBuilderList() { - return getColumnFieldBuilder().getBuilderList(); + return internalGetColumnFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ColumnMetadata, com.google.spanner.executor.v1.ColumnMetadata.Builder, com.google.spanner.executor.v1.ColumnMetadataOrBuilder> - getColumnFieldBuilder() { + internalGetColumnFieldBuilder() { if (columnBuilder_ == null) { columnBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ColumnMetadata, com.google.spanner.executor.v1.ColumnMetadata.Builder, com.google.spanner.executor.v1.ColumnMetadataOrBuilder>( @@ -1204,7 +1213,7 @@ private void ensureKeyColumnIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ColumnMetadata, com.google.spanner.executor.v1.ColumnMetadata.Builder, com.google.spanner.executor.v1.ColumnMetadataOrBuilder> @@ -1226,6 +1235,7 @@ public java.util.List getKeyColum return keyColumnBuilder_.getMessageList(); } } + /** * * @@ -1242,6 +1252,7 @@ public int getKeyColumnCount() { return keyColumnBuilder_.getCount(); } } + /** * * @@ -1258,6 +1269,7 @@ public com.google.spanner.executor.v1.ColumnMetadata getKeyColumn(int index) { return keyColumnBuilder_.getMessage(index); } } + /** * * @@ -1280,6 +1292,7 @@ public Builder setKeyColumn(int index, com.google.spanner.executor.v1.ColumnMeta } return this; } + /** * * @@ -1300,6 +1313,7 @@ public Builder setKeyColumn( } return this; } + /** * * @@ -1322,6 +1336,7 @@ public Builder addKeyColumn(com.google.spanner.executor.v1.ColumnMetadata value) } return this; } + /** * * @@ -1344,6 +1359,7 @@ public Builder addKeyColumn(int index, com.google.spanner.executor.v1.ColumnMeta } return this; } + /** * * @@ -1364,6 +1380,7 @@ public Builder addKeyColumn( } return this; } + /** * * @@ -1384,6 +1401,7 @@ public Builder addKeyColumn( } return this; } + /** * * @@ -1404,6 +1422,7 @@ public Builder addAllKeyColumn( } return this; } + /** * * @@ -1423,6 +1442,7 @@ public Builder clearKeyColumn() { } return this; } + /** * * @@ -1442,6 +1462,7 @@ public Builder removeKeyColumn(int index) { } return this; } + /** * * @@ -1452,8 +1473,9 @@ public Builder removeKeyColumn(int index) { * repeated .google.spanner.executor.v1.ColumnMetadata key_column = 3; */ public com.google.spanner.executor.v1.ColumnMetadata.Builder getKeyColumnBuilder(int index) { - return getKeyColumnFieldBuilder().getBuilder(index); + return internalGetKeyColumnFieldBuilder().getBuilder(index); } + /** * * @@ -1470,6 +1492,7 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getKeyColumnOrBuil return keyColumnBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1487,6 +1510,7 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getKeyColumnOrBuil return java.util.Collections.unmodifiableList(keyColumn_); } } + /** * * @@ -1497,9 +1521,10 @@ public com.google.spanner.executor.v1.ColumnMetadataOrBuilder getKeyColumnOrBuil * repeated .google.spanner.executor.v1.ColumnMetadata key_column = 3; */ public com.google.spanner.executor.v1.ColumnMetadata.Builder addKeyColumnBuilder() { - return getKeyColumnFieldBuilder() + return internalGetKeyColumnFieldBuilder() .addBuilder(com.google.spanner.executor.v1.ColumnMetadata.getDefaultInstance()); } + /** * * @@ -1510,9 +1535,10 @@ public com.google.spanner.executor.v1.ColumnMetadata.Builder addKeyColumnBuilder * repeated .google.spanner.executor.v1.ColumnMetadata key_column = 3; */ public com.google.spanner.executor.v1.ColumnMetadata.Builder addKeyColumnBuilder(int index) { - return getKeyColumnFieldBuilder() + return internalGetKeyColumnFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.ColumnMetadata.getDefaultInstance()); } + /** * * @@ -1524,17 +1550,17 @@ public com.google.spanner.executor.v1.ColumnMetadata.Builder addKeyColumnBuilder */ public java.util.List getKeyColumnBuilderList() { - return getKeyColumnFieldBuilder().getBuilderList(); + return internalGetKeyColumnFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ColumnMetadata, com.google.spanner.executor.v1.ColumnMetadata.Builder, com.google.spanner.executor.v1.ColumnMetadataOrBuilder> - getKeyColumnFieldBuilder() { + internalGetKeyColumnFieldBuilder() { if (keyColumnBuilder_ == null) { keyColumnBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.ColumnMetadata, com.google.spanner.executor.v1.ColumnMetadata.Builder, com.google.spanner.executor.v1.ColumnMetadataOrBuilder>( @@ -1544,17 +1570,6 @@ public com.google.spanner.executor.v1.ColumnMetadata.Builder addKeyColumnBuilder return keyColumnBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.TableMetadata) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java index 1958b5a0e72..4e9df18c3ae 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface TableMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.TableMetadata) @@ -36,6 +38,7 @@ public interface TableMetadataOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -59,6 +62,7 @@ public interface TableMetadataOrBuilder * repeated .google.spanner.executor.v1.ColumnMetadata column = 2; */ java.util.List getColumnList(); + /** * * @@ -69,6 +73,7 @@ public interface TableMetadataOrBuilder * repeated .google.spanner.executor.v1.ColumnMetadata column = 2; */ com.google.spanner.executor.v1.ColumnMetadata getColumn(int index); + /** * * @@ -79,6 +84,7 @@ public interface TableMetadataOrBuilder * repeated .google.spanner.executor.v1.ColumnMetadata column = 2; */ int getColumnCount(); + /** * * @@ -90,6 +96,7 @@ public interface TableMetadataOrBuilder */ java.util.List getColumnOrBuilderList(); + /** * * @@ -111,6 +118,7 @@ public interface TableMetadataOrBuilder * repeated .google.spanner.executor.v1.ColumnMetadata key_column = 3; */ java.util.List getKeyColumnList(); + /** * * @@ -121,6 +129,7 @@ public interface TableMetadataOrBuilder * repeated .google.spanner.executor.v1.ColumnMetadata key_column = 3; */ com.google.spanner.executor.v1.ColumnMetadata getKeyColumn(int index); + /** * * @@ -131,6 +140,7 @@ public interface TableMetadataOrBuilder * repeated .google.spanner.executor.v1.ColumnMetadata key_column = 3; */ int getKeyColumnCount(); + /** * * @@ -142,6 +152,7 @@ public interface TableMetadataOrBuilder */ java.util.List getKeyColumnOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java index 8514fd9354d..73155bb9dae 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,45 +14,44 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; -/** - * - * - *
                                - * Options for executing the transaction.
                                - * 
                                - * - * Protobuf type {@code google.spanner.executor.v1.TransactionExecutionOptions} - */ -public final class TransactionExecutionOptions extends com.google.protobuf.GeneratedMessageV3 +/** Protobuf type {@code google.spanner.executor.v1.TransactionExecutionOptions} */ +@com.google.protobuf.Generated +public final class TransactionExecutionOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.TransactionExecutionOptions) TransactionExecutionOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TransactionExecutionOptions"); + } + // Use TransactionExecutionOptions.newBuilder() to construct. - private TransactionExecutionOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private TransactionExecutionOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private TransactionExecutionOptions() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new TransactionExecutionOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_TransactionExecutionOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_TransactionExecutionOptions_fieldAccessorTable @@ -63,6 +62,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int OPTIMISTIC_FIELD_NUMBER = 1; private boolean optimistic_ = false; + /** * * @@ -79,6 +79,106 @@ public boolean getOptimistic() { return optimistic_; } + public static final int EXCLUDE_FROM_CHANGE_STREAMS_FIELD_NUMBER = 2; + private boolean excludeFromChangeStreams_ = false; + + /** + * + * + *
                                +   * Whether traffic from this transaction will be excluded from tracking change
                                +   * streams with allow_txn_exclusion=true.
                                +   * 
                                + * + * bool exclude_from_change_streams = 2; + * + * @return The excludeFromChangeStreams. + */ + @java.lang.Override + public boolean getExcludeFromChangeStreams() { + return excludeFromChangeStreams_; + } + + public static final int SERIALIZABLE_OPTIMISTIC_FIELD_NUMBER = 3; + private boolean serializableOptimistic_ = false; + + /** + * + * + *
                                +   * Whether serializable isolation with optimistic mode concurrency should be
                                +   * used to execute this transaction.
                                +   * 
                                + * + * bool serializable_optimistic = 3; + * + * @return The serializableOptimistic. + */ + @java.lang.Override + public boolean getSerializableOptimistic() { + return serializableOptimistic_; + } + + public static final int SNAPSHOT_ISOLATION_OPTIMISTIC_FIELD_NUMBER = 4; + private boolean snapshotIsolationOptimistic_ = false; + + /** + * + * + *
                                +   * Whether snapshot isolation with optimistic mode concurrency should be used
                                +   * to execute this transaction.
                                +   * 
                                + * + * bool snapshot_isolation_optimistic = 4; + * + * @return The snapshotIsolationOptimistic. + */ + @java.lang.Override + public boolean getSnapshotIsolationOptimistic() { + return snapshotIsolationOptimistic_; + } + + public static final int SNAPSHOT_ISOLATION_PESSIMISTIC_FIELD_NUMBER = 5; + private boolean snapshotIsolationPessimistic_ = false; + + /** + * + * + *
                                +   * Whether snapshot isolation with pessimistic mode concurrency should be used
                                +   * to execute this transaction.
                                +   * 
                                + * + * bool snapshot_isolation_pessimistic = 5; + * + * @return The snapshotIsolationPessimistic. + */ + @java.lang.Override + public boolean getSnapshotIsolationPessimistic() { + return snapshotIsolationPessimistic_; + } + + public static final int EXCLUDE_TXN_FROM_CHANGE_STREAMS_FIELD_NUMBER = 6; + private boolean excludeTxnFromChangeStreams_ = false; + + /** + * + * + *
                                +   * Whether to exclude mutations of this transaction from the allowed tracking
                                +   * change streams.
                                +   * 
                                + * + * bool exclude_txn_from_change_streams = 6; + * + * @return The excludeTxnFromChangeStreams. + */ + @java.lang.Override + public boolean getExcludeTxnFromChangeStreams() { + return excludeTxnFromChangeStreams_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -96,6 +196,21 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (optimistic_ != false) { output.writeBool(1, optimistic_); } + if (excludeFromChangeStreams_ != false) { + output.writeBool(2, excludeFromChangeStreams_); + } + if (serializableOptimistic_ != false) { + output.writeBool(3, serializableOptimistic_); + } + if (snapshotIsolationOptimistic_ != false) { + output.writeBool(4, snapshotIsolationOptimistic_); + } + if (snapshotIsolationPessimistic_ != false) { + output.writeBool(5, snapshotIsolationPessimistic_); + } + if (excludeTxnFromChangeStreams_ != false) { + output.writeBool(6, excludeTxnFromChangeStreams_); + } getUnknownFields().writeTo(output); } @@ -108,6 +223,24 @@ public int getSerializedSize() { if (optimistic_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(1, optimistic_); } + if (excludeFromChangeStreams_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, excludeFromChangeStreams_); + } + if (serializableOptimistic_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, serializableOptimistic_); + } + if (snapshotIsolationOptimistic_ != false) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize(4, snapshotIsolationOptimistic_); + } + if (snapshotIsolationPessimistic_ != false) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize(5, snapshotIsolationPessimistic_); + } + if (excludeTxnFromChangeStreams_ != false) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize(6, excludeTxnFromChangeStreams_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -125,6 +258,11 @@ public boolean equals(final java.lang.Object obj) { (com.google.spanner.executor.v1.TransactionExecutionOptions) obj; if (getOptimistic() != other.getOptimistic()) return false; + if (getExcludeFromChangeStreams() != other.getExcludeFromChangeStreams()) return false; + if (getSerializableOptimistic() != other.getSerializableOptimistic()) return false; + if (getSnapshotIsolationOptimistic() != other.getSnapshotIsolationOptimistic()) return false; + if (getSnapshotIsolationPessimistic() != other.getSnapshotIsolationPessimistic()) return false; + if (getExcludeTxnFromChangeStreams() != other.getExcludeTxnFromChangeStreams()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -138,6 +276,17 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + OPTIMISTIC_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getOptimistic()); + hash = (37 * hash) + EXCLUDE_FROM_CHANGE_STREAMS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getExcludeFromChangeStreams()); + hash = (37 * hash) + SERIALIZABLE_OPTIMISTIC_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getSerializableOptimistic()); + hash = (37 * hash) + SNAPSHOT_ISOLATION_OPTIMISTIC_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getSnapshotIsolationOptimistic()); + hash = (37 * hash) + SNAPSHOT_ISOLATION_PESSIMISTIC_FIELD_NUMBER; + hash = + (53 * hash) + com.google.protobuf.Internal.hashBoolean(getSnapshotIsolationPessimistic()); + hash = (37 * hash) + EXCLUDE_TXN_FROM_CHANGE_STREAMS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getExcludeTxnFromChangeStreams()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -180,38 +329,38 @@ public static com.google.spanner.executor.v1.TransactionExecutionOptions parseFr public static com.google.spanner.executor.v1.TransactionExecutionOptions parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.TransactionExecutionOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.TransactionExecutionOptions parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.TransactionExecutionOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.TransactionExecutionOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.TransactionExecutionOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -235,20 +384,13 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } - /** - * - * - *
                                -   * Options for executing the transaction.
                                -   * 
                                - * - * Protobuf type {@code google.spanner.executor.v1.TransactionExecutionOptions} - */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + + /** Protobuf type {@code google.spanner.executor.v1.TransactionExecutionOptions} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.TransactionExecutionOptions) com.google.spanner.executor.v1.TransactionExecutionOptionsOrBuilder { @@ -258,7 +400,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_TransactionExecutionOptions_fieldAccessorTable @@ -270,7 +412,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.TransactionExecutionOptions.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -279,6 +421,11 @@ public Builder clear() { super.clear(); bitField0_ = 0; optimistic_ = false; + excludeFromChangeStreams_ = false; + serializableOptimistic_ = false; + snapshotIsolationOptimistic_ = false; + snapshotIsolationPessimistic_ = false; + excludeTxnFromChangeStreams_ = false; return this; } @@ -318,39 +465,21 @@ private void buildPartial0(com.google.spanner.executor.v1.TransactionExecutionOp if (((from_bitField0_ & 0x00000001) != 0)) { result.optimistic_ = optimistic_; } - } - - @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); + if (((from_bitField0_ & 0x00000002) != 0)) { + result.excludeFromChangeStreams_ = excludeFromChangeStreams_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.serializableOptimistic_ = serializableOptimistic_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.snapshotIsolationOptimistic_ = snapshotIsolationOptimistic_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.snapshotIsolationPessimistic_ = snapshotIsolationPessimistic_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.excludeTxnFromChangeStreams_ = excludeTxnFromChangeStreams_; + } } @java.lang.Override @@ -369,6 +498,21 @@ public Builder mergeFrom(com.google.spanner.executor.v1.TransactionExecutionOpti if (other.getOptimistic() != false) { setOptimistic(other.getOptimistic()); } + if (other.getExcludeFromChangeStreams() != false) { + setExcludeFromChangeStreams(other.getExcludeFromChangeStreams()); + } + if (other.getSerializableOptimistic() != false) { + setSerializableOptimistic(other.getSerializableOptimistic()); + } + if (other.getSnapshotIsolationOptimistic() != false) { + setSnapshotIsolationOptimistic(other.getSnapshotIsolationOptimistic()); + } + if (other.getSnapshotIsolationPessimistic() != false) { + setSnapshotIsolationPessimistic(other.getSnapshotIsolationPessimistic()); + } + if (other.getExcludeTxnFromChangeStreams() != false) { + setExcludeTxnFromChangeStreams(other.getExcludeTxnFromChangeStreams()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -401,6 +545,36 @@ public Builder mergeFrom( bitField0_ |= 0x00000001; break; } // case 8 + case 16: + { + excludeFromChangeStreams_ = input.readBool(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + serializableOptimistic_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + snapshotIsolationOptimistic_ = input.readBool(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 40: + { + snapshotIsolationPessimistic_ = input.readBool(); + bitField0_ |= 0x00000010; + break; + } // case 40 + case 48: + { + excludeTxnFromChangeStreams_ = input.readBool(); + bitField0_ |= 0x00000020; + break; + } // case 48 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -421,6 +595,7 @@ public Builder mergeFrom( private int bitField0_; private boolean optimistic_; + /** * * @@ -436,6 +611,7 @@ public Builder mergeFrom( public boolean getOptimistic() { return optimistic_; } + /** * * @@ -455,6 +631,7 @@ public Builder setOptimistic(boolean value) { onChanged(); return this; } + /** * * @@ -473,15 +650,299 @@ public Builder clearOptimistic() { return this; } + private boolean excludeFromChangeStreams_; + + /** + * + * + *
                                +     * Whether traffic from this transaction will be excluded from tracking change
                                +     * streams with allow_txn_exclusion=true.
                                +     * 
                                + * + * bool exclude_from_change_streams = 2; + * + * @return The excludeFromChangeStreams. + */ + @java.lang.Override + public boolean getExcludeFromChangeStreams() { + return excludeFromChangeStreams_; + } + + /** + * + * + *
                                +     * Whether traffic from this transaction will be excluded from tracking change
                                +     * streams with allow_txn_exclusion=true.
                                +     * 
                                + * + * bool exclude_from_change_streams = 2; + * + * @param value The excludeFromChangeStreams to set. + * @return This builder for chaining. + */ + public Builder setExcludeFromChangeStreams(boolean value) { + + excludeFromChangeStreams_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Whether traffic from this transaction will be excluded from tracking change
                                +     * streams with allow_txn_exclusion=true.
                                +     * 
                                + * + * bool exclude_from_change_streams = 2; + * + * @return This builder for chaining. + */ + public Builder clearExcludeFromChangeStreams() { + bitField0_ = (bitField0_ & ~0x00000002); + excludeFromChangeStreams_ = false; + onChanged(); + return this; + } + + private boolean serializableOptimistic_; + + /** + * + * + *
                                +     * Whether serializable isolation with optimistic mode concurrency should be
                                +     * used to execute this transaction.
                                +     * 
                                + * + * bool serializable_optimistic = 3; + * + * @return The serializableOptimistic. + */ + @java.lang.Override + public boolean getSerializableOptimistic() { + return serializableOptimistic_; + } + + /** + * + * + *
                                +     * Whether serializable isolation with optimistic mode concurrency should be
                                +     * used to execute this transaction.
                                +     * 
                                + * + * bool serializable_optimistic = 3; + * + * @param value The serializableOptimistic to set. + * @return This builder for chaining. + */ + public Builder setSerializableOptimistic(boolean value) { + + serializableOptimistic_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Whether serializable isolation with optimistic mode concurrency should be
                                +     * used to execute this transaction.
                                +     * 
                                + * + * bool serializable_optimistic = 3; + * + * @return This builder for chaining. + */ + public Builder clearSerializableOptimistic() { + bitField0_ = (bitField0_ & ~0x00000004); + serializableOptimistic_ = false; + onChanged(); + return this; + } + + private boolean snapshotIsolationOptimistic_; + + /** + * + * + *
                                +     * Whether snapshot isolation with optimistic mode concurrency should be used
                                +     * to execute this transaction.
                                +     * 
                                + * + * bool snapshot_isolation_optimistic = 4; + * + * @return The snapshotIsolationOptimistic. + */ + @java.lang.Override + public boolean getSnapshotIsolationOptimistic() { + return snapshotIsolationOptimistic_; + } + + /** + * + * + *
                                +     * Whether snapshot isolation with optimistic mode concurrency should be used
                                +     * to execute this transaction.
                                +     * 
                                + * + * bool snapshot_isolation_optimistic = 4; + * + * @param value The snapshotIsolationOptimistic to set. + * @return This builder for chaining. + */ + public Builder setSnapshotIsolationOptimistic(boolean value) { + + snapshotIsolationOptimistic_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Whether snapshot isolation with optimistic mode concurrency should be used
                                +     * to execute this transaction.
                                +     * 
                                + * + * bool snapshot_isolation_optimistic = 4; + * + * @return This builder for chaining. + */ + public Builder clearSnapshotIsolationOptimistic() { + bitField0_ = (bitField0_ & ~0x00000008); + snapshotIsolationOptimistic_ = false; + onChanged(); + return this; + } + + private boolean snapshotIsolationPessimistic_; + + /** + * + * + *
                                +     * Whether snapshot isolation with pessimistic mode concurrency should be used
                                +     * to execute this transaction.
                                +     * 
                                + * + * bool snapshot_isolation_pessimistic = 5; + * + * @return The snapshotIsolationPessimistic. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean getSnapshotIsolationPessimistic() { + return snapshotIsolationPessimistic_; + } + + /** + * + * + *
                                +     * Whether snapshot isolation with pessimistic mode concurrency should be used
                                +     * to execute this transaction.
                                +     * 
                                + * + * bool snapshot_isolation_pessimistic = 5; + * + * @param value The snapshotIsolationPessimistic to set. + * @return This builder for chaining. + */ + public Builder setSnapshotIsolationPessimistic(boolean value) { + + snapshotIsolationPessimistic_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Whether snapshot isolation with pessimistic mode concurrency should be used
                                +     * to execute this transaction.
                                +     * 
                                + * + * bool snapshot_isolation_pessimistic = 5; + * + * @return This builder for chaining. + */ + public Builder clearSnapshotIsolationPessimistic() { + bitField0_ = (bitField0_ & ~0x00000010); + snapshotIsolationPessimistic_ = false; + onChanged(); + return this; } + private boolean excludeTxnFromChangeStreams_; + + /** + * + * + *
                                +     * Whether to exclude mutations of this transaction from the allowed tracking
                                +     * change streams.
                                +     * 
                                + * + * bool exclude_txn_from_change_streams = 6; + * + * @return The excludeTxnFromChangeStreams. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public boolean getExcludeTxnFromChangeStreams() { + return excludeTxnFromChangeStreams_; + } + + /** + * + * + *
                                +     * Whether to exclude mutations of this transaction from the allowed tracking
                                +     * change streams.
                                +     * 
                                + * + * bool exclude_txn_from_change_streams = 6; + * + * @param value The excludeTxnFromChangeStreams to set. + * @return This builder for chaining. + */ + public Builder setExcludeTxnFromChangeStreams(boolean value) { + + excludeTxnFromChangeStreams_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Whether to exclude mutations of this transaction from the allowed tracking
                                +     * change streams.
                                +     * 
                                + * + * bool exclude_txn_from_change_streams = 6; + * + * @return This builder for chaining. + */ + public Builder clearExcludeTxnFromChangeStreams() { + bitField0_ = (bitField0_ & ~0x00000020); + excludeTxnFromChangeStreams_ = false; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.TransactionExecutionOptions) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java index ff88f0ebd17..d8a2ec73d1e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface TransactionExecutionOptionsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.TransactionExecutionOptions) @@ -36,4 +38,74 @@ public interface TransactionExecutionOptionsOrBuilder * @return The optimistic. */ boolean getOptimistic(); + + /** + * + * + *
                                +   * Whether traffic from this transaction will be excluded from tracking change
                                +   * streams with allow_txn_exclusion=true.
                                +   * 
                                + * + * bool exclude_from_change_streams = 2; + * + * @return The excludeFromChangeStreams. + */ + boolean getExcludeFromChangeStreams(); + + /** + * + * + *
                                +   * Whether serializable isolation with optimistic mode concurrency should be
                                +   * used to execute this transaction.
                                +   * 
                                + * + * bool serializable_optimistic = 3; + * + * @return The serializableOptimistic. + */ + boolean getSerializableOptimistic(); + + /** + * + * + *
                                +   * Whether snapshot isolation with optimistic mode concurrency should be used
                                +   * to execute this transaction.
                                +   * 
                                + * + * bool snapshot_isolation_optimistic = 4; + * + * @return The snapshotIsolationOptimistic. + */ + boolean getSnapshotIsolationOptimistic(); + + /** + * + * + *
                                +   * Whether snapshot isolation with pessimistic mode concurrency should be used
                                +   * to execute this transaction.
                                +   * 
                                + * + * bool snapshot_isolation_pessimistic = 5; + * + * @return The snapshotIsolationPessimistic. + */ + boolean getSnapshotIsolationPessimistic(); + + /** + * + * + *
                                +   * Whether to exclude mutations of this transaction from the allowed tracking
                                +   * change streams.
                                +   * 
                                + * + * bool exclude_txn_from_change_streams = 6; + * + * @return The excludeTxnFromChangeStreams. + */ + boolean getExcludeTxnFromChangeStreams(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java index 4d44c06675b..d6ecbab2ba5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudBackupAction} */ -public final class UpdateCloudBackupAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateCloudBackupAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.UpdateCloudBackupAction) UpdateCloudBackupActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateCloudBackupAction"); + } + // Use UpdateCloudBackupAction.newBuilder() to construct. - private UpdateCloudBackupAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateCloudBackupAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private UpdateCloudBackupAction() { backupId_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateCloudBackupAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_fieldAccessorTable @@ -70,6 +77,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -144,6 +154,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -172,6 +183,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object backupId_ = ""; + /** * * @@ -195,6 +207,7 @@ public java.lang.String getBackupId() { return s; } } + /** * * @@ -221,6 +234,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { public static final int EXPIRE_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp expireTime_; + /** * * @@ -238,6 +252,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { public boolean hasExpireTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -255,6 +270,7 @@ public boolean hasExpireTime() { public com.google.protobuf.Timestamp getExpireTime() { return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; } + /** * * @@ -285,14 +301,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, backupId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(4, getExpireTime()); @@ -306,14 +322,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, backupId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(backupId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, backupId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getExpireTime()); @@ -404,38 +420,38 @@ public static com.google.spanner.executor.v1.UpdateCloudBackupAction parseFrom( public static com.google.spanner.executor.v1.UpdateCloudBackupAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudBackupAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudBackupAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudBackupAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudBackupAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -459,10 +475,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -472,7 +489,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudBackupAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.UpdateCloudBackupAction) com.google.spanner.executor.v1.UpdateCloudBackupActionOrBuilder { @@ -482,7 +499,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudBackupAction_fieldAccessorTable @@ -496,14 +513,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getExpireTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetExpireTimeFieldBuilder(); } } @@ -572,39 +589,6 @@ private void buildPartial0(com.google.spanner.executor.v1.UpdateCloudBackupActio result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.UpdateCloudBackupAction) { @@ -682,7 +666,8 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -706,6 +691,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -728,6 +714,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -750,6 +737,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -771,6 +759,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -788,6 +777,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -812,6 +802,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object instanceId_ = ""; + /** * * @@ -834,6 +825,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -856,6 +848,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -877,6 +870,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -894,6 +888,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -918,6 +913,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object backupId_ = ""; + /** * * @@ -940,6 +936,7 @@ public java.lang.String getBackupId() { return (java.lang.String) ref; } } + /** * * @@ -962,6 +959,7 @@ public com.google.protobuf.ByteString getBackupIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -983,6 +981,7 @@ public Builder setBackupId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1000,6 +999,7 @@ public Builder clearBackupId() { onChanged(); return this; } + /** * * @@ -1024,11 +1024,12 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Timestamp expireTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> expireTimeBuilder_; + /** * * @@ -1046,6 +1047,7 @@ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) { public boolean hasExpireTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1069,6 +1071,7 @@ public com.google.protobuf.Timestamp getExpireTime() { return expireTimeBuilder_.getMessage(); } } + /** * * @@ -1094,6 +1097,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1116,6 +1120,7 @@ public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1146,6 +1151,7 @@ public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1168,6 +1174,7 @@ public Builder clearExpireTime() { onChanged(); return this; } + /** * * @@ -1183,8 +1190,9 @@ public Builder clearExpireTime() { public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getExpireTimeFieldBuilder().getBuilder(); + return internalGetExpireTimeFieldBuilder().getBuilder(); } + /** * * @@ -1206,6 +1214,7 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { : expireTime_; } } + /** * * @@ -1218,14 +1227,14 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getExpireTimeFieldBuilder() { + internalGetExpireTimeFieldBuilder() { if (expireTimeBuilder_ == null) { expireTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1235,17 +1244,6 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { return expireTimeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.UpdateCloudBackupAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java index 2ac6a13defe..f7631f2017d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface UpdateCloudBackupActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.UpdateCloudBackupAction) @@ -36,6 +38,7 @@ public interface UpdateCloudBackupActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +64,7 @@ public interface UpdateCloudBackupActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -86,6 +90,7 @@ public interface UpdateCloudBackupActionOrBuilder * @return The backupId. */ java.lang.String getBackupId(); + /** * * @@ -113,6 +118,7 @@ public interface UpdateCloudBackupActionOrBuilder * @return Whether the expireTime field is set. */ boolean hasExpireTime(); + /** * * @@ -127,6 +133,7 @@ public interface UpdateCloudBackupActionOrBuilder * @return The expireTime. */ com.google.protobuf.Timestamp getExpireTime(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java index bf8b7c43e77..3a390421fbb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudDatabaseAction} */ -public final class UpdateCloudDatabaseAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateCloudDatabaseAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.UpdateCloudDatabaseAction) UpdateCloudDatabaseActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateCloudDatabaseAction"); + } + // Use UpdateCloudDatabaseAction.newBuilder() to construct. - private UpdateCloudDatabaseAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateCloudDatabaseAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private UpdateCloudDatabaseAction() { databaseName_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateCloudDatabaseAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -120,6 +129,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -143,6 +153,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -171,6 +182,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseName_ = ""; + /** * * @@ -194,6 +206,7 @@ public java.lang.String getDatabaseName() { return s; } } + /** * * @@ -220,6 +233,7 @@ public com.google.protobuf.ByteString getDatabaseNameBytes() { public static final int ENABLE_DROP_PROTECTION_FIELD_NUMBER = 4; private boolean enableDropProtection_ = false; + /** * * @@ -251,14 +265,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, databaseName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, databaseName_); } if (enableDropProtection_ != false) { output.writeBool(4, enableDropProtection_); @@ -272,14 +286,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, databaseName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, databaseName_); } if (enableDropProtection_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, enableDropProtection_); @@ -365,38 +379,38 @@ public static com.google.spanner.executor.v1.UpdateCloudDatabaseAction parseFrom public static com.google.spanner.executor.v1.UpdateCloudDatabaseAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -420,10 +434,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -433,7 +448,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudDatabaseAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.UpdateCloudDatabaseAction) com.google.spanner.executor.v1.UpdateCloudDatabaseActionOrBuilder { @@ -443,7 +458,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudDatabaseAction_fieldAccessorTable @@ -455,7 +470,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.UpdateCloudDatabaseAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -517,39 +532,6 @@ private void buildPartial0(com.google.spanner.executor.v1.UpdateCloudDatabaseAct } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.UpdateCloudDatabaseAction) { @@ -651,6 +633,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceId_ = ""; + /** * * @@ -673,6 +656,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -695,6 +679,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -716,6 +701,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -733,6 +719,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -757,6 +744,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -779,6 +767,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -801,6 +790,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -822,6 +812,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -839,6 +830,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -863,6 +855,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseName_ = ""; + /** * * @@ -885,6 +878,7 @@ public java.lang.String getDatabaseName() { return (java.lang.String) ref; } } + /** * * @@ -907,6 +901,7 @@ public com.google.protobuf.ByteString getDatabaseNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -928,6 +923,7 @@ public Builder setDatabaseName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -945,6 +941,7 @@ public Builder clearDatabaseName() { onChanged(); return this; } + /** * * @@ -969,6 +966,7 @@ public Builder setDatabaseNameBytes(com.google.protobuf.ByteString value) { } private boolean enableDropProtection_; + /** * * @@ -985,6 +983,7 @@ public Builder setDatabaseNameBytes(com.google.protobuf.ByteString value) { public boolean getEnableDropProtection() { return enableDropProtection_; } + /** * * @@ -1005,6 +1004,7 @@ public Builder setEnableDropProtection(boolean value) { onChanged(); return this; } + /** * * @@ -1024,17 +1024,6 @@ public Builder clearEnableDropProtection() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.UpdateCloudDatabaseAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java index f9c79e1798b..56e207cc9b9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface UpdateCloudDatabaseActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.UpdateCloudDatabaseAction) @@ -36,6 +38,7 @@ public interface UpdateCloudDatabaseActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -61,6 +64,7 @@ public interface UpdateCloudDatabaseActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -86,6 +90,7 @@ public interface UpdateCloudDatabaseActionOrBuilder * @return The databaseName. */ java.lang.String getDatabaseName(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java index b004f1268e3..50ac941aa1d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudDatabaseDdlAction} */ -public final class UpdateCloudDatabaseDdlAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateCloudDatabaseDdlAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.UpdateCloudDatabaseDdlAction) UpdateCloudDatabaseDdlActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateCloudDatabaseDdlAction"); + } + // Use UpdateCloudDatabaseDdlAction.newBuilder() to construct. - private UpdateCloudDatabaseDdlAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateCloudDatabaseDdlAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,19 +60,13 @@ private UpdateCloudDatabaseDdlAction() { protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateCloudDatabaseDdlAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_fieldAccessorTable @@ -73,6 +80,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -147,6 +157,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -175,6 +186,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -198,6 +210,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -227,6 +240,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList sdlStatement_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -241,6 +255,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public com.google.protobuf.ProtocolStringList getSdlStatementList() { return sdlStatement_; } + /** * * @@ -255,6 +270,7 @@ public com.google.protobuf.ProtocolStringList getSdlStatementList() { public int getSdlStatementCount() { return sdlStatement_.size(); } + /** * * @@ -270,6 +286,7 @@ public int getSdlStatementCount() { public java.lang.String getSdlStatement(int index) { return sdlStatement_.get(index); } + /** * * @@ -290,6 +307,7 @@ public com.google.protobuf.ByteString getSdlStatementBytes(int index) { @SuppressWarnings("serial") private volatile java.lang.Object operationId_ = ""; + /** * * @@ -315,6 +333,7 @@ public java.lang.String getOperationId() { return s; } } + /** * * @@ -343,6 +362,7 @@ public com.google.protobuf.ByteString getOperationIdBytes() { public static final int PROTO_DESCRIPTORS_FIELD_NUMBER = 6; private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * optional bytes proto_descriptors = 6; * @@ -352,6 +372,7 @@ public com.google.protobuf.ByteString getOperationIdBytes() { public boolean hasProtoDescriptors() { return ((bitField0_ & 0x00000001) != 0); } + /** * optional bytes proto_descriptors = 6; * @@ -376,20 +397,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, databaseId_); } for (int i = 0; i < sdlStatement_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, sdlStatement_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 4, sdlStatement_.getRaw(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operationId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, operationId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operationId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, operationId_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeBytes(6, protoDescriptors_); @@ -403,14 +424,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(databaseId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, databaseId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(databaseId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, databaseId_); } { int dataSize = 0; @@ -420,8 +441,8 @@ public int getSerializedSize() { size += dataSize; size += 1 * getSdlStatementList().size(); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operationId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, operationId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(operationId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, operationId_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeBytesSize(6, protoDescriptors_); @@ -520,38 +541,38 @@ public static com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction parseF public static com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -575,10 +596,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -588,7 +610,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudDatabaseDdlAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.UpdateCloudDatabaseDdlAction) com.google.spanner.executor.v1.UpdateCloudDatabaseDdlActionOrBuilder { @@ -598,7 +620,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudDatabaseDdlAction_fieldAccessorTable @@ -610,7 +632,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -684,39 +706,6 @@ private void buildPartial0(com.google.spanner.executor.v1.UpdateCloudDatabaseDdl result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction) { @@ -846,6 +835,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceId_ = ""; + /** * * @@ -868,6 +858,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -890,6 +881,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -911,6 +903,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -928,6 +921,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -952,6 +946,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -974,6 +969,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -996,6 +992,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1017,6 +1014,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1034,6 +1032,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1058,6 +1057,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -1080,6 +1080,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1102,6 +1103,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1123,6 +1125,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1140,6 +1143,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1172,6 +1176,7 @@ private void ensureSdlStatementIsMutable() { } bitField0_ |= 0x00000008; } + /** * * @@ -1187,6 +1192,7 @@ public com.google.protobuf.ProtocolStringList getSdlStatementList() { sdlStatement_.makeImmutable(); return sdlStatement_; } + /** * * @@ -1201,6 +1207,7 @@ public com.google.protobuf.ProtocolStringList getSdlStatementList() { public int getSdlStatementCount() { return sdlStatement_.size(); } + /** * * @@ -1216,6 +1223,7 @@ public int getSdlStatementCount() { public java.lang.String getSdlStatement(int index) { return sdlStatement_.get(index); } + /** * * @@ -1231,6 +1239,7 @@ public java.lang.String getSdlStatement(int index) { public com.google.protobuf.ByteString getSdlStatementBytes(int index) { return sdlStatement_.getByteString(index); } + /** * * @@ -1254,6 +1263,7 @@ public Builder setSdlStatement(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1276,6 +1286,7 @@ public Builder addSdlStatement(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1295,6 +1306,7 @@ public Builder addAllSdlStatement(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1313,6 +1325,7 @@ public Builder clearSdlStatement() { onChanged(); return this; } + /** * * @@ -1338,6 +1351,7 @@ public Builder addSdlStatementBytes(com.google.protobuf.ByteString value) { } private java.lang.Object operationId_ = ""; + /** * * @@ -1362,6 +1376,7 @@ public java.lang.String getOperationId() { return (java.lang.String) ref; } } + /** * * @@ -1386,6 +1401,7 @@ public com.google.protobuf.ByteString getOperationIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1409,6 +1425,7 @@ public Builder setOperationId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1428,6 +1445,7 @@ public Builder clearOperationId() { onChanged(); return this; } + /** * * @@ -1454,6 +1472,7 @@ public Builder setOperationIdBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.ByteString protoDescriptors_ = com.google.protobuf.ByteString.EMPTY; + /** * optional bytes proto_descriptors = 6; * @@ -1463,6 +1482,7 @@ public Builder setOperationIdBytes(com.google.protobuf.ByteString value) { public boolean hasProtoDescriptors() { return ((bitField0_ & 0x00000020) != 0); } + /** * optional bytes proto_descriptors = 6; * @@ -1472,6 +1492,7 @@ public boolean hasProtoDescriptors() { public com.google.protobuf.ByteString getProtoDescriptors() { return protoDescriptors_; } + /** * optional bytes proto_descriptors = 6; * @@ -1487,6 +1508,7 @@ public Builder setProtoDescriptors(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * optional bytes proto_descriptors = 6; * @@ -1499,17 +1521,6 @@ public Builder clearProtoDescriptors() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.UpdateCloudDatabaseDdlAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java index 4c76af44df5..bf0a800729b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface UpdateCloudDatabaseDdlActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.UpdateCloudDatabaseDdlAction) @@ -36,6 +38,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -61,6 +64,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -86,6 +90,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -111,6 +116,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return A list containing the sdlStatement. */ java.util.List getSdlStatementList(); + /** * * @@ -123,6 +129,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return The count of sdlStatement. */ int getSdlStatementCount(); + /** * * @@ -136,6 +143,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return The sdlStatement at the given index. */ java.lang.String getSdlStatement(int index); + /** * * @@ -164,6 +172,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return The operationId. */ java.lang.String getOperationId(); + /** * * @@ -185,6 +194,7 @@ public interface UpdateCloudDatabaseDdlActionOrBuilder * @return Whether the protoDescriptors field is set. */ boolean hasProtoDescriptors(); + /** * optional bytes proto_descriptors = 6; * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java index f03f155faf0..ec50faabe6a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudInstanceAction} */ -public final class UpdateCloudInstanceAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateCloudInstanceAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.UpdateCloudInstanceAction) UpdateCloudInstanceActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateCloudInstanceAction"); + } + // Use UpdateCloudInstanceAction.newBuilder() to construct. - private UpdateCloudInstanceAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateCloudInstanceAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,12 +55,7 @@ private UpdateCloudInstanceAction() { instanceId_ = ""; projectId_ = ""; displayName_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateCloudInstanceAction(); + edition_ = 0; } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @@ -68,7 +76,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_fieldAccessorTable @@ -82,6 +90,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object instanceId_ = ""; + /** * * @@ -105,6 +114,7 @@ public java.lang.String getInstanceId() { return s; } } + /** * * @@ -133,6 +143,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -156,6 +167,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -184,6 +196,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object displayName_ = ""; + /** * * @@ -200,6 +213,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { public boolean hasDisplayName() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -224,6 +238,7 @@ public java.lang.String getDisplayName() { return s; } } + /** * * @@ -251,6 +266,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { public static final int NODE_COUNT_FIELD_NUMBER = 4; private int nodeCount_ = 0; + /** * * @@ -267,6 +283,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { public boolean hasNodeCount() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -286,6 +303,7 @@ public int getNodeCount() { public static final int PROCESSING_UNITS_FIELD_NUMBER = 5; private int processingUnits_ = 0; + /** * * @@ -302,6 +320,7 @@ public int getNodeCount() { public boolean hasProcessingUnits() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -321,6 +340,7 @@ public int getProcessingUnits() { public static final int AUTOSCALING_CONFIG_FIELD_NUMBER = 7; private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; + /** * * @@ -339,6 +359,7 @@ public int getProcessingUnits() { public boolean hasAutoscalingConfig() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -359,6 +380,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf ? com.google.spanner.admin.instance.v1.AutoscalingConfig.getDefaultInstance() : autoscalingConfig_; } + /** * * @@ -405,6 +427,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -421,12 +444,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(); } + /** * * @@ -440,6 +465,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -460,6 +486,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -481,6 +508,45 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { return map.get(key); } + public static final int EDITION_FIELD_NUMBER = 8; + private int edition_ = 0; + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The enum numeric value on the wire for edition. + */ + @java.lang.Override + public int getEditionValue() { + return edition_; + } + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The edition. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.Instance.Edition getEdition() { + com.google.spanner.admin.instance.v1.Instance.Edition result = + com.google.spanner.admin.instance.v1.Instance.Edition.forNumber(edition_); + return result == null + ? com.google.spanner.admin.instance.v1.Instance.Edition.UNRECOGNIZED + : result; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -495,14 +561,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, displayName_); + com.google.protobuf.GeneratedMessage.writeString(output, 3, displayName_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeInt32(4, nodeCount_); @@ -510,11 +576,15 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeInt32(5, processingUnits_); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 6); if (((bitField0_ & 0x00000008) != 0)) { output.writeMessage(7, getAutoscalingConfig()); } + if (edition_ + != com.google.spanner.admin.instance.v1.Instance.Edition.EDITION_UNSPECIFIED.getNumber()) { + output.writeEnum(8, edition_); + } getUnknownFields().writeTo(output); } @@ -524,14 +594,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instanceId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(instanceId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, instanceId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, displayName_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, displayName_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, nodeCount_); @@ -552,6 +622,10 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000008) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, getAutoscalingConfig()); } + if (edition_ + != com.google.spanner.admin.instance.v1.Instance.Edition.EDITION_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(8, edition_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -587,6 +661,7 @@ public boolean equals(final java.lang.Object obj) { if (!getAutoscalingConfig().equals(other.getAutoscalingConfig())) return false; } if (!internalGetLabels().equals(other.internalGetLabels())) return false; + if (edition_ != other.edition_) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -622,6 +697,8 @@ public int hashCode() { hash = (37 * hash) + LABELS_FIELD_NUMBER; hash = (53 * hash) + internalGetLabels().hashCode(); } + hash = (37 * hash) + EDITION_FIELD_NUMBER; + hash = (53 * hash) + edition_; hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -664,38 +741,38 @@ public static com.google.spanner.executor.v1.UpdateCloudInstanceAction parseFrom public static com.google.spanner.executor.v1.UpdateCloudInstanceAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudInstanceAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudInstanceAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudInstanceAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateCloudInstanceAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -719,10 +796,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -732,7 +810,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.UpdateCloudInstanceAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.UpdateCloudInstanceAction) com.google.spanner.executor.v1.UpdateCloudInstanceActionOrBuilder { @@ -764,7 +842,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateCloudInstanceAction_fieldAccessorTable @@ -778,14 +856,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getAutoscalingConfigFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetAutoscalingConfigFieldBuilder(); } } @@ -804,6 +882,7 @@ public Builder clear() { autoscalingConfigBuilder_ = null; } internalGetMutableLabels().clear(); + edition_ = 0; return this; } @@ -870,42 +949,12 @@ private void buildPartial0(com.google.spanner.executor.v1.UpdateCloudInstanceAct result.labels_ = internalGetLabels(); result.labels_.makeImmutable(); } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.edition_ = edition_; + } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.UpdateCloudInstanceAction) { @@ -945,6 +994,9 @@ public Builder mergeFrom(com.google.spanner.executor.v1.UpdateCloudInstanceActio } internalGetMutableLabels().mergeFrom(other.internalGetLabels()); bitField0_ |= 0x00000040; + if (other.edition_ != 0) { + setEditionValue(other.getEditionValue()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1016,10 +1068,16 @@ public Builder mergeFrom( case 58: { input.readMessage( - getAutoscalingConfigFieldBuilder().getBuilder(), extensionRegistry); + internalGetAutoscalingConfigFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 58 + case 64: + { + edition_ = input.readEnum(); + bitField0_ |= 0x00000080; + break; + } // case 64 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1040,6 +1098,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object instanceId_ = ""; + /** * * @@ -1062,6 +1121,7 @@ public java.lang.String getInstanceId() { return (java.lang.String) ref; } } + /** * * @@ -1084,6 +1144,7 @@ public com.google.protobuf.ByteString getInstanceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1105,6 +1166,7 @@ public Builder setInstanceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1122,6 +1184,7 @@ public Builder clearInstanceId() { onChanged(); return this; } + /** * * @@ -1146,6 +1209,7 @@ public Builder setInstanceIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -1168,6 +1232,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -1190,6 +1255,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1211,6 +1277,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1228,6 +1295,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1252,6 +1320,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object displayName_ = ""; + /** * * @@ -1267,6 +1336,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { public boolean hasDisplayName() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1290,6 +1360,7 @@ public java.lang.String getDisplayName() { return (java.lang.String) ref; } } + /** * * @@ -1313,6 +1384,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1335,6 +1407,7 @@ public Builder setDisplayName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1353,6 +1426,7 @@ public Builder clearDisplayName() { onChanged(); return this; } + /** * * @@ -1378,6 +1452,7 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { } private int nodeCount_; + /** * * @@ -1394,6 +1469,7 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { public boolean hasNodeCount() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1410,6 +1486,7 @@ public boolean hasNodeCount() { public int getNodeCount() { return nodeCount_; } + /** * * @@ -1430,6 +1507,7 @@ public Builder setNodeCount(int value) { onChanged(); return this; } + /** * * @@ -1450,6 +1528,7 @@ public Builder clearNodeCount() { } private int processingUnits_; + /** * * @@ -1466,6 +1545,7 @@ public Builder clearNodeCount() { public boolean hasProcessingUnits() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -1482,6 +1562,7 @@ public boolean hasProcessingUnits() { public int getProcessingUnits() { return processingUnits_; } + /** * * @@ -1502,6 +1583,7 @@ public Builder setProcessingUnits(int value) { onChanged(); return this; } + /** * * @@ -1522,11 +1604,12 @@ public Builder clearProcessingUnits() { } private com.google.spanner.admin.instance.v1.AutoscalingConfig autoscalingConfig_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> autoscalingConfigBuilder_; + /** * * @@ -1544,6 +1627,7 @@ public Builder clearProcessingUnits() { public boolean hasAutoscalingConfig() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1567,6 +1651,7 @@ public com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConf return autoscalingConfigBuilder_.getMessage(); } } + /** * * @@ -1593,6 +1678,7 @@ public Builder setAutoscalingConfig( onChanged(); return this; } + /** * * @@ -1616,6 +1702,7 @@ public Builder setAutoscalingConfig( onChanged(); return this; } + /** * * @@ -1648,6 +1735,7 @@ public Builder mergeAutoscalingConfig( } return this; } + /** * * @@ -1670,6 +1758,7 @@ public Builder clearAutoscalingConfig() { onChanged(); return this; } + /** * * @@ -1686,8 +1775,9 @@ public Builder clearAutoscalingConfig() { getAutoscalingConfigBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getAutoscalingConfigFieldBuilder().getBuilder(); + return internalGetAutoscalingConfigFieldBuilder().getBuilder(); } + /** * * @@ -1710,6 +1800,7 @@ public Builder clearAutoscalingConfig() { : autoscalingConfig_; } } + /** * * @@ -1722,14 +1813,14 @@ public Builder clearAutoscalingConfig() { * optional .google.spanner.admin.instance.v1.AutoscalingConfig autoscaling_config = 7; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder> - getAutoscalingConfigFieldBuilder() { + internalGetAutoscalingConfigFieldBuilder() { if (autoscalingConfigBuilder_ == null) { autoscalingConfigBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.admin.instance.v1.AutoscalingConfig, com.google.spanner.admin.instance.v1.AutoscalingConfig.Builder, com.google.spanner.admin.instance.v1.AutoscalingConfigOrBuilder>( @@ -1764,6 +1855,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -1780,12 +1872,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(); } + /** * * @@ -1799,6 +1893,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -1819,6 +1914,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1845,6 +1941,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -1861,12 +1958,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_ |= 0x00000040; return internalGetMutableLabels().getMutableMap(); } + /** * * @@ -1887,6 +1986,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000040; return this; } + /** * * @@ -1902,15 +2002,101 @@ public Builder putAllLabels(java.util.Map va return this; } + private int edition_ = 0; + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The enum numeric value on the wire for edition. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public int getEditionValue() { + return edition_; } + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @param value The enum numeric value on the wire for edition to set. + * @return This builder for chaining. + */ + public Builder setEditionValue(int value) { + edition_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The edition. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public com.google.spanner.admin.instance.v1.Instance.Edition getEdition() { + com.google.spanner.admin.instance.v1.Instance.Edition result = + com.google.spanner.admin.instance.v1.Instance.Edition.forNumber(edition_); + return result == null + ? com.google.spanner.admin.instance.v1.Instance.Edition.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @param value The edition to set. + * @return This builder for chaining. + */ + public Builder setEdition(com.google.spanner.admin.instance.v1.Instance.Edition value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + edition_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The edition of the instance.
                                +     * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return This builder for chaining. + */ + public Builder clearEdition() { + bitField0_ = (bitField0_ & ~0x00000080); + edition_ = 0; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.UpdateCloudInstanceAction) diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java index 18c44a301c7..157043851e2 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface UpdateCloudInstanceActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.UpdateCloudInstanceAction) @@ -36,6 +38,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return The instanceId. */ java.lang.String getInstanceId(); + /** * * @@ -61,6 +64,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -87,6 +91,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return Whether the displayName field is set. */ boolean hasDisplayName(); + /** * * @@ -100,6 +105,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return The displayName. */ java.lang.String getDisplayName(); + /** * * @@ -127,6 +133,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return Whether the nodeCount field is set. */ boolean hasNodeCount(); + /** * * @@ -154,6 +161,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return Whether the processingUnits field is set. */ boolean hasProcessingUnits(); + /** * * @@ -183,6 +191,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return Whether the autoscalingConfig field is set. */ boolean hasAutoscalingConfig(); + /** * * @@ -198,6 +207,7 @@ public interface UpdateCloudInstanceActionOrBuilder * @return The autoscalingConfig. */ com.google.spanner.admin.instance.v1.AutoscalingConfig getAutoscalingConfig(); + /** * * @@ -222,6 +232,7 @@ public interface UpdateCloudInstanceActionOrBuilder * map<string, string> labels = 6; */ int getLabelsCount(); + /** * * @@ -232,9 +243,11 @@ public interface UpdateCloudInstanceActionOrBuilder * map<string, string> labels = 6; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -245,6 +258,7 @@ public interface UpdateCloudInstanceActionOrBuilder * map<string, string> labels = 6; */ java.util.Map getLabelsMap(); + /** * * @@ -259,6 +273,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * @@ -269,4 +284,30 @@ java.lang.String getLabelsOrDefault( * map<string, string> labels = 6; */ java.lang.String getLabelsOrThrow(java.lang.String key); + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The enum numeric value on the wire for edition. + */ + int getEditionValue(); + + /** + * + * + *
                                +   * The edition of the instance.
                                +   * 
                                + * + * .google.spanner.admin.instance.v1.Instance.Edition edition = 8; + * + * @return The edition. + */ + com.google.spanner.admin.instance.v1.Instance.Edition getEdition(); } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java index 5ee5522c645..26227dd965f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,14 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.UpdateUserInstanceConfigAction} */ -public final class UpdateUserInstanceConfigAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class UpdateUserInstanceConfigAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.UpdateUserInstanceConfigAction) UpdateUserInstanceConfigActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateUserInstanceConfigAction"); + } + // Use UpdateUserInstanceConfigAction.newBuilder() to construct. - private UpdateUserInstanceConfigAction( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + private UpdateUserInstanceConfigAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,12 +57,6 @@ private UpdateUserInstanceConfigAction() { displayName_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new UpdateUserInstanceConfigAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_descriptor; @@ -69,7 +75,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_fieldAccessorTable @@ -83,6 +89,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object userConfigId_ = ""; + /** * * @@ -106,6 +113,7 @@ public java.lang.String getUserConfigId() { return s; } } + /** * * @@ -134,6 +142,7 @@ public com.google.protobuf.ByteString getUserConfigIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -157,6 +166,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -185,6 +195,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object displayName_ = ""; + /** * * @@ -200,6 +211,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { public boolean hasDisplayName() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -223,6 +235,7 @@ public java.lang.String getDisplayName() { return s; } } + /** * * @@ -273,6 +286,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -289,12 +303,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(); } + /** * * @@ -308,6 +324,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -328,6 +345,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -363,16 +381,16 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userConfigId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, userConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(userConfigId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, userConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, displayName_); + com.google.protobuf.GeneratedMessage.writeString(output, 3, displayName_); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 4); getUnknownFields().writeTo(output); } @@ -383,14 +401,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userConfigId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, userConfigId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(userConfigId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, userConfigId_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectId_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, projectId_); } if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, displayName_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, displayName_); } for (java.util.Map.Entry entry : internalGetLabels().getMap().entrySet()) { @@ -490,38 +508,38 @@ public static com.google.spanner.executor.v1.UpdateUserInstanceConfigAction pars public static com.google.spanner.executor.v1.UpdateUserInstanceConfigAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateUserInstanceConfigAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateUserInstanceConfigAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateUserInstanceConfigAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.UpdateUserInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.UpdateUserInstanceConfigAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -545,10 +563,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -558,7 +577,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.UpdateUserInstanceConfigAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.UpdateUserInstanceConfigAction) com.google.spanner.executor.v1.UpdateUserInstanceConfigActionOrBuilder { @@ -590,7 +609,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_UpdateUserInstanceConfigAction_fieldAccessorTable @@ -602,7 +621,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi // Construct using com.google.spanner.executor.v1.UpdateUserInstanceConfigAction.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -670,39 +689,6 @@ private void buildPartial0( result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.UpdateUserInstanceConfigAction) { @@ -810,6 +796,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object userConfigId_ = ""; + /** * * @@ -832,6 +819,7 @@ public java.lang.String getUserConfigId() { return (java.lang.String) ref; } } + /** * * @@ -854,6 +842,7 @@ public com.google.protobuf.ByteString getUserConfigIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -875,6 +864,7 @@ public Builder setUserConfigId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -892,6 +882,7 @@ public Builder clearUserConfigId() { onChanged(); return this; } + /** * * @@ -916,6 +907,7 @@ public Builder setUserConfigIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object projectId_ = ""; + /** * * @@ -938,6 +930,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -960,6 +953,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -981,6 +975,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -998,6 +993,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1022,6 +1018,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object displayName_ = ""; + /** * * @@ -1036,6 +1033,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { public boolean hasDisplayName() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1058,6 +1056,7 @@ public java.lang.String getDisplayName() { return (java.lang.String) ref; } } + /** * * @@ -1080,6 +1079,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1101,6 +1101,7 @@ public Builder setDisplayName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1118,6 +1119,7 @@ public Builder clearDisplayName() { onChanged(); return this; } + /** * * @@ -1166,6 +1168,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -1182,12 +1185,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(); } + /** * * @@ -1201,6 +1206,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -1221,6 +1227,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1247,6 +1254,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -1263,12 +1271,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(); } + /** * * @@ -1289,6 +1299,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000008; return this; } + /** * * @@ -1304,17 +1315,6 @@ public Builder putAllLabels(java.util.Map va return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.UpdateUserInstanceConfigAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java index 2abc3cc3404..43305028a47 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface UpdateUserInstanceConfigActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.UpdateUserInstanceConfigAction) @@ -36,6 +38,7 @@ public interface UpdateUserInstanceConfigActionOrBuilder * @return The userConfigId. */ java.lang.String getUserConfigId(); + /** * * @@ -61,6 +64,7 @@ public interface UpdateUserInstanceConfigActionOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -86,6 +90,7 @@ public interface UpdateUserInstanceConfigActionOrBuilder * @return Whether the displayName field is set. */ boolean hasDisplayName(); + /** * * @@ -98,6 +103,7 @@ public interface UpdateUserInstanceConfigActionOrBuilder * @return The displayName. */ java.lang.String getDisplayName(); + /** * * @@ -121,6 +127,7 @@ public interface UpdateUserInstanceConfigActionOrBuilder * map<string, string> labels = 4; */ int getLabelsCount(); + /** * * @@ -131,9 +138,11 @@ public interface UpdateUserInstanceConfigActionOrBuilder * map<string, string> labels = 4; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -144,6 +153,7 @@ public interface UpdateUserInstanceConfigActionOrBuilder * map<string, string> labels = 4; */ java.util.Map getLabelsMap(); + /** * * @@ -158,6 +168,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java index 35e5b2c248b..7099245848a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.executor.v1.Value} */ -public final class Value extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Value extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.Value) ValueOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Value"); + } + // Use Value.newBuilder() to construct. - private Value(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Value(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private Value() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Value(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_Value_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_Value_fieldAccessorTable @@ -89,6 +96,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. @@ -140,6 +148,7 @@ public ValueTypeCase getValueTypeCase() { } public static final int IS_NULL_FIELD_NUMBER = 1; + /** * * @@ -155,6 +164,7 @@ public ValueTypeCase getValueTypeCase() { public boolean hasIsNull() { return valueTypeCase_ == 1; } + /** * * @@ -175,6 +185,7 @@ public boolean getIsNull() { } public static final int INT_VALUE_FIELD_NUMBER = 2; + /** * * @@ -191,6 +202,7 @@ public boolean getIsNull() { public boolean hasIntValue() { return valueTypeCase_ == 2; } + /** * * @@ -212,6 +224,7 @@ public long getIntValue() { } public static final int BOOL_VALUE_FIELD_NUMBER = 3; + /** * * @@ -227,6 +240,7 @@ public long getIntValue() { public boolean hasBoolValue() { return valueTypeCase_ == 3; } + /** * * @@ -247,6 +261,7 @@ public boolean getBoolValue() { } public static final int DOUBLE_VALUE_FIELD_NUMBER = 4; + /** * * @@ -263,6 +278,7 @@ public boolean getBoolValue() { public boolean hasDoubleValue() { return valueTypeCase_ == 4; } + /** * * @@ -284,6 +300,7 @@ public double getDoubleValue() { } public static final int BYTES_VALUE_FIELD_NUMBER = 5; + /** * * @@ -299,6 +316,7 @@ public double getDoubleValue() { public boolean hasBytesValue() { return valueTypeCase_ == 5; } + /** * * @@ -319,6 +337,7 @@ public com.google.protobuf.ByteString getBytesValue() { } public static final int STRING_VALUE_FIELD_NUMBER = 6; + /** * * @@ -333,6 +352,7 @@ public com.google.protobuf.ByteString getBytesValue() { public boolean hasStringValue() { return valueTypeCase_ == 6; } + /** * * @@ -360,6 +380,7 @@ public java.lang.String getStringValue() { return s; } } + /** * * @@ -389,6 +410,7 @@ public com.google.protobuf.ByteString getStringValueBytes() { } public static final int STRUCT_VALUE_FIELD_NUMBER = 7; + /** * * @@ -405,6 +427,7 @@ public com.google.protobuf.ByteString getStringValueBytes() { public boolean hasStructValue() { return valueTypeCase_ == 7; } + /** * * @@ -424,6 +447,7 @@ public com.google.spanner.executor.v1.ValueList getStructValue() { } return com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } + /** * * @@ -443,6 +467,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStructValueOrBuilder } public static final int TIMESTAMP_VALUE_FIELD_NUMBER = 8; + /** * * @@ -458,6 +483,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStructValueOrBuilder public boolean hasTimestampValue() { return valueTypeCase_ == 8; } + /** * * @@ -476,6 +502,7 @@ public com.google.protobuf.Timestamp getTimestampValue() { } return com.google.protobuf.Timestamp.getDefaultInstance(); } + /** * * @@ -494,6 +521,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { } public static final int DATE_DAYS_VALUE_FIELD_NUMBER = 9; + /** * * @@ -509,6 +537,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { public boolean hasDateDaysValue() { return valueTypeCase_ == 9; } + /** * * @@ -529,6 +558,7 @@ public int getDateDaysValue() { } public static final int IS_COMMIT_TIMESTAMP_FIELD_NUMBER = 10; + /** * * @@ -544,6 +574,7 @@ public int getDateDaysValue() { public boolean hasIsCommitTimestamp() { return valueTypeCase_ == 10; } + /** * * @@ -564,6 +595,7 @@ public boolean getIsCommitTimestamp() { } public static final int ARRAY_VALUE_FIELD_NUMBER = 11; + /** * * @@ -580,6 +612,7 @@ public boolean getIsCommitTimestamp() { public boolean hasArrayValue() { return valueTypeCase_ == 11; } + /** * * @@ -599,6 +632,7 @@ public com.google.spanner.executor.v1.ValueList getArrayValue() { } return com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } + /** * * @@ -619,6 +653,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getArrayValueOrBuilder( public static final int ARRAY_TYPE_FIELD_NUMBER = 12; private com.google.spanner.v1.Type arrayType_; + /** * * @@ -634,6 +669,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getArrayValueOrBuilder( public boolean hasArrayType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -649,6 +685,7 @@ public boolean hasArrayType() { public com.google.spanner.v1.Type getArrayType() { return arrayType_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : arrayType_; } + /** * * @@ -693,7 +730,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeBytes(5, (com.google.protobuf.ByteString) valueType_); } if (valueTypeCase_ == 6) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 6, valueType_); + com.google.protobuf.GeneratedMessage.writeString(output, 6, valueType_); } if (valueTypeCase_ == 7) { output.writeMessage(7, (com.google.spanner.executor.v1.ValueList) valueType_); @@ -748,7 +785,7 @@ public int getSerializedSize() { 5, (com.google.protobuf.ByteString) valueType_); } if (valueTypeCase_ == 6) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, valueType_); + size += com.google.protobuf.GeneratedMessage.computeStringSize(6, valueType_); } if (valueTypeCase_ == 7) { size += @@ -943,38 +980,38 @@ public static com.google.spanner.executor.v1.Value parseFrom( public static com.google.spanner.executor.v1.Value parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.Value parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.Value parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.Value parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.Value parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.Value parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -997,10 +1034,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1011,7 +1049,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.Value} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.Value) com.google.spanner.executor.v1.ValueOrBuilder { @@ -1021,7 +1059,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_Value_fieldAccessorTable @@ -1035,14 +1073,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getArrayTypeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetArrayTypeFieldBuilder(); } } @@ -1124,39 +1162,6 @@ private void buildPartialOneofs(com.google.spanner.executor.v1.Value result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.Value) { @@ -1300,13 +1305,15 @@ public Builder mergeFrom( } // case 50 case 58: { - input.readMessage(getStructValueFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStructValueFieldBuilder().getBuilder(), extensionRegistry); valueTypeCase_ = 7; break; } // case 58 case 66: { - input.readMessage(getTimestampValueFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTimestampValueFieldBuilder().getBuilder(), extensionRegistry); valueTypeCase_ = 8; break; } // case 66 @@ -1324,13 +1331,15 @@ public Builder mergeFrom( } // case 80 case 90: { - input.readMessage(getArrayValueFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetArrayValueFieldBuilder().getBuilder(), extensionRegistry); valueTypeCase_ = 11; break; } // case 90 case 98: { - input.readMessage(getArrayTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetArrayTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000800; break; } // case 98 @@ -1381,6 +1390,7 @@ public Builder clearValueType() { public boolean hasIsNull() { return valueTypeCase_ == 1; } + /** * * @@ -1398,6 +1408,7 @@ public boolean getIsNull() { } return false; } + /** * * @@ -1417,6 +1428,7 @@ public Builder setIsNull(boolean value) { onChanged(); return this; } + /** * * @@ -1452,6 +1464,7 @@ public Builder clearIsNull() { public boolean hasIntValue() { return valueTypeCase_ == 2; } + /** * * @@ -1470,6 +1483,7 @@ public long getIntValue() { } return 0L; } + /** * * @@ -1490,6 +1504,7 @@ public Builder setIntValue(long value) { onChanged(); return this; } + /** * * @@ -1525,6 +1540,7 @@ public Builder clearIntValue() { public boolean hasBoolValue() { return valueTypeCase_ == 3; } + /** * * @@ -1542,6 +1558,7 @@ public boolean getBoolValue() { } return false; } + /** * * @@ -1561,6 +1578,7 @@ public Builder setBoolValue(boolean value) { onChanged(); return this; } + /** * * @@ -1596,6 +1614,7 @@ public Builder clearBoolValue() { public boolean hasDoubleValue() { return valueTypeCase_ == 4; } + /** * * @@ -1614,6 +1633,7 @@ public double getDoubleValue() { } return 0D; } + /** * * @@ -1634,6 +1654,7 @@ public Builder setDoubleValue(double value) { onChanged(); return this; } + /** * * @@ -1669,6 +1690,7 @@ public Builder clearDoubleValue() { public boolean hasBytesValue() { return valueTypeCase_ == 5; } + /** * * @@ -1686,6 +1708,7 @@ public com.google.protobuf.ByteString getBytesValue() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -1707,6 +1730,7 @@ public Builder setBytesValue(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1742,6 +1766,7 @@ public Builder clearBytesValue() { public boolean hasStringValue() { return valueTypeCase_ == 6; } + /** * * @@ -1770,6 +1795,7 @@ public java.lang.String getStringValue() { return (java.lang.String) ref; } } + /** * * @@ -1798,6 +1824,7 @@ public com.google.protobuf.ByteString getStringValueBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1819,6 +1846,7 @@ public Builder setStringValue(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1838,6 +1866,7 @@ public Builder clearStringValue() { } return this; } + /** * * @@ -1861,11 +1890,12 @@ public Builder setStringValueBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> structValueBuilder_; + /** * * @@ -1882,6 +1912,7 @@ public Builder setStringValueBytes(com.google.protobuf.ByteString value) { public boolean hasStructValue() { return valueTypeCase_ == 7; } + /** * * @@ -1908,6 +1939,7 @@ public com.google.spanner.executor.v1.ValueList getStructValue() { return com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } } + /** * * @@ -1931,6 +1963,7 @@ public Builder setStructValue(com.google.spanner.executor.v1.ValueList value) { valueTypeCase_ = 7; return this; } + /** * * @@ -1952,6 +1985,7 @@ public Builder setStructValue( valueTypeCase_ = 7; return this; } + /** * * @@ -1985,6 +2019,7 @@ public Builder mergeStructValue(com.google.spanner.executor.v1.ValueList value) valueTypeCase_ = 7; return this; } + /** * * @@ -2011,6 +2046,7 @@ public Builder clearStructValue() { } return this; } + /** * * @@ -2022,8 +2058,9 @@ public Builder clearStructValue() { * .google.spanner.executor.v1.ValueList struct_value = 7; */ public com.google.spanner.executor.v1.ValueList.Builder getStructValueBuilder() { - return getStructValueFieldBuilder().getBuilder(); + return internalGetStructValueFieldBuilder().getBuilder(); } + /** * * @@ -2045,6 +2082,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStructValueOrBuilder return com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } } + /** * * @@ -2055,17 +2093,17 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStructValueOrBuilder * * .google.spanner.executor.v1.ValueList struct_value = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getStructValueFieldBuilder() { + internalGetStructValueFieldBuilder() { if (structValueBuilder_ == null) { if (!(valueTypeCase_ == 7)) { valueType_ = com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } structValueBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -2079,11 +2117,12 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStructValueOrBuilder return structValueBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> timestampValueBuilder_; + /** * * @@ -2099,6 +2138,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getStructValueOrBuilder public boolean hasTimestampValue() { return valueTypeCase_ == 8; } + /** * * @@ -2124,6 +2164,7 @@ public com.google.protobuf.Timestamp getTimestampValue() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -2146,6 +2187,7 @@ public Builder setTimestampValue(com.google.protobuf.Timestamp value) { valueTypeCase_ = 8; return this; } + /** * * @@ -2165,6 +2207,7 @@ public Builder setTimestampValue(com.google.protobuf.Timestamp.Builder builderFo valueTypeCase_ = 8; return this; } + /** * * @@ -2196,6 +2239,7 @@ public Builder mergeTimestampValue(com.google.protobuf.Timestamp value) { valueTypeCase_ = 8; return this; } + /** * * @@ -2221,6 +2265,7 @@ public Builder clearTimestampValue() { } return this; } + /** * * @@ -2231,8 +2276,9 @@ public Builder clearTimestampValue() { * .google.protobuf.Timestamp timestamp_value = 8; */ public com.google.protobuf.Timestamp.Builder getTimestampValueBuilder() { - return getTimestampValueFieldBuilder().getBuilder(); + return internalGetTimestampValueFieldBuilder().getBuilder(); } + /** * * @@ -2253,6 +2299,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -2262,17 +2309,17 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { * * .google.protobuf.Timestamp timestamp_value = 8; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getTimestampValueFieldBuilder() { + internalGetTimestampValueFieldBuilder() { if (timestampValueBuilder_ == null) { if (!(valueTypeCase_ == 8)) { valueType_ = com.google.protobuf.Timestamp.getDefaultInstance(); } timestampValueBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2298,6 +2345,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { public boolean hasDateDaysValue() { return valueTypeCase_ == 9; } + /** * * @@ -2315,6 +2363,7 @@ public int getDateDaysValue() { } return 0; } + /** * * @@ -2334,6 +2383,7 @@ public Builder setDateDaysValue(int value) { onChanged(); return this; } + /** * * @@ -2368,6 +2418,7 @@ public Builder clearDateDaysValue() { public boolean hasIsCommitTimestamp() { return valueTypeCase_ == 10; } + /** * * @@ -2385,6 +2436,7 @@ public boolean getIsCommitTimestamp() { } return false; } + /** * * @@ -2404,6 +2456,7 @@ public Builder setIsCommitTimestamp(boolean value) { onChanged(); return this; } + /** * * @@ -2424,11 +2477,12 @@ public Builder clearIsCommitTimestamp() { return this; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> arrayValueBuilder_; + /** * * @@ -2445,6 +2499,7 @@ public Builder clearIsCommitTimestamp() { public boolean hasArrayValue() { return valueTypeCase_ == 11; } + /** * * @@ -2471,6 +2526,7 @@ public com.google.spanner.executor.v1.ValueList getArrayValue() { return com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } } + /** * * @@ -2494,6 +2550,7 @@ public Builder setArrayValue(com.google.spanner.executor.v1.ValueList value) { valueTypeCase_ = 11; return this; } + /** * * @@ -2514,6 +2571,7 @@ public Builder setArrayValue(com.google.spanner.executor.v1.ValueList.Builder bu valueTypeCase_ = 11; return this; } + /** * * @@ -2547,6 +2605,7 @@ public Builder mergeArrayValue(com.google.spanner.executor.v1.ValueList value) { valueTypeCase_ = 11; return this; } + /** * * @@ -2573,6 +2632,7 @@ public Builder clearArrayValue() { } return this; } + /** * * @@ -2584,8 +2644,9 @@ public Builder clearArrayValue() { * .google.spanner.executor.v1.ValueList array_value = 11; */ public com.google.spanner.executor.v1.ValueList.Builder getArrayValueBuilder() { - return getArrayValueFieldBuilder().getBuilder(); + return internalGetArrayValueFieldBuilder().getBuilder(); } + /** * * @@ -2607,6 +2668,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getArrayValueOrBuilder( return com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } } + /** * * @@ -2617,17 +2679,17 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getArrayValueOrBuilder( * * .google.spanner.executor.v1.ValueList array_value = 11; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder> - getArrayValueFieldBuilder() { + internalGetArrayValueFieldBuilder() { if (arrayValueBuilder_ == null) { if (!(valueTypeCase_ == 11)) { valueType_ = com.google.spanner.executor.v1.ValueList.getDefaultInstance(); } arrayValueBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.ValueList, com.google.spanner.executor.v1.ValueList.Builder, com.google.spanner.executor.v1.ValueListOrBuilder>( @@ -2642,11 +2704,12 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getArrayValueOrBuilder( } private com.google.spanner.v1.Type arrayType_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> arrayTypeBuilder_; + /** * * @@ -2661,6 +2724,7 @@ public com.google.spanner.executor.v1.ValueListOrBuilder getArrayValueOrBuilder( public boolean hasArrayType() { return ((bitField0_ & 0x00000800) != 0); } + /** * * @@ -2679,6 +2743,7 @@ public com.google.spanner.v1.Type getArrayType() { return arrayTypeBuilder_.getMessage(); } } + /** * * @@ -2701,6 +2766,7 @@ public Builder setArrayType(com.google.spanner.v1.Type value) { onChanged(); return this; } + /** * * @@ -2720,6 +2786,7 @@ public Builder setArrayType(com.google.spanner.v1.Type.Builder builderForValue) onChanged(); return this; } + /** * * @@ -2747,6 +2814,7 @@ public Builder mergeArrayType(com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -2766,6 +2834,7 @@ public Builder clearArrayType() { onChanged(); return this; } + /** * * @@ -2778,8 +2847,9 @@ public Builder clearArrayType() { public com.google.spanner.v1.Type.Builder getArrayTypeBuilder() { bitField0_ |= 0x00000800; onChanged(); - return getArrayTypeFieldBuilder().getBuilder(); + return internalGetArrayTypeFieldBuilder().getBuilder(); } + /** * * @@ -2796,6 +2866,7 @@ public com.google.spanner.v1.TypeOrBuilder getArrayTypeOrBuilder() { return arrayType_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : arrayType_; } } + /** * * @@ -2805,14 +2876,14 @@ public com.google.spanner.v1.TypeOrBuilder getArrayTypeOrBuilder() { * * optional .google.spanner.v1.Type array_type = 12; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> - getArrayTypeFieldBuilder() { + internalGetArrayTypeFieldBuilder() { if (arrayTypeBuilder_ == null) { arrayTypeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder>( @@ -2822,17 +2893,6 @@ public com.google.spanner.v1.TypeOrBuilder getArrayTypeOrBuilder() { return arrayTypeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.Value) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java index f6ffdcb4754..f50220b69d3 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.executor.v1.ValueList} */ -public final class ValueList extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ValueList extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.ValueList) ValueListOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ValueList"); + } + // Use ValueList.newBuilder() to construct. - private ValueList(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ValueList(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private ValueList() { value_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ValueList(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ValueList_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ValueList_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List value_; + /** * * @@ -80,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getValueList() { return value_; } + /** * * @@ -94,6 +103,7 @@ public java.util.List getValueList() { getValueOrBuilderList() { return value_; } + /** * * @@ -107,6 +117,7 @@ public java.util.List getValueList() { public int getValueCount() { return value_.size(); } + /** * * @@ -120,6 +131,7 @@ public int getValueCount() { public com.google.spanner.executor.v1.Value getValue(int index) { return value_.get(index); } + /** * * @@ -236,38 +248,38 @@ public static com.google.spanner.executor.v1.ValueList parseFrom( public static com.google.spanner.executor.v1.ValueList parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ValueList parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ValueList parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ValueList parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.ValueList parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.ValueList parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -290,10 +302,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -303,7 +316,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.ValueList} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.ValueList) com.google.spanner.executor.v1.ValueListOrBuilder { @@ -313,7 +326,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_ValueList_fieldAccessorTable @@ -325,7 +338,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.executor.v1.ValueList.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -391,39 +404,6 @@ private void buildPartial0(com.google.spanner.executor.v1.ValueList result) { int from_bitField0_ = bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.ValueList) { @@ -455,8 +435,8 @@ public Builder mergeFrom(com.google.spanner.executor.v1.ValueList other) { value_ = other.value_; bitField0_ = (bitField0_ & ~0x00000001); valueBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getValueFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetValueFieldBuilder() : null; } else { valueBuilder_.addAllMessages(other.value_); @@ -531,7 +511,7 @@ private void ensureValueIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.Value, com.google.spanner.executor.v1.Value.Builder, com.google.spanner.executor.v1.ValueOrBuilder> @@ -553,6 +533,7 @@ public java.util.List getValueList() { return valueBuilder_.getMessageList(); } } + /** * * @@ -569,6 +550,7 @@ public int getValueCount() { return valueBuilder_.getCount(); } } + /** * * @@ -585,6 +567,7 @@ public com.google.spanner.executor.v1.Value getValue(int index) { return valueBuilder_.getMessage(index); } } + /** * * @@ -607,6 +590,7 @@ public Builder setValue(int index, com.google.spanner.executor.v1.Value value) { } return this; } + /** * * @@ -627,6 +611,7 @@ public Builder setValue( } return this; } + /** * * @@ -649,6 +634,7 @@ public Builder addValue(com.google.spanner.executor.v1.Value value) { } return this; } + /** * * @@ -671,6 +657,7 @@ public Builder addValue(int index, com.google.spanner.executor.v1.Value value) { } return this; } + /** * * @@ -690,6 +677,7 @@ public Builder addValue(com.google.spanner.executor.v1.Value.Builder builderForV } return this; } + /** * * @@ -710,6 +698,7 @@ public Builder addValue( } return this; } + /** * * @@ -730,6 +719,7 @@ public Builder addAllValue( } return this; } + /** * * @@ -749,6 +739,7 @@ public Builder clearValue() { } return this; } + /** * * @@ -768,6 +759,7 @@ public Builder removeValue(int index) { } return this; } + /** * * @@ -778,8 +770,9 @@ public Builder removeValue(int index) { * repeated .google.spanner.executor.v1.Value value = 1; */ public com.google.spanner.executor.v1.Value.Builder getValueBuilder(int index) { - return getValueFieldBuilder().getBuilder(index); + return internalGetValueFieldBuilder().getBuilder(index); } + /** * * @@ -796,6 +789,7 @@ public com.google.spanner.executor.v1.ValueOrBuilder getValueOrBuilder(int index return valueBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -813,6 +807,7 @@ public com.google.spanner.executor.v1.ValueOrBuilder getValueOrBuilder(int index return java.util.Collections.unmodifiableList(value_); } } + /** * * @@ -823,9 +818,10 @@ public com.google.spanner.executor.v1.ValueOrBuilder getValueOrBuilder(int index * repeated .google.spanner.executor.v1.Value value = 1; */ public com.google.spanner.executor.v1.Value.Builder addValueBuilder() { - return getValueFieldBuilder() + return internalGetValueFieldBuilder() .addBuilder(com.google.spanner.executor.v1.Value.getDefaultInstance()); } + /** * * @@ -836,9 +832,10 @@ public com.google.spanner.executor.v1.Value.Builder addValueBuilder() { * repeated .google.spanner.executor.v1.Value value = 1; */ public com.google.spanner.executor.v1.Value.Builder addValueBuilder(int index) { - return getValueFieldBuilder() + return internalGetValueFieldBuilder() .addBuilder(index, com.google.spanner.executor.v1.Value.getDefaultInstance()); } + /** * * @@ -849,17 +846,17 @@ public com.google.spanner.executor.v1.Value.Builder addValueBuilder(int index) { * repeated .google.spanner.executor.v1.Value value = 1; */ public java.util.List getValueBuilderList() { - return getValueFieldBuilder().getBuilderList(); + return internalGetValueFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.Value, com.google.spanner.executor.v1.Value.Builder, com.google.spanner.executor.v1.ValueOrBuilder> - getValueFieldBuilder() { + internalGetValueFieldBuilder() { if (valueBuilder_ == null) { valueBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.executor.v1.Value, com.google.spanner.executor.v1.Value.Builder, com.google.spanner.executor.v1.ValueOrBuilder>( @@ -869,17 +866,6 @@ public java.util.List getValueBuil return valueBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.ValueList) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java index 2175ae24462..0b85fa20459 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ValueListOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.ValueList) @@ -34,6 +36,7 @@ public interface ValueListOrBuilder * repeated .google.spanner.executor.v1.Value value = 1; */ java.util.List getValueList(); + /** * * @@ -44,6 +47,7 @@ public interface ValueListOrBuilder * repeated .google.spanner.executor.v1.Value value = 1; */ com.google.spanner.executor.v1.Value getValue(int index); + /** * * @@ -54,6 +58,7 @@ public interface ValueListOrBuilder * repeated .google.spanner.executor.v1.Value value = 1; */ int getValueCount(); + /** * * @@ -64,6 +69,7 @@ public interface ValueListOrBuilder * repeated .google.spanner.executor.v1.Value value = 1; */ java.util.List getValueOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java index c2ed511edc7..28d08170bf8 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface ValueOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.Value) @@ -36,6 +38,7 @@ public interface ValueOrBuilder * @return Whether the isNull field is set. */ boolean hasIsNull(); + /** * * @@ -62,6 +65,7 @@ public interface ValueOrBuilder * @return Whether the intValue field is set. */ boolean hasIntValue(); + /** * * @@ -88,6 +92,7 @@ public interface ValueOrBuilder * @return Whether the boolValue field is set. */ boolean hasBoolValue(); + /** * * @@ -114,6 +119,7 @@ public interface ValueOrBuilder * @return Whether the doubleValue field is set. */ boolean hasDoubleValue(); + /** * * @@ -140,6 +146,7 @@ public interface ValueOrBuilder * @return Whether the bytesValue field is set. */ boolean hasBytesValue(); + /** * * @@ -165,6 +172,7 @@ public interface ValueOrBuilder * @return Whether the stringValue field is set. */ boolean hasStringValue(); + /** * * @@ -177,6 +185,7 @@ public interface ValueOrBuilder * @return The stringValue. */ java.lang.String getStringValue(); + /** * * @@ -203,6 +212,7 @@ public interface ValueOrBuilder * @return Whether the structValue field is set. */ boolean hasStructValue(); + /** * * @@ -216,6 +226,7 @@ public interface ValueOrBuilder * @return The structValue. */ com.google.spanner.executor.v1.ValueList getStructValue(); + /** * * @@ -240,6 +251,7 @@ public interface ValueOrBuilder * @return Whether the timestampValue field is set. */ boolean hasTimestampValue(); + /** * * @@ -252,6 +264,7 @@ public interface ValueOrBuilder * @return The timestampValue. */ com.google.protobuf.Timestamp getTimestampValue(); + /** * * @@ -275,6 +288,7 @@ public interface ValueOrBuilder * @return Whether the dateDaysValue field is set. */ boolean hasDateDaysValue(); + /** * * @@ -300,6 +314,7 @@ public interface ValueOrBuilder * @return Whether the isCommitTimestamp field is set. */ boolean hasIsCommitTimestamp(); + /** * * @@ -326,6 +341,7 @@ public interface ValueOrBuilder * @return Whether the arrayValue field is set. */ boolean hasArrayValue(); + /** * * @@ -339,6 +355,7 @@ public interface ValueOrBuilder * @return The arrayValue. */ com.google.spanner.executor.v1.ValueList getArrayValue(); + /** * * @@ -363,6 +380,7 @@ public interface ValueOrBuilder * @return Whether the arrayType field is set. */ boolean hasArrayType(); + /** * * @@ -375,6 +393,7 @@ public interface ValueOrBuilder * @return The arrayType. */ com.google.spanner.v1.Type getArrayType(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java index a2069057848..572253538a3 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; /** @@ -29,31 +30,37 @@ * * Protobuf type {@code google.spanner.executor.v1.WriteMutationsAction} */ -public final class WriteMutationsAction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class WriteMutationsAction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.executor.v1.WriteMutationsAction) WriteMutationsActionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "WriteMutationsAction"); + } + // Use WriteMutationsAction.newBuilder() to construct. - private WriteMutationsAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private WriteMutationsAction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private WriteMutationsAction() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new WriteMutationsAction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_WriteMutationsAction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_WriteMutationsAction_fieldAccessorTable @@ -65,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int MUTATION_FIELD_NUMBER = 1; private com.google.spanner.executor.v1.MutationAction mutation_; + /** * * @@ -80,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasMutation() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -97,6 +106,7 @@ public com.google.spanner.executor.v1.MutationAction getMutation() { ? com.google.spanner.executor.v1.MutationAction.getDefaultInstance() : mutation_; } + /** * * @@ -219,38 +229,38 @@ public static com.google.spanner.executor.v1.WriteMutationsAction parseFrom( public static com.google.spanner.executor.v1.WriteMutationsAction parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.WriteMutationsAction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.WriteMutationsAction parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.WriteMutationsAction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.executor.v1.WriteMutationsAction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.executor.v1.WriteMutationsAction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -273,10 +283,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -287,7 +298,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.executor.v1.WriteMutationsAction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.executor.v1.WriteMutationsAction) com.google.spanner.executor.v1.WriteMutationsActionOrBuilder { @@ -297,7 +308,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.executor.v1.CloudExecutorProto .internal_static_google_spanner_executor_v1_WriteMutationsAction_fieldAccessorTable @@ -311,14 +322,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getMutationFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMutationFieldBuilder(); } } @@ -375,39 +386,6 @@ private void buildPartial0(com.google.spanner.executor.v1.WriteMutationsAction r result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.executor.v1.WriteMutationsAction) { @@ -452,7 +430,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getMutationFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMutationFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -476,11 +455,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.executor.v1.MutationAction mutation_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction, com.google.spanner.executor.v1.MutationAction.Builder, com.google.spanner.executor.v1.MutationActionOrBuilder> mutationBuilder_; + /** * * @@ -495,6 +475,7 @@ public Builder mergeFrom( public boolean hasMutation() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -515,6 +496,7 @@ public com.google.spanner.executor.v1.MutationAction getMutation() { return mutationBuilder_.getMessage(); } } + /** * * @@ -537,6 +519,7 @@ public Builder setMutation(com.google.spanner.executor.v1.MutationAction value) onChanged(); return this; } + /** * * @@ -557,6 +540,7 @@ public Builder setMutation( onChanged(); return this; } + /** * * @@ -584,6 +568,7 @@ public Builder mergeMutation(com.google.spanner.executor.v1.MutationAction value } return this; } + /** * * @@ -603,6 +588,7 @@ public Builder clearMutation() { onChanged(); return this; } + /** * * @@ -615,8 +601,9 @@ public Builder clearMutation() { public com.google.spanner.executor.v1.MutationAction.Builder getMutationBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getMutationFieldBuilder().getBuilder(); + return internalGetMutationFieldBuilder().getBuilder(); } + /** * * @@ -635,6 +622,7 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild : mutation_; } } + /** * * @@ -644,14 +632,14 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild * * .google.spanner.executor.v1.MutationAction mutation = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction, com.google.spanner.executor.v1.MutationAction.Builder, com.google.spanner.executor.v1.MutationActionOrBuilder> - getMutationFieldBuilder() { + internalGetMutationFieldBuilder() { if (mutationBuilder_ == null) { mutationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.executor.v1.MutationAction, com.google.spanner.executor.v1.MutationAction.Builder, com.google.spanner.executor.v1.MutationActionOrBuilder>( @@ -661,17 +649,6 @@ public com.google.spanner.executor.v1.MutationActionOrBuilder getMutationOrBuild return mutationBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.executor.v1.WriteMutationsAction) } diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java index 593821a9ace..f8a67ee7a2b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/executor/v1/cloud_executor.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.executor.v1; +@com.google.protobuf.Generated public interface WriteMutationsActionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.executor.v1.WriteMutationsAction) @@ -36,6 +38,7 @@ public interface WriteMutationsActionOrBuilder * @return Whether the mutation field is set. */ boolean hasMutation(); + /** * * @@ -48,6 +51,7 @@ public interface WriteMutationsActionOrBuilder * @return The mutation. */ com.google.spanner.executor.v1.MutationAction getMutation(); + /** * * diff --git a/proto-google-cloud-spanner-executor-v1/src/main/proto/google/spanner/executor/v1/cloud_executor.proto b/proto-google-cloud-spanner-executor-v1/src/main/proto/google/spanner/executor/v1/cloud_executor.proto index 05d662a5a1d..5ca3b25ac2a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/proto/google/spanner/executor/v1/cloud_executor.proto +++ b/proto-google-cloud-spanner-executor-v1/src/main/proto/google/spanner/executor/v1/cloud_executor.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -135,6 +135,9 @@ message SpannerAction { // Query cancellation action for testing the cancellation of a query. QueryCancellationAction query_cancellation = 51; + + // Action to adapt a message. + AdaptMessageAction adapt_message = 52; } } @@ -185,12 +188,22 @@ message DmlAction { // Whether to autocommit the transaction after executing the DML statement, // if the Executor supports autocommit. optional bool autocommit_if_supported = 2; + + // Whether to set this DML statement as the last statement in the + // transaction. The transaction should be committed after processing this DML + // statement. + optional bool last_statement = 3; } // Batch of DML statements invoked using batched execution. message BatchDmlAction { // DML statements. repeated QueryAction updates = 1; + + // Whether to set this request with the last statement option in the + // transaction. The transaction should be committed after processing this + // request. + optional bool last_statements = 2; } // Value represents a single value that can be read or written to/from @@ -396,7 +409,8 @@ message StartTransactionAction { // testing. string transaction_seed = 3; - // Execution options (e.g., whether transaction is opaque, optimistic). + // Execution options (e.g., whether transaction is opaque, optimistic, + // excluded from change streams). optional TransactionExecutionOptions execution_options = 4; } @@ -460,10 +474,29 @@ message ColumnMetadata { google.spanner.v1.Type type = 2; } -// Options for executing the transaction. message TransactionExecutionOptions { // Whether optimistic concurrency should be used to execute this transaction. bool optimistic = 1; + + // Whether traffic from this transaction will be excluded from tracking change + // streams with allow_txn_exclusion=true. + bool exclude_from_change_streams = 2; + + // Whether serializable isolation with optimistic mode concurrency should be + // used to execute this transaction. + bool serializable_optimistic = 3; + + // Whether snapshot isolation with optimistic mode concurrency should be used + // to execute this transaction. + bool snapshot_isolation_optimistic = 4; + + // Whether snapshot isolation with pessimistic mode concurrency should be used + // to execute this transaction. + bool snapshot_isolation_pessimistic = 5; + + // Whether to exclude mutations of this transaction from the allowed tracking + // change streams. + bool exclude_txn_from_change_streams = 6; } // FinishTransactionAction defines an action of finishing a transaction. @@ -573,6 +606,9 @@ message AdminAction { // Action that changes quorum of a Cloud Spanner database. ChangeQuorumCloudDatabaseAction change_quorum_cloud_database = 28; + + // Action that adds splits to a Cloud Spanner database. + AddSplitPointsAction add_split_points = 29; } } @@ -663,6 +699,9 @@ message CreateCloudInstanceAction { // labels. map labels = 5; + + // The edition of the instance. + google.spanner.admin.instance.v1.Instance.Edition edition = 8; } // Action that updates a Cloud Spanner instance. @@ -693,6 +732,9 @@ message UpdateCloudInstanceAction { // labels. map labels = 6; + + // The edition of the instance. + google.spanner.admin.instance.v1.Instance.Edition edition = 8; } // Action that deletes a Cloud Spanner instance. @@ -787,6 +829,29 @@ message ChangeQuorumCloudDatabaseAction { repeated string serving_locations = 2; } +// A single Adapt message request. +message AdaptMessageAction { + // The fully qualified uri of the database to send AdaptMessage to. + string database_uri = 1; + + // The protocol to use for the request. + string protocol = 2; + + // The payload of the request. + bytes payload = 3; + + // Attachments to be sent with the request. + map attachments = 4; + + // The query to be sent with the request. + string query = 5; + + // If true, the action will send a Prepare request first and then an + // Execute request right after to execute the query. This is only supported + // for Cloud Client path. + bool prepare_then_execute = 6; +} + // Action that lists Cloud Spanner databases. message ListCloudDatabasesAction { // Cloud project ID, e.g. "spanner-cloud-systest". @@ -805,7 +870,7 @@ message ListCloudDatabasesAction { string page_token = 4; } -// Action that lists Cloud Spanner databases. +// Action that lists Cloud Spanner instances. message ListCloudInstancesAction { // Cloud project ID, e.g. "spanner-cloud-systest". string project_id = 1; @@ -1067,6 +1132,21 @@ message CancelOperationAction { string operation = 1; } +// Action that adds a split point to a Cloud Spanner database. +message AddSplitPointsAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 2; + + // Cloud database ID (not full path), e.g. "db0". + string database_id = 3; + + // The split points to add. + repeated google.spanner.admin.database.v1.SplitPoints split_points = 4; +} + // Starts a batch read-only transaction in executor. Successful outcomes of this // action will contain batch_txn_id--the identificator that can be used to start // the same transaction in other Executors to parallelize partition processing. @@ -1260,6 +1340,10 @@ message SpannerActionOutcome { // Change stream records returned by a change stream query. repeated ChangeStreamRecord change_stream_records = 10; + + // If not zero, it indicates the read timestamp to use for validating + // the SnapshotIsolation transaction. + optional int64 snapshot_isolation_txn_read_timestamp = 11; } // AdminResult contains admin action results, for database/backup/operation. diff --git a/proto-google-cloud-spanner-v1/clirr-ignored-differences.xml b/proto-google-cloud-spanner-v1/clirr-ignored-differences.xml index 89fd05b2e3c..7cb9c078e67 100644 --- a/proto-google-cloud-spanner-v1/clirr-ignored-differences.xml +++ b/proto-google-cloud-spanner-v1/clirr-ignored-differences.xml @@ -17,7 +17,63 @@ boolean has*(*)
                                - + + + + 5001 + com/google/spanner/v1/* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/v1/*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/v1/*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/v1/*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/v1/*$*$* + com/google/protobuf/GeneratedMessage + + + 5001 + com/google/spanner/v1/*$*$*$Builder + com/google/protobuf/GeneratedMessage$Builder + + + 5001 + com/google/spanner/v1/*Proto + com/google/protobuf/GeneratedFile + + + + 7005 + com/google/spanner/v1/** + * newBuilderForType(*) + ** + + + + 7006 + com/google/spanner/v1/** + * internalGetFieldAccessorTable() + ** + + + + 7014 + com/google/spanner/v1/** + * getDescriptor() + 7006 com/google/spanner/v1/** diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml index 8c3dc7a8adf..1c96a87f5cb 100644 --- a/proto-google-cloud-spanner-v1/pom.xml +++ b/proto-google-cloud-spanner-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.82.0 + 6.113.1-SNAPSHOT proto-google-cloud-spanner-v1 PROTO library for proto-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.82.0 + 6.113.1-SNAPSHOT diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java index e84447e47b9..2fcfd868b58 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.BatchCreateSessionsRequest} */ -public final class BatchCreateSessionsRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BatchCreateSessionsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchCreateSessionsRequest) BatchCreateSessionsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BatchCreateSessionsRequest"); + } + // Use BatchCreateSessionsRequest.newBuilder() to construct. - private BatchCreateSessionsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BatchCreateSessionsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private BatchCreateSessionsRequest() { database_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchCreateSessionsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchCreateSessionsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchCreateSessionsRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -122,11 +131,12 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public static final int SESSION_TEMPLATE_FIELD_NUMBER = 2; private com.google.spanner.v1.Session sessionTemplate_; + /** * * *
                                -   * Parameters to be applied to each created session.
                                +   * Parameters to apply to each created session.
                                    * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -137,11 +147,12 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public boolean hasSessionTemplate() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -   * Parameters to be applied to each created session.
                                +   * Parameters to apply to each created session.
                                    * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -154,11 +165,12 @@ public com.google.spanner.v1.Session getSessionTemplate() { ? com.google.spanner.v1.Session.getDefaultInstance() : sessionTemplate_; } + /** * * *
                                -   * Parameters to be applied to each created session.
                                +   * Parameters to apply to each created session.
                                    * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -172,14 +184,15 @@ public com.google.spanner.v1.SessionOrBuilder getSessionTemplateOrBuilder() { public static final int SESSION_COUNT_FIELD_NUMBER = 3; private int sessionCount_ = 0; + /** * * *
                                -   * Required. The number of sessions to be created in this batch call.
                                -   * The API may return fewer than the requested number of sessions. If a
                                -   * specific number of sessions are desired, the client can make additional
                                -   * calls to BatchCreateSessions (adjusting
                                +   * Required. The number of sessions to be created in this batch call. At least
                                +   * one session is created. The API can return fewer than the requested number
                                +   * of sessions. If a specific number of sessions are desired, the client can
                                +   * make additional calls to `BatchCreateSessions` (adjusting
                                    * [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count]
                                    * as necessary).
                                    * 
                                @@ -207,8 +220,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getSessionTemplate()); @@ -225,8 +238,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSessionTemplate()); @@ -317,38 +330,38 @@ public static com.google.spanner.v1.BatchCreateSessionsRequest parseFrom( public static com.google.spanner.v1.BatchCreateSessionsRequest parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchCreateSessionsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchCreateSessionsRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchCreateSessionsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchCreateSessionsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchCreateSessionsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -371,10 +384,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -385,7 +399,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.BatchCreateSessionsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchCreateSessionsRequest) com.google.spanner.v1.BatchCreateSessionsRequestOrBuilder { @@ -395,7 +409,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchCreateSessionsRequest_fieldAccessorTable @@ -409,14 +423,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getSessionTemplateFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSessionTemplateFieldBuilder(); } } @@ -482,39 +496,6 @@ private void buildPartial0(com.google.spanner.v1.BatchCreateSessionsRequest resu result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.BatchCreateSessionsRequest) { @@ -573,7 +554,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getSessionTemplateFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetSessionTemplateFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -603,6 +585,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -627,6 +610,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -651,6 +635,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -674,6 +659,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -693,6 +679,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -719,16 +706,17 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.Session sessionTemplate_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> sessionTemplateBuilder_; + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -738,11 +726,12 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { public boolean hasSessionTemplate() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -758,11 +747,12 @@ public com.google.spanner.v1.Session getSessionTemplate() { return sessionTemplateBuilder_.getMessage(); } } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -780,11 +770,12 @@ public Builder setSessionTemplate(com.google.spanner.v1.Session value) { onChanged(); return this; } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -799,11 +790,12 @@ public Builder setSessionTemplate(com.google.spanner.v1.Session.Builder builderF onChanged(); return this; } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -826,11 +818,12 @@ public Builder mergeSessionTemplate(com.google.spanner.v1.Session value) { } return this; } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -845,11 +838,12 @@ public Builder clearSessionTemplate() { onChanged(); return this; } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -857,13 +851,14 @@ public Builder clearSessionTemplate() { public com.google.spanner.v1.Session.Builder getSessionTemplateBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getSessionTemplateFieldBuilder().getBuilder(); + return internalGetSessionTemplateFieldBuilder().getBuilder(); } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -877,23 +872,24 @@ public com.google.spanner.v1.SessionOrBuilder getSessionTemplateOrBuilder() { : sessionTemplate_; } } + /** * * *
                                -     * Parameters to be applied to each created session.
                                +     * Parameters to apply to each created session.
                                      * 
                                * * .google.spanner.v1.Session session_template = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> - getSessionTemplateFieldBuilder() { + internalGetSessionTemplateFieldBuilder() { if (sessionTemplateBuilder_ == null) { sessionTemplateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder>( @@ -904,14 +900,15 @@ public com.google.spanner.v1.SessionOrBuilder getSessionTemplateOrBuilder() { } private int sessionCount_; + /** * * *
                                -     * Required. The number of sessions to be created in this batch call.
                                -     * The API may return fewer than the requested number of sessions. If a
                                -     * specific number of sessions are desired, the client can make additional
                                -     * calls to BatchCreateSessions (adjusting
                                +     * Required. The number of sessions to be created in this batch call. At least
                                +     * one session is created. The API can return fewer than the requested number
                                +     * of sessions. If a specific number of sessions are desired, the client can
                                +     * make additional calls to `BatchCreateSessions` (adjusting
                                      * [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count]
                                      * as necessary).
                                      * 
                                @@ -924,14 +921,15 @@ public com.google.spanner.v1.SessionOrBuilder getSessionTemplateOrBuilder() { public int getSessionCount() { return sessionCount_; } + /** * * *
                                -     * Required. The number of sessions to be created in this batch call.
                                -     * The API may return fewer than the requested number of sessions. If a
                                -     * specific number of sessions are desired, the client can make additional
                                -     * calls to BatchCreateSessions (adjusting
                                +     * Required. The number of sessions to be created in this batch call. At least
                                +     * one session is created. The API can return fewer than the requested number
                                +     * of sessions. If a specific number of sessions are desired, the client can
                                +     * make additional calls to `BatchCreateSessions` (adjusting
                                      * [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count]
                                      * as necessary).
                                      * 
                                @@ -948,14 +946,15 @@ public Builder setSessionCount(int value) { onChanged(); return this; } + /** * * *
                                -     * Required. The number of sessions to be created in this batch call.
                                -     * The API may return fewer than the requested number of sessions. If a
                                -     * specific number of sessions are desired, the client can make additional
                                -     * calls to BatchCreateSessions (adjusting
                                +     * Required. The number of sessions to be created in this batch call. At least
                                +     * one session is created. The API can return fewer than the requested number
                                +     * of sessions. If a specific number of sessions are desired, the client can
                                +     * make additional calls to `BatchCreateSessions` (adjusting
                                      * [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count]
                                      * as necessary).
                                      * 
                                @@ -971,17 +970,6 @@ public Builder clearSessionCount() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchCreateSessionsRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java index 5ddcc68663c..d1978777181 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface BatchCreateSessionsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchCreateSessionsRequest) @@ -38,6 +40,7 @@ public interface BatchCreateSessionsRequestOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * @@ -57,7 +60,7 @@ public interface BatchCreateSessionsRequestOrBuilder * * *
                                -   * Parameters to be applied to each created session.
                                +   * Parameters to apply to each created session.
                                    * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -65,11 +68,12 @@ public interface BatchCreateSessionsRequestOrBuilder * @return Whether the sessionTemplate field is set. */ boolean hasSessionTemplate(); + /** * * *
                                -   * Parameters to be applied to each created session.
                                +   * Parameters to apply to each created session.
                                    * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -77,11 +81,12 @@ public interface BatchCreateSessionsRequestOrBuilder * @return The sessionTemplate. */ com.google.spanner.v1.Session getSessionTemplate(); + /** * * *
                                -   * Parameters to be applied to each created session.
                                +   * Parameters to apply to each created session.
                                    * 
                                * * .google.spanner.v1.Session session_template = 2; @@ -92,10 +97,10 @@ public interface BatchCreateSessionsRequestOrBuilder * * *
                                -   * Required. The number of sessions to be created in this batch call.
                                -   * The API may return fewer than the requested number of sessions. If a
                                -   * specific number of sessions are desired, the client can make additional
                                -   * calls to BatchCreateSessions (adjusting
                                +   * Required. The number of sessions to be created in this batch call. At least
                                +   * one session is created. The API can return fewer than the requested number
                                +   * of sessions. If a specific number of sessions are desired, the client can
                                +   * make additional calls to `BatchCreateSessions` (adjusting
                                    * [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count]
                                    * as necessary).
                                    * 
                                diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java index 97f934e25e9..2277f7f66f3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.BatchCreateSessionsResponse} */ -public final class BatchCreateSessionsResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BatchCreateSessionsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchCreateSessionsResponse) BatchCreateSessionsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BatchCreateSessionsResponse"); + } + // Use BatchCreateSessionsResponse.newBuilder() to construct. - private BatchCreateSessionsResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BatchCreateSessionsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private BatchCreateSessionsResponse() { session_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchCreateSessionsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchCreateSessionsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchCreateSessionsResponse_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List session_; + /** * * @@ -81,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getSessionList() { return session_; } + /** * * @@ -95,6 +104,7 @@ public java.util.List getSessionList() { getSessionOrBuilderList() { return session_; } + /** * * @@ -108,6 +118,7 @@ public java.util.List getSessionList() { public int getSessionCount() { return session_.size(); } + /** * * @@ -121,6 +132,7 @@ public int getSessionCount() { public com.google.spanner.v1.Session getSession(int index) { return session_.get(index); } + /** * * @@ -238,38 +250,38 @@ public static com.google.spanner.v1.BatchCreateSessionsResponse parseFrom( public static com.google.spanner.v1.BatchCreateSessionsResponse parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchCreateSessionsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchCreateSessionsResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchCreateSessionsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchCreateSessionsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchCreateSessionsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -292,10 +304,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -306,7 +319,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.BatchCreateSessionsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchCreateSessionsResponse) com.google.spanner.v1.BatchCreateSessionsResponseOrBuilder { @@ -316,7 +329,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchCreateSessionsResponse_fieldAccessorTable @@ -328,7 +341,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.BatchCreateSessionsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -395,39 +408,6 @@ private void buildPartial0(com.google.spanner.v1.BatchCreateSessionsResponse res int from_bitField0_ = bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.BatchCreateSessionsResponse) { @@ -460,8 +440,8 @@ public Builder mergeFrom(com.google.spanner.v1.BatchCreateSessionsResponse other session_ = other.session_; bitField0_ = (bitField0_ & ~0x00000001); sessionBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getSessionFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSessionFieldBuilder() : null; } else { sessionBuilder_.addAllMessages(other.session_); @@ -535,7 +515,7 @@ private void ensureSessionIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> @@ -557,6 +537,7 @@ public java.util.List getSessionList() { return sessionBuilder_.getMessageList(); } } + /** * * @@ -573,6 +554,7 @@ public int getSessionCount() { return sessionBuilder_.getCount(); } } + /** * * @@ -589,6 +571,7 @@ public com.google.spanner.v1.Session getSession(int index) { return sessionBuilder_.getMessage(index); } } + /** * * @@ -611,6 +594,7 @@ public Builder setSession(int index, com.google.spanner.v1.Session value) { } return this; } + /** * * @@ -630,6 +614,7 @@ public Builder setSession(int index, com.google.spanner.v1.Session.Builder build } return this; } + /** * * @@ -652,6 +637,7 @@ public Builder addSession(com.google.spanner.v1.Session value) { } return this; } + /** * * @@ -674,6 +660,7 @@ public Builder addSession(int index, com.google.spanner.v1.Session value) { } return this; } + /** * * @@ -693,6 +680,7 @@ public Builder addSession(com.google.spanner.v1.Session.Builder builderForValue) } return this; } + /** * * @@ -712,6 +700,7 @@ public Builder addSession(int index, com.google.spanner.v1.Session.Builder build } return this; } + /** * * @@ -732,6 +721,7 @@ public Builder addAllSession( } return this; } + /** * * @@ -751,6 +741,7 @@ public Builder clearSession() { } return this; } + /** * * @@ -770,6 +761,7 @@ public Builder removeSession(int index) { } return this; } + /** * * @@ -780,8 +772,9 @@ public Builder removeSession(int index) { * repeated .google.spanner.v1.Session session = 1; */ public com.google.spanner.v1.Session.Builder getSessionBuilder(int index) { - return getSessionFieldBuilder().getBuilder(index); + return internalGetSessionFieldBuilder().getBuilder(index); } + /** * * @@ -798,6 +791,7 @@ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder(int index) { return sessionBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -815,6 +809,7 @@ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder(int index) { return java.util.Collections.unmodifiableList(session_); } } + /** * * @@ -825,9 +820,10 @@ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder(int index) { * repeated .google.spanner.v1.Session session = 1; */ public com.google.spanner.v1.Session.Builder addSessionBuilder() { - return getSessionFieldBuilder() + return internalGetSessionFieldBuilder() .addBuilder(com.google.spanner.v1.Session.getDefaultInstance()); } + /** * * @@ -838,9 +834,10 @@ public com.google.spanner.v1.Session.Builder addSessionBuilder() { * repeated .google.spanner.v1.Session session = 1; */ public com.google.spanner.v1.Session.Builder addSessionBuilder(int index) { - return getSessionFieldBuilder() + return internalGetSessionFieldBuilder() .addBuilder(index, com.google.spanner.v1.Session.getDefaultInstance()); } + /** * * @@ -851,17 +848,17 @@ public com.google.spanner.v1.Session.Builder addSessionBuilder(int index) { * repeated .google.spanner.v1.Session session = 1; */ public java.util.List getSessionBuilderList() { - return getSessionFieldBuilder().getBuilderList(); + return internalGetSessionFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> - getSessionFieldBuilder() { + internalGetSessionFieldBuilder() { if (sessionBuilder_ == null) { sessionBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder>( @@ -871,17 +868,6 @@ public java.util.List getSessionBuilderLi return sessionBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchCreateSessionsResponse) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java index 1e0cf80de51..b849013ac7b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface BatchCreateSessionsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchCreateSessionsResponse) @@ -34,6 +36,7 @@ public interface BatchCreateSessionsResponseOrBuilder * repeated .google.spanner.v1.Session session = 1; */ java.util.List getSessionList(); + /** * * @@ -44,6 +47,7 @@ public interface BatchCreateSessionsResponseOrBuilder * repeated .google.spanner.v1.Session session = 1; */ com.google.spanner.v1.Session getSession(int index); + /** * * @@ -54,6 +58,7 @@ public interface BatchCreateSessionsResponseOrBuilder * repeated .google.spanner.v1.Session session = 1; */ int getSessionCount(); + /** * * @@ -64,6 +69,7 @@ public interface BatchCreateSessionsResponseOrBuilder * repeated .google.spanner.v1.Session session = 1; */ java.util.List getSessionOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java index ffd38c3ab76..9c4646e4ece 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.BatchWriteRequest} */ -public final class BatchWriteRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BatchWriteRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchWriteRequest) BatchWriteRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BatchWriteRequest"); + } + // Use BatchWriteRequest.newBuilder() to construct. - private BatchWriteRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BatchWriteRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private BatchWriteRequest() { mutationGroups_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchWriteRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable @@ -81,6 +88,7 @@ public interface MutationGroupOrBuilder *
                                */ java.util.List getMutationsList(); + /** * * @@ -93,6 +101,7 @@ public interface MutationGroupOrBuilder * */ com.google.spanner.v1.Mutation getMutations(int index); + /** * * @@ -105,6 +114,7 @@ public interface MutationGroupOrBuilder * */ int getMutationsCount(); + /** * * @@ -117,6 +127,7 @@ public interface MutationGroupOrBuilder * */ java.util.List getMutationsOrBuilderList(); + /** * * @@ -130,6 +141,7 @@ public interface MutationGroupOrBuilder */ com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index); } + /** * * @@ -141,13 +153,24 @@ public interface MutationGroupOrBuilder * * Protobuf type {@code google.spanner.v1.BatchWriteRequest.MutationGroup} */ - public static final class MutationGroup extends com.google.protobuf.GeneratedMessageV3 + public static final class MutationGroup extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchWriteRequest.MutationGroup) MutationGroupOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MutationGroup"); + } + // Use MutationGroup.newBuilder() to construct. - private MutationGroup(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private MutationGroup(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -155,19 +178,13 @@ private MutationGroup() { mutations_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new MutationGroup(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteRequest_MutationGroup_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteRequest_MutationGroup_fieldAccessorTable @@ -180,6 +197,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List mutations_; + /** * * @@ -195,6 +213,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getMutationsList() { return mutations_; } + /** * * @@ -211,6 +230,7 @@ public java.util.List getMutationsList() { getMutationsOrBuilderList() { return mutations_; } + /** * * @@ -226,6 +246,7 @@ public java.util.List getMutationsList() { public int getMutationsCount() { return mutations_.size(); } + /** * * @@ -241,6 +262,7 @@ public int getMutationsCount() { public com.google.spanner.v1.Mutation getMutations(int index) { return mutations_.get(index); } + /** * * @@ -360,38 +382,38 @@ public static com.google.spanner.v1.BatchWriteRequest.MutationGroup parseFrom( public static com.google.spanner.v1.BatchWriteRequest.MutationGroup parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteRequest.MutationGroup parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchWriteRequest.MutationGroup parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteRequest.MutationGroup parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchWriteRequest.MutationGroup parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteRequest.MutationGroup parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -415,11 +437,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -431,8 +453,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.BatchWriteRequest.MutationGroup} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchWriteRequest.MutationGroup) com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder { @@ -442,7 +463,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteRequest_MutationGroup_fieldAccessorTable @@ -454,7 +475,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.BatchWriteRequest.MutationGroup.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -521,41 +542,6 @@ private void buildPartial0(com.google.spanner.v1.BatchWriteRequest.MutationGroup int from_bitField0_ = bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.BatchWriteRequest.MutationGroup) { @@ -588,8 +574,8 @@ public Builder mergeFrom(com.google.spanner.v1.BatchWriteRequest.MutationGroup o mutations_ = other.mutations_; bitField0_ = (bitField0_ & ~0x00000001); mutationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getMutationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMutationsFieldBuilder() : null; } else { mutationsBuilder_.addAllMessages(other.mutations_); @@ -663,7 +649,7 @@ private void ensureMutationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder> @@ -687,6 +673,7 @@ public java.util.List getMutationsList() { return mutationsBuilder_.getMessageList(); } } + /** * * @@ -705,6 +692,7 @@ public int getMutationsCount() { return mutationsBuilder_.getCount(); } } + /** * * @@ -723,6 +711,7 @@ public com.google.spanner.v1.Mutation getMutations(int index) { return mutationsBuilder_.getMessage(index); } } + /** * * @@ -747,6 +736,7 @@ public Builder setMutations(int index, com.google.spanner.v1.Mutation value) { } return this; } + /** * * @@ -769,6 +759,7 @@ public Builder setMutations( } return this; } + /** * * @@ -793,6 +784,7 @@ public Builder addMutations(com.google.spanner.v1.Mutation value) { } return this; } + /** * * @@ -817,6 +809,7 @@ public Builder addMutations(int index, com.google.spanner.v1.Mutation value) { } return this; } + /** * * @@ -838,6 +831,7 @@ public Builder addMutations(com.google.spanner.v1.Mutation.Builder builderForVal } return this; } + /** * * @@ -860,6 +854,7 @@ public Builder addMutations( } return this; } + /** * * @@ -882,6 +877,7 @@ public Builder addAllMutations( } return this; } + /** * * @@ -903,6 +899,7 @@ public Builder clearMutations() { } return this; } + /** * * @@ -924,6 +921,7 @@ public Builder removeMutations(int index) { } return this; } + /** * * @@ -936,8 +934,9 @@ public Builder removeMutations(int index) { * */ public com.google.spanner.v1.Mutation.Builder getMutationsBuilder(int index) { - return getMutationsFieldBuilder().getBuilder(index); + return internalGetMutationsFieldBuilder().getBuilder(index); } + /** * * @@ -956,6 +955,7 @@ public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) return mutationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -975,6 +975,7 @@ public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) return java.util.Collections.unmodifiableList(mutations_); } } + /** * * @@ -987,9 +988,10 @@ public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) * */ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder() { - return getMutationsFieldBuilder() + return internalGetMutationsFieldBuilder() .addBuilder(com.google.spanner.v1.Mutation.getDefaultInstance()); } + /** * * @@ -1002,9 +1004,10 @@ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder() { * */ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder(int index) { - return getMutationsFieldBuilder() + return internalGetMutationsFieldBuilder() .addBuilder(index, com.google.spanner.v1.Mutation.getDefaultInstance()); } + /** * * @@ -1017,17 +1020,17 @@ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder(int index) { * */ public java.util.List getMutationsBuilderList() { - return getMutationsFieldBuilder().getBuilderList(); + return internalGetMutationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder> - getMutationsFieldBuilder() { + internalGetMutationsFieldBuilder() { if (mutationsBuilder_ == null) { mutationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder>( @@ -1037,18 +1040,6 @@ public java.util.List getMutationsBuilde return mutationsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchWriteRequest.MutationGroup) } @@ -1106,6 +1097,7 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup getDefaultInstanceF @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -1131,6 +1123,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -1159,6 +1152,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public static final int REQUEST_OPTIONS_FIELD_NUMBER = 3; private com.google.spanner.v1.RequestOptions requestOptions_; + /** * * @@ -1174,6 +1168,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1191,6 +1186,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { ? com.google.spanner.v1.RequestOptions.getDefaultInstance() : requestOptions_; } + /** * * @@ -1211,6 +1207,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( @SuppressWarnings("serial") private java.util.List mutationGroups_; + /** * * @@ -1227,6 +1224,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( getMutationGroupsList() { return mutationGroups_; } + /** * * @@ -1243,6 +1241,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( getMutationGroupsOrBuilderList() { return mutationGroups_; } + /** * * @@ -1258,6 +1257,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public int getMutationGroupsCount() { return mutationGroups_.size(); } + /** * * @@ -1273,6 +1273,7 @@ public int getMutationGroupsCount() { public com.google.spanner.v1.BatchWriteRequest.MutationGroup getMutationGroups(int index) { return mutationGroups_.get(index); } + /** * * @@ -1292,22 +1293,14 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder getMutatio public static final int EXCLUDE_TXN_FROM_CHANGE_STREAMS_FIELD_NUMBER = 5; private boolean excludeTxnFromChangeStreams_ = false; + /** * * *
                                -   * Optional. When `exclude_txn_from_change_streams` is set to `true`:
                                -   *  * Mutations from all transactions in this batch write operation will not
                                -   *  be recorded in change streams with DDL option `allow_txn_exclusion=true`
                                -   *  that are tracking columns modified by these transactions.
                                -   *  * Mutations from all transactions in this batch write operation will be
                                -   *  recorded in change streams with DDL option `allow_txn_exclusion=false or
                                -   *  not set` that are tracking columns modified by these transactions.
                                -   *
                                -   * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -   * mutations from all transactions in this batch write operation will be
                                -   * recorded in all change streams that are tracking columns modified by these
                                -   * transactions.
                                +   * Optional. If you don't set the `exclude_txn_from_change_streams` option or
                                +   * if it's set to `false`, then any change streams monitoring columns modified
                                +   * by transactions will capture the updates made within that transaction.
                                    * 
                                * * bool exclude_txn_from_change_streams = 5 [(.google.api.field_behavior) = OPTIONAL]; @@ -1334,8 +1327,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getRequestOptions()); @@ -1355,8 +1348,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getRequestOptions()); @@ -1455,38 +1448,38 @@ public static com.google.spanner.v1.BatchWriteRequest parseFrom( public static com.google.spanner.v1.BatchWriteRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchWriteRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchWriteRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1509,10 +1502,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1522,7 +1516,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.BatchWriteRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchWriteRequest) com.google.spanner.v1.BatchWriteRequestOrBuilder { @@ -1532,7 +1526,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable @@ -1546,15 +1540,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getRequestOptionsFieldBuilder(); - getMutationGroupsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRequestOptionsFieldBuilder(); + internalGetMutationGroupsFieldBuilder(); } } @@ -1640,39 +1634,6 @@ private void buildPartial0(com.google.spanner.v1.BatchWriteRequest result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.BatchWriteRequest) { @@ -1712,8 +1673,8 @@ public Builder mergeFrom(com.google.spanner.v1.BatchWriteRequest other) { mutationGroups_ = other.mutationGroups_; bitField0_ = (bitField0_ & ~0x00000004); mutationGroupsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getMutationGroupsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMutationGroupsFieldBuilder() : null; } else { mutationGroupsBuilder_.addAllMessages(other.mutationGroups_); @@ -1757,7 +1718,8 @@ public Builder mergeFrom( } // case 10 case 26: { - input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 26 @@ -1801,6 +1763,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -1825,6 +1788,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -1849,6 +1813,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1872,6 +1837,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1891,6 +1857,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -1917,11 +1884,12 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.RequestOptions requestOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> requestOptionsBuilder_; + /** * * @@ -1936,6 +1904,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1956,6 +1925,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { return requestOptionsBuilder_.getMessage(); } } + /** * * @@ -1978,6 +1948,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { onChanged(); return this; } + /** * * @@ -1997,6 +1968,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder bu onChanged(); return this; } + /** * * @@ -2024,6 +1996,7 @@ public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { } return this; } + /** * * @@ -2043,6 +2016,7 @@ public Builder clearRequestOptions() { onChanged(); return this; } + /** * * @@ -2055,8 +2029,9 @@ public Builder clearRequestOptions() { public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getRequestOptionsFieldBuilder().getBuilder(); + return internalGetRequestOptionsFieldBuilder().getBuilder(); } + /** * * @@ -2075,6 +2050,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } } + /** * * @@ -2084,14 +2060,14 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( * * .google.spanner.v1.RequestOptions request_options = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> - getRequestOptionsFieldBuilder() { + internalGetRequestOptionsFieldBuilder() { if (requestOptionsBuilder_ == null) { requestOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder>( @@ -2113,7 +2089,7 @@ private void ensureMutationGroupsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.BatchWriteRequest.MutationGroup, com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder, com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder> @@ -2138,6 +2114,7 @@ private void ensureMutationGroupsIsMutable() { return mutationGroupsBuilder_.getMessageList(); } } + /** * * @@ -2156,6 +2133,7 @@ public int getMutationGroupsCount() { return mutationGroupsBuilder_.getCount(); } } + /** * * @@ -2174,6 +2152,7 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup getMutationGroups(i return mutationGroupsBuilder_.getMessage(index); } } + /** * * @@ -2199,6 +2178,7 @@ public Builder setMutationGroups( } return this; } + /** * * @@ -2221,6 +2201,7 @@ public Builder setMutationGroups( } return this; } + /** * * @@ -2245,6 +2226,7 @@ public Builder addMutationGroups(com.google.spanner.v1.BatchWriteRequest.Mutatio } return this; } + /** * * @@ -2270,6 +2252,7 @@ public Builder addMutationGroups( } return this; } + /** * * @@ -2292,6 +2275,7 @@ public Builder addMutationGroups( } return this; } + /** * * @@ -2314,6 +2298,7 @@ public Builder addMutationGroups( } return this; } + /** * * @@ -2337,6 +2322,7 @@ public Builder addAllMutationGroups( } return this; } + /** * * @@ -2358,6 +2344,7 @@ public Builder clearMutationGroups() { } return this; } + /** * * @@ -2379,6 +2366,7 @@ public Builder removeMutationGroups(int index) { } return this; } + /** * * @@ -2392,8 +2380,9 @@ public Builder removeMutationGroups(int index) { */ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder getMutationGroupsBuilder( int index) { - return getMutationGroupsFieldBuilder().getBuilder(index); + return internalGetMutationGroupsFieldBuilder().getBuilder(index); } + /** * * @@ -2413,6 +2402,7 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder getMutation return mutationGroupsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2432,6 +2422,7 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder getMutation return java.util.Collections.unmodifiableList(mutationGroups_); } } + /** * * @@ -2445,9 +2436,10 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder getMutation */ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder addMutationGroupsBuilder() { - return getMutationGroupsFieldBuilder() + return internalGetMutationGroupsFieldBuilder() .addBuilder(com.google.spanner.v1.BatchWriteRequest.MutationGroup.getDefaultInstance()); } + /** * * @@ -2461,10 +2453,11 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder getMutation */ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder addMutationGroupsBuilder( int index) { - return getMutationGroupsFieldBuilder() + return internalGetMutationGroupsFieldBuilder() .addBuilder( index, com.google.spanner.v1.BatchWriteRequest.MutationGroup.getDefaultInstance()); } + /** * * @@ -2478,17 +2471,17 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder addMutation */ public java.util.List getMutationGroupsBuilderList() { - return getMutationGroupsFieldBuilder().getBuilderList(); + return internalGetMutationGroupsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.BatchWriteRequest.MutationGroup, com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder, com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder> - getMutationGroupsFieldBuilder() { + internalGetMutationGroupsFieldBuilder() { if (mutationGroupsBuilder_ == null) { mutationGroupsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.BatchWriteRequest.MutationGroup, com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder, com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder>( @@ -2502,22 +2495,14 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder addMutation } private boolean excludeTxnFromChangeStreams_; + /** * * *
                                -     * Optional. When `exclude_txn_from_change_streams` is set to `true`:
                                -     *  * Mutations from all transactions in this batch write operation will not
                                -     *  be recorded in change streams with DDL option `allow_txn_exclusion=true`
                                -     *  that are tracking columns modified by these transactions.
                                -     *  * Mutations from all transactions in this batch write operation will be
                                -     *  recorded in change streams with DDL option `allow_txn_exclusion=false or
                                -     *  not set` that are tracking columns modified by these transactions.
                                -     *
                                -     * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -     * mutations from all transactions in this batch write operation will be
                                -     * recorded in all change streams that are tracking columns modified by these
                                -     * transactions.
                                +     * Optional. If you don't set the `exclude_txn_from_change_streams` option or
                                +     * if it's set to `false`, then any change streams monitoring columns modified
                                +     * by transactions will capture the updates made within that transaction.
                                      * 
                                * * bool exclude_txn_from_change_streams = 5 [(.google.api.field_behavior) = OPTIONAL]; @@ -2529,22 +2514,14 @@ public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder addMutation public boolean getExcludeTxnFromChangeStreams() { return excludeTxnFromChangeStreams_; } + /** * * *
                                -     * Optional. When `exclude_txn_from_change_streams` is set to `true`:
                                -     *  * Mutations from all transactions in this batch write operation will not
                                -     *  be recorded in change streams with DDL option `allow_txn_exclusion=true`
                                -     *  that are tracking columns modified by these transactions.
                                -     *  * Mutations from all transactions in this batch write operation will be
                                -     *  recorded in change streams with DDL option `allow_txn_exclusion=false or
                                -     *  not set` that are tracking columns modified by these transactions.
                                -     *
                                -     * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -     * mutations from all transactions in this batch write operation will be
                                -     * recorded in all change streams that are tracking columns modified by these
                                -     * transactions.
                                +     * Optional. If you don't set the `exclude_txn_from_change_streams` option or
                                +     * if it's set to `false`, then any change streams monitoring columns modified
                                +     * by transactions will capture the updates made within that transaction.
                                      * 
                                * * bool exclude_txn_from_change_streams = 5 [(.google.api.field_behavior) = OPTIONAL]; @@ -2560,22 +2537,14 @@ public Builder setExcludeTxnFromChangeStreams(boolean value) { onChanged(); return this; } + /** * * *
                                -     * Optional. When `exclude_txn_from_change_streams` is set to `true`:
                                -     *  * Mutations from all transactions in this batch write operation will not
                                -     *  be recorded in change streams with DDL option `allow_txn_exclusion=true`
                                -     *  that are tracking columns modified by these transactions.
                                -     *  * Mutations from all transactions in this batch write operation will be
                                -     *  recorded in change streams with DDL option `allow_txn_exclusion=false or
                                -     *  not set` that are tracking columns modified by these transactions.
                                -     *
                                -     * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -     * mutations from all transactions in this batch write operation will be
                                -     * recorded in all change streams that are tracking columns modified by these
                                -     * transactions.
                                +     * Optional. If you don't set the `exclude_txn_from_change_streams` option or
                                +     * if it's set to `false`, then any change streams monitoring columns modified
                                +     * by transactions will capture the updates made within that transaction.
                                      * 
                                * * bool exclude_txn_from_change_streams = 5 [(.google.api.field_behavior) = OPTIONAL]; @@ -2590,17 +2559,6 @@ public Builder clearExcludeTxnFromChangeStreams() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchWriteRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java index c1be4b01531..3144f27ea9b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface BatchWriteRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchWriteRequest) @@ -38,6 +40,7 @@ public interface BatchWriteRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -65,6 +68,7 @@ public interface BatchWriteRequestOrBuilder * @return Whether the requestOptions field is set. */ boolean hasRequestOptions(); + /** * * @@ -77,6 +81,7 @@ public interface BatchWriteRequestOrBuilder * @return The requestOptions. */ com.google.spanner.v1.RequestOptions getRequestOptions(); + /** * * @@ -100,6 +105,7 @@ public interface BatchWriteRequestOrBuilder * */ java.util.List getMutationGroupsList(); + /** * * @@ -112,6 +118,7 @@ public interface BatchWriteRequestOrBuilder *
                                */ com.google.spanner.v1.BatchWriteRequest.MutationGroup getMutationGroups(int index); + /** * * @@ -124,6 +131,7 @@ public interface BatchWriteRequestOrBuilder *
                                */ int getMutationGroupsCount(); + /** * * @@ -137,6 +145,7 @@ public interface BatchWriteRequestOrBuilder */ java.util.List getMutationGroupsOrBuilderList(); + /** * * @@ -155,18 +164,9 @@ com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder getMutationGroups * * *
                                -   * Optional. When `exclude_txn_from_change_streams` is set to `true`:
                                -   *  * Mutations from all transactions in this batch write operation will not
                                -   *  be recorded in change streams with DDL option `allow_txn_exclusion=true`
                                -   *  that are tracking columns modified by these transactions.
                                -   *  * Mutations from all transactions in this batch write operation will be
                                -   *  recorded in change streams with DDL option `allow_txn_exclusion=false or
                                -   *  not set` that are tracking columns modified by these transactions.
                                -   *
                                -   * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -   * mutations from all transactions in this batch write operation will be
                                -   * recorded in all change streams that are tracking columns modified by these
                                -   * transactions.
                                +   * Optional. If you don't set the `exclude_txn_from_change_streams` option or
                                +   * if it's set to `false`, then any change streams monitoring columns modified
                                +   * by transactions will capture the updates made within that transaction.
                                    * 
                                * * bool exclude_txn_from_change_streams = 5 [(.google.api.field_behavior) = OPTIONAL]; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java index 428b4abe0ff..35279f82854 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.BatchWriteResponse} */ -public final class BatchWriteResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BatchWriteResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchWriteResponse) BatchWriteResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BatchWriteResponse"); + } + // Use BatchWriteResponse.newBuilder() to construct. - private BatchWriteResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BatchWriteResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private BatchWriteResponse() { indexes_ = emptyIntList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchWriteResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private com.google.protobuf.Internal.IntList indexes_ = emptyIntList(); + /** * * @@ -84,6 +92,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getIndexesList() { return indexes_; } + /** * * @@ -99,6 +108,7 @@ public java.util.List getIndexesList() { public int getIndexesCount() { return indexes_.size(); } + /** * * @@ -120,6 +130,7 @@ public int getIndexes(int index) { public static final int STATUS_FIELD_NUMBER = 2; private com.google.rpc.Status status_; + /** * * @@ -135,6 +146,7 @@ public int getIndexes(int index) { public boolean hasStatus() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -150,6 +162,7 @@ public boolean hasStatus() { public com.google.rpc.Status getStatus() { return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; } + /** * * @@ -166,12 +179,18 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public static final int COMMIT_TIMESTAMP_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp commitTimestamp_; + /** * * *
                                    * The commit timestamp of the transaction that applied this batch.
                                -   * Present if `status` is `OK`, absent otherwise.
                                +   * Present if status is OK and the mutation groups were applied, absent
                                +   * otherwise.
                                +   *
                                +   * For mutation groups with conditions, a status=OK and missing
                                +   * commit_timestamp means that the mutation groups were not applied due to the
                                +   * condition not being satisfied after evaluation.
                                    * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -182,12 +201,18 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public boolean hasCommitTimestamp() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                    * The commit timestamp of the transaction that applied this batch.
                                -   * Present if `status` is `OK`, absent otherwise.
                                +   * Present if status is OK and the mutation groups were applied, absent
                                +   * otherwise.
                                +   *
                                +   * For mutation groups with conditions, a status=OK and missing
                                +   * commit_timestamp means that the mutation groups were not applied due to the
                                +   * condition not being satisfied after evaluation.
                                    * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -200,12 +225,18 @@ public com.google.protobuf.Timestamp getCommitTimestamp() { ? com.google.protobuf.Timestamp.getDefaultInstance() : commitTimestamp_; } + /** * * *
                                    * The commit timestamp of the transaction that applied this batch.
                                -   * Present if `status` is `OK`, absent otherwise.
                                +   * Present if status is OK and the mutation groups were applied, absent
                                +   * otherwise.
                                +   *
                                +   * For mutation groups with conditions, a status=OK and missing
                                +   * commit_timestamp means that the mutation groups were not applied due to the
                                +   * condition not being satisfied after evaluation.
                                    * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -361,38 +392,38 @@ public static com.google.spanner.v1.BatchWriteResponse parseFrom( public static com.google.spanner.v1.BatchWriteResponse parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchWriteResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BatchWriteResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BatchWriteResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -415,10 +446,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -428,7 +460,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.BatchWriteResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchWriteResponse) com.google.spanner.v1.BatchWriteResponseOrBuilder { @@ -438,7 +470,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable @@ -452,15 +484,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getStatusFieldBuilder(); - getCommitTimestampFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStatusFieldBuilder(); + internalGetCommitTimestampFieldBuilder(); } } @@ -532,39 +564,6 @@ private void buildPartial0(com.google.spanner.v1.BatchWriteResponse result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.BatchWriteResponse) { @@ -640,13 +639,14 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getStatusFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetStatusFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -677,6 +677,7 @@ private void ensureIndexesIsMutable() { } bitField0_ |= 0x00000001; } + /** * * @@ -693,6 +694,7 @@ public java.util.List getIndexesList() { indexes_.makeImmutable(); return indexes_; } + /** * * @@ -708,6 +710,7 @@ public java.util.List getIndexesList() { public int getIndexesCount() { return indexes_.size(); } + /** * * @@ -724,6 +727,7 @@ public int getIndexesCount() { public int getIndexes(int index) { return indexes_.getInt(index); } + /** * * @@ -746,6 +750,7 @@ public Builder setIndexes(int index, int value) { onChanged(); return this; } + /** * * @@ -767,6 +772,7 @@ public Builder addIndexes(int value) { onChanged(); return this; } + /** * * @@ -787,6 +793,7 @@ public Builder addAllIndexes(java.lang.Iterable val onChanged(); return this; } + /** * * @@ -807,9 +814,10 @@ public Builder clearIndexes() { } private com.google.rpc.Status status_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> statusBuilder_; + /** * * @@ -824,6 +832,7 @@ public Builder clearIndexes() { public boolean hasStatus() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -842,6 +851,7 @@ public com.google.rpc.Status getStatus() { return statusBuilder_.getMessage(); } } + /** * * @@ -864,6 +874,7 @@ public Builder setStatus(com.google.rpc.Status value) { onChanged(); return this; } + /** * * @@ -883,6 +894,7 @@ public Builder setStatus(com.google.rpc.Status.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -910,6 +922,7 @@ public Builder mergeStatus(com.google.rpc.Status value) { } return this; } + /** * * @@ -929,6 +942,7 @@ public Builder clearStatus() { onChanged(); return this; } + /** * * @@ -941,8 +955,9 @@ public Builder clearStatus() { public com.google.rpc.Status.Builder getStatusBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStatusFieldBuilder().getBuilder(); + return internalGetStatusFieldBuilder().getBuilder(); } + /** * * @@ -959,6 +974,7 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; } } + /** * * @@ -968,12 +984,12 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { * * .google.rpc.Status status = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> - getStatusFieldBuilder() { + internalGetStatusFieldBuilder() { if (statusBuilder_ == null) { statusBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder>(getStatus(), getParentForChildren(), isClean()); @@ -983,17 +999,23 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { } private com.google.protobuf.Timestamp commitTimestamp_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> commitTimestampBuilder_; + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1003,12 +1025,18 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public boolean hasCommitTimestamp() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1024,12 +1052,18 @@ public com.google.protobuf.Timestamp getCommitTimestamp() { return commitTimestampBuilder_.getMessage(); } } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1047,12 +1081,18 @@ public Builder setCommitTimestamp(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1067,12 +1107,18 @@ public Builder setCommitTimestamp(com.google.protobuf.Timestamp.Builder builderF onChanged(); return this; } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1095,12 +1141,18 @@ public Builder mergeCommitTimestamp(com.google.protobuf.Timestamp value) { } return this; } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1115,12 +1167,18 @@ public Builder clearCommitTimestamp() { onChanged(); return this; } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1128,14 +1186,20 @@ public Builder clearCommitTimestamp() { public com.google.protobuf.Timestamp.Builder getCommitTimestampBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCommitTimestampFieldBuilder().getBuilder(); + return internalGetCommitTimestampFieldBuilder().getBuilder(); } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -1149,24 +1213,30 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { : commitTimestamp_; } } + /** * * *
                                      * The commit timestamp of the transaction that applied this batch.
                                -     * Present if `status` is `OK`, absent otherwise.
                                +     * Present if status is OK and the mutation groups were applied, absent
                                +     * otherwise.
                                +     *
                                +     * For mutation groups with conditions, a status=OK and missing
                                +     * commit_timestamp means that the mutation groups were not applied due to the
                                +     * condition not being satisfied after evaluation.
                                      * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCommitTimestampFieldBuilder() { + internalGetCommitTimestampFieldBuilder() { if (commitTimestampBuilder_ == null) { commitTimestampBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1176,17 +1246,6 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { return commitTimestampBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchWriteResponse) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java index 8c51666429f..05be85b753a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface BatchWriteResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchWriteResponse) @@ -37,6 +39,7 @@ public interface BatchWriteResponseOrBuilder * @return A list containing the indexes. */ java.util.List getIndexesList(); + /** * * @@ -50,6 +53,7 @@ public interface BatchWriteResponseOrBuilder * @return The count of indexes. */ int getIndexesCount(); + /** * * @@ -77,6 +81,7 @@ public interface BatchWriteResponseOrBuilder * @return Whether the status field is set. */ boolean hasStatus(); + /** * * @@ -89,6 +94,7 @@ public interface BatchWriteResponseOrBuilder * @return The status. */ com.google.rpc.Status getStatus(); + /** * * @@ -105,7 +111,12 @@ public interface BatchWriteResponseOrBuilder * *
                                    * The commit timestamp of the transaction that applied this batch.
                                -   * Present if `status` is `OK`, absent otherwise.
                                +   * Present if status is OK and the mutation groups were applied, absent
                                +   * otherwise.
                                +   *
                                +   * For mutation groups with conditions, a status=OK and missing
                                +   * commit_timestamp means that the mutation groups were not applied due to the
                                +   * condition not being satisfied after evaluation.
                                    * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -113,12 +124,18 @@ public interface BatchWriteResponseOrBuilder * @return Whether the commitTimestamp field is set. */ boolean hasCommitTimestamp(); + /** * * *
                                    * The commit timestamp of the transaction that applied this batch.
                                -   * Present if `status` is `OK`, absent otherwise.
                                +   * Present if status is OK and the mutation groups were applied, absent
                                +   * otherwise.
                                +   *
                                +   * For mutation groups with conditions, a status=OK and missing
                                +   * commit_timestamp means that the mutation groups were not applied due to the
                                +   * condition not being satisfied after evaluation.
                                    * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; @@ -126,12 +143,18 @@ public interface BatchWriteResponseOrBuilder * @return The commitTimestamp. */ com.google.protobuf.Timestamp getCommitTimestamp(); + /** * * *
                                    * The commit timestamp of the transaction that applied this batch.
                                -   * Present if `status` is `OK`, absent otherwise.
                                +   * Present if status is OK and the mutation groups were applied, absent
                                +   * otherwise.
                                +   *
                                +   * For mutation groups with conditions, a status=OK and missing
                                +   * commit_timestamp means that the mutation groups were not applied due to the
                                +   * condition not being satisfied after evaluation.
                                    * 
                                * * .google.protobuf.Timestamp commit_timestamp = 3; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java index 59ef89bb161..aa66a1eebb5 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.BeginTransactionRequest} */ -public final class BeginTransactionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class BeginTransactionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.BeginTransactionRequest) BeginTransactionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BeginTransactionRequest"); + } + // Use BeginTransactionRequest.newBuilder() to construct. - private BeginTransactionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private BeginTransactionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private BeginTransactionRequest() { session_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BeginTransactionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BeginTransactionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BeginTransactionRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -122,6 +131,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public static final int OPTIONS_FIELD_NUMBER = 2; private com.google.spanner.v1.TransactionOptions options_; + /** * * @@ -139,6 +149,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public boolean hasOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -158,6 +169,7 @@ public com.google.spanner.v1.TransactionOptions getOptions() { ? com.google.spanner.v1.TransactionOptions.getDefaultInstance() : options_; } + /** * * @@ -178,13 +190,14 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getOptionsOrBuilder() { public static final int REQUEST_OPTIONS_FIELD_NUMBER = 3; private com.google.spanner.v1.RequestOptions requestOptions_; + /** * * *
                                    * Common options for this request.
                                    * Priority is ignored for this request. Setting the priority in this
                                -   * request_options struct will not do anything. To set the priority for a
                                +   * `request_options` struct doesn't do anything. To set the priority for a
                                    * transaction, set it on the reads and writes that are part of this
                                    * transaction instead.
                                    * 
                                @@ -197,13 +210,14 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getOptionsOrBuilder() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                    * Common options for this request.
                                    * Priority is ignored for this request. Setting the priority in this
                                -   * request_options struct will not do anything. To set the priority for a
                                +   * `request_options` struct doesn't do anything. To set the priority for a
                                    * transaction, set it on the reads and writes that are part of this
                                    * transaction instead.
                                    * 
                                @@ -218,13 +232,14 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { ? com.google.spanner.v1.RequestOptions.getDefaultInstance() : requestOptions_; } + /** * * *
                                    * Common options for this request.
                                    * Priority is ignored for this request. Setting the priority in this
                                -   * request_options struct will not do anything. To set the priority for a
                                +   * `request_options` struct doesn't do anything. To set the priority for a
                                    * transaction, set it on the reads and writes that are part of this
                                    * transaction instead.
                                    * 
                                @@ -240,16 +255,15 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public static final int MUTATION_KEY_FIELD_NUMBER = 4; private com.google.spanner.v1.Mutation mutationKey_; + /** * * *
                                    * Optional. Required for read-write transactions on a multiplexed session
                                -   * that commit mutations but do not perform any reads or queries. Clients
                                -   * should randomly select one of the mutations from the mutation set and send
                                -   * it as a part of this request.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * that commit mutations but don't perform any reads or queries. You must
                                +   * randomly select one of the mutations from the mutation set and send it as a
                                +   * part of this request.
                                    * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -261,16 +275,15 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasMutationKey() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                    * Optional. Required for read-write transactions on a multiplexed session
                                -   * that commit mutations but do not perform any reads or queries. Clients
                                -   * should randomly select one of the mutations from the mutation set and send
                                -   * it as a part of this request.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * that commit mutations but don't perform any reads or queries. You must
                                +   * randomly select one of the mutations from the mutation set and send it as a
                                +   * part of this request.
                                    * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -284,16 +297,15 @@ public com.google.spanner.v1.Mutation getMutationKey() { ? com.google.spanner.v1.Mutation.getDefaultInstance() : mutationKey_; } + /** * * *
                                    * Optional. Required for read-write transactions on a multiplexed session
                                -   * that commit mutations but do not perform any reads or queries. Clients
                                -   * should randomly select one of the mutations from the mutation set and send
                                -   * it as a part of this request.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * that commit mutations but don't perform any reads or queries. You must
                                +   * randomly select one of the mutations from the mutation set and send it as a
                                +   * part of this request.
                                    * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -306,6 +318,80 @@ public com.google.spanner.v1.MutationOrBuilder getMutationKeyOrBuilder() { : mutationKey_; } + public static final int ROUTING_HINT_FIELD_NUMBER = 5; + private com.google.spanner.v1.RoutingHint routingHint_; + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + @java.lang.Override + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHint getRoutingHint() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -320,8 +406,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getOptions()); @@ -332,6 +418,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(4, getMutationKey()); } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(5, getRoutingHint()); + } getUnknownFields().writeTo(output); } @@ -341,8 +430,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getOptions()); @@ -353,6 +442,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getMutationKey()); } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getRoutingHint()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -382,6 +474,10 @@ public boolean equals(final java.lang.Object obj) { if (hasMutationKey()) { if (!getMutationKey().equals(other.getMutationKey())) return false; } + if (hasRoutingHint() != other.hasRoutingHint()) return false; + if (hasRoutingHint()) { + if (!getRoutingHint().equals(other.getRoutingHint())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -407,6 +503,10 @@ public int hashCode() { hash = (37 * hash) + MUTATION_KEY_FIELD_NUMBER; hash = (53 * hash) + getMutationKey().hashCode(); } + if (hasRoutingHint()) { + hash = (37 * hash) + ROUTING_HINT_FIELD_NUMBER; + hash = (53 * hash) + getRoutingHint().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -449,38 +549,38 @@ public static com.google.spanner.v1.BeginTransactionRequest parseFrom( public static com.google.spanner.v1.BeginTransactionRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BeginTransactionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BeginTransactionRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.BeginTransactionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.BeginTransactionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.BeginTransactionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -503,10 +603,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -517,7 +618,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.BeginTransactionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.BeginTransactionRequest) com.google.spanner.v1.BeginTransactionRequestOrBuilder { @@ -527,7 +628,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BeginTransactionRequest_fieldAccessorTable @@ -541,16 +642,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getOptionsFieldBuilder(); - getRequestOptionsFieldBuilder(); - getMutationKeyFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetOptionsFieldBuilder(); + internalGetRequestOptionsFieldBuilder(); + internalGetMutationKeyFieldBuilder(); + internalGetRoutingHintFieldBuilder(); } } @@ -574,6 +676,11 @@ public Builder clear() { mutationKeyBuilder_.dispose(); mutationKeyBuilder_ = null; } + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } return this; } @@ -628,42 +735,14 @@ private void buildPartial0(com.google.spanner.v1.BeginTransactionRequest result) mutationKeyBuilder_ == null ? mutationKey_ : mutationKeyBuilder_.build(); to_bitField0_ |= 0x00000004; } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.routingHint_ = + routingHintBuilder_ == null ? routingHint_ : routingHintBuilder_.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.spanner.v1.BeginTransactionRequest) { @@ -690,6 +769,9 @@ public Builder mergeFrom(com.google.spanner.v1.BeginTransactionRequest other) { if (other.hasMutationKey()) { mergeMutationKey(other.getMutationKey()); } + if (other.hasRoutingHint()) { + mergeRoutingHint(other.getRoutingHint()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -724,22 +806,31 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { - input.readMessage(getMutationKeyFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMutationKeyFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 + case 42: + { + input.readMessage( + internalGetRoutingHintFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 42 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -760,6 +851,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -784,6 +876,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -808,6 +901,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -831,6 +925,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -850,6 +945,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -876,11 +972,12 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.TransactionOptions options_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> optionsBuilder_; + /** * * @@ -897,6 +994,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -919,6 +1017,7 @@ public com.google.spanner.v1.TransactionOptions getOptions() { return optionsBuilder_.getMessage(); } } + /** * * @@ -943,6 +1042,7 @@ public Builder setOptions(com.google.spanner.v1.TransactionOptions value) { onChanged(); return this; } + /** * * @@ -964,6 +1064,7 @@ public Builder setOptions(com.google.spanner.v1.TransactionOptions.Builder build onChanged(); return this; } + /** * * @@ -993,6 +1094,7 @@ public Builder mergeOptions(com.google.spanner.v1.TransactionOptions value) { } return this; } + /** * * @@ -1014,6 +1116,7 @@ public Builder clearOptions() { onChanged(); return this; } + /** * * @@ -1028,8 +1131,9 @@ public Builder clearOptions() { public com.google.spanner.v1.TransactionOptions.Builder getOptionsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getOptionsFieldBuilder().getBuilder(); + return internalGetOptionsFieldBuilder().getBuilder(); } + /** * * @@ -1050,6 +1154,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getOptionsOrBuilder() { : options_; } } + /** * * @@ -1061,14 +1166,14 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getOptionsOrBuilder() { * .google.spanner.v1.TransactionOptions options = 2 [(.google.api.field_behavior) = REQUIRED]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> - getOptionsFieldBuilder() { + internalGetOptionsFieldBuilder() { if (optionsBuilder_ == null) { optionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder>( @@ -1079,18 +1184,19 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getOptionsOrBuilder() { } private com.google.spanner.v1.RequestOptions requestOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> requestOptionsBuilder_; + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1102,13 +1208,14 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getOptionsOrBuilder() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1126,13 +1233,14 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { return requestOptionsBuilder_.getMessage(); } } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1152,13 +1260,14 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { onChanged(); return this; } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1175,13 +1284,14 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder bu onChanged(); return this; } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1206,13 +1316,14 @@ public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { } return this; } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1229,13 +1340,14 @@ public Builder clearRequestOptions() { onChanged(); return this; } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1245,15 +1357,16 @@ public Builder clearRequestOptions() { public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getRequestOptionsFieldBuilder().getBuilder(); + return internalGetRequestOptionsFieldBuilder().getBuilder(); } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                @@ -1269,27 +1382,28 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } } + /** * * *
                                      * Common options for this request.
                                      * Priority is ignored for this request. Setting the priority in this
                                -     * request_options struct will not do anything. To set the priority for a
                                +     * `request_options` struct doesn't do anything. To set the priority for a
                                      * transaction, set it on the reads and writes that are part of this
                                      * transaction instead.
                                      * 
                                * * .google.spanner.v1.RequestOptions request_options = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> - getRequestOptionsFieldBuilder() { + internalGetRequestOptionsFieldBuilder() { if (requestOptionsBuilder_ == null) { requestOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder>( @@ -1300,21 +1414,20 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( } private com.google.spanner.v1.Mutation mutationKey_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder> mutationKeyBuilder_; + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1325,16 +1438,15 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasMutationKey() { return ((bitField0_ & 0x00000008) != 0); } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1351,16 +1463,15 @@ public com.google.spanner.v1.Mutation getMutationKey() { return mutationKeyBuilder_.getMessage(); } } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1379,16 +1490,15 @@ public Builder setMutationKey(com.google.spanner.v1.Mutation value) { onChanged(); return this; } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1404,16 +1514,15 @@ public Builder setMutationKey(com.google.spanner.v1.Mutation.Builder builderForV onChanged(); return this; } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1437,16 +1546,15 @@ public Builder mergeMutationKey(com.google.spanner.v1.Mutation value) { } return this; } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1462,16 +1570,15 @@ public Builder clearMutationKey() { onChanged(); return this; } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1480,18 +1587,17 @@ public Builder clearMutationKey() { public com.google.spanner.v1.Mutation.Builder getMutationKeyBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getMutationKeyFieldBuilder().getBuilder(); + return internalGetMutationKeyFieldBuilder().getBuilder(); } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -1506,29 +1612,28 @@ public com.google.spanner.v1.MutationOrBuilder getMutationKeyOrBuilder() { : mutationKey_; } } + /** * * *
                                      * Optional. Required for read-write transactions on a multiplexed session
                                -     * that commit mutations but do not perform any reads or queries. Clients
                                -     * should randomly select one of the mutations from the mutation set and send
                                -     * it as a part of this request.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * that commit mutations but don't perform any reads or queries. You must
                                +     * randomly select one of the mutations from the mutation set and send it as a
                                +     * part of this request.
                                      * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder> - getMutationKeyFieldBuilder() { + internalGetMutationKeyFieldBuilder() { if (mutationKeyBuilder_ == null) { mutationKeyBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder>( @@ -1538,15 +1643,261 @@ public com.google.spanner.v1.MutationOrBuilder getMutationKeyOrBuilder() { return mutationKeyBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.RoutingHint routingHint_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + routingHintBuilder_; + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00000010) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + public com.google.spanner.v1.RoutingHint getRoutingHint() { + if (routingHintBuilder_ == null) { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } else { + return routingHintBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + routingHint_ = value; + } else { + routingHintBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint.Builder builderForValue) { + if (routingHintBuilder_ == null) { + routingHint_ = builderForValue.build(); + } else { + routingHintBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && routingHint_ != null + && routingHint_ != com.google.spanner.v1.RoutingHint.getDefaultInstance()) { + getRoutingHintBuilder().mergeFrom(value); + } else { + routingHint_ = value; + } + } else { + routingHintBuilder_.mergeFrom(value); + } + if (routingHint_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearRoutingHint() { + bitField0_ = (bitField0_ & ~0x00000010); + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHint.Builder getRoutingHintBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return internalGetRoutingHintFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + if (routingHintBuilder_ != null) { + return routingHintBuilder_.getMessageOrBuilder(); + } else { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + internalGetRoutingHintFieldBuilder() { + if (routingHintBuilder_ == null) { + routingHintBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder>( + getRoutingHint(), getParentForChildren(), isClean()); + routingHint_ = null; + } + return routingHintBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.BeginTransactionRequest) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java index 0d67610b513..30c8901404e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface BeginTransactionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.BeginTransactionRequest) @@ -38,6 +40,7 @@ public interface BeginTransactionRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -67,6 +70,7 @@ public interface BeginTransactionRequestOrBuilder * @return Whether the options field is set. */ boolean hasOptions(); + /** * * @@ -81,6 +85,7 @@ public interface BeginTransactionRequestOrBuilder * @return The options. */ com.google.spanner.v1.TransactionOptions getOptions(); + /** * * @@ -100,7 +105,7 @@ public interface BeginTransactionRequestOrBuilder *
                                    * Common options for this request.
                                    * Priority is ignored for this request. Setting the priority in this
                                -   * request_options struct will not do anything. To set the priority for a
                                +   * `request_options` struct doesn't do anything. To set the priority for a
                                    * transaction, set it on the reads and writes that are part of this
                                    * transaction instead.
                                    * 
                                @@ -110,13 +115,14 @@ public interface BeginTransactionRequestOrBuilder * @return Whether the requestOptions field is set. */ boolean hasRequestOptions(); + /** * * *
                                    * Common options for this request.
                                    * Priority is ignored for this request. Setting the priority in this
                                -   * request_options struct will not do anything. To set the priority for a
                                +   * `request_options` struct doesn't do anything. To set the priority for a
                                    * transaction, set it on the reads and writes that are part of this
                                    * transaction instead.
                                    * 
                                @@ -126,13 +132,14 @@ public interface BeginTransactionRequestOrBuilder * @return The requestOptions. */ com.google.spanner.v1.RequestOptions getRequestOptions(); + /** * * *
                                    * Common options for this request.
                                    * Priority is ignored for this request. Setting the priority in this
                                -   * request_options struct will not do anything. To set the priority for a
                                +   * `request_options` struct doesn't do anything. To set the priority for a
                                    * transaction, set it on the reads and writes that are part of this
                                    * transaction instead.
                                    * 
                                @@ -146,11 +153,9 @@ public interface BeginTransactionRequestOrBuilder * *
                                    * Optional. Required for read-write transactions on a multiplexed session
                                -   * that commit mutations but do not perform any reads or queries. Clients
                                -   * should randomly select one of the mutations from the mutation set and send
                                -   * it as a part of this request.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * that commit mutations but don't perform any reads or queries. You must
                                +   * randomly select one of the mutations from the mutation set and send it as a
                                +   * part of this request.
                                    * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -159,16 +164,15 @@ public interface BeginTransactionRequestOrBuilder * @return Whether the mutationKey field is set. */ boolean hasMutationKey(); + /** * * *
                                    * Optional. Required for read-write transactions on a multiplexed session
                                -   * that commit mutations but do not perform any reads or queries. Clients
                                -   * should randomly select one of the mutations from the mutation set and send
                                -   * it as a part of this request.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * that commit mutations but don't perform any reads or queries. You must
                                +   * randomly select one of the mutations from the mutation set and send it as a
                                +   * part of this request.
                                    * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; @@ -177,20 +181,77 @@ public interface BeginTransactionRequestOrBuilder * @return The mutationKey. */ com.google.spanner.v1.Mutation getMutationKey(); + /** * * *
                                    * Optional. Required for read-write transactions on a multiplexed session
                                -   * that commit mutations but do not perform any reads or queries. Clients
                                -   * should randomly select one of the mutations from the mutation set and send
                                -   * it as a part of this request.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * that commit mutations but don't perform any reads or queries. You must
                                +   * randomly select one of the mutations from the mutation set and send it as a
                                +   * part of this request.
                                    * 
                                * * .google.spanner.v1.Mutation mutation_key = 4 [(.google.api.field_behavior) = OPTIONAL]; * */ com.google.spanner.v1.MutationOrBuilder getMutationKeyOrBuilder(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + boolean hasRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + com.google.spanner.v1.RoutingHint getRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CacheUpdate.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CacheUpdate.java new file mode 100644 index 00000000000..c807c6168e7 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CacheUpdate.java @@ -0,0 +1,1820 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * A `CacheUpdate` expresses a set of changes the client should incorporate into
                                + * its location cache. These changes may or may not be newer than what the
                                + * client has in its cache, and should be discarded if necessary. `CacheUpdate`s
                                + * can be obtained in response to requests that included a `RoutingHint`
                                + * field, but may also be obtained by explicit location-fetching RPCs which may
                                + * be added in the future.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.CacheUpdate} + */ +@com.google.protobuf.Generated +public final class CacheUpdate extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.CacheUpdate) + CacheUpdateOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CacheUpdate"); + } + + // Use CacheUpdate.newBuilder() to construct. + private CacheUpdate(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CacheUpdate() { + range_ = java.util.Collections.emptyList(); + group_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_CacheUpdate_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_CacheUpdate_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.CacheUpdate.class, + com.google.spanner.v1.CacheUpdate.Builder.class); + } + + private int bitField0_; + public static final int DATABASE_ID_FIELD_NUMBER = 1; + private long databaseId_ = 0L; + + /** + * + * + *
                                +   * An internal ID for the database. Database names can be reused if a database
                                +   * is deleted and re-created. Each time the database is re-created, it will
                                +   * get a new database ID, which will never be re-used for any other database.
                                +   * 
                                + * + * uint64 database_id = 1; + * + * @return The databaseId. + */ + @java.lang.Override + public long getDatabaseId() { + return databaseId_; + } + + public static final int RANGE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private java.util.List range_; + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + @java.lang.Override + public java.util.List getRangeList() { + return range_; + } + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + @java.lang.Override + public java.util.List getRangeOrBuilderList() { + return range_; + } + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + @java.lang.Override + public int getRangeCount() { + return range_.size(); + } + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + @java.lang.Override + public com.google.spanner.v1.Range getRange(int index) { + return range_.get(index); + } + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + @java.lang.Override + public com.google.spanner.v1.RangeOrBuilder getRangeOrBuilder(int index) { + return range_.get(index); + } + + public static final int GROUP_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private java.util.List group_; + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + @java.lang.Override + public java.util.List getGroupList() { + return group_; + } + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + @java.lang.Override + public java.util.List getGroupOrBuilderList() { + return group_; + } + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + @java.lang.Override + public int getGroupCount() { + return group_.size(); + } + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + @java.lang.Override + public com.google.spanner.v1.Group getGroup(int index) { + return group_.get(index); + } + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + @java.lang.Override + public com.google.spanner.v1.GroupOrBuilder getGroupOrBuilder(int index) { + return group_.get(index); + } + + public static final int KEY_RECIPES_FIELD_NUMBER = 5; + private com.google.spanner.v1.RecipeList keyRecipes_; + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + * + * @return Whether the keyRecipes field is set. + */ + @java.lang.Override + public boolean hasKeyRecipes() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + * + * @return The keyRecipes. + */ + @java.lang.Override + public com.google.spanner.v1.RecipeList getKeyRecipes() { + return keyRecipes_ == null + ? com.google.spanner.v1.RecipeList.getDefaultInstance() + : keyRecipes_; + } + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + @java.lang.Override + public com.google.spanner.v1.RecipeListOrBuilder getKeyRecipesOrBuilder() { + return keyRecipes_ == null + ? com.google.spanner.v1.RecipeList.getDefaultInstance() + : keyRecipes_; + } + + 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 (databaseId_ != 0L) { + output.writeUInt64(1, databaseId_); + } + for (int i = 0; i < range_.size(); i++) { + output.writeMessage(2, range_.get(i)); + } + for (int i = 0; i < group_.size(); i++) { + output.writeMessage(3, group_.get(i)); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(5, getKeyRecipes()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (databaseId_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(1, databaseId_); + } + for (int i = 0; i < range_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, range_.get(i)); + } + for (int i = 0; i < group_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, group_.get(i)); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getKeyRecipes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.CacheUpdate)) { + return super.equals(obj); + } + com.google.spanner.v1.CacheUpdate other = (com.google.spanner.v1.CacheUpdate) obj; + + if (getDatabaseId() != other.getDatabaseId()) return false; + if (!getRangeList().equals(other.getRangeList())) return false; + if (!getGroupList().equals(other.getGroupList())) return false; + if (hasKeyRecipes() != other.hasKeyRecipes()) return false; + if (hasKeyRecipes()) { + if (!getKeyRecipes().equals(other.getKeyRecipes())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DATABASE_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getDatabaseId()); + if (getRangeCount() > 0) { + hash = (37 * hash) + RANGE_FIELD_NUMBER; + hash = (53 * hash) + getRangeList().hashCode(); + } + if (getGroupCount() > 0) { + hash = (37 * hash) + GROUP_FIELD_NUMBER; + hash = (53 * hash) + getGroupList().hashCode(); + } + if (hasKeyRecipes()) { + hash = (37 * hash) + KEY_RECIPES_FIELD_NUMBER; + hash = (53 * hash) + getKeyRecipes().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.CacheUpdate parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.CacheUpdate parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.CacheUpdate parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.CacheUpdate parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.CacheUpdate 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * A `CacheUpdate` expresses a set of changes the client should incorporate into
                                +   * its location cache. These changes may or may not be newer than what the
                                +   * client has in its cache, and should be discarded if necessary. `CacheUpdate`s
                                +   * can be obtained in response to requests that included a `RoutingHint`
                                +   * field, but may also be obtained by explicit location-fetching RPCs which may
                                +   * be added in the future.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.CacheUpdate} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.CacheUpdate) + com.google.spanner.v1.CacheUpdateOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_CacheUpdate_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_CacheUpdate_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.CacheUpdate.class, + com.google.spanner.v1.CacheUpdate.Builder.class); + } + + // Construct using com.google.spanner.v1.CacheUpdate.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRangeFieldBuilder(); + internalGetGroupFieldBuilder(); + internalGetKeyRecipesFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + databaseId_ = 0L; + if (rangeBuilder_ == null) { + range_ = java.util.Collections.emptyList(); + } else { + range_ = null; + rangeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (groupBuilder_ == null) { + group_ = java.util.Collections.emptyList(); + } else { + group_ = null; + groupBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + keyRecipes_ = null; + if (keyRecipesBuilder_ != null) { + keyRecipesBuilder_.dispose(); + keyRecipesBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_CacheUpdate_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.CacheUpdate getDefaultInstanceForType() { + return com.google.spanner.v1.CacheUpdate.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.CacheUpdate build() { + com.google.spanner.v1.CacheUpdate result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.CacheUpdate buildPartial() { + com.google.spanner.v1.CacheUpdate result = new com.google.spanner.v1.CacheUpdate(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.CacheUpdate result) { + if (rangeBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + range_ = java.util.Collections.unmodifiableList(range_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.range_ = range_; + } else { + result.range_ = rangeBuilder_.build(); + } + if (groupBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + group_ = java.util.Collections.unmodifiableList(group_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.group_ = group_; + } else { + result.group_ = groupBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.CacheUpdate result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.databaseId_ = databaseId_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000008) != 0)) { + result.keyRecipes_ = keyRecipesBuilder_ == null ? keyRecipes_ : keyRecipesBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.CacheUpdate) { + return mergeFrom((com.google.spanner.v1.CacheUpdate) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.CacheUpdate other) { + if (other == com.google.spanner.v1.CacheUpdate.getDefaultInstance()) return this; + if (other.getDatabaseId() != 0L) { + setDatabaseId(other.getDatabaseId()); + } + if (rangeBuilder_ == null) { + if (!other.range_.isEmpty()) { + if (range_.isEmpty()) { + range_ = other.range_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureRangeIsMutable(); + range_.addAll(other.range_); + } + onChanged(); + } + } else { + if (!other.range_.isEmpty()) { + if (rangeBuilder_.isEmpty()) { + rangeBuilder_.dispose(); + rangeBuilder_ = null; + range_ = other.range_; + bitField0_ = (bitField0_ & ~0x00000002); + rangeBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetRangeFieldBuilder() + : null; + } else { + rangeBuilder_.addAllMessages(other.range_); + } + } + } + if (groupBuilder_ == null) { + if (!other.group_.isEmpty()) { + if (group_.isEmpty()) { + group_ = other.group_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureGroupIsMutable(); + group_.addAll(other.group_); + } + onChanged(); + } + } else { + if (!other.group_.isEmpty()) { + if (groupBuilder_.isEmpty()) { + groupBuilder_.dispose(); + groupBuilder_ = null; + group_ = other.group_; + bitField0_ = (bitField0_ & ~0x00000004); + groupBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetGroupFieldBuilder() + : null; + } else { + groupBuilder_.addAllMessages(other.group_); + } + } + } + if (other.hasKeyRecipes()) { + mergeKeyRecipes(other.getKeyRecipes()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + databaseId_ = input.readUInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + com.google.spanner.v1.Range m = + input.readMessage(com.google.spanner.v1.Range.parser(), extensionRegistry); + if (rangeBuilder_ == null) { + ensureRangeIsMutable(); + range_.add(m); + } else { + rangeBuilder_.addMessage(m); + } + break; + } // case 18 + case 26: + { + com.google.spanner.v1.Group m = + input.readMessage(com.google.spanner.v1.Group.parser(), extensionRegistry); + if (groupBuilder_ == null) { + ensureGroupIsMutable(); + group_.add(m); + } else { + groupBuilder_.addMessage(m); + } + break; + } // case 26 + case 42: + { + input.readMessage( + internalGetKeyRecipesFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 42 + 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 long databaseId_; + + /** + * + * + *
                                +     * An internal ID for the database. Database names can be reused if a database
                                +     * is deleted and re-created. Each time the database is re-created, it will
                                +     * get a new database ID, which will never be re-used for any other database.
                                +     * 
                                + * + * uint64 database_id = 1; + * + * @return The databaseId. + */ + @java.lang.Override + public long getDatabaseId() { + return databaseId_; + } + + /** + * + * + *
                                +     * An internal ID for the database. Database names can be reused if a database
                                +     * is deleted and re-created. Each time the database is re-created, it will
                                +     * get a new database ID, which will never be re-used for any other database.
                                +     * 
                                + * + * uint64 database_id = 1; + * + * @param value The databaseId to set. + * @return This builder for chaining. + */ + public Builder setDatabaseId(long value) { + + databaseId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * An internal ID for the database. Database names can be reused if a database
                                +     * is deleted and re-created. Each time the database is re-created, it will
                                +     * get a new database ID, which will never be re-used for any other database.
                                +     * 
                                + * + * uint64 database_id = 1; + * + * @return This builder for chaining. + */ + public Builder clearDatabaseId() { + bitField0_ = (bitField0_ & ~0x00000001); + databaseId_ = 0L; + onChanged(); + return this; + } + + private java.util.List range_ = java.util.Collections.emptyList(); + + private void ensureRangeIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + range_ = new java.util.ArrayList(range_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Range, + com.google.spanner.v1.Range.Builder, + com.google.spanner.v1.RangeOrBuilder> + rangeBuilder_; + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public java.util.List getRangeList() { + if (rangeBuilder_ == null) { + return java.util.Collections.unmodifiableList(range_); + } else { + return rangeBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public int getRangeCount() { + if (rangeBuilder_ == null) { + return range_.size(); + } else { + return rangeBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public com.google.spanner.v1.Range getRange(int index) { + if (rangeBuilder_ == null) { + return range_.get(index); + } else { + return rangeBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder setRange(int index, com.google.spanner.v1.Range value) { + if (rangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRangeIsMutable(); + range_.set(index, value); + onChanged(); + } else { + rangeBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder setRange(int index, com.google.spanner.v1.Range.Builder builderForValue) { + if (rangeBuilder_ == null) { + ensureRangeIsMutable(); + range_.set(index, builderForValue.build()); + onChanged(); + } else { + rangeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder addRange(com.google.spanner.v1.Range value) { + if (rangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRangeIsMutable(); + range_.add(value); + onChanged(); + } else { + rangeBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder addRange(int index, com.google.spanner.v1.Range value) { + if (rangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRangeIsMutable(); + range_.add(index, value); + onChanged(); + } else { + rangeBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder addRange(com.google.spanner.v1.Range.Builder builderForValue) { + if (rangeBuilder_ == null) { + ensureRangeIsMutable(); + range_.add(builderForValue.build()); + onChanged(); + } else { + rangeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder addRange(int index, com.google.spanner.v1.Range.Builder builderForValue) { + if (rangeBuilder_ == null) { + ensureRangeIsMutable(); + range_.add(index, builderForValue.build()); + onChanged(); + } else { + rangeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder addAllRange(java.lang.Iterable values) { + if (rangeBuilder_ == null) { + ensureRangeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, range_); + onChanged(); + } else { + rangeBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder clearRange() { + if (rangeBuilder_ == null) { + range_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + rangeBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public Builder removeRange(int index) { + if (rangeBuilder_ == null) { + ensureRangeIsMutable(); + range_.remove(index); + onChanged(); + } else { + rangeBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public com.google.spanner.v1.Range.Builder getRangeBuilder(int index) { + return internalGetRangeFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public com.google.spanner.v1.RangeOrBuilder getRangeOrBuilder(int index) { + if (rangeBuilder_ == null) { + return range_.get(index); + } else { + return rangeBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public java.util.List getRangeOrBuilderList() { + if (rangeBuilder_ != null) { + return rangeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(range_); + } + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public com.google.spanner.v1.Range.Builder addRangeBuilder() { + return internalGetRangeFieldBuilder() + .addBuilder(com.google.spanner.v1.Range.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public com.google.spanner.v1.Range.Builder addRangeBuilder(int index) { + return internalGetRangeFieldBuilder() + .addBuilder(index, com.google.spanner.v1.Range.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of ranges to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + public java.util.List getRangeBuilderList() { + return internalGetRangeFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Range, + com.google.spanner.v1.Range.Builder, + com.google.spanner.v1.RangeOrBuilder> + internalGetRangeFieldBuilder() { + if (rangeBuilder_ == null) { + rangeBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Range, + com.google.spanner.v1.Range.Builder, + com.google.spanner.v1.RangeOrBuilder>( + range_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean()); + range_ = null; + } + return rangeBuilder_; + } + + private java.util.List group_ = java.util.Collections.emptyList(); + + private void ensureGroupIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + group_ = new java.util.ArrayList(group_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Group, + com.google.spanner.v1.Group.Builder, + com.google.spanner.v1.GroupOrBuilder> + groupBuilder_; + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public java.util.List getGroupList() { + if (groupBuilder_ == null) { + return java.util.Collections.unmodifiableList(group_); + } else { + return groupBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public int getGroupCount() { + if (groupBuilder_ == null) { + return group_.size(); + } else { + return groupBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public com.google.spanner.v1.Group getGroup(int index) { + if (groupBuilder_ == null) { + return group_.get(index); + } else { + return groupBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder setGroup(int index, com.google.spanner.v1.Group value) { + if (groupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGroupIsMutable(); + group_.set(index, value); + onChanged(); + } else { + groupBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder setGroup(int index, com.google.spanner.v1.Group.Builder builderForValue) { + if (groupBuilder_ == null) { + ensureGroupIsMutable(); + group_.set(index, builderForValue.build()); + onChanged(); + } else { + groupBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder addGroup(com.google.spanner.v1.Group value) { + if (groupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGroupIsMutable(); + group_.add(value); + onChanged(); + } else { + groupBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder addGroup(int index, com.google.spanner.v1.Group value) { + if (groupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGroupIsMutable(); + group_.add(index, value); + onChanged(); + } else { + groupBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder addGroup(com.google.spanner.v1.Group.Builder builderForValue) { + if (groupBuilder_ == null) { + ensureGroupIsMutable(); + group_.add(builderForValue.build()); + onChanged(); + } else { + groupBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder addGroup(int index, com.google.spanner.v1.Group.Builder builderForValue) { + if (groupBuilder_ == null) { + ensureGroupIsMutable(); + group_.add(index, builderForValue.build()); + onChanged(); + } else { + groupBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder addAllGroup(java.lang.Iterable values) { + if (groupBuilder_ == null) { + ensureGroupIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, group_); + onChanged(); + } else { + groupBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder clearGroup() { + if (groupBuilder_ == null) { + group_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + groupBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public Builder removeGroup(int index) { + if (groupBuilder_ == null) { + ensureGroupIsMutable(); + group_.remove(index); + onChanged(); + } else { + groupBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public com.google.spanner.v1.Group.Builder getGroupBuilder(int index) { + return internalGetGroupFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public com.google.spanner.v1.GroupOrBuilder getGroupOrBuilder(int index) { + if (groupBuilder_ == null) { + return group_.get(index); + } else { + return groupBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public java.util.List getGroupOrBuilderList() { + if (groupBuilder_ != null) { + return groupBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(group_); + } + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public com.google.spanner.v1.Group.Builder addGroupBuilder() { + return internalGetGroupFieldBuilder() + .addBuilder(com.google.spanner.v1.Group.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public com.google.spanner.v1.Group.Builder addGroupBuilder(int index) { + return internalGetGroupFieldBuilder() + .addBuilder(index, com.google.spanner.v1.Group.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of groups to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + public java.util.List getGroupBuilderList() { + return internalGetGroupFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Group, + com.google.spanner.v1.Group.Builder, + com.google.spanner.v1.GroupOrBuilder> + internalGetGroupFieldBuilder() { + if (groupBuilder_ == null) { + groupBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Group, + com.google.spanner.v1.Group.Builder, + com.google.spanner.v1.GroupOrBuilder>( + group_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean()); + group_ = null; + } + return groupBuilder_; + } + + private com.google.spanner.v1.RecipeList keyRecipes_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RecipeList, + com.google.spanner.v1.RecipeList.Builder, + com.google.spanner.v1.RecipeListOrBuilder> + keyRecipesBuilder_; + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + * + * @return Whether the keyRecipes field is set. + */ + public boolean hasKeyRecipes() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + * + * @return The keyRecipes. + */ + public com.google.spanner.v1.RecipeList getKeyRecipes() { + if (keyRecipesBuilder_ == null) { + return keyRecipes_ == null + ? com.google.spanner.v1.RecipeList.getDefaultInstance() + : keyRecipes_; + } else { + return keyRecipesBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + public Builder setKeyRecipes(com.google.spanner.v1.RecipeList value) { + if (keyRecipesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + keyRecipes_ = value; + } else { + keyRecipesBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + public Builder setKeyRecipes(com.google.spanner.v1.RecipeList.Builder builderForValue) { + if (keyRecipesBuilder_ == null) { + keyRecipes_ = builderForValue.build(); + } else { + keyRecipesBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + public Builder mergeKeyRecipes(com.google.spanner.v1.RecipeList value) { + if (keyRecipesBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && keyRecipes_ != null + && keyRecipes_ != com.google.spanner.v1.RecipeList.getDefaultInstance()) { + getKeyRecipesBuilder().mergeFrom(value); + } else { + keyRecipes_ = value; + } + } else { + keyRecipesBuilder_.mergeFrom(value); + } + if (keyRecipes_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + public Builder clearKeyRecipes() { + bitField0_ = (bitField0_ & ~0x00000008); + keyRecipes_ = null; + if (keyRecipesBuilder_ != null) { + keyRecipesBuilder_.dispose(); + keyRecipesBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + public com.google.spanner.v1.RecipeList.Builder getKeyRecipesBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetKeyRecipesFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + public com.google.spanner.v1.RecipeListOrBuilder getKeyRecipesOrBuilder() { + if (keyRecipesBuilder_ != null) { + return keyRecipesBuilder_.getMessageOrBuilder(); + } else { + return keyRecipes_ == null + ? com.google.spanner.v1.RecipeList.getDefaultInstance() + : keyRecipes_; + } + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RecipeList, + com.google.spanner.v1.RecipeList.Builder, + com.google.spanner.v1.RecipeListOrBuilder> + internalGetKeyRecipesFieldBuilder() { + if (keyRecipesBuilder_ == null) { + keyRecipesBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RecipeList, + com.google.spanner.v1.RecipeList.Builder, + com.google.spanner.v1.RecipeListOrBuilder>( + getKeyRecipes(), getParentForChildren(), isClean()); + keyRecipes_ = null; + } + return keyRecipesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.CacheUpdate) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.CacheUpdate) + private static final com.google.spanner.v1.CacheUpdate DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.CacheUpdate(); + } + + public static com.google.spanner.v1.CacheUpdate getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CacheUpdate parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.CacheUpdate getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CacheUpdateOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CacheUpdateOrBuilder.java new file mode 100644 index 00000000000..aafedbae4fb --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CacheUpdateOrBuilder.java @@ -0,0 +1,190 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface CacheUpdateOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.CacheUpdate) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * An internal ID for the database. Database names can be reused if a database
                                +   * is deleted and re-created. Each time the database is re-created, it will
                                +   * get a new database ID, which will never be re-used for any other database.
                                +   * 
                                + * + * uint64 database_id = 1; + * + * @return The databaseId. + */ + long getDatabaseId(); + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + java.util.List getRangeList(); + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + com.google.spanner.v1.Range getRange(int index); + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + int getRangeCount(); + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + java.util.List getRangeOrBuilderList(); + + /** + * + * + *
                                +   * A list of ranges to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Range range = 2; + */ + com.google.spanner.v1.RangeOrBuilder getRangeOrBuilder(int index); + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + java.util.List getGroupList(); + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + com.google.spanner.v1.Group getGroup(int index); + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + int getGroupCount(); + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + java.util.List getGroupOrBuilderList(); + + /** + * + * + *
                                +   * A list of groups to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.Group group = 3; + */ + com.google.spanner.v1.GroupOrBuilder getGroupOrBuilder(int index); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + * + * @return Whether the keyRecipes field is set. + */ + boolean hasKeyRecipes(); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + * + * @return The keyRecipes. + */ + com.google.spanner.v1.RecipeList getKeyRecipes(); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * .google.spanner.v1.RecipeList key_recipes = 5; + */ + com.google.spanner.v1.RecipeListOrBuilder getKeyRecipesOrBuilder(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamProto.java new file mode 100644 index 00000000000..ce0a156c394 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamProto.java @@ -0,0 +1,300 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/change_stream.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public final class ChangeStreamProto extends com.google.protobuf.GeneratedFile { + private ChangeStreamProto() {} + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ChangeStreamProto"); + } + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n%google/spanner/v1/change_stream.proto\022" + + "\021google.spanner.v1\032\034google/protobuf/stru" + + "ct.proto\032\037google/protobuf/timestamp.prot" + + "o\032\034google/spanner/v1/type.proto\"\226\024\n\022Chan" + + "geStreamRecord\022T\n\022data_change_record\030\001 \001" + + "(\01326.google.spanner.v1.ChangeStreamRecor" + + "d.DataChangeRecordH\000\022Q\n\020heartbeat_record" + + "\030\002 \001(\01325.google.spanner.v1.ChangeStreamR" + + "ecord.HeartbeatRecordH\000\022\\\n\026partition_sta" + + "rt_record\030\003 \001(\0132:.google.spanner.v1.Chan" + + "geStreamRecord.PartitionStartRecordH\000\022X\n" + + "\024partition_end_record\030\004 \001(\01328.google.spa" + + "nner.v1.ChangeStreamRecord.PartitionEndR" + + "ecordH\000\022\\\n\026partition_event_record\030\005 \001(\0132" + + ":.google.spanner.v1.ChangeStreamRecord.P" + + "artitionEventRecordH\000\032\322\n\n\020DataChangeReco" + + "rd\0224\n\020commit_timestamp\030\001 \001(\0132\032.google.pr" + + "otobuf.Timestamp\022\027\n\017record_sequence\030\002 \001(" + + "\t\022\035\n\025server_transaction_id\030\003 \001(\t\0222\n*is_l" + + "ast_record_in_transaction_in_partition\030\004" + + " \001(\010\022\r\n\005table\030\005 \001(\t\022^\n\017column_metadata\030\006" + + " \003(\0132E.google.spanner.v1.ChangeStreamRec" + + "ord.DataChangeRecord.ColumnMetadata\022H\n\004m" + + "ods\030\007 \003(\0132:.google.spanner.v1.ChangeStre" + + "amRecord.DataChangeRecord.Mod\022P\n\010mod_typ" + + "e\030\010 \001(\0162>.google.spanner.v1.ChangeStream" + + "Record.DataChangeRecord.ModType\022c\n\022value" + + "_capture_type\030\t \001(\0162G.google.spanner.v1." + + "ChangeStreamRecord.DataChangeRecord.Valu" + + "eCaptureType\022(\n number_of_records_in_tra" + + "nsaction\030\n \001(\005\022+\n#number_of_partitions_i" + + "n_transaction\030\013 \001(\005\022\027\n\017transaction_tag\030\014" + + " \001(\t\022\035\n\025is_system_transaction\030\r \001(\010\032w\n\016C" + + "olumnMetadata\022\014\n\004name\030\001 \001(\t\022%\n\004type\030\002 \001(" + + "\0132\027.google.spanner.v1.Type\022\026\n\016is_primary" + + "_key\030\003 \001(\010\022\030\n\020ordinal_position\030\004 \001(\003\032P\n\010" + + "ModValue\022\035\n\025column_metadata_index\030\001 \001(\005\022" + + "%\n\005value\030\002 \001(\0132\026.google.protobuf.Value\032\376" + + "\001\n\003Mod\022M\n\004keys\030\001 \003(\0132?.google.spanner.v1" + + ".ChangeStreamRecord.DataChangeRecord.Mod" + + "Value\022S\n\nold_values\030\002 \003(\0132?.google.spann" + + "er.v1.ChangeStreamRecord.DataChangeRecor" + + "d.ModValue\022S\n\nnew_values\030\003 \003(\0132?.google." + + "spanner.v1.ChangeStreamRecord.DataChange" + + "Record.ModValue\"G\n\007ModType\022\030\n\024MOD_TYPE_U" + + "NSPECIFIED\020\000\022\n\n\006INSERT\020\n\022\n\n\006UPDATE\020\024\022\n\n\006" + + "DELETE\020\036\"\207\001\n\020ValueCaptureType\022\"\n\036VALUE_C" + + "APTURE_TYPE_UNSPECIFIED\020\000\022\026\n\022OLD_AND_NEW" + + "_VALUES\020\n\022\016\n\nNEW_VALUES\020\024\022\013\n\007NEW_ROW\020\036\022\032" + + "\n\026NEW_ROW_AND_OLD_VALUES\020(\032@\n\017HeartbeatR" + + "ecord\022-\n\ttimestamp\030\001 \001(\0132\032.google.protob" + + "uf.Timestamp\032~\n\024PartitionStartRecord\0223\n\017" + + "start_timestamp\030\001 \001(\0132\032.google.protobuf." + + "Timestamp\022\027\n\017record_sequence\030\002 \001(\t\022\030\n\020pa" + + "rtition_tokens\030\003 \003(\t\032y\n\022PartitionEndReco" + + "rd\0221\n\rend_timestamp\030\001 \001(\0132\032.google.proto" + + "buf.Timestamp\022\027\n\017record_sequence\030\002 \001(\t\022\027" + + "\n\017partition_token\030\003 \001(\t\032\244\003\n\024PartitionEve" + + "ntRecord\0224\n\020commit_timestamp\030\001 \001(\0132\032.goo" + + "gle.protobuf.Timestamp\022\027\n\017record_sequenc" + + "e\030\002 \001(\t\022\027\n\017partition_token\030\003 \001(\t\022^\n\016move" + + "_in_events\030\004 \003(\0132F.google.spanner.v1.Cha" + + "ngeStreamRecord.PartitionEventRecord.Mov" + + "eInEvent\022`\n\017move_out_events\030\005 \003(\0132G.goog" + + "le.spanner.v1.ChangeStreamRecord.Partiti" + + "onEventRecord.MoveOutEvent\032-\n\013MoveInEven" + + "t\022\036\n\026source_partition_token\030\001 \001(\t\0323\n\014Mov" + + "eOutEvent\022#\n\033destination_partition_token" + + "\030\001 \001(\tB\010\n\006recordB\264\001\n\025com.google.spanner." + + "v1B\021ChangeStreamProtoP\001Z5cloud.google.co" + + "m/go/spanner/apiv1/spannerpb;spannerpb\252\002" + + "\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud\\" + + "Spanner\\V1\352\002\032Google::Cloud::Spanner::V1b" + + "\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.protobuf.StructProto.getDescriptor(), + com.google.protobuf.TimestampProto.getDescriptor(), + com.google.spanner.v1.TypeProto.getDescriptor(), + }); + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor = + getDescriptor().getMessageType(0); + internal_static_google_spanner_v1_ChangeStreamRecord_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor, + new java.lang.String[] { + "DataChangeRecord", + "HeartbeatRecord", + "PartitionStartRecord", + "PartitionEndRecord", + "PartitionEventRecord", + "Record", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor.getNestedType(0); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor, + new java.lang.String[] { + "CommitTimestamp", + "RecordSequence", + "ServerTransactionId", + "IsLastRecordInTransactionInPartition", + "Table", + "ColumnMetadata", + "Mods", + "ModType", + "ValueCaptureType", + "NumberOfRecordsInTransaction", + "NumberOfPartitionsInTransaction", + "TransactionTag", + "IsSystemTransaction", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor + .getNestedType(0); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_descriptor, + new java.lang.String[] { + "Name", "Type", "IsPrimaryKey", "OrdinalPosition", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor + .getNestedType(1); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_descriptor, + new java.lang.String[] { + "ColumnMetadataIndex", "Value", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor + .getNestedType(2); + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_descriptor, + new java.lang.String[] { + "Keys", "OldValues", "NewValues", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor.getNestedType(1); + internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_descriptor, + new java.lang.String[] { + "Timestamp", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor.getNestedType(2); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_descriptor, + new java.lang.String[] { + "StartTimestamp", "RecordSequence", "PartitionTokens", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor.getNestedType(3); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_descriptor, + new java.lang.String[] { + "EndTimestamp", "RecordSequence", "PartitionToken", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_descriptor.getNestedType(4); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor, + new java.lang.String[] { + "CommitTimestamp", + "RecordSequence", + "PartitionToken", + "MoveInEvents", + "MoveOutEvents", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor + .getNestedType(0); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_descriptor, + new java.lang.String[] { + "SourcePartitionToken", + }); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_descriptor = + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor + .getNestedType(1); + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_descriptor, + new java.lang.String[] { + "DestinationPartitionToken", + }); + descriptor.resolveAllFeaturesImmutable(); + com.google.protobuf.StructProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.spanner.v1.TypeProto.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamRecord.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamRecord.java new file mode 100644 index 00000000000..9409738a81a --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamRecord.java @@ -0,0 +1,20870 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/change_stream.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * Spanner Change Streams enable customers to capture and stream out changes to
                                + * their Spanner databases in real-time. A change stream
                                + * can be created with option partition_mode='IMMUTABLE_KEY_RANGE' or
                                + * partition_mode='MUTABLE_KEY_RANGE'.
                                + *
                                + * This message is only used in Change Streams created with the option
                                + * partition_mode='MUTABLE_KEY_RANGE'. Spanner automatically creates a special
                                + * Table-Valued Function (TVF) along with each Change Streams. The function
                                + * provides access to the change stream's records. The function is named
                                + * READ_<change_stream_name> (where <change_stream_name> is the
                                + * name of the change stream), and it returns a table with only one column
                                + * called ChangeRecord.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord} + */ +@com.google.protobuf.Generated +public final class ChangeStreamRecord extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord) + ChangeStreamRecordOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ChangeStreamRecord"); + } + + // Use ChangeStreamRecord.newBuilder() to construct. + private ChangeStreamRecord(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ChangeStreamRecord() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.class, + com.google.spanner.v1.ChangeStreamRecord.Builder.class); + } + + public interface DataChangeRecordOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.DataChangeRecord) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Indicates the timestamp in which the change was committed.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return Whether the commitTimestamp field is set. + */ + boolean hasCommitTimestamp(); + + /** + * + * + *
                                +     * Indicates the timestamp in which the change was committed.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return The commitTimestamp. + */ + com.google.protobuf.Timestamp getCommitTimestamp(); + + /** + * + * + *
                                +     * Indicates the timestamp in which the change was committed.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     *
                                +     * The record sequence number ordering across partitions is only meaningful
                                +     * in the context of a specific transaction. Record sequence numbers are
                                +     * unique across partitions for a specific transaction. Sort the
                                +     * DataChangeRecords for the same
                                +     * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +     * by
                                +     * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +     * to reconstruct the ordering of the changes within the transaction.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + java.lang.String getRecordSequence(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     *
                                +     * The record sequence number ordering across partitions is only meaningful
                                +     * in the context of a specific transaction. Record sequence numbers are
                                +     * unique across partitions for a specific transaction. Sort the
                                +     * DataChangeRecords for the same
                                +     * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +     * by
                                +     * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +     * to reconstruct the ordering of the changes within the transaction.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + com.google.protobuf.ByteString getRecordSequenceBytes(); + + /** + * + * + *
                                +     * Provides a globally unique string that represents the transaction in
                                +     * which the change was committed. Multiple transactions can have the same
                                +     * commit timestamp, but each transaction has a unique
                                +     * server_transaction_id.
                                +     * 
                                + * + * string server_transaction_id = 3; + * + * @return The serverTransactionId. + */ + java.lang.String getServerTransactionId(); + + /** + * + * + *
                                +     * Provides a globally unique string that represents the transaction in
                                +     * which the change was committed. Multiple transactions can have the same
                                +     * commit timestamp, but each transaction has a unique
                                +     * server_transaction_id.
                                +     * 
                                + * + * string server_transaction_id = 3; + * + * @return The bytes for serverTransactionId. + */ + com.google.protobuf.ByteString getServerTransactionIdBytes(); + + /** + * + * + *
                                +     * Indicates whether this is the last record for a transaction in the
                                +     * current partition. Clients can use this field to determine when all
                                +     * records for a transaction in the current partition have been received.
                                +     * 
                                + * + * bool is_last_record_in_transaction_in_partition = 4; + * + * @return The isLastRecordInTransactionInPartition. + */ + boolean getIsLastRecordInTransactionInPartition(); + + /** + * + * + *
                                +     * Name of the table affected by the change.
                                +     * 
                                + * + * string table = 5; + * + * @return The table. + */ + java.lang.String getTable(); + + /** + * + * + *
                                +     * Name of the table affected by the change.
                                +     * 
                                + * + * string table = 5; + * + * @return The bytes for table. + */ + com.google.protobuf.ByteString getTableBytes(); + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + java.util.List + getColumnMetadataList(); + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata getColumnMetadata( + int index); + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + int getColumnMetadataCount(); + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder> + getColumnMetadataOrBuilderList(); + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder + getColumnMetadataOrBuilder(int index); + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + java.util.List getModsList(); + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod getMods(int index); + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + int getModsCount(); + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + java.util.List + getModsOrBuilderList(); + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder getModsOrBuilder( + int index); + + /** + * + * + *
                                +     * Describes the type of change.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @return The enum numeric value on the wire for modType. + */ + int getModTypeValue(); + + /** + * + * + *
                                +     * Describes the type of change.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @return The modType. + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType getModType(); + + /** + * + * + *
                                +     * Describes the value capture type that was specified in the change stream
                                +     * configuration when this change was captured.
                                +     * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @return The enum numeric value on the wire for valueCaptureType. + */ + int getValueCaptureTypeValue(); + + /** + * + * + *
                                +     * Describes the value capture type that was specified in the change stream
                                +     * configuration when this change was captured.
                                +     * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @return The valueCaptureType. + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType + getValueCaptureType(); + + /** + * + * + *
                                +     * Indicates the number of data change records that are part of this
                                +     * transaction across all change stream partitions. This value can be used
                                +     * to assemble all the records associated with a particular transaction.
                                +     * 
                                + * + * int32 number_of_records_in_transaction = 10; + * + * @return The numberOfRecordsInTransaction. + */ + int getNumberOfRecordsInTransaction(); + + /** + * + * + *
                                +     * Indicates the number of partitions that return data change records for
                                +     * this transaction. This value can be helpful in assembling all records
                                +     * associated with a particular transaction.
                                +     * 
                                + * + * int32 number_of_partitions_in_transaction = 11; + * + * @return The numberOfPartitionsInTransaction. + */ + int getNumberOfPartitionsInTransaction(); + + /** + * + * + *
                                +     * Indicates the transaction tag associated with this transaction.
                                +     * 
                                + * + * string transaction_tag = 12; + * + * @return The transactionTag. + */ + java.lang.String getTransactionTag(); + + /** + * + * + *
                                +     * Indicates the transaction tag associated with this transaction.
                                +     * 
                                + * + * string transaction_tag = 12; + * + * @return The bytes for transactionTag. + */ + com.google.protobuf.ByteString getTransactionTagBytes(); + + /** + * + * + *
                                +     * Indicates whether the transaction is a system transaction. System
                                +     * transactions include those issued by time-to-live (TTL), column backfill,
                                +     * etc.
                                +     * 
                                + * + * bool is_system_transaction = 13; + * + * @return The isSystemTransaction. + */ + boolean getIsSystemTransaction(); + } + + /** + * + * + *
                                +   * A data change record contains a set of changes to a table with the same
                                +   * modification type (insert, update, or delete) committed at the same commit
                                +   * timestamp in one change stream partition for the same transaction. Multiple
                                +   * data change records can be returned for the same transaction across
                                +   * multiple change stream partitions.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord} + */ + public static final class DataChangeRecord extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord) + DataChangeRecordOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DataChangeRecord"); + } + + // Use DataChangeRecord.newBuilder() to construct. + private DataChangeRecord(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DataChangeRecord() { + recordSequence_ = ""; + serverTransactionId_ = ""; + table_ = ""; + columnMetadata_ = java.util.Collections.emptyList(); + mods_ = java.util.Collections.emptyList(); + modType_ = 0; + valueCaptureType_ = 0; + transactionTag_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Builder.class); + } + + /** + * + * + *
                                +     * Mod type describes the type of change Spanner applied to the data. For
                                +     * example, if the client submits an INSERT_OR_UPDATE request, Spanner will
                                +     * perform an insert if there is no existing row and return ModType INSERT.
                                +     * Alternatively, if there is an existing row, Spanner will perform an
                                +     * update and return ModType UPDATE.
                                +     * 
                                + * + * Protobuf enum {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType} + */ + public enum ModType implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +       * Not specified.
                                +       * 
                                + * + * MOD_TYPE_UNSPECIFIED = 0; + */ + MOD_TYPE_UNSPECIFIED(0), + /** + * + * + *
                                +       * Indicates data was inserted.
                                +       * 
                                + * + * INSERT = 10; + */ + INSERT(10), + /** + * + * + *
                                +       * Indicates existing data was updated.
                                +       * 
                                + * + * UPDATE = 20; + */ + UPDATE(20), + /** + * + * + *
                                +       * Indicates existing data was deleted.
                                +       * 
                                + * + * DELETE = 30; + */ + DELETE(30), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ModType"); + } + + /** + * + * + *
                                +       * Not specified.
                                +       * 
                                + * + * MOD_TYPE_UNSPECIFIED = 0; + */ + public static final int MOD_TYPE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +       * Indicates data was inserted.
                                +       * 
                                + * + * INSERT = 10; + */ + public static final int INSERT_VALUE = 10; + + /** + * + * + *
                                +       * Indicates existing data was updated.
                                +       * 
                                + * + * UPDATE = 20; + */ + public static final int UPDATE_VALUE = 20; + + /** + * + * + *
                                +       * Indicates existing data was deleted.
                                +       * 
                                + * + * DELETE = 30; + */ + public static final int DELETE_VALUE = 30; + + 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 ModType 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 ModType forNumber(int value) { + switch (value) { + case 0: + return MOD_TYPE_UNSPECIFIED; + case 10: + return INSERT; + case 20: + return UPDATE; + case 30: + return DELETE; + 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 ModType findValueByNumber(int number) { + return ModType.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDescriptor() + .getEnumTypes() + .get(0); + } + + private static final ModType[] VALUES = values(); + + public static ModType 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 ModType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType) + } + + /** + * + * + *
                                +     * Value capture type describes which values are recorded in the data
                                +     * change record.
                                +     * 
                                + * + * Protobuf enum {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType} + */ + public enum ValueCaptureType implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +       * Not specified.
                                +       * 
                                + * + * VALUE_CAPTURE_TYPE_UNSPECIFIED = 0; + */ + VALUE_CAPTURE_TYPE_UNSPECIFIED(0), + /** + * + * + *
                                +       * Records both old and new values of the modified watched columns.
                                +       * 
                                + * + * OLD_AND_NEW_VALUES = 10; + */ + OLD_AND_NEW_VALUES(10), + /** + * + * + *
                                +       * Records only new values of the modified watched columns.
                                +       * 
                                + * + * NEW_VALUES = 20; + */ + NEW_VALUES(20), + /** + * + * + *
                                +       * Records new values of all watched columns, including modified and
                                +       * unmodified columns.
                                +       * 
                                + * + * NEW_ROW = 30; + */ + NEW_ROW(30), + /** + * + * + *
                                +       * Records the new values of all watched columns, including modified and
                                +       * unmodified columns. Also records the old values of the modified
                                +       * columns.
                                +       * 
                                + * + * NEW_ROW_AND_OLD_VALUES = 40; + */ + NEW_ROW_AND_OLD_VALUES(40), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ValueCaptureType"); + } + + /** + * + * + *
                                +       * Not specified.
                                +       * 
                                + * + * VALUE_CAPTURE_TYPE_UNSPECIFIED = 0; + */ + public static final int VALUE_CAPTURE_TYPE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +       * Records both old and new values of the modified watched columns.
                                +       * 
                                + * + * OLD_AND_NEW_VALUES = 10; + */ + public static final int OLD_AND_NEW_VALUES_VALUE = 10; + + /** + * + * + *
                                +       * Records only new values of the modified watched columns.
                                +       * 
                                + * + * NEW_VALUES = 20; + */ + public static final int NEW_VALUES_VALUE = 20; + + /** + * + * + *
                                +       * Records new values of all watched columns, including modified and
                                +       * unmodified columns.
                                +       * 
                                + * + * NEW_ROW = 30; + */ + public static final int NEW_ROW_VALUE = 30; + + /** + * + * + *
                                +       * Records the new values of all watched columns, including modified and
                                +       * unmodified columns. Also records the old values of the modified
                                +       * columns.
                                +       * 
                                + * + * NEW_ROW_AND_OLD_VALUES = 40; + */ + public static final int NEW_ROW_AND_OLD_VALUES_VALUE = 40; + + 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 ValueCaptureType 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 ValueCaptureType forNumber(int value) { + switch (value) { + case 0: + return VALUE_CAPTURE_TYPE_UNSPECIFIED; + case 10: + return OLD_AND_NEW_VALUES; + case 20: + return NEW_VALUES; + case 30: + return NEW_ROW; + case 40: + return NEW_ROW_AND_OLD_VALUES; + 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 ValueCaptureType findValueByNumber(int number) { + return ValueCaptureType.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDescriptor() + .getEnumTypes() + .get(1); + } + + private static final ValueCaptureType[] VALUES = values(); + + public static ValueCaptureType 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 ValueCaptureType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType) + } + + public interface ColumnMetadataOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +       * Name of the column.
                                +       * 
                                + * + * string name = 1; + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
                                +       * Name of the column.
                                +       * 
                                + * + * string name = 1; + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
                                +       * Type of the column.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 2; + * + * @return Whether the type field is set. + */ + boolean hasType(); + + /** + * + * + *
                                +       * Type of the column.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 2; + * + * @return The type. + */ + com.google.spanner.v1.Type getType(); + + /** + * + * + *
                                +       * Type of the column.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(); + + /** + * + * + *
                                +       * Indicates whether the column is a primary key column.
                                +       * 
                                + * + * bool is_primary_key = 3; + * + * @return The isPrimaryKey. + */ + boolean getIsPrimaryKey(); + + /** + * + * + *
                                +       * Ordinal position of the column based on the original table definition
                                +       * in the schema starting with a value of 1.
                                +       * 
                                + * + * int64 ordinal_position = 4; + * + * @return The ordinalPosition. + */ + long getOrdinalPosition(); + } + + /** + * + * + *
                                +     * Metadata for a column.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata} + */ + public static final class ColumnMetadata extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) + ColumnMetadataOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ColumnMetadata"); + } + + // Use ColumnMetadata.newBuilder() to construct. + private ColumnMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ColumnMetadata() { + name_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + .class); + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
                                +       * Name of the column.
                                +       * 
                                + * + * string name = 1; + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
                                +       * Name of the column.
                                +       * 
                                + * + * string name = 1; + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TYPE_FIELD_NUMBER = 2; + private com.google.spanner.v1.Type type_; + + /** + * + * + *
                                +       * Type of the column.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 2; + * + * @return Whether the type field is set. + */ + @java.lang.Override + public boolean hasType() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * Type of the column.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 2; + * + * @return The type. + */ + @java.lang.Override + public com.google.spanner.v1.Type getType() { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } + + /** + * + * + *
                                +       * Type of the column.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + @java.lang.Override + public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } + + public static final int IS_PRIMARY_KEY_FIELD_NUMBER = 3; + private boolean isPrimaryKey_ = false; + + /** + * + * + *
                                +       * Indicates whether the column is a primary key column.
                                +       * 
                                + * + * bool is_primary_key = 3; + * + * @return The isPrimaryKey. + */ + @java.lang.Override + public boolean getIsPrimaryKey() { + return isPrimaryKey_; + } + + public static final int ORDINAL_POSITION_FIELD_NUMBER = 4; + private long ordinalPosition_ = 0L; + + /** + * + * + *
                                +       * Ordinal position of the column based on the original table definition
                                +       * in the schema starting with a value of 1.
                                +       * 
                                + * + * int64 ordinal_position = 4; + * + * @return The ordinalPosition. + */ + @java.lang.Override + public long getOrdinalPosition() { + return ordinalPosition_; + } + + 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.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getType()); + } + if (isPrimaryKey_ != false) { + output.writeBool(3, isPrimaryKey_); + } + if (ordinalPosition_ != 0L) { + output.writeInt64(4, ordinalPosition_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getType()); + } + if (isPrimaryKey_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, isPrimaryKey_); + } + if (ordinalPosition_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(4, ordinalPosition_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata other = + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) obj; + + if (!getName().equals(other.getName())) return false; + if (hasType() != other.hasType()) return false; + if (hasType()) { + if (!getType().equals(other.getType())) return false; + } + if (getIsPrimaryKey() != other.getIsPrimaryKey()) return false; + if (getOrdinalPosition() != other.getOrdinalPosition()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + if (hasType()) { + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + getType().hashCode(); + } + hash = (37 * hash) + IS_PRIMARY_KEY_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIsPrimaryKey()); + hash = (37 * hash) + ORDINAL_POSITION_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOrdinalPosition()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +       * Metadata for a column.
                                +       * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + .class); + } + + // Construct using + // com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTypeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + type_ = null; + if (typeBuilder_ != null) { + typeBuilder_.dispose(); + typeBuilder_ = null; + } + isPrimaryKey_ = false; + ordinalPosition_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ColumnMetadata_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata build() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata result = + new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.type_ = typeBuilder_ == null ? type_ : typeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.isPrimaryKey_ = isPrimaryKey_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.ordinalPosition_ = ordinalPosition_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) { + return mergeFrom( + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + .getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasType()) { + mergeType(other.getType()); + } + if (other.getIsPrimaryKey() != false) { + setIsPrimaryKey(other.getIsPrimaryKey()); + } + if (other.getOrdinalPosition() != 0L) { + setOrdinalPosition(other.getOrdinalPosition()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetTypeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + isPrimaryKey_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + ordinalPosition_ = input.readInt64(); + bitField0_ |= 0x00000008; + break; + } // case 32 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
                                +         * Name of the column.
                                +         * 
                                + * + * string name = 1; + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +         * Name of the column.
                                +         * 
                                + * + * string name = 1; + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +         * Name of the column.
                                +         * 
                                + * + * string name = 1; + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Name of the column.
                                +         * 
                                + * + * string name = 1; + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Name of the column.
                                +         * 
                                + * + * string name = 1; + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.spanner.v1.Type type_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Type, + com.google.spanner.v1.Type.Builder, + com.google.spanner.v1.TypeOrBuilder> + typeBuilder_; + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + * + * @return Whether the type field is set. + */ + public boolean hasType() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + * + * @return The type. + */ + public com.google.spanner.v1.Type getType() { + if (typeBuilder_ == null) { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } else { + return typeBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + public Builder setType(com.google.spanner.v1.Type value) { + if (typeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + type_ = value; + } else { + typeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + public Builder setType(com.google.spanner.v1.Type.Builder builderForValue) { + if (typeBuilder_ == null) { + type_ = builderForValue.build(); + } else { + typeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + public Builder mergeType(com.google.spanner.v1.Type value) { + if (typeBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && type_ != null + && type_ != com.google.spanner.v1.Type.getDefaultInstance()) { + getTypeBuilder().mergeFrom(value); + } else { + type_ = value; + } + } else { + typeBuilder_.mergeFrom(value); + } + if (type_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000002); + type_ = null; + if (typeBuilder_ != null) { + typeBuilder_.dispose(); + typeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + public com.google.spanner.v1.Type.Builder getTypeBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetTypeFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { + if (typeBuilder_ != null) { + return typeBuilder_.getMessageOrBuilder(); + } else { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } + } + + /** + * + * + *
                                +         * Type of the column.
                                +         * 
                                + * + * .google.spanner.v1.Type type = 2; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Type, + com.google.spanner.v1.Type.Builder, + com.google.spanner.v1.TypeOrBuilder> + internalGetTypeFieldBuilder() { + if (typeBuilder_ == null) { + typeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Type, + com.google.spanner.v1.Type.Builder, + com.google.spanner.v1.TypeOrBuilder>( + getType(), getParentForChildren(), isClean()); + type_ = null; + } + return typeBuilder_; + } + + private boolean isPrimaryKey_; + + /** + * + * + *
                                +         * Indicates whether the column is a primary key column.
                                +         * 
                                + * + * bool is_primary_key = 3; + * + * @return The isPrimaryKey. + */ + @java.lang.Override + public boolean getIsPrimaryKey() { + return isPrimaryKey_; + } + + /** + * + * + *
                                +         * Indicates whether the column is a primary key column.
                                +         * 
                                + * + * bool is_primary_key = 3; + * + * @param value The isPrimaryKey to set. + * @return This builder for chaining. + */ + public Builder setIsPrimaryKey(boolean value) { + + isPrimaryKey_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Indicates whether the column is a primary key column.
                                +         * 
                                + * + * bool is_primary_key = 3; + * + * @return This builder for chaining. + */ + public Builder clearIsPrimaryKey() { + bitField0_ = (bitField0_ & ~0x00000004); + isPrimaryKey_ = false; + onChanged(); + return this; + } + + private long ordinalPosition_; + + /** + * + * + *
                                +         * Ordinal position of the column based on the original table definition
                                +         * in the schema starting with a value of 1.
                                +         * 
                                + * + * int64 ordinal_position = 4; + * + * @return The ordinalPosition. + */ + @java.lang.Override + public long getOrdinalPosition() { + return ordinalPosition_; + } + + /** + * + * + *
                                +         * Ordinal position of the column based on the original table definition
                                +         * in the schema starting with a value of 1.
                                +         * 
                                + * + * int64 ordinal_position = 4; + * + * @param value The ordinalPosition to set. + * @return This builder for chaining. + */ + public Builder setOrdinalPosition(long value) { + + ordinalPosition_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Ordinal position of the column based on the original table definition
                                +         * in the schema starting with a value of 1.
                                +         * 
                                + * + * int64 ordinal_position = 4; + * + * @return This builder for chaining. + */ + public Builder clearOrdinalPosition() { + bitField0_ = (bitField0_ & ~0x00000008); + ordinalPosition_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata) + private static final com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ColumnMetadata parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ModValueOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +       * Index within the repeated
                                +       * [column_metadata][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.column_metadata]
                                +       * field, to obtain the column metadata for the column that was modified.
                                +       * 
                                + * + * int32 column_metadata_index = 1; + * + * @return The columnMetadataIndex. + */ + int getColumnMetadataIndex(); + + /** + * + * + *
                                +       * The value of the column.
                                +       * 
                                + * + * .google.protobuf.Value value = 2; + * + * @return Whether the value field is set. + */ + boolean hasValue(); + + /** + * + * + *
                                +       * The value of the column.
                                +       * 
                                + * + * .google.protobuf.Value value = 2; + * + * @return The value. + */ + com.google.protobuf.Value getValue(); + + /** + * + * + *
                                +       * The value of the column.
                                +       * 
                                + * + * .google.protobuf.Value value = 2; + */ + com.google.protobuf.ValueOrBuilder getValueOrBuilder(); + } + + /** + * + * + *
                                +     * Returns the value and associated metadata for a particular field of the
                                +     * [Mod][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod].
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue} + */ + public static final class ModValue extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) + ModValueOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ModValue"); + } + + // Use ModValue.newBuilder() to construct. + private ModValue(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ModValue() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder.class); + } + + private int bitField0_; + public static final int COLUMN_METADATA_INDEX_FIELD_NUMBER = 1; + private int columnMetadataIndex_ = 0; + + /** + * + * + *
                                +       * Index within the repeated
                                +       * [column_metadata][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.column_metadata]
                                +       * field, to obtain the column metadata for the column that was modified.
                                +       * 
                                + * + * int32 column_metadata_index = 1; + * + * @return The columnMetadataIndex. + */ + @java.lang.Override + public int getColumnMetadataIndex() { + return columnMetadataIndex_; + } + + public static final int VALUE_FIELD_NUMBER = 2; + private com.google.protobuf.Value value_; + + /** + * + * + *
                                +       * The value of the column.
                                +       * 
                                + * + * .google.protobuf.Value value = 2; + * + * @return Whether the value field is set. + */ + @java.lang.Override + public boolean hasValue() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * The value of the column.
                                +       * 
                                + * + * .google.protobuf.Value value = 2; + * + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.Value getValue() { + return value_ == null ? com.google.protobuf.Value.getDefaultInstance() : value_; + } + + /** + * + * + *
                                +       * The value of the column.
                                +       * 
                                + * + * .google.protobuf.Value value = 2; + */ + @java.lang.Override + public com.google.protobuf.ValueOrBuilder getValueOrBuilder() { + return value_ == null ? com.google.protobuf.Value.getDefaultInstance() : value_; + } + + 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 (columnMetadataIndex_ != 0) { + output.writeInt32(1, columnMetadataIndex_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getValue()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (columnMetadataIndex_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, columnMetadataIndex_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getValue()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue other = + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) obj; + + if (getColumnMetadataIndex() != other.getColumnMetadataIndex()) return false; + if (hasValue() != other.hasValue()) return false; + if (hasValue()) { + if (!getValue().equals(other.getValue())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + COLUMN_METADATA_INDEX_FIELD_NUMBER; + hash = (53 * hash) + getColumnMetadataIndex(); + if (hasValue()) { + hash = (37 * hash) + VALUE_FIELD_NUMBER; + hash = (53 * hash) + getValue().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +       * Returns the value and associated metadata for a particular field of the
                                +       * [Mod][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod].
                                +       * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder.class); + } + + // Construct using + // com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetValueFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + columnMetadataIndex_ = 0; + value_ = null; + if (valueBuilder_ != null) { + valueBuilder_.dispose(); + valueBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_ModValue_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue build() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue result = + new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.columnMetadataIndex_ = columnMetadataIndex_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.value_ = valueBuilder_ == null ? value_ : valueBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) { + return mergeFrom( + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance()) return this; + if (other.getColumnMetadataIndex() != 0) { + setColumnMetadataIndex(other.getColumnMetadataIndex()); + } + if (other.hasValue()) { + mergeValue(other.getValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + columnMetadataIndex_ = input.readInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + input.readMessage( + internalGetValueFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int columnMetadataIndex_; + + /** + * + * + *
                                +         * Index within the repeated
                                +         * [column_metadata][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.column_metadata]
                                +         * field, to obtain the column metadata for the column that was modified.
                                +         * 
                                + * + * int32 column_metadata_index = 1; + * + * @return The columnMetadataIndex. + */ + @java.lang.Override + public int getColumnMetadataIndex() { + return columnMetadataIndex_; + } + + /** + * + * + *
                                +         * Index within the repeated
                                +         * [column_metadata][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.column_metadata]
                                +         * field, to obtain the column metadata for the column that was modified.
                                +         * 
                                + * + * int32 column_metadata_index = 1; + * + * @param value The columnMetadataIndex to set. + * @return This builder for chaining. + */ + public Builder setColumnMetadataIndex(int value) { + + columnMetadataIndex_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * Index within the repeated
                                +         * [column_metadata][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.column_metadata]
                                +         * field, to obtain the column metadata for the column that was modified.
                                +         * 
                                + * + * int32 column_metadata_index = 1; + * + * @return This builder for chaining. + */ + public Builder clearColumnMetadataIndex() { + bitField0_ = (bitField0_ & ~0x00000001); + columnMetadataIndex_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.Value value_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder> + valueBuilder_; + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + * + * @return Whether the value field is set. + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + * + * @return The value. + */ + public com.google.protobuf.Value getValue() { + if (valueBuilder_ == null) { + return value_ == null ? com.google.protobuf.Value.getDefaultInstance() : value_; + } else { + return valueBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + */ + public Builder setValue(com.google.protobuf.Value value) { + if (valueBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + } else { + valueBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + */ + public Builder setValue(com.google.protobuf.Value.Builder builderForValue) { + if (valueBuilder_ == null) { + value_ = builderForValue.build(); + } else { + valueBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + */ + public Builder mergeValue(com.google.protobuf.Value value) { + if (valueBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && value_ != null + && value_ != com.google.protobuf.Value.getDefaultInstance()) { + getValueBuilder().mergeFrom(value); + } else { + value_ = value; + } + } else { + valueBuilder_.mergeFrom(value); + } + if (value_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + */ + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000002); + value_ = null; + if (valueBuilder_ != null) { + valueBuilder_.dispose(); + valueBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + */ + public com.google.protobuf.Value.Builder getValueBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetValueFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + */ + public com.google.protobuf.ValueOrBuilder getValueOrBuilder() { + if (valueBuilder_ != null) { + return valueBuilder_.getMessageOrBuilder(); + } else { + return value_ == null ? com.google.protobuf.Value.getDefaultInstance() : value_; + } + } + + /** + * + * + *
                                +         * The value of the column.
                                +         * 
                                + * + * .google.protobuf.Value value = 2; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder> + internalGetValueFieldBuilder() { + if (valueBuilder_ == null) { + valueBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder>( + getValue(), getParentForChildren(), isClean()); + value_ = null; + } + return valueBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue) + private static final com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ModValue parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ModOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + java.util.List + getKeysList(); + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getKeys(int index); + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + int getKeysCount(); + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getKeysOrBuilderList(); + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder getKeysOrBuilder( + int index); + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + java.util.List + getOldValuesList(); + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getOldValues(int index); + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + int getOldValuesCount(); + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getOldValuesOrBuilderList(); + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getOldValuesOrBuilder(int index); + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + java.util.List + getNewValuesList(); + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getNewValues(int index); + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + int getNewValuesCount(); + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getNewValuesOrBuilderList(); + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getNewValuesOrBuilder(int index); + } + + /** + * + * + *
                                +     * A mod describes all data changes in a watched table row.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod} + */ + public static final class Mod extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) + ModOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Mod"); + } + + // Use Mod.newBuilder() to construct. + private Mod(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Mod() { + keys_ = java.util.Collections.emptyList(); + oldValues_ = java.util.Collections.emptyList(); + newValues_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder.class); + } + + public static final int KEYS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List + keys_; + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + @java.lang.Override + public java.util.List + getKeysList() { + return keys_; + } + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + @java.lang.Override + public java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getKeysOrBuilderList() { + return keys_; + } + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + @java.lang.Override + public int getKeysCount() { + return keys_.size(); + } + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getKeys(int index) { + return keys_.get(index); + } + + /** + * + * + *
                                +       * Returns the value of the primary key of the modified row.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getKeysOrBuilder(int index) { + return keys_.get(index); + } + + public static final int OLD_VALUES_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private java.util.List + oldValues_; + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + @java.lang.Override + public java.util.List + getOldValuesList() { + return oldValues_; + } + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + @java.lang.Override + public java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getOldValuesOrBuilderList() { + return oldValues_; + } + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + @java.lang.Override + public int getOldValuesCount() { + return oldValues_.size(); + } + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getOldValues( + int index) { + return oldValues_.get(index); + } + + /** + * + * + *
                                +       * Returns the old values before the change for the modified columns.
                                +       * Always empty for
                                +       * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +       * or if old values are not being captured specified by
                                +       * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getOldValuesOrBuilder(int index) { + return oldValues_.get(index); + } + + public static final int NEW_VALUES_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private java.util.List + newValues_; + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + @java.lang.Override + public java.util.List + getNewValuesList() { + return newValues_; + } + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + @java.lang.Override + public java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getNewValuesOrBuilderList() { + return newValues_; + } + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + @java.lang.Override + public int getNewValuesCount() { + return newValues_.size(); + } + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getNewValues( + int index) { + return newValues_.get(index); + } + + /** + * + * + *
                                +       * Returns the new values after the change for the modified columns.
                                +       * Always empty for
                                +       * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getNewValuesOrBuilder(int index) { + return newValues_.get(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 < keys_.size(); i++) { + output.writeMessage(1, keys_.get(i)); + } + for (int i = 0; i < oldValues_.size(); i++) { + output.writeMessage(2, oldValues_.get(i)); + } + for (int i = 0; i < newValues_.size(); i++) { + output.writeMessage(3, newValues_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < keys_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, keys_.get(i)); + } + for (int i = 0; i < oldValues_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, oldValues_.get(i)); + } + for (int i = 0; i < newValues_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, newValues_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod other = + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) obj; + + if (!getKeysList().equals(other.getKeysList())) return false; + if (!getOldValuesList().equals(other.getOldValuesList())) return false; + if (!getNewValuesList().equals(other.getNewValuesList())) 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 (getKeysCount() > 0) { + hash = (37 * hash) + KEYS_FIELD_NUMBER; + hash = (53 * hash) + getKeysList().hashCode(); + } + if (getOldValuesCount() > 0) { + hash = (37 * hash) + OLD_VALUES_FIELD_NUMBER; + hash = (53 * hash) + getOldValuesList().hashCode(); + } + if (getNewValuesCount() > 0) { + hash = (37 * hash) + NEW_VALUES_FIELD_NUMBER; + hash = (53 * hash) + getNewValuesList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +       * A mod describes all data changes in a watched table row.
                                +       * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder.class); + } + + // Construct using + // com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (keysBuilder_ == null) { + keys_ = java.util.Collections.emptyList(); + } else { + keys_ = null; + keysBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (oldValuesBuilder_ == null) { + oldValues_ = java.util.Collections.emptyList(); + } else { + oldValues_ = null; + oldValuesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (newValuesBuilder_ == null) { + newValues_ = java.util.Collections.emptyList(); + } else { + newValues_ = null; + newValuesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_Mod_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod build() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod result = + new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod result) { + if (keysBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + keys_ = java.util.Collections.unmodifiableList(keys_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.keys_ = keys_; + } else { + result.keys_ = keysBuilder_.build(); + } + if (oldValuesBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + oldValues_ = java.util.Collections.unmodifiableList(oldValues_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.oldValues_ = oldValues_; + } else { + result.oldValues_ = oldValuesBuilder_.build(); + } + if (newValuesBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + newValues_ = java.util.Collections.unmodifiableList(newValues_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.newValues_ = newValues_; + } else { + result.newValues_ = newValuesBuilder_.build(); + } + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) { + return mergeFrom((com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.getDefaultInstance()) + return this; + if (keysBuilder_ == null) { + if (!other.keys_.isEmpty()) { + if (keys_.isEmpty()) { + keys_ = other.keys_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureKeysIsMutable(); + keys_.addAll(other.keys_); + } + onChanged(); + } + } else { + if (!other.keys_.isEmpty()) { + if (keysBuilder_.isEmpty()) { + keysBuilder_.dispose(); + keysBuilder_ = null; + keys_ = other.keys_; + bitField0_ = (bitField0_ & ~0x00000001); + keysBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetKeysFieldBuilder() + : null; + } else { + keysBuilder_.addAllMessages(other.keys_); + } + } + } + if (oldValuesBuilder_ == null) { + if (!other.oldValues_.isEmpty()) { + if (oldValues_.isEmpty()) { + oldValues_ = other.oldValues_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureOldValuesIsMutable(); + oldValues_.addAll(other.oldValues_); + } + onChanged(); + } + } else { + if (!other.oldValues_.isEmpty()) { + if (oldValuesBuilder_.isEmpty()) { + oldValuesBuilder_.dispose(); + oldValuesBuilder_ = null; + oldValues_ = other.oldValues_; + bitField0_ = (bitField0_ & ~0x00000002); + oldValuesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetOldValuesFieldBuilder() + : null; + } else { + oldValuesBuilder_.addAllMessages(other.oldValues_); + } + } + } + if (newValuesBuilder_ == null) { + if (!other.newValues_.isEmpty()) { + if (newValues_.isEmpty()) { + newValues_ = other.newValues_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureNewValuesIsMutable(); + newValues_.addAll(other.newValues_); + } + onChanged(); + } + } else { + if (!other.newValues_.isEmpty()) { + if (newValuesBuilder_.isEmpty()) { + newValuesBuilder_.dispose(); + newValuesBuilder_ = null; + newValues_ = other.newValues_; + bitField0_ = (bitField0_ & ~0x00000004); + newValuesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetNewValuesFieldBuilder() + : null; + } else { + newValuesBuilder_.addAllMessages(other.newValues_); + } + } + } + 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: + { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue m = + input.readMessage( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .parser(), + extensionRegistry); + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.add(m); + } else { + keysBuilder_.addMessage(m); + } + break; + } // case 10 + case 18: + { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue m = + input.readMessage( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .parser(), + extensionRegistry); + if (oldValuesBuilder_ == null) { + ensureOldValuesIsMutable(); + oldValues_.add(m); + } else { + oldValuesBuilder_.addMessage(m); + } + break; + } // case 18 + case 26: + { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue m = + input.readMessage( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .parser(), + extensionRegistry); + if (newValuesBuilder_ == null) { + ensureNewValuesIsMutable(); + newValues_.add(m); + } else { + newValuesBuilder_.addMessage(m); + } + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List + keys_ = java.util.Collections.emptyList(); + + private void ensureKeysIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + keys_ = + new java.util.ArrayList< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue>(keys_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + keysBuilder_; + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public java.util.List + getKeysList() { + if (keysBuilder_ == null) { + return java.util.Collections.unmodifiableList(keys_); + } else { + return keysBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public int getKeysCount() { + if (keysBuilder_ == null) { + return keys_.size(); + } else { + return keysBuilder_.getCount(); + } + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getKeys( + int index) { + if (keysBuilder_ == null) { + return keys_.get(index); + } else { + return keysBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder setKeys( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (keysBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKeysIsMutable(); + keys_.set(index, value); + onChanged(); + } else { + keysBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder setKeys( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.set(index, builderForValue.build()); + onChanged(); + } else { + keysBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder addKeys( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (keysBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKeysIsMutable(); + keys_.add(value); + onChanged(); + } else { + keysBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder addKeys( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (keysBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureKeysIsMutable(); + keys_.add(index, value); + onChanged(); + } else { + keysBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder addKeys( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.add(builderForValue.build()); + onChanged(); + } else { + keysBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder addKeys( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.add(index, builderForValue.build()); + onChanged(); + } else { + keysBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder addAllKeys( + java.lang.Iterable< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue> + values) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, keys_); + onChanged(); + } else { + keysBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder clearKeys() { + if (keysBuilder_ == null) { + keys_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + keysBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public Builder removeKeys(int index) { + if (keysBuilder_ == null) { + ensureKeysIsMutable(); + keys_.remove(index); + onChanged(); + } else { + keysBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + getKeysBuilder(int index) { + return internalGetKeysFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getKeysOrBuilder(int index) { + if (keysBuilder_ == null) { + return keys_.get(index); + } else { + return keysBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getKeysOrBuilderList() { + if (keysBuilder_ != null) { + return keysBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(keys_); + } + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + addKeysBuilder() { + return internalGetKeysFieldBuilder() + .addBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance()); + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + addKeysBuilder(int index) { + return internalGetKeysFieldBuilder() + .addBuilder( + index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance()); + } + + /** + * + * + *
                                +         * Returns the value of the primary key of the modified row.
                                +         * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue keys = 1; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder> + getKeysBuilderList() { + return internalGetKeysFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + internalGetKeysFieldBuilder() { + if (keysBuilder_ == null) { + keysBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder>( + keys_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + keys_ = null; + } + return keysBuilder_; + } + + private java.util.List + oldValues_ = java.util.Collections.emptyList(); + + private void ensureOldValuesIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + oldValues_ = + new java.util.ArrayList< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue>(oldValues_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + oldValuesBuilder_; + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public java.util.List + getOldValuesList() { + if (oldValuesBuilder_ == null) { + return java.util.Collections.unmodifiableList(oldValues_); + } else { + return oldValuesBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public int getOldValuesCount() { + if (oldValuesBuilder_ == null) { + return oldValues_.size(); + } else { + return oldValuesBuilder_.getCount(); + } + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getOldValues( + int index) { + if (oldValuesBuilder_ == null) { + return oldValues_.get(index); + } else { + return oldValuesBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder setOldValues( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (oldValuesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOldValuesIsMutable(); + oldValues_.set(index, value); + onChanged(); + } else { + oldValuesBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder setOldValues( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (oldValuesBuilder_ == null) { + ensureOldValuesIsMutable(); + oldValues_.set(index, builderForValue.build()); + onChanged(); + } else { + oldValuesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder addOldValues( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (oldValuesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOldValuesIsMutable(); + oldValues_.add(value); + onChanged(); + } else { + oldValuesBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder addOldValues( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (oldValuesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOldValuesIsMutable(); + oldValues_.add(index, value); + onChanged(); + } else { + oldValuesBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder addOldValues( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (oldValuesBuilder_ == null) { + ensureOldValuesIsMutable(); + oldValues_.add(builderForValue.build()); + onChanged(); + } else { + oldValuesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder addOldValues( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (oldValuesBuilder_ == null) { + ensureOldValuesIsMutable(); + oldValues_.add(index, builderForValue.build()); + onChanged(); + } else { + oldValuesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder addAllOldValues( + java.lang.Iterable< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue> + values) { + if (oldValuesBuilder_ == null) { + ensureOldValuesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, oldValues_); + onChanged(); + } else { + oldValuesBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder clearOldValues() { + if (oldValuesBuilder_ == null) { + oldValues_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + oldValuesBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public Builder removeOldValues(int index) { + if (oldValuesBuilder_ == null) { + ensureOldValuesIsMutable(); + oldValues_.remove(index); + onChanged(); + } else { + oldValuesBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + getOldValuesBuilder(int index) { + return internalGetOldValuesFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getOldValuesOrBuilder(int index) { + if (oldValuesBuilder_ == null) { + return oldValues_.get(index); + } else { + return oldValuesBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getOldValuesOrBuilderList() { + if (oldValuesBuilder_ != null) { + return oldValuesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(oldValues_); + } + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + addOldValuesBuilder() { + return internalGetOldValuesFieldBuilder() + .addBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance()); + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + addOldValuesBuilder(int index) { + return internalGetOldValuesFieldBuilder() + .addBuilder( + index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance()); + } + + /** + * + * + *
                                +         * Returns the old values before the change for the modified columns.
                                +         * Always empty for
                                +         * [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT],
                                +         * or if old values are not being captured specified by
                                +         * [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue old_values = 2; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder> + getOldValuesBuilderList() { + return internalGetOldValuesFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + internalGetOldValuesFieldBuilder() { + if (oldValuesBuilder_ == null) { + oldValuesBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder>( + oldValues_, + ((bitField0_ & 0x00000002) != 0), + getParentForChildren(), + isClean()); + oldValues_ = null; + } + return oldValuesBuilder_; + } + + private java.util.List + newValues_ = java.util.Collections.emptyList(); + + private void ensureNewValuesIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + newValues_ = + new java.util.ArrayList< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue>(newValues_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + newValuesBuilder_; + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public java.util.List + getNewValuesList() { + if (newValuesBuilder_ == null) { + return java.util.Collections.unmodifiableList(newValues_); + } else { + return newValuesBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public int getNewValuesCount() { + if (newValuesBuilder_ == null) { + return newValues_.size(); + } else { + return newValuesBuilder_.getCount(); + } + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue getNewValues( + int index) { + if (newValuesBuilder_ == null) { + return newValues_.get(index); + } else { + return newValuesBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder setNewValues( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (newValuesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNewValuesIsMutable(); + newValues_.set(index, value); + onChanged(); + } else { + newValuesBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder setNewValues( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (newValuesBuilder_ == null) { + ensureNewValuesIsMutable(); + newValues_.set(index, builderForValue.build()); + onChanged(); + } else { + newValuesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder addNewValues( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (newValuesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNewValuesIsMutable(); + newValues_.add(value); + onChanged(); + } else { + newValuesBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder addNewValues( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue value) { + if (newValuesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNewValuesIsMutable(); + newValues_.add(index, value); + onChanged(); + } else { + newValuesBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder addNewValues( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (newValuesBuilder_ == null) { + ensureNewValuesIsMutable(); + newValues_.add(builderForValue.build()); + onChanged(); + } else { + newValuesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder addNewValues( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + builderForValue) { + if (newValuesBuilder_ == null) { + ensureNewValuesIsMutable(); + newValues_.add(index, builderForValue.build()); + onChanged(); + } else { + newValuesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder addAllNewValues( + java.lang.Iterable< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue> + values) { + if (newValuesBuilder_ == null) { + ensureNewValuesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, newValues_); + onChanged(); + } else { + newValuesBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder clearNewValues() { + if (newValuesBuilder_ == null) { + newValues_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + newValuesBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public Builder removeNewValues(int index) { + if (newValuesBuilder_ == null) { + ensureNewValuesIsMutable(); + newValues_.remove(index); + onChanged(); + } else { + newValuesBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + getNewValuesBuilder(int index) { + return internalGetNewValuesFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder + getNewValuesOrBuilder(int index) { + if (newValuesBuilder_ == null) { + return newValues_.get(index); + } else { + return newValuesBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + getNewValuesOrBuilderList() { + if (newValuesBuilder_ != null) { + return newValuesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(newValues_); + } + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + addNewValuesBuilder() { + return internalGetNewValuesFieldBuilder() + .addBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance()); + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder + addNewValuesBuilder(int index) { + return internalGetNewValuesFieldBuilder() + .addBuilder( + index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue + .getDefaultInstance()); + } + + /** + * + * + *
                                +         * Returns the new values after the change for the modified columns.
                                +         * Always empty for
                                +         * [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE].
                                +         * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue new_values = 3; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder> + getNewValuesBuilderList() { + return internalGetNewValuesFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder> + internalGetNewValuesFieldBuilder() { + if (newValuesBuilder_ == null) { + newValuesBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValue.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModValueOrBuilder>( + newValues_, + ((bitField0_ & 0x00000004) != 0), + getParentForChildren(), + isClean()); + newValues_ = null; + } + return newValuesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod) + private static final com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Mod parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + public static final int COMMIT_TIMESTAMP_FIELD_NUMBER = 1; + private com.google.protobuf.Timestamp commitTimestamp_; + + /** + * + * + *
                                +     * Indicates the timestamp in which the change was committed.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return Whether the commitTimestamp field is set. + */ + @java.lang.Override + public boolean hasCommitTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Indicates the timestamp in which the change was committed.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return The commitTimestamp. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getCommitTimestamp() { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + + /** + * + * + *
                                +     * Indicates the timestamp in which the change was committed.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + + public static final int RECORD_SEQUENCE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     *
                                +     * The record sequence number ordering across partitions is only meaningful
                                +     * in the context of a specific transaction. Record sequence numbers are
                                +     * unique across partitions for a specific transaction. Sort the
                                +     * DataChangeRecords for the same
                                +     * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +     * by
                                +     * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +     * to reconstruct the ordering of the changes within the transaction.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + @java.lang.Override + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + 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(); + recordSequence_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     *
                                +     * The record sequence number ordering across partitions is only meaningful
                                +     * in the context of a specific transaction. Record sequence numbers are
                                +     * unique across partitions for a specific transaction. Sort the
                                +     * DataChangeRecords for the same
                                +     * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +     * by
                                +     * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +     * to reconstruct the ordering of the changes within the transaction.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SERVER_TRANSACTION_ID_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object serverTransactionId_ = ""; + + /** + * + * + *
                                +     * Provides a globally unique string that represents the transaction in
                                +     * which the change was committed. Multiple transactions can have the same
                                +     * commit timestamp, but each transaction has a unique
                                +     * server_transaction_id.
                                +     * 
                                + * + * string server_transaction_id = 3; + * + * @return The serverTransactionId. + */ + @java.lang.Override + public java.lang.String getServerTransactionId() { + java.lang.Object ref = serverTransactionId_; + 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(); + serverTransactionId_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Provides a globally unique string that represents the transaction in
                                +     * which the change was committed. Multiple transactions can have the same
                                +     * commit timestamp, but each transaction has a unique
                                +     * server_transaction_id.
                                +     * 
                                + * + * string server_transaction_id = 3; + * + * @return The bytes for serverTransactionId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getServerTransactionIdBytes() { + java.lang.Object ref = serverTransactionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serverTransactionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int IS_LAST_RECORD_IN_TRANSACTION_IN_PARTITION_FIELD_NUMBER = 4; + private boolean isLastRecordInTransactionInPartition_ = false; + + /** + * + * + *
                                +     * Indicates whether this is the last record for a transaction in the
                                +     * current partition. Clients can use this field to determine when all
                                +     * records for a transaction in the current partition have been received.
                                +     * 
                                + * + * bool is_last_record_in_transaction_in_partition = 4; + * + * @return The isLastRecordInTransactionInPartition. + */ + @java.lang.Override + public boolean getIsLastRecordInTransactionInPartition() { + return isLastRecordInTransactionInPartition_; + } + + public static final int TABLE_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object table_ = ""; + + /** + * + * + *
                                +     * Name of the table affected by the change.
                                +     * 
                                + * + * string table = 5; + * + * @return The table. + */ + @java.lang.Override + public java.lang.String getTable() { + java.lang.Object ref = table_; + 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(); + table_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Name of the table affected by the change.
                                +     * 
                                + * + * string table = 5; + * + * @return The bytes for table. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int COLUMN_METADATA_FIELD_NUMBER = 6; + + @SuppressWarnings("serial") + private java.util.List + columnMetadata_; + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + @java.lang.Override + public java.util.List + getColumnMetadataList() { + return columnMetadata_; + } + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + @java.lang.Override + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder> + getColumnMetadataOrBuilderList() { + return columnMetadata_; + } + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + @java.lang.Override + public int getColumnMetadataCount() { + return columnMetadata_.size(); + } + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + getColumnMetadata(int index) { + return columnMetadata_.get(index); + } + + /** + * + * + *
                                +     * Provides metadata describing the columns associated with the
                                +     * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +     * below.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder + getColumnMetadataOrBuilder(int index) { + return columnMetadata_.get(index); + } + + public static final int MODS_FIELD_NUMBER = 7; + + @SuppressWarnings("serial") + private java.util.List mods_; + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + @java.lang.Override + public java.util.List + getModsList() { + return mods_; + } + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + @java.lang.Override + public java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder> + getModsOrBuilderList() { + return mods_; + } + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + @java.lang.Override + public int getModsCount() { + return mods_.size(); + } + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod getMods(int index) { + return mods_.get(index); + } + + /** + * + * + *
                                +     * Describes the changes that were made.
                                +     * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder getModsOrBuilder( + int index) { + return mods_.get(index); + } + + public static final int MOD_TYPE_FIELD_NUMBER = 8; + private int modType_ = 0; + + /** + * + * + *
                                +     * Describes the type of change.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @return The enum numeric value on the wire for modType. + */ + @java.lang.Override + public int getModTypeValue() { + return modType_; + } + + /** + * + * + *
                                +     * Describes the type of change.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @return The modType. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType getModType() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType result = + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.forNumber(modType_); + return result == null + ? com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.UNRECOGNIZED + : result; + } + + public static final int VALUE_CAPTURE_TYPE_FIELD_NUMBER = 9; + private int valueCaptureType_ = 0; + + /** + * + * + *
                                +     * Describes the value capture type that was specified in the change stream
                                +     * configuration when this change was captured.
                                +     * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @return The enum numeric value on the wire for valueCaptureType. + */ + @java.lang.Override + public int getValueCaptureTypeValue() { + return valueCaptureType_; + } + + /** + * + * + *
                                +     * Describes the value capture type that was specified in the change stream
                                +     * configuration when this change was captured.
                                +     * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @return The valueCaptureType. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType + getValueCaptureType() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType result = + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType.forNumber( + valueCaptureType_); + return result == null + ? com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType.UNRECOGNIZED + : result; + } + + public static final int NUMBER_OF_RECORDS_IN_TRANSACTION_FIELD_NUMBER = 10; + private int numberOfRecordsInTransaction_ = 0; + + /** + * + * + *
                                +     * Indicates the number of data change records that are part of this
                                +     * transaction across all change stream partitions. This value can be used
                                +     * to assemble all the records associated with a particular transaction.
                                +     * 
                                + * + * int32 number_of_records_in_transaction = 10; + * + * @return The numberOfRecordsInTransaction. + */ + @java.lang.Override + public int getNumberOfRecordsInTransaction() { + return numberOfRecordsInTransaction_; + } + + public static final int NUMBER_OF_PARTITIONS_IN_TRANSACTION_FIELD_NUMBER = 11; + private int numberOfPartitionsInTransaction_ = 0; + + /** + * + * + *
                                +     * Indicates the number of partitions that return data change records for
                                +     * this transaction. This value can be helpful in assembling all records
                                +     * associated with a particular transaction.
                                +     * 
                                + * + * int32 number_of_partitions_in_transaction = 11; + * + * @return The numberOfPartitionsInTransaction. + */ + @java.lang.Override + public int getNumberOfPartitionsInTransaction() { + return numberOfPartitionsInTransaction_; + } + + public static final int TRANSACTION_TAG_FIELD_NUMBER = 12; + + @SuppressWarnings("serial") + private volatile java.lang.Object transactionTag_ = ""; + + /** + * + * + *
                                +     * Indicates the transaction tag associated with this transaction.
                                +     * 
                                + * + * string transaction_tag = 12; + * + * @return The transactionTag. + */ + @java.lang.Override + public java.lang.String getTransactionTag() { + java.lang.Object ref = transactionTag_; + 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(); + transactionTag_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Indicates the transaction tag associated with this transaction.
                                +     * 
                                + * + * string transaction_tag = 12; + * + * @return The bytes for transactionTag. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTransactionTagBytes() { + java.lang.Object ref = transactionTag_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + transactionTag_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int IS_SYSTEM_TRANSACTION_FIELD_NUMBER = 13; + private boolean isSystemTransaction_ = false; + + /** + * + * + *
                                +     * Indicates whether the transaction is a system transaction. System
                                +     * transactions include those issued by time-to-live (TTL), column backfill,
                                +     * etc.
                                +     * 
                                + * + * bool is_system_transaction = 13; + * + * @return The isSystemTransaction. + */ + @java.lang.Override + public boolean getIsSystemTransaction() { + return isSystemTransaction_; + } + + 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, getCommitTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, recordSequence_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serverTransactionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, serverTransactionId_); + } + if (isLastRecordInTransactionInPartition_ != false) { + output.writeBool(4, isLastRecordInTransactionInPartition_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, table_); + } + for (int i = 0; i < columnMetadata_.size(); i++) { + output.writeMessage(6, columnMetadata_.get(i)); + } + for (int i = 0; i < mods_.size(); i++) { + output.writeMessage(7, mods_.get(i)); + } + if (modType_ + != com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.MOD_TYPE_UNSPECIFIED + .getNumber()) { + output.writeEnum(8, modType_); + } + if (valueCaptureType_ + != com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType + .VALUE_CAPTURE_TYPE_UNSPECIFIED + .getNumber()) { + output.writeEnum(9, valueCaptureType_); + } + if (numberOfRecordsInTransaction_ != 0) { + output.writeInt32(10, numberOfRecordsInTransaction_); + } + if (numberOfPartitionsInTransaction_ != 0) { + output.writeInt32(11, numberOfPartitionsInTransaction_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionTag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 12, transactionTag_); + } + if (isSystemTransaction_ != false) { + output.writeBool(13, isSystemTransaction_); + } + 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, getCommitTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, recordSequence_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serverTransactionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, serverTransactionId_); + } + if (isLastRecordInTransactionInPartition_ != false) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize( + 4, isLastRecordInTransactionInPartition_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, table_); + } + for (int i = 0; i < columnMetadata_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, columnMetadata_.get(i)); + } + for (int i = 0; i < mods_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, mods_.get(i)); + } + if (modType_ + != com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.MOD_TYPE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(8, modType_); + } + if (valueCaptureType_ + != com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType + .VALUE_CAPTURE_TYPE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(9, valueCaptureType_); + } + if (numberOfRecordsInTransaction_ != 0) { + size += + com.google.protobuf.CodedOutputStream.computeInt32Size( + 10, numberOfRecordsInTransaction_); + } + if (numberOfPartitionsInTransaction_ != 0) { + size += + com.google.protobuf.CodedOutputStream.computeInt32Size( + 11, numberOfPartitionsInTransaction_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionTag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(12, transactionTag_); + } + if (isSystemTransaction_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(13, isSystemTransaction_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord other = + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) obj; + + if (hasCommitTimestamp() != other.hasCommitTimestamp()) return false; + if (hasCommitTimestamp()) { + if (!getCommitTimestamp().equals(other.getCommitTimestamp())) return false; + } + if (!getRecordSequence().equals(other.getRecordSequence())) return false; + if (!getServerTransactionId().equals(other.getServerTransactionId())) return false; + if (getIsLastRecordInTransactionInPartition() + != other.getIsLastRecordInTransactionInPartition()) return false; + if (!getTable().equals(other.getTable())) return false; + if (!getColumnMetadataList().equals(other.getColumnMetadataList())) return false; + if (!getModsList().equals(other.getModsList())) return false; + if (modType_ != other.modType_) return false; + if (valueCaptureType_ != other.valueCaptureType_) return false; + if (getNumberOfRecordsInTransaction() != other.getNumberOfRecordsInTransaction()) + return false; + if (getNumberOfPartitionsInTransaction() != other.getNumberOfPartitionsInTransaction()) + return false; + if (!getTransactionTag().equals(other.getTransactionTag())) return false; + if (getIsSystemTransaction() != other.getIsSystemTransaction()) 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 (hasCommitTimestamp()) { + hash = (37 * hash) + COMMIT_TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getCommitTimestamp().hashCode(); + } + hash = (37 * hash) + RECORD_SEQUENCE_FIELD_NUMBER; + hash = (53 * hash) + getRecordSequence().hashCode(); + hash = (37 * hash) + SERVER_TRANSACTION_ID_FIELD_NUMBER; + hash = (53 * hash) + getServerTransactionId().hashCode(); + hash = (37 * hash) + IS_LAST_RECORD_IN_TRANSACTION_IN_PARTITION_FIELD_NUMBER; + hash = + (53 * hash) + + com.google.protobuf.Internal.hashBoolean(getIsLastRecordInTransactionInPartition()); + hash = (37 * hash) + TABLE_FIELD_NUMBER; + hash = (53 * hash) + getTable().hashCode(); + if (getColumnMetadataCount() > 0) { + hash = (37 * hash) + COLUMN_METADATA_FIELD_NUMBER; + hash = (53 * hash) + getColumnMetadataList().hashCode(); + } + if (getModsCount() > 0) { + hash = (37 * hash) + MODS_FIELD_NUMBER; + hash = (53 * hash) + getModsList().hashCode(); + } + hash = (37 * hash) + MOD_TYPE_FIELD_NUMBER; + hash = (53 * hash) + modType_; + hash = (37 * hash) + VALUE_CAPTURE_TYPE_FIELD_NUMBER; + hash = (53 * hash) + valueCaptureType_; + hash = (37 * hash) + NUMBER_OF_RECORDS_IN_TRANSACTION_FIELD_NUMBER; + hash = (53 * hash) + getNumberOfRecordsInTransaction(); + hash = (37 * hash) + NUMBER_OF_PARTITIONS_IN_TRANSACTION_FIELD_NUMBER; + hash = (53 * hash) + getNumberOfPartitionsInTransaction(); + hash = (37 * hash) + TRANSACTION_TAG_FIELD_NUMBER; + hash = (53 * hash) + getTransactionTag().hashCode(); + hash = (37 * hash) + IS_SYSTEM_TRANSACTION_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIsSystemTransaction()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * A data change record contains a set of changes to a table with the same
                                +     * modification type (insert, update, or delete) committed at the same commit
                                +     * timestamp in one change stream partition for the same transaction. Multiple
                                +     * data change records can be returned for the same transaction across
                                +     * multiple change stream partitions.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.DataChangeRecord} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.DataChangeRecord) + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecordOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.class, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Builder.class); + } + + // Construct using com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetCommitTimestampFieldBuilder(); + internalGetColumnMetadataFieldBuilder(); + internalGetModsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + commitTimestamp_ = null; + if (commitTimestampBuilder_ != null) { + commitTimestampBuilder_.dispose(); + commitTimestampBuilder_ = null; + } + recordSequence_ = ""; + serverTransactionId_ = ""; + isLastRecordInTransactionInPartition_ = false; + table_ = ""; + if (columnMetadataBuilder_ == null) { + columnMetadata_ = java.util.Collections.emptyList(); + } else { + columnMetadata_ = null; + columnMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + if (modsBuilder_ == null) { + mods_ = java.util.Collections.emptyList(); + } else { + mods_ = null; + modsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + modType_ = 0; + valueCaptureType_ = 0; + numberOfRecordsInTransaction_ = 0; + numberOfPartitionsInTransaction_ = 0; + transactionTag_ = ""; + isSystemTransaction_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_DataChangeRecord_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord build() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord result = + new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord result) { + if (columnMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + columnMetadata_ = java.util.Collections.unmodifiableList(columnMetadata_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.columnMetadata_ = columnMetadata_; + } else { + result.columnMetadata_ = columnMetadataBuilder_.build(); + } + if (modsBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0)) { + mods_ = java.util.Collections.unmodifiableList(mods_); + bitField0_ = (bitField0_ & ~0x00000040); + } + result.mods_ = mods_; + } else { + result.mods_ = modsBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.commitTimestamp_ = + commitTimestampBuilder_ == null ? commitTimestamp_ : commitTimestampBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.recordSequence_ = recordSequence_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.serverTransactionId_ = serverTransactionId_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.isLastRecordInTransactionInPartition_ = isLastRecordInTransactionInPartition_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.table_ = table_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.modType_ = modType_; + } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.valueCaptureType_ = valueCaptureType_; + } + if (((from_bitField0_ & 0x00000200) != 0)) { + result.numberOfRecordsInTransaction_ = numberOfRecordsInTransaction_; + } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.numberOfPartitionsInTransaction_ = numberOfPartitionsInTransaction_; + } + if (((from_bitField0_ & 0x00000800) != 0)) { + result.transactionTag_ = transactionTag_; + } + if (((from_bitField0_ & 0x00001000) != 0)) { + result.isSystemTransaction_ = isSystemTransaction_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) { + return mergeFrom((com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord other) { + if (other == com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance()) + return this; + if (other.hasCommitTimestamp()) { + mergeCommitTimestamp(other.getCommitTimestamp()); + } + if (!other.getRecordSequence().isEmpty()) { + recordSequence_ = other.recordSequence_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getServerTransactionId().isEmpty()) { + serverTransactionId_ = other.serverTransactionId_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (other.getIsLastRecordInTransactionInPartition() != false) { + setIsLastRecordInTransactionInPartition(other.getIsLastRecordInTransactionInPartition()); + } + if (!other.getTable().isEmpty()) { + table_ = other.table_; + bitField0_ |= 0x00000010; + onChanged(); + } + if (columnMetadataBuilder_ == null) { + if (!other.columnMetadata_.isEmpty()) { + if (columnMetadata_.isEmpty()) { + columnMetadata_ = other.columnMetadata_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureColumnMetadataIsMutable(); + columnMetadata_.addAll(other.columnMetadata_); + } + onChanged(); + } + } else { + if (!other.columnMetadata_.isEmpty()) { + if (columnMetadataBuilder_.isEmpty()) { + columnMetadataBuilder_.dispose(); + columnMetadataBuilder_ = null; + columnMetadata_ = other.columnMetadata_; + bitField0_ = (bitField0_ & ~0x00000020); + columnMetadataBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetColumnMetadataFieldBuilder() + : null; + } else { + columnMetadataBuilder_.addAllMessages(other.columnMetadata_); + } + } + } + if (modsBuilder_ == null) { + if (!other.mods_.isEmpty()) { + if (mods_.isEmpty()) { + mods_ = other.mods_; + bitField0_ = (bitField0_ & ~0x00000040); + } else { + ensureModsIsMutable(); + mods_.addAll(other.mods_); + } + onChanged(); + } + } else { + if (!other.mods_.isEmpty()) { + if (modsBuilder_.isEmpty()) { + modsBuilder_.dispose(); + modsBuilder_ = null; + mods_ = other.mods_; + bitField0_ = (bitField0_ & ~0x00000040); + modsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetModsFieldBuilder() + : null; + } else { + modsBuilder_.addAllMessages(other.mods_); + } + } + } + if (other.modType_ != 0) { + setModTypeValue(other.getModTypeValue()); + } + if (other.valueCaptureType_ != 0) { + setValueCaptureTypeValue(other.getValueCaptureTypeValue()); + } + if (other.getNumberOfRecordsInTransaction() != 0) { + setNumberOfRecordsInTransaction(other.getNumberOfRecordsInTransaction()); + } + if (other.getNumberOfPartitionsInTransaction() != 0) { + setNumberOfPartitionsInTransaction(other.getNumberOfPartitionsInTransaction()); + } + if (!other.getTransactionTag().isEmpty()) { + transactionTag_ = other.transactionTag_; + bitField0_ |= 0x00000800; + onChanged(); + } + if (other.getIsSystemTransaction() != false) { + setIsSystemTransaction(other.getIsSystemTransaction()); + } + 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( + internalGetCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + recordSequence_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + serverTransactionId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 32: + { + isLastRecordInTransactionInPartition_ = input.readBool(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 42: + { + table_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 50: + { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata m = + input.readMessage( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + .parser(), + extensionRegistry); + if (columnMetadataBuilder_ == null) { + ensureColumnMetadataIsMutable(); + columnMetadata_.add(m); + } else { + columnMetadataBuilder_.addMessage(m); + } + break; + } // case 50 + case 58: + { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod m = + input.readMessage( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.parser(), + extensionRegistry); + if (modsBuilder_ == null) { + ensureModsIsMutable(); + mods_.add(m); + } else { + modsBuilder_.addMessage(m); + } + break; + } // case 58 + case 64: + { + modType_ = input.readEnum(); + bitField0_ |= 0x00000080; + break; + } // case 64 + case 72: + { + valueCaptureType_ = input.readEnum(); + bitField0_ |= 0x00000100; + break; + } // case 72 + case 80: + { + numberOfRecordsInTransaction_ = input.readInt32(); + bitField0_ |= 0x00000200; + break; + } // case 80 + case 88: + { + numberOfPartitionsInTransaction_ = input.readInt32(); + bitField0_ |= 0x00000400; + break; + } // case 88 + case 98: + { + transactionTag_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000800; + break; + } // case 98 + case 104: + { + isSystemTransaction_ = input.readBool(); + bitField0_ |= 0x00001000; + break; + } // case 104 + 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.Timestamp commitTimestamp_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + commitTimestampBuilder_; + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return Whether the commitTimestamp field is set. + */ + public boolean hasCommitTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return The commitTimestamp. + */ + public com.google.protobuf.Timestamp getCommitTimestamp() { + if (commitTimestampBuilder_ == null) { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } else { + return commitTimestampBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder setCommitTimestamp(com.google.protobuf.Timestamp value) { + if (commitTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + commitTimestamp_ = value; + } else { + commitTimestampBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder setCommitTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { + if (commitTimestampBuilder_ == null) { + commitTimestamp_ = builderForValue.build(); + } else { + commitTimestampBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder mergeCommitTimestamp(com.google.protobuf.Timestamp value) { + if (commitTimestampBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && commitTimestamp_ != null + && commitTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getCommitTimestampBuilder().mergeFrom(value); + } else { + commitTimestamp_ = value; + } + } else { + commitTimestampBuilder_.mergeFrom(value); + } + if (commitTimestamp_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder clearCommitTimestamp() { + bitField0_ = (bitField0_ & ~0x00000001); + commitTimestamp_ = null; + if (commitTimestampBuilder_ != null) { + commitTimestampBuilder_.dispose(); + commitTimestampBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public com.google.protobuf.Timestamp.Builder getCommitTimestampBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetCommitTimestampFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { + if (commitTimestampBuilder_ != null) { + return commitTimestampBuilder_.getMessageOrBuilder(); + } else { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + } + + /** + * + * + *
                                +       * Indicates the timestamp in which the change was committed.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetCommitTimestampFieldBuilder() { + if (commitTimestampBuilder_ == null) { + commitTimestampBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getCommitTimestamp(), getParentForChildren(), isClean()); + commitTimestamp_ = null; + } + return commitTimestampBuilder_; + } + + private java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       *
                                +       * The record sequence number ordering across partitions is only meaningful
                                +       * in the context of a specific transaction. Record sequence numbers are
                                +       * unique across partitions for a specific transaction. Sort the
                                +       * DataChangeRecords for the same
                                +       * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +       * by
                                +       * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +       * to reconstruct the ordering of the changes within the transaction.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + recordSequence_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       *
                                +       * The record sequence number ordering across partitions is only meaningful
                                +       * in the context of a specific transaction. Record sequence numbers are
                                +       * unique across partitions for a specific transaction. Sort the
                                +       * DataChangeRecords for the same
                                +       * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +       * by
                                +       * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +       * to reconstruct the ordering of the changes within the transaction.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       *
                                +       * The record sequence number ordering across partitions is only meaningful
                                +       * in the context of a specific transaction. Record sequence numbers are
                                +       * unique across partitions for a specific transaction. Sort the
                                +       * DataChangeRecords for the same
                                +       * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +       * by
                                +       * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +       * to reconstruct the ordering of the changes within the transaction.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequence(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       *
                                +       * The record sequence number ordering across partitions is only meaningful
                                +       * in the context of a specific transaction. Record sequence numbers are
                                +       * unique across partitions for a specific transaction. Sort the
                                +       * DataChangeRecords for the same
                                +       * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +       * by
                                +       * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +       * to reconstruct the ordering of the changes within the transaction.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return This builder for chaining. + */ + public Builder clearRecordSequence() { + recordSequence_ = getDefaultInstance().getRecordSequence(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       *
                                +       * The record sequence number ordering across partitions is only meaningful
                                +       * in the context of a specific transaction. Record sequence numbers are
                                +       * unique across partitions for a specific transaction. Sort the
                                +       * DataChangeRecords for the same
                                +       * [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id]
                                +       * by
                                +       * [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence]
                                +       * to reconstruct the ordering of the changes within the transaction.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The bytes for recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequenceBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object serverTransactionId_ = ""; + + /** + * + * + *
                                +       * Provides a globally unique string that represents the transaction in
                                +       * which the change was committed. Multiple transactions can have the same
                                +       * commit timestamp, but each transaction has a unique
                                +       * server_transaction_id.
                                +       * 
                                + * + * string server_transaction_id = 3; + * + * @return The serverTransactionId. + */ + public java.lang.String getServerTransactionId() { + java.lang.Object ref = serverTransactionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serverTransactionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Provides a globally unique string that represents the transaction in
                                +       * which the change was committed. Multiple transactions can have the same
                                +       * commit timestamp, but each transaction has a unique
                                +       * server_transaction_id.
                                +       * 
                                + * + * string server_transaction_id = 3; + * + * @return The bytes for serverTransactionId. + */ + public com.google.protobuf.ByteString getServerTransactionIdBytes() { + java.lang.Object ref = serverTransactionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serverTransactionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Provides a globally unique string that represents the transaction in
                                +       * which the change was committed. Multiple transactions can have the same
                                +       * commit timestamp, but each transaction has a unique
                                +       * server_transaction_id.
                                +       * 
                                + * + * string server_transaction_id = 3; + * + * @param value The serverTransactionId to set. + * @return This builder for chaining. + */ + public Builder setServerTransactionId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + serverTransactionId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Provides a globally unique string that represents the transaction in
                                +       * which the change was committed. Multiple transactions can have the same
                                +       * commit timestamp, but each transaction has a unique
                                +       * server_transaction_id.
                                +       * 
                                + * + * string server_transaction_id = 3; + * + * @return This builder for chaining. + */ + public Builder clearServerTransactionId() { + serverTransactionId_ = getDefaultInstance().getServerTransactionId(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Provides a globally unique string that represents the transaction in
                                +       * which the change was committed. Multiple transactions can have the same
                                +       * commit timestamp, but each transaction has a unique
                                +       * server_transaction_id.
                                +       * 
                                + * + * string server_transaction_id = 3; + * + * @param value The bytes for serverTransactionId to set. + * @return This builder for chaining. + */ + public Builder setServerTransactionIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + serverTransactionId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private boolean isLastRecordInTransactionInPartition_; + + /** + * + * + *
                                +       * Indicates whether this is the last record for a transaction in the
                                +       * current partition. Clients can use this field to determine when all
                                +       * records for a transaction in the current partition have been received.
                                +       * 
                                + * + * bool is_last_record_in_transaction_in_partition = 4; + * + * @return The isLastRecordInTransactionInPartition. + */ + @java.lang.Override + public boolean getIsLastRecordInTransactionInPartition() { + return isLastRecordInTransactionInPartition_; + } + + /** + * + * + *
                                +       * Indicates whether this is the last record for a transaction in the
                                +       * current partition. Clients can use this field to determine when all
                                +       * records for a transaction in the current partition have been received.
                                +       * 
                                + * + * bool is_last_record_in_transaction_in_partition = 4; + * + * @param value The isLastRecordInTransactionInPartition to set. + * @return This builder for chaining. + */ + public Builder setIsLastRecordInTransactionInPartition(boolean value) { + + isLastRecordInTransactionInPartition_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates whether this is the last record for a transaction in the
                                +       * current partition. Clients can use this field to determine when all
                                +       * records for a transaction in the current partition have been received.
                                +       * 
                                + * + * bool is_last_record_in_transaction_in_partition = 4; + * + * @return This builder for chaining. + */ + public Builder clearIsLastRecordInTransactionInPartition() { + bitField0_ = (bitField0_ & ~0x00000008); + isLastRecordInTransactionInPartition_ = false; + onChanged(); + return this; + } + + private java.lang.Object table_ = ""; + + /** + * + * + *
                                +       * Name of the table affected by the change.
                                +       * 
                                + * + * string table = 5; + * + * @return The table. + */ + public java.lang.String getTable() { + java.lang.Object ref = table_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + table_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Name of the table affected by the change.
                                +       * 
                                + * + * string table = 5; + * + * @return The bytes for table. + */ + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Name of the table affected by the change.
                                +       * 
                                + * + * string table = 5; + * + * @param value The table to set. + * @return This builder for chaining. + */ + public Builder setTable(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + table_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Name of the table affected by the change.
                                +       * 
                                + * + * string table = 5; + * + * @return This builder for chaining. + */ + public Builder clearTable() { + table_ = getDefaultInstance().getTable(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Name of the table affected by the change.
                                +       * 
                                + * + * string table = 5; + * + * @param value The bytes for table to set. + * @return This builder for chaining. + */ + public Builder setTableBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + table_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + private java.util.List< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata> + columnMetadata_ = java.util.Collections.emptyList(); + + private void ensureColumnMetadataIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + columnMetadata_ = + new java.util.ArrayList< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata>( + columnMetadata_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder> + columnMetadataBuilder_; + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata> + getColumnMetadataList() { + if (columnMetadataBuilder_ == null) { + return java.util.Collections.unmodifiableList(columnMetadata_); + } else { + return columnMetadataBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public int getColumnMetadataCount() { + if (columnMetadataBuilder_ == null) { + return columnMetadata_.size(); + } else { + return columnMetadataBuilder_.getCount(); + } + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + getColumnMetadata(int index) { + if (columnMetadataBuilder_ == null) { + return columnMetadata_.get(index); + } else { + return columnMetadataBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder setColumnMetadata( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata value) { + if (columnMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnMetadataIsMutable(); + columnMetadata_.set(index, value); + onChanged(); + } else { + columnMetadataBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder setColumnMetadata( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + builderForValue) { + if (columnMetadataBuilder_ == null) { + ensureColumnMetadataIsMutable(); + columnMetadata_.set(index, builderForValue.build()); + onChanged(); + } else { + columnMetadataBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder addColumnMetadata( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata value) { + if (columnMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnMetadataIsMutable(); + columnMetadata_.add(value); + onChanged(); + } else { + columnMetadataBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder addColumnMetadata( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata value) { + if (columnMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnMetadataIsMutable(); + columnMetadata_.add(index, value); + onChanged(); + } else { + columnMetadataBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder addColumnMetadata( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + builderForValue) { + if (columnMetadataBuilder_ == null) { + ensureColumnMetadataIsMutable(); + columnMetadata_.add(builderForValue.build()); + onChanged(); + } else { + columnMetadataBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder addColumnMetadata( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + builderForValue) { + if (columnMetadataBuilder_ == null) { + ensureColumnMetadataIsMutable(); + columnMetadata_.add(index, builderForValue.build()); + onChanged(); + } else { + columnMetadataBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder addAllColumnMetadata( + java.lang.Iterable< + ? extends + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata> + values) { + if (columnMetadataBuilder_ == null) { + ensureColumnMetadataIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columnMetadata_); + onChanged(); + } else { + columnMetadataBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder clearColumnMetadata() { + if (columnMetadataBuilder_ == null) { + columnMetadata_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + columnMetadataBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public Builder removeColumnMetadata(int index) { + if (columnMetadataBuilder_ == null) { + ensureColumnMetadataIsMutable(); + columnMetadata_.remove(index); + onChanged(); + } else { + columnMetadataBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + getColumnMetadataBuilder(int index) { + return internalGetColumnMetadataFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder + getColumnMetadataOrBuilder(int index) { + if (columnMetadataBuilder_ == null) { + return columnMetadata_.get(index); + } else { + return columnMetadataBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder> + getColumnMetadataOrBuilderList() { + if (columnMetadataBuilder_ != null) { + return columnMetadataBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(columnMetadata_); + } + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + addColumnMetadataBuilder() { + return internalGetColumnMetadataFieldBuilder() + .addBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + .getDefaultInstance()); + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder + addColumnMetadataBuilder(int index) { + return internalGetColumnMetadataFieldBuilder() + .addBuilder( + index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata + .getDefaultInstance()); + } + + /** + * + * + *
                                +       * Provides metadata describing the columns associated with the
                                +       * [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed
                                +       * below.
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata column_metadata = 6; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder> + getColumnMetadataBuilderList() { + return internalGetColumnMetadataFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadataOrBuilder> + internalGetColumnMetadataFieldBuilder() { + if (columnMetadataBuilder_ == null) { + columnMetadataBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ColumnMetadata.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord + .ColumnMetadataOrBuilder>( + columnMetadata_, + ((bitField0_ & 0x00000020) != 0), + getParentForChildren(), + isClean()); + columnMetadata_ = null; + } + return columnMetadataBuilder_; + } + + private java.util.List mods_ = + java.util.Collections.emptyList(); + + private void ensureModsIsMutable() { + if (!((bitField0_ & 0x00000040) != 0)) { + mods_ = + new java.util.ArrayList< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod>(mods_); + bitField0_ |= 0x00000040; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder> + modsBuilder_; + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public java.util.List + getModsList() { + if (modsBuilder_ == null) { + return java.util.Collections.unmodifiableList(mods_); + } else { + return modsBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public int getModsCount() { + if (modsBuilder_ == null) { + return mods_.size(); + } else { + return modsBuilder_.getCount(); + } + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod getMods(int index) { + if (modsBuilder_ == null) { + return mods_.get(index); + } else { + return modsBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder setMods( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod value) { + if (modsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureModsIsMutable(); + mods_.set(index, value); + onChanged(); + } else { + modsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder setMods( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder builderForValue) { + if (modsBuilder_ == null) { + ensureModsIsMutable(); + mods_.set(index, builderForValue.build()); + onChanged(); + } else { + modsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder addMods(com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod value) { + if (modsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureModsIsMutable(); + mods_.add(value); + onChanged(); + } else { + modsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder addMods( + int index, com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod value) { + if (modsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureModsIsMutable(); + mods_.add(index, value); + onChanged(); + } else { + modsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder addMods( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder builderForValue) { + if (modsBuilder_ == null) { + ensureModsIsMutable(); + mods_.add(builderForValue.build()); + onChanged(); + } else { + modsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder addMods( + int index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder builderForValue) { + if (modsBuilder_ == null) { + ensureModsIsMutable(); + mods_.add(index, builderForValue.build()); + onChanged(); + } else { + modsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder addAllMods( + java.lang.Iterable< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod> + values) { + if (modsBuilder_ == null) { + ensureModsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, mods_); + onChanged(); + } else { + modsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder clearMods() { + if (modsBuilder_ == null) { + mods_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + } else { + modsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public Builder removeMods(int index) { + if (modsBuilder_ == null) { + ensureModsIsMutable(); + mods_.remove(index); + onChanged(); + } else { + modsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder getModsBuilder( + int index) { + return internalGetModsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder + getModsOrBuilder(int index) { + if (modsBuilder_ == null) { + return mods_.get(index); + } else { + return modsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public java.util.List< + ? extends com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder> + getModsOrBuilderList() { + if (modsBuilder_ != null) { + return modsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(mods_); + } + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder + addModsBuilder() { + return internalGetModsFieldBuilder() + .addBuilder( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.getDefaultInstance()); + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder addModsBuilder( + int index) { + return internalGetModsFieldBuilder() + .addBuilder( + index, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.getDefaultInstance()); + } + + /** + * + * + *
                                +       * Describes the changes that were made.
                                +       * 
                                + * + * repeated .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod mods = 7; + */ + public java.util.List + getModsBuilderList() { + return internalGetModsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder> + internalGetModsFieldBuilder() { + if (modsBuilder_ == null) { + modsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModOrBuilder>( + mods_, ((bitField0_ & 0x00000040) != 0), getParentForChildren(), isClean()); + mods_ = null; + } + return modsBuilder_; + } + + private int modType_ = 0; + + /** + * + * + *
                                +       * Describes the type of change.
                                +       * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @return The enum numeric value on the wire for modType. + */ + @java.lang.Override + public int getModTypeValue() { + return modType_; + } + + /** + * + * + *
                                +       * Describes the type of change.
                                +       * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @param value The enum numeric value on the wire for modType to set. + * @return This builder for chaining. + */ + public Builder setModTypeValue(int value) { + modType_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Describes the type of change.
                                +       * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @return The modType. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType getModType() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType result = + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.forNumber(modType_); + return result == null + ? com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +       * Describes the type of change.
                                +       * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @param value The modType to set. + * @return This builder for chaining. + */ + public Builder setModType( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + modType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Describes the type of change.
                                +       * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType mod_type = 8; + * + * @return This builder for chaining. + */ + public Builder clearModType() { + bitField0_ = (bitField0_ & ~0x00000080); + modType_ = 0; + onChanged(); + return this; + } + + private int valueCaptureType_ = 0; + + /** + * + * + *
                                +       * Describes the value capture type that was specified in the change stream
                                +       * configuration when this change was captured.
                                +       * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @return The enum numeric value on the wire for valueCaptureType. + */ + @java.lang.Override + public int getValueCaptureTypeValue() { + return valueCaptureType_; + } + + /** + * + * + *
                                +       * Describes the value capture type that was specified in the change stream
                                +       * configuration when this change was captured.
                                +       * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @param value The enum numeric value on the wire for valueCaptureType to set. + * @return This builder for chaining. + */ + public Builder setValueCaptureTypeValue(int value) { + valueCaptureType_ = value; + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Describes the value capture type that was specified in the change stream
                                +       * configuration when this change was captured.
                                +       * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @return The valueCaptureType. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType + getValueCaptureType() { + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType result = + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType.forNumber( + valueCaptureType_); + return result == null + ? com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType + .UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +       * Describes the value capture type that was specified in the change stream
                                +       * configuration when this change was captured.
                                +       * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @param value The valueCaptureType to set. + * @return This builder for chaining. + */ + public Builder setValueCaptureType( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000100; + valueCaptureType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Describes the value capture type that was specified in the change stream
                                +       * configuration when this change was captured.
                                +       * 
                                + * + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType value_capture_type = 9; + * + * + * @return This builder for chaining. + */ + public Builder clearValueCaptureType() { + bitField0_ = (bitField0_ & ~0x00000100); + valueCaptureType_ = 0; + onChanged(); + return this; + } + + private int numberOfRecordsInTransaction_; + + /** + * + * + *
                                +       * Indicates the number of data change records that are part of this
                                +       * transaction across all change stream partitions. This value can be used
                                +       * to assemble all the records associated with a particular transaction.
                                +       * 
                                + * + * int32 number_of_records_in_transaction = 10; + * + * @return The numberOfRecordsInTransaction. + */ + @java.lang.Override + public int getNumberOfRecordsInTransaction() { + return numberOfRecordsInTransaction_; + } + + /** + * + * + *
                                +       * Indicates the number of data change records that are part of this
                                +       * transaction across all change stream partitions. This value can be used
                                +       * to assemble all the records associated with a particular transaction.
                                +       * 
                                + * + * int32 number_of_records_in_transaction = 10; + * + * @param value The numberOfRecordsInTransaction to set. + * @return This builder for chaining. + */ + public Builder setNumberOfRecordsInTransaction(int value) { + + numberOfRecordsInTransaction_ = value; + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the number of data change records that are part of this
                                +       * transaction across all change stream partitions. This value can be used
                                +       * to assemble all the records associated with a particular transaction.
                                +       * 
                                + * + * int32 number_of_records_in_transaction = 10; + * + * @return This builder for chaining. + */ + public Builder clearNumberOfRecordsInTransaction() { + bitField0_ = (bitField0_ & ~0x00000200); + numberOfRecordsInTransaction_ = 0; + onChanged(); + return this; + } + + private int numberOfPartitionsInTransaction_; + + /** + * + * + *
                                +       * Indicates the number of partitions that return data change records for
                                +       * this transaction. This value can be helpful in assembling all records
                                +       * associated with a particular transaction.
                                +       * 
                                + * + * int32 number_of_partitions_in_transaction = 11; + * + * @return The numberOfPartitionsInTransaction. + */ + @java.lang.Override + public int getNumberOfPartitionsInTransaction() { + return numberOfPartitionsInTransaction_; + } + + /** + * + * + *
                                +       * Indicates the number of partitions that return data change records for
                                +       * this transaction. This value can be helpful in assembling all records
                                +       * associated with a particular transaction.
                                +       * 
                                + * + * int32 number_of_partitions_in_transaction = 11; + * + * @param value The numberOfPartitionsInTransaction to set. + * @return This builder for chaining. + */ + public Builder setNumberOfPartitionsInTransaction(int value) { + + numberOfPartitionsInTransaction_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the number of partitions that return data change records for
                                +       * this transaction. This value can be helpful in assembling all records
                                +       * associated with a particular transaction.
                                +       * 
                                + * + * int32 number_of_partitions_in_transaction = 11; + * + * @return This builder for chaining. + */ + public Builder clearNumberOfPartitionsInTransaction() { + bitField0_ = (bitField0_ & ~0x00000400); + numberOfPartitionsInTransaction_ = 0; + onChanged(); + return this; + } + + private java.lang.Object transactionTag_ = ""; + + /** + * + * + *
                                +       * Indicates the transaction tag associated with this transaction.
                                +       * 
                                + * + * string transaction_tag = 12; + * + * @return The transactionTag. + */ + public java.lang.String getTransactionTag() { + java.lang.Object ref = transactionTag_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + transactionTag_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Indicates the transaction tag associated with this transaction.
                                +       * 
                                + * + * string transaction_tag = 12; + * + * @return The bytes for transactionTag. + */ + public com.google.protobuf.ByteString getTransactionTagBytes() { + java.lang.Object ref = transactionTag_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + transactionTag_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Indicates the transaction tag associated with this transaction.
                                +       * 
                                + * + * string transaction_tag = 12; + * + * @param value The transactionTag to set. + * @return This builder for chaining. + */ + public Builder setTransactionTag(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + transactionTag_ = value; + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the transaction tag associated with this transaction.
                                +       * 
                                + * + * string transaction_tag = 12; + * + * @return This builder for chaining. + */ + public Builder clearTransactionTag() { + transactionTag_ = getDefaultInstance().getTransactionTag(); + bitField0_ = (bitField0_ & ~0x00000800); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the transaction tag associated with this transaction.
                                +       * 
                                + * + * string transaction_tag = 12; + * + * @param value The bytes for transactionTag to set. + * @return This builder for chaining. + */ + public Builder setTransactionTagBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + transactionTag_ = value; + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + + private boolean isSystemTransaction_; + + /** + * + * + *
                                +       * Indicates whether the transaction is a system transaction. System
                                +       * transactions include those issued by time-to-live (TTL), column backfill,
                                +       * etc.
                                +       * 
                                + * + * bool is_system_transaction = 13; + * + * @return The isSystemTransaction. + */ + @java.lang.Override + public boolean getIsSystemTransaction() { + return isSystemTransaction_; + } + + /** + * + * + *
                                +       * Indicates whether the transaction is a system transaction. System
                                +       * transactions include those issued by time-to-live (TTL), column backfill,
                                +       * etc.
                                +       * 
                                + * + * bool is_system_transaction = 13; + * + * @param value The isSystemTransaction to set. + * @return This builder for chaining. + */ + public Builder setIsSystemTransaction(boolean value) { + + isSystemTransaction_ = value; + bitField0_ |= 0x00001000; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates whether the transaction is a system transaction. System
                                +       * transactions include those issued by time-to-live (TTL), column backfill,
                                +       * etc.
                                +       * 
                                + * + * bool is_system_transaction = 13; + * + * @return This builder for chaining. + */ + public Builder clearIsSystemTransaction() { + bitField0_ = (bitField0_ & ~0x00001000); + isSystemTransaction_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.DataChangeRecord) + private static final com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DataChangeRecord parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface HeartbeatRecordOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Indicates the timestamp at which the query has returned all the records
                                +     * in the change stream partition with timestamp <= heartbeat timestamp.
                                +     * The heartbeat timestamp will not be the same as the timestamps of other
                                +     * record types in the same partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + * + * @return Whether the timestamp field is set. + */ + boolean hasTimestamp(); + + /** + * + * + *
                                +     * Indicates the timestamp at which the query has returned all the records
                                +     * in the change stream partition with timestamp <= heartbeat timestamp.
                                +     * The heartbeat timestamp will not be the same as the timestamps of other
                                +     * record types in the same partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + * + * @return The timestamp. + */ + com.google.protobuf.Timestamp getTimestamp(); + + /** + * + * + *
                                +     * Indicates the timestamp at which the query has returned all the records
                                +     * in the change stream partition with timestamp <= heartbeat timestamp.
                                +     * The heartbeat timestamp will not be the same as the timestamps of other
                                +     * record types in the same partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder(); + } + + /** + * + * + *
                                +   * A heartbeat record is returned as a progress indicator, when there are no
                                +   * data changes or any other partition record types in the change stream
                                +   * partition.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.HeartbeatRecord} + */ + public static final class HeartbeatRecord extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) + HeartbeatRecordOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "HeartbeatRecord"); + } + + // Use HeartbeatRecord.newBuilder() to construct. + private HeartbeatRecord(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private HeartbeatRecord() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.class, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.Builder.class); + } + + private int bitField0_; + public static final int TIMESTAMP_FIELD_NUMBER = 1; + private com.google.protobuf.Timestamp timestamp_; + + /** + * + * + *
                                +     * Indicates the timestamp at which the query has returned all the records
                                +     * in the change stream partition with timestamp <= heartbeat timestamp.
                                +     * The heartbeat timestamp will not be the same as the timestamps of other
                                +     * record types in the same partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + * + * @return Whether the timestamp field is set. + */ + @java.lang.Override + public boolean hasTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Indicates the timestamp at which the query has returned all the records
                                +     * in the change stream partition with timestamp <= heartbeat timestamp.
                                +     * The heartbeat timestamp will not be the same as the timestamps of other
                                +     * record types in the same partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + * + * @return The timestamp. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getTimestamp() { + return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_; + } + + /** + * + * + *
                                +     * Indicates the timestamp at which the query has returned all the records
                                +     * in the change stream partition with timestamp <= heartbeat timestamp.
                                +     * The heartbeat timestamp will not be the same as the timestamps of other
                                +     * record types in the same partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() { + return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_; + } + + 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, getTimestamp()); + } + 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, getTimestamp()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord other = + (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) obj; + + if (hasTimestamp() != other.hasTimestamp()) return false; + if (hasTimestamp()) { + if (!getTimestamp().equals(other.getTimestamp())) 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 (hasTimestamp()) { + hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getTimestamp().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * A heartbeat record is returned as a progress indicator, when there are no
                                +     * data changes or any other partition record types in the change stream
                                +     * partition.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.HeartbeatRecord} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecordOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.class, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.Builder.class); + } + + // Construct using com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTimestampFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + timestamp_ = null; + if (timestampBuilder_ != null) { + timestampBuilder_.dispose(); + timestampBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_HeartbeatRecord_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord build() { + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord result = + new com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.timestamp_ = timestampBuilder_ == null ? timestamp_ : timestampBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) { + return mergeFrom((com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord other) { + if (other == com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance()) + return this; + if (other.hasTimestamp()) { + mergeTimestamp(other.getTimestamp()); + } + 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( + internalGetTimestampFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.Timestamp timestamp_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + timestampBuilder_; + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + * + * @return Whether the timestamp field is set. + */ + public boolean hasTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + * + * @return The timestamp. + */ + public com.google.protobuf.Timestamp getTimestamp() { + if (timestampBuilder_ == null) { + return timestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : timestamp_; + } else { + return timestampBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + public Builder setTimestamp(com.google.protobuf.Timestamp value) { + if (timestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + timestamp_ = value; + } else { + timestampBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + public Builder setTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { + if (timestampBuilder_ == null) { + timestamp_ = builderForValue.build(); + } else { + timestampBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + public Builder mergeTimestamp(com.google.protobuf.Timestamp value) { + if (timestampBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && timestamp_ != null + && timestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getTimestampBuilder().mergeFrom(value); + } else { + timestamp_ = value; + } + } else { + timestampBuilder_.mergeFrom(value); + } + if (timestamp_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + public Builder clearTimestamp() { + bitField0_ = (bitField0_ & ~0x00000001); + timestamp_ = null; + if (timestampBuilder_ != null) { + timestampBuilder_.dispose(); + timestampBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + public com.google.protobuf.Timestamp.Builder getTimestampBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetTimestampFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() { + if (timestampBuilder_ != null) { + return timestampBuilder_.getMessageOrBuilder(); + } else { + return timestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : timestamp_; + } + } + + /** + * + * + *
                                +       * Indicates the timestamp at which the query has returned all the records
                                +       * in the change stream partition with timestamp <= heartbeat timestamp.
                                +       * The heartbeat timestamp will not be the same as the timestamps of other
                                +       * record types in the same partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp timestamp = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetTimestampFieldBuilder() { + if (timestampBuilder_ == null) { + timestampBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getTimestamp(), getParentForChildren(), isClean()); + timestamp_ = null; + } + return timestampBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) + private static final com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public HeartbeatRecord parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface PartitionStartRecordOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Start timestamp at which the partitions should be queried to return
                                +     * change stream records with timestamps >= start_timestamp.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + * + * @return Whether the startTimestamp field is set. + */ + boolean hasStartTimestamp(); + + /** + * + * + *
                                +     * Start timestamp at which the partitions should be queried to return
                                +     * change stream records with timestamps >= start_timestamp.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + * + * @return The startTimestamp. + */ + com.google.protobuf.Timestamp getStartTimestamp(); + + /** + * + * + *
                                +     * Start timestamp at which the partitions should be queried to return
                                +     * change stream records with timestamps >= start_timestamp.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + com.google.protobuf.TimestampOrBuilder getStartTimestampOrBuilder(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + java.lang.String getRecordSequence(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + com.google.protobuf.ByteString getRecordSequenceBytes(); + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @return A list containing the partitionTokens. + */ + java.util.List getPartitionTokensList(); + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @return The count of partitionTokens. + */ + int getPartitionTokensCount(); + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @param index The index of the element to return. + * @return The partitionTokens at the given index. + */ + java.lang.String getPartitionTokens(int index); + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @param index The index of the value to return. + * @return The bytes of the partitionTokens at the given index. + */ + com.google.protobuf.ByteString getPartitionTokensBytes(int index); + } + + /** + * + * + *
                                +   * A partition start record serves as a notification that the client should
                                +   * schedule the partitions to be queried. PartitionStartRecord returns
                                +   * information about one or more partitions.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionStartRecord} + */ + public static final class PartitionStartRecord extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) + PartitionStartRecordOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionStartRecord"); + } + + // Use PartitionStartRecord.newBuilder() to construct. + private PartitionStartRecord(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PartitionStartRecord() { + recordSequence_ = ""; + partitionTokens_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.Builder.class); + } + + private int bitField0_; + public static final int START_TIMESTAMP_FIELD_NUMBER = 1; + private com.google.protobuf.Timestamp startTimestamp_; + + /** + * + * + *
                                +     * Start timestamp at which the partitions should be queried to return
                                +     * change stream records with timestamps >= start_timestamp.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + * + * @return Whether the startTimestamp field is set. + */ + @java.lang.Override + public boolean hasStartTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Start timestamp at which the partitions should be queried to return
                                +     * change stream records with timestamps >= start_timestamp.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + * + * @return The startTimestamp. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getStartTimestamp() { + return startTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : startTimestamp_; + } + + /** + * + * + *
                                +     * Start timestamp at which the partitions should be queried to return
                                +     * change stream records with timestamps >= start_timestamp.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getStartTimestampOrBuilder() { + return startTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : startTimestamp_; + } + + public static final int RECORD_SEQUENCE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + @java.lang.Override + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + 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(); + recordSequence_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARTITION_TOKENS_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList partitionTokens_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @return A list containing the partitionTokens. + */ + public com.google.protobuf.ProtocolStringList getPartitionTokensList() { + return partitionTokens_; + } + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @return The count of partitionTokens. + */ + public int getPartitionTokensCount() { + return partitionTokens_.size(); + } + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @param index The index of the element to return. + * @return The partitionTokens at the given index. + */ + public java.lang.String getPartitionTokens(int index) { + return partitionTokens_.get(index); + } + + /** + * + * + *
                                +     * Unique partition identifiers to be used in queries.
                                +     * 
                                + * + * repeated string partition_tokens = 3; + * + * @param index The index of the value to return. + * @return The bytes of the partitionTokens at the given index. + */ + public com.google.protobuf.ByteString getPartitionTokensBytes(int index) { + return partitionTokens_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getStartTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, recordSequence_); + } + for (int i = 0; i < partitionTokens_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, partitionTokens_.getRaw(i)); + } + 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, getStartTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, recordSequence_); + } + { + int dataSize = 0; + for (int i = 0; i < partitionTokens_.size(); i++) { + dataSize += computeStringSizeNoTag(partitionTokens_.getRaw(i)); + } + size += dataSize; + size += 1 * getPartitionTokensList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord other = + (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) obj; + + if (hasStartTimestamp() != other.hasStartTimestamp()) return false; + if (hasStartTimestamp()) { + if (!getStartTimestamp().equals(other.getStartTimestamp())) return false; + } + if (!getRecordSequence().equals(other.getRecordSequence())) return false; + if (!getPartitionTokensList().equals(other.getPartitionTokensList())) 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 (hasStartTimestamp()) { + hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getStartTimestamp().hashCode(); + } + hash = (37 * hash) + RECORD_SEQUENCE_FIELD_NUMBER; + hash = (53 * hash) + getRecordSequence().hashCode(); + if (getPartitionTokensCount() > 0) { + hash = (37 * hash) + PARTITION_TOKENS_FIELD_NUMBER; + hash = (53 * hash) + getPartitionTokensList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * A partition start record serves as a notification that the client should
                                +     * schedule the partitions to be queried. PartitionStartRecord returns
                                +     * information about one or more partitions.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionStartRecord} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecordOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.Builder.class); + } + + // Construct using com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetStartTimestampFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + startTimestamp_ = null; + if (startTimestampBuilder_ != null) { + startTimestampBuilder_.dispose(); + startTimestampBuilder_ = null; + } + recordSequence_ = ""; + partitionTokens_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionStartRecord_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord build() { + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord result = + new com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.startTimestamp_ = + startTimestampBuilder_ == null ? startTimestamp_ : startTimestampBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.recordSequence_ = recordSequence_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + partitionTokens_.makeImmutable(); + result.partitionTokens_ = partitionTokens_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) { + return mergeFrom((com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance()) + return this; + if (other.hasStartTimestamp()) { + mergeStartTimestamp(other.getStartTimestamp()); + } + if (!other.getRecordSequence().isEmpty()) { + recordSequence_ = other.recordSequence_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.partitionTokens_.isEmpty()) { + if (partitionTokens_.isEmpty()) { + partitionTokens_ = other.partitionTokens_; + bitField0_ |= 0x00000004; + } else { + ensurePartitionTokensIsMutable(); + partitionTokens_.addAll(other.partitionTokens_); + } + 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: + { + input.readMessage( + internalGetStartTimestampFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + recordSequence_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + java.lang.String s = input.readStringRequireUtf8(); + ensurePartitionTokensIsMutable(); + partitionTokens_.add(s); + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.Timestamp startTimestamp_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + startTimestampBuilder_; + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + * + * @return Whether the startTimestamp field is set. + */ + public boolean hasStartTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + * + * @return The startTimestamp. + */ + public com.google.protobuf.Timestamp getStartTimestamp() { + if (startTimestampBuilder_ == null) { + return startTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : startTimestamp_; + } else { + return startTimestampBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + public Builder setStartTimestamp(com.google.protobuf.Timestamp value) { + if (startTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + startTimestamp_ = value; + } else { + startTimestampBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + public Builder setStartTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { + if (startTimestampBuilder_ == null) { + startTimestamp_ = builderForValue.build(); + } else { + startTimestampBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + public Builder mergeStartTimestamp(com.google.protobuf.Timestamp value) { + if (startTimestampBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && startTimestamp_ != null + && startTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getStartTimestampBuilder().mergeFrom(value); + } else { + startTimestamp_ = value; + } + } else { + startTimestampBuilder_.mergeFrom(value); + } + if (startTimestamp_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + public Builder clearStartTimestamp() { + bitField0_ = (bitField0_ & ~0x00000001); + startTimestamp_ = null; + if (startTimestampBuilder_ != null) { + startTimestampBuilder_.dispose(); + startTimestampBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + public com.google.protobuf.Timestamp.Builder getStartTimestampBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetStartTimestampFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + public com.google.protobuf.TimestampOrBuilder getStartTimestampOrBuilder() { + if (startTimestampBuilder_ != null) { + return startTimestampBuilder_.getMessageOrBuilder(); + } else { + return startTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : startTimestamp_; + } + } + + /** + * + * + *
                                +       * Start timestamp at which the partitions should be queried to return
                                +       * change stream records with timestamps >= start_timestamp.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp start_timestamp = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetStartTimestampFieldBuilder() { + if (startTimestampBuilder_ == null) { + startTimestampBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getStartTimestamp(), getParentForChildren(), isClean()); + startTimestamp_ = null; + } + return startTimestampBuilder_; + } + + private java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + recordSequence_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequence(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return This builder for chaining. + */ + public Builder clearRecordSequence() { + recordSequence_ = getDefaultInstance().getRecordSequence(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The bytes for recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequenceBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList partitionTokens_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensurePartitionTokensIsMutable() { + if (!partitionTokens_.isModifiable()) { + partitionTokens_ = new com.google.protobuf.LazyStringArrayList(partitionTokens_); + } + bitField0_ |= 0x00000004; + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @return A list containing the partitionTokens. + */ + public com.google.protobuf.ProtocolStringList getPartitionTokensList() { + partitionTokens_.makeImmutable(); + return partitionTokens_; + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @return The count of partitionTokens. + */ + public int getPartitionTokensCount() { + return partitionTokens_.size(); + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @param index The index of the element to return. + * @return The partitionTokens at the given index. + */ + public java.lang.String getPartitionTokens(int index) { + return partitionTokens_.get(index); + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @param index The index of the value to return. + * @return The bytes of the partitionTokens at the given index. + */ + public com.google.protobuf.ByteString getPartitionTokensBytes(int index) { + return partitionTokens_.getByteString(index); + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @param index The index to set the value at. + * @param value The partitionTokens to set. + * @return This builder for chaining. + */ + public Builder setPartitionTokens(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensurePartitionTokensIsMutable(); + partitionTokens_.set(index, value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @param value The partitionTokens to add. + * @return This builder for chaining. + */ + public Builder addPartitionTokens(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensurePartitionTokensIsMutable(); + partitionTokens_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @param values The partitionTokens to add. + * @return This builder for chaining. + */ + public Builder addAllPartitionTokens(java.lang.Iterable values) { + ensurePartitionTokensIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, partitionTokens_); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @return This builder for chaining. + */ + public Builder clearPartitionTokens() { + partitionTokens_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + ; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifiers to be used in queries.
                                +       * 
                                + * + * repeated string partition_tokens = 3; + * + * @param value The bytes of the partitionTokens to add. + * @return This builder for chaining. + */ + public Builder addPartitionTokensBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensurePartitionTokensIsMutable(); + partitionTokens_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) + private static final com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PartitionStartRecord parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface PartitionEndRecordOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * End timestamp at which the change stream partition is terminated. All
                                +     * changes generated by this partition will have timestamps <=
                                +     * end_timestamp. DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition. PartitionEndRecord is the last record returned for a
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + * + * @return Whether the endTimestamp field is set. + */ + boolean hasEndTimestamp(); + + /** + * + * + *
                                +     * End timestamp at which the change stream partition is terminated. All
                                +     * changes generated by this partition will have timestamps <=
                                +     * end_timestamp. DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition. PartitionEndRecord is the last record returned for a
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + * + * @return The endTimestamp. + */ + com.google.protobuf.Timestamp getEndTimestamp(); + + /** + * + * + *
                                +     * End timestamp at which the change stream partition is terminated. All
                                +     * changes generated by this partition will have timestamps <=
                                +     * end_timestamp. DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition. PartitionEndRecord is the last record returned for a
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + com.google.protobuf.TimestampOrBuilder getEndTimestampOrBuilder(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + java.lang.String getRecordSequence(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + com.google.protobuf.ByteString getRecordSequenceBytes(); + + /** + * + * + *
                                +     * Unique partition identifier describing the terminated change stream
                                +     * partition.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEndRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The partitionToken. + */ + java.lang.String getPartitionToken(); + + /** + * + * + *
                                +     * Unique partition identifier describing the terminated change stream
                                +     * partition.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEndRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The bytes for partitionToken. + */ + com.google.protobuf.ByteString getPartitionTokenBytes(); + } + + /** + * + * + *
                                +   * A partition end record serves as a notification that the client should stop
                                +   * reading the partition. No further records are expected to be retrieved on
                                +   * it.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionEndRecord} + */ + public static final class PartitionEndRecord extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) + PartitionEndRecordOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionEndRecord"); + } + + // Use PartitionEndRecord.newBuilder() to construct. + private PartitionEndRecord(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PartitionEndRecord() { + recordSequence_ = ""; + partitionToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.Builder.class); + } + + private int bitField0_; + public static final int END_TIMESTAMP_FIELD_NUMBER = 1; + private com.google.protobuf.Timestamp endTimestamp_; + + /** + * + * + *
                                +     * End timestamp at which the change stream partition is terminated. All
                                +     * changes generated by this partition will have timestamps <=
                                +     * end_timestamp. DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition. PartitionEndRecord is the last record returned for a
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + * + * @return Whether the endTimestamp field is set. + */ + @java.lang.Override + public boolean hasEndTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * End timestamp at which the change stream partition is terminated. All
                                +     * changes generated by this partition will have timestamps <=
                                +     * end_timestamp. DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition. PartitionEndRecord is the last record returned for a
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + * + * @return The endTimestamp. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getEndTimestamp() { + return endTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : endTimestamp_; + } + + /** + * + * + *
                                +     * End timestamp at which the change stream partition is terminated. All
                                +     * changes generated by this partition will have timestamps <=
                                +     * end_timestamp. DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition. PartitionEndRecord is the last record returned for a
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getEndTimestampOrBuilder() { + return endTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : endTimestamp_; + } + + public static final int RECORD_SEQUENCE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + @java.lang.Override + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + 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(); + recordSequence_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARTITION_TOKEN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object partitionToken_ = ""; + + /** + * + * + *
                                +     * Unique partition identifier describing the terminated change stream
                                +     * partition.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEndRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The partitionToken. + */ + @java.lang.Override + public java.lang.String getPartitionToken() { + java.lang.Object ref = partitionToken_; + 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(); + partitionToken_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Unique partition identifier describing the terminated change stream
                                +     * partition.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEndRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The bytes for partitionToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPartitionTokenBytes() { + java.lang.Object ref = partitionToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + partitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getEndTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, recordSequence_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(partitionToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, partitionToken_); + } + 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, getEndTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, recordSequence_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(partitionToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, partitionToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord other = + (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) obj; + + if (hasEndTimestamp() != other.hasEndTimestamp()) return false; + if (hasEndTimestamp()) { + if (!getEndTimestamp().equals(other.getEndTimestamp())) return false; + } + if (!getRecordSequence().equals(other.getRecordSequence())) return false; + if (!getPartitionToken().equals(other.getPartitionToken())) 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 (hasEndTimestamp()) { + hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getEndTimestamp().hashCode(); + } + hash = (37 * hash) + RECORD_SEQUENCE_FIELD_NUMBER; + hash = (53 * hash) + getRecordSequence().hashCode(); + hash = (37 * hash) + PARTITION_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPartitionToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * A partition end record serves as a notification that the client should stop
                                +     * reading the partition. No further records are expected to be retrieved on
                                +     * it.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionEndRecord} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecordOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.Builder.class); + } + + // Construct using com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetEndTimestampFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + endTimestamp_ = null; + if (endTimestampBuilder_ != null) { + endTimestampBuilder_.dispose(); + endTimestampBuilder_ = null; + } + recordSequence_ = ""; + partitionToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEndRecord_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord build() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord result = + new com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.endTimestamp_ = + endTimestampBuilder_ == null ? endTimestamp_ : endTimestampBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.recordSequence_ = recordSequence_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.partitionToken_ = partitionToken_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) { + return mergeFrom((com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance()) + return this; + if (other.hasEndTimestamp()) { + mergeEndTimestamp(other.getEndTimestamp()); + } + if (!other.getRecordSequence().isEmpty()) { + recordSequence_ = other.recordSequence_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getPartitionToken().isEmpty()) { + partitionToken_ = other.partitionToken_; + bitField0_ |= 0x00000004; + 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: + { + input.readMessage( + internalGetEndTimestampFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + recordSequence_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + partitionToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.Timestamp endTimestamp_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + endTimestampBuilder_; + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + * + * @return Whether the endTimestamp field is set. + */ + public boolean hasEndTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + * + * @return The endTimestamp. + */ + public com.google.protobuf.Timestamp getEndTimestamp() { + if (endTimestampBuilder_ == null) { + return endTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : endTimestamp_; + } else { + return endTimestampBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + public Builder setEndTimestamp(com.google.protobuf.Timestamp value) { + if (endTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + endTimestamp_ = value; + } else { + endTimestampBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + public Builder setEndTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { + if (endTimestampBuilder_ == null) { + endTimestamp_ = builderForValue.build(); + } else { + endTimestampBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + public Builder mergeEndTimestamp(com.google.protobuf.Timestamp value) { + if (endTimestampBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && endTimestamp_ != null + && endTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getEndTimestampBuilder().mergeFrom(value); + } else { + endTimestamp_ = value; + } + } else { + endTimestampBuilder_.mergeFrom(value); + } + if (endTimestamp_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + public Builder clearEndTimestamp() { + bitField0_ = (bitField0_ & ~0x00000001); + endTimestamp_ = null; + if (endTimestampBuilder_ != null) { + endTimestampBuilder_.dispose(); + endTimestampBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + public com.google.protobuf.Timestamp.Builder getEndTimestampBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetEndTimestampFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + public com.google.protobuf.TimestampOrBuilder getEndTimestampOrBuilder() { + if (endTimestampBuilder_ != null) { + return endTimestampBuilder_.getMessageOrBuilder(); + } else { + return endTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : endTimestamp_; + } + } + + /** + * + * + *
                                +       * End timestamp at which the change stream partition is terminated. All
                                +       * changes generated by this partition will have timestamps <=
                                +       * end_timestamp. DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition. PartitionEndRecord is the last record returned for a
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp end_timestamp = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetEndTimestampFieldBuilder() { + if (endTimestampBuilder_ == null) { + endTimestampBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getEndTimestamp(), getParentForChildren(), isClean()); + endTimestamp_ = null; + } + return endTimestampBuilder_; + } + + private java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + recordSequence_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequence(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return This builder for chaining. + */ + public Builder clearRecordSequence() { + recordSequence_ = getDefaultInstance().getRecordSequence(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The bytes for recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequenceBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object partitionToken_ = ""; + + /** + * + * + *
                                +       * Unique partition identifier describing the terminated change stream
                                +       * partition.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEndRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @return The partitionToken. + */ + public java.lang.String getPartitionToken() { + java.lang.Object ref = partitionToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + partitionToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Unique partition identifier describing the terminated change stream
                                +       * partition.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEndRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @return The bytes for partitionToken. + */ + public com.google.protobuf.ByteString getPartitionTokenBytes() { + java.lang.Object ref = partitionToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + partitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Unique partition identifier describing the terminated change stream
                                +       * partition.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEndRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @param value The partitionToken to set. + * @return This builder for chaining. + */ + public Builder setPartitionToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + partitionToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifier describing the terminated change stream
                                +       * partition.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEndRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @return This builder for chaining. + */ + public Builder clearPartitionToken() { + partitionToken_ = getDefaultInstance().getPartitionToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifier describing the terminated change stream
                                +       * partition.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEndRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @param value The bytes for partitionToken to set. + * @return This builder for chaining. + */ + public Builder setPartitionTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + partitionToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) + private static final com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PartitionEndRecord parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface PartitionEventRecordOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Indicates the commit timestamp at which the key range change occurred.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return Whether the commitTimestamp field is set. + */ + boolean hasCommitTimestamp(); + + /** + * + * + *
                                +     * Indicates the commit timestamp at which the key range change occurred.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return The commitTimestamp. + */ + com.google.protobuf.Timestamp getCommitTimestamp(); + + /** + * + * + *
                                +     * Indicates the commit timestamp at which the key range change occurred.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + java.lang.String getRecordSequence(); + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + com.google.protobuf.ByteString getRecordSequenceBytes(); + + /** + * + * + *
                                +     * Unique partition identifier describing the partition this event
                                +     * occurred on.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEventRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The partitionToken. + */ + java.lang.String getPartitionToken(); + + /** + * + * + *
                                +     * Unique partition identifier describing the partition this event
                                +     * occurred on.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEventRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The bytes for partitionToken. + */ + com.google.protobuf.ByteString getPartitionTokenBytes(); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + java.util.List + getMoveInEventsList(); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent getMoveInEvents( + int index); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + int getMoveInEventsCount(); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder> + getMoveInEventsOrBuilderList(); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder + getMoveInEventsOrBuilder(int index); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + java.util.List + getMoveOutEventsList(); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent getMoveOutEvents( + int index); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + int getMoveOutEventsCount(); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder> + getMoveOutEventsOrBuilderList(); + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder + getMoveOutEventsOrBuilder(int index); + } + + /** + * + * + *
                                +   * A partition event record describes key range changes for a change stream
                                +   * partition. The changes to a row defined by its primary key can be captured
                                +   * in one change stream partition for a specific time range, and then be
                                +   * captured in a different change stream partition for a different time range.
                                +   * This movement of key ranges across change stream partitions is a reflection
                                +   * of activities, such as Spanner's dynamic splitting and load balancing, etc.
                                +   * Processing this event is needed if users want to guarantee processing of
                                +   * the changes for any key in timestamp order. If time ordered processing of
                                +   * changes for a primary key is not needed, this event can be ignored.
                                +   * To guarantee time ordered processing for each primary key, if the event
                                +   * describes move-ins, the reader of this partition needs to wait until the
                                +   * readers of the source partitions have processed all records with timestamps
                                +   * <= this PartitionEventRecord.commit_timestamp, before advancing beyond this
                                +   * PartitionEventRecord. If the event describes move-outs, the reader can
                                +   * notify the readers of the destination partitions that they can continue
                                +   * processing.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionEventRecord} + */ + public static final class PartitionEventRecord extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) + PartitionEventRecordOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionEventRecord"); + } + + // Use PartitionEventRecord.newBuilder() to construct. + private PartitionEventRecord(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PartitionEventRecord() { + recordSequence_ = ""; + partitionToken_ = ""; + moveInEvents_ = java.util.Collections.emptyList(); + moveOutEvents_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.Builder.class); + } + + public interface MoveInEventOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +       * An unique partition identifier describing the source change stream
                                +       * partition that recorded changes for the key range that is moving
                                +       * into this partition.
                                +       * 
                                + * + * string source_partition_token = 1; + * + * @return The sourcePartitionToken. + */ + java.lang.String getSourcePartitionToken(); + + /** + * + * + *
                                +       * An unique partition identifier describing the source change stream
                                +       * partition that recorded changes for the key range that is moving
                                +       * into this partition.
                                +       * 
                                + * + * string source_partition_token = 1; + * + * @return The bytes for sourcePartitionToken. + */ + com.google.protobuf.ByteString getSourcePartitionTokenBytes(); + } + + /** + * + * + *
                                +     * Describes move-in of the key ranges into the change stream partition
                                +     * identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * To maintain processing the changes for a particular key in timestamp
                                +     * order, the query processing the change stream partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +     * should not advance beyond the partition event record commit timestamp
                                +     * until the queries processing the source change stream partitions have
                                +     * processed all change stream records with timestamps <= the partition
                                +     * event record commit timestamp.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent} + */ + public static final class MoveInEvent extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) + MoveInEventOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MoveInEvent"); + } + + // Use MoveInEvent.newBuilder() to construct. + private MoveInEvent(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private MoveInEvent() { + sourcePartitionToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + .class); + } + + public static final int SOURCE_PARTITION_TOKEN_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object sourcePartitionToken_ = ""; + + /** + * + * + *
                                +       * An unique partition identifier describing the source change stream
                                +       * partition that recorded changes for the key range that is moving
                                +       * into this partition.
                                +       * 
                                + * + * string source_partition_token = 1; + * + * @return The sourcePartitionToken. + */ + @java.lang.Override + public java.lang.String getSourcePartitionToken() { + java.lang.Object ref = sourcePartitionToken_; + 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(); + sourcePartitionToken_ = s; + return s; + } + } + + /** + * + * + *
                                +       * An unique partition identifier describing the source change stream
                                +       * partition that recorded changes for the key range that is moving
                                +       * into this partition.
                                +       * 
                                + * + * string source_partition_token = 1; + * + * @return The bytes for sourcePartitionToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSourcePartitionTokenBytes() { + java.lang.Object ref = sourcePartitionToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + sourcePartitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourcePartitionToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, sourcePartitionToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sourcePartitionToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, sourcePartitionToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent other = + (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) obj; + + if (!getSourcePartitionToken().equals(other.getSourcePartitionToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SOURCE_PARTITION_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getSourcePartitionToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +       * Describes move-in of the key ranges into the change stream partition
                                +       * identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * To maintain processing the changes for a particular key in timestamp
                                +       * order, the query processing the change stream partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +       * should not advance beyond the partition event record commit timestamp
                                +       * until the queries processing the source change stream partitions have
                                +       * processed all change stream records with timestamps <= the partition
                                +       * event record commit timestamp.
                                +       * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + .class); + } + + // Construct using + // com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + sourcePartitionToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveInEvent_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent build() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent result = + new com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.sourcePartitionToken_ = sourcePartitionToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) { + return mergeFrom( + (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + .getDefaultInstance()) return this; + if (!other.getSourcePartitionToken().isEmpty()) { + sourcePartitionToken_ = other.sourcePartitionToken_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + sourcePartitionToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object sourcePartitionToken_ = ""; + + /** + * + * + *
                                +         * An unique partition identifier describing the source change stream
                                +         * partition that recorded changes for the key range that is moving
                                +         * into this partition.
                                +         * 
                                + * + * string source_partition_token = 1; + * + * @return The sourcePartitionToken. + */ + public java.lang.String getSourcePartitionToken() { + java.lang.Object ref = sourcePartitionToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + sourcePartitionToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +         * An unique partition identifier describing the source change stream
                                +         * partition that recorded changes for the key range that is moving
                                +         * into this partition.
                                +         * 
                                + * + * string source_partition_token = 1; + * + * @return The bytes for sourcePartitionToken. + */ + public com.google.protobuf.ByteString getSourcePartitionTokenBytes() { + java.lang.Object ref = sourcePartitionToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + sourcePartitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +         * An unique partition identifier describing the source change stream
                                +         * partition that recorded changes for the key range that is moving
                                +         * into this partition.
                                +         * 
                                + * + * string source_partition_token = 1; + * + * @param value The sourcePartitionToken to set. + * @return This builder for chaining. + */ + public Builder setSourcePartitionToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + sourcePartitionToken_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * An unique partition identifier describing the source change stream
                                +         * partition that recorded changes for the key range that is moving
                                +         * into this partition.
                                +         * 
                                + * + * string source_partition_token = 1; + * + * @return This builder for chaining. + */ + public Builder clearSourcePartitionToken() { + sourcePartitionToken_ = getDefaultInstance().getSourcePartitionToken(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +         * An unique partition identifier describing the source change stream
                                +         * partition that recorded changes for the key range that is moving
                                +         * into this partition.
                                +         * 
                                + * + * string source_partition_token = 1; + * + * @param value The bytes for sourcePartitionToken to set. + * @return This builder for chaining. + */ + public Builder setSourcePartitionTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + sourcePartitionToken_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent) + private static final com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MoveInEvent parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface MoveOutEventOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +       * An unique partition identifier describing the destination change
                                +       * stream partition that will record changes for the key range that is
                                +       * moving out of this partition.
                                +       * 
                                + * + * string destination_partition_token = 1; + * + * @return The destinationPartitionToken. + */ + java.lang.String getDestinationPartitionToken(); + + /** + * + * + *
                                +       * An unique partition identifier describing the destination change
                                +       * stream partition that will record changes for the key range that is
                                +       * moving out of this partition.
                                +       * 
                                + * + * string destination_partition_token = 1; + * + * @return The bytes for destinationPartitionToken. + */ + com.google.protobuf.ByteString getDestinationPartitionTokenBytes(); + } + + /** + * + * + *
                                +     * Describes move-out of the key ranges out of the change stream partition
                                +     * identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * To maintain processing the changes for a particular key in timestamp
                                +     * order, the query processing the
                                +     * [MoveOutEvent][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent]
                                +     * in the partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +     * should inform the queries processing the destination partitions that
                                +     * they can unblock and proceed processing records past the
                                +     * [commit_timestamp][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.commit_timestamp].
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent} + */ + public static final class MoveOutEvent extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) + MoveOutEventOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MoveOutEvent"); + } + + // Use MoveOutEvent.newBuilder() to construct. + private MoveOutEvent(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private MoveOutEvent() { + destinationPartitionToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + .class); + } + + public static final int DESTINATION_PARTITION_TOKEN_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object destinationPartitionToken_ = ""; + + /** + * + * + *
                                +       * An unique partition identifier describing the destination change
                                +       * stream partition that will record changes for the key range that is
                                +       * moving out of this partition.
                                +       * 
                                + * + * string destination_partition_token = 1; + * + * @return The destinationPartitionToken. + */ + @java.lang.Override + public java.lang.String getDestinationPartitionToken() { + java.lang.Object ref = destinationPartitionToken_; + 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(); + destinationPartitionToken_ = s; + return s; + } + } + + /** + * + * + *
                                +       * An unique partition identifier describing the destination change
                                +       * stream partition that will record changes for the key range that is
                                +       * moving out of this partition.
                                +       * 
                                + * + * string destination_partition_token = 1; + * + * @return The bytes for destinationPartitionToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDestinationPartitionTokenBytes() { + java.lang.Object ref = destinationPartitionToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + destinationPartitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(destinationPartitionToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, destinationPartitionToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(destinationPartitionToken_)) { + size += + com.google.protobuf.GeneratedMessage.computeStringSize(1, destinationPartitionToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent other = + (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) obj; + + if (!getDestinationPartitionToken().equals(other.getDestinationPartitionToken())) + return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DESTINATION_PARTITION_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getDestinationPartitionToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +       * Describes move-out of the key ranges out of the change stream partition
                                +       * identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * To maintain processing the changes for a particular key in timestamp
                                +       * order, the query processing the
                                +       * [MoveOutEvent][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent]
                                +       * in the partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +       * should inform the queries processing the destination partitions that
                                +       * they can unblock and proceed processing records past the
                                +       * [commit_timestamp][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.commit_timestamp].
                                +       * 
                                + * + * Protobuf type {@code + * google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + .class); + } + + // Construct using + // com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + destinationPartitionToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_MoveOutEvent_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent build() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent result = + new com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.destinationPartitionToken_ = destinationPartitionToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) { + return mergeFrom( + (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + .getDefaultInstance()) return this; + if (!other.getDestinationPartitionToken().isEmpty()) { + destinationPartitionToken_ = other.destinationPartitionToken_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + destinationPartitionToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object destinationPartitionToken_ = ""; + + /** + * + * + *
                                +         * An unique partition identifier describing the destination change
                                +         * stream partition that will record changes for the key range that is
                                +         * moving out of this partition.
                                +         * 
                                + * + * string destination_partition_token = 1; + * + * @return The destinationPartitionToken. + */ + public java.lang.String getDestinationPartitionToken() { + java.lang.Object ref = destinationPartitionToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + destinationPartitionToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +         * An unique partition identifier describing the destination change
                                +         * stream partition that will record changes for the key range that is
                                +         * moving out of this partition.
                                +         * 
                                + * + * string destination_partition_token = 1; + * + * @return The bytes for destinationPartitionToken. + */ + public com.google.protobuf.ByteString getDestinationPartitionTokenBytes() { + java.lang.Object ref = destinationPartitionToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + destinationPartitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +         * An unique partition identifier describing the destination change
                                +         * stream partition that will record changes for the key range that is
                                +         * moving out of this partition.
                                +         * 
                                + * + * string destination_partition_token = 1; + * + * @param value The destinationPartitionToken to set. + * @return This builder for chaining. + */ + public Builder setDestinationPartitionToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + destinationPartitionToken_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +         * An unique partition identifier describing the destination change
                                +         * stream partition that will record changes for the key range that is
                                +         * moving out of this partition.
                                +         * 
                                + * + * string destination_partition_token = 1; + * + * @return This builder for chaining. + */ + public Builder clearDestinationPartitionToken() { + destinationPartitionToken_ = getDefaultInstance().getDestinationPartitionToken(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +         * An unique partition identifier describing the destination change
                                +         * stream partition that will record changes for the key range that is
                                +         * moving out of this partition.
                                +         * 
                                + * + * string destination_partition_token = 1; + * + * @param value The bytes for destinationPartitionToken to set. + * @return This builder for chaining. + */ + public Builder setDestinationPartitionTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + destinationPartitionToken_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent) + private static final com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + .MoveOutEvent + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MoveOutEvent parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + public static final int COMMIT_TIMESTAMP_FIELD_NUMBER = 1; + private com.google.protobuf.Timestamp commitTimestamp_; + + /** + * + * + *
                                +     * Indicates the commit timestamp at which the key range change occurred.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return Whether the commitTimestamp field is set. + */ + @java.lang.Override + public boolean hasCommitTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Indicates the commit timestamp at which the key range change occurred.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return The commitTimestamp. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getCommitTimestamp() { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + + /** + * + * + *
                                +     * Indicates the commit timestamp at which the key range change occurred.
                                +     * DataChangeRecord.commit_timestamps,
                                +     * PartitionStartRecord.start_timestamps,
                                +     * PartitionEventRecord.commit_timestamps, and
                                +     * PartitionEndRecord.end_timestamps can have the same value in the same
                                +     * partition.
                                +     * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + + public static final int RECORD_SEQUENCE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + @java.lang.Override + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + 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(); + recordSequence_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Record sequence numbers are unique and monotonically increasing (but not
                                +     * necessarily contiguous) for a specific timestamp across record
                                +     * types in the same partition. To guarantee ordered processing, the reader
                                +     * should process records (of potentially different types) in
                                +     * record_sequence order for a specific timestamp in the same partition.
                                +     * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARTITION_TOKEN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object partitionToken_ = ""; + + /** + * + * + *
                                +     * Unique partition identifier describing the partition this event
                                +     * occurred on.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEventRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The partitionToken. + */ + @java.lang.Override + public java.lang.String getPartitionToken() { + java.lang.Object ref = partitionToken_; + 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(); + partitionToken_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Unique partition identifier describing the partition this event
                                +     * occurred on.
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +     * is equal to the partition token of the change stream partition currently
                                +     * queried to return this PartitionEventRecord.
                                +     * 
                                + * + * string partition_token = 3; + * + * @return The bytes for partitionToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPartitionTokenBytes() { + java.lang.Object ref = partitionToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + partitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MOVE_IN_EVENTS_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent> + moveInEvents_; + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + @java.lang.Override + public java.util.List + getMoveInEventsList() { + return moveInEvents_; + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + @java.lang.Override + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder> + getMoveInEventsOrBuilderList() { + return moveInEvents_; + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + @java.lang.Override + public int getMoveInEventsCount() { + return moveInEvents_.size(); + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + getMoveInEvents(int index) { + return moveInEvents_.get(index); + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved into the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_in_events {
                                +     * source_partition_token: "P2"
                                +     * }
                                +     * move_in_events {
                                +     * source_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_out_events {
                                +     * destination_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder + getMoveInEventsOrBuilder(int index) { + return moveInEvents_.get(index); + } + + public static final int MOVE_OUT_EVENTS_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent> + moveOutEvents_; + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + @java.lang.Override + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent> + getMoveOutEventsList() { + return moveOutEvents_; + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + @java.lang.Override + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder> + getMoveOutEventsOrBuilderList() { + return moveOutEvents_; + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + @java.lang.Override + public int getMoveOutEventsCount() { + return moveOutEvents_.size(); + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + getMoveOutEvents(int index) { + return moveOutEvents_.get(index); + } + + /** + * + * + *
                                +     * Set when one or more key ranges are moved out of the change stream
                                +     * partition identified by
                                +     * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +     *
                                +     * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +     * and partition (P3) in a single transaction at timestamp T.
                                +     *
                                +     * The PartitionEventRecord returned in P1 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P1"
                                +     * move_out_events {
                                +     * destination_partition_token: "P2"
                                +     * }
                                +     * move_out_events {
                                +     * destination_partition_token: "P3"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P2 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P2"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     *
                                +     * The PartitionEventRecord returned in P3 will reflect the move as:
                                +     *
                                +     * PartitionEventRecord {
                                +     * commit_timestamp: T
                                +     * partition_token: "P3"
                                +     * move_in_events {
                                +     * source_partition_token: "P1"
                                +     * }
                                +     * }
                                +     * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder + getMoveOutEventsOrBuilder(int index) { + return moveOutEvents_.get(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getCommitTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, recordSequence_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(partitionToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, partitionToken_); + } + for (int i = 0; i < moveInEvents_.size(); i++) { + output.writeMessage(4, moveInEvents_.get(i)); + } + for (int i = 0; i < moveOutEvents_.size(); i++) { + output.writeMessage(5, moveOutEvents_.get(i)); + } + 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, getCommitTimestamp()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(recordSequence_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, recordSequence_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(partitionToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, partitionToken_); + } + for (int i = 0; i < moveInEvents_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, moveInEvents_.get(i)); + } + for (int i = 0; i < moveOutEvents_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, moveOutEvents_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord other = + (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) obj; + + if (hasCommitTimestamp() != other.hasCommitTimestamp()) return false; + if (hasCommitTimestamp()) { + if (!getCommitTimestamp().equals(other.getCommitTimestamp())) return false; + } + if (!getRecordSequence().equals(other.getRecordSequence())) return false; + if (!getPartitionToken().equals(other.getPartitionToken())) return false; + if (!getMoveInEventsList().equals(other.getMoveInEventsList())) return false; + if (!getMoveOutEventsList().equals(other.getMoveOutEventsList())) 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 (hasCommitTimestamp()) { + hash = (37 * hash) + COMMIT_TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getCommitTimestamp().hashCode(); + } + hash = (37 * hash) + RECORD_SEQUENCE_FIELD_NUMBER; + hash = (53 * hash) + getRecordSequence().hashCode(); + hash = (37 * hash) + PARTITION_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPartitionToken().hashCode(); + if (getMoveInEventsCount() > 0) { + hash = (37 * hash) + MOVE_IN_EVENTS_FIELD_NUMBER; + hash = (53 * hash) + getMoveInEventsList().hashCode(); + } + if (getMoveOutEventsCount() > 0) { + hash = (37 * hash) + MOVE_OUT_EVENTS_FIELD_NUMBER; + hash = (53 * hash) + getMoveOutEventsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * A partition event record describes key range changes for a change stream
                                +     * partition. The changes to a row defined by its primary key can be captured
                                +     * in one change stream partition for a specific time range, and then be
                                +     * captured in a different change stream partition for a different time range.
                                +     * This movement of key ranges across change stream partitions is a reflection
                                +     * of activities, such as Spanner's dynamic splitting and load balancing, etc.
                                +     * Processing this event is needed if users want to guarantee processing of
                                +     * the changes for any key in timestamp order. If time ordered processing of
                                +     * changes for a primary key is not needed, this event can be ignored.
                                +     * To guarantee time ordered processing for each primary key, if the event
                                +     * describes move-ins, the reader of this partition needs to wait until the
                                +     * readers of the source partitions have processed all records with timestamps
                                +     * <= this PartitionEventRecord.commit_timestamp, before advancing beyond this
                                +     * PartitionEventRecord. If the event describes move-outs, the reader can
                                +     * notify the readers of the destination partitions that they can continue
                                +     * processing.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord.PartitionEventRecord} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecordOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.class, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.Builder.class); + } + + // Construct using com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetCommitTimestampFieldBuilder(); + internalGetMoveInEventsFieldBuilder(); + internalGetMoveOutEventsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + commitTimestamp_ = null; + if (commitTimestampBuilder_ != null) { + commitTimestampBuilder_.dispose(); + commitTimestampBuilder_ = null; + } + recordSequence_ = ""; + partitionToken_ = ""; + if (moveInEventsBuilder_ == null) { + moveInEvents_ = java.util.Collections.emptyList(); + } else { + moveInEvents_ = null; + moveInEventsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + if (moveOutEventsBuilder_ == null) { + moveOutEvents_ = java.util.Collections.emptyList(); + } else { + moveOutEvents_ = null; + moveOutEventsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_PartitionEventRecord_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord build() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord buildPartial() { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord result = + new com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord result) { + if (moveInEventsBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + moveInEvents_ = java.util.Collections.unmodifiableList(moveInEvents_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.moveInEvents_ = moveInEvents_; + } else { + result.moveInEvents_ = moveInEventsBuilder_.build(); + } + if (moveOutEventsBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0)) { + moveOutEvents_ = java.util.Collections.unmodifiableList(moveOutEvents_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.moveOutEvents_ = moveOutEvents_; + } else { + result.moveOutEvents_ = moveOutEventsBuilder_.build(); + } + } + + private void buildPartial0( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.commitTimestamp_ = + commitTimestampBuilder_ == null ? commitTimestamp_ : commitTimestampBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.recordSequence_ = recordSequence_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.partitionToken_ = partitionToken_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) { + return mergeFrom((com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord other) { + if (other + == com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.getDefaultInstance()) + return this; + if (other.hasCommitTimestamp()) { + mergeCommitTimestamp(other.getCommitTimestamp()); + } + if (!other.getRecordSequence().isEmpty()) { + recordSequence_ = other.recordSequence_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getPartitionToken().isEmpty()) { + partitionToken_ = other.partitionToken_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (moveInEventsBuilder_ == null) { + if (!other.moveInEvents_.isEmpty()) { + if (moveInEvents_.isEmpty()) { + moveInEvents_ = other.moveInEvents_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureMoveInEventsIsMutable(); + moveInEvents_.addAll(other.moveInEvents_); + } + onChanged(); + } + } else { + if (!other.moveInEvents_.isEmpty()) { + if (moveInEventsBuilder_.isEmpty()) { + moveInEventsBuilder_.dispose(); + moveInEventsBuilder_ = null; + moveInEvents_ = other.moveInEvents_; + bitField0_ = (bitField0_ & ~0x00000008); + moveInEventsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMoveInEventsFieldBuilder() + : null; + } else { + moveInEventsBuilder_.addAllMessages(other.moveInEvents_); + } + } + } + if (moveOutEventsBuilder_ == null) { + if (!other.moveOutEvents_.isEmpty()) { + if (moveOutEvents_.isEmpty()) { + moveOutEvents_ = other.moveOutEvents_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensureMoveOutEventsIsMutable(); + moveOutEvents_.addAll(other.moveOutEvents_); + } + onChanged(); + } + } else { + if (!other.moveOutEvents_.isEmpty()) { + if (moveOutEventsBuilder_.isEmpty()) { + moveOutEventsBuilder_.dispose(); + moveOutEventsBuilder_ = null; + moveOutEvents_ = other.moveOutEvents_; + bitField0_ = (bitField0_ & ~0x00000010); + moveOutEventsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMoveOutEventsFieldBuilder() + : null; + } else { + moveOutEventsBuilder_.addAllMessages(other.moveOutEvents_); + } + } + } + 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( + internalGetCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + recordSequence_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + partitionToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent m = + input.readMessage( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + .parser(), + extensionRegistry); + if (moveInEventsBuilder_ == null) { + ensureMoveInEventsIsMutable(); + moveInEvents_.add(m); + } else { + moveInEventsBuilder_.addMessage(m); + } + break; + } // case 34 + case 42: + { + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent m = + input.readMessage( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + .parser(), + extensionRegistry); + if (moveOutEventsBuilder_ == null) { + ensureMoveOutEventsIsMutable(); + moveOutEvents_.add(m); + } else { + moveOutEventsBuilder_.addMessage(m); + } + break; + } // case 42 + 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.Timestamp commitTimestamp_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + commitTimestampBuilder_; + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return Whether the commitTimestamp field is set. + */ + public boolean hasCommitTimestamp() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + * + * @return The commitTimestamp. + */ + public com.google.protobuf.Timestamp getCommitTimestamp() { + if (commitTimestampBuilder_ == null) { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } else { + return commitTimestampBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder setCommitTimestamp(com.google.protobuf.Timestamp value) { + if (commitTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + commitTimestamp_ = value; + } else { + commitTimestampBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder setCommitTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { + if (commitTimestampBuilder_ == null) { + commitTimestamp_ = builderForValue.build(); + } else { + commitTimestampBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder mergeCommitTimestamp(com.google.protobuf.Timestamp value) { + if (commitTimestampBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && commitTimestamp_ != null + && commitTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getCommitTimestampBuilder().mergeFrom(value); + } else { + commitTimestamp_ = value; + } + } else { + commitTimestampBuilder_.mergeFrom(value); + } + if (commitTimestamp_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public Builder clearCommitTimestamp() { + bitField0_ = (bitField0_ & ~0x00000001); + commitTimestamp_ = null; + if (commitTimestampBuilder_ != null) { + commitTimestampBuilder_.dispose(); + commitTimestampBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public com.google.protobuf.Timestamp.Builder getCommitTimestampBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetCommitTimestampFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { + if (commitTimestampBuilder_ != null) { + return commitTimestampBuilder_.getMessageOrBuilder(); + } else { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + } + + /** + * + * + *
                                +       * Indicates the commit timestamp at which the key range change occurred.
                                +       * DataChangeRecord.commit_timestamps,
                                +       * PartitionStartRecord.start_timestamps,
                                +       * PartitionEventRecord.commit_timestamps, and
                                +       * PartitionEndRecord.end_timestamps can have the same value in the same
                                +       * partition.
                                +       * 
                                + * + * .google.protobuf.Timestamp commit_timestamp = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetCommitTimestampFieldBuilder() { + if (commitTimestampBuilder_ == null) { + commitTimestampBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getCommitTimestamp(), getParentForChildren(), isClean()); + commitTimestamp_ = null; + } + return commitTimestampBuilder_; + } + + private java.lang.Object recordSequence_ = ""; + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The recordSequence. + */ + public java.lang.String getRecordSequence() { + java.lang.Object ref = recordSequence_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + recordSequence_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return The bytes for recordSequence. + */ + public com.google.protobuf.ByteString getRecordSequenceBytes() { + java.lang.Object ref = recordSequence_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + recordSequence_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequence(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @return This builder for chaining. + */ + public Builder clearRecordSequence() { + recordSequence_ = getDefaultInstance().getRecordSequence(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Record sequence numbers are unique and monotonically increasing (but not
                                +       * necessarily contiguous) for a specific timestamp across record
                                +       * types in the same partition. To guarantee ordered processing, the reader
                                +       * should process records (of potentially different types) in
                                +       * record_sequence order for a specific timestamp in the same partition.
                                +       * 
                                + * + * string record_sequence = 2; + * + * @param value The bytes for recordSequence to set. + * @return This builder for chaining. + */ + public Builder setRecordSequenceBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + recordSequence_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object partitionToken_ = ""; + + /** + * + * + *
                                +       * Unique partition identifier describing the partition this event
                                +       * occurred on.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEventRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @return The partitionToken. + */ + public java.lang.String getPartitionToken() { + java.lang.Object ref = partitionToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + partitionToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Unique partition identifier describing the partition this event
                                +       * occurred on.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEventRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @return The bytes for partitionToken. + */ + public com.google.protobuf.ByteString getPartitionTokenBytes() { + java.lang.Object ref = partitionToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + partitionToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Unique partition identifier describing the partition this event
                                +       * occurred on.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEventRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @param value The partitionToken to set. + * @return This builder for chaining. + */ + public Builder setPartitionToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + partitionToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifier describing the partition this event
                                +       * occurred on.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEventRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @return This builder for chaining. + */ + public Builder clearPartitionToken() { + partitionToken_ = getDefaultInstance().getPartitionToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Unique partition identifier describing the partition this event
                                +       * occurred on.
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]
                                +       * is equal to the partition token of the change stream partition currently
                                +       * queried to return this PartitionEventRecord.
                                +       * 
                                + * + * string partition_token = 3; + * + * @param value The bytes for partitionToken to set. + * @return This builder for chaining. + */ + public Builder setPartitionTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + partitionToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent> + moveInEvents_ = java.util.Collections.emptyList(); + + private void ensureMoveInEventsIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + moveInEvents_ = + new java.util.ArrayList< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent>( + moveInEvents_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder> + moveInEventsBuilder_; + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent> + getMoveInEventsList() { + if (moveInEventsBuilder_ == null) { + return java.util.Collections.unmodifiableList(moveInEvents_); + } else { + return moveInEventsBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public int getMoveInEventsCount() { + if (moveInEventsBuilder_ == null) { + return moveInEvents_.size(); + } else { + return moveInEventsBuilder_.getCount(); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + getMoveInEvents(int index) { + if (moveInEventsBuilder_ == null) { + return moveInEvents_.get(index); + } else { + return moveInEventsBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder setMoveInEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent value) { + if (moveInEventsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMoveInEventsIsMutable(); + moveInEvents_.set(index, value); + onChanged(); + } else { + moveInEventsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder setMoveInEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + builderForValue) { + if (moveInEventsBuilder_ == null) { + ensureMoveInEventsIsMutable(); + moveInEvents_.set(index, builderForValue.build()); + onChanged(); + } else { + moveInEventsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder addMoveInEvents( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent value) { + if (moveInEventsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMoveInEventsIsMutable(); + moveInEvents_.add(value); + onChanged(); + } else { + moveInEventsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder addMoveInEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent value) { + if (moveInEventsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMoveInEventsIsMutable(); + moveInEvents_.add(index, value); + onChanged(); + } else { + moveInEventsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder addMoveInEvents( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + builderForValue) { + if (moveInEventsBuilder_ == null) { + ensureMoveInEventsIsMutable(); + moveInEvents_.add(builderForValue.build()); + onChanged(); + } else { + moveInEventsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder addMoveInEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + builderForValue) { + if (moveInEventsBuilder_ == null) { + ensureMoveInEventsIsMutable(); + moveInEvents_.add(index, builderForValue.build()); + onChanged(); + } else { + moveInEventsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder addAllMoveInEvents( + java.lang.Iterable< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent> + values) { + if (moveInEventsBuilder_ == null) { + ensureMoveInEventsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, moveInEvents_); + onChanged(); + } else { + moveInEventsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder clearMoveInEvents() { + if (moveInEventsBuilder_ == null) { + moveInEvents_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + moveInEventsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public Builder removeMoveInEvents(int index) { + if (moveInEventsBuilder_ == null) { + ensureMoveInEventsIsMutable(); + moveInEvents_.remove(index); + onChanged(); + } else { + moveInEventsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + getMoveInEventsBuilder(int index) { + return internalGetMoveInEventsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder + getMoveInEventsOrBuilder(int index) { + if (moveInEventsBuilder_ == null) { + return moveInEvents_.get(index); + } else { + return moveInEventsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + .MoveInEventOrBuilder> + getMoveInEventsOrBuilderList() { + if (moveInEventsBuilder_ != null) { + return moveInEventsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(moveInEvents_); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + addMoveInEventsBuilder() { + return internalGetMoveInEventsFieldBuilder() + .addBuilder( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + .getDefaultInstance()); + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder + addMoveInEventsBuilder(int index) { + return internalGetMoveInEventsFieldBuilder() + .addBuilder( + index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent + .getDefaultInstance()); + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved into the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved into partition (P1) from partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_in_events {
                                +       * source_partition_token: "P2"
                                +       * }
                                +       * move_in_events {
                                +       * source_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_out_events {
                                +       * destination_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent move_in_events = 4; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder> + getMoveInEventsBuilderList() { + return internalGetMoveInEventsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEventOrBuilder> + internalGetMoveInEventsFieldBuilder() { + if (moveInEventsBuilder_ == null) { + moveInEventsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveInEvent.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + .MoveInEventOrBuilder>( + moveInEvents_, + ((bitField0_ & 0x00000008) != 0), + getParentForChildren(), + isClean()); + moveInEvents_ = null; + } + return moveInEventsBuilder_; + } + + private java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent> + moveOutEvents_ = java.util.Collections.emptyList(); + + private void ensureMoveOutEventsIsMutable() { + if (!((bitField0_ & 0x00000010) != 0)) { + moveOutEvents_ = + new java.util.ArrayList< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent>( + moveOutEvents_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder> + moveOutEventsBuilder_; + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent> + getMoveOutEventsList() { + if (moveOutEventsBuilder_ == null) { + return java.util.Collections.unmodifiableList(moveOutEvents_); + } else { + return moveOutEventsBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public int getMoveOutEventsCount() { + if (moveOutEventsBuilder_ == null) { + return moveOutEvents_.size(); + } else { + return moveOutEventsBuilder_.getCount(); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + getMoveOutEvents(int index) { + if (moveOutEventsBuilder_ == null) { + return moveOutEvents_.get(index); + } else { + return moveOutEventsBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder setMoveOutEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent value) { + if (moveOutEventsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMoveOutEventsIsMutable(); + moveOutEvents_.set(index, value); + onChanged(); + } else { + moveOutEventsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder setMoveOutEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + builderForValue) { + if (moveOutEventsBuilder_ == null) { + ensureMoveOutEventsIsMutable(); + moveOutEvents_.set(index, builderForValue.build()); + onChanged(); + } else { + moveOutEventsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder addMoveOutEvents( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent value) { + if (moveOutEventsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMoveOutEventsIsMutable(); + moveOutEvents_.add(value); + onChanged(); + } else { + moveOutEventsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder addMoveOutEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent value) { + if (moveOutEventsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMoveOutEventsIsMutable(); + moveOutEvents_.add(index, value); + onChanged(); + } else { + moveOutEventsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder addMoveOutEvents( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + builderForValue) { + if (moveOutEventsBuilder_ == null) { + ensureMoveOutEventsIsMutable(); + moveOutEvents_.add(builderForValue.build()); + onChanged(); + } else { + moveOutEventsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder addMoveOutEvents( + int index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + builderForValue) { + if (moveOutEventsBuilder_ == null) { + ensureMoveOutEventsIsMutable(); + moveOutEvents_.add(index, builderForValue.build()); + onChanged(); + } else { + moveOutEventsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder addAllMoveOutEvents( + java.lang.Iterable< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent> + values) { + if (moveOutEventsBuilder_ == null) { + ensureMoveOutEventsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, moveOutEvents_); + onChanged(); + } else { + moveOutEventsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder clearMoveOutEvents() { + if (moveOutEventsBuilder_ == null) { + moveOutEvents_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + moveOutEventsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public Builder removeMoveOutEvents(int index) { + if (moveOutEventsBuilder_ == null) { + ensureMoveOutEventsIsMutable(); + moveOutEvents_.remove(index); + onChanged(); + } else { + moveOutEventsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + getMoveOutEventsBuilder(int index) { + return internalGetMoveOutEventsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder + getMoveOutEventsOrBuilder(int index) { + if (moveOutEventsBuilder_ == null) { + return moveOutEvents_.get(index); + } else { + return moveOutEventsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public java.util.List< + ? extends + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + .MoveOutEventOrBuilder> + getMoveOutEventsOrBuilderList() { + if (moveOutEventsBuilder_ != null) { + return moveOutEventsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(moveOutEvents_); + } + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + addMoveOutEventsBuilder() { + return internalGetMoveOutEventsFieldBuilder() + .addBuilder( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + .getDefaultInstance()); + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder + addMoveOutEventsBuilder(int index) { + return internalGetMoveOutEventsFieldBuilder() + .addBuilder( + index, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + .getDefaultInstance()); + } + + /** + * + * + *
                                +       * Set when one or more key ranges are moved out of the change stream
                                +       * partition identified by
                                +       * [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token].
                                +       *
                                +       * Example: Two key ranges are moved out of partition (P1) to partition (P2)
                                +       * and partition (P3) in a single transaction at timestamp T.
                                +       *
                                +       * The PartitionEventRecord returned in P1 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P1"
                                +       * move_out_events {
                                +       * destination_partition_token: "P2"
                                +       * }
                                +       * move_out_events {
                                +       * destination_partition_token: "P3"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P2 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P2"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       *
                                +       * The PartitionEventRecord returned in P3 will reflect the move as:
                                +       *
                                +       * PartitionEventRecord {
                                +       * commit_timestamp: T
                                +       * partition_token: "P3"
                                +       * move_in_events {
                                +       * source_partition_token: "P1"
                                +       * }
                                +       * }
                                +       * 
                                + * + * + * repeated .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent move_out_events = 5; + * + */ + public java.util.List< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder> + getMoveOutEventsBuilderList() { + return internalGetMoveOutEventsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEventOrBuilder> + internalGetMoveOutEventsFieldBuilder() { + if (moveOutEventsBuilder_ == null) { + moveOutEventsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent + .Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + .MoveOutEventOrBuilder>( + moveOutEvents_, + ((bitField0_ & 0x00000010) != 0), + getParentForChildren(), + isClean()); + moveOutEvents_ = null; + } + return moveOutEventsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) + private static final com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord(); + } + + public static com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PartitionEventRecord parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int recordCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object record_; + + public enum RecordCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + DATA_CHANGE_RECORD(1), + HEARTBEAT_RECORD(2), + PARTITION_START_RECORD(3), + PARTITION_END_RECORD(4), + PARTITION_EVENT_RECORD(5), + RECORD_NOT_SET(0); + private final int value; + + private RecordCase(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 RecordCase valueOf(int value) { + return forNumber(value); + } + + public static RecordCase forNumber(int value) { + switch (value) { + case 1: + return DATA_CHANGE_RECORD; + case 2: + return HEARTBEAT_RECORD; + case 3: + return PARTITION_START_RECORD; + case 4: + return PARTITION_END_RECORD; + case 5: + return PARTITION_EVENT_RECORD; + case 0: + return RECORD_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public RecordCase getRecordCase() { + return RecordCase.forNumber(recordCase_); + } + + public static final int DATA_CHANGE_RECORD_FIELD_NUMBER = 1; + + /** + * + * + *
                                +   * Data change record describing a data change for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + * + * @return Whether the dataChangeRecord field is set. + */ + @java.lang.Override + public boolean hasDataChangeRecord() { + return recordCase_ == 1; + } + + /** + * + * + *
                                +   * Data change record describing a data change for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + * + * @return The dataChangeRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord getDataChangeRecord() { + if (recordCase_ == 1) { + return (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Data change record describing a data change for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecordOrBuilder + getDataChangeRecordOrBuilder() { + if (recordCase_ == 1) { + return (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance(); + } + + public static final int HEARTBEAT_RECORD_FIELD_NUMBER = 2; + + /** + * + * + *
                                +   * Heartbeat record describing a heartbeat for a change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + * + * @return Whether the heartbeatRecord field is set. + */ + @java.lang.Override + public boolean hasHeartbeatRecord() { + return recordCase_ == 2; + } + + /** + * + * + *
                                +   * Heartbeat record describing a heartbeat for a change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + * + * @return The heartbeatRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord getHeartbeatRecord() { + if (recordCase_ == 2) { + return (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Heartbeat record describing a heartbeat for a change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecordOrBuilder + getHeartbeatRecordOrBuilder() { + if (recordCase_ == 2) { + return (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance(); + } + + public static final int PARTITION_START_RECORD_FIELD_NUMBER = 3; + + /** + * + * + *
                                +   * Partition start record describing a new change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + * + * @return Whether the partitionStartRecord field is set. + */ + @java.lang.Override + public boolean hasPartitionStartRecord() { + return recordCase_ == 3; + } + + /** + * + * + *
                                +   * Partition start record describing a new change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + * + * @return The partitionStartRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord getPartitionStartRecord() { + if (recordCase_ == 3) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Partition start record describing a new change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecordOrBuilder + getPartitionStartRecordOrBuilder() { + if (recordCase_ == 3) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance(); + } + + public static final int PARTITION_END_RECORD_FIELD_NUMBER = 4; + + /** + * + * + *
                                +   * Partition end record describing a terminated change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + * @return Whether the partitionEndRecord field is set. + */ + @java.lang.Override + public boolean hasPartitionEndRecord() { + return recordCase_ == 4; + } + + /** + * + * + *
                                +   * Partition end record describing a terminated change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + * @return The partitionEndRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord getPartitionEndRecord() { + if (recordCase_ == 4) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Partition end record describing a terminated change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecordOrBuilder + getPartitionEndRecordOrBuilder() { + if (recordCase_ == 4) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance(); + } + + public static final int PARTITION_EVENT_RECORD_FIELD_NUMBER = 5; + + /** + * + * + *
                                +   * Partition event record describing key range changes for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + * + * @return Whether the partitionEventRecord field is set. + */ + @java.lang.Override + public boolean hasPartitionEventRecord() { + return recordCase_ == 5; + } + + /** + * + * + *
                                +   * Partition event record describing key range changes for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + * + * @return The partitionEventRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord getPartitionEventRecord() { + if (recordCase_ == 5) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Partition event record describing key range changes for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecordOrBuilder + getPartitionEventRecordOrBuilder() { + if (recordCase_ == 5) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.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 (recordCase_ == 1) { + output.writeMessage(1, (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_); + } + if (recordCase_ == 2) { + output.writeMessage(2, (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_); + } + if (recordCase_ == 3) { + output.writeMessage( + 3, (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_); + } + if (recordCase_ == 4) { + output.writeMessage(4, (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_); + } + if (recordCase_ == 5) { + output.writeMessage( + 5, (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (recordCase_ == 1) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 1, (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_); + } + if (recordCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_); + } + if (recordCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_); + } + if (recordCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_); + } + if (recordCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.ChangeStreamRecord)) { + return super.equals(obj); + } + com.google.spanner.v1.ChangeStreamRecord other = (com.google.spanner.v1.ChangeStreamRecord) obj; + + if (!getRecordCase().equals(other.getRecordCase())) return false; + switch (recordCase_) { + case 1: + if (!getDataChangeRecord().equals(other.getDataChangeRecord())) return false; + break; + case 2: + if (!getHeartbeatRecord().equals(other.getHeartbeatRecord())) return false; + break; + case 3: + if (!getPartitionStartRecord().equals(other.getPartitionStartRecord())) return false; + break; + case 4: + if (!getPartitionEndRecord().equals(other.getPartitionEndRecord())) return false; + break; + case 5: + if (!getPartitionEventRecord().equals(other.getPartitionEventRecord())) 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(); + switch (recordCase_) { + case 1: + hash = (37 * hash) + DATA_CHANGE_RECORD_FIELD_NUMBER; + hash = (53 * hash) + getDataChangeRecord().hashCode(); + break; + case 2: + hash = (37 * hash) + HEARTBEAT_RECORD_FIELD_NUMBER; + hash = (53 * hash) + getHeartbeatRecord().hashCode(); + break; + case 3: + hash = (37 * hash) + PARTITION_START_RECORD_FIELD_NUMBER; + hash = (53 * hash) + getPartitionStartRecord().hashCode(); + break; + case 4: + hash = (37 * hash) + PARTITION_END_RECORD_FIELD_NUMBER; + hash = (53 * hash) + getPartitionEndRecord().hashCode(); + break; + case 5: + hash = (37 * hash) + PARTITION_EVENT_RECORD_FIELD_NUMBER; + hash = (53 * hash) + getPartitionEventRecord().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.ChangeStreamRecord parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.ChangeStreamRecord 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * Spanner Change Streams enable customers to capture and stream out changes to
                                +   * their Spanner databases in real-time. A change stream
                                +   * can be created with option partition_mode='IMMUTABLE_KEY_RANGE' or
                                +   * partition_mode='MUTABLE_KEY_RANGE'.
                                +   *
                                +   * This message is only used in Change Streams created with the option
                                +   * partition_mode='MUTABLE_KEY_RANGE'. Spanner automatically creates a special
                                +   * Table-Valued Function (TVF) along with each Change Streams. The function
                                +   * provides access to the change stream's records. The function is named
                                +   * READ_<change_stream_name> (where <change_stream_name> is the
                                +   * name of the change stream), and it returns a table with only one column
                                +   * called ChangeRecord.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.ChangeStreamRecord} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.ChangeStreamRecord) + com.google.spanner.v1.ChangeStreamRecordOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.ChangeStreamRecord.class, + com.google.spanner.v1.ChangeStreamRecord.Builder.class); + } + + // Construct using com.google.spanner.v1.ChangeStreamRecord.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (dataChangeRecordBuilder_ != null) { + dataChangeRecordBuilder_.clear(); + } + if (heartbeatRecordBuilder_ != null) { + heartbeatRecordBuilder_.clear(); + } + if (partitionStartRecordBuilder_ != null) { + partitionStartRecordBuilder_.clear(); + } + if (partitionEndRecordBuilder_ != null) { + partitionEndRecordBuilder_.clear(); + } + if (partitionEventRecordBuilder_ != null) { + partitionEventRecordBuilder_.clear(); + } + recordCase_ = 0; + record_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.ChangeStreamProto + .internal_static_google_spanner_v1_ChangeStreamRecord_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord getDefaultInstanceForType() { + return com.google.spanner.v1.ChangeStreamRecord.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord build() { + com.google.spanner.v1.ChangeStreamRecord result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord buildPartial() { + com.google.spanner.v1.ChangeStreamRecord result = + new com.google.spanner.v1.ChangeStreamRecord(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.ChangeStreamRecord result) { + int from_bitField0_ = bitField0_; + } + + private void buildPartialOneofs(com.google.spanner.v1.ChangeStreamRecord result) { + result.recordCase_ = recordCase_; + result.record_ = this.record_; + if (recordCase_ == 1 && dataChangeRecordBuilder_ != null) { + result.record_ = dataChangeRecordBuilder_.build(); + } + if (recordCase_ == 2 && heartbeatRecordBuilder_ != null) { + result.record_ = heartbeatRecordBuilder_.build(); + } + if (recordCase_ == 3 && partitionStartRecordBuilder_ != null) { + result.record_ = partitionStartRecordBuilder_.build(); + } + if (recordCase_ == 4 && partitionEndRecordBuilder_ != null) { + result.record_ = partitionEndRecordBuilder_.build(); + } + if (recordCase_ == 5 && partitionEventRecordBuilder_ != null) { + result.record_ = partitionEventRecordBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.ChangeStreamRecord) { + return mergeFrom((com.google.spanner.v1.ChangeStreamRecord) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.ChangeStreamRecord other) { + if (other == com.google.spanner.v1.ChangeStreamRecord.getDefaultInstance()) return this; + switch (other.getRecordCase()) { + case DATA_CHANGE_RECORD: + { + mergeDataChangeRecord(other.getDataChangeRecord()); + break; + } + case HEARTBEAT_RECORD: + { + mergeHeartbeatRecord(other.getHeartbeatRecord()); + break; + } + case PARTITION_START_RECORD: + { + mergePartitionStartRecord(other.getPartitionStartRecord()); + break; + } + case PARTITION_END_RECORD: + { + mergePartitionEndRecord(other.getPartitionEndRecord()); + break; + } + case PARTITION_EVENT_RECORD: + { + mergePartitionEventRecord(other.getPartitionEventRecord()); + break; + } + case RECORD_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: + { + input.readMessage( + internalGetDataChangeRecordFieldBuilder().getBuilder(), extensionRegistry); + recordCase_ = 1; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetHeartbeatRecordFieldBuilder().getBuilder(), extensionRegistry); + recordCase_ = 2; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetPartitionStartRecordFieldBuilder().getBuilder(), extensionRegistry); + recordCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetPartitionEndRecordFieldBuilder().getBuilder(), extensionRegistry); + recordCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage( + internalGetPartitionEventRecordFieldBuilder().getBuilder(), extensionRegistry); + recordCase_ = 5; + break; + } // case 42 + 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 recordCase_ = 0; + private java.lang.Object record_; + + public RecordCase getRecordCase() { + return RecordCase.forNumber(recordCase_); + } + + public Builder clearRecord() { + recordCase_ = 0; + record_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecordOrBuilder> + dataChangeRecordBuilder_; + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + * + * @return Whether the dataChangeRecord field is set. + */ + @java.lang.Override + public boolean hasDataChangeRecord() { + return recordCase_ == 1; + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + * + * @return The dataChangeRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord getDataChangeRecord() { + if (dataChangeRecordBuilder_ == null) { + if (recordCase_ == 1) { + return (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance(); + } else { + if (recordCase_ == 1) { + return dataChangeRecordBuilder_.getMessage(); + } + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + public Builder setDataChangeRecord( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord value) { + if (dataChangeRecordBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + record_ = value; + onChanged(); + } else { + dataChangeRecordBuilder_.setMessage(value); + } + recordCase_ = 1; + return this; + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + public Builder setDataChangeRecord( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Builder builderForValue) { + if (dataChangeRecordBuilder_ == null) { + record_ = builderForValue.build(); + onChanged(); + } else { + dataChangeRecordBuilder_.setMessage(builderForValue.build()); + } + recordCase_ = 1; + return this; + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + public Builder mergeDataChangeRecord( + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord value) { + if (dataChangeRecordBuilder_ == null) { + if (recordCase_ == 1 + && record_ + != com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance()) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.newBuilder( + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_) + .mergeFrom(value) + .buildPartial(); + } else { + record_ = value; + } + onChanged(); + } else { + if (recordCase_ == 1) { + dataChangeRecordBuilder_.mergeFrom(value); + } else { + dataChangeRecordBuilder_.setMessage(value); + } + } + recordCase_ = 1; + return this; + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + public Builder clearDataChangeRecord() { + if (dataChangeRecordBuilder_ == null) { + if (recordCase_ == 1) { + recordCase_ = 0; + record_ = null; + onChanged(); + } + } else { + if (recordCase_ == 1) { + recordCase_ = 0; + record_ = null; + } + dataChangeRecordBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Builder + getDataChangeRecordBuilder() { + return internalGetDataChangeRecordFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.DataChangeRecordOrBuilder + getDataChangeRecordOrBuilder() { + if ((recordCase_ == 1) && (dataChangeRecordBuilder_ != null)) { + return dataChangeRecordBuilder_.getMessageOrBuilder(); + } else { + if (recordCase_ == 1) { + return (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Data change record describing a data change for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecordOrBuilder> + internalGetDataChangeRecordFieldBuilder() { + if (dataChangeRecordBuilder_ == null) { + if (!(recordCase_ == 1)) { + record_ = com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.getDefaultInstance(); + } + dataChangeRecordBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecordOrBuilder>( + (com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord) record_, + getParentForChildren(), + isClean()); + record_ = null; + } + recordCase_ = 1; + onChanged(); + return dataChangeRecordBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecordOrBuilder> + heartbeatRecordBuilder_; + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + * + * @return Whether the heartbeatRecord field is set. + */ + @java.lang.Override + public boolean hasHeartbeatRecord() { + return recordCase_ == 2; + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + * + * @return The heartbeatRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord getHeartbeatRecord() { + if (heartbeatRecordBuilder_ == null) { + if (recordCase_ == 2) { + return (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance(); + } else { + if (recordCase_ == 2) { + return heartbeatRecordBuilder_.getMessage(); + } + return com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + public Builder setHeartbeatRecord( + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord value) { + if (heartbeatRecordBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + record_ = value; + onChanged(); + } else { + heartbeatRecordBuilder_.setMessage(value); + } + recordCase_ = 2; + return this; + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + public Builder setHeartbeatRecord( + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.Builder builderForValue) { + if (heartbeatRecordBuilder_ == null) { + record_ = builderForValue.build(); + onChanged(); + } else { + heartbeatRecordBuilder_.setMessage(builderForValue.build()); + } + recordCase_ = 2; + return this; + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + public Builder mergeHeartbeatRecord( + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord value) { + if (heartbeatRecordBuilder_ == null) { + if (recordCase_ == 2 + && record_ + != com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance()) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.newBuilder( + (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_) + .mergeFrom(value) + .buildPartial(); + } else { + record_ = value; + } + onChanged(); + } else { + if (recordCase_ == 2) { + heartbeatRecordBuilder_.mergeFrom(value); + } else { + heartbeatRecordBuilder_.setMessage(value); + } + } + recordCase_ = 2; + return this; + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + public Builder clearHeartbeatRecord() { + if (heartbeatRecordBuilder_ == null) { + if (recordCase_ == 2) { + recordCase_ = 0; + record_ = null; + onChanged(); + } + } else { + if (recordCase_ == 2) { + recordCase_ = 0; + record_ = null; + } + heartbeatRecordBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.Builder + getHeartbeatRecordBuilder() { + return internalGetHeartbeatRecordFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecordOrBuilder + getHeartbeatRecordOrBuilder() { + if ((recordCase_ == 2) && (heartbeatRecordBuilder_ != null)) { + return heartbeatRecordBuilder_.getMessageOrBuilder(); + } else { + if (recordCase_ == 2) { + return (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Heartbeat record describing a heartbeat for a change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecordOrBuilder> + internalGetHeartbeatRecordFieldBuilder() { + if (heartbeatRecordBuilder_ == null) { + if (!(recordCase_ == 2)) { + record_ = com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.getDefaultInstance(); + } + heartbeatRecordBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecordOrBuilder>( + (com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord) record_, + getParentForChildren(), + isClean()); + record_ = null; + } + recordCase_ = 2; + onChanged(); + return heartbeatRecordBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecordOrBuilder> + partitionStartRecordBuilder_; + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + * + * @return Whether the partitionStartRecord field is set. + */ + @java.lang.Override + public boolean hasPartitionStartRecord() { + return recordCase_ == 3; + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + * + * @return The partitionStartRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord getPartitionStartRecord() { + if (partitionStartRecordBuilder_ == null) { + if (recordCase_ == 3) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance(); + } else { + if (recordCase_ == 3) { + return partitionStartRecordBuilder_.getMessage(); + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + public Builder setPartitionStartRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord value) { + if (partitionStartRecordBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + record_ = value; + onChanged(); + } else { + partitionStartRecordBuilder_.setMessage(value); + } + recordCase_ = 3; + return this; + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + public Builder setPartitionStartRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.Builder builderForValue) { + if (partitionStartRecordBuilder_ == null) { + record_ = builderForValue.build(); + onChanged(); + } else { + partitionStartRecordBuilder_.setMessage(builderForValue.build()); + } + recordCase_ = 3; + return this; + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + public Builder mergePartitionStartRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord value) { + if (partitionStartRecordBuilder_ == null) { + if (recordCase_ == 3 + && record_ + != com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord + .getDefaultInstance()) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.newBuilder( + (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_) + .mergeFrom(value) + .buildPartial(); + } else { + record_ = value; + } + onChanged(); + } else { + if (recordCase_ == 3) { + partitionStartRecordBuilder_.mergeFrom(value); + } else { + partitionStartRecordBuilder_.setMessage(value); + } + } + recordCase_ = 3; + return this; + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + public Builder clearPartitionStartRecord() { + if (partitionStartRecordBuilder_ == null) { + if (recordCase_ == 3) { + recordCase_ = 0; + record_ = null; + onChanged(); + } + } else { + if (recordCase_ == 3) { + recordCase_ = 0; + record_ = null; + } + partitionStartRecordBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.Builder + getPartitionStartRecordBuilder() { + return internalGetPartitionStartRecordFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecordOrBuilder + getPartitionStartRecordOrBuilder() { + if ((recordCase_ == 3) && (partitionStartRecordBuilder_ != null)) { + return partitionStartRecordBuilder_.getMessageOrBuilder(); + } else { + if (recordCase_ == 3) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Partition start record describing a new change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecordOrBuilder> + internalGetPartitionStartRecordFieldBuilder() { + if (partitionStartRecordBuilder_ == null) { + if (!(recordCase_ == 3)) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.getDefaultInstance(); + } + partitionStartRecordBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecordOrBuilder>( + (com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord) record_, + getParentForChildren(), + isClean()); + record_ = null; + } + recordCase_ = 3; + onChanged(); + return partitionStartRecordBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecordOrBuilder> + partitionEndRecordBuilder_; + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + * + * @return Whether the partitionEndRecord field is set. + */ + @java.lang.Override + public boolean hasPartitionEndRecord() { + return recordCase_ == 4; + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + * + * @return The partitionEndRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord getPartitionEndRecord() { + if (partitionEndRecordBuilder_ == null) { + if (recordCase_ == 4) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance(); + } else { + if (recordCase_ == 4) { + return partitionEndRecordBuilder_.getMessage(); + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + */ + public Builder setPartitionEndRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord value) { + if (partitionEndRecordBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + record_ = value; + onChanged(); + } else { + partitionEndRecordBuilder_.setMessage(value); + } + recordCase_ = 4; + return this; + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + */ + public Builder setPartitionEndRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.Builder builderForValue) { + if (partitionEndRecordBuilder_ == null) { + record_ = builderForValue.build(); + onChanged(); + } else { + partitionEndRecordBuilder_.setMessage(builderForValue.build()); + } + recordCase_ = 4; + return this; + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + */ + public Builder mergePartitionEndRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord value) { + if (partitionEndRecordBuilder_ == null) { + if (recordCase_ == 4 + && record_ + != com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord + .getDefaultInstance()) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.newBuilder( + (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_) + .mergeFrom(value) + .buildPartial(); + } else { + record_ = value; + } + onChanged(); + } else { + if (recordCase_ == 4) { + partitionEndRecordBuilder_.mergeFrom(value); + } else { + partitionEndRecordBuilder_.setMessage(value); + } + } + recordCase_ = 4; + return this; + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + */ + public Builder clearPartitionEndRecord() { + if (partitionEndRecordBuilder_ == null) { + if (recordCase_ == 4) { + recordCase_ = 0; + record_ = null; + onChanged(); + } + } else { + if (recordCase_ == 4) { + recordCase_ = 0; + record_ = null; + } + partitionEndRecordBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.Builder + getPartitionEndRecordBuilder() { + return internalGetPartitionEndRecordFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecordOrBuilder + getPartitionEndRecordOrBuilder() { + if ((recordCase_ == 4) && (partitionEndRecordBuilder_ != null)) { + return partitionEndRecordBuilder_.getMessageOrBuilder(); + } else { + if (recordCase_ == 4) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Partition end record describing a terminated change stream partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecordOrBuilder> + internalGetPartitionEndRecordFieldBuilder() { + if (partitionEndRecordBuilder_ == null) { + if (!(recordCase_ == 4)) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.getDefaultInstance(); + } + partitionEndRecordBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecordOrBuilder>( + (com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord) record_, + getParentForChildren(), + isClean()); + record_ = null; + } + recordCase_ = 4; + onChanged(); + return partitionEndRecordBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecordOrBuilder> + partitionEventRecordBuilder_; + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + * + * @return Whether the partitionEventRecord field is set. + */ + @java.lang.Override + public boolean hasPartitionEventRecord() { + return recordCase_ == 5; + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + * + * @return The partitionEventRecord. + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord getPartitionEventRecord() { + if (partitionEventRecordBuilder_ == null) { + if (recordCase_ == 5) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.getDefaultInstance(); + } else { + if (recordCase_ == 5) { + return partitionEventRecordBuilder_.getMessage(); + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + public Builder setPartitionEventRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord value) { + if (partitionEventRecordBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + record_ = value; + onChanged(); + } else { + partitionEventRecordBuilder_.setMessage(value); + } + recordCase_ = 5; + return this; + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + public Builder setPartitionEventRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.Builder builderForValue) { + if (partitionEventRecordBuilder_ == null) { + record_ = builderForValue.build(); + onChanged(); + } else { + partitionEventRecordBuilder_.setMessage(builderForValue.build()); + } + recordCase_ = 5; + return this; + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + public Builder mergePartitionEventRecord( + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord value) { + if (partitionEventRecordBuilder_ == null) { + if (recordCase_ == 5 + && record_ + != com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord + .getDefaultInstance()) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.newBuilder( + (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_) + .mergeFrom(value) + .buildPartial(); + } else { + record_ = value; + } + onChanged(); + } else { + if (recordCase_ == 5) { + partitionEventRecordBuilder_.mergeFrom(value); + } else { + partitionEventRecordBuilder_.setMessage(value); + } + } + recordCase_ = 5; + return this; + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + public Builder clearPartitionEventRecord() { + if (partitionEventRecordBuilder_ == null) { + if (recordCase_ == 5) { + recordCase_ = 0; + record_ = null; + onChanged(); + } + } else { + if (recordCase_ == 5) { + recordCase_ = 0; + record_ = null; + } + partitionEventRecordBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.Builder + getPartitionEventRecordBuilder() { + return internalGetPartitionEventRecordFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecordOrBuilder + getPartitionEventRecordOrBuilder() { + if ((recordCase_ == 5) && (partitionEventRecordBuilder_ != null)) { + return partitionEventRecordBuilder_.getMessageOrBuilder(); + } else { + if (recordCase_ == 5) { + return (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_; + } + return com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.getDefaultInstance(); + } + } + + /** + * + * + *
                                +     * Partition event record describing key range changes for a change stream
                                +     * partition.
                                +     * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecordOrBuilder> + internalGetPartitionEventRecordFieldBuilder() { + if (partitionEventRecordBuilder_ == null) { + if (!(recordCase_ == 5)) { + record_ = + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.getDefaultInstance(); + } + partitionEventRecordBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.Builder, + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecordOrBuilder>( + (com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord) record_, + getParentForChildren(), + isClean()); + record_ = null; + } + recordCase_ = 5; + onChanged(); + return partitionEventRecordBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.ChangeStreamRecord) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.ChangeStreamRecord) + private static final com.google.spanner.v1.ChangeStreamRecord DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.ChangeStreamRecord(); + } + + public static com.google.spanner.v1.ChangeStreamRecord getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ChangeStreamRecord parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.ChangeStreamRecord getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamRecordOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamRecordOrBuilder.java new file mode 100644 index 00000000000..7b72f8a5d94 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ChangeStreamRecordOrBuilder.java @@ -0,0 +1,230 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/change_stream.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface ChangeStreamRecordOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.ChangeStreamRecord) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * Data change record describing a data change for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + * + * @return Whether the dataChangeRecord field is set. + */ + boolean hasDataChangeRecord(); + + /** + * + * + *
                                +   * Data change record describing a data change for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + * + * @return The dataChangeRecord. + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecord getDataChangeRecord(); + + /** + * + * + *
                                +   * Data change record describing a data change for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.DataChangeRecord data_change_record = 1; + */ + com.google.spanner.v1.ChangeStreamRecord.DataChangeRecordOrBuilder getDataChangeRecordOrBuilder(); + + /** + * + * + *
                                +   * Heartbeat record describing a heartbeat for a change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + * + * @return Whether the heartbeatRecord field is set. + */ + boolean hasHeartbeatRecord(); + + /** + * + * + *
                                +   * Heartbeat record describing a heartbeat for a change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + * + * @return The heartbeatRecord. + */ + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecord getHeartbeatRecord(); + + /** + * + * + *
                                +   * Heartbeat record describing a heartbeat for a change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.HeartbeatRecord heartbeat_record = 2; + */ + com.google.spanner.v1.ChangeStreamRecord.HeartbeatRecordOrBuilder getHeartbeatRecordOrBuilder(); + + /** + * + * + *
                                +   * Partition start record describing a new change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + * + * @return Whether the partitionStartRecord field is set. + */ + boolean hasPartitionStartRecord(); + + /** + * + * + *
                                +   * Partition start record describing a new change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + * + * @return The partitionStartRecord. + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecord getPartitionStartRecord(); + + /** + * + * + *
                                +   * Partition start record describing a new change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionStartRecord partition_start_record = 3; + * + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionStartRecordOrBuilder + getPartitionStartRecordOrBuilder(); + + /** + * + * + *
                                +   * Partition end record describing a terminated change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + * @return Whether the partitionEndRecord field is set. + */ + boolean hasPartitionEndRecord(); + + /** + * + * + *
                                +   * Partition end record describing a terminated change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + * + * @return The partitionEndRecord. + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecord getPartitionEndRecord(); + + /** + * + * + *
                                +   * Partition end record describing a terminated change stream partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEndRecord partition_end_record = 4; + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEndRecordOrBuilder + getPartitionEndRecordOrBuilder(); + + /** + * + * + *
                                +   * Partition event record describing key range changes for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + * + * @return Whether the partitionEventRecord field is set. + */ + boolean hasPartitionEventRecord(); + + /** + * + * + *
                                +   * Partition event record describing key range changes for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + * + * @return The partitionEventRecord. + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecord getPartitionEventRecord(); + + /** + * + * + *
                                +   * Partition event record describing key range changes for a change stream
                                +   * partition.
                                +   * 
                                + * + * .google.spanner.v1.ChangeStreamRecord.PartitionEventRecord partition_event_record = 5; + * + */ + com.google.spanner.v1.ChangeStreamRecord.PartitionEventRecordOrBuilder + getPartitionEventRecordOrBuilder(); + + com.google.spanner.v1.ChangeStreamRecord.RecordCase getRecordCase(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java index d026425bfbb..5fc62e537c6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.CommitRequest} */ -public final class CommitRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CommitRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.CommitRequest) CommitRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CommitRequest"); + } + // Use CommitRequest.newBuilder() to construct. - private CommitRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CommitRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private CommitRequest() { mutations_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CommitRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CommitRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CommitRequest_fieldAccessorTable @@ -82,6 +89,7 @@ public enum TransactionCase private TransactionCase(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 +126,7 @@ public TransactionCase getTransactionCase() { @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -143,6 +152,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -170,6 +180,7 @@ public com.google.protobuf.ByteString getSessionBytes() { } public static final int TRANSACTION_ID_FIELD_NUMBER = 2; + /** * * @@ -185,6 +196,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public boolean hasTransactionId() { return transactionCase_ == 2; } + /** * * @@ -205,6 +217,7 @@ public com.google.protobuf.ByteString getTransactionId() { } public static final int SINGLE_USE_TRANSACTION_FIELD_NUMBER = 3; + /** * * @@ -214,7 +227,7 @@ public com.google.protobuf.ByteString getTransactionId() { * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -228,6 +241,7 @@ public com.google.protobuf.ByteString getTransactionId() { public boolean hasSingleUseTransaction() { return transactionCase_ == 3; } + /** * * @@ -237,7 +251,7 @@ public boolean hasSingleUseTransaction() { * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -254,6 +268,7 @@ public com.google.spanner.v1.TransactionOptions getSingleUseTransaction() { } return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } + /** * * @@ -263,7 +278,7 @@ public com.google.spanner.v1.TransactionOptions getSingleUseTransaction() { * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -283,6 +298,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseTransaction @SuppressWarnings("serial") private java.util.List mutations_; + /** * * @@ -298,6 +314,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseTransaction public java.util.List getMutationsList() { return mutations_; } + /** * * @@ -314,6 +331,7 @@ public java.util.List getMutationsList() { getMutationsOrBuilderList() { return mutations_; } + /** * * @@ -329,6 +347,7 @@ public java.util.List getMutationsList() { public int getMutationsCount() { return mutations_.size(); } + /** * * @@ -344,6 +363,7 @@ public int getMutationsCount() { public com.google.spanner.v1.Mutation getMutations(int index) { return mutations_.get(index); } + /** * * @@ -362,11 +382,12 @@ public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) public static final int RETURN_COMMIT_STATS_FIELD_NUMBER = 5; private boolean returnCommitStats_ = false; + /** * * *
                                -   * If `true`, then statistics related to the transaction will be included in
                                +   * If `true`, then statistics related to the transaction is included in
                                    * the [CommitResponse][google.spanner.v1.CommitResponse.commit_stats].
                                    * Default value is `false`.
                                    * 
                                @@ -382,15 +403,16 @@ public boolean getReturnCommitStats() { public static final int MAX_COMMIT_DELAY_FIELD_NUMBER = 8; private com.google.protobuf.Duration maxCommitDelay_; + /** * * *
                                -   * Optional. The amount of latency this request is willing to incur in order
                                -   * to improve throughput. If this field is not set, Spanner assumes requests
                                -   * are relatively latency sensitive and automatically determines an
                                -   * appropriate delay time. You can specify a batching delay value between 0
                                -   * and 500 ms.
                                +   * Optional. The amount of latency this request is configured to incur in
                                +   * order to improve throughput. If this field isn't set, Spanner assumes
                                +   * requests are relatively latency sensitive and automatically determines an
                                +   * appropriate delay time. You can specify a commit delay value between 0 and
                                +   * 500 ms.
                                    * 
                                * * .google.protobuf.Duration max_commit_delay = 8 [(.google.api.field_behavior) = OPTIONAL]; @@ -402,15 +424,16 @@ public boolean getReturnCommitStats() { public boolean hasMaxCommitDelay() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -   * Optional. The amount of latency this request is willing to incur in order
                                -   * to improve throughput. If this field is not set, Spanner assumes requests
                                -   * are relatively latency sensitive and automatically determines an
                                -   * appropriate delay time. You can specify a batching delay value between 0
                                -   * and 500 ms.
                                +   * Optional. The amount of latency this request is configured to incur in
                                +   * order to improve throughput. If this field isn't set, Spanner assumes
                                +   * requests are relatively latency sensitive and automatically determines an
                                +   * appropriate delay time. You can specify a commit delay value between 0 and
                                +   * 500 ms.
                                    * 
                                * * .google.protobuf.Duration max_commit_delay = 8 [(.google.api.field_behavior) = OPTIONAL]; @@ -424,15 +447,16 @@ public com.google.protobuf.Duration getMaxCommitDelay() { ? com.google.protobuf.Duration.getDefaultInstance() : maxCommitDelay_; } + /** * * *
                                -   * Optional. The amount of latency this request is willing to incur in order
                                -   * to improve throughput. If this field is not set, Spanner assumes requests
                                -   * are relatively latency sensitive and automatically determines an
                                -   * appropriate delay time. You can specify a batching delay value between 0
                                -   * and 500 ms.
                                +   * Optional. The amount of latency this request is configured to incur in
                                +   * order to improve throughput. If this field isn't set, Spanner assumes
                                +   * requests are relatively latency sensitive and automatically determines an
                                +   * appropriate delay time. You can specify a commit delay value between 0 and
                                +   * 500 ms.
                                    * 
                                * * .google.protobuf.Duration max_commit_delay = 8 [(.google.api.field_behavior) = OPTIONAL]; @@ -447,6 +471,7 @@ public com.google.protobuf.DurationOrBuilder getMaxCommitDelayOrBuilder() { public static final int REQUEST_OPTIONS_FIELD_NUMBER = 6; private com.google.spanner.v1.RequestOptions requestOptions_; + /** * * @@ -462,6 +487,7 @@ public com.google.protobuf.DurationOrBuilder getMaxCommitDelayOrBuilder() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -479,6 +505,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { ? com.google.spanner.v1.RequestOptions.getDefaultInstance() : requestOptions_; } + /** * * @@ -497,16 +524,15 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public static final int PRECOMMIT_TOKEN_FIELD_NUMBER = 9; private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; + /** * * *
                                    * Optional. If the read-write transaction was executed on a multiplexed
                                -   * session, the precommit token with the highest sequence number received in
                                -   * this transaction attempt, should be included here. Failing to do so will
                                -   * result in a FailedPrecondition error.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * session, then you must include the precommit token with the highest
                                +   * sequence number received in this transaction attempt. Failing to do so
                                +   * results in a `FailedPrecondition` error.
                                    * 
                                * * @@ -519,16 +545,15 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                    * Optional. If the read-write transaction was executed on a multiplexed
                                -   * session, the precommit token with the highest sequence number received in
                                -   * this transaction attempt, should be included here. Failing to do so will
                                -   * result in a FailedPrecondition error.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * session, then you must include the precommit token with the highest
                                +   * sequence number received in this transaction attempt. Failing to do so
                                +   * results in a `FailedPrecondition` error.
                                    * 
                                * * @@ -543,16 +568,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( ? com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance() : precommitToken_; } + /** * * *
                                    * Optional. If the read-write transaction was executed on a multiplexed
                                -   * session, the precommit token with the highest sequence number received in
                                -   * this transaction attempt, should be included here. Failing to do so will
                                -   * result in a FailedPrecondition error.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * session, then you must include the precommit token with the highest
                                +   * sequence number received in this transaction attempt. Failing to do so
                                +   * results in a `FailedPrecondition` error.
                                    * 
                                * * @@ -567,6 +591,80 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( : precommitToken_; } + public static final int ROUTING_HINT_FIELD_NUMBER = 10; + private com.google.spanner.v1.RoutingHint routingHint_; + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + @java.lang.Override + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHint getRoutingHint() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -581,8 +679,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (transactionCase_ == 2) { output.writeBytes(2, (com.google.protobuf.ByteString) transaction_); @@ -605,6 +703,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(9, getPrecommitToken()); } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(10, getRoutingHint()); + } getUnknownFields().writeTo(output); } @@ -614,8 +715,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (transactionCase_ == 2) { size += @@ -642,6 +743,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, getPrecommitToken()); } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, getRoutingHint()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -672,6 +776,10 @@ public boolean equals(final java.lang.Object obj) { if (hasPrecommitToken()) { if (!getPrecommitToken().equals(other.getPrecommitToken())) return false; } + if (hasRoutingHint() != other.hasRoutingHint()) return false; + if (hasRoutingHint()) { + if (!getRoutingHint().equals(other.getRoutingHint())) return false; + } if (!getTransactionCase().equals(other.getTransactionCase())) return false; switch (transactionCase_) { case 2: @@ -714,6 +822,10 @@ public int hashCode() { hash = (37 * hash) + PRECOMMIT_TOKEN_FIELD_NUMBER; hash = (53 * hash) + getPrecommitToken().hashCode(); } + if (hasRoutingHint()) { + hash = (37 * hash) + ROUTING_HINT_FIELD_NUMBER; + hash = (53 * hash) + getRoutingHint().hashCode(); + } switch (transactionCase_) { case 2: hash = (37 * hash) + TRANSACTION_ID_FIELD_NUMBER; @@ -767,38 +879,38 @@ public static com.google.spanner.v1.CommitRequest parseFrom( public static com.google.spanner.v1.CommitRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CommitRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CommitRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -821,10 +933,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -834,7 +947,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.CommitRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.CommitRequest) com.google.spanner.v1.CommitRequestOrBuilder { @@ -844,7 +957,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CommitRequest_fieldAccessorTable @@ -858,17 +971,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getMutationsFieldBuilder(); - getMaxCommitDelayFieldBuilder(); - getRequestOptionsFieldBuilder(); - getPrecommitTokenFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMutationsFieldBuilder(); + internalGetMaxCommitDelayFieldBuilder(); + internalGetRequestOptionsFieldBuilder(); + internalGetPrecommitTokenFieldBuilder(); + internalGetRoutingHintFieldBuilder(); } } @@ -903,6 +1017,11 @@ public Builder clear() { precommitTokenBuilder_.dispose(); precommitTokenBuilder_ = null; } + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } transactionCase_ = 0; transaction_ = null; return this; @@ -976,6 +1095,11 @@ private void buildPartial0(com.google.spanner.v1.CommitRequest result) { precommitTokenBuilder_ == null ? precommitToken_ : precommitTokenBuilder_.build(); to_bitField0_ |= 0x00000004; } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.routingHint_ = + routingHintBuilder_ == null ? routingHint_ : routingHintBuilder_.build(); + to_bitField0_ |= 0x00000008; + } result.bitField0_ |= to_bitField0_; } @@ -987,39 +1111,6 @@ private void buildPartialOneofs(com.google.spanner.v1.CommitRequest result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.CommitRequest) { @@ -1056,8 +1147,8 @@ public Builder mergeFrom(com.google.spanner.v1.CommitRequest other) { mutations_ = other.mutations_; bitField0_ = (bitField0_ & ~0x00000008); mutationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getMutationsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMutationsFieldBuilder() : null; } else { mutationsBuilder_.addAllMessages(other.mutations_); @@ -1076,6 +1167,9 @@ public Builder mergeFrom(com.google.spanner.v1.CommitRequest other) { if (other.hasPrecommitToken()) { mergePrecommitToken(other.getPrecommitToken()); } + if (other.hasRoutingHint()) { + mergeRoutingHint(other.getRoutingHint()); + } switch (other.getTransactionCase()) { case TRANSACTION_ID: { @@ -1133,7 +1227,7 @@ public Builder mergeFrom( case 26: { input.readMessage( - getSingleUseTransactionFieldBuilder().getBuilder(), extensionRegistry); + internalGetSingleUseTransactionFieldBuilder().getBuilder(), extensionRegistry); transactionCase_ = 3; break; } // case 26 @@ -1157,22 +1251,32 @@ public Builder mergeFrom( } // case 40 case 50: { - input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000040; break; } // case 50 case 66: { - input.readMessage(getMaxCommitDelayFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMaxCommitDelayFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 66 case 74: { - input.readMessage(getPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000080; break; } // case 74 + case 82: + { + input.readMessage( + internalGetRoutingHintFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000100; + break; + } // case 82 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1207,6 +1311,7 @@ public Builder clearTransaction() { private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -1231,6 +1336,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -1255,6 +1361,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1278,6 +1385,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1297,6 +1405,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -1336,6 +1445,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasTransactionId() { return transactionCase_ == 2; } + /** * * @@ -1353,6 +1463,7 @@ public com.google.protobuf.ByteString getTransactionId() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -1374,6 +1485,7 @@ public Builder setTransactionId(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1394,11 +1506,12 @@ public Builder clearTransactionId() { return this; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> singleUseTransactionBuilder_; + /** * * @@ -1408,7 +1521,7 @@ public Builder clearTransactionId() { * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1422,6 +1535,7 @@ public Builder clearTransactionId() { public boolean hasSingleUseTransaction() { return transactionCase_ == 3; } + /** * * @@ -1431,7 +1545,7 @@ public boolean hasSingleUseTransaction() { * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1455,6 +1569,7 @@ public com.google.spanner.v1.TransactionOptions getSingleUseTransaction() { return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1464,7 +1579,7 @@ public com.google.spanner.v1.TransactionOptions getSingleUseTransaction() { * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1485,6 +1600,7 @@ public Builder setSingleUseTransaction(com.google.spanner.v1.TransactionOptions transactionCase_ = 3; return this; } + /** * * @@ -1494,7 +1610,7 @@ public Builder setSingleUseTransaction(com.google.spanner.v1.TransactionOptions * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1513,6 +1629,7 @@ public Builder setSingleUseTransaction( transactionCase_ = 3; return this; } + /** * * @@ -1522,7 +1639,7 @@ public Builder setSingleUseTransaction( * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1553,6 +1670,7 @@ public Builder mergeSingleUseTransaction(com.google.spanner.v1.TransactionOption transactionCase_ = 3; return this; } + /** * * @@ -1562,7 +1680,7 @@ public Builder mergeSingleUseTransaction(com.google.spanner.v1.TransactionOption * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1586,6 +1704,7 @@ public Builder clearSingleUseTransaction() { } return this; } + /** * * @@ -1595,7 +1714,7 @@ public Builder clearSingleUseTransaction() { * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1604,8 +1723,9 @@ public Builder clearSingleUseTransaction() { * .google.spanner.v1.TransactionOptions single_use_transaction = 3; */ public com.google.spanner.v1.TransactionOptions.Builder getSingleUseTransactionBuilder() { - return getSingleUseTransactionFieldBuilder().getBuilder(); + return internalGetSingleUseTransactionFieldBuilder().getBuilder(); } + /** * * @@ -1615,7 +1735,7 @@ public com.google.spanner.v1.TransactionOptions.Builder getSingleUseTransactionB * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1634,6 +1754,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseTransaction return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1643,7 +1764,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseTransaction * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1651,17 +1772,17 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseTransaction * * .google.spanner.v1.TransactionOptions single_use_transaction = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> - getSingleUseTransactionFieldBuilder() { + internalGetSingleUseTransactionFieldBuilder() { if (singleUseTransactionBuilder_ == null) { if (!(transactionCase_ == 3)) { transaction_ = com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } singleUseTransactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder>( @@ -1685,7 +1806,7 @@ private void ensureMutationsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder> @@ -1709,6 +1830,7 @@ public java.util.List getMutationsList() { return mutationsBuilder_.getMessageList(); } } + /** * * @@ -1727,6 +1849,7 @@ public int getMutationsCount() { return mutationsBuilder_.getCount(); } } + /** * * @@ -1745,6 +1868,7 @@ public com.google.spanner.v1.Mutation getMutations(int index) { return mutationsBuilder_.getMessage(index); } } + /** * * @@ -1769,6 +1893,7 @@ public Builder setMutations(int index, com.google.spanner.v1.Mutation value) { } return this; } + /** * * @@ -1790,6 +1915,7 @@ public Builder setMutations(int index, com.google.spanner.v1.Mutation.Builder bu } return this; } + /** * * @@ -1814,6 +1940,7 @@ public Builder addMutations(com.google.spanner.v1.Mutation value) { } return this; } + /** * * @@ -1838,6 +1965,7 @@ public Builder addMutations(int index, com.google.spanner.v1.Mutation value) { } return this; } + /** * * @@ -1859,6 +1987,7 @@ public Builder addMutations(com.google.spanner.v1.Mutation.Builder builderForVal } return this; } + /** * * @@ -1880,6 +2009,7 @@ public Builder addMutations(int index, com.google.spanner.v1.Mutation.Builder bu } return this; } + /** * * @@ -1902,6 +2032,7 @@ public Builder addAllMutations( } return this; } + /** * * @@ -1923,6 +2054,7 @@ public Builder clearMutations() { } return this; } + /** * * @@ -1944,6 +2076,7 @@ public Builder removeMutations(int index) { } return this; } + /** * * @@ -1956,8 +2089,9 @@ public Builder removeMutations(int index) { * repeated .google.spanner.v1.Mutation mutations = 4; */ public com.google.spanner.v1.Mutation.Builder getMutationsBuilder(int index) { - return getMutationsFieldBuilder().getBuilder(index); + return internalGetMutationsFieldBuilder().getBuilder(index); } + /** * * @@ -1976,6 +2110,7 @@ public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) return mutationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1995,6 +2130,7 @@ public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) return java.util.Collections.unmodifiableList(mutations_); } } + /** * * @@ -2007,9 +2143,10 @@ public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) * repeated .google.spanner.v1.Mutation mutations = 4; */ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder() { - return getMutationsFieldBuilder() + return internalGetMutationsFieldBuilder() .addBuilder(com.google.spanner.v1.Mutation.getDefaultInstance()); } + /** * * @@ -2022,9 +2159,10 @@ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder() { * repeated .google.spanner.v1.Mutation mutations = 4; */ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder(int index) { - return getMutationsFieldBuilder() + return internalGetMutationsFieldBuilder() .addBuilder(index, com.google.spanner.v1.Mutation.getDefaultInstance()); } + /** * * @@ -2037,17 +2175,17 @@ public com.google.spanner.v1.Mutation.Builder addMutationsBuilder(int index) { * repeated .google.spanner.v1.Mutation mutations = 4; */ public java.util.List getMutationsBuilderList() { - return getMutationsFieldBuilder().getBuilderList(); + return internalGetMutationsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder> - getMutationsFieldBuilder() { + internalGetMutationsFieldBuilder() { if (mutationsBuilder_ == null) { mutationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Mutation, com.google.spanner.v1.Mutation.Builder, com.google.spanner.v1.MutationOrBuilder>( @@ -2058,11 +2196,12 @@ public java.util.List getMutationsBuilde } private boolean returnCommitStats_; + /** * * *
                                -     * If `true`, then statistics related to the transaction will be included in
                                +     * If `true`, then statistics related to the transaction is included in
                                      * the [CommitResponse][google.spanner.v1.CommitResponse.commit_stats].
                                      * Default value is `false`.
                                      * 
                                @@ -2075,11 +2214,12 @@ public java.util.List getMutationsBuilde public boolean getReturnCommitStats() { return returnCommitStats_; } + /** * * *
                                -     * If `true`, then statistics related to the transaction will be included in
                                +     * If `true`, then statistics related to the transaction is included in
                                      * the [CommitResponse][google.spanner.v1.CommitResponse.commit_stats].
                                      * Default value is `false`.
                                      * 
                                @@ -2096,11 +2236,12 @@ public Builder setReturnCommitStats(boolean value) { onChanged(); return this; } + /** * * *
                                -     * If `true`, then statistics related to the transaction will be included in
                                +     * If `true`, then statistics related to the transaction is included in
                                      * the [CommitResponse][google.spanner.v1.CommitResponse.commit_stats].
                                      * Default value is `false`.
                                      * 
                                @@ -2117,20 +2258,21 @@ public Builder clearReturnCommitStats() { } private com.google.protobuf.Duration maxCommitDelay_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> maxCommitDelayBuilder_; + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2142,15 +2284,16 @@ public Builder clearReturnCommitStats() { public boolean hasMaxCommitDelay() { return ((bitField0_ & 0x00000020) != 0); } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2168,15 +2311,16 @@ public com.google.protobuf.Duration getMaxCommitDelay() { return maxCommitDelayBuilder_.getMessage(); } } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2196,15 +2340,16 @@ public Builder setMaxCommitDelay(com.google.protobuf.Duration value) { onChanged(); return this; } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2221,15 +2366,16 @@ public Builder setMaxCommitDelay(com.google.protobuf.Duration.Builder builderFor onChanged(); return this; } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2254,15 +2400,16 @@ public Builder mergeMaxCommitDelay(com.google.protobuf.Duration value) { } return this; } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2279,15 +2426,16 @@ public Builder clearMaxCommitDelay() { onChanged(); return this; } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2297,17 +2445,18 @@ public Builder clearMaxCommitDelay() { public com.google.protobuf.Duration.Builder getMaxCommitDelayBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getMaxCommitDelayFieldBuilder().getBuilder(); + return internalGetMaxCommitDelayFieldBuilder().getBuilder(); } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * @@ -2323,29 +2472,30 @@ public com.google.protobuf.DurationOrBuilder getMaxCommitDelayOrBuilder() { : maxCommitDelay_; } } + /** * * *
                                -     * Optional. The amount of latency this request is willing to incur in order
                                -     * to improve throughput. If this field is not set, Spanner assumes requests
                                -     * are relatively latency sensitive and automatically determines an
                                -     * appropriate delay time. You can specify a batching delay value between 0
                                -     * and 500 ms.
                                +     * Optional. The amount of latency this request is configured to incur in
                                +     * order to improve throughput. If this field isn't set, Spanner assumes
                                +     * requests are relatively latency sensitive and automatically determines an
                                +     * appropriate delay time. You can specify a commit delay value between 0 and
                                +     * 500 ms.
                                      * 
                                * * * .google.protobuf.Duration max_commit_delay = 8 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> - getMaxCommitDelayFieldBuilder() { + internalGetMaxCommitDelayFieldBuilder() { if (maxCommitDelayBuilder_ == null) { maxCommitDelayBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>( @@ -2356,11 +2506,12 @@ public com.google.protobuf.DurationOrBuilder getMaxCommitDelayOrBuilder() { } private com.google.spanner.v1.RequestOptions requestOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> requestOptionsBuilder_; + /** * * @@ -2375,6 +2526,7 @@ public com.google.protobuf.DurationOrBuilder getMaxCommitDelayOrBuilder() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -2395,6 +2547,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { return requestOptionsBuilder_.getMessage(); } } + /** * * @@ -2417,6 +2570,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { onChanged(); return this; } + /** * * @@ -2436,6 +2590,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder bu onChanged(); return this; } + /** * * @@ -2463,6 +2618,7 @@ public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { } return this; } + /** * * @@ -2482,6 +2638,7 @@ public Builder clearRequestOptions() { onChanged(); return this; } + /** * * @@ -2494,8 +2651,9 @@ public Builder clearRequestOptions() { public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { bitField0_ |= 0x00000040; onChanged(); - return getRequestOptionsFieldBuilder().getBuilder(); + return internalGetRequestOptionsFieldBuilder().getBuilder(); } + /** * * @@ -2514,6 +2672,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } } + /** * * @@ -2523,14 +2682,14 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( * * .google.spanner.v1.RequestOptions request_options = 6; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> - getRequestOptionsFieldBuilder() { + internalGetRequestOptionsFieldBuilder() { if (requestOptionsBuilder_ == null) { requestOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder>( @@ -2541,21 +2700,20 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( } private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> precommitTokenBuilder_; + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2567,16 +2725,15 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000080) != 0); } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2594,16 +2751,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( return precommitTokenBuilder_.getMessage(); } } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2623,16 +2779,15 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm onChanged(); return this; } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2650,16 +2805,15 @@ public Builder setPrecommitToken( onChanged(); return this; } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2686,16 +2840,15 @@ public Builder mergePrecommitToken( } return this; } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2712,16 +2865,15 @@ public Builder clearPrecommitToken() { onChanged(); return this; } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2732,18 +2884,17 @@ public Builder clearPrecommitToken() { getPrecommitTokenBuilder() { bitField0_ |= 0x00000080; onChanged(); - return getPrecommitTokenFieldBuilder().getBuilder(); + return internalGetPrecommitTokenFieldBuilder().getBuilder(); } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * @@ -2760,30 +2911,29 @@ public Builder clearPrecommitToken() { : precommitToken_; } } + /** * * *
                                      * Optional. If the read-write transaction was executed on a multiplexed
                                -     * session, the precommit token with the highest sequence number received in
                                -     * this transaction attempt, should be included here. Failing to do so will
                                -     * result in a FailedPrecondition error.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                +     * session, then you must include the precommit token with the highest
                                +     * sequence number received in this transaction attempt. Failing to do so
                                +     * results in a `FailedPrecondition` error.
                                      * 
                                * * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 9 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> - getPrecommitTokenFieldBuilder() { + internalGetPrecommitTokenFieldBuilder() { if (precommitTokenBuilder_ == null) { precommitTokenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder>( @@ -2793,15 +2943,261 @@ public Builder clearPrecommitToken() { return precommitTokenBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.RoutingHint routingHint_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + routingHintBuilder_; + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00000100) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + public com.google.spanner.v1.RoutingHint getRoutingHint() { + if (routingHintBuilder_ == null) { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } else { + return routingHintBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + routingHint_ = value; + } else { + routingHintBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint.Builder builderForValue) { + if (routingHintBuilder_ == null) { + routingHint_ = builderForValue.build(); + } else { + routingHintBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0) + && routingHint_ != null + && routingHint_ != com.google.spanner.v1.RoutingHint.getDefaultInstance()) { + getRoutingHintBuilder().mergeFrom(value); + } else { + routingHint_ = value; + } + } else { + routingHintBuilder_.mergeFrom(value); + } + if (routingHint_ != null) { + bitField0_ |= 0x00000100; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearRoutingHint() { + bitField0_ = (bitField0_ & ~0x00000100); + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHint.Builder getRoutingHintBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return internalGetRoutingHintFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + if (routingHintBuilder_ != null) { + return routingHintBuilder_.getMessageOrBuilder(); + } else { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + internalGetRoutingHintFieldBuilder() { + if (routingHintBuilder_ == null) { + routingHintBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder>( + getRoutingHint(), getParentForChildren(), isClean()); + routingHint_ = null; + } + return routingHintBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.CommitRequest) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java index 3a9703e11c0..e38948d301f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface CommitRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.CommitRequest) @@ -38,6 +40,7 @@ public interface CommitRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -65,6 +68,7 @@ public interface CommitRequestOrBuilder * @return Whether the transactionId field is set. */ boolean hasTransactionId(); + /** * * @@ -87,7 +91,7 @@ public interface CommitRequestOrBuilder * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -98,6 +102,7 @@ public interface CommitRequestOrBuilder * @return Whether the singleUseTransaction field is set. */ boolean hasSingleUseTransaction(); + /** * * @@ -107,7 +112,7 @@ public interface CommitRequestOrBuilder * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -118,6 +123,7 @@ public interface CommitRequestOrBuilder * @return The singleUseTransaction. */ com.google.spanner.v1.TransactionOptions getSingleUseTransaction(); + /** * * @@ -127,7 +133,7 @@ public interface CommitRequestOrBuilder * temporary transaction is non-idempotent. That is, if the * `CommitRequest` is sent to Cloud Spanner more than once (for * instance, due to retries in the application, or in the - * transport library), it is possible that the mutations are + * transport library), it's possible that the mutations are * executed more than once. If this is undesirable, use * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and * [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -149,6 +155,7 @@ public interface CommitRequestOrBuilder * repeated .google.spanner.v1.Mutation mutations = 4; */ java.util.List getMutationsList(); + /** * * @@ -161,6 +168,7 @@ public interface CommitRequestOrBuilder * repeated .google.spanner.v1.Mutation mutations = 4; */ com.google.spanner.v1.Mutation getMutations(int index); + /** * * @@ -173,6 +181,7 @@ public interface CommitRequestOrBuilder * repeated .google.spanner.v1.Mutation mutations = 4; */ int getMutationsCount(); + /** * * @@ -185,6 +194,7 @@ public interface CommitRequestOrBuilder * repeated .google.spanner.v1.Mutation mutations = 4; */ java.util.List getMutationsOrBuilderList(); + /** * * @@ -202,7 +212,7 @@ public interface CommitRequestOrBuilder * * *
                                -   * If `true`, then statistics related to the transaction will be included in
                                +   * If `true`, then statistics related to the transaction is included in
                                    * the [CommitResponse][google.spanner.v1.CommitResponse.commit_stats].
                                    * Default value is `false`.
                                    * 
                                @@ -217,11 +227,11 @@ public interface CommitRequestOrBuilder * * *
                                -   * Optional. The amount of latency this request is willing to incur in order
                                -   * to improve throughput. If this field is not set, Spanner assumes requests
                                -   * are relatively latency sensitive and automatically determines an
                                -   * appropriate delay time. You can specify a batching delay value between 0
                                -   * and 500 ms.
                                +   * Optional. The amount of latency this request is configured to incur in
                                +   * order to improve throughput. If this field isn't set, Spanner assumes
                                +   * requests are relatively latency sensitive and automatically determines an
                                +   * appropriate delay time. You can specify a commit delay value between 0 and
                                +   * 500 ms.
                                    * 
                                * * .google.protobuf.Duration max_commit_delay = 8 [(.google.api.field_behavior) = OPTIONAL]; @@ -230,15 +240,16 @@ public interface CommitRequestOrBuilder * @return Whether the maxCommitDelay field is set. */ boolean hasMaxCommitDelay(); + /** * * *
                                -   * Optional. The amount of latency this request is willing to incur in order
                                -   * to improve throughput. If this field is not set, Spanner assumes requests
                                -   * are relatively latency sensitive and automatically determines an
                                -   * appropriate delay time. You can specify a batching delay value between 0
                                -   * and 500 ms.
                                +   * Optional. The amount of latency this request is configured to incur in
                                +   * order to improve throughput. If this field isn't set, Spanner assumes
                                +   * requests are relatively latency sensitive and automatically determines an
                                +   * appropriate delay time. You can specify a commit delay value between 0 and
                                +   * 500 ms.
                                    * 
                                * * .google.protobuf.Duration max_commit_delay = 8 [(.google.api.field_behavior) = OPTIONAL]; @@ -247,15 +258,16 @@ public interface CommitRequestOrBuilder * @return The maxCommitDelay. */ com.google.protobuf.Duration getMaxCommitDelay(); + /** * * *
                                -   * Optional. The amount of latency this request is willing to incur in order
                                -   * to improve throughput. If this field is not set, Spanner assumes requests
                                -   * are relatively latency sensitive and automatically determines an
                                -   * appropriate delay time. You can specify a batching delay value between 0
                                -   * and 500 ms.
                                +   * Optional. The amount of latency this request is configured to incur in
                                +   * order to improve throughput. If this field isn't set, Spanner assumes
                                +   * requests are relatively latency sensitive and automatically determines an
                                +   * appropriate delay time. You can specify a commit delay value between 0 and
                                +   * 500 ms.
                                    * 
                                * * .google.protobuf.Duration max_commit_delay = 8 [(.google.api.field_behavior) = OPTIONAL]; @@ -275,6 +287,7 @@ public interface CommitRequestOrBuilder * @return Whether the requestOptions field is set. */ boolean hasRequestOptions(); + /** * * @@ -287,6 +300,7 @@ public interface CommitRequestOrBuilder * @return The requestOptions. */ com.google.spanner.v1.RequestOptions getRequestOptions(); + /** * * @@ -303,11 +317,9 @@ public interface CommitRequestOrBuilder * *
                                    * Optional. If the read-write transaction was executed on a multiplexed
                                -   * session, the precommit token with the highest sequence number received in
                                -   * this transaction attempt, should be included here. Failing to do so will
                                -   * result in a FailedPrecondition error.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * session, then you must include the precommit token with the highest
                                +   * sequence number received in this transaction attempt. Failing to do so
                                +   * results in a `FailedPrecondition` error.
                                    * 
                                * * @@ -317,16 +329,15 @@ public interface CommitRequestOrBuilder * @return Whether the precommitToken field is set. */ boolean hasPrecommitToken(); + /** * * *
                                    * Optional. If the read-write transaction was executed on a multiplexed
                                -   * session, the precommit token with the highest sequence number received in
                                -   * this transaction attempt, should be included here. Failing to do so will
                                -   * result in a FailedPrecondition error.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * session, then you must include the precommit token with the highest
                                +   * sequence number received in this transaction attempt. Failing to do so
                                +   * results in a `FailedPrecondition` error.
                                    * 
                                * * @@ -336,16 +347,15 @@ public interface CommitRequestOrBuilder * @return The precommitToken. */ com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken(); + /** * * *
                                    * Optional. If the read-write transaction was executed on a multiplexed
                                -   * session, the precommit token with the highest sequence number received in
                                -   * this transaction attempt, should be included here. Failing to do so will
                                -   * result in a FailedPrecondition error.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                +   * session, then you must include the precommit token with the highest
                                +   * sequence number received in this transaction attempt. Failing to do so
                                +   * results in a `FailedPrecondition` error.
                                    * 
                                * * @@ -354,5 +364,63 @@ public interface CommitRequestOrBuilder */ com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder getPrecommitTokenOrBuilder(); + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + boolean hasRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + com.google.spanner.v1.RoutingHint getRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder(); + com.google.spanner.v1.CommitRequest.TransactionCase getTransactionCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java index af19b73626d..6819b485f96 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/commit_response.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,31 +29,37 @@ * * Protobuf type {@code google.spanner.v1.CommitResponse} */ -public final class CommitResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CommitResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.CommitResponse) CommitResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CommitResponse"); + } + // Use CommitResponse.newBuilder() to construct. - private CommitResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CommitResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private CommitResponse() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CommitResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_fieldAccessorTable @@ -85,6 +92,7 @@ public interface CommitStatsOrBuilder */ long getMutationCount(); } + /** * * @@ -94,31 +102,36 @@ public interface CommitStatsOrBuilder * * Protobuf type {@code google.spanner.v1.CommitResponse.CommitStats} */ - public static final class CommitStats extends com.google.protobuf.GeneratedMessageV3 + public static final class CommitStats extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.CommitResponse.CommitStats) CommitStatsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CommitStats"); + } + // Use CommitStats.newBuilder() to construct. - private CommitStats(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CommitStats(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private CommitStats() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CommitStats(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_CommitStats_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_CommitStats_fieldAccessorTable @@ -129,6 +142,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int MUTATION_COUNT_FIELD_NUMBER = 1; private long mutationCount_ = 0L; + /** * * @@ -252,38 +266,38 @@ public static com.google.spanner.v1.CommitResponse.CommitStats parseFrom( public static com.google.spanner.v1.CommitResponse.CommitStats parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitResponse.CommitStats parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CommitResponse.CommitStats parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitResponse.CommitStats parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CommitResponse.CommitStats parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitResponse.CommitStats parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -306,11 +320,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -320,8 +334,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.CommitResponse.CommitStats} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.CommitResponse.CommitStats) com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder { @@ -331,7 +344,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_CommitStats_fieldAccessorTable @@ -343,7 +356,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.CommitResponse.CommitStats.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -393,41 +406,6 @@ private void buildPartial0(com.google.spanner.v1.CommitResponse.CommitStats resu } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.CommitResponse.CommitStats) { @@ -496,6 +474,7 @@ public Builder mergeFrom( private int bitField0_; private long mutationCount_; + /** * * @@ -517,6 +496,7 @@ public Builder mergeFrom( public long getMutationCount() { return mutationCount_; } + /** * * @@ -542,6 +522,7 @@ public Builder setMutationCount(long value) { onChanged(); return this; } + /** * * @@ -566,18 +547,6 @@ public Builder clearMutationCount() { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.CommitResponse.CommitStats) } @@ -647,6 +616,7 @@ public enum MultiplexedSessionRetryCase private MultiplexedSessionRetryCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -679,6 +649,7 @@ public MultiplexedSessionRetryCase getMultiplexedSessionRetryCase() { public static final int COMMIT_TIMESTAMP_FIELD_NUMBER = 1; private com.google.protobuf.Timestamp commitTimestamp_; + /** * * @@ -694,6 +665,7 @@ public MultiplexedSessionRetryCase getMultiplexedSessionRetryCase() { public boolean hasCommitTimestamp() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -711,6 +683,7 @@ public com.google.protobuf.Timestamp getCommitTimestamp() { ? com.google.protobuf.Timestamp.getDefaultInstance() : commitTimestamp_; } + /** * * @@ -729,11 +702,12 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { public static final int COMMIT_STATS_FIELD_NUMBER = 2; private com.google.spanner.v1.CommitResponse.CommitStats commitStats_; + /** * * *
                                -   * The statistics about this Commit. Not returned by default.
                                +   * The statistics about this `Commit`. Not returned by default.
                                    * For more information, see
                                    * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                    * 
                                @@ -746,11 +720,12 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { public boolean hasCommitStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -   * The statistics about this Commit. Not returned by default.
                                +   * The statistics about this `Commit`. Not returned by default.
                                    * For more information, see
                                    * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                    * 
                                @@ -765,11 +740,12 @@ public com.google.spanner.v1.CommitResponse.CommitStats getCommitStats() { ? com.google.spanner.v1.CommitResponse.CommitStats.getDefaultInstance() : commitStats_; } + /** * * *
                                -   * The statistics about this Commit. Not returned by default.
                                +   * The statistics about this `Commit`. Not returned by default.
                                    * For more information, see
                                    * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                    * 
                                @@ -784,12 +760,13 @@ public com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder getCommitStatsO } public static final int PRECOMMIT_TOKEN_FIELD_NUMBER = 4; + /** * * *
                                    * If specified, transaction has not committed yet.
                                -   * Clients must retry the commit with the new precommit token.
                                +   * You must retry the commit with the new precommit token.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -800,12 +777,13 @@ public com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder getCommitStatsO public boolean hasPrecommitToken() { return multiplexedSessionRetryCase_ == 4; } + /** * * *
                                    * If specified, transaction has not committed yet.
                                -   * Clients must retry the commit with the new precommit token.
                                +   * You must retry the commit with the new precommit token.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -819,12 +797,13 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( } return com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance(); } + /** * * *
                                    * If specified, transaction has not committed yet.
                                -   * Clients must retry the commit with the new precommit token.
                                +   * You must retry the commit with the new precommit token.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -838,6 +817,142 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( return com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance(); } + public static final int SNAPSHOT_TIMESTAMP_FIELD_NUMBER = 5; + private com.google.protobuf.Timestamp snapshotTimestamp_; + + /** + * + * + *
                                +   * If `TransactionOptions.isolation_level` is set to
                                +   * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +   * timestamp at which all reads in the transaction ran. This timestamp is
                                +   * never returned.
                                +   * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + * + * @return Whether the snapshotTimestamp field is set. + */ + @java.lang.Override + public boolean hasSnapshotTimestamp() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
                                +   * If `TransactionOptions.isolation_level` is set to
                                +   * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +   * timestamp at which all reads in the transaction ran. This timestamp is
                                +   * never returned.
                                +   * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + * + * @return The snapshotTimestamp. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getSnapshotTimestamp() { + return snapshotTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : snapshotTimestamp_; + } + + /** + * + * + *
                                +   * If `TransactionOptions.isolation_level` is set to
                                +   * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +   * timestamp at which all reads in the transaction ran. This timestamp is
                                +   * never returned.
                                +   * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getSnapshotTimestampOrBuilder() { + return snapshotTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : snapshotTimestamp_; + } + + public static final int CACHE_UPDATE_FIELD_NUMBER = 6; + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + @java.lang.Override + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -862,6 +977,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io output.writeMessage( 4, (com.google.spanner.v1.MultiplexedSessionPrecommitToken) multiplexedSessionRetry_); } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(5, getSnapshotTimestamp()); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(6, getCacheUpdate()); + } getUnknownFields().writeTo(output); } @@ -882,6 +1003,12 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeMessageSize( 4, (com.google.spanner.v1.MultiplexedSessionPrecommitToken) multiplexedSessionRetry_); } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getSnapshotTimestamp()); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getCacheUpdate()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -905,6 +1032,14 @@ public boolean equals(final java.lang.Object obj) { if (hasCommitStats()) { if (!getCommitStats().equals(other.getCommitStats())) return false; } + if (hasSnapshotTimestamp() != other.hasSnapshotTimestamp()) return false; + if (hasSnapshotTimestamp()) { + if (!getSnapshotTimestamp().equals(other.getSnapshotTimestamp())) return false; + } + if (hasCacheUpdate() != other.hasCacheUpdate()) return false; + if (hasCacheUpdate()) { + if (!getCacheUpdate().equals(other.getCacheUpdate())) return false; + } if (!getMultiplexedSessionRetryCase().equals(other.getMultiplexedSessionRetryCase())) return false; switch (multiplexedSessionRetryCase_) { @@ -933,6 +1068,14 @@ public int hashCode() { hash = (37 * hash) + COMMIT_STATS_FIELD_NUMBER; hash = (53 * hash) + getCommitStats().hashCode(); } + if (hasSnapshotTimestamp()) { + hash = (37 * hash) + SNAPSHOT_TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getSnapshotTimestamp().hashCode(); + } + if (hasCacheUpdate()) { + hash = (37 * hash) + CACHE_UPDATE_FIELD_NUMBER; + hash = (53 * hash) + getCacheUpdate().hashCode(); + } switch (multiplexedSessionRetryCase_) { case 4: hash = (37 * hash) + PRECOMMIT_TOKEN_FIELD_NUMBER; @@ -982,38 +1125,38 @@ public static com.google.spanner.v1.CommitResponse parseFrom( public static com.google.spanner.v1.CommitResponse parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CommitResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CommitResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CommitResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1036,10 +1179,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1049,7 +1193,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.CommitResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.CommitResponse) com.google.spanner.v1.CommitResponseOrBuilder { @@ -1059,7 +1203,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_fieldAccessorTable @@ -1073,15 +1217,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getCommitTimestampFieldBuilder(); - getCommitStatsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetCommitTimestampFieldBuilder(); + internalGetCommitStatsFieldBuilder(); + internalGetSnapshotTimestampFieldBuilder(); + internalGetCacheUpdateFieldBuilder(); } } @@ -1102,6 +1248,16 @@ public Builder clear() { if (precommitTokenBuilder_ != null) { precommitTokenBuilder_.clear(); } + snapshotTimestamp_ = null; + if (snapshotTimestampBuilder_ != null) { + snapshotTimestampBuilder_.dispose(); + snapshotTimestampBuilder_ = null; + } + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } multiplexedSessionRetryCase_ = 0; multiplexedSessionRetry_ = null; return this; @@ -1151,6 +1307,18 @@ private void buildPartial0(com.google.spanner.v1.CommitResponse result) { commitStatsBuilder_ == null ? commitStats_ : commitStatsBuilder_.build(); to_bitField0_ |= 0x00000002; } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.snapshotTimestamp_ = + snapshotTimestampBuilder_ == null + ? snapshotTimestamp_ + : snapshotTimestampBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.cacheUpdate_ = + cacheUpdateBuilder_ == null ? cacheUpdate_ : cacheUpdateBuilder_.build(); + to_bitField0_ |= 0x00000008; + } result.bitField0_ |= to_bitField0_; } @@ -1162,39 +1330,6 @@ private void buildPartialOneofs(com.google.spanner.v1.CommitResponse result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.CommitResponse) { @@ -1213,6 +1348,12 @@ public Builder mergeFrom(com.google.spanner.v1.CommitResponse other) { if (other.hasCommitStats()) { mergeCommitStats(other.getCommitStats()); } + if (other.hasSnapshotTimestamp()) { + mergeSnapshotTimestamp(other.getSnapshotTimestamp()); + } + if (other.hasCacheUpdate()) { + mergeCacheUpdate(other.getCacheUpdate()); + } switch (other.getMultiplexedSessionRetryCase()) { case PRECOMMIT_TOKEN: { @@ -1252,22 +1393,39 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getCommitStatsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCommitStatsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 34: { - input.readMessage(getPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); multiplexedSessionRetryCase_ = 4; break; } // case 34 + case 42: + { + input.readMessage( + internalGetSnapshotTimestampFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetCacheUpdateFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 50 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1302,11 +1460,12 @@ public Builder clearMultiplexedSessionRetry() { private int bitField0_; private com.google.protobuf.Timestamp commitTimestamp_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> commitTimestampBuilder_; + /** * * @@ -1321,6 +1480,7 @@ public Builder clearMultiplexedSessionRetry() { public boolean hasCommitTimestamp() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1341,6 +1501,7 @@ public com.google.protobuf.Timestamp getCommitTimestamp() { return commitTimestampBuilder_.getMessage(); } } + /** * * @@ -1363,6 +1524,7 @@ public Builder setCommitTimestamp(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1382,6 +1544,7 @@ public Builder setCommitTimestamp(com.google.protobuf.Timestamp.Builder builderF onChanged(); return this; } + /** * * @@ -1409,6 +1572,7 @@ public Builder mergeCommitTimestamp(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1428,6 +1592,7 @@ public Builder clearCommitTimestamp() { onChanged(); return this; } + /** * * @@ -1440,8 +1605,9 @@ public Builder clearCommitTimestamp() { public com.google.protobuf.Timestamp.Builder getCommitTimestampBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getCommitTimestampFieldBuilder().getBuilder(); + return internalGetCommitTimestampFieldBuilder().getBuilder(); } + /** * * @@ -1460,6 +1626,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { : commitTimestamp_; } } + /** * * @@ -1469,14 +1636,14 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { * * .google.protobuf.Timestamp commit_timestamp = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCommitTimestampFieldBuilder() { + internalGetCommitTimestampFieldBuilder() { if (commitTimestampBuilder_ == null) { commitTimestampBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1487,16 +1654,17 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { } private com.google.spanner.v1.CommitResponse.CommitStats commitStats_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.CommitResponse.CommitStats, com.google.spanner.v1.CommitResponse.CommitStats.Builder, com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder> commitStatsBuilder_; + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1508,11 +1676,12 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { public boolean hasCommitStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1530,11 +1699,12 @@ public com.google.spanner.v1.CommitResponse.CommitStats getCommitStats() { return commitStatsBuilder_.getMessage(); } } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1554,11 +1724,12 @@ public Builder setCommitStats(com.google.spanner.v1.CommitResponse.CommitStats v onChanged(); return this; } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1576,11 +1747,12 @@ public Builder setCommitStats( onChanged(); return this; } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1606,11 +1778,12 @@ public Builder mergeCommitStats(com.google.spanner.v1.CommitResponse.CommitStats } return this; } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1627,11 +1800,12 @@ public Builder clearCommitStats() { onChanged(); return this; } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1641,13 +1815,14 @@ public Builder clearCommitStats() { public com.google.spanner.v1.CommitResponse.CommitStats.Builder getCommitStatsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getCommitStatsFieldBuilder().getBuilder(); + return internalGetCommitStatsFieldBuilder().getBuilder(); } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                @@ -1663,25 +1838,26 @@ public com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder getCommitStatsO : commitStats_; } } + /** * * *
                                -     * The statistics about this Commit. Not returned by default.
                                +     * The statistics about this `Commit`. Not returned by default.
                                      * For more information, see
                                      * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                      * 
                                * * .google.spanner.v1.CommitResponse.CommitStats commit_stats = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.CommitResponse.CommitStats, com.google.spanner.v1.CommitResponse.CommitStats.Builder, com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder> - getCommitStatsFieldBuilder() { + internalGetCommitStatsFieldBuilder() { if (commitStatsBuilder_ == null) { commitStatsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.CommitResponse.CommitStats, com.google.spanner.v1.CommitResponse.CommitStats.Builder, com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder>( @@ -1691,17 +1867,18 @@ public com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder getCommitStatsO return commitStatsBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> precommitTokenBuilder_; + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -1712,12 +1889,13 @@ public com.google.spanner.v1.CommitResponse.CommitStatsOrBuilder getCommitStatsO public boolean hasPrecommitToken() { return multiplexedSessionRetryCase_ == 4; } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -1738,12 +1916,13 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( return com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance(); } } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -1761,12 +1940,13 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm multiplexedSessionRetryCase_ = 4; return this; } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -1782,12 +1962,13 @@ public Builder setPrecommitToken( multiplexedSessionRetryCase_ = 4; return this; } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -1818,12 +1999,13 @@ public Builder mergePrecommitToken( multiplexedSessionRetryCase_ = 4; return this; } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -1844,26 +2026,28 @@ public Builder clearPrecommitToken() { } return this; } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; */ public com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder getPrecommitTokenBuilder() { - return getPrecommitTokenFieldBuilder().getBuilder(); + return internalGetPrecommitTokenFieldBuilder().getBuilder(); } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -1880,28 +2064,29 @@ public Builder clearPrecommitToken() { return com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance(); } } + /** * * *
                                      * If specified, transaction has not committed yet.
                                -     * Clients must retry the commit with the new precommit token.
                                +     * You must retry the commit with the new precommit token.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> - getPrecommitTokenFieldBuilder() { + internalGetPrecommitTokenFieldBuilder() { if (precommitTokenBuilder_ == null) { if (!(multiplexedSessionRetryCase_ == 4)) { multiplexedSessionRetry_ = com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance(); } precommitTokenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder>( @@ -1915,15 +2100,482 @@ public Builder clearPrecommitToken() { return precommitTokenBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.protobuf.Timestamp snapshotTimestamp_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + snapshotTimestampBuilder_; + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + * + * @return Whether the snapshotTimestamp field is set. + */ + public boolean hasSnapshotTimestamp() { + return ((bitField0_ & 0x00000008) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + * + * @return The snapshotTimestamp. + */ + public com.google.protobuf.Timestamp getSnapshotTimestamp() { + if (snapshotTimestampBuilder_ == null) { + return snapshotTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : snapshotTimestamp_; + } else { + return snapshotTimestampBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + public Builder setSnapshotTimestamp(com.google.protobuf.Timestamp value) { + if (snapshotTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + snapshotTimestamp_ = value; + } else { + snapshotTimestampBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + public Builder setSnapshotTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { + if (snapshotTimestampBuilder_ == null) { + snapshotTimestamp_ = builderForValue.build(); + } else { + snapshotTimestampBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + public Builder mergeSnapshotTimestamp(com.google.protobuf.Timestamp value) { + if (snapshotTimestampBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && snapshotTimestamp_ != null + && snapshotTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getSnapshotTimestampBuilder().mergeFrom(value); + } else { + snapshotTimestamp_ = value; + } + } else { + snapshotTimestampBuilder_.mergeFrom(value); + } + if (snapshotTimestamp_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + public Builder clearSnapshotTimestamp() { + bitField0_ = (bitField0_ & ~0x00000008); + snapshotTimestamp_ = null; + if (snapshotTimestampBuilder_ != null) { + snapshotTimestampBuilder_.dispose(); + snapshotTimestampBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + public com.google.protobuf.Timestamp.Builder getSnapshotTimestampBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetSnapshotTimestampFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + public com.google.protobuf.TimestampOrBuilder getSnapshotTimestampOrBuilder() { + if (snapshotTimestampBuilder_ != null) { + return snapshotTimestampBuilder_.getMessageOrBuilder(); + } else { + return snapshotTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : snapshotTimestamp_; + } + } + + /** + * + * + *
                                +     * If `TransactionOptions.isolation_level` is set to
                                +     * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +     * timestamp at which all reads in the transaction ran. This timestamp is
                                +     * never returned.
                                +     * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetSnapshotTimestampFieldBuilder() { + if (snapshotTimestampBuilder_ == null) { + snapshotTimestampBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getSnapshotTimestamp(), getParentForChildren(), isClean()); + snapshotTimestamp_ = null; + } + return snapshotTimestampBuilder_; + } + + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + cacheUpdateBuilder_; + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + if (cacheUpdateBuilder_ == null) { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } else { + return cacheUpdateBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cacheUpdate_ = value; + } else { + cacheUpdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate.Builder builderForValue) { + if (cacheUpdateBuilder_ == null) { + cacheUpdate_ = builderForValue.build(); + } else { + cacheUpdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && cacheUpdate_ != null + && cacheUpdate_ != com.google.spanner.v1.CacheUpdate.getDefaultInstance()) { + getCacheUpdateBuilder().mergeFrom(value); + } else { + cacheUpdate_ = value; + } + } else { + cacheUpdateBuilder_.mergeFrom(value); + } + if (cacheUpdate_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearCacheUpdate() { + bitField0_ = (bitField0_ & ~0x00000010); + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdate.Builder getCacheUpdateBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return internalGetCacheUpdateFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + if (cacheUpdateBuilder_ != null) { + return cacheUpdateBuilder_.getMessageOrBuilder(); + } else { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + internalGetCacheUpdateFieldBuilder() { + if (cacheUpdateBuilder_ == null) { + cacheUpdateBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder>( + getCacheUpdate(), getParentForChildren(), isClean()); + cacheUpdate_ = null; + } + return cacheUpdateBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.CommitResponse) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java index 9a4e8b04a0a..bf00f8accf4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/commit_response.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface CommitResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.CommitResponse) @@ -36,6 +38,7 @@ public interface CommitResponseOrBuilder * @return Whether the commitTimestamp field is set. */ boolean hasCommitTimestamp(); + /** * * @@ -48,6 +51,7 @@ public interface CommitResponseOrBuilder * @return The commitTimestamp. */ com.google.protobuf.Timestamp getCommitTimestamp(); + /** * * @@ -63,7 +67,7 @@ public interface CommitResponseOrBuilder * * *
                                -   * The statistics about this Commit. Not returned by default.
                                +   * The statistics about this `Commit`. Not returned by default.
                                    * For more information, see
                                    * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                    * 
                                @@ -73,11 +77,12 @@ public interface CommitResponseOrBuilder * @return Whether the commitStats field is set. */ boolean hasCommitStats(); + /** * * *
                                -   * The statistics about this Commit. Not returned by default.
                                +   * The statistics about this `Commit`. Not returned by default.
                                    * For more information, see
                                    * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                    * 
                                @@ -87,11 +92,12 @@ public interface CommitResponseOrBuilder * @return The commitStats. */ com.google.spanner.v1.CommitResponse.CommitStats getCommitStats(); + /** * * *
                                -   * The statistics about this Commit. Not returned by default.
                                +   * The statistics about this `Commit`. Not returned by default.
                                    * For more information, see
                                    * [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats].
                                    * 
                                @@ -105,7 +111,7 @@ public interface CommitResponseOrBuilder * *
                                    * If specified, transaction has not committed yet.
                                -   * Clients must retry the commit with the new precommit token.
                                +   * You must retry the commit with the new precommit token.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -113,12 +119,13 @@ public interface CommitResponseOrBuilder * @return Whether the precommitToken field is set. */ boolean hasPrecommitToken(); + /** * * *
                                    * If specified, transaction has not committed yet.
                                -   * Clients must retry the commit with the new precommit token.
                                +   * You must retry the commit with the new precommit token.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; @@ -126,17 +133,122 @@ public interface CommitResponseOrBuilder * @return The precommitToken. */ com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken(); + /** * * *
                                    * If specified, transaction has not committed yet.
                                -   * Clients must retry the commit with the new precommit token.
                                +   * You must retry the commit with the new precommit token.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 4; */ com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder getPrecommitTokenOrBuilder(); + /** + * + * + *
                                +   * If `TransactionOptions.isolation_level` is set to
                                +   * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +   * timestamp at which all reads in the transaction ran. This timestamp is
                                +   * never returned.
                                +   * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + * + * @return Whether the snapshotTimestamp field is set. + */ + boolean hasSnapshotTimestamp(); + + /** + * + * + *
                                +   * If `TransactionOptions.isolation_level` is set to
                                +   * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +   * timestamp at which all reads in the transaction ran. This timestamp is
                                +   * never returned.
                                +   * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + * + * @return The snapshotTimestamp. + */ + com.google.protobuf.Timestamp getSnapshotTimestamp(); + + /** + * + * + *
                                +   * If `TransactionOptions.isolation_level` is set to
                                +   * `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the
                                +   * timestamp at which all reads in the transaction ran. This timestamp is
                                +   * never returned.
                                +   * 
                                + * + * .google.protobuf.Timestamp snapshot_timestamp = 5; + */ + com.google.protobuf.TimestampOrBuilder getSnapshotTimestampOrBuilder(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + boolean hasCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + com.google.spanner.v1.CacheUpdate getCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder(); + com.google.spanner.v1.CommitResponse.MultiplexedSessionRetryCase getMultiplexedSessionRetryCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java index bd550231631..31051dde3b6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/commit_response.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class CommitResponseProto { +@com.google.protobuf.Generated +public final class CommitResponseProto extends com.google.protobuf.GeneratedFile { private CommitResponseProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CommitResponseProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,11 +42,11 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_CommitResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_CommitResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_CommitResponse_CommitStats_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_CommitResponse_CommitStats_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -46,47 +58,65 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { "\n\'google/spanner/v1/commit_response.prot" - + "o\022\021google.spanner.v1\032\037google/protobuf/ti" - + "mestamp.proto\032#google/spanner/v1/transac" - + "tion.proto\"\235\002\n\016CommitResponse\0224\n\020commit_" - + "timestamp\030\001 \001(\0132\032.google.protobuf.Timest" - + "amp\022C\n\014commit_stats\030\002 \001(\0132-.google.spann" - + "er.v1.CommitResponse.CommitStats\022N\n\017prec" - + "ommit_token\030\004 \001(\01323.google.spanner.v1.Mu" - + "ltiplexedSessionPrecommitTokenH\000\032%\n\013Comm" - + "itStats\022\026\n\016mutation_count\030\001 \001(\003B\031\n\027Multi" - + "plexedSessionRetryB\266\001\n\025com.google.spanne" - + "r.v1B\023CommitResponseProtoP\001Z5cloud.googl" - + "e.com/go/spanner/apiv1/spannerpb;spanner" - + "pb\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Cl" - + "oud\\Spanner\\V1\352\002\032Google::Cloud::Spanner:" - + ":V1b\006proto3" + + "o\022\021google.spanner.v1\032\037google/api/field_b" + + "ehavior.proto\032\037google/protobuf/timestamp" + + ".proto\032 google/spanner/v1/location.proto" + + "\032#google/spanner/v1/transaction.proto\"\220\003" + + "\n\016CommitResponse\0224\n\020commit_timestamp\030\001 \001" + + "(\0132\032.google.protobuf.Timestamp\022C\n\014commit" + + "_stats\030\002 \001(\0132-.google.spanner.v1.CommitR" + + "esponse.CommitStats\022N\n\017precommit_token\030\004" + + " \001(\01323.google.spanner.v1.MultiplexedSess" + + "ionPrecommitTokenH\000\0226\n\022snapshot_timestam" + + "p\030\005 \001(\0132\032.google.protobuf.Timestamp\0229\n\014c" + + "ache_update\030\006 \001(\0132\036.google.spanner.v1.Ca" + + "cheUpdateB\003\340A\001\032%\n\013CommitStats\022\026\n\016mutatio" + + "n_count\030\001 \001(\003B\031\n\027MultiplexedSessionRetry" + + "B\266\001\n\025com.google.spanner.v1B\023CommitRespon" + + "seProtoP\001Z5cloud.google.com/go/spanner/a" + + "piv1/spannerpb;spannerpb\252\002\027Google.Cloud." + + "Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032G" + + "oogle::Cloud::Spanner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.api.FieldBehaviorProto.getDescriptor(), com.google.protobuf.TimestampProto.getDescriptor(), + com.google.spanner.v1.LocationProto.getDescriptor(), com.google.spanner.v1.TransactionProto.getDescriptor(), }); - internal_static_google_spanner_v1_CommitResponse_descriptor = - getDescriptor().getMessageTypes().get(0); + internal_static_google_spanner_v1_CommitResponse_descriptor = getDescriptor().getMessageType(0); internal_static_google_spanner_v1_CommitResponse_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_CommitResponse_descriptor, new java.lang.String[] { - "CommitTimestamp", "CommitStats", "PrecommitToken", "MultiplexedSessionRetry", + "CommitTimestamp", + "CommitStats", + "PrecommitToken", + "SnapshotTimestamp", + "CacheUpdate", + "MultiplexedSessionRetry", }); internal_static_google_spanner_v1_CommitResponse_CommitStats_descriptor = - internal_static_google_spanner_v1_CommitResponse_descriptor.getNestedTypes().get(0); + internal_static_google_spanner_v1_CommitResponse_descriptor.getNestedType(0); internal_static_google_spanner_v1_CommitResponse_CommitStats_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_CommitResponse_CommitStats_descriptor, new java.lang.String[] { "MutationCount", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); com.google.protobuf.TimestampProto.getDescriptor(); + com.google.spanner.v1.LocationProto.getDescriptor(); com.google.spanner.v1.TransactionProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java index 4d2f7d2b2eb..f33336e704f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.CreateSessionRequest} */ -public final class CreateSessionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class CreateSessionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.CreateSessionRequest) CreateSessionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateSessionRequest"); + } + // Use CreateSessionRequest.newBuilder() to construct. - private CreateSessionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private CreateSessionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private CreateSessionRequest() { database_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new CreateSessionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CreateSessionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CreateSessionRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public static final int SESSION_FIELD_NUMBER = 2; private com.google.spanner.v1.Session session_; + /** * * @@ -136,6 +146,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public boolean hasSession() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -151,6 +162,7 @@ public boolean hasSession() { public com.google.spanner.v1.Session getSession() { return session_ == null ? com.google.spanner.v1.Session.getDefaultInstance() : session_; } + /** * * @@ -179,8 +191,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getSession()); @@ -194,8 +206,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSession()); @@ -280,38 +292,38 @@ public static com.google.spanner.v1.CreateSessionRequest parseFrom( public static com.google.spanner.v1.CreateSessionRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CreateSessionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CreateSessionRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.CreateSessionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.CreateSessionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.CreateSessionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -334,10 +346,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -347,7 +360,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.CreateSessionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.CreateSessionRequest) com.google.spanner.v1.CreateSessionRequestOrBuilder { @@ -357,7 +370,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CreateSessionRequest_fieldAccessorTable @@ -371,14 +384,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getSessionFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSessionFieldBuilder(); } } @@ -439,39 +452,6 @@ private void buildPartial0(com.google.spanner.v1.CreateSessionRequest result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.CreateSessionRequest) { @@ -526,7 +506,7 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getSessionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetSessionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -550,6 +530,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -574,6 +555,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -598,6 +580,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -621,6 +604,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -640,6 +624,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -666,11 +651,12 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.Session session_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> sessionBuilder_; + /** * * @@ -686,6 +672,7 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { public boolean hasSession() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -705,6 +692,7 @@ public com.google.spanner.v1.Session getSession() { return sessionBuilder_.getMessage(); } } + /** * * @@ -728,6 +716,7 @@ public Builder setSession(com.google.spanner.v1.Session value) { onChanged(); return this; } + /** * * @@ -748,6 +737,7 @@ public Builder setSession(com.google.spanner.v1.Session.Builder builderForValue) onChanged(); return this; } + /** * * @@ -776,6 +766,7 @@ public Builder mergeSession(com.google.spanner.v1.Session value) { } return this; } + /** * * @@ -796,6 +787,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -809,8 +801,9 @@ public Builder clearSession() { public com.google.spanner.v1.Session.Builder getSessionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getSessionFieldBuilder().getBuilder(); + return internalGetSessionFieldBuilder().getBuilder(); } + /** * * @@ -828,6 +821,7 @@ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder() { return session_ == null ? com.google.spanner.v1.Session.getDefaultInstance() : session_; } } + /** * * @@ -838,14 +832,14 @@ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder() { * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> - getSessionFieldBuilder() { + internalGetSessionFieldBuilder() { if (sessionBuilder_ == null) { sessionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder>( @@ -855,17 +849,6 @@ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder() { return sessionBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.CreateSessionRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java index 81ac68f4993..74c2c254d17 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface CreateSessionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.CreateSessionRequest) @@ -38,6 +40,7 @@ public interface CreateSessionRequestOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * @@ -65,6 +68,7 @@ public interface CreateSessionRequestOrBuilder * @return Whether the session field is set. */ boolean hasSession(); + /** * * @@ -77,6 +81,7 @@ public interface CreateSessionRequestOrBuilder * @return The session. */ com.google.spanner.v1.Session getSession(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DatabaseName.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DatabaseName.java index b0f46c23f4d..eee6b1de158 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DatabaseName.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DatabaseName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java index f42ad674732..0ccb2e08873 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.DeleteSessionRequest} */ -public final class DeleteSessionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DeleteSessionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.DeleteSessionRequest) DeleteSessionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteSessionRequest"); + } + // Use DeleteSessionRequest.newBuilder() to construct. - private DeleteSessionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DeleteSessionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private DeleteSessionRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DeleteSessionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DeleteSessionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DeleteSessionRequest_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -132,8 +141,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -144,8 +153,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -219,38 +228,38 @@ public static com.google.spanner.v1.DeleteSessionRequest parseFrom( public static com.google.spanner.v1.DeleteSessionRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DeleteSessionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DeleteSessionRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.DeleteSessionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DeleteSessionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DeleteSessionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -273,10 +282,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -286,7 +296,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.DeleteSessionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.DeleteSessionRequest) com.google.spanner.v1.DeleteSessionRequestOrBuilder { @@ -296,7 +306,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DeleteSessionRequest_fieldAccessorTable @@ -308,7 +318,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.DeleteSessionRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -358,39 +368,6 @@ private void buildPartial0(com.google.spanner.v1.DeleteSessionRequest result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.DeleteSessionRequest) { @@ -460,6 +437,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -484,6 +462,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -508,6 +487,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -531,6 +511,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -550,6 +531,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -575,17 +557,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.DeleteSessionRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java index 204afe99f8d..d8187971b1e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface DeleteSessionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.DeleteSessionRequest) @@ -38,6 +40,7 @@ public interface DeleteSessionRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java index ed1d01e8916..9bdd468b013 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,49 +14,56 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** * * *
                                - * The DirectedReadOptions can be used to indicate which replicas or regions
                                + * The `DirectedReadOptions` can be used to indicate which replicas or regions
                                  * should be used for non-transactional reads or queries.
                                  *
                                - * DirectedReadOptions may only be specified for a read-only transaction,
                                - * otherwise the API will return an `INVALID_ARGUMENT` error.
                                + * `DirectedReadOptions` can only be specified for a read-only transaction,
                                + * otherwise the API returns an `INVALID_ARGUMENT` error.
                                  * 
                                * * Protobuf type {@code google.spanner.v1.DirectedReadOptions} */ -public final class DirectedReadOptions extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class DirectedReadOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.DirectedReadOptions) DirectedReadOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DirectedReadOptions"); + } + // Use DirectedReadOptions.newBuilder() to construct. - private DirectedReadOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private DirectedReadOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private DirectedReadOptions() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DirectedReadOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_fieldAccessorTable @@ -74,7 +81,7 @@ public interface ReplicaSelectionOrBuilder * * *
                                -     * The location or region of the serving requests, e.g. "us-east1".
                                +     * The location or region of the serving requests, for example, "us-east1".
                                      * 
                                * * string location = 1; @@ -82,11 +89,12 @@ public interface ReplicaSelectionOrBuilder * @return The location. */ java.lang.String getLocation(); + /** * * *
                                -     * The location or region of the serving requests, e.g. "us-east1".
                                +     * The location or region of the serving requests, for example, "us-east1".
                                      * 
                                * * string location = 1; @@ -107,6 +115,7 @@ public interface ReplicaSelectionOrBuilder * @return The enum numeric value on the wire for type. */ int getTypeValue(); + /** * * @@ -120,6 +129,7 @@ public interface ReplicaSelectionOrBuilder */ com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Type getType(); } + /** * * @@ -128,31 +138,42 @@ public interface ReplicaSelectionOrBuilder * Callers must provide one or more of the following fields for replica * selection: * - * * `location` - The location must be one of the regions within the - * multi-region configuration of your database. - * * `type` - The type of the replica. + * * `location` - The location must be one of the regions within the + * multi-region configuration of your database. + * * `type` - The type of the replica. * * Some examples of using replica_selectors are: * - * * `location:us-east1` --> The "us-east1" replica(s) of any available type - * will be used to process the request. - * * `type:READ_ONLY` --> The "READ_ONLY" type replica(s) in nearest - * available location will be used to process the - * request. - * * `location:us-east1 type:READ_ONLY` --> The "READ_ONLY" type replica(s) - * in location "us-east1" will be used to process - * the request. + * * `location:us-east1` --> The "us-east1" replica(s) of any available type + * is used to process the request. + * * `type:READ_ONLY` --> The "READ_ONLY" type replica(s) in the nearest + * available location are used to process the + * request. + * * `location:us-east1 type:READ_ONLY` --> The "READ_ONLY" type replica(s) + * in location "us-east1" is used to process + * the request. * * * Protobuf type {@code google.spanner.v1.DirectedReadOptions.ReplicaSelection} */ - public static final class ReplicaSelection extends com.google.protobuf.GeneratedMessageV3 + public static final class ReplicaSelection extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.DirectedReadOptions.ReplicaSelection) ReplicaSelectionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReplicaSelection"); + } + // Use ReplicaSelection.newBuilder() to construct. - private ReplicaSelection(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReplicaSelection(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -161,19 +182,13 @@ private ReplicaSelection() { type_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReplicaSelection(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_ReplicaSelection_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_ReplicaSelection_fieldAccessorTable @@ -225,6 +240,16 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Type"); + } + /** * * @@ -235,6 +260,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * TYPE_UNSPECIFIED = 0; */ public static final int TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -245,6 +271,7 @@ public enum Type implements com.google.protobuf.ProtocolMessageEnum { * READ_WRITE = 1; */ public static final int READ_WRITE_VALUE = 1; + /** * * @@ -314,7 +341,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.getDescriptor() .getEnumTypes() .get(0); @@ -345,11 +372,12 @@ private Type(int value) { @SuppressWarnings("serial") private volatile java.lang.Object location_ = ""; + /** * * *
                                -     * The location or region of the serving requests, e.g. "us-east1".
                                +     * The location or region of the serving requests, for example, "us-east1".
                                      * 
                                * * string location = 1; @@ -368,11 +396,12 @@ public java.lang.String getLocation() { return s; } } + /** * * *
                                -     * The location or region of the serving requests, e.g. "us-east1".
                                +     * The location or region of the serving requests, for example, "us-east1".
                                      * 
                                * * string location = 1; @@ -394,6 +423,7 @@ public com.google.protobuf.ByteString getLocationBytes() { public static final int TYPE_FIELD_NUMBER = 2; private int type_ = 0; + /** * * @@ -409,6 +439,7 @@ public com.google.protobuf.ByteString getLocationBytes() { public int getTypeValue() { return type_; } + /** * * @@ -443,8 +474,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(location_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, location_); } if (type_ != com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Type.TYPE_UNSPECIFIED @@ -460,8 +491,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(location_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, location_); } if (type_ != com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Type.TYPE_UNSPECIFIED @@ -543,38 +574,38 @@ public static com.google.spanner.v1.DirectedReadOptions.ReplicaSelection parseFr public static com.google.spanner.v1.DirectedReadOptions.ReplicaSelection parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.ReplicaSelection parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions.ReplicaSelection parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.ReplicaSelection parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions.ReplicaSelection parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.ReplicaSelection parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -598,11 +629,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -611,26 +642,25 @@ protected Builder newBuilderForType( * Callers must provide one or more of the following fields for replica * selection: * - * * `location` - The location must be one of the regions within the - * multi-region configuration of your database. - * * `type` - The type of the replica. + * * `location` - The location must be one of the regions within the + * multi-region configuration of your database. + * * `type` - The type of the replica. * * Some examples of using replica_selectors are: * - * * `location:us-east1` --> The "us-east1" replica(s) of any available type - * will be used to process the request. - * * `type:READ_ONLY` --> The "READ_ONLY" type replica(s) in nearest - * available location will be used to process the - * request. - * * `location:us-east1 type:READ_ONLY` --> The "READ_ONLY" type replica(s) - * in location "us-east1" will be used to process - * the request. + * * `location:us-east1` --> The "us-east1" replica(s) of any available type + * is used to process the request. + * * `type:READ_ONLY` --> The "READ_ONLY" type replica(s) in the nearest + * available location are used to process the + * request. + * * `location:us-east1 type:READ_ONLY` --> The "READ_ONLY" type replica(s) + * in location "us-east1" is used to process + * the request. * * * Protobuf type {@code google.spanner.v1.DirectedReadOptions.ReplicaSelection} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.DirectedReadOptions.ReplicaSelection) com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder { @@ -640,7 +670,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_ReplicaSelection_fieldAccessorTable @@ -652,7 +682,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -708,41 +738,6 @@ private void buildPartial0( } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.DirectedReadOptions.ReplicaSelection) { @@ -823,11 +818,12 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object location_ = ""; + /** * * *
                                -       * The location or region of the serving requests, e.g. "us-east1".
                                +       * The location or region of the serving requests, for example, "us-east1".
                                        * 
                                * * string location = 1; @@ -845,11 +841,12 @@ public java.lang.String getLocation() { return (java.lang.String) ref; } } + /** * * *
                                -       * The location or region of the serving requests, e.g. "us-east1".
                                +       * The location or region of the serving requests, for example, "us-east1".
                                        * 
                                * * string location = 1; @@ -867,11 +864,12 @@ public com.google.protobuf.ByteString getLocationBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                -       * The location or region of the serving requests, e.g. "us-east1".
                                +       * The location or region of the serving requests, for example, "us-east1".
                                        * 
                                * * string location = 1; @@ -888,11 +886,12 @@ public Builder setLocation(java.lang.String value) { onChanged(); return this; } + /** * * *
                                -       * The location or region of the serving requests, e.g. "us-east1".
                                +       * The location or region of the serving requests, for example, "us-east1".
                                        * 
                                * * string location = 1; @@ -905,11 +904,12 @@ public Builder clearLocation() { onChanged(); return this; } + /** * * *
                                -       * The location or region of the serving requests, e.g. "us-east1".
                                +       * The location or region of the serving requests, for example, "us-east1".
                                        * 
                                * * string location = 1; @@ -929,6 +929,7 @@ public Builder setLocationBytes(com.google.protobuf.ByteString value) { } private int type_ = 0; + /** * * @@ -944,6 +945,7 @@ public Builder setLocationBytes(com.google.protobuf.ByteString value) { public int getTypeValue() { return type_; } + /** * * @@ -962,6 +964,7 @@ public Builder setTypeValue(int value) { onChanged(); return this; } + /** * * @@ -981,6 +984,7 @@ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Type getType() ? com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Type.UNRECOGNIZED : result; } + /** * * @@ -1003,6 +1007,7 @@ public Builder setType( onChanged(); return this; } + /** * * @@ -1021,18 +1026,6 @@ public Builder clearType() { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.DirectedReadOptions.ReplicaSelection) } @@ -1104,6 +1097,7 @@ public interface IncludeReplicasOrBuilder */ java.util.List getReplicaSelectionsList(); + /** * * @@ -1116,6 +1110,7 @@ public interface IncludeReplicasOrBuilder *
                                */ com.google.spanner.v1.DirectedReadOptions.ReplicaSelection getReplicaSelections(int index); + /** * * @@ -1128,6 +1123,7 @@ public interface IncludeReplicasOrBuilder *
                                */ int getReplicaSelectionsCount(); + /** * * @@ -1141,6 +1137,7 @@ public interface IncludeReplicasOrBuilder */ java.util.List getReplicaSelectionsOrBuilderList(); + /** * * @@ -1159,9 +1156,9 @@ public interface IncludeReplicasOrBuilder * * *
                                -     * If true, Spanner will not route requests to a replica outside the
                                -     * include_replicas list when all of the specified replicas are unavailable
                                -     * or unhealthy. Default value is `false`.
                                +     * If `true`, Spanner doesn't route requests to a replica outside the
                                +     * <`include_replicas` list when all of the specified replicas are
                                +     * unavailable or unhealthy. Default value is `false`.
                                      * 
                                * * bool auto_failover_disabled = 2; @@ -1170,23 +1167,35 @@ public interface IncludeReplicasOrBuilder */ boolean getAutoFailoverDisabled(); } + /** * * *
                                -   * An IncludeReplicas contains a repeated set of ReplicaSelection which
                                +   * An `IncludeReplicas` contains a repeated set of `ReplicaSelection` which
                                    * indicates the order in which replicas should be considered.
                                    * 
                                * * Protobuf type {@code google.spanner.v1.DirectedReadOptions.IncludeReplicas} */ - public static final class IncludeReplicas extends com.google.protobuf.GeneratedMessageV3 + public static final class IncludeReplicas extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.DirectedReadOptions.IncludeReplicas) IncludeReplicasOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "IncludeReplicas"); + } + // Use IncludeReplicas.newBuilder() to construct. - private IncludeReplicas(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private IncludeReplicas(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -1194,19 +1203,13 @@ private IncludeReplicas() { replicaSelections_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new IncludeReplicas(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_IncludeReplicas_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_IncludeReplicas_fieldAccessorTable @@ -1220,6 +1223,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List replicaSelections_; + /** * * @@ -1236,6 +1240,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getReplicaSelectionsList() { return replicaSelections_; } + /** * * @@ -1253,6 +1258,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getReplicaSelectionsOrBuilderList() { return replicaSelections_; } + /** * * @@ -1268,6 +1274,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getReplicaSelectionsCount() { return replicaSelections_.size(); } + /** * * @@ -1284,6 +1291,7 @@ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection getReplicaSele int index) { return replicaSelections_.get(index); } + /** * * @@ -1303,13 +1311,14 @@ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection getReplicaSele public static final int AUTO_FAILOVER_DISABLED_FIELD_NUMBER = 2; private boolean autoFailoverDisabled_ = false; + /** * * *
                                -     * If true, Spanner will not route requests to a replica outside the
                                -     * include_replicas list when all of the specified replicas are unavailable
                                -     * or unhealthy. Default value is `false`.
                                +     * If `true`, Spanner doesn't route requests to a replica outside the
                                +     * <`include_replicas` list when all of the specified replicas are
                                +     * unavailable or unhealthy. Default value is `false`.
                                      * 
                                * * bool auto_failover_disabled = 2; @@ -1434,38 +1443,38 @@ public static com.google.spanner.v1.DirectedReadOptions.IncludeReplicas parseFro public static com.google.spanner.v1.DirectedReadOptions.IncludeReplicas parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.IncludeReplicas parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions.IncludeReplicas parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.IncludeReplicas parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions.IncludeReplicas parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.IncludeReplicas parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1489,23 +1498,22 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -     * An IncludeReplicas contains a repeated set of ReplicaSelection which
                                +     * An `IncludeReplicas` contains a repeated set of `ReplicaSelection` which
                                      * indicates the order in which replicas should be considered.
                                      * 
                                * * Protobuf type {@code google.spanner.v1.DirectedReadOptions.IncludeReplicas} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.DirectedReadOptions.IncludeReplicas) com.google.spanner.v1.DirectedReadOptions.IncludeReplicasOrBuilder { @@ -1515,7 +1523,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_IncludeReplicas_fieldAccessorTable @@ -1527,7 +1535,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1598,41 +1606,6 @@ private void buildPartial0(com.google.spanner.v1.DirectedReadOptions.IncludeRepl } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.DirectedReadOptions.IncludeReplicas) { @@ -1665,8 +1638,8 @@ public Builder mergeFrom(com.google.spanner.v1.DirectedReadOptions.IncludeReplic replicaSelections_ = other.replicaSelections_; bitField0_ = (bitField0_ & ~0x00000001); replicaSelectionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getReplicaSelectionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetReplicaSelectionsFieldBuilder() : null; } else { replicaSelectionsBuilder_.addAllMessages(other.replicaSelections_); @@ -1753,7 +1726,7 @@ private void ensureReplicaSelectionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ReplicaSelection, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder, com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder> @@ -1778,6 +1751,7 @@ private void ensureReplicaSelectionsIsMutable() { return replicaSelectionsBuilder_.getMessageList(); } } + /** * * @@ -1796,6 +1770,7 @@ public int getReplicaSelectionsCount() { return replicaSelectionsBuilder_.getCount(); } } + /** * * @@ -1815,6 +1790,7 @@ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection getReplicaSele return replicaSelectionsBuilder_.getMessage(index); } } + /** * * @@ -1840,6 +1816,7 @@ public Builder setReplicaSelections( } return this; } + /** * * @@ -1863,6 +1840,7 @@ public Builder setReplicaSelections( } return this; } + /** * * @@ -1888,6 +1866,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -1913,6 +1892,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -1935,6 +1915,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -1958,6 +1939,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -1981,6 +1963,7 @@ public Builder addAllReplicaSelections( } return this; } + /** * * @@ -2002,6 +1985,7 @@ public Builder clearReplicaSelections() { } return this; } + /** * * @@ -2023,6 +2007,7 @@ public Builder removeReplicaSelections(int index) { } return this; } + /** * * @@ -2036,8 +2021,9 @@ public Builder removeReplicaSelections(int index) { */ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder getReplicaSelectionsBuilder(int index) { - return getReplicaSelectionsFieldBuilder().getBuilder(index); + return internalGetReplicaSelectionsFieldBuilder().getBuilder(index); } + /** * * @@ -2057,6 +2043,7 @@ public Builder removeReplicaSelections(int index) { return replicaSelectionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2077,6 +2064,7 @@ public Builder removeReplicaSelections(int index) { return java.util.Collections.unmodifiableList(replicaSelections_); } } + /** * * @@ -2090,10 +2078,11 @@ public Builder removeReplicaSelections(int index) { */ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder addReplicaSelectionsBuilder() { - return getReplicaSelectionsFieldBuilder() + return internalGetReplicaSelectionsFieldBuilder() .addBuilder( com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.getDefaultInstance()); } + /** * * @@ -2107,11 +2096,12 @@ public Builder removeReplicaSelections(int index) { */ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder addReplicaSelectionsBuilder(int index) { - return getReplicaSelectionsFieldBuilder() + return internalGetReplicaSelectionsFieldBuilder() .addBuilder( index, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.getDefaultInstance()); } + /** * * @@ -2125,17 +2115,17 @@ public Builder removeReplicaSelections(int index) { */ public java.util.List getReplicaSelectionsBuilderList() { - return getReplicaSelectionsFieldBuilder().getBuilderList(); + return internalGetReplicaSelectionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ReplicaSelection, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder, com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder> - getReplicaSelectionsFieldBuilder() { + internalGetReplicaSelectionsFieldBuilder() { if (replicaSelectionsBuilder_ == null) { replicaSelectionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ReplicaSelection, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder, com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder>( @@ -2149,13 +2139,14 @@ public Builder removeReplicaSelections(int index) { } private boolean autoFailoverDisabled_; + /** * * *
                                -       * If true, Spanner will not route requests to a replica outside the
                                -       * include_replicas list when all of the specified replicas are unavailable
                                -       * or unhealthy. Default value is `false`.
                                +       * If `true`, Spanner doesn't route requests to a replica outside the
                                +       * <`include_replicas` list when all of the specified replicas are
                                +       * unavailable or unhealthy. Default value is `false`.
                                        * 
                                * * bool auto_failover_disabled = 2; @@ -2166,13 +2157,14 @@ public Builder removeReplicaSelections(int index) { public boolean getAutoFailoverDisabled() { return autoFailoverDisabled_; } + /** * * *
                                -       * If true, Spanner will not route requests to a replica outside the
                                -       * include_replicas list when all of the specified replicas are unavailable
                                -       * or unhealthy. Default value is `false`.
                                +       * If `true`, Spanner doesn't route requests to a replica outside the
                                +       * <`include_replicas` list when all of the specified replicas are
                                +       * unavailable or unhealthy. Default value is `false`.
                                        * 
                                * * bool auto_failover_disabled = 2; @@ -2187,13 +2179,14 @@ public Builder setAutoFailoverDisabled(boolean value) { onChanged(); return this; } + /** * * *
                                -       * If true, Spanner will not route requests to a replica outside the
                                -       * include_replicas list when all of the specified replicas are unavailable
                                -       * or unhealthy. Default value is `false`.
                                +       * If `true`, Spanner doesn't route requests to a replica outside the
                                +       * <`include_replicas` list when all of the specified replicas are
                                +       * unavailable or unhealthy. Default value is `false`.
                                        * 
                                * * bool auto_failover_disabled = 2; @@ -2207,18 +2200,6 @@ public Builder clearAutoFailoverDisabled() { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.DirectedReadOptions.IncludeReplicas) } @@ -2289,6 +2270,7 @@ public interface ExcludeReplicasOrBuilder */ java.util.List getReplicaSelectionsList(); + /** * * @@ -2301,6 +2283,7 @@ public interface ExcludeReplicasOrBuilder * */ com.google.spanner.v1.DirectedReadOptions.ReplicaSelection getReplicaSelections(int index); + /** * * @@ -2313,6 +2296,7 @@ public interface ExcludeReplicasOrBuilder * */ int getReplicaSelectionsCount(); + /** * * @@ -2326,6 +2310,7 @@ public interface ExcludeReplicasOrBuilder */ java.util.List getReplicaSelectionsOrBuilderList(); + /** * * @@ -2340,6 +2325,7 @@ public interface ExcludeReplicasOrBuilder com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder getReplicaSelectionsOrBuilder(int index); } + /** * * @@ -2350,13 +2336,24 @@ public interface ExcludeReplicasOrBuilder * * Protobuf type {@code google.spanner.v1.DirectedReadOptions.ExcludeReplicas} */ - public static final class ExcludeReplicas extends com.google.protobuf.GeneratedMessageV3 + public static final class ExcludeReplicas extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.DirectedReadOptions.ExcludeReplicas) ExcludeReplicasOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExcludeReplicas"); + } + // Use ExcludeReplicas.newBuilder() to construct. - private ExcludeReplicas(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ExcludeReplicas(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -2364,19 +2361,13 @@ private ExcludeReplicas() { replicaSelections_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ExcludeReplicas(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_ExcludeReplicas_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_ExcludeReplicas_fieldAccessorTable @@ -2390,6 +2381,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List replicaSelections_; + /** * * @@ -2406,6 +2398,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getReplicaSelectionsList() { return replicaSelections_; } + /** * * @@ -2423,6 +2416,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { getReplicaSelectionsOrBuilderList() { return replicaSelections_; } + /** * * @@ -2438,6 +2432,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getReplicaSelectionsCount() { return replicaSelections_.size(); } + /** * * @@ -2454,6 +2449,7 @@ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection getReplicaSele int index) { return replicaSelections_.get(index); } + /** * * @@ -2575,38 +2571,38 @@ public static com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas parseFro public static com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2630,11 +2626,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2645,8 +2641,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.DirectedReadOptions.ExcludeReplicas} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.DirectedReadOptions.ExcludeReplicas) com.google.spanner.v1.DirectedReadOptions.ExcludeReplicasOrBuilder { @@ -2656,7 +2651,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_ExcludeReplicas_fieldAccessorTable @@ -2668,7 +2663,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -2735,41 +2730,6 @@ private void buildPartial0(com.google.spanner.v1.DirectedReadOptions.ExcludeRepl int from_bitField0_ = bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas) { @@ -2802,8 +2762,8 @@ public Builder mergeFrom(com.google.spanner.v1.DirectedReadOptions.ExcludeReplic replicaSelections_ = other.replicaSelections_; bitField0_ = (bitField0_ & ~0x00000001); replicaSelectionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getReplicaSelectionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetReplicaSelectionsFieldBuilder() : null; } else { replicaSelectionsBuilder_.addAllMessages(other.replicaSelections_); @@ -2881,7 +2841,7 @@ private void ensureReplicaSelectionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ReplicaSelection, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder, com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder> @@ -2906,6 +2866,7 @@ private void ensureReplicaSelectionsIsMutable() { return replicaSelectionsBuilder_.getMessageList(); } } + /** * * @@ -2924,6 +2885,7 @@ public int getReplicaSelectionsCount() { return replicaSelectionsBuilder_.getCount(); } } + /** * * @@ -2943,6 +2905,7 @@ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection getReplicaSele return replicaSelectionsBuilder_.getMessage(index); } } + /** * * @@ -2968,6 +2931,7 @@ public Builder setReplicaSelections( } return this; } + /** * * @@ -2991,6 +2955,7 @@ public Builder setReplicaSelections( } return this; } + /** * * @@ -3016,6 +2981,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -3041,6 +3007,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -3063,6 +3030,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -3086,6 +3054,7 @@ public Builder addReplicaSelections( } return this; } + /** * * @@ -3109,6 +3078,7 @@ public Builder addAllReplicaSelections( } return this; } + /** * * @@ -3130,6 +3100,7 @@ public Builder clearReplicaSelections() { } return this; } + /** * * @@ -3151,6 +3122,7 @@ public Builder removeReplicaSelections(int index) { } return this; } + /** * * @@ -3164,8 +3136,9 @@ public Builder removeReplicaSelections(int index) { */ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder getReplicaSelectionsBuilder(int index) { - return getReplicaSelectionsFieldBuilder().getBuilder(index); + return internalGetReplicaSelectionsFieldBuilder().getBuilder(index); } + /** * * @@ -3185,6 +3158,7 @@ public Builder removeReplicaSelections(int index) { return replicaSelectionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3205,6 +3179,7 @@ public Builder removeReplicaSelections(int index) { return java.util.Collections.unmodifiableList(replicaSelections_); } } + /** * * @@ -3218,10 +3193,11 @@ public Builder removeReplicaSelections(int index) { */ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder addReplicaSelectionsBuilder() { - return getReplicaSelectionsFieldBuilder() + return internalGetReplicaSelectionsFieldBuilder() .addBuilder( com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.getDefaultInstance()); } + /** * * @@ -3235,11 +3211,12 @@ public Builder removeReplicaSelections(int index) { */ public com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder addReplicaSelectionsBuilder(int index) { - return getReplicaSelectionsFieldBuilder() + return internalGetReplicaSelectionsFieldBuilder() .addBuilder( index, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.getDefaultInstance()); } + /** * * @@ -3253,17 +3230,17 @@ public Builder removeReplicaSelections(int index) { */ public java.util.List getReplicaSelectionsBuilderList() { - return getReplicaSelectionsFieldBuilder().getBuilderList(); + return internalGetReplicaSelectionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ReplicaSelection, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder, com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder> - getReplicaSelectionsFieldBuilder() { + internalGetReplicaSelectionsFieldBuilder() { if (replicaSelectionsBuilder_ == null) { replicaSelectionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ReplicaSelection, com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Builder, com.google.spanner.v1.DirectedReadOptions.ReplicaSelectionOrBuilder>( @@ -3276,18 +3253,6 @@ public Builder removeReplicaSelections(int index) { return replicaSelectionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.DirectedReadOptions.ExcludeReplicas) } @@ -3357,6 +3322,7 @@ public enum ReplicasCase private ReplicasCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -3390,15 +3356,16 @@ public ReplicasCase getReplicasCase() { } public static final int INCLUDE_REPLICAS_FIELD_NUMBER = 1; + /** * * *
                                -   * Include_replicas indicates the order of replicas (as they appear in
                                -   * this list) to process the request. If auto_failover_disabled is set to
                                -   * true and all replicas are exhausted without finding a healthy replica,
                                -   * Spanner will wait for a replica in the list to become available, requests
                                -   * may fail due to `DEADLINE_EXCEEDED` errors.
                                +   * `Include_replicas` indicates the order of replicas (as they appear in
                                +   * this list) to process the request. If `auto_failover_disabled` is set to
                                +   * `true` and all replicas are exhausted without finding a healthy replica,
                                +   * Spanner waits for a replica in the list to become available, requests
                                +   * might fail due to `DEADLINE_EXCEEDED` errors.
                                    * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -3409,15 +3376,16 @@ public ReplicasCase getReplicasCase() { public boolean hasIncludeReplicas() { return replicasCase_ == 1; } + /** * * *
                                -   * Include_replicas indicates the order of replicas (as they appear in
                                -   * this list) to process the request. If auto_failover_disabled is set to
                                -   * true and all replicas are exhausted without finding a healthy replica,
                                -   * Spanner will wait for a replica in the list to become available, requests
                                -   * may fail due to `DEADLINE_EXCEEDED` errors.
                                +   * `Include_replicas` indicates the order of replicas (as they appear in
                                +   * this list) to process the request. If `auto_failover_disabled` is set to
                                +   * `true` and all replicas are exhausted without finding a healthy replica,
                                +   * Spanner waits for a replica in the list to become available, requests
                                +   * might fail due to `DEADLINE_EXCEEDED` errors.
                                    * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -3431,15 +3399,16 @@ public com.google.spanner.v1.DirectedReadOptions.IncludeReplicas getIncludeRepli } return com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.getDefaultInstance(); } + /** * * *
                                -   * Include_replicas indicates the order of replicas (as they appear in
                                -   * this list) to process the request. If auto_failover_disabled is set to
                                -   * true and all replicas are exhausted without finding a healthy replica,
                                -   * Spanner will wait for a replica in the list to become available, requests
                                -   * may fail due to `DEADLINE_EXCEEDED` errors.
                                +   * `Include_replicas` indicates the order of replicas (as they appear in
                                +   * this list) to process the request. If `auto_failover_disabled` is set to
                                +   * `true` and all replicas are exhausted without finding a healthy replica,
                                +   * Spanner waits for a replica in the list to become available, requests
                                +   * might fail due to `DEADLINE_EXCEEDED` errors.
                                    * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -3454,12 +3423,13 @@ public com.google.spanner.v1.DirectedReadOptions.IncludeReplicas getIncludeRepli } public static final int EXCLUDE_REPLICAS_FIELD_NUMBER = 2; + /** * * *
                                -   * Exclude_replicas indicates that specified replicas should be excluded
                                -   * from serving requests. Spanner will not route requests to the replicas
                                +   * `Exclude_replicas` indicates that specified replicas should be excluded
                                +   * from serving requests. Spanner doesn't route requests to the replicas
                                    * in this list.
                                    * 
                                * @@ -3471,12 +3441,13 @@ public com.google.spanner.v1.DirectedReadOptions.IncludeReplicas getIncludeRepli public boolean hasExcludeReplicas() { return replicasCase_ == 2; } + /** * * *
                                -   * Exclude_replicas indicates that specified replicas should be excluded
                                -   * from serving requests. Spanner will not route requests to the replicas
                                +   * `Exclude_replicas` indicates that specified replicas should be excluded
                                +   * from serving requests. Spanner doesn't route requests to the replicas
                                    * in this list.
                                    * 
                                * @@ -3491,12 +3462,13 @@ public com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas getExcludeRepli } return com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.getDefaultInstance(); } + /** * * *
                                -   * Exclude_replicas indicates that specified replicas should be excluded
                                -   * from serving requests. Spanner will not route requests to the replicas
                                +   * `Exclude_replicas` indicates that specified replicas should be excluded
                                +   * from serving requests. Spanner doesn't route requests to the replicas
                                    * in this list.
                                    * 
                                * @@ -3642,38 +3614,38 @@ public static com.google.spanner.v1.DirectedReadOptions parseFrom( public static com.google.spanner.v1.DirectedReadOptions parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.DirectedReadOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.DirectedReadOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -3696,24 +3668,25 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -   * The DirectedReadOptions can be used to indicate which replicas or regions
                                +   * The `DirectedReadOptions` can be used to indicate which replicas or regions
                                    * should be used for non-transactional reads or queries.
                                    *
                                -   * DirectedReadOptions may only be specified for a read-only transaction,
                                -   * otherwise the API will return an `INVALID_ARGUMENT` error.
                                +   * `DirectedReadOptions` can only be specified for a read-only transaction,
                                +   * otherwise the API returns an `INVALID_ARGUMENT` error.
                                    * 
                                * * Protobuf type {@code google.spanner.v1.DirectedReadOptions} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.DirectedReadOptions) com.google.spanner.v1.DirectedReadOptionsOrBuilder { @@ -3723,7 +3696,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DirectedReadOptions_fieldAccessorTable @@ -3735,7 +3708,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.DirectedReadOptions.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -3801,39 +3774,6 @@ private void buildPartialOneofs(com.google.spanner.v1.DirectedReadOptions result } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.DirectedReadOptions) { @@ -3890,13 +3830,15 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getIncludeReplicasFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetIncludeReplicasFieldBuilder().getBuilder(), extensionRegistry); replicasCase_ = 1; break; } // case 10 case 18: { - input.readMessage(getExcludeReplicasFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetExcludeReplicasFieldBuilder().getBuilder(), extensionRegistry); replicasCase_ = 2; break; } // case 18 @@ -3933,20 +3875,21 @@ public Builder clearReplicas() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions.IncludeReplicas, com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.Builder, com.google.spanner.v1.DirectedReadOptions.IncludeReplicasOrBuilder> includeReplicasBuilder_; + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -3957,15 +3900,16 @@ public Builder clearReplicas() { public boolean hasIncludeReplicas() { return replicasCase_ == 1; } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -3986,15 +3930,16 @@ public com.google.spanner.v1.DirectedReadOptions.IncludeReplicas getIncludeRepli return com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.getDefaultInstance(); } } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -4013,15 +3958,16 @@ public Builder setIncludeReplicas( replicasCase_ = 1; return this; } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -4037,15 +3983,16 @@ public Builder setIncludeReplicas( replicasCase_ = 1; return this; } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -4075,15 +4022,16 @@ public Builder mergeIncludeReplicas( replicasCase_ = 1; return this; } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -4104,32 +4052,34 @@ public Builder clearIncludeReplicas() { } return this; } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; */ public com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.Builder getIncludeReplicasBuilder() { - return getIncludeReplicasFieldBuilder().getBuilder(); + return internalGetIncludeReplicasFieldBuilder().getBuilder(); } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -4146,31 +4096,32 @@ public Builder clearIncludeReplicas() { return com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.getDefaultInstance(); } } + /** * * *
                                -     * Include_replicas indicates the order of replicas (as they appear in
                                -     * this list) to process the request. If auto_failover_disabled is set to
                                -     * true and all replicas are exhausted without finding a healthy replica,
                                -     * Spanner will wait for a replica in the list to become available, requests
                                -     * may fail due to `DEADLINE_EXCEEDED` errors.
                                +     * `Include_replicas` indicates the order of replicas (as they appear in
                                +     * this list) to process the request. If `auto_failover_disabled` is set to
                                +     * `true` and all replicas are exhausted without finding a healthy replica,
                                +     * Spanner waits for a replica in the list to become available, requests
                                +     * might fail due to `DEADLINE_EXCEEDED` errors.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions.IncludeReplicas, com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.Builder, com.google.spanner.v1.DirectedReadOptions.IncludeReplicasOrBuilder> - getIncludeReplicasFieldBuilder() { + internalGetIncludeReplicasFieldBuilder() { if (includeReplicasBuilder_ == null) { if (!(replicasCase_ == 1)) { replicas_ = com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.getDefaultInstance(); } includeReplicasBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions.IncludeReplicas, com.google.spanner.v1.DirectedReadOptions.IncludeReplicas.Builder, com.google.spanner.v1.DirectedReadOptions.IncludeReplicasOrBuilder>( @@ -4184,17 +4135,18 @@ public Builder clearIncludeReplicas() { return includeReplicasBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas, com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.Builder, com.google.spanner.v1.DirectedReadOptions.ExcludeReplicasOrBuilder> excludeReplicasBuilder_; + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4206,12 +4158,13 @@ public Builder clearIncludeReplicas() { public boolean hasExcludeReplicas() { return replicasCase_ == 2; } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4233,12 +4186,13 @@ public com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas getExcludeRepli return com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.getDefaultInstance(); } } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4258,12 +4212,13 @@ public Builder setExcludeReplicas( replicasCase_ = 2; return this; } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4280,12 +4235,13 @@ public Builder setExcludeReplicas( replicasCase_ = 2; return this; } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4316,12 +4272,13 @@ public Builder mergeExcludeReplicas( replicasCase_ = 2; return this; } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4343,12 +4300,13 @@ public Builder clearExcludeReplicas() { } return this; } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4356,14 +4314,15 @@ public Builder clearExcludeReplicas() { */ public com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.Builder getExcludeReplicasBuilder() { - return getExcludeReplicasFieldBuilder().getBuilder(); + return internalGetExcludeReplicasFieldBuilder().getBuilder(); } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * @@ -4381,29 +4340,30 @@ public Builder clearExcludeReplicas() { return com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.getDefaultInstance(); } } + /** * * *
                                -     * Exclude_replicas indicates that specified replicas should be excluded
                                -     * from serving requests. Spanner will not route requests to the replicas
                                +     * `Exclude_replicas` indicates that specified replicas should be excluded
                                +     * from serving requests. Spanner doesn't route requests to the replicas
                                      * in this list.
                                      * 
                                * * .google.spanner.v1.DirectedReadOptions.ExcludeReplicas exclude_replicas = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas, com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.Builder, com.google.spanner.v1.DirectedReadOptions.ExcludeReplicasOrBuilder> - getExcludeReplicasFieldBuilder() { + internalGetExcludeReplicasFieldBuilder() { if (excludeReplicasBuilder_ == null) { if (!(replicasCase_ == 2)) { replicas_ = com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.getDefaultInstance(); } excludeReplicasBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas, com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas.Builder, com.google.spanner.v1.DirectedReadOptions.ExcludeReplicasOrBuilder>( @@ -4417,17 +4377,6 @@ public Builder clearExcludeReplicas() { return excludeReplicasBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.DirectedReadOptions) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java index 73be3a1be20..879e73f4d58 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface DirectedReadOptionsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.DirectedReadOptions) @@ -28,11 +30,11 @@ public interface DirectedReadOptionsOrBuilder * * *
                                -   * Include_replicas indicates the order of replicas (as they appear in
                                -   * this list) to process the request. If auto_failover_disabled is set to
                                -   * true and all replicas are exhausted without finding a healthy replica,
                                -   * Spanner will wait for a replica in the list to become available, requests
                                -   * may fail due to `DEADLINE_EXCEEDED` errors.
                                +   * `Include_replicas` indicates the order of replicas (as they appear in
                                +   * this list) to process the request. If `auto_failover_disabled` is set to
                                +   * `true` and all replicas are exhausted without finding a healthy replica,
                                +   * Spanner waits for a replica in the list to become available, requests
                                +   * might fail due to `DEADLINE_EXCEEDED` errors.
                                    * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -40,15 +42,16 @@ public interface DirectedReadOptionsOrBuilder * @return Whether the includeReplicas field is set. */ boolean hasIncludeReplicas(); + /** * * *
                                -   * Include_replicas indicates the order of replicas (as they appear in
                                -   * this list) to process the request. If auto_failover_disabled is set to
                                -   * true and all replicas are exhausted without finding a healthy replica,
                                -   * Spanner will wait for a replica in the list to become available, requests
                                -   * may fail due to `DEADLINE_EXCEEDED` errors.
                                +   * `Include_replicas` indicates the order of replicas (as they appear in
                                +   * this list) to process the request. If `auto_failover_disabled` is set to
                                +   * `true` and all replicas are exhausted without finding a healthy replica,
                                +   * Spanner waits for a replica in the list to become available, requests
                                +   * might fail due to `DEADLINE_EXCEEDED` errors.
                                    * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -56,15 +59,16 @@ public interface DirectedReadOptionsOrBuilder * @return The includeReplicas. */ com.google.spanner.v1.DirectedReadOptions.IncludeReplicas getIncludeReplicas(); + /** * * *
                                -   * Include_replicas indicates the order of replicas (as they appear in
                                -   * this list) to process the request. If auto_failover_disabled is set to
                                -   * true and all replicas are exhausted without finding a healthy replica,
                                -   * Spanner will wait for a replica in the list to become available, requests
                                -   * may fail due to `DEADLINE_EXCEEDED` errors.
                                +   * `Include_replicas` indicates the order of replicas (as they appear in
                                +   * this list) to process the request. If `auto_failover_disabled` is set to
                                +   * `true` and all replicas are exhausted without finding a healthy replica,
                                +   * Spanner waits for a replica in the list to become available, requests
                                +   * might fail due to `DEADLINE_EXCEEDED` errors.
                                    * 
                                * * .google.spanner.v1.DirectedReadOptions.IncludeReplicas include_replicas = 1; @@ -75,8 +79,8 @@ public interface DirectedReadOptionsOrBuilder * * *
                                -   * Exclude_replicas indicates that specified replicas should be excluded
                                -   * from serving requests. Spanner will not route requests to the replicas
                                +   * `Exclude_replicas` indicates that specified replicas should be excluded
                                +   * from serving requests. Spanner doesn't route requests to the replicas
                                    * in this list.
                                    * 
                                * @@ -85,12 +89,13 @@ public interface DirectedReadOptionsOrBuilder * @return Whether the excludeReplicas field is set. */ boolean hasExcludeReplicas(); + /** * * *
                                -   * Exclude_replicas indicates that specified replicas should be excluded
                                -   * from serving requests. Spanner will not route requests to the replicas
                                +   * `Exclude_replicas` indicates that specified replicas should be excluded
                                +   * from serving requests. Spanner doesn't route requests to the replicas
                                    * in this list.
                                    * 
                                * @@ -99,12 +104,13 @@ public interface DirectedReadOptionsOrBuilder * @return The excludeReplicas. */ com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas getExcludeReplicas(); + /** * * *
                                -   * Exclude_replicas indicates that specified replicas should be excluded
                                -   * from serving requests. Spanner will not route requests to the replicas
                                +   * `Exclude_replicas` indicates that specified replicas should be excluded
                                +   * from serving requests. Spanner doesn't route requests to the replicas
                                    * in this list.
                                    * 
                                * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java index 55cce1f9922..8c038e860af 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.ExecuteBatchDmlRequest} */ -public final class ExecuteBatchDmlRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ExecuteBatchDmlRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ExecuteBatchDmlRequest) ExecuteBatchDmlRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExecuteBatchDmlRequest"); + } + // Use ExecuteBatchDmlRequest.newBuilder() to construct. - private ExecuteBatchDmlRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ExecuteBatchDmlRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private ExecuteBatchDmlRequest() { statements_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ExecuteBatchDmlRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_fieldAccessorTable @@ -81,6 +88,7 @@ public interface StatementOrBuilder * @return The sql. */ java.lang.String getSql(); + /** * * @@ -104,12 +112,12 @@ public interface StatementOrBuilder * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 2; @@ -117,6 +125,7 @@ public interface StatementOrBuilder * @return Whether the params field is set. */ boolean hasParams(); + /** * * @@ -127,12 +136,12 @@ public interface StatementOrBuilder * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 2; @@ -140,6 +149,7 @@ public interface StatementOrBuilder * @return The params. */ com.google.protobuf.Struct getParams(); + /** * * @@ -150,12 +160,12 @@ public interface StatementOrBuilder * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 2; @@ -166,8 +176,8 @@ public interface StatementOrBuilder * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -181,12 +191,13 @@ public interface StatementOrBuilder
                                      * map<string, .google.spanner.v1.Type> param_types = 3;
                                      */
                                     int getParamTypesCount();
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -200,15 +211,17 @@ public interface StatementOrBuilder
                                      * map<string, .google.spanner.v1.Type> param_types = 3;
                                      */
                                     boolean containsParamTypes(java.lang.String key);
                                +
                                     /** Use {@link #getParamTypesMap()} instead. */
                                     @java.lang.Deprecated
                                     java.util.Map getParamTypes();
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -222,12 +235,13 @@ public interface StatementOrBuilder
                                      * map<string, .google.spanner.v1.Type> param_types = 3;
                                      */
                                     java.util.Map getParamTypesMap();
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -245,12 +259,13 @@ com.google.spanner.v1.Type getParamTypesOrDefault(
                                         java.lang.String key,
                                         /* nullable */
                                         com.google.spanner.v1.Type defaultValue);
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -265,6 +280,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault(
                                      */
                                     com.google.spanner.v1.Type getParamTypesOrThrow(java.lang.String key);
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -274,13 +290,24 @@ com.google.spanner.v1.Type getParamTypesOrDefault(
                                    *
                                    * Protobuf type {@code google.spanner.v1.ExecuteBatchDmlRequest.Statement}
                                    */
                                -  public static final class Statement extends com.google.protobuf.GeneratedMessageV3
                                +  public static final class Statement extends com.google.protobuf.GeneratedMessage
                                       implements
                                       // @@protoc_insertion_point(message_implements:google.spanner.v1.ExecuteBatchDmlRequest.Statement)
                                       StatementOrBuilder {
                                     private static final long serialVersionUID = 0L;
                                +
                                +    static {
                                +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                                +          com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
                                +          /* major= */ 4,
                                +          /* minor= */ 33,
                                +          /* patch= */ 2,
                                +          /* suffix= */ "",
                                +          "Statement");
                                +    }
                                +
                                     // Use Statement.newBuilder() to construct.
                                -    private Statement(com.google.protobuf.GeneratedMessageV3.Builder builder) {
                                +    private Statement(com.google.protobuf.GeneratedMessage.Builder builder) {
                                       super(builder);
                                     }
                                 
                                @@ -288,12 +315,6 @@ private Statement() {
                                       sql_ = "";
                                     }
                                 
                                -    @java.lang.Override
                                -    @SuppressWarnings({"unused"})
                                -    protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
                                -      return new Statement();
                                -    }
                                -
                                     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
                                       return com.google.spanner.v1.SpannerProto
                                           .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_descriptor;
                                @@ -312,7 +333,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl
                                     }
                                 
                                     @java.lang.Override
                                -    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
                                +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
                                         internalGetFieldAccessorTable() {
                                       return com.google.spanner.v1.SpannerProto
                                           .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_fieldAccessorTable
                                @@ -326,6 +347,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl
                                 
                                     @SuppressWarnings("serial")
                                     private volatile java.lang.Object sql_ = "";
                                +
                                     /**
                                      *
                                      *
                                @@ -349,6 +371,7 @@ public java.lang.String getSql() {
                                         return s;
                                       }
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -375,6 +398,7 @@ public com.google.protobuf.ByteString getSqlBytes() {
                                 
                                     public static final int PARAMS_FIELD_NUMBER = 2;
                                     private com.google.protobuf.Struct params_;
                                +
                                     /**
                                      *
                                      *
                                @@ -385,12 +409,12 @@ public com.google.protobuf.ByteString getSqlBytes() {
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The
                                +     * Parameters can appear anywhere that a literal value is expected. The
                                      * same parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * * .google.protobuf.Struct params = 2; @@ -401,6 +425,7 @@ public com.google.protobuf.ByteString getSqlBytes() { public boolean hasParams() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -411,12 +436,12 @@ public boolean hasParams() { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 2; @@ -427,6 +452,7 @@ public boolean hasParams() { public com.google.protobuf.Struct getParams() { return params_ == null ? com.google.protobuf.Struct.getDefaultInstance() : params_; } + /** * * @@ -437,12 +463,12 @@ public com.google.protobuf.Struct getParams() { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 2; @@ -482,12 +508,13 @@ private static final class ParamTypesDefaultEntryHolder { public int getParamTypesCount() { return internalGetParamTypes().getMap().size(); } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -507,18 +534,20 @@ public boolean containsParamTypes(java.lang.String key) {
                                       }
                                       return internalGetParamTypes().getMap().containsKey(key);
                                     }
                                +
                                     /** Use {@link #getParamTypesMap()} instead. */
                                     @java.lang.Override
                                     @java.lang.Deprecated
                                     public java.util.Map getParamTypes() {
                                       return getParamTypesMap();
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -535,12 +564,13 @@ public java.util.Map getParamTypes
                                     public java.util.Map getParamTypesMap() {
                                       return internalGetParamTypes().getMap();
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -565,12 +595,13 @@ public java.util.Map getParamTypes
                                           internalGetParamTypes().getMap();
                                       return map.containsKey(key) ? map.get(key) : defaultValue;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                      * JSON strings.
                                @@ -610,13 +641,13 @@ public final boolean isInitialized() {
                                 
                                     @java.lang.Override
                                     public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
                                -      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) {
                                -        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sql_);
                                +      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) {
                                +        com.google.protobuf.GeneratedMessage.writeString(output, 1, sql_);
                                       }
                                       if (((bitField0_ & 0x00000001) != 0)) {
                                         output.writeMessage(2, getParams());
                                       }
                                -      com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(
                                +      com.google.protobuf.GeneratedMessage.serializeStringMapTo(
                                           output, internalGetParamTypes(), ParamTypesDefaultEntryHolder.defaultEntry, 3);
                                       getUnknownFields().writeTo(output);
                                     }
                                @@ -627,8 +658,8 @@ public int getSerializedSize() {
                                       if (size != -1) return size;
                                 
                                       size = 0;
                                -      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) {
                                -        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sql_);
                                +      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) {
                                +        size += com.google.protobuf.GeneratedMessage.computeStringSize(1, sql_);
                                       }
                                       if (((bitField0_ & 0x00000001) != 0)) {
                                         size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getParams());
                                @@ -728,38 +759,38 @@ public static com.google.spanner.v1.ExecuteBatchDmlRequest.Statement parseFrom(
                                 
                                     public static com.google.spanner.v1.ExecuteBatchDmlRequest.Statement parseFrom(
                                         java.io.InputStream input) throws java.io.IOException {
                                -      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
                                +      return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
                                     }
                                 
                                     public static com.google.spanner.v1.ExecuteBatchDmlRequest.Statement parseFrom(
                                         java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                         throws java.io.IOException {
                                -      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
                                +      return com.google.protobuf.GeneratedMessage.parseWithIOException(
                                           PARSER, input, extensionRegistry);
                                     }
                                 
                                     public static com.google.spanner.v1.ExecuteBatchDmlRequest.Statement parseDelimitedFrom(
                                         java.io.InputStream input) throws java.io.IOException {
                                -      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
                                +      return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
                                     }
                                 
                                     public static com.google.spanner.v1.ExecuteBatchDmlRequest.Statement parseDelimitedFrom(
                                         java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                         throws java.io.IOException {
                                -      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
                                +      return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(
                                           PARSER, input, extensionRegistry);
                                     }
                                 
                                     public static com.google.spanner.v1.ExecuteBatchDmlRequest.Statement parseFrom(
                                         com.google.protobuf.CodedInputStream input) throws java.io.IOException {
                                -      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
                                +      return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
                                     }
                                 
                                     public static com.google.spanner.v1.ExecuteBatchDmlRequest.Statement parseFrom(
                                         com.google.protobuf.CodedInputStream input,
                                         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                         throws java.io.IOException {
                                -      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
                                +      return com.google.protobuf.GeneratedMessage.parseWithIOException(
                                           PARSER, input, extensionRegistry);
                                     }
                                 
                                @@ -783,11 +814,11 @@ public Builder toBuilder() {
                                     }
                                 
                                     @java.lang.Override
                                -    protected Builder newBuilderForType(
                                -        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                                +    protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                                       Builder builder = new Builder(parent);
                                       return builder;
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -797,8 +828,7 @@ protected Builder newBuilderForType(
                                      *
                                      * Protobuf type {@code google.spanner.v1.ExecuteBatchDmlRequest.Statement}
                                      */
                                -    public static final class Builder
                                -        extends com.google.protobuf.GeneratedMessageV3.Builder
                                +    public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder
                                         implements
                                         // @@protoc_insertion_point(builder_implements:google.spanner.v1.ExecuteBatchDmlRequest.Statement)
                                         com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder {
                                @@ -830,7 +860,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi
                                       }
                                 
                                       @java.lang.Override
                                -      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
                                +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
                                           internalGetFieldAccessorTable() {
                                         return com.google.spanner.v1.SpannerProto
                                             .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_fieldAccessorTable
                                @@ -844,14 +874,14 @@ private Builder() {
                                         maybeForceBuilderInitialization();
                                       }
                                 
                                -      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                                +      private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                                         super(parent);
                                         maybeForceBuilderInitialization();
                                       }
                                 
                                       private void maybeForceBuilderInitialization() {
                                -        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
                                -          getParamsFieldBuilder();
                                +        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                                +          internalGetParamsFieldBuilder();
                                         }
                                       }
                                 
                                @@ -917,41 +947,6 @@ private void buildPartial0(com.google.spanner.v1.ExecuteBatchDmlRequest.Statemen
                                         result.bitField0_ |= to_bitField0_;
                                       }
                                 
                                -      @java.lang.Override
                                -      public Builder clone() {
                                -        return super.clone();
                                -      }
                                -
                                -      @java.lang.Override
                                -      public Builder setField(
                                -          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
                                -        return super.setField(field, value);
                                -      }
                                -
                                -      @java.lang.Override
                                -      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
                                -        return super.clearField(field);
                                -      }
                                -
                                -      @java.lang.Override
                                -      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
                                -        return super.clearOneof(oneof);
                                -      }
                                -
                                -      @java.lang.Override
                                -      public Builder setRepeatedField(
                                -          com.google.protobuf.Descriptors.FieldDescriptor field,
                                -          int index,
                                -          java.lang.Object value) {
                                -        return super.setRepeatedField(field, index, value);
                                -      }
                                -
                                -      @java.lang.Override
                                -      public Builder addRepeatedField(
                                -          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
                                -        return super.addRepeatedField(field, value);
                                -      }
                                -
                                       @java.lang.Override
                                       public Builder mergeFrom(com.google.protobuf.Message other) {
                                         if (other instanceof com.google.spanner.v1.ExecuteBatchDmlRequest.Statement) {
                                @@ -1009,7 +1004,8 @@ public Builder mergeFrom(
                                                 } // case 10
                                               case 18:
                                                 {
                                -                  input.readMessage(getParamsFieldBuilder().getBuilder(), extensionRegistry);
                                +                  input.readMessage(
                                +                      internalGetParamsFieldBuilder().getBuilder(), extensionRegistry);
                                                   bitField0_ |= 0x00000002;
                                                   break;
                                                 } // case 18
                                @@ -1046,6 +1042,7 @@ public Builder mergeFrom(
                                       private int bitField0_;
                                 
                                       private java.lang.Object sql_ = "";
                                +
                                       /**
                                        *
                                        *
                                @@ -1068,6 +1065,7 @@ public java.lang.String getSql() {
                                           return (java.lang.String) ref;
                                         }
                                       }
                                +
                                       /**
                                        *
                                        *
                                @@ -1090,6 +1088,7 @@ public com.google.protobuf.ByteString getSqlBytes() {
                                           return (com.google.protobuf.ByteString) ref;
                                         }
                                       }
                                +
                                       /**
                                        *
                                        *
                                @@ -1111,6 +1110,7 @@ public Builder setSql(java.lang.String value) {
                                         onChanged();
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                @@ -1128,6 +1128,7 @@ public Builder clearSql() {
                                         onChanged();
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                @@ -1152,11 +1153,12 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) {
                                       }
                                 
                                       private com.google.protobuf.Struct params_;
                                -      private com.google.protobuf.SingleFieldBuilderV3<
                                +      private com.google.protobuf.SingleFieldBuilder<
                                               com.google.protobuf.Struct,
                                               com.google.protobuf.Struct.Builder,
                                               com.google.protobuf.StructOrBuilder>
                                           paramsBuilder_;
                                +
                                       /**
                                        *
                                        *
                                @@ -1167,12 +1169,12 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) {
                                        * parameter name (for example, `@firstName`). Parameter names can contain
                                        * letters, numbers, and underscores.
                                        *
                                -       * Parameters can appear anywhere that a literal value is expected.  The
                                +       * Parameters can appear anywhere that a literal value is expected. The
                                        * same parameter name can be used more than once, for example:
                                        *
                                        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                        *
                                -       * It is an error to execute a SQL statement with unbound parameters.
                                +       * It's an error to execute a SQL statement with unbound parameters.
                                        * 
                                * * .google.protobuf.Struct params = 2; @@ -1182,6 +1184,7 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { public boolean hasParams() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1192,12 +1195,12 @@ public boolean hasParams() { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 2; @@ -1211,6 +1214,7 @@ public com.google.protobuf.Struct getParams() { return paramsBuilder_.getMessage(); } } + /** * * @@ -1221,12 +1225,12 @@ public com.google.protobuf.Struct getParams() { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 2; @@ -1244,6 +1248,7 @@ public Builder setParams(com.google.protobuf.Struct value) { onChanged(); return this; } + /** * * @@ -1254,12 +1259,12 @@ public Builder setParams(com.google.protobuf.Struct value) { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 2; @@ -1274,6 +1279,7 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -1284,12 +1290,12 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 2; @@ -1312,6 +1318,7 @@ public Builder mergeParams(com.google.protobuf.Struct value) { } return this; } + /** * * @@ -1322,12 +1329,12 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 2; @@ -1342,6 +1349,7 @@ public Builder clearParams() { onChanged(); return this; } + /** * * @@ -1352,12 +1360,12 @@ public Builder clearParams() { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 2; @@ -1365,8 +1373,9 @@ public Builder clearParams() { public com.google.protobuf.Struct.Builder getParamsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getParamsFieldBuilder().getBuilder(); + return internalGetParamsFieldBuilder().getBuilder(); } + /** * * @@ -1377,12 +1386,12 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 2; @@ -1394,6 +1403,7 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { return params_ == null ? com.google.protobuf.Struct.getDefaultInstance() : params_; } } + /** * * @@ -1404,24 +1414,24 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * parameter name (for example, `@firstName`). Parameter names can contain * letters, numbers, and underscores. * - * Parameters can appear anywhere that a literal value is expected. The + * Parameters can appear anywhere that a literal value is expected. The * same parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> - getParamsFieldBuilder() { + internalGetParamsFieldBuilder() { if (paramsBuilder_ == null) { paramsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>( @@ -1447,7 +1457,8 @@ public com.google.spanner.v1.Type build(com.google.spanner.v1.TypeOrBuilder val) defaultEntry() { return ParamTypesDefaultEntryHolder.defaultEntry; } - }; + } + ; private static final ParamTypesConverter paramTypesConverter = new ParamTypesConverter(); @@ -1487,12 +1498,13 @@ public com.google.spanner.v1.Type build(com.google.spanner.v1.TypeOrBuilder val) public int getParamTypesCount() { return internalGetParamTypes().ensureBuilderMap().size(); } + /** * * *
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1512,18 +1524,20 @@ public boolean containsParamTypes(java.lang.String key) {
                                         }
                                         return internalGetParamTypes().ensureBuilderMap().containsKey(key);
                                       }
                                +
                                       /** Use {@link #getParamTypesMap()} instead. */
                                       @java.lang.Override
                                       @java.lang.Deprecated
                                       public java.util.Map getParamTypes() {
                                         return getParamTypesMap();
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1540,12 +1554,13 @@ public java.util.Map getParamTypes
                                       public java.util.Map getParamTypesMap() {
                                         return internalGetParamTypes().getImmutableMap();
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1570,12 +1585,13 @@ public java.util.Map getParamTypes
                                             internalGetMutableParamTypes().ensureBuilderMap();
                                         return map.containsKey(key) ? paramTypesConverter.build(map.get(key)) : defaultValue;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1606,12 +1622,13 @@ public Builder clearParamTypes() {
                                         internalGetMutableParamTypes().clear();
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1631,18 +1648,20 @@ public Builder removeParamTypes(java.lang.String key) {
                                         internalGetMutableParamTypes().ensureBuilderMap().remove(key);
                                         return this;
                                       }
                                +
                                       /** Use alternate mutation accessors instead. */
                                       @java.lang.Deprecated
                                       public java.util.Map getMutableParamTypes() {
                                         bitField0_ |= 0x00000004;
                                         return internalGetMutableParamTypes().ensureMessageMap();
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1666,12 +1685,13 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va
                                         bitField0_ |= 0x00000004;
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1696,12 +1716,13 @@ public Builder putAllParamTypes(
                                         bitField0_ |= 0x00000004;
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * It is not always possible for Cloud Spanner to infer the right SQL type
                                -       * from a JSON value.  For example, values of type `BYTES` and values
                                +       * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +       * from a JSON value. For example, values of type `BYTES` and values
                                        * of type `STRING` both appear in
                                        * [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as
                                        * JSON strings.
                                @@ -1729,18 +1750,6 @@ public com.google.spanner.v1.Type.Builder putParamTypesBuilderIfAbsent(java.lang
                                         return (com.google.spanner.v1.Type.Builder) entry;
                                       }
                                 
                                -      @java.lang.Override
                                -      public final Builder setUnknownFields(
                                -          final com.google.protobuf.UnknownFieldSet unknownFields) {
                                -        return super.setUnknownFields(unknownFields);
                                -      }
                                -
                                -      @java.lang.Override
                                -      public final Builder mergeUnknownFields(
                                -          final com.google.protobuf.UnknownFieldSet unknownFields) {
                                -        return super.mergeUnknownFields(unknownFields);
                                -      }
                                -
                                       // @@protoc_insertion_point(builder_scope:google.spanner.v1.ExecuteBatchDmlRequest.Statement)
                                     }
                                 
                                @@ -1798,6 +1807,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getDefaultInstance
                                 
                                   @SuppressWarnings("serial")
                                   private volatile java.lang.Object session_ = "";
                                +
                                   /**
                                    *
                                    *
                                @@ -1823,6 +1833,7 @@ public java.lang.String getSession() {
                                       return s;
                                     }
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -1851,6 +1862,7 @@ public com.google.protobuf.ByteString getSessionBytes() {
                                 
                                   public static final int TRANSACTION_FIELD_NUMBER = 2;
                                   private com.google.spanner.v1.TransactionSelector transaction_;
                                +
                                   /**
                                    *
                                    *
                                @@ -1872,6 +1884,7 @@ public com.google.protobuf.ByteString getSessionBytes() {
                                   public boolean hasTransaction() {
                                     return ((bitField0_ & 0x00000001) != 0);
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -1895,6 +1908,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() {
                                         ? com.google.spanner.v1.TransactionSelector.getDefaultInstance()
                                         : transaction_;
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -1921,6 +1935,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
                                 
                                   @SuppressWarnings("serial")
                                   private java.util.List statements_;
                                +
                                   /**
                                    *
                                    *
                                @@ -1942,6 +1957,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
                                       getStatementsList() {
                                     return statements_;
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -1963,6 +1979,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
                                       getStatementsOrBuilderList() {
                                     return statements_;
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -1983,6 +2000,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
                                   public int getStatementsCount() {
                                     return statements_.size();
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -2003,6 +2021,7 @@ public int getStatementsCount() {
                                   public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getStatements(int index) {
                                     return statements_.get(index);
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -2027,18 +2046,19 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem
                                 
                                   public static final int SEQNO_FIELD_NUMBER = 4;
                                   private long seqno_ = 0L;
                                +
                                   /**
                                    *
                                    *
                                    * 
                                    * Required. A per-transaction sequence number used to identify this request.
                                    * This field makes each request idempotent such that if the request is
                                -   * received multiple times, at most one will succeed.
                                +   * received multiple times, at most one succeeds.
                                    *
                                    * The sequence number must be monotonically increasing within the
                                    * transaction. If a request arrives for the first time with an out-of-order
                                -   * sequence number, the transaction may be aborted. Replays of previously
                                -   * handled requests will yield the same response as the first execution.
                                +   * sequence number, the transaction might be aborted. Replays of previously
                                +   * handled requests yield the same response as the first execution.
                                    * 
                                * * int64 seqno = 4 [(.google.api.field_behavior) = REQUIRED]; @@ -2052,6 +2072,7 @@ public long getSeqno() { public static final int REQUEST_OPTIONS_FIELD_NUMBER = 5; private com.google.spanner.v1.RequestOptions requestOptions_; + /** * * @@ -2067,6 +2088,7 @@ public long getSeqno() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -2084,6 +2106,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { ? com.google.spanner.v1.RequestOptions.getDefaultInstance() : requestOptions_; } + /** * * @@ -2102,19 +2125,20 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public static final int LAST_STATEMENTS_FIELD_NUMBER = 6; private boolean lastStatements_ = false; + /** * * *
                                -   * Optional. If set to true, this request marks the end of the transaction.
                                -   * The transaction should be committed or aborted after these statements
                                -   * execute, and attempts to execute any other requests against this
                                -   * transaction (including reads and queries) will be rejected.
                                -   *
                                -   * Setting this option may cause some error reporting to be deferred until
                                -   * commit time (e.g. validation of unique constraints). Given this, successful
                                -   * execution of statements should not be assumed until a subsequent Commit
                                -   * call completes successfully.
                                +   * Optional. If set to `true`, this request marks the end of the transaction.
                                +   * After these statements execute, you must commit or abort the transaction.
                                +   * Attempts to execute any other requests against this transaction
                                +   * (including reads and queries) are rejected.
                                +   *
                                +   * Setting this option might cause some error reporting to be deferred until
                                +   * commit time (for example, validation of unique constraints). Given this,
                                +   * successful execution of statements shouldn't be assumed until a subsequent
                                +   * `Commit` call completes successfully.
                                    * 
                                * * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -2140,8 +2164,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getTransaction()); @@ -2167,8 +2191,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTransaction()); @@ -2284,38 +2308,38 @@ public static com.google.spanner.v1.ExecuteBatchDmlRequest parseFrom( public static com.google.spanner.v1.ExecuteBatchDmlRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteBatchDmlRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteBatchDmlRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteBatchDmlRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteBatchDmlRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteBatchDmlRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2338,10 +2362,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2351,7 +2376,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.ExecuteBatchDmlRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ExecuteBatchDmlRequest) com.google.spanner.v1.ExecuteBatchDmlRequestOrBuilder { @@ -2361,7 +2386,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_fieldAccessorTable @@ -2375,16 +2400,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTransactionFieldBuilder(); - getStatementsFieldBuilder(); - getRequestOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTransactionFieldBuilder(); + internalGetStatementsFieldBuilder(); + internalGetRequestOptionsFieldBuilder(); } } @@ -2484,39 +2509,6 @@ private void buildPartial0(com.google.spanner.v1.ExecuteBatchDmlRequest result) result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ExecuteBatchDmlRequest) { @@ -2556,8 +2548,8 @@ public Builder mergeFrom(com.google.spanner.v1.ExecuteBatchDmlRequest other) { statements_ = other.statements_; bitField0_ = (bitField0_ & ~0x00000004); statementsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getStatementsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetStatementsFieldBuilder() : null; } else { statementsBuilder_.addAllMessages(other.statements_); @@ -2607,7 +2599,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTransactionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -2633,7 +2626,8 @@ public Builder mergeFrom( } // case 32 case 42: { - input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 @@ -2663,6 +2657,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -2687,6 +2682,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -2711,6 +2707,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2734,6 +2731,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2753,6 +2751,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -2779,11 +2778,12 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.TransactionSelector transaction_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> transactionBuilder_; + /** * * @@ -2804,6 +2804,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -2830,6 +2831,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { return transactionBuilder_.getMessage(); } } + /** * * @@ -2858,6 +2860,7 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { onChanged(); return this; } + /** * * @@ -2884,6 +2887,7 @@ public Builder setTransaction( onChanged(); return this; } + /** * * @@ -2917,6 +2921,7 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) } return this; } + /** * * @@ -2942,6 +2947,7 @@ public Builder clearTransaction() { onChanged(); return this; } + /** * * @@ -2960,8 +2966,9 @@ public Builder clearTransaction() { public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTransactionFieldBuilder().getBuilder(); + return internalGetTransactionFieldBuilder().getBuilder(); } + /** * * @@ -2986,6 +2993,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde : transaction_; } } + /** * * @@ -3001,14 +3009,14 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * .google.spanner.v1.TransactionSelector transaction = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> - getTransactionFieldBuilder() { + internalGetTransactionFieldBuilder() { if (transactionBuilder_ == null) { transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder>( @@ -3030,7 +3038,7 @@ private void ensureStatementsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.ExecuteBatchDmlRequest.Statement, com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder, com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder> @@ -3060,6 +3068,7 @@ private void ensureStatementsIsMutable() { return statementsBuilder_.getMessageList(); } } + /** * * @@ -3083,6 +3092,7 @@ public int getStatementsCount() { return statementsBuilder_.getCount(); } } + /** * * @@ -3106,6 +3116,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getStatements(int return statementsBuilder_.getMessage(index); } } + /** * * @@ -3136,6 +3147,7 @@ public Builder setStatements( } return this; } + /** * * @@ -3163,6 +3175,7 @@ public Builder setStatements( } return this; } + /** * * @@ -3192,6 +3205,7 @@ public Builder addStatements(com.google.spanner.v1.ExecuteBatchDmlRequest.Statem } return this; } + /** * * @@ -3222,6 +3236,7 @@ public Builder addStatements( } return this; } + /** * * @@ -3249,6 +3264,7 @@ public Builder addStatements( } return this; } + /** * * @@ -3276,6 +3292,7 @@ public Builder addStatements( } return this; } + /** * * @@ -3304,6 +3321,7 @@ public Builder addAllStatements( } return this; } + /** * * @@ -3330,6 +3348,7 @@ public Builder clearStatements() { } return this; } + /** * * @@ -3356,6 +3375,7 @@ public Builder removeStatements(int index) { } return this; } + /** * * @@ -3374,8 +3394,9 @@ public Builder removeStatements(int index) { */ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder getStatementsBuilder( int index) { - return getStatementsFieldBuilder().getBuilder(index); + return internalGetStatementsFieldBuilder().getBuilder(index); } + /** * * @@ -3400,6 +3421,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem return statementsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3424,6 +3446,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem return java.util.Collections.unmodifiableList(statements_); } } + /** * * @@ -3441,9 +3464,10 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem * */ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStatementsBuilder() { - return getStatementsFieldBuilder() + return internalGetStatementsFieldBuilder() .addBuilder(com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.getDefaultInstance()); } + /** * * @@ -3462,10 +3486,11 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme */ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStatementsBuilder( int index) { - return getStatementsFieldBuilder() + return internalGetStatementsFieldBuilder() .addBuilder( index, com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.getDefaultInstance()); } + /** * * @@ -3484,17 +3509,17 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme */ public java.util.List getStatementsBuilderList() { - return getStatementsFieldBuilder().getBuilderList(); + return internalGetStatementsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.ExecuteBatchDmlRequest.Statement, com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder, com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder> - getStatementsFieldBuilder() { + internalGetStatementsFieldBuilder() { if (statementsBuilder_ == null) { statementsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.ExecuteBatchDmlRequest.Statement, com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder, com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder>( @@ -3505,18 +3530,19 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme } private long seqno_; + /** * * *
                                      * Required. A per-transaction sequence number used to identify this request.
                                      * This field makes each request idempotent such that if the request is
                                -     * received multiple times, at most one will succeed.
                                +     * received multiple times, at most one succeeds.
                                      *
                                      * The sequence number must be monotonically increasing within the
                                      * transaction. If a request arrives for the first time with an out-of-order
                                -     * sequence number, the transaction may be aborted. Replays of previously
                                -     * handled requests will yield the same response as the first execution.
                                +     * sequence number, the transaction might be aborted. Replays of previously
                                +     * handled requests yield the same response as the first execution.
                                      * 
                                * * int64 seqno = 4 [(.google.api.field_behavior) = REQUIRED]; @@ -3527,18 +3553,19 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme public long getSeqno() { return seqno_; } + /** * * *
                                      * Required. A per-transaction sequence number used to identify this request.
                                      * This field makes each request idempotent such that if the request is
                                -     * received multiple times, at most one will succeed.
                                +     * received multiple times, at most one succeeds.
                                      *
                                      * The sequence number must be monotonically increasing within the
                                      * transaction. If a request arrives for the first time with an out-of-order
                                -     * sequence number, the transaction may be aborted. Replays of previously
                                -     * handled requests will yield the same response as the first execution.
                                +     * sequence number, the transaction might be aborted. Replays of previously
                                +     * handled requests yield the same response as the first execution.
                                      * 
                                * * int64 seqno = 4 [(.google.api.field_behavior) = REQUIRED]; @@ -3553,18 +3580,19 @@ public Builder setSeqno(long value) { onChanged(); return this; } + /** * * *
                                      * Required. A per-transaction sequence number used to identify this request.
                                      * This field makes each request idempotent such that if the request is
                                -     * received multiple times, at most one will succeed.
                                +     * received multiple times, at most one succeeds.
                                      *
                                      * The sequence number must be monotonically increasing within the
                                      * transaction. If a request arrives for the first time with an out-of-order
                                -     * sequence number, the transaction may be aborted. Replays of previously
                                -     * handled requests will yield the same response as the first execution.
                                +     * sequence number, the transaction might be aborted. Replays of previously
                                +     * handled requests yield the same response as the first execution.
                                      * 
                                * * int64 seqno = 4 [(.google.api.field_behavior) = REQUIRED]; @@ -3579,11 +3607,12 @@ public Builder clearSeqno() { } private com.google.spanner.v1.RequestOptions requestOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> requestOptionsBuilder_; + /** * * @@ -3598,6 +3627,7 @@ public Builder clearSeqno() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -3618,6 +3648,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { return requestOptionsBuilder_.getMessage(); } } + /** * * @@ -3640,6 +3671,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { onChanged(); return this; } + /** * * @@ -3659,6 +3691,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder bu onChanged(); return this; } + /** * * @@ -3686,6 +3719,7 @@ public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { } return this; } + /** * * @@ -3705,6 +3739,7 @@ public Builder clearRequestOptions() { onChanged(); return this; } + /** * * @@ -3717,8 +3752,9 @@ public Builder clearRequestOptions() { public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getRequestOptionsFieldBuilder().getBuilder(); + return internalGetRequestOptionsFieldBuilder().getBuilder(); } + /** * * @@ -3737,6 +3773,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } } + /** * * @@ -3746,14 +3783,14 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( * * .google.spanner.v1.RequestOptions request_options = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> - getRequestOptionsFieldBuilder() { + internalGetRequestOptionsFieldBuilder() { if (requestOptionsBuilder_ == null) { requestOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder>( @@ -3764,19 +3801,20 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( } private boolean lastStatements_; + /** * * *
                                -     * Optional. If set to true, this request marks the end of the transaction.
                                -     * The transaction should be committed or aborted after these statements
                                -     * execute, and attempts to execute any other requests against this
                                -     * transaction (including reads and queries) will be rejected.
                                +     * Optional. If set to `true`, this request marks the end of the transaction.
                                +     * After these statements execute, you must commit or abort the transaction.
                                +     * Attempts to execute any other requests against this transaction
                                +     * (including reads and queries) are rejected.
                                      *
                                -     * Setting this option may cause some error reporting to be deferred until
                                -     * commit time (e.g. validation of unique constraints). Given this, successful
                                -     * execution of statements should not be assumed until a subsequent Commit
                                -     * call completes successfully.
                                +     * Setting this option might cause some error reporting to be deferred until
                                +     * commit time (for example, validation of unique constraints). Given this,
                                +     * successful execution of statements shouldn't be assumed until a subsequent
                                +     * `Commit` call completes successfully.
                                      * 
                                * * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -3787,19 +3825,20 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean getLastStatements() { return lastStatements_; } + /** * * *
                                -     * Optional. If set to true, this request marks the end of the transaction.
                                -     * The transaction should be committed or aborted after these statements
                                -     * execute, and attempts to execute any other requests against this
                                -     * transaction (including reads and queries) will be rejected.
                                +     * Optional. If set to `true`, this request marks the end of the transaction.
                                +     * After these statements execute, you must commit or abort the transaction.
                                +     * Attempts to execute any other requests against this transaction
                                +     * (including reads and queries) are rejected.
                                      *
                                -     * Setting this option may cause some error reporting to be deferred until
                                -     * commit time (e.g. validation of unique constraints). Given this, successful
                                -     * execution of statements should not be assumed until a subsequent Commit
                                -     * call completes successfully.
                                +     * Setting this option might cause some error reporting to be deferred until
                                +     * commit time (for example, validation of unique constraints). Given this,
                                +     * successful execution of statements shouldn't be assumed until a subsequent
                                +     * `Commit` call completes successfully.
                                      * 
                                * * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -3814,19 +3853,20 @@ public Builder setLastStatements(boolean value) { onChanged(); return this; } + /** * * *
                                -     * Optional. If set to true, this request marks the end of the transaction.
                                -     * The transaction should be committed or aborted after these statements
                                -     * execute, and attempts to execute any other requests against this
                                -     * transaction (including reads and queries) will be rejected.
                                +     * Optional. If set to `true`, this request marks the end of the transaction.
                                +     * After these statements execute, you must commit or abort the transaction.
                                +     * Attempts to execute any other requests against this transaction
                                +     * (including reads and queries) are rejected.
                                      *
                                -     * Setting this option may cause some error reporting to be deferred until
                                -     * commit time (e.g. validation of unique constraints). Given this, successful
                                -     * execution of statements should not be assumed until a subsequent Commit
                                -     * call completes successfully.
                                +     * Setting this option might cause some error reporting to be deferred until
                                +     * commit time (for example, validation of unique constraints). Given this,
                                +     * successful execution of statements shouldn't be assumed until a subsequent
                                +     * `Commit` call completes successfully.
                                      * 
                                * * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -3840,17 +3880,6 @@ public Builder clearLastStatements() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.ExecuteBatchDmlRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java index db35333cf19..ca03a10204d 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ExecuteBatchDmlRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ExecuteBatchDmlRequest) @@ -38,6 +40,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -71,6 +74,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -89,6 +93,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * @return The transaction. */ com.google.spanner.v1.TransactionSelector getTransaction(); + /** * * @@ -123,6 +128,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * */ java.util.List getStatementsList(); + /** * * @@ -140,6 +146,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * */ com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getStatements(int index); + /** * * @@ -157,6 +164,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * */ int getStatementsCount(); + /** * * @@ -175,6 +183,7 @@ public interface ExecuteBatchDmlRequestOrBuilder */ java.util.List getStatementsOrBuilderList(); + /** * * @@ -199,12 +208,12 @@ public interface ExecuteBatchDmlRequestOrBuilder *
                                    * Required. A per-transaction sequence number used to identify this request.
                                    * This field makes each request idempotent such that if the request is
                                -   * received multiple times, at most one will succeed.
                                +   * received multiple times, at most one succeeds.
                                    *
                                    * The sequence number must be monotonically increasing within the
                                    * transaction. If a request arrives for the first time with an out-of-order
                                -   * sequence number, the transaction may be aborted. Replays of previously
                                -   * handled requests will yield the same response as the first execution.
                                +   * sequence number, the transaction might be aborted. Replays of previously
                                +   * handled requests yield the same response as the first execution.
                                    * 
                                * * int64 seqno = 4 [(.google.api.field_behavior) = REQUIRED]; @@ -225,6 +234,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * @return Whether the requestOptions field is set. */ boolean hasRequestOptions(); + /** * * @@ -237,6 +247,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * @return The requestOptions. */ com.google.spanner.v1.RequestOptions getRequestOptions(); + /** * * @@ -252,15 +263,15 @@ public interface ExecuteBatchDmlRequestOrBuilder * * *
                                -   * Optional. If set to true, this request marks the end of the transaction.
                                -   * The transaction should be committed or aborted after these statements
                                -   * execute, and attempts to execute any other requests against this
                                -   * transaction (including reads and queries) will be rejected.
                                -   *
                                -   * Setting this option may cause some error reporting to be deferred until
                                -   * commit time (e.g. validation of unique constraints). Given this, successful
                                -   * execution of statements should not be assumed until a subsequent Commit
                                -   * call completes successfully.
                                +   * Optional. If set to `true`, this request marks the end of the transaction.
                                +   * After these statements execute, you must commit or abort the transaction.
                                +   * Attempts to execute any other requests against this transaction
                                +   * (including reads and queries) are rejected.
                                +   *
                                +   * Setting this option might cause some error reporting to be deferred until
                                +   * commit time (for example, validation of unique constraints). Given this,
                                +   * successful execution of statements shouldn't be assumed until a subsequent
                                +   * `Commit` call completes successfully.
                                    * 
                                * * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java index 8fed7627083..49a517a8aa3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -34,11 +35,11 @@ * * 1. Check the status in the response message. The * [google.rpc.Code][google.rpc.Code] enum - * value `OK` indicates that all statements were executed successfully. + * value `OK` indicates that all statements were executed successfully. * 2. If the status was not `OK`, check the number of result sets in the - * response. If the response contains `N` - * [ResultSet][google.spanner.v1.ResultSet] messages, then statement `N+1` in - * the request failed. + * response. If the response contains `N` + * [ResultSet][google.spanner.v1.ResultSet] messages, then statement `N+1` in + * the request failed. * * Example 1: * @@ -51,20 +52,32 @@ * * Request: 5 DML statements. The third statement has a syntax error. * * Response: 2 [ResultSet][google.spanner.v1.ResultSet] messages, and a syntax * error (`INVALID_ARGUMENT`) - * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages - * indicates that the third statement failed, and the fourth and fifth - * statements were not executed. + * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages + * indicates that the third statement failed, and the fourth and fifth + * statements were not executed. *
                                * * Protobuf type {@code google.spanner.v1.ExecuteBatchDmlResponse} */ -public final class ExecuteBatchDmlResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ExecuteBatchDmlResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ExecuteBatchDmlResponse) ExecuteBatchDmlResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExecuteBatchDmlResponse"); + } + // Use ExecuteBatchDmlResponse.newBuilder() to construct. - private ExecuteBatchDmlResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ExecuteBatchDmlResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -72,19 +85,13 @@ private ExecuteBatchDmlResponse() { resultSets_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ExecuteBatchDmlResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlResponse_fieldAccessorTable @@ -98,6 +105,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List resultSets_; + /** * * @@ -119,6 +127,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getResultSetsList() { return resultSets_; } + /** * * @@ -141,6 +150,7 @@ public java.util.List getResultSetsList() { getResultSetsOrBuilderList() { return resultSets_; } + /** * * @@ -162,6 +172,7 @@ public java.util.List getResultSetsList() { public int getResultSetsCount() { return resultSets_.size(); } + /** * * @@ -183,6 +194,7 @@ public int getResultSetsCount() { public com.google.spanner.v1.ResultSet getResultSets(int index) { return resultSets_.get(index); } + /** * * @@ -207,6 +219,7 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index public static final int STATUS_FIELD_NUMBER = 2; private com.google.rpc.Status status_; + /** * * @@ -223,6 +236,7 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index public boolean hasStatus() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -239,6 +253,7 @@ public boolean hasStatus() { public com.google.rpc.Status getStatus() { return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; } + /** * * @@ -256,17 +271,15 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public static final int PRECOMMIT_TOKEN_FIELD_NUMBER = 3; private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * is on a multiplexed session. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt should be passed to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -279,17 +292,15 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * is on a multiplexed session. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt should be passed to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -304,17 +315,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( ? com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance() : precommitToken_; } + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * is on a multiplexed session. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt should be passed to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -460,38 +469,38 @@ public static com.google.spanner.v1.ExecuteBatchDmlResponse parseFrom( public static com.google.spanner.v1.ExecuteBatchDmlResponse parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteBatchDmlResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteBatchDmlResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteBatchDmlResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteBatchDmlResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteBatchDmlResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -514,10 +523,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -533,11 +543,11 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * 1. Check the status in the response message. The * [google.rpc.Code][google.rpc.Code] enum - * value `OK` indicates that all statements were executed successfully. + * value `OK` indicates that all statements were executed successfully. * 2. If the status was not `OK`, check the number of result sets in the - * response. If the response contains `N` - * [ResultSet][google.spanner.v1.ResultSet] messages, then statement `N+1` in - * the request failed. + * response. If the response contains `N` + * [ResultSet][google.spanner.v1.ResultSet] messages, then statement `N+1` in + * the request failed. * * Example 1: * @@ -550,14 +560,14 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Request: 5 DML statements. The third statement has a syntax error. * * Response: 2 [ResultSet][google.spanner.v1.ResultSet] messages, and a syntax * error (`INVALID_ARGUMENT`) - * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages - * indicates that the third statement failed, and the fourth and fifth - * statements were not executed. + * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages + * indicates that the third statement failed, and the fourth and fifth + * statements were not executed. *
                                * * Protobuf type {@code google.spanner.v1.ExecuteBatchDmlResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ExecuteBatchDmlResponse) com.google.spanner.v1.ExecuteBatchDmlResponseOrBuilder { @@ -567,7 +577,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlResponse_fieldAccessorTable @@ -581,16 +591,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getResultSetsFieldBuilder(); - getStatusFieldBuilder(); - getPrecommitTokenFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetResultSetsFieldBuilder(); + internalGetStatusFieldBuilder(); + internalGetPrecommitTokenFieldBuilder(); } } @@ -677,39 +687,6 @@ private void buildPartial0(com.google.spanner.v1.ExecuteBatchDmlResponse result) result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ExecuteBatchDmlResponse) { @@ -741,8 +718,8 @@ public Builder mergeFrom(com.google.spanner.v1.ExecuteBatchDmlResponse other) { resultSets_ = other.resultSets_; bitField0_ = (bitField0_ & ~0x00000001); resultSetsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getResultSetsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetResultSetsFieldBuilder() : null; } else { resultSetsBuilder_.addAllMessages(other.resultSets_); @@ -795,13 +772,14 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getStatusFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetStatusFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -834,7 +812,7 @@ private void ensureResultSetsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.ResultSet, com.google.spanner.v1.ResultSet.Builder, com.google.spanner.v1.ResultSetOrBuilder> @@ -864,6 +842,7 @@ public java.util.List getResultSetsList() { return resultSetsBuilder_.getMessageList(); } } + /** * * @@ -888,6 +867,7 @@ public int getResultSetsCount() { return resultSetsBuilder_.getCount(); } } + /** * * @@ -912,6 +892,7 @@ public com.google.spanner.v1.ResultSet getResultSets(int index) { return resultSetsBuilder_.getMessage(index); } } + /** * * @@ -942,6 +923,7 @@ public Builder setResultSets(int index, com.google.spanner.v1.ResultSet value) { } return this; } + /** * * @@ -970,6 +952,7 @@ public Builder setResultSets( } return this; } + /** * * @@ -1000,6 +983,7 @@ public Builder addResultSets(com.google.spanner.v1.ResultSet value) { } return this; } + /** * * @@ -1030,6 +1014,7 @@ public Builder addResultSets(int index, com.google.spanner.v1.ResultSet value) { } return this; } + /** * * @@ -1057,6 +1042,7 @@ public Builder addResultSets(com.google.spanner.v1.ResultSet.Builder builderForV } return this; } + /** * * @@ -1085,6 +1071,7 @@ public Builder addResultSets( } return this; } + /** * * @@ -1113,6 +1100,7 @@ public Builder addAllResultSets( } return this; } + /** * * @@ -1140,6 +1128,7 @@ public Builder clearResultSets() { } return this; } + /** * * @@ -1167,6 +1156,7 @@ public Builder removeResultSets(int index) { } return this; } + /** * * @@ -1185,8 +1175,9 @@ public Builder removeResultSets(int index) { * repeated .google.spanner.v1.ResultSet result_sets = 1; */ public com.google.spanner.v1.ResultSet.Builder getResultSetsBuilder(int index) { - return getResultSetsFieldBuilder().getBuilder(index); + return internalGetResultSetsFieldBuilder().getBuilder(index); } + /** * * @@ -1211,6 +1202,7 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index return resultSetsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1236,6 +1228,7 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index return java.util.Collections.unmodifiableList(resultSets_); } } + /** * * @@ -1254,9 +1247,10 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index * repeated .google.spanner.v1.ResultSet result_sets = 1; */ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder() { - return getResultSetsFieldBuilder() + return internalGetResultSetsFieldBuilder() .addBuilder(com.google.spanner.v1.ResultSet.getDefaultInstance()); } + /** * * @@ -1275,9 +1269,10 @@ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder() { * repeated .google.spanner.v1.ResultSet result_sets = 1; */ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder(int index) { - return getResultSetsFieldBuilder() + return internalGetResultSetsFieldBuilder() .addBuilder(index, com.google.spanner.v1.ResultSet.getDefaultInstance()); } + /** * * @@ -1296,17 +1291,17 @@ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder(int index) { * repeated .google.spanner.v1.ResultSet result_sets = 1; */ public java.util.List getResultSetsBuilderList() { - return getResultSetsFieldBuilder().getBuilderList(); + return internalGetResultSetsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.ResultSet, com.google.spanner.v1.ResultSet.Builder, com.google.spanner.v1.ResultSetOrBuilder> - getResultSetsFieldBuilder() { + internalGetResultSetsFieldBuilder() { if (resultSetsBuilder_ == null) { resultSetsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.ResultSet, com.google.spanner.v1.ResultSet.Builder, com.google.spanner.v1.ResultSetOrBuilder>( @@ -1317,9 +1312,10 @@ public java.util.List getResultSetsBuil } private com.google.rpc.Status status_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> statusBuilder_; + /** * * @@ -1335,6 +1331,7 @@ public java.util.List getResultSetsBuil public boolean hasStatus() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1354,6 +1351,7 @@ public com.google.rpc.Status getStatus() { return statusBuilder_.getMessage(); } } + /** * * @@ -1377,6 +1375,7 @@ public Builder setStatus(com.google.rpc.Status value) { onChanged(); return this; } + /** * * @@ -1397,6 +1396,7 @@ public Builder setStatus(com.google.rpc.Status.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -1425,6 +1425,7 @@ public Builder mergeStatus(com.google.rpc.Status value) { } return this; } + /** * * @@ -1445,6 +1446,7 @@ public Builder clearStatus() { onChanged(); return this; } + /** * * @@ -1458,8 +1460,9 @@ public Builder clearStatus() { public com.google.rpc.Status.Builder getStatusBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getStatusFieldBuilder().getBuilder(); + return internalGetStatusFieldBuilder().getBuilder(); } + /** * * @@ -1477,6 +1480,7 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; } } + /** * * @@ -1487,12 +1491,12 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { * * .google.rpc.Status status = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> - getStatusFieldBuilder() { + internalGetStatusFieldBuilder() { if (statusBuilder_ == null) { statusBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder>(getStatus(), getParentForChildren(), isClean()); @@ -1502,22 +1506,20 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { } private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> precommitTokenBuilder_; + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1529,17 +1531,15 @@ public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1557,17 +1557,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( return precommitTokenBuilder_.getMessage(); } } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1587,17 +1585,15 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1615,17 +1611,15 @@ public Builder setPrecommitToken( onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1652,17 +1646,15 @@ public Builder mergePrecommitToken( } return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1679,17 +1671,15 @@ public Builder clearPrecommitToken() { onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1700,19 +1690,17 @@ public Builder clearPrecommitToken() { getPrecommitTokenBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getPrecommitTokenFieldBuilder().getBuilder(); + return internalGetPrecommitTokenFieldBuilder().getBuilder(); } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1729,31 +1717,29 @@ public Builder clearPrecommitToken() { : precommitToken_; } } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * is on a multiplexed session. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt should be passed to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> - getPrecommitTokenFieldBuilder() { + internalGetPrecommitTokenFieldBuilder() { if (precommitTokenBuilder_ == null) { precommitTokenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder>( @@ -1763,17 +1749,6 @@ public Builder clearPrecommitToken() { return precommitTokenBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.ExecuteBatchDmlResponse) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java index 6b7dbfe17a8..5fe10121554 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ExecuteBatchDmlResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ExecuteBatchDmlResponse) @@ -42,6 +44,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * repeated .google.spanner.v1.ResultSet result_sets = 1; */ java.util.List getResultSetsList(); + /** * * @@ -60,6 +63,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * repeated .google.spanner.v1.ResultSet result_sets = 1; */ com.google.spanner.v1.ResultSet getResultSets(int index); + /** * * @@ -78,6 +82,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * repeated .google.spanner.v1.ResultSet result_sets = 1; */ int getResultSetsCount(); + /** * * @@ -96,6 +101,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * repeated .google.spanner.v1.ResultSet result_sets = 1; */ java.util.List getResultSetsOrBuilderList(); + /** * * @@ -128,6 +134,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * @return Whether the status field is set. */ boolean hasStatus(); + /** * * @@ -141,6 +148,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * @return The status. */ com.google.rpc.Status getStatus(); + /** * * @@ -157,13 +165,10 @@ public interface ExecuteBatchDmlResponseOrBuilder * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * is on a multiplexed session. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt should be passed to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -173,17 +178,15 @@ public interface ExecuteBatchDmlResponseOrBuilder * @return Whether the precommitToken field is set. */ boolean hasPrecommitToken(); + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * is on a multiplexed session. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt should be passed to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -193,17 +196,15 @@ public interface ExecuteBatchDmlResponseOrBuilder * @return The precommitToken. */ com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken(); + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * is on a multiplexed session. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt should be passed to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java index 1f31567db20..c4fb3c56ef0 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.ExecuteSqlRequest} */ -public final class ExecuteSqlRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ExecuteSqlRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ExecuteSqlRequest) ExecuteSqlRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExecuteSqlRequest"); + } + // Use ExecuteSqlRequest.newBuilder() to construct. - private ExecuteSqlRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ExecuteSqlRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -47,12 +60,6 @@ private ExecuteSqlRequest() { partitionToken_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ExecuteSqlRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_descriptor; @@ -71,7 +78,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_fieldAccessorTable @@ -117,7 +124,7 @@ public enum QueryMode implements com.google.protobuf.ProtocolMessageEnum { *
                                      * This mode returns the query plan, overall execution statistics,
                                      * operator level execution statistics along with the results. This has a
                                -     * performance overhead compared to the other modes. It is not recommended
                                +     * performance overhead compared to the other modes. It isn't recommended
                                      * to use this mode for production traffic.
                                      * 
                                * @@ -149,6 +156,16 @@ public enum QueryMode implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryMode"); + } + /** * * @@ -159,6 +176,7 @@ public enum QueryMode implements com.google.protobuf.ProtocolMessageEnum { * NORMAL = 0; */ public static final int NORMAL_VALUE = 0; + /** * * @@ -170,19 +188,21 @@ public enum QueryMode implements com.google.protobuf.ProtocolMessageEnum { * PLAN = 1; */ public static final int PLAN_VALUE = 1; + /** * * *
                                      * This mode returns the query plan, overall execution statistics,
                                      * operator level execution statistics along with the results. This has a
                                -     * performance overhead compared to the other modes. It is not recommended
                                +     * performance overhead compared to the other modes. It isn't recommended
                                      * to use this mode for production traffic.
                                      * 
                                * * PROFILE = 2; */ public static final int PROFILE_VALUE = 2; + /** * * @@ -194,6 +214,7 @@ public enum QueryMode implements com.google.protobuf.ProtocolMessageEnum { * WITH_STATS = 3; */ public static final int WITH_STATS_VALUE = 3; + /** * * @@ -268,7 +289,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.ExecuteSqlRequest.getDescriptor().getEnumTypes().get(0); } @@ -314,7 +335,7 @@ public interface QueryOptionsOrBuilder * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -331,6 +352,7 @@ public interface QueryOptionsOrBuilder * @return The optimizerVersion. */ java.lang.String getOptimizerVersion(); + /** * * @@ -347,7 +369,7 @@ public interface QueryOptionsOrBuilder * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -377,13 +399,13 @@ public interface QueryOptionsOrBuilder * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -400,6 +422,7 @@ public interface QueryOptionsOrBuilder * @return The optimizerStatisticsPackage. */ java.lang.String getOptimizerStatisticsPackage(); + /** * * @@ -412,13 +435,13 @@ public interface QueryOptionsOrBuilder * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -436,6 +459,7 @@ public interface QueryOptionsOrBuilder */ com.google.protobuf.ByteString getOptimizerStatisticsPackageBytes(); } + /** * * @@ -445,13 +469,24 @@ public interface QueryOptionsOrBuilder * * Protobuf type {@code google.spanner.v1.ExecuteSqlRequest.QueryOptions} */ - public static final class QueryOptions extends com.google.protobuf.GeneratedMessageV3 + public static final class QueryOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ExecuteSqlRequest.QueryOptions) QueryOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryOptions"); + } + // Use QueryOptions.newBuilder() to construct. - private QueryOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private QueryOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -460,19 +495,13 @@ private QueryOptions() { optimizerStatisticsPackage_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new QueryOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_QueryOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_QueryOptions_fieldAccessorTable @@ -485,6 +514,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object optimizerVersion_ = ""; + /** * * @@ -501,7 +531,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -529,6 +559,7 @@ public java.lang.String getOptimizerVersion() { return s; } } + /** * * @@ -545,7 +576,7 @@ public java.lang.String getOptimizerVersion() { * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -578,6 +609,7 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { @SuppressWarnings("serial") private volatile java.lang.Object optimizerStatisticsPackage_ = ""; + /** * * @@ -590,13 +622,13 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -624,6 +656,7 @@ public java.lang.String getOptimizerStatisticsPackage() { return s; } } + /** * * @@ -636,13 +669,13 @@ public java.lang.String getOptimizerStatisticsPackage() { * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -685,11 +718,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(optimizerVersion_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, optimizerVersion_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(optimizerVersion_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, optimizerVersion_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(optimizerStatisticsPackage_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, optimizerStatisticsPackage_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(optimizerStatisticsPackage_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, optimizerStatisticsPackage_); } getUnknownFields().writeTo(output); } @@ -700,13 +733,12 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(optimizerVersion_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, optimizerVersion_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(optimizerVersion_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, optimizerVersion_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(optimizerStatisticsPackage_)) { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(optimizerStatisticsPackage_)) { size += - com.google.protobuf.GeneratedMessageV3.computeStringSize( - 2, optimizerStatisticsPackage_); + com.google.protobuf.GeneratedMessage.computeStringSize(2, optimizerStatisticsPackage_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -784,38 +816,38 @@ public static com.google.spanner.v1.ExecuteSqlRequest.QueryOptions parseFrom( public static com.google.spanner.v1.ExecuteSqlRequest.QueryOptions parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteSqlRequest.QueryOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteSqlRequest.QueryOptions parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteSqlRequest.QueryOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteSqlRequest.QueryOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteSqlRequest.QueryOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -839,11 +871,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -853,8 +885,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.ExecuteSqlRequest.QueryOptions} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ExecuteSqlRequest.QueryOptions) com.google.spanner.v1.ExecuteSqlRequest.QueryOptionsOrBuilder { @@ -864,7 +895,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_QueryOptions_fieldAccessorTable @@ -876,7 +907,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -930,41 +961,6 @@ private void buildPartial0(com.google.spanner.v1.ExecuteSqlRequest.QueryOptions } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ExecuteSqlRequest.QueryOptions) { @@ -1046,6 +1042,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object optimizerVersion_ = ""; + /** * * @@ -1062,7 +1059,7 @@ public Builder mergeFrom( * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -1089,6 +1086,7 @@ public java.lang.String getOptimizerVersion() { return (java.lang.String) ref; } } + /** * * @@ -1105,7 +1103,7 @@ public java.lang.String getOptimizerVersion() { * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -1132,6 +1130,7 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1148,7 +1147,7 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -1174,6 +1173,7 @@ public Builder setOptimizerVersion(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1190,7 +1190,7 @@ public Builder setOptimizerVersion(java.lang.String value) { * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -1212,6 +1212,7 @@ public Builder clearOptimizerVersion() { onChanged(); return this; } + /** * * @@ -1228,7 +1229,7 @@ public Builder clearOptimizerVersion() { * overrides the default optimizer version for query execution. * * The list of supported optimizer versions can be queried from - * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + * `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. * * Executing a SQL statement with an invalid optimizer version fails with * an `INVALID_ARGUMENT` error. @@ -1257,6 +1258,7 @@ public Builder setOptimizerVersionBytes(com.google.protobuf.ByteString value) { } private java.lang.Object optimizerStatisticsPackage_ = ""; + /** * * @@ -1269,13 +1271,13 @@ public Builder setOptimizerVersionBytes(com.google.protobuf.ByteString value) { * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -1302,6 +1304,7 @@ public java.lang.String getOptimizerStatisticsPackage() { return (java.lang.String) ref; } } + /** * * @@ -1314,13 +1317,13 @@ public java.lang.String getOptimizerStatisticsPackage() { * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -1347,6 +1350,7 @@ public com.google.protobuf.ByteString getOptimizerStatisticsPackageBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1359,13 +1363,13 @@ public com.google.protobuf.ByteString getOptimizerStatisticsPackageBytes() { * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -1391,6 +1395,7 @@ public Builder setOptimizerStatisticsPackage(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1403,13 +1408,13 @@ public Builder setOptimizerStatisticsPackage(java.lang.String value) { * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -1431,6 +1436,7 @@ public Builder clearOptimizerStatisticsPackage() { onChanged(); return this; } + /** * * @@ -1443,13 +1449,13 @@ public Builder clearOptimizerStatisticsPackage() { * Specifying `latest` as a value instructs Cloud Spanner to use the latest * generated statistics package. If not specified, Cloud Spanner uses * the statistics package set at the database level options, or the latest - * package if the database option is not set. + * package if the database option isn't set. * * The statistics package requested by the query has to be exempt from * garbage collection. This can be achieved with the following DDL * statement: * - * ``` + * ```sql * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false) * ``` * @@ -1477,18 +1483,6 @@ public Builder setOptimizerStatisticsPackageBytes(com.google.protobuf.ByteString return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.ExecuteSqlRequest.QueryOptions) } @@ -1546,6 +1540,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions getDefaultInstanceFo @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -1571,6 +1566,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -1599,6 +1595,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public static final int TRANSACTION_FIELD_NUMBER = 2; private com.google.spanner.v1.TransactionSelector transaction_; + /** * * @@ -1609,7 +1606,7 @@ public com.google.protobuf.ByteString getSessionBytes() { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -1623,6 +1620,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public boolean hasTransaction() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1633,7 +1631,7 @@ public boolean hasTransaction() { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -1649,6 +1647,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { ? com.google.spanner.v1.TransactionSelector.getDefaultInstance() : transaction_; } + /** * * @@ -1659,7 +1658,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -1678,6 +1677,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde @SuppressWarnings("serial") private volatile java.lang.Object sql_ = ""; + /** * * @@ -1701,6 +1701,7 @@ public java.lang.String getSql() { return s; } } + /** * * @@ -1727,6 +1728,7 @@ public com.google.protobuf.ByteString getSqlBytes() { public static final int PARAMS_FIELD_NUMBER = 4; private com.google.protobuf.Struct params_; + /** * * @@ -1738,12 +1740,12 @@ public com.google.protobuf.ByteString getSqlBytes() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -1754,6 +1756,7 @@ public com.google.protobuf.ByteString getSqlBytes() { public boolean hasParams() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1765,12 +1768,12 @@ public boolean hasParams() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -1781,6 +1784,7 @@ public boolean hasParams() { public com.google.protobuf.Struct getParams() { return params_ == null ? com.google.protobuf.Struct.getDefaultInstance() : params_; } + /** * * @@ -1792,12 +1796,12 @@ public com.google.protobuf.Struct getParams() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -1836,16 +1840,17 @@ private static final class ParamTypesDefaultEntryHolder { public int getParamTypesCount() { return internalGetParamTypes().getMap().size(); } + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -1860,22 +1865,24 @@ public boolean containsParamTypes(java.lang.String key) {
                                     }
                                     return internalGetParamTypes().getMap().containsKey(key);
                                   }
                                +
                                   /** Use {@link #getParamTypesMap()} instead. */
                                   @java.lang.Override
                                   @java.lang.Deprecated
                                   public java.util.Map getParamTypes() {
                                     return getParamTypesMap();
                                   }
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -1887,16 +1894,17 @@ public java.util.Map getParamTypes
                                   public java.util.Map getParamTypesMap() {
                                     return internalGetParamTypes().getMap();
                                   }
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -1916,16 +1924,17 @@ public java.util.Map getParamTypes
                                         internalGetParamTypes().getMap();
                                     return map.containsKey(key) ? map.get(key) : defaultValue;
                                   }
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -1948,6 +1957,7 @@ public com.google.spanner.v1.Type getParamTypesOrThrow(java.lang.String key) {
                                 
                                   public static final int RESUME_TOKEN_FIELD_NUMBER = 6;
                                   private com.google.protobuf.ByteString resumeToken_ = com.google.protobuf.ByteString.EMPTY;
                                +
                                   /**
                                    *
                                    *
                                @@ -1971,6 +1981,7 @@ public com.google.protobuf.ByteString getResumeToken() {
                                 
                                   public static final int QUERY_MODE_FIELD_NUMBER = 7;
                                   private int queryMode_ = 0;
                                +
                                   /**
                                    *
                                    *
                                @@ -1991,6 +2002,7 @@ public com.google.protobuf.ByteString getResumeToken() {
                                   public int getQueryModeValue() {
                                     return queryMode_;
                                   }
                                +
                                   /**
                                    *
                                    *
                                @@ -2016,14 +2028,15 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryMode getQueryMode() {
                                 
                                   public static final int PARTITION_TOKEN_FIELD_NUMBER = 8;
                                   private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY;
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * If present, results will be restricted to the specified partition
                                -   * previously created using PartitionQuery().  There must be an exact
                                +   * If present, results are restricted to the specified partition
                                +   * previously created using `PartitionQuery`. There must be an exact
                                    * match for the values of fields common to this message and the
                                -   * PartitionQueryRequest message used to create this partition_token.
                                +   * `PartitionQueryRequest` message used to create this `partition_token`.
                                    * 
                                * * bytes partition_token = 8; @@ -2037,18 +2050,19 @@ public com.google.protobuf.ByteString getPartitionToken() { public static final int SEQNO_FIELD_NUMBER = 9; private long seqno_ = 0L; + /** * * *
                                    * A per-transaction sequence number used to identify this request. This field
                                    * makes each request idempotent such that if the request is received multiple
                                -   * times, at most one will succeed.
                                +   * times, at most one succeeds.
                                    *
                                    * The sequence number must be monotonically increasing within the
                                    * transaction. If a request arrives for the first time with an out-of-order
                                -   * sequence number, the transaction may be aborted. Replays of previously
                                -   * handled requests will yield the same response as the first execution.
                                +   * sequence number, the transaction can be aborted. Replays of previously
                                +   * handled requests yield the same response as the first execution.
                                    *
                                    * Required for DML statements. Ignored for queries.
                                    * 
                                @@ -2064,6 +2078,7 @@ public long getSeqno() { public static final int QUERY_OPTIONS_FIELD_NUMBER = 10; private com.google.spanner.v1.ExecuteSqlRequest.QueryOptions queryOptions_; + /** * * @@ -2079,6 +2094,7 @@ public long getSeqno() { public boolean hasQueryOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -2096,6 +2112,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions getQueryOptions() { ? com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.getDefaultInstance() : queryOptions_; } + /** * * @@ -2114,6 +2131,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptionsOrBuilder getQueryOpt public static final int REQUEST_OPTIONS_FIELD_NUMBER = 11; private com.google.spanner.v1.RequestOptions requestOptions_; + /** * * @@ -2129,6 +2147,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptionsOrBuilder getQueryOpt public boolean hasRequestOptions() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -2146,6 +2165,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { ? com.google.spanner.v1.RequestOptions.getDefaultInstance() : requestOptions_; } + /** * * @@ -2164,6 +2184,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public static final int DIRECTED_READ_OPTIONS_FIELD_NUMBER = 15; private com.google.spanner.v1.DirectedReadOptions directedReadOptions_; + /** * * @@ -2179,6 +2200,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasDirectedReadOptions() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -2196,6 +2218,7 @@ public com.google.spanner.v1.DirectedReadOptions getDirectedReadOptions() { ? com.google.spanner.v1.DirectedReadOptions.getDefaultInstance() : directedReadOptions_; } + /** * * @@ -2214,6 +2237,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions public static final int DATA_BOOST_ENABLED_FIELD_NUMBER = 16; private boolean dataBoostEnabled_ = false; + /** * * @@ -2221,7 +2245,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions * If this is for a partitioned query and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. *
                                * @@ -2236,19 +2260,20 @@ public boolean getDataBoostEnabled() { public static final int LAST_STATEMENT_FIELD_NUMBER = 17; private boolean lastStatement_ = false; + /** * * *
                                -   * Optional. If set to true, this statement marks the end of the transaction.
                                -   * The transaction should be committed or aborted after this statement
                                -   * executes, and attempts to execute any other requests against this
                                -   * transaction (including reads and queries) will be rejected.
                                -   *
                                -   * For DML statements, setting this option may cause some error reporting to
                                -   * be deferred until commit time (e.g. validation of unique constraints).
                                -   * Given this, successful execution of a DML statement should not be assumed
                                -   * until a subsequent Commit call completes successfully.
                                +   * Optional. If set to `true`, this statement marks the end of the
                                +   * transaction. After this statement executes, you must commit or abort the
                                +   * transaction. Attempts to execute any other requests against this
                                +   * transaction (including reads and queries) are rejected.
                                +   *
                                +   * For DML statements, setting this option might cause some error reporting to
                                +   * be deferred until commit time (for example, validation of unique
                                +   * constraints). Given this, successful execution of a DML statement shouldn't
                                +   * be assumed until a subsequent `Commit` call completes successfully.
                                    * 
                                * * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; @@ -2260,6 +2285,80 @@ public boolean getLastStatement() { return lastStatement_; } + public static final int ROUTING_HINT_FIELD_NUMBER = 18; + private com.google.spanner.v1.RoutingHint routingHint_; + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + @java.lang.Override + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00000020) != 0); + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHint getRoutingHint() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -2274,19 +2373,19 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, sql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, sql_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(4, getParams()); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetParamTypes(), ParamTypesDefaultEntryHolder.defaultEntry, 5); if (!resumeToken_.isEmpty()) { output.writeBytes(6, resumeToken_); @@ -2315,6 +2414,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (lastStatement_ != false) { output.writeBool(17, lastStatement_); } + if (((bitField0_ & 0x00000020) != 0)) { + output.writeMessage(18, getRoutingHint()); + } getUnknownFields().writeTo(output); } @@ -2324,14 +2426,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, sql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, sql_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getParams()); @@ -2374,6 +2476,9 @@ public int getSerializedSize() { if (lastStatement_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(17, lastStatement_); } + if (((bitField0_ & 0x00000020) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(18, getRoutingHint()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -2418,6 +2523,10 @@ public boolean equals(final java.lang.Object obj) { } if (getDataBoostEnabled() != other.getDataBoostEnabled()) return false; if (getLastStatement() != other.getLastStatement()) return false; + if (hasRoutingHint() != other.hasRoutingHint()) return false; + if (hasRoutingHint()) { + if (!getRoutingHint().equals(other.getRoutingHint())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -2469,6 +2578,10 @@ public int hashCode() { hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDataBoostEnabled()); hash = (37 * hash) + LAST_STATEMENT_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getLastStatement()); + if (hasRoutingHint()) { + hash = (37 * hash) + ROUTING_HINT_FIELD_NUMBER; + hash = (53 * hash) + getRoutingHint().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -2511,38 +2624,38 @@ public static com.google.spanner.v1.ExecuteSqlRequest parseFrom( public static com.google.spanner.v1.ExecuteSqlRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteSqlRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteSqlRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteSqlRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ExecuteSqlRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ExecuteSqlRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2565,10 +2678,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2579,7 +2693,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.ExecuteSqlRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ExecuteSqlRequest) com.google.spanner.v1.ExecuteSqlRequestOrBuilder { @@ -2611,7 +2725,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_fieldAccessorTable @@ -2625,18 +2739,19 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTransactionFieldBuilder(); - getParamsFieldBuilder(); - getQueryOptionsFieldBuilder(); - getRequestOptionsFieldBuilder(); - getDirectedReadOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTransactionFieldBuilder(); + internalGetParamsFieldBuilder(); + internalGetQueryOptionsFieldBuilder(); + internalGetRequestOptionsFieldBuilder(); + internalGetDirectedReadOptionsFieldBuilder(); + internalGetRoutingHintFieldBuilder(); } } @@ -2678,6 +2793,11 @@ public Builder clear() { } dataBoostEnabled_ = false; lastStatement_ = false; + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } return this; } @@ -2769,42 +2889,14 @@ private void buildPartial0(com.google.spanner.v1.ExecuteSqlRequest result) { if (((from_bitField0_ & 0x00002000) != 0)) { result.lastStatement_ = lastStatement_; } + if (((from_bitField0_ & 0x00004000) != 0)) { + result.routingHint_ = + routingHintBuilder_ == null ? routingHint_ : routingHintBuilder_.build(); + to_bitField0_ |= 0x00000020; + } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ExecuteSqlRequest) { @@ -2835,13 +2927,13 @@ public Builder mergeFrom(com.google.spanner.v1.ExecuteSqlRequest other) { } internalGetMutableParamTypes().mergeFrom(other.internalGetParamTypes()); bitField0_ |= 0x00000010; - if (other.getResumeToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getResumeToken().isEmpty()) { setResumeToken(other.getResumeToken()); } if (other.queryMode_ != 0) { setQueryModeValue(other.getQueryModeValue()); } - if (other.getPartitionToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getPartitionToken().isEmpty()) { setPartitionToken(other.getPartitionToken()); } if (other.getSeqno() != 0L) { @@ -2862,6 +2954,9 @@ public Builder mergeFrom(com.google.spanner.v1.ExecuteSqlRequest other) { if (other.getLastStatement() != false) { setLastStatement(other.getLastStatement()); } + if (other.hasRoutingHint()) { + mergeRoutingHint(other.getRoutingHint()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -2896,7 +2991,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTransactionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -2908,7 +3004,7 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getParamsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetParamsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -2951,20 +3047,22 @@ public Builder mergeFrom( } // case 72 case 82: { - input.readMessage(getQueryOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetQueryOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000200; break; } // case 82 case 90: { - input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000400; break; } // case 90 case 122: { input.readMessage( - getDirectedReadOptionsFieldBuilder().getBuilder(), extensionRegistry); + internalGetDirectedReadOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000800; break; } // case 122 @@ -2980,6 +3078,13 @@ public Builder mergeFrom( bitField0_ |= 0x00002000; break; } // case 136 + case 146: + { + input.readMessage( + internalGetRoutingHintFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00004000; + break; + } // case 146 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -3000,6 +3105,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -3024,6 +3130,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -3048,6 +3155,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3071,6 +3179,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3090,6 +3199,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -3116,11 +3226,12 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.TransactionSelector transaction_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> transactionBuilder_; + /** * * @@ -3131,7 +3242,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3144,6 +3255,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -3154,7 +3266,7 @@ public boolean hasTransaction() { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3173,6 +3285,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { return transactionBuilder_.getMessage(); } } + /** * * @@ -3183,7 +3296,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3204,6 +3317,7 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { onChanged(); return this; } + /** * * @@ -3214,7 +3328,7 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3233,6 +3347,7 @@ public Builder setTransaction( onChanged(); return this; } + /** * * @@ -3243,7 +3358,7 @@ public Builder setTransaction( * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3269,6 +3384,7 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) } return this; } + /** * * @@ -3279,7 +3395,7 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3297,6 +3413,7 @@ public Builder clearTransaction() { onChanged(); return this; } + /** * * @@ -3307,7 +3424,7 @@ public Builder clearTransaction() { * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3318,8 +3435,9 @@ public Builder clearTransaction() { public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTransactionFieldBuilder().getBuilder(); + return internalGetTransactionFieldBuilder().getBuilder(); } + /** * * @@ -3330,7 +3448,7 @@ public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3347,6 +3465,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde : transaction_; } } + /** * * @@ -3357,7 +3476,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -3365,14 +3484,14 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * * .google.spanner.v1.TransactionSelector transaction = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> - getTransactionFieldBuilder() { + internalGetTransactionFieldBuilder() { if (transactionBuilder_ == null) { transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder>( @@ -3383,6 +3502,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde } private java.lang.Object sql_ = ""; + /** * * @@ -3405,6 +3525,7 @@ public java.lang.String getSql() { return (java.lang.String) ref; } } + /** * * @@ -3427,6 +3548,7 @@ public com.google.protobuf.ByteString getSqlBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3448,6 +3570,7 @@ public Builder setSql(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3465,6 +3588,7 @@ public Builder clearSql() { onChanged(); return this; } + /** * * @@ -3489,11 +3613,12 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Struct params_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> paramsBuilder_; + /** * * @@ -3505,12 +3630,12 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -3520,6 +3645,7 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { public boolean hasParams() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -3531,12 +3657,12 @@ public boolean hasParams() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -3550,6 +3676,7 @@ public com.google.protobuf.Struct getParams() { return paramsBuilder_.getMessage(); } } + /** * * @@ -3561,12 +3688,12 @@ public com.google.protobuf.Struct getParams() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -3584,6 +3711,7 @@ public Builder setParams(com.google.protobuf.Struct value) { onChanged(); return this; } + /** * * @@ -3595,12 +3723,12 @@ public Builder setParams(com.google.protobuf.Struct value) { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -3615,6 +3743,7 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -3626,12 +3755,12 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -3654,6 +3783,7 @@ public Builder mergeParams(com.google.protobuf.Struct value) { } return this; } + /** * * @@ -3665,12 +3795,12 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -3685,6 +3815,7 @@ public Builder clearParams() { onChanged(); return this; } + /** * * @@ -3696,12 +3827,12 @@ public Builder clearParams() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 4; @@ -3709,8 +3840,9 @@ public Builder clearParams() { public com.google.protobuf.Struct.Builder getParamsBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getParamsFieldBuilder().getBuilder(); + return internalGetParamsFieldBuilder().getBuilder(); } + /** * * @@ -3722,12 +3854,12 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 4; @@ -3739,6 +3871,7 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { return params_ == null ? com.google.protobuf.Struct.getDefaultInstance() : params_; } } + /** * * @@ -3750,24 +3883,24 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. * * * .google.protobuf.Struct params = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> - getParamsFieldBuilder() { + internalGetParamsFieldBuilder() { if (paramsBuilder_ == null) { paramsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>( @@ -3793,7 +3926,8 @@ public com.google.spanner.v1.Type build(com.google.spanner.v1.TypeOrBuilder val) defaultEntry() { return ParamTypesDefaultEntryHolder.defaultEntry; } - }; + } + ; private static final ParamTypesConverter paramTypesConverter = new ParamTypesConverter(); @@ -3833,16 +3967,17 @@ public com.google.spanner.v1.Type build(com.google.spanner.v1.TypeOrBuilder val) public int getParamTypesCount() { return internalGetParamTypes().ensureBuilderMap().size(); } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -3857,22 +3992,24 @@ public boolean containsParamTypes(java.lang.String key) {
                                       }
                                       return internalGetParamTypes().ensureBuilderMap().containsKey(key);
                                     }
                                +
                                     /** Use {@link #getParamTypesMap()} instead. */
                                     @java.lang.Override
                                     @java.lang.Deprecated
                                     public java.util.Map getParamTypes() {
                                       return getParamTypesMap();
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -3884,16 +4021,17 @@ public java.util.Map getParamTypes
                                     public java.util.Map getParamTypesMap() {
                                       return internalGetParamTypes().getImmutableMap();
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -3913,16 +4051,17 @@ public java.util.Map getParamTypes
                                           internalGetMutableParamTypes().ensureBuilderMap();
                                       return map.containsKey(key) ? paramTypesConverter.build(map.get(key)) : defaultValue;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -3948,16 +4087,17 @@ public Builder clearParamTypes() {
                                       internalGetMutableParamTypes().clear();
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -3972,22 +4112,24 @@ public Builder removeParamTypes(java.lang.String key) {
                                       internalGetMutableParamTypes().ensureBuilderMap().remove(key);
                                       return this;
                                     }
                                +
                                     /** Use alternate mutation accessors instead. */
                                     @java.lang.Deprecated
                                     public java.util.Map getMutableParamTypes() {
                                       bitField0_ |= 0x00000010;
                                       return internalGetMutableParamTypes().ensureMessageMap();
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -4006,16 +4148,17 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va
                                       bitField0_ |= 0x00000010;
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -4035,16 +4178,17 @@ public Builder putAllParamTypes(
                                       bitField0_ |= 0x00000010;
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                +     * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +     * from a JSON value. For example, values of type `BYTES` and values
                                      * of type `STRING` both appear in
                                      * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                      *
                                -     * In these cases, `param_types` can be used to specify the exact
                                +     * In these cases, you can use `param_types` to specify the exact
                                      * SQL type for some or all of the SQL statement parameters. See the
                                      * definition of [Type][google.spanner.v1.Type] for more information
                                      * about SQL types.
                                @@ -4068,6 +4212,7 @@ public com.google.spanner.v1.Type.Builder putParamTypesBuilderIfAbsent(java.lang
                                     }
                                 
                                     private com.google.protobuf.ByteString resumeToken_ = com.google.protobuf.ByteString.EMPTY;
                                +
                                     /**
                                      *
                                      *
                                @@ -4088,6 +4233,7 @@ public com.google.spanner.v1.Type.Builder putParamTypesBuilderIfAbsent(java.lang
                                     public com.google.protobuf.ByteString getResumeToken() {
                                       return resumeToken_;
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -4114,6 +4260,7 @@ public Builder setResumeToken(com.google.protobuf.ByteString value) {
                                       onChanged();
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -4138,6 +4285,7 @@ public Builder clearResumeToken() {
                                     }
                                 
                                     private int queryMode_ = 0;
                                +
                                     /**
                                      *
                                      *
                                @@ -4158,6 +4306,7 @@ public Builder clearResumeToken() {
                                     public int getQueryModeValue() {
                                       return queryMode_;
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -4181,6 +4330,7 @@ public Builder setQueryModeValue(int value) {
                                       onChanged();
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -4205,6 +4355,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryMode getQueryMode() {
                                           ? com.google.spanner.v1.ExecuteSqlRequest.QueryMode.UNRECOGNIZED
                                           : result;
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -4231,6 +4382,7 @@ public Builder setQueryMode(com.google.spanner.v1.ExecuteSqlRequest.QueryMode va
                                       onChanged();
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                @@ -4255,14 +4407,15 @@ public Builder clearQueryMode() {
                                     }
                                 
                                     private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY;
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * If present, results will be restricted to the specified partition
                                -     * previously created using PartitionQuery().  There must be an exact
                                +     * If present, results are restricted to the specified partition
                                +     * previously created using `PartitionQuery`. There must be an exact
                                      * match for the values of fields common to this message and the
                                -     * PartitionQueryRequest message used to create this partition_token.
                                +     * `PartitionQueryRequest` message used to create this `partition_token`.
                                      * 
                                * * bytes partition_token = 8; @@ -4273,14 +4426,15 @@ public Builder clearQueryMode() { public com.google.protobuf.ByteString getPartitionToken() { return partitionToken_; } + /** * * *
                                -     * If present, results will be restricted to the specified partition
                                -     * previously created using PartitionQuery().  There must be an exact
                                +     * If present, results are restricted to the specified partition
                                +     * previously created using `PartitionQuery`. There must be an exact
                                      * match for the values of fields common to this message and the
                                -     * PartitionQueryRequest message used to create this partition_token.
                                +     * `PartitionQueryRequest` message used to create this `partition_token`.
                                      * 
                                * * bytes partition_token = 8; @@ -4297,14 +4451,15 @@ public Builder setPartitionToken(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * *
                                -     * If present, results will be restricted to the specified partition
                                -     * previously created using PartitionQuery().  There must be an exact
                                +     * If present, results are restricted to the specified partition
                                +     * previously created using `PartitionQuery`. There must be an exact
                                      * match for the values of fields common to this message and the
                                -     * PartitionQueryRequest message used to create this partition_token.
                                +     * `PartitionQueryRequest` message used to create this `partition_token`.
                                      * 
                                * * bytes partition_token = 8; @@ -4319,18 +4474,19 @@ public Builder clearPartitionToken() { } private long seqno_; + /** * * *
                                      * A per-transaction sequence number used to identify this request. This field
                                      * makes each request idempotent such that if the request is received multiple
                                -     * times, at most one will succeed.
                                +     * times, at most one succeeds.
                                      *
                                      * The sequence number must be monotonically increasing within the
                                      * transaction. If a request arrives for the first time with an out-of-order
                                -     * sequence number, the transaction may be aborted. Replays of previously
                                -     * handled requests will yield the same response as the first execution.
                                +     * sequence number, the transaction can be aborted. Replays of previously
                                +     * handled requests yield the same response as the first execution.
                                      *
                                      * Required for DML statements. Ignored for queries.
                                      * 
                                @@ -4343,18 +4499,19 @@ public Builder clearPartitionToken() { public long getSeqno() { return seqno_; } + /** * * *
                                      * A per-transaction sequence number used to identify this request. This field
                                      * makes each request idempotent such that if the request is received multiple
                                -     * times, at most one will succeed.
                                +     * times, at most one succeeds.
                                      *
                                      * The sequence number must be monotonically increasing within the
                                      * transaction. If a request arrives for the first time with an out-of-order
                                -     * sequence number, the transaction may be aborted. Replays of previously
                                -     * handled requests will yield the same response as the first execution.
                                +     * sequence number, the transaction can be aborted. Replays of previously
                                +     * handled requests yield the same response as the first execution.
                                      *
                                      * Required for DML statements. Ignored for queries.
                                      * 
                                @@ -4371,18 +4528,19 @@ public Builder setSeqno(long value) { onChanged(); return this; } + /** * * *
                                      * A per-transaction sequence number used to identify this request. This field
                                      * makes each request idempotent such that if the request is received multiple
                                -     * times, at most one will succeed.
                                +     * times, at most one succeeds.
                                      *
                                      * The sequence number must be monotonically increasing within the
                                      * transaction. If a request arrives for the first time with an out-of-order
                                -     * sequence number, the transaction may be aborted. Replays of previously
                                -     * handled requests will yield the same response as the first execution.
                                +     * sequence number, the transaction can be aborted. Replays of previously
                                +     * handled requests yield the same response as the first execution.
                                      *
                                      * Required for DML statements. Ignored for queries.
                                      * 
                                @@ -4399,11 +4557,12 @@ public Builder clearSeqno() { } private com.google.spanner.v1.ExecuteSqlRequest.QueryOptions queryOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ExecuteSqlRequest.QueryOptions, com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder, com.google.spanner.v1.ExecuteSqlRequest.QueryOptionsOrBuilder> queryOptionsBuilder_; + /** * * @@ -4418,6 +4577,7 @@ public Builder clearSeqno() { public boolean hasQueryOptions() { return ((bitField0_ & 0x00000200) != 0); } + /** * * @@ -4438,6 +4598,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions getQueryOptions() { return queryOptionsBuilder_.getMessage(); } } + /** * * @@ -4460,6 +4621,7 @@ public Builder setQueryOptions(com.google.spanner.v1.ExecuteSqlRequest.QueryOpti onChanged(); return this; } + /** * * @@ -4480,6 +4642,7 @@ public Builder setQueryOptions( onChanged(); return this; } + /** * * @@ -4508,6 +4671,7 @@ public Builder mergeQueryOptions(com.google.spanner.v1.ExecuteSqlRequest.QueryOp } return this; } + /** * * @@ -4527,6 +4691,7 @@ public Builder clearQueryOptions() { onChanged(); return this; } + /** * * @@ -4539,8 +4704,9 @@ public Builder clearQueryOptions() { public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder getQueryOptionsBuilder() { bitField0_ |= 0x00000200; onChanged(); - return getQueryOptionsFieldBuilder().getBuilder(); + return internalGetQueryOptionsFieldBuilder().getBuilder(); } + /** * * @@ -4560,6 +4726,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder getQueryOpti : queryOptions_; } } + /** * * @@ -4569,14 +4736,14 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder getQueryOpti * * .google.spanner.v1.ExecuteSqlRequest.QueryOptions query_options = 10; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ExecuteSqlRequest.QueryOptions, com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder, com.google.spanner.v1.ExecuteSqlRequest.QueryOptionsOrBuilder> - getQueryOptionsFieldBuilder() { + internalGetQueryOptionsFieldBuilder() { if (queryOptionsBuilder_ == null) { queryOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ExecuteSqlRequest.QueryOptions, com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder, com.google.spanner.v1.ExecuteSqlRequest.QueryOptionsOrBuilder>( @@ -4587,11 +4754,12 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder getQueryOpti } private com.google.spanner.v1.RequestOptions requestOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> requestOptionsBuilder_; + /** * * @@ -4606,6 +4774,7 @@ public com.google.spanner.v1.ExecuteSqlRequest.QueryOptions.Builder getQueryOpti public boolean hasRequestOptions() { return ((bitField0_ & 0x00000400) != 0); } + /** * * @@ -4626,6 +4795,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { return requestOptionsBuilder_.getMessage(); } } + /** * * @@ -4648,6 +4818,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { onChanged(); return this; } + /** * * @@ -4667,6 +4838,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder bu onChanged(); return this; } + /** * * @@ -4694,6 +4866,7 @@ public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { } return this; } + /** * * @@ -4713,6 +4886,7 @@ public Builder clearRequestOptions() { onChanged(); return this; } + /** * * @@ -4725,8 +4899,9 @@ public Builder clearRequestOptions() { public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { bitField0_ |= 0x00000400; onChanged(); - return getRequestOptionsFieldBuilder().getBuilder(); + return internalGetRequestOptionsFieldBuilder().getBuilder(); } + /** * * @@ -4745,6 +4920,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } } + /** * * @@ -4754,14 +4930,14 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( * * .google.spanner.v1.RequestOptions request_options = 11; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> - getRequestOptionsFieldBuilder() { + internalGetRequestOptionsFieldBuilder() { if (requestOptionsBuilder_ == null) { requestOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder>( @@ -4772,11 +4948,12 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( } private com.google.spanner.v1.DirectedReadOptions directedReadOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions, com.google.spanner.v1.DirectedReadOptions.Builder, com.google.spanner.v1.DirectedReadOptionsOrBuilder> directedReadOptionsBuilder_; + /** * * @@ -4791,6 +4968,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasDirectedReadOptions() { return ((bitField0_ & 0x00000800) != 0); } + /** * * @@ -4811,6 +4989,7 @@ public com.google.spanner.v1.DirectedReadOptions getDirectedReadOptions() { return directedReadOptionsBuilder_.getMessage(); } } + /** * * @@ -4833,6 +5012,7 @@ public Builder setDirectedReadOptions(com.google.spanner.v1.DirectedReadOptions onChanged(); return this; } + /** * * @@ -4853,6 +5033,7 @@ public Builder setDirectedReadOptions( onChanged(); return this; } + /** * * @@ -4881,6 +5062,7 @@ public Builder mergeDirectedReadOptions(com.google.spanner.v1.DirectedReadOption } return this; } + /** * * @@ -4900,6 +5082,7 @@ public Builder clearDirectedReadOptions() { onChanged(); return this; } + /** * * @@ -4912,8 +5095,9 @@ public Builder clearDirectedReadOptions() { public com.google.spanner.v1.DirectedReadOptions.Builder getDirectedReadOptionsBuilder() { bitField0_ |= 0x00000800; onChanged(); - return getDirectedReadOptionsFieldBuilder().getBuilder(); + return internalGetDirectedReadOptionsFieldBuilder().getBuilder(); } + /** * * @@ -4932,6 +5116,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions : directedReadOptions_; } } + /** * * @@ -4941,14 +5126,14 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions * * .google.spanner.v1.DirectedReadOptions directed_read_options = 15; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions, com.google.spanner.v1.DirectedReadOptions.Builder, com.google.spanner.v1.DirectedReadOptionsOrBuilder> - getDirectedReadOptionsFieldBuilder() { + internalGetDirectedReadOptionsFieldBuilder() { if (directedReadOptionsBuilder_ == null) { directedReadOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions, com.google.spanner.v1.DirectedReadOptions.Builder, com.google.spanner.v1.DirectedReadOptionsOrBuilder>( @@ -4959,6 +5144,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions } private boolean dataBoostEnabled_; + /** * * @@ -4966,7 +5152,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions * If this is for a partitioned query and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. *
                                * @@ -4978,6 +5164,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions public boolean getDataBoostEnabled() { return dataBoostEnabled_; } + /** * * @@ -4985,7 +5172,7 @@ public boolean getDataBoostEnabled() { * If this is for a partitioned query and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. *
                                * @@ -5001,6 +5188,7 @@ public Builder setDataBoostEnabled(boolean value) { onChanged(); return this; } + /** * * @@ -5008,7 +5196,7 @@ public Builder setDataBoostEnabled(boolean value) { * If this is for a partitioned query and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. *
                                * @@ -5024,19 +5212,20 @@ public Builder clearDataBoostEnabled() { } private boolean lastStatement_; + /** * * *
                                -     * Optional. If set to true, this statement marks the end of the transaction.
                                -     * The transaction should be committed or aborted after this statement
                                -     * executes, and attempts to execute any other requests against this
                                -     * transaction (including reads and queries) will be rejected.
                                -     *
                                -     * For DML statements, setting this option may cause some error reporting to
                                -     * be deferred until commit time (e.g. validation of unique constraints).
                                -     * Given this, successful execution of a DML statement should not be assumed
                                -     * until a subsequent Commit call completes successfully.
                                +     * Optional. If set to `true`, this statement marks the end of the
                                +     * transaction. After this statement executes, you must commit or abort the
                                +     * transaction. Attempts to execute any other requests against this
                                +     * transaction (including reads and queries) are rejected.
                                +     *
                                +     * For DML statements, setting this option might cause some error reporting to
                                +     * be deferred until commit time (for example, validation of unique
                                +     * constraints). Given this, successful execution of a DML statement shouldn't
                                +     * be assumed until a subsequent `Commit` call completes successfully.
                                      * 
                                * * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; @@ -5047,19 +5236,20 @@ public Builder clearDataBoostEnabled() { public boolean getLastStatement() { return lastStatement_; } + /** * * *
                                -     * Optional. If set to true, this statement marks the end of the transaction.
                                -     * The transaction should be committed or aborted after this statement
                                -     * executes, and attempts to execute any other requests against this
                                -     * transaction (including reads and queries) will be rejected.
                                -     *
                                -     * For DML statements, setting this option may cause some error reporting to
                                -     * be deferred until commit time (e.g. validation of unique constraints).
                                -     * Given this, successful execution of a DML statement should not be assumed
                                -     * until a subsequent Commit call completes successfully.
                                +     * Optional. If set to `true`, this statement marks the end of the
                                +     * transaction. After this statement executes, you must commit or abort the
                                +     * transaction. Attempts to execute any other requests against this
                                +     * transaction (including reads and queries) are rejected.
                                +     *
                                +     * For DML statements, setting this option might cause some error reporting to
                                +     * be deferred until commit time (for example, validation of unique
                                +     * constraints). Given this, successful execution of a DML statement shouldn't
                                +     * be assumed until a subsequent `Commit` call completes successfully.
                                      * 
                                * * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; @@ -5074,19 +5264,20 @@ public Builder setLastStatement(boolean value) { onChanged(); return this; } + /** * * *
                                -     * Optional. If set to true, this statement marks the end of the transaction.
                                -     * The transaction should be committed or aborted after this statement
                                -     * executes, and attempts to execute any other requests against this
                                -     * transaction (including reads and queries) will be rejected.
                                -     *
                                -     * For DML statements, setting this option may cause some error reporting to
                                -     * be deferred until commit time (e.g. validation of unique constraints).
                                -     * Given this, successful execution of a DML statement should not be assumed
                                -     * until a subsequent Commit call completes successfully.
                                +     * Optional. If set to `true`, this statement marks the end of the
                                +     * transaction. After this statement executes, you must commit or abort the
                                +     * transaction. Attempts to execute any other requests against this
                                +     * transaction (including reads and queries) are rejected.
                                +     *
                                +     * For DML statements, setting this option might cause some error reporting to
                                +     * be deferred until commit time (for example, validation of unique
                                +     * constraints). Given this, successful execution of a DML statement shouldn't
                                +     * be assumed until a subsequent `Commit` call completes successfully.
                                      * 
                                * * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; @@ -5100,15 +5291,261 @@ public Builder clearLastStatement() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.RoutingHint routingHint_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + routingHintBuilder_; + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00004000) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + public com.google.spanner.v1.RoutingHint getRoutingHint() { + if (routingHintBuilder_ == null) { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } else { + return routingHintBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + routingHint_ = value; + } else { + routingHintBuilder_.setMessage(value); + } + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint.Builder builderForValue) { + if (routingHintBuilder_ == null) { + routingHint_ = builderForValue.build(); + } else { + routingHintBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (((bitField0_ & 0x00004000) != 0) + && routingHint_ != null + && routingHint_ != com.google.spanner.v1.RoutingHint.getDefaultInstance()) { + getRoutingHintBuilder().mergeFrom(value); + } else { + routingHint_ = value; + } + } else { + routingHintBuilder_.mergeFrom(value); + } + if (routingHint_ != null) { + bitField0_ |= 0x00004000; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearRoutingHint() { + bitField0_ = (bitField0_ & ~0x00004000); + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHint.Builder getRoutingHintBuilder() { + bitField0_ |= 0x00004000; + onChanged(); + return internalGetRoutingHintFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + if (routingHintBuilder_ != null) { + return routingHintBuilder_.getMessageOrBuilder(); + } else { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + internalGetRoutingHintFieldBuilder() { + if (routingHintBuilder_ == null) { + routingHintBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder>( + getRoutingHint(), getParentForChildren(), isClean()); + routingHint_ = null; + } + return routingHintBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.ExecuteSqlRequest) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java index a9fa97f75de..c72df5d5568 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ExecuteSqlRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ExecuteSqlRequest) @@ -38,6 +40,7 @@ public interface ExecuteSqlRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -63,7 +66,7 @@ public interface ExecuteSqlRequestOrBuilder * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -74,6 +77,7 @@ public interface ExecuteSqlRequestOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -84,7 +88,7 @@ public interface ExecuteSqlRequestOrBuilder * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -95,6 +99,7 @@ public interface ExecuteSqlRequestOrBuilder * @return The transaction. */ com.google.spanner.v1.TransactionSelector getTransaction(); + /** * * @@ -105,7 +110,7 @@ public interface ExecuteSqlRequestOrBuilder * transaction with strong concurrency. * * Standard DML statements require a read-write transaction. To protect - * against replays, single-use transactions are not supported. The caller + * against replays, single-use transactions are not supported. The caller * must either supply an existing transaction ID or begin a new transaction. * * Partitioned DML requires an existing Partitioned DML transaction ID. @@ -127,6 +132,7 @@ public interface ExecuteSqlRequestOrBuilder * @return The sql. */ java.lang.String getSql(); + /** * * @@ -151,12 +157,12 @@ public interface ExecuteSqlRequestOrBuilder * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -164,6 +170,7 @@ public interface ExecuteSqlRequestOrBuilder * @return Whether the params field is set. */ boolean hasParams(); + /** * * @@ -175,12 +182,12 @@ public interface ExecuteSqlRequestOrBuilder * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -188,6 +195,7 @@ public interface ExecuteSqlRequestOrBuilder * @return The params. */ com.google.protobuf.Struct getParams(); + /** * * @@ -199,12 +207,12 @@ public interface ExecuteSqlRequestOrBuilder * to the naming requirements of identifiers as specified at * https://cloud.google.com/spanner/docs/lexical#identifiers. * - * Parameters can appear anywhere that a literal value is expected. The same + * Parameters can appear anywhere that a literal value is expected. The same * parameter name can be used more than once, for example: * * `"WHERE id > @msg_id AND id < @msg_id + 100"` * - * It is an error to execute a SQL statement with unbound parameters. + * It's an error to execute a SQL statement with unbound parameters. *
                                * * .google.protobuf.Struct params = 4; @@ -215,12 +223,12 @@ public interface ExecuteSqlRequestOrBuilder * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -229,16 +237,17 @@ public interface ExecuteSqlRequestOrBuilder
                                    * map<string, .google.spanner.v1.Type> param_types = 5;
                                    */
                                   int getParamTypesCount();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -247,19 +256,21 @@ public interface ExecuteSqlRequestOrBuilder
                                    * map<string, .google.spanner.v1.Type> param_types = 5;
                                    */
                                   boolean containsParamTypes(java.lang.String key);
                                +
                                   /** Use {@link #getParamTypesMap()} instead. */
                                   @java.lang.Deprecated
                                   java.util.Map getParamTypes();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -268,16 +279,17 @@ public interface ExecuteSqlRequestOrBuilder
                                    * map<string, .google.spanner.v1.Type> param_types = 5;
                                    */
                                   java.util.Map getParamTypesMap();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -290,16 +302,17 @@ com.google.spanner.v1.Type getParamTypesOrDefault(
                                       java.lang.String key,
                                       /* nullable */
                                       com.google.spanner.v1.Type defaultValue);
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                +   * It isn't always possible for Cloud Spanner to infer the right SQL type
                                +   * from a JSON value. For example, values of type `BYTES` and values
                                    * of type `STRING` both appear in
                                    * [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
                                    *
                                -   * In these cases, `param_types` can be used to specify the exact
                                +   * In these cases, you can use `param_types` to specify the exact
                                    * SQL type for some or all of the SQL statement parameters. See the
                                    * definition of [Type][google.spanner.v1.Type] for more information
                                    * about SQL types.
                                @@ -344,6 +357,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault(
                                    * @return The enum numeric value on the wire for queryMode.
                                    */
                                   int getQueryModeValue();
                                +
                                   /**
                                    *
                                    *
                                @@ -366,10 +380,10 @@ com.google.spanner.v1.Type getParamTypesOrDefault(
                                    *
                                    *
                                    * 
                                -   * If present, results will be restricted to the specified partition
                                -   * previously created using PartitionQuery().  There must be an exact
                                +   * If present, results are restricted to the specified partition
                                +   * previously created using `PartitionQuery`. There must be an exact
                                    * match for the values of fields common to this message and the
                                -   * PartitionQueryRequest message used to create this partition_token.
                                +   * `PartitionQueryRequest` message used to create this `partition_token`.
                                    * 
                                * * bytes partition_token = 8; @@ -384,12 +398,12 @@ com.google.spanner.v1.Type getParamTypesOrDefault( *
                                    * A per-transaction sequence number used to identify this request. This field
                                    * makes each request idempotent such that if the request is received multiple
                                -   * times, at most one will succeed.
                                +   * times, at most one succeeds.
                                    *
                                    * The sequence number must be monotonically increasing within the
                                    * transaction. If a request arrives for the first time with an out-of-order
                                -   * sequence number, the transaction may be aborted. Replays of previously
                                -   * handled requests will yield the same response as the first execution.
                                +   * sequence number, the transaction can be aborted. Replays of previously
                                +   * handled requests yield the same response as the first execution.
                                    *
                                    * Required for DML statements. Ignored for queries.
                                    * 
                                @@ -412,6 +426,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return Whether the queryOptions field is set. */ boolean hasQueryOptions(); + /** * * @@ -424,6 +439,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return The queryOptions. */ com.google.spanner.v1.ExecuteSqlRequest.QueryOptions getQueryOptions(); + /** * * @@ -447,6 +463,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return Whether the requestOptions field is set. */ boolean hasRequestOptions(); + /** * * @@ -459,6 +476,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return The requestOptions. */ com.google.spanner.v1.RequestOptions getRequestOptions(); + /** * * @@ -482,6 +500,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return Whether the directedReadOptions field is set. */ boolean hasDirectedReadOptions(); + /** * * @@ -494,6 +513,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return The directedReadOptions. */ com.google.spanner.v1.DirectedReadOptions getDirectedReadOptions(); + /** * * @@ -512,7 +532,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * If this is for a partitioned query and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. *
                                * @@ -526,15 +546,15 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * * *
                                -   * Optional. If set to true, this statement marks the end of the transaction.
                                -   * The transaction should be committed or aborted after this statement
                                -   * executes, and attempts to execute any other requests against this
                                -   * transaction (including reads and queries) will be rejected.
                                -   *
                                -   * For DML statements, setting this option may cause some error reporting to
                                -   * be deferred until commit time (e.g. validation of unique constraints).
                                -   * Given this, successful execution of a DML statement should not be assumed
                                -   * until a subsequent Commit call completes successfully.
                                +   * Optional. If set to `true`, this statement marks the end of the
                                +   * transaction. After this statement executes, you must commit or abort the
                                +   * transaction. Attempts to execute any other requests against this
                                +   * transaction (including reads and queries) are rejected.
                                +   *
                                +   * For DML statements, setting this option might cause some error reporting to
                                +   * be deferred until commit time (for example, validation of unique
                                +   * constraints). Given this, successful execution of a DML statement shouldn't
                                +   * be assumed until a subsequent `Commit` call completes successfully.
                                    * 
                                * * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; @@ -542,4 +562,62 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return The lastStatement. */ boolean getLastStatement(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + boolean hasRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + com.google.spanner.v1.RoutingHint getRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java index 13fbaad5063..f3c97672a68 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.GetSessionRequest} */ -public final class GetSessionRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class GetSessionRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.GetSessionRequest) GetSessionRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetSessionRequest"); + } + // Use GetSessionRequest.newBuilder() to construct. - private GetSessionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private GetSessionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private GetSessionRequest() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new GetSessionRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_GetSessionRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_GetSessionRequest_fieldAccessorTable @@ -67,6 +74,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -92,6 +100,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -132,8 +141,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } getUnknownFields().writeTo(output); } @@ -144,8 +153,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -218,38 +227,38 @@ public static com.google.spanner.v1.GetSessionRequest parseFrom( public static com.google.spanner.v1.GetSessionRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.GetSessionRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.GetSessionRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.GetSessionRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.GetSessionRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.GetSessionRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -272,10 +281,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -285,7 +295,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.GetSessionRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.GetSessionRequest) com.google.spanner.v1.GetSessionRequestOrBuilder { @@ -295,7 +305,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_GetSessionRequest_fieldAccessorTable @@ -307,7 +317,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.GetSessionRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -357,39 +367,6 @@ private void buildPartial0(com.google.spanner.v1.GetSessionRequest result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.GetSessionRequest) { @@ -459,6 +436,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -483,6 +461,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -507,6 +486,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -530,6 +510,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -549,6 +530,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -574,17 +556,6 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.GetSessionRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java index d93462a3bfa..28aece5eded 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface GetSessionRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.GetSessionRequest) @@ -38,6 +40,7 @@ public interface GetSessionRequestOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Group.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Group.java new file mode 100644 index 00000000000..47cf2c5c211 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Group.java @@ -0,0 +1,1321 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * A `Group` represents a paxos group in a database. A group is a set of
                                + * tablets that are replicated across multiple servers. Groups may have a leader
                                + * tablet. Groups store one (or sometimes more) ranges of keys.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.Group} + */ +@com.google.protobuf.Generated +public final class Group extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.Group) + GroupOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Group"); + } + + // Use Group.newBuilder() to construct. + private Group(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Group() { + tablets_ = java.util.Collections.emptyList(); + generation_ = com.google.protobuf.ByteString.EMPTY; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto.internal_static_google_spanner_v1_Group_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Group_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Group.class, com.google.spanner.v1.Group.Builder.class); + } + + public static final int GROUP_UID_FIELD_NUMBER = 1; + private long groupUid_ = 0L; + + /** + * + * + *
                                +   * The UID of the paxos group, unique within the database. Matches the
                                +   * `group_uid` field in `Range`.
                                +   * 
                                + * + * uint64 group_uid = 1; + * + * @return The groupUid. + */ + @java.lang.Override + public long getGroupUid() { + return groupUid_; + } + + public static final int TABLETS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private java.util.List tablets_; + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + @java.lang.Override + public java.util.List getTabletsList() { + return tablets_; + } + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + @java.lang.Override + public java.util.List getTabletsOrBuilderList() { + return tablets_; + } + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + @java.lang.Override + public int getTabletsCount() { + return tablets_.size(); + } + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + @java.lang.Override + public com.google.spanner.v1.Tablet getTablets(int index) { + return tablets_.get(index); + } + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + @java.lang.Override + public com.google.spanner.v1.TabletOrBuilder getTabletsOrBuilder(int index) { + return tablets_.get(index); + } + + public static final int LEADER_INDEX_FIELD_NUMBER = 3; + private int leaderIndex_ = 0; + + /** + * + * + *
                                +   * The last known leader tablet of the group as an index into `tablets`. May
                                +   * be negative if the group has no known leader.
                                +   * 
                                + * + * int32 leader_index = 3; + * + * @return The leaderIndex. + */ + @java.lang.Override + public int getLeaderIndex() { + return leaderIndex_; + } + + public static final int GENERATION_FIELD_NUMBER = 4; + private com.google.protobuf.ByteString generation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * `generation` indicates the freshness of the group information (including
                                +   * leader information) contained in this proto. Generations can be compared
                                +   * lexicographically; if generation A is greater than generation B, then the
                                +   * `Group` corresponding to A is newer than the `Group` corresponding to B,
                                +   * and should be used preferentially.
                                +   * 
                                + * + * bytes generation = 4; + * + * @return The generation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGeneration() { + return generation_; + } + + 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 (groupUid_ != 0L) { + output.writeUInt64(1, groupUid_); + } + for (int i = 0; i < tablets_.size(); i++) { + output.writeMessage(2, tablets_.get(i)); + } + if (leaderIndex_ != 0) { + output.writeInt32(3, leaderIndex_); + } + if (!generation_.isEmpty()) { + output.writeBytes(4, generation_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (groupUid_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(1, groupUid_); + } + for (int i = 0; i < tablets_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, tablets_.get(i)); + } + if (leaderIndex_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, leaderIndex_); + } + if (!generation_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(4, generation_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.Group)) { + return super.equals(obj); + } + com.google.spanner.v1.Group other = (com.google.spanner.v1.Group) obj; + + if (getGroupUid() != other.getGroupUid()) return false; + if (!getTabletsList().equals(other.getTabletsList())) return false; + if (getLeaderIndex() != other.getLeaderIndex()) return false; + if (!getGeneration().equals(other.getGeneration())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + GROUP_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getGroupUid()); + if (getTabletsCount() > 0) { + hash = (37 * hash) + TABLETS_FIELD_NUMBER; + hash = (53 * hash) + getTabletsList().hashCode(); + } + hash = (37 * hash) + LEADER_INDEX_FIELD_NUMBER; + hash = (53 * hash) + getLeaderIndex(); + hash = (37 * hash) + GENERATION_FIELD_NUMBER; + hash = (53 * hash) + getGeneration().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.Group parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Group parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Group parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Group parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Group parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Group parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Group parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Group parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Group parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Group parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Group parseFrom(com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Group parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.Group 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * A `Group` represents a paxos group in a database. A group is a set of
                                +   * tablets that are replicated across multiple servers. Groups may have a leader
                                +   * tablet. Groups store one (or sometimes more) ranges of keys.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.Group} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.Group) + com.google.spanner.v1.GroupOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto.internal_static_google_spanner_v1_Group_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Group_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Group.class, com.google.spanner.v1.Group.Builder.class); + } + + // Construct using com.google.spanner.v1.Group.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + groupUid_ = 0L; + if (tabletsBuilder_ == null) { + tablets_ = java.util.Collections.emptyList(); + } else { + tablets_ = null; + tabletsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + leaderIndex_ = 0; + generation_ = com.google.protobuf.ByteString.EMPTY; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto.internal_static_google_spanner_v1_Group_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.Group getDefaultInstanceForType() { + return com.google.spanner.v1.Group.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.Group build() { + com.google.spanner.v1.Group result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.Group buildPartial() { + com.google.spanner.v1.Group result = new com.google.spanner.v1.Group(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.Group result) { + if (tabletsBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + tablets_ = java.util.Collections.unmodifiableList(tablets_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.tablets_ = tablets_; + } else { + result.tablets_ = tabletsBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.Group result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.groupUid_ = groupUid_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.leaderIndex_ = leaderIndex_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.generation_ = generation_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.Group) { + return mergeFrom((com.google.spanner.v1.Group) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.Group other) { + if (other == com.google.spanner.v1.Group.getDefaultInstance()) return this; + if (other.getGroupUid() != 0L) { + setGroupUid(other.getGroupUid()); + } + if (tabletsBuilder_ == null) { + if (!other.tablets_.isEmpty()) { + if (tablets_.isEmpty()) { + tablets_ = other.tablets_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureTabletsIsMutable(); + tablets_.addAll(other.tablets_); + } + onChanged(); + } + } else { + if (!other.tablets_.isEmpty()) { + if (tabletsBuilder_.isEmpty()) { + tabletsBuilder_.dispose(); + tabletsBuilder_ = null; + tablets_ = other.tablets_; + bitField0_ = (bitField0_ & ~0x00000002); + tabletsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetTabletsFieldBuilder() + : null; + } else { + tabletsBuilder_.addAllMessages(other.tablets_); + } + } + } + if (other.getLeaderIndex() != 0) { + setLeaderIndex(other.getLeaderIndex()); + } + if (!other.getGeneration().isEmpty()) { + setGeneration(other.getGeneration()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + groupUid_ = input.readUInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + com.google.spanner.v1.Tablet m = + input.readMessage(com.google.spanner.v1.Tablet.parser(), extensionRegistry); + if (tabletsBuilder_ == null) { + ensureTabletsIsMutable(); + tablets_.add(m); + } else { + tabletsBuilder_.addMessage(m); + } + break; + } // case 18 + case 24: + { + leaderIndex_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 34: + { + generation_ = input.readBytes(); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private long groupUid_; + + /** + * + * + *
                                +     * The UID of the paxos group, unique within the database. Matches the
                                +     * `group_uid` field in `Range`.
                                +     * 
                                + * + * uint64 group_uid = 1; + * + * @return The groupUid. + */ + @java.lang.Override + public long getGroupUid() { + return groupUid_; + } + + /** + * + * + *
                                +     * The UID of the paxos group, unique within the database. Matches the
                                +     * `group_uid` field in `Range`.
                                +     * 
                                + * + * uint64 group_uid = 1; + * + * @param value The groupUid to set. + * @return This builder for chaining. + */ + public Builder setGroupUid(long value) { + + groupUid_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The UID of the paxos group, unique within the database. Matches the
                                +     * `group_uid` field in `Range`.
                                +     * 
                                + * + * uint64 group_uid = 1; + * + * @return This builder for chaining. + */ + public Builder clearGroupUid() { + bitField0_ = (bitField0_ & ~0x00000001); + groupUid_ = 0L; + onChanged(); + return this; + } + + private java.util.List tablets_ = + java.util.Collections.emptyList(); + + private void ensureTabletsIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + tablets_ = new java.util.ArrayList(tablets_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Tablet, + com.google.spanner.v1.Tablet.Builder, + com.google.spanner.v1.TabletOrBuilder> + tabletsBuilder_; + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public java.util.List getTabletsList() { + if (tabletsBuilder_ == null) { + return java.util.Collections.unmodifiableList(tablets_); + } else { + return tabletsBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public int getTabletsCount() { + if (tabletsBuilder_ == null) { + return tablets_.size(); + } else { + return tabletsBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public com.google.spanner.v1.Tablet getTablets(int index) { + if (tabletsBuilder_ == null) { + return tablets_.get(index); + } else { + return tabletsBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder setTablets(int index, com.google.spanner.v1.Tablet value) { + if (tabletsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTabletsIsMutable(); + tablets_.set(index, value); + onChanged(); + } else { + tabletsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder setTablets(int index, com.google.spanner.v1.Tablet.Builder builderForValue) { + if (tabletsBuilder_ == null) { + ensureTabletsIsMutable(); + tablets_.set(index, builderForValue.build()); + onChanged(); + } else { + tabletsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder addTablets(com.google.spanner.v1.Tablet value) { + if (tabletsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTabletsIsMutable(); + tablets_.add(value); + onChanged(); + } else { + tabletsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder addTablets(int index, com.google.spanner.v1.Tablet value) { + if (tabletsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTabletsIsMutable(); + tablets_.add(index, value); + onChanged(); + } else { + tabletsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder addTablets(com.google.spanner.v1.Tablet.Builder builderForValue) { + if (tabletsBuilder_ == null) { + ensureTabletsIsMutable(); + tablets_.add(builderForValue.build()); + onChanged(); + } else { + tabletsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder addTablets(int index, com.google.spanner.v1.Tablet.Builder builderForValue) { + if (tabletsBuilder_ == null) { + ensureTabletsIsMutable(); + tablets_.add(index, builderForValue.build()); + onChanged(); + } else { + tabletsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder addAllTablets( + java.lang.Iterable values) { + if (tabletsBuilder_ == null) { + ensureTabletsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, tablets_); + onChanged(); + } else { + tabletsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder clearTablets() { + if (tabletsBuilder_ == null) { + tablets_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + tabletsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public Builder removeTablets(int index) { + if (tabletsBuilder_ == null) { + ensureTabletsIsMutable(); + tablets_.remove(index); + onChanged(); + } else { + tabletsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public com.google.spanner.v1.Tablet.Builder getTabletsBuilder(int index) { + return internalGetTabletsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public com.google.spanner.v1.TabletOrBuilder getTabletsOrBuilder(int index) { + if (tabletsBuilder_ == null) { + return tablets_.get(index); + } else { + return tabletsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public java.util.List + getTabletsOrBuilderList() { + if (tabletsBuilder_ != null) { + return tabletsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(tablets_); + } + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public com.google.spanner.v1.Tablet.Builder addTabletsBuilder() { + return internalGetTabletsFieldBuilder() + .addBuilder(com.google.spanner.v1.Tablet.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public com.google.spanner.v1.Tablet.Builder addTabletsBuilder(int index) { + return internalGetTabletsFieldBuilder() + .addBuilder(index, com.google.spanner.v1.Tablet.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of tablets that are part of the group. Note that this list may not
                                +     * be exhaustive; it will only include tablets the server considers useful
                                +     * to the client. The returned list is ordered ascending by distance.
                                +     *
                                +     * Tablet UIDs reference `Tablet.tablet_uid`.
                                +     * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + public java.util.List getTabletsBuilderList() { + return internalGetTabletsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Tablet, + com.google.spanner.v1.Tablet.Builder, + com.google.spanner.v1.TabletOrBuilder> + internalGetTabletsFieldBuilder() { + if (tabletsBuilder_ == null) { + tabletsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.Tablet, + com.google.spanner.v1.Tablet.Builder, + com.google.spanner.v1.TabletOrBuilder>( + tablets_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean()); + tablets_ = null; + } + return tabletsBuilder_; + } + + private int leaderIndex_; + + /** + * + * + *
                                +     * The last known leader tablet of the group as an index into `tablets`. May
                                +     * be negative if the group has no known leader.
                                +     * 
                                + * + * int32 leader_index = 3; + * + * @return The leaderIndex. + */ + @java.lang.Override + public int getLeaderIndex() { + return leaderIndex_; + } + + /** + * + * + *
                                +     * The last known leader tablet of the group as an index into `tablets`. May
                                +     * be negative if the group has no known leader.
                                +     * 
                                + * + * int32 leader_index = 3; + * + * @param value The leaderIndex to set. + * @return This builder for chaining. + */ + public Builder setLeaderIndex(int value) { + + leaderIndex_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The last known leader tablet of the group as an index into `tablets`. May
                                +     * be negative if the group has no known leader.
                                +     * 
                                + * + * int32 leader_index = 3; + * + * @return This builder for chaining. + */ + public Builder clearLeaderIndex() { + bitField0_ = (bitField0_ & ~0x00000004); + leaderIndex_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString generation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * `generation` indicates the freshness of the group information (including
                                +     * leader information) contained in this proto. Generations can be compared
                                +     * lexicographically; if generation A is greater than generation B, then the
                                +     * `Group` corresponding to A is newer than the `Group` corresponding to B,
                                +     * and should be used preferentially.
                                +     * 
                                + * + * bytes generation = 4; + * + * @return The generation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGeneration() { + return generation_; + } + + /** + * + * + *
                                +     * `generation` indicates the freshness of the group information (including
                                +     * leader information) contained in this proto. Generations can be compared
                                +     * lexicographically; if generation A is greater than generation B, then the
                                +     * `Group` corresponding to A is newer than the `Group` corresponding to B,
                                +     * and should be used preferentially.
                                +     * 
                                + * + * bytes generation = 4; + * + * @param value The generation to set. + * @return This builder for chaining. + */ + public Builder setGeneration(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + generation_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * `generation` indicates the freshness of the group information (including
                                +     * leader information) contained in this proto. Generations can be compared
                                +     * lexicographically; if generation A is greater than generation B, then the
                                +     * `Group` corresponding to A is newer than the `Group` corresponding to B,
                                +     * and should be used preferentially.
                                +     * 
                                + * + * bytes generation = 4; + * + * @return This builder for chaining. + */ + public Builder clearGeneration() { + bitField0_ = (bitField0_ & ~0x00000008); + generation_ = getDefaultInstance().getGeneration(); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.Group) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.Group) + private static final com.google.spanner.v1.Group DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.Group(); + } + + public static com.google.spanner.v1.Group getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Group parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.Group getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GroupOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GroupOrBuilder.java new file mode 100644 index 00000000000..75312cd6a77 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GroupOrBuilder.java @@ -0,0 +1,148 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface GroupOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.Group) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * The UID of the paxos group, unique within the database. Matches the
                                +   * `group_uid` field in `Range`.
                                +   * 
                                + * + * uint64 group_uid = 1; + * + * @return The groupUid. + */ + long getGroupUid(); + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + java.util.List getTabletsList(); + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + com.google.spanner.v1.Tablet getTablets(int index); + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + int getTabletsCount(); + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + java.util.List getTabletsOrBuilderList(); + + /** + * + * + *
                                +   * A list of tablets that are part of the group. Note that this list may not
                                +   * be exhaustive; it will only include tablets the server considers useful
                                +   * to the client. The returned list is ordered ascending by distance.
                                +   *
                                +   * Tablet UIDs reference `Tablet.tablet_uid`.
                                +   * 
                                + * + * repeated .google.spanner.v1.Tablet tablets = 2; + */ + com.google.spanner.v1.TabletOrBuilder getTabletsOrBuilder(int index); + + /** + * + * + *
                                +   * The last known leader tablet of the group as an index into `tablets`. May
                                +   * be negative if the group has no known leader.
                                +   * 
                                + * + * int32 leader_index = 3; + * + * @return The leaderIndex. + */ + int getLeaderIndex(); + + /** + * + * + *
                                +   * `generation` indicates the freshness of the group information (including
                                +   * leader information) contained in this proto. Generations can be compared
                                +   * lexicographically; if generation A is greater than generation B, then the
                                +   * `Group` corresponding to A is newer than the `Group` corresponding to B,
                                +   * and should be used preferentially.
                                +   * 
                                + * + * bytes generation = 4; + * + * @return The generation. + */ + com.google.protobuf.ByteString getGeneration(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java index b751846bcff..992a09ec134 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/keys.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -35,15 +36,15 @@ * * For example, consider the following table definition: * - * CREATE TABLE UserEvents ( - * UserName STRING(MAX), - * EventDate STRING(10) - * ) PRIMARY KEY(UserName, EventDate); + * CREATE TABLE UserEvents ( + * UserName STRING(MAX), + * EventDate STRING(10) + * ) PRIMARY KEY(UserName, EventDate); * * The following keys name rows in this table: * - * ["Bob", "2014-09-23"] - * ["Alfred", "2015-06-12"] + * ["Bob", "2014-09-23"] + * ["Alfred", "2015-06-12"] * * Since the `UserEvents` table's `PRIMARY KEY` clause names two * columns, each `UserEvents` key has two elements; the first is the @@ -54,8 +55,8 @@ * sort order. For example, the following range returns all events for * user `"Bob"` that occurred in the year 2015: * - * "start_closed": ["Bob", "2015-01-01"] - * "end_closed": ["Bob", "2015-12-31"] + * "start_closed": ["Bob", "2015-01-01"] + * "end_closed": ["Bob", "2015-12-31"] * * Start and end keys can omit trailing key components. This affects the * inclusion and exclusion of rows that exactly match the provided key @@ -66,48 +67,48 @@ * For example, the following range includes all events for `"Bob"` that * occurred during and after the year 2000: * - * "start_closed": ["Bob", "2000-01-01"] - * "end_closed": ["Bob"] + * "start_closed": ["Bob", "2000-01-01"] + * "end_closed": ["Bob"] * * The next example retrieves all events for `"Bob"`: * - * "start_closed": ["Bob"] - * "end_closed": ["Bob"] + * "start_closed": ["Bob"] + * "end_closed": ["Bob"] * * To retrieve events before the year 2000: * - * "start_closed": ["Bob"] - * "end_open": ["Bob", "2000-01-01"] + * "start_closed": ["Bob"] + * "end_open": ["Bob", "2000-01-01"] * * The following range includes all rows in the table: * - * "start_closed": [] - * "end_closed": [] + * "start_closed": [] + * "end_closed": [] * * This range returns all users whose `UserName` begins with any * character from A to C: * - * "start_closed": ["A"] - * "end_open": ["D"] + * "start_closed": ["A"] + * "end_open": ["D"] * * This range returns all users whose `UserName` begins with B: * - * "start_closed": ["B"] - * "end_open": ["C"] + * "start_closed": ["B"] + * "end_open": ["C"] * * Key ranges honor column sort order. For example, suppose a table is * defined as follows: * - * CREATE TABLE DescendingSortedTable { - * Key INT64, - * ... - * ) PRIMARY KEY(Key DESC); + * CREATE TABLE DescendingSortedTable { + * Key INT64, + * ... + * ) PRIMARY KEY(Key DESC); * * The following range retrieves all rows with key values between 1 * and 100 inclusive: * - * "start_closed": ["100"] - * "end_closed": ["1"] + * "start_closed": ["100"] + * "end_closed": ["1"] * * Note that 100 is passed as the start, and 1 is passed as the end, * because `Key` is a descending column in the schema. @@ -115,30 +116,36 @@ * * Protobuf type {@code google.spanner.v1.KeyRange} */ -public final class KeyRange extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class KeyRange extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.KeyRange) KeyRangeOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "KeyRange"); + } + // Use KeyRange.newBuilder() to construct. - private KeyRange(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private KeyRange(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private KeyRange() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new KeyRange(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.KeysProto.internal_static_google_spanner_v1_KeyRange_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.KeysProto .internal_static_google_spanner_v1_KeyRange_fieldAccessorTable @@ -163,6 +170,7 @@ public enum StartKeyTypeCase private StartKeyTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -212,6 +220,7 @@ public enum EndKeyTypeCase private EndKeyTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -245,6 +254,7 @@ public EndKeyTypeCase getEndKeyTypeCase() { } public static final int START_CLOSED_FIELD_NUMBER = 1; + /** * * @@ -261,6 +271,7 @@ public EndKeyTypeCase getEndKeyTypeCase() { public boolean hasStartClosed() { return startKeyTypeCase_ == 1; } + /** * * @@ -280,6 +291,7 @@ public com.google.protobuf.ListValue getStartClosed() { } return com.google.protobuf.ListValue.getDefaultInstance(); } + /** * * @@ -299,6 +311,7 @@ public com.google.protobuf.ListValueOrBuilder getStartClosedOrBuilder() { } public static final int START_OPEN_FIELD_NUMBER = 2; + /** * * @@ -315,6 +328,7 @@ public com.google.protobuf.ListValueOrBuilder getStartClosedOrBuilder() { public boolean hasStartOpen() { return startKeyTypeCase_ == 2; } + /** * * @@ -334,6 +348,7 @@ public com.google.protobuf.ListValue getStartOpen() { } return com.google.protobuf.ListValue.getDefaultInstance(); } + /** * * @@ -353,6 +368,7 @@ public com.google.protobuf.ListValueOrBuilder getStartOpenOrBuilder() { } public static final int END_CLOSED_FIELD_NUMBER = 3; + /** * * @@ -369,6 +385,7 @@ public com.google.protobuf.ListValueOrBuilder getStartOpenOrBuilder() { public boolean hasEndClosed() { return endKeyTypeCase_ == 3; } + /** * * @@ -388,6 +405,7 @@ public com.google.protobuf.ListValue getEndClosed() { } return com.google.protobuf.ListValue.getDefaultInstance(); } + /** * * @@ -407,6 +425,7 @@ public com.google.protobuf.ListValueOrBuilder getEndClosedOrBuilder() { } public static final int END_OPEN_FIELD_NUMBER = 4; + /** * * @@ -423,6 +442,7 @@ public com.google.protobuf.ListValueOrBuilder getEndClosedOrBuilder() { public boolean hasEndOpen() { return endKeyTypeCase_ == 4; } + /** * * @@ -442,6 +462,7 @@ public com.google.protobuf.ListValue getEndOpen() { } return com.google.protobuf.ListValue.getDefaultInstance(); } + /** * * @@ -628,38 +649,38 @@ public static com.google.spanner.v1.KeyRange parseFrom( public static com.google.spanner.v1.KeyRange parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.KeyRange parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.KeyRange parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.KeyRange parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.KeyRange parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.KeyRange parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -682,10 +703,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -702,15 +724,15 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * For example, consider the following table definition: * - * CREATE TABLE UserEvents ( - * UserName STRING(MAX), - * EventDate STRING(10) - * ) PRIMARY KEY(UserName, EventDate); + * CREATE TABLE UserEvents ( + * UserName STRING(MAX), + * EventDate STRING(10) + * ) PRIMARY KEY(UserName, EventDate); * * The following keys name rows in this table: * - * ["Bob", "2014-09-23"] - * ["Alfred", "2015-06-12"] + * ["Bob", "2014-09-23"] + * ["Alfred", "2015-06-12"] * * Since the `UserEvents` table's `PRIMARY KEY` clause names two * columns, each `UserEvents` key has two elements; the first is the @@ -721,8 +743,8 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * sort order. For example, the following range returns all events for * user `"Bob"` that occurred in the year 2015: * - * "start_closed": ["Bob", "2015-01-01"] - * "end_closed": ["Bob", "2015-12-31"] + * "start_closed": ["Bob", "2015-01-01"] + * "end_closed": ["Bob", "2015-12-31"] * * Start and end keys can omit trailing key components. This affects the * inclusion and exclusion of rows that exactly match the provided key @@ -733,48 +755,48 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * For example, the following range includes all events for `"Bob"` that * occurred during and after the year 2000: * - * "start_closed": ["Bob", "2000-01-01"] - * "end_closed": ["Bob"] + * "start_closed": ["Bob", "2000-01-01"] + * "end_closed": ["Bob"] * * The next example retrieves all events for `"Bob"`: * - * "start_closed": ["Bob"] - * "end_closed": ["Bob"] + * "start_closed": ["Bob"] + * "end_closed": ["Bob"] * * To retrieve events before the year 2000: * - * "start_closed": ["Bob"] - * "end_open": ["Bob", "2000-01-01"] + * "start_closed": ["Bob"] + * "end_open": ["Bob", "2000-01-01"] * * The following range includes all rows in the table: * - * "start_closed": [] - * "end_closed": [] + * "start_closed": [] + * "end_closed": [] * * This range returns all users whose `UserName` begins with any * character from A to C: * - * "start_closed": ["A"] - * "end_open": ["D"] + * "start_closed": ["A"] + * "end_open": ["D"] * * This range returns all users whose `UserName` begins with B: * - * "start_closed": ["B"] - * "end_open": ["C"] + * "start_closed": ["B"] + * "end_open": ["C"] * * Key ranges honor column sort order. For example, suppose a table is * defined as follows: * - * CREATE TABLE DescendingSortedTable { - * Key INT64, - * ... - * ) PRIMARY KEY(Key DESC); + * CREATE TABLE DescendingSortedTable { + * Key INT64, + * ... + * ) PRIMARY KEY(Key DESC); * * The following range retrieves all rows with key values between 1 * and 100 inclusive: * - * "start_closed": ["100"] - * "end_closed": ["1"] + * "start_closed": ["100"] + * "end_closed": ["1"] * * Note that 100 is passed as the start, and 1 is passed as the end, * because `Key` is a descending column in the schema. @@ -782,7 +804,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.KeyRange} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.KeyRange) com.google.spanner.v1.KeyRangeOrBuilder { @@ -791,7 +813,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.KeysProto .internal_static_google_spanner_v1_KeyRange_fieldAccessorTable @@ -802,7 +824,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.KeyRange.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -882,39 +904,6 @@ private void buildPartialOneofs(com.google.spanner.v1.KeyRange result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.KeyRange) { @@ -987,25 +976,28 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getStartClosedFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartClosedFieldBuilder().getBuilder(), extensionRegistry); startKeyTypeCase_ = 1; break; } // case 10 case 18: { - input.readMessage(getStartOpenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStartOpenFieldBuilder().getBuilder(), extensionRegistry); startKeyTypeCase_ = 2; break; } // case 18 case 26: { - input.readMessage(getEndClosedFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetEndClosedFieldBuilder().getBuilder(), extensionRegistry); endKeyTypeCase_ = 3; break; } // case 26 case 34: { - input.readMessage(getEndOpenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetEndOpenFieldBuilder().getBuilder(), extensionRegistry); endKeyTypeCase_ = 4; break; } // case 34 @@ -1056,11 +1048,12 @@ public Builder clearEndKeyType() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> startClosedBuilder_; + /** * * @@ -1077,6 +1070,7 @@ public Builder clearEndKeyType() { public boolean hasStartClosed() { return startKeyTypeCase_ == 1; } + /** * * @@ -1103,6 +1097,7 @@ public com.google.protobuf.ListValue getStartClosed() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1126,6 +1121,7 @@ public Builder setStartClosed(com.google.protobuf.ListValue value) { startKeyTypeCase_ = 1; return this; } + /** * * @@ -1146,6 +1142,7 @@ public Builder setStartClosed(com.google.protobuf.ListValue.Builder builderForVa startKeyTypeCase_ = 1; return this; } + /** * * @@ -1179,6 +1176,7 @@ public Builder mergeStartClosed(com.google.protobuf.ListValue value) { startKeyTypeCase_ = 1; return this; } + /** * * @@ -1205,6 +1203,7 @@ public Builder clearStartClosed() { } return this; } + /** * * @@ -1216,8 +1215,9 @@ public Builder clearStartClosed() { * .google.protobuf.ListValue start_closed = 1; */ public com.google.protobuf.ListValue.Builder getStartClosedBuilder() { - return getStartClosedFieldBuilder().getBuilder(); + return internalGetStartClosedFieldBuilder().getBuilder(); } + /** * * @@ -1239,6 +1239,7 @@ public com.google.protobuf.ListValueOrBuilder getStartClosedOrBuilder() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1249,17 +1250,17 @@ public com.google.protobuf.ListValueOrBuilder getStartClosedOrBuilder() { * * .google.protobuf.ListValue start_closed = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> - getStartClosedFieldBuilder() { + internalGetStartClosedFieldBuilder() { if (startClosedBuilder_ == null) { if (!(startKeyTypeCase_ == 1)) { startKeyType_ = com.google.protobuf.ListValue.getDefaultInstance(); } startClosedBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder>( @@ -1271,11 +1272,12 @@ public com.google.protobuf.ListValueOrBuilder getStartClosedOrBuilder() { return startClosedBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> startOpenBuilder_; + /** * * @@ -1292,6 +1294,7 @@ public com.google.protobuf.ListValueOrBuilder getStartClosedOrBuilder() { public boolean hasStartOpen() { return startKeyTypeCase_ == 2; } + /** * * @@ -1318,6 +1321,7 @@ public com.google.protobuf.ListValue getStartOpen() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1341,6 +1345,7 @@ public Builder setStartOpen(com.google.protobuf.ListValue value) { startKeyTypeCase_ = 2; return this; } + /** * * @@ -1361,6 +1366,7 @@ public Builder setStartOpen(com.google.protobuf.ListValue.Builder builderForValu startKeyTypeCase_ = 2; return this; } + /** * * @@ -1394,6 +1400,7 @@ public Builder mergeStartOpen(com.google.protobuf.ListValue value) { startKeyTypeCase_ = 2; return this; } + /** * * @@ -1420,6 +1427,7 @@ public Builder clearStartOpen() { } return this; } + /** * * @@ -1431,8 +1439,9 @@ public Builder clearStartOpen() { * .google.protobuf.ListValue start_open = 2; */ public com.google.protobuf.ListValue.Builder getStartOpenBuilder() { - return getStartOpenFieldBuilder().getBuilder(); + return internalGetStartOpenFieldBuilder().getBuilder(); } + /** * * @@ -1454,6 +1463,7 @@ public com.google.protobuf.ListValueOrBuilder getStartOpenOrBuilder() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1464,17 +1474,17 @@ public com.google.protobuf.ListValueOrBuilder getStartOpenOrBuilder() { * * .google.protobuf.ListValue start_open = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> - getStartOpenFieldBuilder() { + internalGetStartOpenFieldBuilder() { if (startOpenBuilder_ == null) { if (!(startKeyTypeCase_ == 2)) { startKeyType_ = com.google.protobuf.ListValue.getDefaultInstance(); } startOpenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder>( @@ -1486,11 +1496,12 @@ public com.google.protobuf.ListValueOrBuilder getStartOpenOrBuilder() { return startOpenBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> endClosedBuilder_; + /** * * @@ -1507,6 +1518,7 @@ public com.google.protobuf.ListValueOrBuilder getStartOpenOrBuilder() { public boolean hasEndClosed() { return endKeyTypeCase_ == 3; } + /** * * @@ -1533,6 +1545,7 @@ public com.google.protobuf.ListValue getEndClosed() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1556,6 +1569,7 @@ public Builder setEndClosed(com.google.protobuf.ListValue value) { endKeyTypeCase_ = 3; return this; } + /** * * @@ -1576,6 +1590,7 @@ public Builder setEndClosed(com.google.protobuf.ListValue.Builder builderForValu endKeyTypeCase_ = 3; return this; } + /** * * @@ -1608,6 +1623,7 @@ public Builder mergeEndClosed(com.google.protobuf.ListValue value) { endKeyTypeCase_ = 3; return this; } + /** * * @@ -1634,6 +1650,7 @@ public Builder clearEndClosed() { } return this; } + /** * * @@ -1645,8 +1662,9 @@ public Builder clearEndClosed() { * .google.protobuf.ListValue end_closed = 3; */ public com.google.protobuf.ListValue.Builder getEndClosedBuilder() { - return getEndClosedFieldBuilder().getBuilder(); + return internalGetEndClosedFieldBuilder().getBuilder(); } + /** * * @@ -1668,6 +1686,7 @@ public com.google.protobuf.ListValueOrBuilder getEndClosedOrBuilder() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1678,17 +1697,17 @@ public com.google.protobuf.ListValueOrBuilder getEndClosedOrBuilder() { * * .google.protobuf.ListValue end_closed = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> - getEndClosedFieldBuilder() { + internalGetEndClosedFieldBuilder() { if (endClosedBuilder_ == null) { if (!(endKeyTypeCase_ == 3)) { endKeyType_ = com.google.protobuf.ListValue.getDefaultInstance(); } endClosedBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder>( @@ -1700,11 +1719,12 @@ public com.google.protobuf.ListValueOrBuilder getEndClosedOrBuilder() { return endClosedBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> endOpenBuilder_; + /** * * @@ -1721,6 +1741,7 @@ public com.google.protobuf.ListValueOrBuilder getEndClosedOrBuilder() { public boolean hasEndOpen() { return endKeyTypeCase_ == 4; } + /** * * @@ -1747,6 +1768,7 @@ public com.google.protobuf.ListValue getEndOpen() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1770,6 +1792,7 @@ public Builder setEndOpen(com.google.protobuf.ListValue value) { endKeyTypeCase_ = 4; return this; } + /** * * @@ -1790,6 +1813,7 @@ public Builder setEndOpen(com.google.protobuf.ListValue.Builder builderForValue) endKeyTypeCase_ = 4; return this; } + /** * * @@ -1822,6 +1846,7 @@ public Builder mergeEndOpen(com.google.protobuf.ListValue value) { endKeyTypeCase_ = 4; return this; } + /** * * @@ -1848,6 +1873,7 @@ public Builder clearEndOpen() { } return this; } + /** * * @@ -1859,8 +1885,9 @@ public Builder clearEndOpen() { * .google.protobuf.ListValue end_open = 4; */ public com.google.protobuf.ListValue.Builder getEndOpenBuilder() { - return getEndOpenFieldBuilder().getBuilder(); + return internalGetEndOpenFieldBuilder().getBuilder(); } + /** * * @@ -1882,6 +1909,7 @@ public com.google.protobuf.ListValueOrBuilder getEndOpenOrBuilder() { return com.google.protobuf.ListValue.getDefaultInstance(); } } + /** * * @@ -1892,17 +1920,17 @@ public com.google.protobuf.ListValueOrBuilder getEndOpenOrBuilder() { * * .google.protobuf.ListValue end_open = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> - getEndOpenFieldBuilder() { + internalGetEndOpenFieldBuilder() { if (endOpenBuilder_ == null) { if (!(endKeyTypeCase_ == 4)) { endKeyType_ = com.google.protobuf.ListValue.getDefaultInstance(); } endOpenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder>( @@ -1914,17 +1942,6 @@ public com.google.protobuf.ListValueOrBuilder getEndOpenOrBuilder() { return endOpenBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.KeyRange) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java index af2d46ca473..ede28888030 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/keys.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface KeyRangeOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.KeyRange) @@ -37,6 +39,7 @@ public interface KeyRangeOrBuilder * @return Whether the startClosed field is set. */ boolean hasStartClosed(); + /** * * @@ -50,6 +53,7 @@ public interface KeyRangeOrBuilder * @return The startClosed. */ com.google.protobuf.ListValue getStartClosed(); + /** * * @@ -75,6 +79,7 @@ public interface KeyRangeOrBuilder * @return Whether the startOpen field is set. */ boolean hasStartOpen(); + /** * * @@ -88,6 +93,7 @@ public interface KeyRangeOrBuilder * @return The startOpen. */ com.google.protobuf.ListValue getStartOpen(); + /** * * @@ -113,6 +119,7 @@ public interface KeyRangeOrBuilder * @return Whether the endClosed field is set. */ boolean hasEndClosed(); + /** * * @@ -126,6 +133,7 @@ public interface KeyRangeOrBuilder * @return The endClosed. */ com.google.protobuf.ListValue getEndClosed(); + /** * * @@ -151,6 +159,7 @@ public interface KeyRangeOrBuilder * @return Whether the endOpen field is set. */ boolean hasEndOpen(); + /** * * @@ -164,6 +173,7 @@ public interface KeyRangeOrBuilder * @return The endOpen. */ com.google.protobuf.ListValue getEndOpen(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRecipe.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRecipe.java new file mode 100644 index 00000000000..b6723d35963 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRecipe.java @@ -0,0 +1,4400 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * A `KeyRecipe` provides the metadata required to translate reads, mutations,
                                + * and queries into a byte array in "sortable string format" (ssformat)that can
                                + * be used with `Range`s to route requests. Note that the client *must* tolerate
                                + * `KeyRecipe`s that appear to be invalid, since the `KeyRecipe` format may
                                + * change over time. Requests with invalid `KeyRecipe`s should be routed to a
                                + * default server.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.KeyRecipe} + */ +@com.google.protobuf.Generated +public final class KeyRecipe extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.KeyRecipe) + KeyRecipeOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "KeyRecipe"); + } + + // Use KeyRecipe.newBuilder() to construct. + private KeyRecipe(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private KeyRecipe() { + part_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.KeyRecipe.class, com.google.spanner.v1.KeyRecipe.Builder.class); + } + + public interface PartOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.KeyRecipe.Part) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * If non-zero, `tag` is the only field present in this `Part`. The part
                                +     * is encoded by appending `tag` to the ssformat key.
                                +     * 
                                + * + * uint32 tag = 1; + * + * @return The tag. + */ + int getTag(); + + /** + * + * + *
                                +     * Whether the key column is sorted ascending or descending. Only present
                                +     * if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @return The enum numeric value on the wire for order. + */ + int getOrderValue(); + + /** + * + * + *
                                +     * Whether the key column is sorted ascending or descending. Only present
                                +     * if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @return The order. + */ + com.google.spanner.v1.KeyRecipe.Part.Order getOrder(); + + /** + * + * + *
                                +     * How NULLs are represented in the encoded key part. Only present if `tag`
                                +     * is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @return The enum numeric value on the wire for nullOrder. + */ + int getNullOrderValue(); + + /** + * + * + *
                                +     * How NULLs are represented in the encoded key part. Only present if `tag`
                                +     * is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @return The nullOrder. + */ + com.google.spanner.v1.KeyRecipe.Part.NullOrder getNullOrder(); + + /** + * + * + *
                                +     * The type of the key part. Only present if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.Type type = 4; + * + * @return Whether the type field is set. + */ + boolean hasType(); + + /** + * + * + *
                                +     * The type of the key part. Only present if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.Type type = 4; + * + * @return The type. + */ + com.google.spanner.v1.Type getType(); + + /** + * + * + *
                                +     * The type of the key part. Only present if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(); + + /** + * + * + *
                                +     * `identifier` is the name of the column or query parameter.
                                +     * 
                                + * + * string identifier = 5; + * + * @return Whether the identifier field is set. + */ + boolean hasIdentifier(); + + /** + * + * + *
                                +     * `identifier` is the name of the column or query parameter.
                                +     * 
                                + * + * string identifier = 5; + * + * @return The identifier. + */ + java.lang.String getIdentifier(); + + /** + * + * + *
                                +     * `identifier` is the name of the column or query parameter.
                                +     * 
                                + * + * string identifier = 5; + * + * @return The bytes for identifier. + */ + com.google.protobuf.ByteString getIdentifierBytes(); + + /** + * + * + *
                                +     * The constant value of the key part.
                                +     * It is present when query uses a constant as a part of the key.
                                +     * 
                                + * + * .google.protobuf.Value value = 6; + * + * @return Whether the value field is set. + */ + boolean hasValue(); + + /** + * + * + *
                                +     * The constant value of the key part.
                                +     * It is present when query uses a constant as a part of the key.
                                +     * 
                                + * + * .google.protobuf.Value value = 6; + * + * @return The value. + */ + com.google.protobuf.Value getValue(); + + /** + * + * + *
                                +     * The constant value of the key part.
                                +     * It is present when query uses a constant as a part of the key.
                                +     * 
                                + * + * .google.protobuf.Value value = 6; + */ + com.google.protobuf.ValueOrBuilder getValueOrBuilder(); + + /** + * + * + *
                                +     * If true, the client is responsible to fill in the value randomly.
                                +     * It's relevant only for the INT64 type.
                                +     * 
                                + * + * bool random = 8; + * + * @return Whether the random field is set. + */ + boolean hasRandom(); + + /** + * + * + *
                                +     * If true, the client is responsible to fill in the value randomly.
                                +     * It's relevant only for the INT64 type.
                                +     * 
                                + * + * bool random = 8; + * + * @return The random. + */ + boolean getRandom(); + + /** + * + * + *
                                +     * It is a repeated field to support fetching key columns from nested
                                +     * structs, such as `STRUCT` query parameters.
                                +     * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @return A list containing the structIdentifiers. + */ + java.util.List getStructIdentifiersList(); + + /** + * + * + *
                                +     * It is a repeated field to support fetching key columns from nested
                                +     * structs, such as `STRUCT` query parameters.
                                +     * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @return The count of structIdentifiers. + */ + int getStructIdentifiersCount(); + + /** + * + * + *
                                +     * It is a repeated field to support fetching key columns from nested
                                +     * structs, such as `STRUCT` query parameters.
                                +     * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @param index The index of the element to return. + * @return The structIdentifiers at the given index. + */ + int getStructIdentifiers(int index); + + com.google.spanner.v1.KeyRecipe.Part.ValueTypeCase getValueTypeCase(); + } + + /** + * + * + *
                                +   * An ssformat key is composed of a sequence of tag numbers and key column
                                +   * values. `Part` represents a single tag or key column value.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.KeyRecipe.Part} + */ + public static final class Part extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.KeyRecipe.Part) + PartOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Part"); + } + + // Use Part.newBuilder() to construct. + private Part(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Part() { + order_ = 0; + nullOrder_ = 0; + structIdentifiers_ = emptyIntList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_Part_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_Part_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.KeyRecipe.Part.class, + com.google.spanner.v1.KeyRecipe.Part.Builder.class); + } + + /** + * + * + *
                                +     * The remaining fields encode column values.
                                +     * 
                                + * + * Protobuf enum {@code google.spanner.v1.KeyRecipe.Part.Order} + */ + public enum Order implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +       * Default value, equivalent to `ASCENDING`.
                                +       * 
                                + * + * ORDER_UNSPECIFIED = 0; + */ + ORDER_UNSPECIFIED(0), + /** + * + * + *
                                +       * The key is ascending - corresponds to `ASC` in the schema definition.
                                +       * 
                                + * + * ASCENDING = 1; + */ + ASCENDING(1), + /** + * + * + *
                                +       * The key is descending - corresponds to `DESC` in the schema definition.
                                +       * 
                                + * + * DESCENDING = 2; + */ + DESCENDING(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Order"); + } + + /** + * + * + *
                                +       * Default value, equivalent to `ASCENDING`.
                                +       * 
                                + * + * ORDER_UNSPECIFIED = 0; + */ + public static final int ORDER_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +       * The key is ascending - corresponds to `ASC` in the schema definition.
                                +       * 
                                + * + * ASCENDING = 1; + */ + public static final int ASCENDING_VALUE = 1; + + /** + * + * + *
                                +       * The key is descending - corresponds to `DESC` in the schema definition.
                                +       * 
                                + * + * DESCENDING = 2; + */ + public static final int DESCENDING_VALUE = 2; + + 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 Order 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 Order forNumber(int value) { + switch (value) { + case 0: + return ORDER_UNSPECIFIED; + case 1: + return ASCENDING; + case 2: + return DESCENDING; + 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 Order findValueByNumber(int number) { + return Order.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.KeyRecipe.Part.getDescriptor().getEnumTypes().get(0); + } + + private static final Order[] VALUES = values(); + + public static Order 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 Order(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.KeyRecipe.Part.Order) + } + + /** + * + * + *
                                +     * The null order of the key column. This dictates where NULL values sort
                                +     * in the sorted order. Note that columns which are `NOT NULL` can have a
                                +     * special encoding.
                                +     * 
                                + * + * Protobuf enum {@code google.spanner.v1.KeyRecipe.Part.NullOrder} + */ + public enum NullOrder implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +       * Default value. This value is unused.
                                +       * 
                                + * + * NULL_ORDER_UNSPECIFIED = 0; + */ + NULL_ORDER_UNSPECIFIED(0), + /** + * + * + *
                                +       * NULL values sort before any non-NULL values.
                                +       * 
                                + * + * NULLS_FIRST = 1; + */ + NULLS_FIRST(1), + /** + * + * + *
                                +       * NULL values sort after any non-NULL values.
                                +       * 
                                + * + * NULLS_LAST = 2; + */ + NULLS_LAST(2), + /** + * + * + *
                                +       * The column does not support NULL values.
                                +       * 
                                + * + * NOT_NULL = 3; + */ + NOT_NULL(3), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "NullOrder"); + } + + /** + * + * + *
                                +       * Default value. This value is unused.
                                +       * 
                                + * + * NULL_ORDER_UNSPECIFIED = 0; + */ + public static final int NULL_ORDER_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +       * NULL values sort before any non-NULL values.
                                +       * 
                                + * + * NULLS_FIRST = 1; + */ + public static final int NULLS_FIRST_VALUE = 1; + + /** + * + * + *
                                +       * NULL values sort after any non-NULL values.
                                +       * 
                                + * + * NULLS_LAST = 2; + */ + public static final int NULLS_LAST_VALUE = 2; + + /** + * + * + *
                                +       * The column does not support NULL values.
                                +       * 
                                + * + * NOT_NULL = 3; + */ + public static final int NOT_NULL_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 NullOrder 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 NullOrder forNumber(int value) { + switch (value) { + case 0: + return NULL_ORDER_UNSPECIFIED; + case 1: + return NULLS_FIRST; + case 2: + return NULLS_LAST; + case 3: + return NOT_NULL; + 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 NullOrder findValueByNumber(int number) { + return NullOrder.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.KeyRecipe.Part.getDescriptor().getEnumTypes().get(1); + } + + private static final NullOrder[] VALUES = values(); + + public static NullOrder 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 NullOrder(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.KeyRecipe.Part.NullOrder) + } + + private int bitField0_; + private int valueTypeCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object valueType_; + + public enum ValueTypeCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + IDENTIFIER(5), + VALUE(6), + RANDOM(8), + VALUETYPE_NOT_SET(0); + private final int value; + + 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. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ValueTypeCase valueOf(int value) { + return forNumber(value); + } + + public static ValueTypeCase forNumber(int value) { + switch (value) { + case 5: + return IDENTIFIER; + case 6: + return VALUE; + case 8: + return RANDOM; + case 0: + return VALUETYPE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ValueTypeCase getValueTypeCase() { + return ValueTypeCase.forNumber(valueTypeCase_); + } + + public static final int TAG_FIELD_NUMBER = 1; + private int tag_ = 0; + + /** + * + * + *
                                +     * If non-zero, `tag` is the only field present in this `Part`. The part
                                +     * is encoded by appending `tag` to the ssformat key.
                                +     * 
                                + * + * uint32 tag = 1; + * + * @return The tag. + */ + @java.lang.Override + public int getTag() { + return tag_; + } + + public static final int ORDER_FIELD_NUMBER = 2; + private int order_ = 0; + + /** + * + * + *
                                +     * Whether the key column is sorted ascending or descending. Only present
                                +     * if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @return The enum numeric value on the wire for order. + */ + @java.lang.Override + public int getOrderValue() { + return order_; + } + + /** + * + * + *
                                +     * Whether the key column is sorted ascending or descending. Only present
                                +     * if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @return The order. + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part.Order getOrder() { + com.google.spanner.v1.KeyRecipe.Part.Order result = + com.google.spanner.v1.KeyRecipe.Part.Order.forNumber(order_); + return result == null ? com.google.spanner.v1.KeyRecipe.Part.Order.UNRECOGNIZED : result; + } + + public static final int NULL_ORDER_FIELD_NUMBER = 3; + private int nullOrder_ = 0; + + /** + * + * + *
                                +     * How NULLs are represented in the encoded key part. Only present if `tag`
                                +     * is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @return The enum numeric value on the wire for nullOrder. + */ + @java.lang.Override + public int getNullOrderValue() { + return nullOrder_; + } + + /** + * + * + *
                                +     * How NULLs are represented in the encoded key part. Only present if `tag`
                                +     * is zero.
                                +     * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @return The nullOrder. + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part.NullOrder getNullOrder() { + com.google.spanner.v1.KeyRecipe.Part.NullOrder result = + com.google.spanner.v1.KeyRecipe.Part.NullOrder.forNumber(nullOrder_); + return result == null ? com.google.spanner.v1.KeyRecipe.Part.NullOrder.UNRECOGNIZED : result; + } + + public static final int TYPE_FIELD_NUMBER = 4; + private com.google.spanner.v1.Type type_; + + /** + * + * + *
                                +     * The type of the key part. Only present if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.Type type = 4; + * + * @return Whether the type field is set. + */ + @java.lang.Override + public boolean hasType() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * The type of the key part. Only present if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.Type type = 4; + * + * @return The type. + */ + @java.lang.Override + public com.google.spanner.v1.Type getType() { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } + + /** + * + * + *
                                +     * The type of the key part. Only present if `tag` is zero.
                                +     * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + @java.lang.Override + public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } + + public static final int IDENTIFIER_FIELD_NUMBER = 5; + + /** + * + * + *
                                +     * `identifier` is the name of the column or query parameter.
                                +     * 
                                + * + * string identifier = 5; + * + * @return Whether the identifier field is set. + */ + public boolean hasIdentifier() { + return valueTypeCase_ == 5; + } + + /** + * + * + *
                                +     * `identifier` is the name of the column or query parameter.
                                +     * 
                                + * + * string identifier = 5; + * + * @return The identifier. + */ + public java.lang.String getIdentifier() { + java.lang.Object ref = ""; + if (valueTypeCase_ == 5) { + ref = valueType_; + } + 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(); + if (valueTypeCase_ == 5) { + valueType_ = s; + } + return s; + } + } + + /** + * + * + *
                                +     * `identifier` is the name of the column or query parameter.
                                +     * 
                                + * + * string identifier = 5; + * + * @return The bytes for identifier. + */ + public com.google.protobuf.ByteString getIdentifierBytes() { + java.lang.Object ref = ""; + if (valueTypeCase_ == 5) { + ref = valueType_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (valueTypeCase_ == 5) { + valueType_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int VALUE_FIELD_NUMBER = 6; + + /** + * + * + *
                                +     * The constant value of the key part.
                                +     * It is present when query uses a constant as a part of the key.
                                +     * 
                                + * + * .google.protobuf.Value value = 6; + * + * @return Whether the value field is set. + */ + @java.lang.Override + public boolean hasValue() { + return valueTypeCase_ == 6; + } + + /** + * + * + *
                                +     * The constant value of the key part.
                                +     * It is present when query uses a constant as a part of the key.
                                +     * 
                                + * + * .google.protobuf.Value value = 6; + * + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.Value getValue() { + if (valueTypeCase_ == 6) { + return (com.google.protobuf.Value) valueType_; + } + return com.google.protobuf.Value.getDefaultInstance(); + } + + /** + * + * + *
                                +     * The constant value of the key part.
                                +     * It is present when query uses a constant as a part of the key.
                                +     * 
                                + * + * .google.protobuf.Value value = 6; + */ + @java.lang.Override + public com.google.protobuf.ValueOrBuilder getValueOrBuilder() { + if (valueTypeCase_ == 6) { + return (com.google.protobuf.Value) valueType_; + } + return com.google.protobuf.Value.getDefaultInstance(); + } + + public static final int RANDOM_FIELD_NUMBER = 8; + + /** + * + * + *
                                +     * If true, the client is responsible to fill in the value randomly.
                                +     * It's relevant only for the INT64 type.
                                +     * 
                                + * + * bool random = 8; + * + * @return Whether the random field is set. + */ + @java.lang.Override + public boolean hasRandom() { + return valueTypeCase_ == 8; + } + + /** + * + * + *
                                +     * If true, the client is responsible to fill in the value randomly.
                                +     * It's relevant only for the INT64 type.
                                +     * 
                                + * + * bool random = 8; + * + * @return The random. + */ + @java.lang.Override + public boolean getRandom() { + if (valueTypeCase_ == 8) { + return (java.lang.Boolean) valueType_; + } + return false; + } + + public static final int STRUCT_IDENTIFIERS_FIELD_NUMBER = 7; + + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList structIdentifiers_ = emptyIntList(); + + /** + * + * + *
                                +     * It is a repeated field to support fetching key columns from nested
                                +     * structs, such as `STRUCT` query parameters.
                                +     * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @return A list containing the structIdentifiers. + */ + @java.lang.Override + public java.util.List getStructIdentifiersList() { + return structIdentifiers_; + } + + /** + * + * + *
                                +     * It is a repeated field to support fetching key columns from nested
                                +     * structs, such as `STRUCT` query parameters.
                                +     * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @return The count of structIdentifiers. + */ + public int getStructIdentifiersCount() { + return structIdentifiers_.size(); + } + + /** + * + * + *
                                +     * It is a repeated field to support fetching key columns from nested
                                +     * structs, such as `STRUCT` query parameters.
                                +     * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @param index The index of the element to return. + * @return The structIdentifiers at the given index. + */ + public int getStructIdentifiers(int index) { + return structIdentifiers_.getInt(index); + } + + private int structIdentifiersMemoizedSerializedSize = -1; + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getSerializedSize(); + if (tag_ != 0) { + output.writeUInt32(1, tag_); + } + if (order_ != com.google.spanner.v1.KeyRecipe.Part.Order.ORDER_UNSPECIFIED.getNumber()) { + output.writeEnum(2, order_); + } + if (nullOrder_ + != com.google.spanner.v1.KeyRecipe.Part.NullOrder.NULL_ORDER_UNSPECIFIED.getNumber()) { + output.writeEnum(3, nullOrder_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(4, getType()); + } + if (valueTypeCase_ == 5) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, valueType_); + } + if (valueTypeCase_ == 6) { + output.writeMessage(6, (com.google.protobuf.Value) valueType_); + } + if (getStructIdentifiersList().size() > 0) { + output.writeUInt32NoTag(58); + output.writeUInt32NoTag(structIdentifiersMemoizedSerializedSize); + } + for (int i = 0; i < structIdentifiers_.size(); i++) { + output.writeInt32NoTag(structIdentifiers_.getInt(i)); + } + if (valueTypeCase_ == 8) { + output.writeBool(8, (boolean) ((java.lang.Boolean) valueType_)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (tag_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, tag_); + } + if (order_ != com.google.spanner.v1.KeyRecipe.Part.Order.ORDER_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, order_); + } + if (nullOrder_ + != com.google.spanner.v1.KeyRecipe.Part.NullOrder.NULL_ORDER_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(3, nullOrder_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getType()); + } + if (valueTypeCase_ == 5) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, valueType_); + } + if (valueTypeCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.protobuf.Value) valueType_); + } + { + int dataSize = 0; + for (int i = 0; i < structIdentifiers_.size(); i++) { + dataSize += + com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag( + structIdentifiers_.getInt(i)); + } + size += dataSize; + if (!getStructIdentifiersList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize); + } + structIdentifiersMemoizedSerializedSize = dataSize; + } + if (valueTypeCase_ == 8) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize( + 8, (boolean) ((java.lang.Boolean) valueType_)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.KeyRecipe.Part)) { + return super.equals(obj); + } + com.google.spanner.v1.KeyRecipe.Part other = (com.google.spanner.v1.KeyRecipe.Part) obj; + + if (getTag() != other.getTag()) return false; + if (order_ != other.order_) return false; + if (nullOrder_ != other.nullOrder_) return false; + if (hasType() != other.hasType()) return false; + if (hasType()) { + if (!getType().equals(other.getType())) return false; + } + if (!getStructIdentifiersList().equals(other.getStructIdentifiersList())) return false; + if (!getValueTypeCase().equals(other.getValueTypeCase())) return false; + switch (valueTypeCase_) { + case 5: + if (!getIdentifier().equals(other.getIdentifier())) return false; + break; + case 6: + if (!getValue().equals(other.getValue())) return false; + break; + case 8: + if (getRandom() != other.getRandom()) 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) + TAG_FIELD_NUMBER; + hash = (53 * hash) + getTag(); + hash = (37 * hash) + ORDER_FIELD_NUMBER; + hash = (53 * hash) + order_; + hash = (37 * hash) + NULL_ORDER_FIELD_NUMBER; + hash = (53 * hash) + nullOrder_; + if (hasType()) { + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + getType().hashCode(); + } + if (getStructIdentifiersCount() > 0) { + hash = (37 * hash) + STRUCT_IDENTIFIERS_FIELD_NUMBER; + hash = (53 * hash) + getStructIdentifiersList().hashCode(); + } + switch (valueTypeCase_) { + case 5: + hash = (37 * hash) + IDENTIFIER_FIELD_NUMBER; + hash = (53 * hash) + getIdentifier().hashCode(); + break; + case 6: + hash = (37 * hash) + VALUE_FIELD_NUMBER; + hash = (53 * hash) + getValue().hashCode(); + break; + case 8: + hash = (37 * hash) + RANDOM_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getRandom()); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.KeyRecipe.Part parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.KeyRecipe.Part 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * An ssformat key is composed of a sequence of tag numbers and key column
                                +     * values. `Part` represents a single tag or key column value.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.KeyRecipe.Part} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.KeyRecipe.Part) + com.google.spanner.v1.KeyRecipe.PartOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_Part_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_Part_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.KeyRecipe.Part.class, + com.google.spanner.v1.KeyRecipe.Part.Builder.class); + } + + // Construct using com.google.spanner.v1.KeyRecipe.Part.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTypeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + tag_ = 0; + order_ = 0; + nullOrder_ = 0; + type_ = null; + if (typeBuilder_ != null) { + typeBuilder_.dispose(); + typeBuilder_ = null; + } + if (valueBuilder_ != null) { + valueBuilder_.clear(); + } + structIdentifiers_ = emptyIntList(); + valueTypeCase_ = 0; + valueType_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_Part_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part getDefaultInstanceForType() { + return com.google.spanner.v1.KeyRecipe.Part.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part build() { + com.google.spanner.v1.KeyRecipe.Part result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part buildPartial() { + com.google.spanner.v1.KeyRecipe.Part result = + new com.google.spanner.v1.KeyRecipe.Part(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.KeyRecipe.Part result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.tag_ = tag_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.order_ = order_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.nullOrder_ = nullOrder_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000008) != 0)) { + result.type_ = typeBuilder_ == null ? type_ : typeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + structIdentifiers_.makeImmutable(); + result.structIdentifiers_ = structIdentifiers_; + } + result.bitField0_ |= to_bitField0_; + } + + private void buildPartialOneofs(com.google.spanner.v1.KeyRecipe.Part result) { + result.valueTypeCase_ = valueTypeCase_; + result.valueType_ = this.valueType_; + if (valueTypeCase_ == 6 && valueBuilder_ != null) { + result.valueType_ = valueBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.KeyRecipe.Part) { + return mergeFrom((com.google.spanner.v1.KeyRecipe.Part) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.KeyRecipe.Part other) { + if (other == com.google.spanner.v1.KeyRecipe.Part.getDefaultInstance()) return this; + if (other.getTag() != 0) { + setTag(other.getTag()); + } + if (other.order_ != 0) { + setOrderValue(other.getOrderValue()); + } + if (other.nullOrder_ != 0) { + setNullOrderValue(other.getNullOrderValue()); + } + if (other.hasType()) { + mergeType(other.getType()); + } + if (!other.structIdentifiers_.isEmpty()) { + if (structIdentifiers_.isEmpty()) { + structIdentifiers_ = other.structIdentifiers_; + structIdentifiers_.makeImmutable(); + bitField0_ |= 0x00000080; + } else { + ensureStructIdentifiersIsMutable(); + structIdentifiers_.addAll(other.structIdentifiers_); + } + onChanged(); + } + switch (other.getValueTypeCase()) { + case IDENTIFIER: + { + valueTypeCase_ = 5; + valueType_ = other.valueType_; + onChanged(); + break; + } + case VALUE: + { + mergeValue(other.getValue()); + break; + } + case RANDOM: + { + setRandom(other.getRandom()); + break; + } + case VALUETYPE_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 8: + { + tag_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: + { + order_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + nullOrder_ = input.readEnum(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 34: + { + input.readMessage(internalGetTypeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + java.lang.String s = input.readStringRequireUtf8(); + valueTypeCase_ = 5; + valueType_ = s; + break; + } // case 42 + case 50: + { + input.readMessage(internalGetValueFieldBuilder().getBuilder(), extensionRegistry); + valueTypeCase_ = 6; + break; + } // case 50 + case 56: + { + int v = input.readInt32(); + ensureStructIdentifiersIsMutable(); + structIdentifiers_.addInt(v); + break; + } // case 56 + case 58: + { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureStructIdentifiersIsMutable(); + while (input.getBytesUntilLimit() > 0) { + structIdentifiers_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 58 + case 64: + { + valueType_ = input.readBool(); + valueTypeCase_ = 8; + break; + } // case 64 + 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 valueTypeCase_ = 0; + private java.lang.Object valueType_; + + public ValueTypeCase getValueTypeCase() { + return ValueTypeCase.forNumber(valueTypeCase_); + } + + public Builder clearValueType() { + valueTypeCase_ = 0; + valueType_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int tag_; + + /** + * + * + *
                                +       * If non-zero, `tag` is the only field present in this `Part`. The part
                                +       * is encoded by appending `tag` to the ssformat key.
                                +       * 
                                + * + * uint32 tag = 1; + * + * @return The tag. + */ + @java.lang.Override + public int getTag() { + return tag_; + } + + /** + * + * + *
                                +       * If non-zero, `tag` is the only field present in this `Part`. The part
                                +       * is encoded by appending `tag` to the ssformat key.
                                +       * 
                                + * + * uint32 tag = 1; + * + * @param value The tag to set. + * @return This builder for chaining. + */ + public Builder setTag(int value) { + + tag_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * If non-zero, `tag` is the only field present in this `Part`. The part
                                +       * is encoded by appending `tag` to the ssformat key.
                                +       * 
                                + * + * uint32 tag = 1; + * + * @return This builder for chaining. + */ + public Builder clearTag() { + bitField0_ = (bitField0_ & ~0x00000001); + tag_ = 0; + onChanged(); + return this; + } + + private int order_ = 0; + + /** + * + * + *
                                +       * Whether the key column is sorted ascending or descending. Only present
                                +       * if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @return The enum numeric value on the wire for order. + */ + @java.lang.Override + public int getOrderValue() { + return order_; + } + + /** + * + * + *
                                +       * Whether the key column is sorted ascending or descending. Only present
                                +       * if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @param value The enum numeric value on the wire for order to set. + * @return This builder for chaining. + */ + public Builder setOrderValue(int value) { + order_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Whether the key column is sorted ascending or descending. Only present
                                +       * if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @return The order. + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part.Order getOrder() { + com.google.spanner.v1.KeyRecipe.Part.Order result = + com.google.spanner.v1.KeyRecipe.Part.Order.forNumber(order_); + return result == null ? com.google.spanner.v1.KeyRecipe.Part.Order.UNRECOGNIZED : result; + } + + /** + * + * + *
                                +       * Whether the key column is sorted ascending or descending. Only present
                                +       * if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @param value The order to set. + * @return This builder for chaining. + */ + public Builder setOrder(com.google.spanner.v1.KeyRecipe.Part.Order value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + order_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Whether the key column is sorted ascending or descending. Only present
                                +       * if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.Order order = 2; + * + * @return This builder for chaining. + */ + public Builder clearOrder() { + bitField0_ = (bitField0_ & ~0x00000002); + order_ = 0; + onChanged(); + return this; + } + + private int nullOrder_ = 0; + + /** + * + * + *
                                +       * How NULLs are represented in the encoded key part. Only present if `tag`
                                +       * is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @return The enum numeric value on the wire for nullOrder. + */ + @java.lang.Override + public int getNullOrderValue() { + return nullOrder_; + } + + /** + * + * + *
                                +       * How NULLs are represented in the encoded key part. Only present if `tag`
                                +       * is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @param value The enum numeric value on the wire for nullOrder to set. + * @return This builder for chaining. + */ + public Builder setNullOrderValue(int value) { + nullOrder_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * How NULLs are represented in the encoded key part. Only present if `tag`
                                +       * is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @return The nullOrder. + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part.NullOrder getNullOrder() { + com.google.spanner.v1.KeyRecipe.Part.NullOrder result = + com.google.spanner.v1.KeyRecipe.Part.NullOrder.forNumber(nullOrder_); + return result == null + ? com.google.spanner.v1.KeyRecipe.Part.NullOrder.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +       * How NULLs are represented in the encoded key part. Only present if `tag`
                                +       * is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @param value The nullOrder to set. + * @return This builder for chaining. + */ + public Builder setNullOrder(com.google.spanner.v1.KeyRecipe.Part.NullOrder value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + nullOrder_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * How NULLs are represented in the encoded key part. Only present if `tag`
                                +       * is zero.
                                +       * 
                                + * + * .google.spanner.v1.KeyRecipe.Part.NullOrder null_order = 3; + * + * @return This builder for chaining. + */ + public Builder clearNullOrder() { + bitField0_ = (bitField0_ & ~0x00000004); + nullOrder_ = 0; + onChanged(); + return this; + } + + private com.google.spanner.v1.Type type_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Type, + com.google.spanner.v1.Type.Builder, + com.google.spanner.v1.TypeOrBuilder> + typeBuilder_; + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + * + * @return Whether the type field is set. + */ + public boolean hasType() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + * + * @return The type. + */ + public com.google.spanner.v1.Type getType() { + if (typeBuilder_ == null) { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } else { + return typeBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + public Builder setType(com.google.spanner.v1.Type value) { + if (typeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + type_ = value; + } else { + typeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + public Builder setType(com.google.spanner.v1.Type.Builder builderForValue) { + if (typeBuilder_ == null) { + type_ = builderForValue.build(); + } else { + typeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + public Builder mergeType(com.google.spanner.v1.Type value) { + if (typeBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && type_ != null + && type_ != com.google.spanner.v1.Type.getDefaultInstance()) { + getTypeBuilder().mergeFrom(value); + } else { + type_ = value; + } + } else { + typeBuilder_.mergeFrom(value); + } + if (type_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000008); + type_ = null; + if (typeBuilder_ != null) { + typeBuilder_.dispose(); + typeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + public com.google.spanner.v1.Type.Builder getTypeBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetTypeFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { + if (typeBuilder_ != null) { + return typeBuilder_.getMessageOrBuilder(); + } else { + return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; + } + } + + /** + * + * + *
                                +       * The type of the key part. Only present if `tag` is zero.
                                +       * 
                                + * + * .google.spanner.v1.Type type = 4; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Type, + com.google.spanner.v1.Type.Builder, + com.google.spanner.v1.TypeOrBuilder> + internalGetTypeFieldBuilder() { + if (typeBuilder_ == null) { + typeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Type, + com.google.spanner.v1.Type.Builder, + com.google.spanner.v1.TypeOrBuilder>( + getType(), getParentForChildren(), isClean()); + type_ = null; + } + return typeBuilder_; + } + + /** + * + * + *
                                +       * `identifier` is the name of the column or query parameter.
                                +       * 
                                + * + * string identifier = 5; + * + * @return Whether the identifier field is set. + */ + @java.lang.Override + public boolean hasIdentifier() { + return valueTypeCase_ == 5; + } + + /** + * + * + *
                                +       * `identifier` is the name of the column or query parameter.
                                +       * 
                                + * + * string identifier = 5; + * + * @return The identifier. + */ + @java.lang.Override + public java.lang.String getIdentifier() { + java.lang.Object ref = ""; + if (valueTypeCase_ == 5) { + ref = valueType_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (valueTypeCase_ == 5) { + valueType_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * `identifier` is the name of the column or query parameter.
                                +       * 
                                + * + * string identifier = 5; + * + * @return The bytes for identifier. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIdentifierBytes() { + java.lang.Object ref = ""; + if (valueTypeCase_ == 5) { + ref = valueType_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (valueTypeCase_ == 5) { + valueType_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * `identifier` is the name of the column or query parameter.
                                +       * 
                                + * + * string identifier = 5; + * + * @param value The identifier to set. + * @return This builder for chaining. + */ + public Builder setIdentifier(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + valueTypeCase_ = 5; + valueType_ = value; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * `identifier` is the name of the column or query parameter.
                                +       * 
                                + * + * string identifier = 5; + * + * @return This builder for chaining. + */ + public Builder clearIdentifier() { + if (valueTypeCase_ == 5) { + valueTypeCase_ = 0; + valueType_ = null; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * `identifier` is the name of the column or query parameter.
                                +       * 
                                + * + * string identifier = 5; + * + * @param value The bytes for identifier to set. + * @return This builder for chaining. + */ + public Builder setIdentifierBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + valueTypeCase_ = 5; + valueType_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder> + valueBuilder_; + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + * + * @return Whether the value field is set. + */ + @java.lang.Override + public boolean hasValue() { + return valueTypeCase_ == 6; + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + * + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.Value getValue() { + if (valueBuilder_ == null) { + if (valueTypeCase_ == 6) { + return (com.google.protobuf.Value) valueType_; + } + return com.google.protobuf.Value.getDefaultInstance(); + } else { + if (valueTypeCase_ == 6) { + return valueBuilder_.getMessage(); + } + return com.google.protobuf.Value.getDefaultInstance(); + } + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + */ + public Builder setValue(com.google.protobuf.Value value) { + if (valueBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + valueType_ = value; + onChanged(); + } else { + valueBuilder_.setMessage(value); + } + valueTypeCase_ = 6; + return this; + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + */ + public Builder setValue(com.google.protobuf.Value.Builder builderForValue) { + if (valueBuilder_ == null) { + valueType_ = builderForValue.build(); + onChanged(); + } else { + valueBuilder_.setMessage(builderForValue.build()); + } + valueTypeCase_ = 6; + return this; + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + */ + public Builder mergeValue(com.google.protobuf.Value value) { + if (valueBuilder_ == null) { + if (valueTypeCase_ == 6 && valueType_ != com.google.protobuf.Value.getDefaultInstance()) { + valueType_ = + com.google.protobuf.Value.newBuilder((com.google.protobuf.Value) valueType_) + .mergeFrom(value) + .buildPartial(); + } else { + valueType_ = value; + } + onChanged(); + } else { + if (valueTypeCase_ == 6) { + valueBuilder_.mergeFrom(value); + } else { + valueBuilder_.setMessage(value); + } + } + valueTypeCase_ = 6; + return this; + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + */ + public Builder clearValue() { + if (valueBuilder_ == null) { + if (valueTypeCase_ == 6) { + valueTypeCase_ = 0; + valueType_ = null; + onChanged(); + } + } else { + if (valueTypeCase_ == 6) { + valueTypeCase_ = 0; + valueType_ = null; + } + valueBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + */ + public com.google.protobuf.Value.Builder getValueBuilder() { + return internalGetValueFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + */ + @java.lang.Override + public com.google.protobuf.ValueOrBuilder getValueOrBuilder() { + if ((valueTypeCase_ == 6) && (valueBuilder_ != null)) { + return valueBuilder_.getMessageOrBuilder(); + } else { + if (valueTypeCase_ == 6) { + return (com.google.protobuf.Value) valueType_; + } + return com.google.protobuf.Value.getDefaultInstance(); + } + } + + /** + * + * + *
                                +       * The constant value of the key part.
                                +       * It is present when query uses a constant as a part of the key.
                                +       * 
                                + * + * .google.protobuf.Value value = 6; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder> + internalGetValueFieldBuilder() { + if (valueBuilder_ == null) { + if (!(valueTypeCase_ == 6)) { + valueType_ = com.google.protobuf.Value.getDefaultInstance(); + } + valueBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder>( + (com.google.protobuf.Value) valueType_, getParentForChildren(), isClean()); + valueType_ = null; + } + valueTypeCase_ = 6; + onChanged(); + return valueBuilder_; + } + + /** + * + * + *
                                +       * If true, the client is responsible to fill in the value randomly.
                                +       * It's relevant only for the INT64 type.
                                +       * 
                                + * + * bool random = 8; + * + * @return Whether the random field is set. + */ + public boolean hasRandom() { + return valueTypeCase_ == 8; + } + + /** + * + * + *
                                +       * If true, the client is responsible to fill in the value randomly.
                                +       * It's relevant only for the INT64 type.
                                +       * 
                                + * + * bool random = 8; + * + * @return The random. + */ + public boolean getRandom() { + if (valueTypeCase_ == 8) { + return (java.lang.Boolean) valueType_; + } + return false; + } + + /** + * + * + *
                                +       * If true, the client is responsible to fill in the value randomly.
                                +       * It's relevant only for the INT64 type.
                                +       * 
                                + * + * bool random = 8; + * + * @param value The random to set. + * @return This builder for chaining. + */ + public Builder setRandom(boolean value) { + + valueTypeCase_ = 8; + valueType_ = value; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * If true, the client is responsible to fill in the value randomly.
                                +       * It's relevant only for the INT64 type.
                                +       * 
                                + * + * bool random = 8; + * + * @return This builder for chaining. + */ + public Builder clearRandom() { + if (valueTypeCase_ == 8) { + valueTypeCase_ = 0; + valueType_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.Internal.IntList structIdentifiers_ = emptyIntList(); + + private void ensureStructIdentifiersIsMutable() { + if (!structIdentifiers_.isModifiable()) { + structIdentifiers_ = makeMutableCopy(structIdentifiers_); + } + bitField0_ |= 0x00000080; + } + + /** + * + * + *
                                +       * It is a repeated field to support fetching key columns from nested
                                +       * structs, such as `STRUCT` query parameters.
                                +       * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @return A list containing the structIdentifiers. + */ + public java.util.List getStructIdentifiersList() { + structIdentifiers_.makeImmutable(); + return structIdentifiers_; + } + + /** + * + * + *
                                +       * It is a repeated field to support fetching key columns from nested
                                +       * structs, such as `STRUCT` query parameters.
                                +       * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @return The count of structIdentifiers. + */ + public int getStructIdentifiersCount() { + return structIdentifiers_.size(); + } + + /** + * + * + *
                                +       * It is a repeated field to support fetching key columns from nested
                                +       * structs, such as `STRUCT` query parameters.
                                +       * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @param index The index of the element to return. + * @return The structIdentifiers at the given index. + */ + public int getStructIdentifiers(int index) { + return structIdentifiers_.getInt(index); + } + + /** + * + * + *
                                +       * It is a repeated field to support fetching key columns from nested
                                +       * structs, such as `STRUCT` query parameters.
                                +       * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @param index The index to set the value at. + * @param value The structIdentifiers to set. + * @return This builder for chaining. + */ + public Builder setStructIdentifiers(int index, int value) { + + ensureStructIdentifiersIsMutable(); + structIdentifiers_.setInt(index, value); + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * It is a repeated field to support fetching key columns from nested
                                +       * structs, such as `STRUCT` query parameters.
                                +       * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @param value The structIdentifiers to add. + * @return This builder for chaining. + */ + public Builder addStructIdentifiers(int value) { + + ensureStructIdentifiersIsMutable(); + structIdentifiers_.addInt(value); + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * It is a repeated field to support fetching key columns from nested
                                +       * structs, such as `STRUCT` query parameters.
                                +       * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @param values The structIdentifiers to add. + * @return This builder for chaining. + */ + public Builder addAllStructIdentifiers( + java.lang.Iterable values) { + ensureStructIdentifiersIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, structIdentifiers_); + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * It is a repeated field to support fetching key columns from nested
                                +       * structs, such as `STRUCT` query parameters.
                                +       * 
                                + * + * repeated int32 struct_identifiers = 7; + * + * @return This builder for chaining. + */ + public Builder clearStructIdentifiers() { + structIdentifiers_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.KeyRecipe.Part) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.KeyRecipe.Part) + private static final com.google.spanner.v1.KeyRecipe.Part DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.KeyRecipe.Part(); + } + + public static com.google.spanner.v1.KeyRecipe.Part getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Part parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int targetCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object target_; + + public enum TargetCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + TABLE_NAME(1), + INDEX_NAME(2), + OPERATION_UID(3), + TARGET_NOT_SET(0); + private final int value; + + private TargetCase(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 TargetCase valueOf(int value) { + return forNumber(value); + } + + public static TargetCase forNumber(int value) { + switch (value) { + case 1: + return TABLE_NAME; + case 2: + return INDEX_NAME; + case 3: + return OPERATION_UID; + case 0: + return TARGET_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public TargetCase getTargetCase() { + return TargetCase.forNumber(targetCase_); + } + + public static final int TABLE_NAME_FIELD_NUMBER = 1; + + /** + * + * + *
                                +   * A table name, matching the name from the database schema.
                                +   * 
                                + * + * string table_name = 1; + * + * @return Whether the tableName field is set. + */ + public boolean hasTableName() { + return targetCase_ == 1; + } + + /** + * + * + *
                                +   * A table name, matching the name from the database schema.
                                +   * 
                                + * + * string table_name = 1; + * + * @return The tableName. + */ + public java.lang.String getTableName() { + java.lang.Object ref = ""; + if (targetCase_ == 1) { + ref = target_; + } + 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(); + if (targetCase_ == 1) { + target_ = s; + } + return s; + } + } + + /** + * + * + *
                                +   * A table name, matching the name from the database schema.
                                +   * 
                                + * + * string table_name = 1; + * + * @return The bytes for tableName. + */ + public com.google.protobuf.ByteString getTableNameBytes() { + java.lang.Object ref = ""; + if (targetCase_ == 1) { + ref = target_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (targetCase_ == 1) { + target_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int INDEX_NAME_FIELD_NUMBER = 2; + + /** + * + * + *
                                +   * An index name, matching the name from the database schema.
                                +   * 
                                + * + * string index_name = 2; + * + * @return Whether the indexName field is set. + */ + public boolean hasIndexName() { + return targetCase_ == 2; + } + + /** + * + * + *
                                +   * An index name, matching the name from the database schema.
                                +   * 
                                + * + * string index_name = 2; + * + * @return The indexName. + */ + public java.lang.String getIndexName() { + java.lang.Object ref = ""; + if (targetCase_ == 2) { + ref = target_; + } + 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(); + if (targetCase_ == 2) { + target_ = s; + } + return s; + } + } + + /** + * + * + *
                                +   * An index name, matching the name from the database schema.
                                +   * 
                                + * + * string index_name = 2; + * + * @return The bytes for indexName. + */ + public com.google.protobuf.ByteString getIndexNameBytes() { + java.lang.Object ref = ""; + if (targetCase_ == 2) { + ref = target_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (targetCase_ == 2) { + target_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int OPERATION_UID_FIELD_NUMBER = 3; + + /** + * + * + *
                                +   * The UID of a query, matching the UID from `RoutingHint`.
                                +   * 
                                + * + * uint64 operation_uid = 3; + * + * @return Whether the operationUid field is set. + */ + @java.lang.Override + public boolean hasOperationUid() { + return targetCase_ == 3; + } + + /** + * + * + *
                                +   * The UID of a query, matching the UID from `RoutingHint`.
                                +   * 
                                + * + * uint64 operation_uid = 3; + * + * @return The operationUid. + */ + @java.lang.Override + public long getOperationUid() { + if (targetCase_ == 3) { + return (java.lang.Long) target_; + } + return 0L; + } + + public static final int PART_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private java.util.List part_; + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + @java.lang.Override + public java.util.List getPartList() { + return part_; + } + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + @java.lang.Override + public java.util.List + getPartOrBuilderList() { + return part_; + } + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + @java.lang.Override + public int getPartCount() { + return part_.size(); + } + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.Part getPart(int index) { + return part_.get(index); + } + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipe.PartOrBuilder getPartOrBuilder(int index) { + return part_.get(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (targetCase_ == 1) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, target_); + } + if (targetCase_ == 2) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, target_); + } + if (targetCase_ == 3) { + output.writeUInt64(3, (long) ((java.lang.Long) target_)); + } + for (int i = 0; i < part_.size(); i++) { + output.writeMessage(4, part_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (targetCase_ == 1) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, target_); + } + if (targetCase_ == 2) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, target_); + } + if (targetCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeUInt64Size( + 3, (long) ((java.lang.Long) target_)); + } + for (int i = 0; i < part_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, part_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.KeyRecipe)) { + return super.equals(obj); + } + com.google.spanner.v1.KeyRecipe other = (com.google.spanner.v1.KeyRecipe) obj; + + if (!getPartList().equals(other.getPartList())) return false; + if (!getTargetCase().equals(other.getTargetCase())) return false; + switch (targetCase_) { + case 1: + if (!getTableName().equals(other.getTableName())) return false; + break; + case 2: + if (!getIndexName().equals(other.getIndexName())) return false; + break; + case 3: + if (getOperationUid() != other.getOperationUid()) 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(); + if (getPartCount() > 0) { + hash = (37 * hash) + PART_FIELD_NUMBER; + hash = (53 * hash) + getPartList().hashCode(); + } + switch (targetCase_) { + case 1: + hash = (37 * hash) + TABLE_NAME_FIELD_NUMBER; + hash = (53 * hash) + getTableName().hashCode(); + break; + case 2: + hash = (37 * hash) + INDEX_NAME_FIELD_NUMBER; + hash = (53 * hash) + getIndexName().hashCode(); + break; + case 3: + hash = (37 * hash) + OPERATION_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOperationUid()); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.KeyRecipe parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.KeyRecipe parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.KeyRecipe parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.KeyRecipe 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * A `KeyRecipe` provides the metadata required to translate reads, mutations,
                                +   * and queries into a byte array in "sortable string format" (ssformat)that can
                                +   * be used with `Range`s to route requests. Note that the client *must* tolerate
                                +   * `KeyRecipe`s that appear to be invalid, since the `KeyRecipe` format may
                                +   * change over time. Requests with invalid `KeyRecipe`s should be routed to a
                                +   * default server.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.KeyRecipe} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.KeyRecipe) + com.google.spanner.v1.KeyRecipeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.KeyRecipe.class, com.google.spanner.v1.KeyRecipe.Builder.class); + } + + // Construct using com.google.spanner.v1.KeyRecipe.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (partBuilder_ == null) { + part_ = java.util.Collections.emptyList(); + } else { + part_ = null; + partBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + targetCase_ = 0; + target_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_KeyRecipe_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe getDefaultInstanceForType() { + return com.google.spanner.v1.KeyRecipe.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe build() { + com.google.spanner.v1.KeyRecipe result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe buildPartial() { + com.google.spanner.v1.KeyRecipe result = new com.google.spanner.v1.KeyRecipe(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.KeyRecipe result) { + if (partBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + part_ = java.util.Collections.unmodifiableList(part_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.part_ = part_; + } else { + result.part_ = partBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.KeyRecipe result) { + int from_bitField0_ = bitField0_; + } + + private void buildPartialOneofs(com.google.spanner.v1.KeyRecipe result) { + result.targetCase_ = targetCase_; + result.target_ = this.target_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.KeyRecipe) { + return mergeFrom((com.google.spanner.v1.KeyRecipe) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.KeyRecipe other) { + if (other == com.google.spanner.v1.KeyRecipe.getDefaultInstance()) return this; + if (partBuilder_ == null) { + if (!other.part_.isEmpty()) { + if (part_.isEmpty()) { + part_ = other.part_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensurePartIsMutable(); + part_.addAll(other.part_); + } + onChanged(); + } + } else { + if (!other.part_.isEmpty()) { + if (partBuilder_.isEmpty()) { + partBuilder_.dispose(); + partBuilder_ = null; + part_ = other.part_; + bitField0_ = (bitField0_ & ~0x00000008); + partBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetPartFieldBuilder() + : null; + } else { + partBuilder_.addAllMessages(other.part_); + } + } + } + switch (other.getTargetCase()) { + case TABLE_NAME: + { + targetCase_ = 1; + target_ = other.target_; + onChanged(); + break; + } + case INDEX_NAME: + { + targetCase_ = 2; + target_ = other.target_; + onChanged(); + break; + } + case OPERATION_UID: + { + setOperationUid(other.getOperationUid()); + break; + } + case TARGET_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: + { + java.lang.String s = input.readStringRequireUtf8(); + targetCase_ = 1; + target_ = s; + break; + } // case 10 + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + targetCase_ = 2; + target_ = s; + break; + } // case 18 + case 24: + { + target_ = input.readUInt64(); + targetCase_ = 3; + break; + } // case 24 + case 34: + { + com.google.spanner.v1.KeyRecipe.Part m = + input.readMessage( + com.google.spanner.v1.KeyRecipe.Part.parser(), extensionRegistry); + if (partBuilder_ == null) { + ensurePartIsMutable(); + part_.add(m); + } else { + partBuilder_.addMessage(m); + } + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int targetCase_ = 0; + private java.lang.Object target_; + + public TargetCase getTargetCase() { + return TargetCase.forNumber(targetCase_); + } + + public Builder clearTarget() { + targetCase_ = 0; + target_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + /** + * + * + *
                                +     * A table name, matching the name from the database schema.
                                +     * 
                                + * + * string table_name = 1; + * + * @return Whether the tableName field is set. + */ + @java.lang.Override + public boolean hasTableName() { + return targetCase_ == 1; + } + + /** + * + * + *
                                +     * A table name, matching the name from the database schema.
                                +     * 
                                + * + * string table_name = 1; + * + * @return The tableName. + */ + @java.lang.Override + public java.lang.String getTableName() { + java.lang.Object ref = ""; + if (targetCase_ == 1) { + ref = target_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (targetCase_ == 1) { + target_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * A table name, matching the name from the database schema.
                                +     * 
                                + * + * string table_name = 1; + * + * @return The bytes for tableName. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTableNameBytes() { + java.lang.Object ref = ""; + if (targetCase_ == 1) { + ref = target_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (targetCase_ == 1) { + target_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * A table name, matching the name from the database schema.
                                +     * 
                                + * + * string table_name = 1; + * + * @param value The tableName to set. + * @return This builder for chaining. + */ + public Builder setTableName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + targetCase_ = 1; + target_ = value; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A table name, matching the name from the database schema.
                                +     * 
                                + * + * string table_name = 1; + * + * @return This builder for chaining. + */ + public Builder clearTableName() { + if (targetCase_ == 1) { + targetCase_ = 0; + target_ = null; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * A table name, matching the name from the database schema.
                                +     * 
                                + * + * string table_name = 1; + * + * @param value The bytes for tableName to set. + * @return This builder for chaining. + */ + public Builder setTableNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + targetCase_ = 1; + target_ = value; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * An index name, matching the name from the database schema.
                                +     * 
                                + * + * string index_name = 2; + * + * @return Whether the indexName field is set. + */ + @java.lang.Override + public boolean hasIndexName() { + return targetCase_ == 2; + } + + /** + * + * + *
                                +     * An index name, matching the name from the database schema.
                                +     * 
                                + * + * string index_name = 2; + * + * @return The indexName. + */ + @java.lang.Override + public java.lang.String getIndexName() { + java.lang.Object ref = ""; + if (targetCase_ == 2) { + ref = target_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (targetCase_ == 2) { + target_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * An index name, matching the name from the database schema.
                                +     * 
                                + * + * string index_name = 2; + * + * @return The bytes for indexName. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIndexNameBytes() { + java.lang.Object ref = ""; + if (targetCase_ == 2) { + ref = target_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (targetCase_ == 2) { + target_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * An index name, matching the name from the database schema.
                                +     * 
                                + * + * string index_name = 2; + * + * @param value The indexName to set. + * @return This builder for chaining. + */ + public Builder setIndexName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + targetCase_ = 2; + target_ = value; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * An index name, matching the name from the database schema.
                                +     * 
                                + * + * string index_name = 2; + * + * @return This builder for chaining. + */ + public Builder clearIndexName() { + if (targetCase_ == 2) { + targetCase_ = 0; + target_ = null; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * An index name, matching the name from the database schema.
                                +     * 
                                + * + * string index_name = 2; + * + * @param value The bytes for indexName to set. + * @return This builder for chaining. + */ + public Builder setIndexNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + targetCase_ = 2; + target_ = value; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The UID of a query, matching the UID from `RoutingHint`.
                                +     * 
                                + * + * uint64 operation_uid = 3; + * + * @return Whether the operationUid field is set. + */ + public boolean hasOperationUid() { + return targetCase_ == 3; + } + + /** + * + * + *
                                +     * The UID of a query, matching the UID from `RoutingHint`.
                                +     * 
                                + * + * uint64 operation_uid = 3; + * + * @return The operationUid. + */ + public long getOperationUid() { + if (targetCase_ == 3) { + return (java.lang.Long) target_; + } + return 0L; + } + + /** + * + * + *
                                +     * The UID of a query, matching the UID from `RoutingHint`.
                                +     * 
                                + * + * uint64 operation_uid = 3; + * + * @param value The operationUid to set. + * @return This builder for chaining. + */ + public Builder setOperationUid(long value) { + + targetCase_ = 3; + target_ = value; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The UID of a query, matching the UID from `RoutingHint`.
                                +     * 
                                + * + * uint64 operation_uid = 3; + * + * @return This builder for chaining. + */ + public Builder clearOperationUid() { + if (targetCase_ == 3) { + targetCase_ = 0; + target_ = null; + onChanged(); + } + return this; + } + + private java.util.List part_ = + java.util.Collections.emptyList(); + + private void ensurePartIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + part_ = new java.util.ArrayList(part_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.KeyRecipe.Part, + com.google.spanner.v1.KeyRecipe.Part.Builder, + com.google.spanner.v1.KeyRecipe.PartOrBuilder> + partBuilder_; + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public java.util.List getPartList() { + if (partBuilder_ == null) { + return java.util.Collections.unmodifiableList(part_); + } else { + return partBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public int getPartCount() { + if (partBuilder_ == null) { + return part_.size(); + } else { + return partBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public com.google.spanner.v1.KeyRecipe.Part getPart(int index) { + if (partBuilder_ == null) { + return part_.get(index); + } else { + return partBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder setPart(int index, com.google.spanner.v1.KeyRecipe.Part value) { + if (partBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePartIsMutable(); + part_.set(index, value); + onChanged(); + } else { + partBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder setPart( + int index, com.google.spanner.v1.KeyRecipe.Part.Builder builderForValue) { + if (partBuilder_ == null) { + ensurePartIsMutable(); + part_.set(index, builderForValue.build()); + onChanged(); + } else { + partBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder addPart(com.google.spanner.v1.KeyRecipe.Part value) { + if (partBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePartIsMutable(); + part_.add(value); + onChanged(); + } else { + partBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder addPart(int index, com.google.spanner.v1.KeyRecipe.Part value) { + if (partBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePartIsMutable(); + part_.add(index, value); + onChanged(); + } else { + partBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder addPart(com.google.spanner.v1.KeyRecipe.Part.Builder builderForValue) { + if (partBuilder_ == null) { + ensurePartIsMutable(); + part_.add(builderForValue.build()); + onChanged(); + } else { + partBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder addPart( + int index, com.google.spanner.v1.KeyRecipe.Part.Builder builderForValue) { + if (partBuilder_ == null) { + ensurePartIsMutable(); + part_.add(index, builderForValue.build()); + onChanged(); + } else { + partBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder addAllPart( + java.lang.Iterable values) { + if (partBuilder_ == null) { + ensurePartIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, part_); + onChanged(); + } else { + partBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder clearPart() { + if (partBuilder_ == null) { + part_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + partBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public Builder removePart(int index) { + if (partBuilder_ == null) { + ensurePartIsMutable(); + part_.remove(index); + onChanged(); + } else { + partBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public com.google.spanner.v1.KeyRecipe.Part.Builder getPartBuilder(int index) { + return internalGetPartFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public com.google.spanner.v1.KeyRecipe.PartOrBuilder getPartOrBuilder(int index) { + if (partBuilder_ == null) { + return part_.get(index); + } else { + return partBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public java.util.List + getPartOrBuilderList() { + if (partBuilder_ != null) { + return partBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(part_); + } + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public com.google.spanner.v1.KeyRecipe.Part.Builder addPartBuilder() { + return internalGetPartFieldBuilder() + .addBuilder(com.google.spanner.v1.KeyRecipe.Part.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public com.google.spanner.v1.KeyRecipe.Part.Builder addPartBuilder(int index) { + return internalGetPartFieldBuilder() + .addBuilder(index, com.google.spanner.v1.KeyRecipe.Part.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Parts are in the order they should appear in the encoded key.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + public java.util.List getPartBuilderList() { + return internalGetPartFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.KeyRecipe.Part, + com.google.spanner.v1.KeyRecipe.Part.Builder, + com.google.spanner.v1.KeyRecipe.PartOrBuilder> + internalGetPartFieldBuilder() { + if (partBuilder_ == null) { + partBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.KeyRecipe.Part, + com.google.spanner.v1.KeyRecipe.Part.Builder, + com.google.spanner.v1.KeyRecipe.PartOrBuilder>( + part_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean()); + part_ = null; + } + return partBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.KeyRecipe) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.KeyRecipe) + private static final com.google.spanner.v1.KeyRecipe DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.KeyRecipe(); + } + + public static com.google.spanner.v1.KeyRecipe getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public KeyRecipe parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.KeyRecipe getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRecipeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRecipeOrBuilder.java new file mode 100644 index 00000000000..4f8f4bfae9b --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRecipeOrBuilder.java @@ -0,0 +1,189 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface KeyRecipeOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.KeyRecipe) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * A table name, matching the name from the database schema.
                                +   * 
                                + * + * string table_name = 1; + * + * @return Whether the tableName field is set. + */ + boolean hasTableName(); + + /** + * + * + *
                                +   * A table name, matching the name from the database schema.
                                +   * 
                                + * + * string table_name = 1; + * + * @return The tableName. + */ + java.lang.String getTableName(); + + /** + * + * + *
                                +   * A table name, matching the name from the database schema.
                                +   * 
                                + * + * string table_name = 1; + * + * @return The bytes for tableName. + */ + com.google.protobuf.ByteString getTableNameBytes(); + + /** + * + * + *
                                +   * An index name, matching the name from the database schema.
                                +   * 
                                + * + * string index_name = 2; + * + * @return Whether the indexName field is set. + */ + boolean hasIndexName(); + + /** + * + * + *
                                +   * An index name, matching the name from the database schema.
                                +   * 
                                + * + * string index_name = 2; + * + * @return The indexName. + */ + java.lang.String getIndexName(); + + /** + * + * + *
                                +   * An index name, matching the name from the database schema.
                                +   * 
                                + * + * string index_name = 2; + * + * @return The bytes for indexName. + */ + com.google.protobuf.ByteString getIndexNameBytes(); + + /** + * + * + *
                                +   * The UID of a query, matching the UID from `RoutingHint`.
                                +   * 
                                + * + * uint64 operation_uid = 3; + * + * @return Whether the operationUid field is set. + */ + boolean hasOperationUid(); + + /** + * + * + *
                                +   * The UID of a query, matching the UID from `RoutingHint`.
                                +   * 
                                + * + * uint64 operation_uid = 3; + * + * @return The operationUid. + */ + long getOperationUid(); + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + java.util.List getPartList(); + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + com.google.spanner.v1.KeyRecipe.Part getPart(int index); + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + int getPartCount(); + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + java.util.List getPartOrBuilderList(); + + /** + * + * + *
                                +   * Parts are in the order they should appear in the encoded key.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe.Part part = 4; + */ + com.google.spanner.v1.KeyRecipe.PartOrBuilder getPartOrBuilder(int index); + + com.google.spanner.v1.KeyRecipe.TargetCase getTargetCase(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java index e4ce7254cc3..f49b67163bf 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/keys.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -34,13 +35,25 @@ * * Protobuf type {@code google.spanner.v1.KeySet} */ -public final class KeySet extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class KeySet extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.KeySet) KeySetOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "KeySet"); + } + // Use KeySet.newBuilder() to construct. - private KeySet(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private KeySet(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -49,18 +62,12 @@ private KeySet() { ranges_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new KeySet(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.KeysProto.internal_static_google_spanner_v1_KeySet_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.KeysProto .internal_static_google_spanner_v1_KeySet_fieldAccessorTable @@ -72,6 +79,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List keys_; + /** * * @@ -88,6 +96,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getKeysList() { return keys_; } + /** * * @@ -104,6 +113,7 @@ public java.util.List getKeysList() { public java.util.List getKeysOrBuilderList() { return keys_; } + /** * * @@ -120,6 +130,7 @@ public java.util.List getKeysO public int getKeysCount() { return keys_.size(); } + /** * * @@ -136,6 +147,7 @@ public int getKeysCount() { public com.google.protobuf.ListValue getKeys(int index) { return keys_.get(index); } + /** * * @@ -157,12 +169,13 @@ public com.google.protobuf.ListValueOrBuilder getKeysOrBuilder(int index) { @SuppressWarnings("serial") private java.util.List ranges_; + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -171,12 +184,13 @@ public com.google.protobuf.ListValueOrBuilder getKeysOrBuilder(int index) { public java.util.List getRangesList() { return ranges_; } + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -186,12 +200,13 @@ public java.util.List getRangesList() { getRangesOrBuilderList() { return ranges_; } + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -200,12 +215,13 @@ public java.util.List getRangesList() { public int getRangesCount() { return ranges_.size(); } + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -214,12 +230,13 @@ public int getRangesCount() { public com.google.spanner.v1.KeyRange getRanges(int index) { return ranges_.get(index); } + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -231,6 +248,7 @@ public com.google.spanner.v1.KeyRangeOrBuilder getRangesOrBuilder(int index) { public static final int ALL_FIELD_NUMBER = 3; private boolean all_ = false; + /** * * @@ -370,38 +388,38 @@ public static com.google.spanner.v1.KeySet parseFrom( public static com.google.spanner.v1.KeySet parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.KeySet parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.KeySet parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.KeySet parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.KeySet parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.KeySet parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -424,10 +442,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -443,7 +462,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.KeySet} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.KeySet) com.google.spanner.v1.KeySetOrBuilder { @@ -452,7 +471,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.KeysProto .internal_static_google_spanner_v1_KeySet_fieldAccessorTable @@ -463,7 +482,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.KeySet.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -547,39 +566,6 @@ private void buildPartial0(com.google.spanner.v1.KeySet result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.KeySet) { @@ -611,8 +597,8 @@ public Builder mergeFrom(com.google.spanner.v1.KeySet other) { keys_ = other.keys_; bitField0_ = (bitField0_ & ~0x00000001); keysBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getKeysFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetKeysFieldBuilder() : null; } else { keysBuilder_.addAllMessages(other.keys_); @@ -638,8 +624,8 @@ public Builder mergeFrom(com.google.spanner.v1.KeySet other) { ranges_ = other.ranges_; bitField0_ = (bitField0_ & ~0x00000002); rangesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getRangesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetRangesFieldBuilder() : null; } else { rangesBuilder_.addAllMessages(other.ranges_); @@ -733,7 +719,7 @@ private void ensureKeysIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> @@ -758,6 +744,7 @@ public java.util.List getKeysList() { return keysBuilder_.getMessageList(); } } + /** * * @@ -777,6 +764,7 @@ public int getKeysCount() { return keysBuilder_.getCount(); } } + /** * * @@ -796,6 +784,7 @@ public com.google.protobuf.ListValue getKeys(int index) { return keysBuilder_.getMessage(index); } } + /** * * @@ -821,6 +810,7 @@ public Builder setKeys(int index, com.google.protobuf.ListValue value) { } return this; } + /** * * @@ -843,6 +833,7 @@ public Builder setKeys(int index, com.google.protobuf.ListValue.Builder builderF } return this; } + /** * * @@ -868,6 +859,7 @@ public Builder addKeys(com.google.protobuf.ListValue value) { } return this; } + /** * * @@ -893,6 +885,7 @@ public Builder addKeys(int index, com.google.protobuf.ListValue value) { } return this; } + /** * * @@ -915,6 +908,7 @@ public Builder addKeys(com.google.protobuf.ListValue.Builder builderForValue) { } return this; } + /** * * @@ -937,6 +931,7 @@ public Builder addKeys(int index, com.google.protobuf.ListValue.Builder builderF } return this; } + /** * * @@ -959,6 +954,7 @@ public Builder addAllKeys(java.lang.Iterablerepeated .google.protobuf.ListValue keys = 1;
                                */ public com.google.protobuf.ListValue.Builder getKeysBuilder(int index) { - return getKeysFieldBuilder().getBuilder(index); + return internalGetKeysFieldBuilder().getBuilder(index); } + /** * * @@ -1037,6 +1036,7 @@ public com.google.protobuf.ListValueOrBuilder getKeysOrBuilder(int index) { return keysBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1056,6 +1056,7 @@ public java.util.List getKeysO return java.util.Collections.unmodifiableList(keys_); } } + /** * * @@ -1069,8 +1070,10 @@ public java.util.List getKeysO * repeated .google.protobuf.ListValue keys = 1; */ public com.google.protobuf.ListValue.Builder addKeysBuilder() { - return getKeysFieldBuilder().addBuilder(com.google.protobuf.ListValue.getDefaultInstance()); + return internalGetKeysFieldBuilder() + .addBuilder(com.google.protobuf.ListValue.getDefaultInstance()); } + /** * * @@ -1084,9 +1087,10 @@ public com.google.protobuf.ListValue.Builder addKeysBuilder() { * repeated .google.protobuf.ListValue keys = 1; */ public com.google.protobuf.ListValue.Builder addKeysBuilder(int index) { - return getKeysFieldBuilder() + return internalGetKeysFieldBuilder() .addBuilder(index, com.google.protobuf.ListValue.getDefaultInstance()); } + /** * * @@ -1100,17 +1104,17 @@ public com.google.protobuf.ListValue.Builder addKeysBuilder(int index) { * repeated .google.protobuf.ListValue keys = 1; */ public java.util.List getKeysBuilderList() { - return getKeysFieldBuilder().getBuilderList(); + return internalGetKeysFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> - getKeysFieldBuilder() { + internalGetKeysFieldBuilder() { if (keysBuilder_ == null) { keysBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder>( @@ -1130,7 +1134,7 @@ private void ensureRangesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.KeyRange, com.google.spanner.v1.KeyRange.Builder, com.google.spanner.v1.KeyRangeOrBuilder> @@ -1140,8 +1144,8 @@ private void ensureRangesIsMutable() { * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1153,12 +1157,13 @@ public java.util.List getRangesList() { return rangesBuilder_.getMessageList(); } } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1170,12 +1175,13 @@ public int getRangesCount() { return rangesBuilder_.getCount(); } } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1187,12 +1193,13 @@ public com.google.spanner.v1.KeyRange getRanges(int index) { return rangesBuilder_.getMessage(index); } } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1210,12 +1217,13 @@ public Builder setRanges(int index, com.google.spanner.v1.KeyRange value) { } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1230,12 +1238,13 @@ public Builder setRanges(int index, com.google.spanner.v1.KeyRange.Builder build } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1253,12 +1262,13 @@ public Builder addRanges(com.google.spanner.v1.KeyRange value) { } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1276,12 +1286,13 @@ public Builder addRanges(int index, com.google.spanner.v1.KeyRange value) { } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1296,12 +1307,13 @@ public Builder addRanges(com.google.spanner.v1.KeyRange.Builder builderForValue) } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1316,12 +1328,13 @@ public Builder addRanges(int index, com.google.spanner.v1.KeyRange.Builder build } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1337,12 +1350,13 @@ public Builder addAllRanges( } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1357,12 +1371,13 @@ public Builder clearRanges() { } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1377,25 +1392,27 @@ public Builder removeRanges(int index) { } return this; } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ public com.google.spanner.v1.KeyRange.Builder getRangesBuilder(int index) { - return getRangesFieldBuilder().getBuilder(index); + return internalGetRangesFieldBuilder().getBuilder(index); } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1407,12 +1424,13 @@ public com.google.spanner.v1.KeyRangeOrBuilder getRangesOrBuilder(int index) { return rangesBuilder_.getMessageOrBuilder(index); } } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; @@ -1425,56 +1443,59 @@ public com.google.spanner.v1.KeyRangeOrBuilder getRangesOrBuilder(int index) { return java.util.Collections.unmodifiableList(ranges_); } } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ public com.google.spanner.v1.KeyRange.Builder addRangesBuilder() { - return getRangesFieldBuilder() + return internalGetRangesFieldBuilder() .addBuilder(com.google.spanner.v1.KeyRange.getDefaultInstance()); } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ public com.google.spanner.v1.KeyRange.Builder addRangesBuilder(int index) { - return getRangesFieldBuilder() + return internalGetRangesFieldBuilder() .addBuilder(index, com.google.spanner.v1.KeyRange.getDefaultInstance()); } + /** * * *
                                -     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -     * key range specifications.
                                +     * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +     * information about key range specifications.
                                      * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ public java.util.List getRangesBuilderList() { - return getRangesFieldBuilder().getBuilderList(); + return internalGetRangesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.KeyRange, com.google.spanner.v1.KeyRange.Builder, com.google.spanner.v1.KeyRangeOrBuilder> - getRangesFieldBuilder() { + internalGetRangesFieldBuilder() { if (rangesBuilder_ == null) { rangesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.KeyRange, com.google.spanner.v1.KeyRange.Builder, com.google.spanner.v1.KeyRangeOrBuilder>( @@ -1485,6 +1506,7 @@ public java.util.List getRangesBuilderLi } private boolean all_; + /** * * @@ -1502,6 +1524,7 @@ public java.util.List getRangesBuilderLi public boolean getAll() { return all_; } + /** * * @@ -1523,6 +1546,7 @@ public Builder setAll(boolean value) { onChanged(); return this; } + /** * * @@ -1543,17 +1567,6 @@ public Builder clearAll() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.KeySet) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java index 8385fb6dddc..77a31c506c7 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/keys.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface KeySetOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.KeySet) @@ -37,6 +39,7 @@ public interface KeySetOrBuilder * repeated .google.protobuf.ListValue keys = 1; */ java.util.List getKeysList(); + /** * * @@ -50,6 +53,7 @@ public interface KeySetOrBuilder * repeated .google.protobuf.ListValue keys = 1; */ com.google.protobuf.ListValue getKeys(int index); + /** * * @@ -63,6 +67,7 @@ public interface KeySetOrBuilder * repeated .google.protobuf.ListValue keys = 1; */ int getKeysCount(); + /** * * @@ -76,6 +81,7 @@ public interface KeySetOrBuilder * repeated .google.protobuf.ListValue keys = 1; */ java.util.List getKeysOrBuilderList(); + /** * * @@ -94,52 +100,56 @@ public interface KeySetOrBuilder * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ java.util.List getRangesList(); + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ com.google.spanner.v1.KeyRange getRanges(int index); + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ int getRangesCount(); + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; */ java.util.List getRangesOrBuilderList(); + /** * * *
                                -   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
                                -   * key range specifications.
                                +   * A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more
                                +   * information about key range specifications.
                                    * 
                                * * repeated .google.spanner.v1.KeyRange ranges = 2; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java index 174004b9566..a1e368ba365 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/keys.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class KeysProto { +@com.google.protobuf.Generated +public final class KeysProto extends com.google.protobuf.GeneratedFile { private KeysProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "KeysProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,11 +42,11 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_KeyRange_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_KeyRange_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_KeySet_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_KeySet_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -68,21 +80,21 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.protobuf.StructProto.getDescriptor(), }); - internal_static_google_spanner_v1_KeyRange_descriptor = - getDescriptor().getMessageTypes().get(0); + internal_static_google_spanner_v1_KeyRange_descriptor = getDescriptor().getMessageType(0); internal_static_google_spanner_v1_KeyRange_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_KeyRange_descriptor, new java.lang.String[] { "StartClosed", "StartOpen", "EndClosed", "EndOpen", "StartKeyType", "EndKeyType", }); - internal_static_google_spanner_v1_KeySet_descriptor = getDescriptor().getMessageTypes().get(1); + internal_static_google_spanner_v1_KeySet_descriptor = getDescriptor().getMessageType(1); internal_static_google_spanner_v1_KeySet_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_KeySet_descriptor, new java.lang.String[] { "Keys", "Ranges", "All", }); + descriptor.resolveAllFeaturesImmutable(); com.google.protobuf.StructProto.getDescriptor(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java index c3204ba61cb..6413acdc191 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.ListSessionsRequest} */ -public final class ListSessionsRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListSessionsRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ListSessionsRequest) ListSessionsRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSessionsRequest"); + } + // Use ListSessionsRequest.newBuilder() to construct. - private ListSessionsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListSessionsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private ListSessionsRequest() { filter_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListSessionsRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsRequest_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object database_ = ""; + /** * * @@ -94,6 +102,7 @@ public java.lang.String getDatabase() { return s; } } + /** * * @@ -122,6 +131,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 2; private int pageSize_ = 0; + /** * * @@ -143,6 +153,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -169,6 +180,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -200,6 +212,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * * @@ -207,13 +220,13 @@ public com.google.protobuf.ByteString getPageTokenBytes() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". *
                                * * string filter = 4; @@ -232,6 +245,7 @@ public java.lang.String getFilter() { return s; } } + /** * * @@ -239,13 +253,13 @@ public java.lang.String getFilter() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". *
                                * * string filter = 4; @@ -279,17 +293,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, database_); } if (pageSize_ != 0) { output.writeInt32(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, filter_); } getUnknownFields().writeTo(output); } @@ -300,17 +314,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(database_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, database_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(database_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, database_); } if (pageSize_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, filter_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, filter_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -393,38 +407,38 @@ public static com.google.spanner.v1.ListSessionsRequest parseFrom( public static com.google.spanner.v1.ListSessionsRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ListSessionsRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ListSessionsRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ListSessionsRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ListSessionsRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ListSessionsRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -447,10 +461,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -460,7 +475,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.ListSessionsRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ListSessionsRequest) com.google.spanner.v1.ListSessionsRequestOrBuilder { @@ -470,7 +485,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsRequest_fieldAccessorTable @@ -482,7 +497,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.ListSessionsRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -544,39 +559,6 @@ private void buildPartial0(com.google.spanner.v1.ListSessionsRequest result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ListSessionsRequest) { @@ -677,6 +659,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object database_ = ""; + /** * * @@ -701,6 +684,7 @@ public java.lang.String getDatabase() { return (java.lang.String) ref; } } + /** * * @@ -725,6 +709,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -748,6 +733,7 @@ public Builder setDatabase(java.lang.String value) { onChanged(); return this; } + /** * * @@ -767,6 +753,7 @@ public Builder clearDatabase() { onChanged(); return this; } + /** * * @@ -793,6 +780,7 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -809,6 +797,7 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -829,6 +818,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -849,6 +839,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -874,6 +865,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -899,6 +891,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -923,6 +916,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -943,6 +937,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * @@ -970,6 +965,7 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * * @@ -977,13 +973,13 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". *
                                * * string filter = 4; @@ -1001,6 +997,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * * @@ -1008,13 +1005,13 @@ public java.lang.String getFilter() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". *
                                * * string filter = 4; @@ -1032,6 +1029,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1039,13 +1037,13 @@ public com.google.protobuf.ByteString getFilterBytes() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". *
                                * * string filter = 4; @@ -1062,6 +1060,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1069,13 +1068,13 @@ public Builder setFilter(java.lang.String value) { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". *
                                * * string filter = 4; @@ -1088,6 +1087,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -1095,13 +1095,13 @@ public Builder clearFilter() { * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". * * * string filter = 4; @@ -1120,17 +1120,6 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.ListSessionsRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java index 72db06ae585..ce34b437d20 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ListSessionsRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ListSessionsRequest) @@ -38,6 +40,7 @@ public interface ListSessionsRequestOrBuilder * @return The database. */ java.lang.String getDatabase(); + /** * * @@ -82,6 +85,7 @@ public interface ListSessionsRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * @@ -105,13 +109,13 @@ public interface ListSessionsRequestOrBuilder * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". * * * string filter = 4; @@ -119,6 +123,7 @@ public interface ListSessionsRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * * @@ -126,13 +131,13 @@ public interface ListSessionsRequestOrBuilder * An expression for filtering the results of the request. Filter rules are * case insensitive. The fields eligible for filtering are: * - * * `labels.key` where key is the name of a label + * * `labels.key` where key is the name of a label * * Some examples of using filters are: * - * * `labels.env:*` --> The session has the label "env". - * * `labels.env:dev` --> The session has the label "env" and the value of - * the label contains the string "dev". + * * `labels.env:*` --> The session has the label "env". + * * `labels.env:dev` --> The session has the label "env" and the value of + * the label contains the string "dev". * * * string filter = 4; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java index bcc4cf3cc10..1f2ccda7c22 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.ListSessionsResponse} */ -public final class ListSessionsResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ListSessionsResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ListSessionsResponse) ListSessionsResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSessionsResponse"); + } + // Use ListSessionsResponse.newBuilder() to construct. - private ListSessionsResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ListSessionsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private ListSessionsResponse() { nextPageToken_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ListSessionsResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsResponse_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List sessions_; + /** * * @@ -81,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getSessionsList() { return sessions_; } + /** * * @@ -95,6 +104,7 @@ public java.util.List getSessionsList() { getSessionsOrBuilderList() { return sessions_; } + /** * * @@ -108,6 +118,7 @@ public java.util.List getSessionsList() { public int getSessionsCount() { return sessions_.size(); } + /** * * @@ -121,6 +132,7 @@ public int getSessionsCount() { public com.google.spanner.v1.Session getSessions(int index) { return sessions_.get(index); } + /** * * @@ -139,6 +151,7 @@ public com.google.spanner.v1.SessionOrBuilder getSessionsOrBuilder(int index) { @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -164,6 +177,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -207,8 +221,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < sessions_.size(); i++) { output.writeMessage(1, sessions_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); } getUnknownFields().writeTo(output); } @@ -222,8 +236,8 @@ public int getSerializedSize() { for (int i = 0; i < sessions_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, sessions_.get(i)); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nextPageToken_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nextPageToken_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -302,38 +316,38 @@ public static com.google.spanner.v1.ListSessionsResponse parseFrom( public static com.google.spanner.v1.ListSessionsResponse parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ListSessionsResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ListSessionsResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ListSessionsResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ListSessionsResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ListSessionsResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -356,10 +370,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -369,7 +384,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.ListSessionsResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ListSessionsResponse) com.google.spanner.v1.ListSessionsResponseOrBuilder { @@ -379,7 +394,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsResponse_fieldAccessorTable @@ -391,7 +406,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.ListSessionsResponse.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -461,39 +476,6 @@ private void buildPartial0(com.google.spanner.v1.ListSessionsResponse result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ListSessionsResponse) { @@ -525,8 +507,8 @@ public Builder mergeFrom(com.google.spanner.v1.ListSessionsResponse other) { sessions_ = other.sessions_; bitField0_ = (bitField0_ & ~0x00000001); sessionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getSessionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSessionsFieldBuilder() : null; } else { sessionsBuilder_.addAllMessages(other.sessions_); @@ -611,7 +593,7 @@ private void ensureSessionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> @@ -633,6 +615,7 @@ public java.util.List getSessionsList() { return sessionsBuilder_.getMessageList(); } } + /** * * @@ -649,6 +632,7 @@ public int getSessionsCount() { return sessionsBuilder_.getCount(); } } + /** * * @@ -665,6 +649,7 @@ public com.google.spanner.v1.Session getSessions(int index) { return sessionsBuilder_.getMessage(index); } } + /** * * @@ -687,6 +672,7 @@ public Builder setSessions(int index, com.google.spanner.v1.Session value) { } return this; } + /** * * @@ -706,6 +692,7 @@ public Builder setSessions(int index, com.google.spanner.v1.Session.Builder buil } return this; } + /** * * @@ -728,6 +715,7 @@ public Builder addSessions(com.google.spanner.v1.Session value) { } return this; } + /** * * @@ -750,6 +738,7 @@ public Builder addSessions(int index, com.google.spanner.v1.Session value) { } return this; } + /** * * @@ -769,6 +758,7 @@ public Builder addSessions(com.google.spanner.v1.Session.Builder builderForValue } return this; } + /** * * @@ -788,6 +778,7 @@ public Builder addSessions(int index, com.google.spanner.v1.Session.Builder buil } return this; } + /** * * @@ -808,6 +799,7 @@ public Builder addAllSessions( } return this; } + /** * * @@ -827,6 +819,7 @@ public Builder clearSessions() { } return this; } + /** * * @@ -846,6 +839,7 @@ public Builder removeSessions(int index) { } return this; } + /** * * @@ -856,8 +850,9 @@ public Builder removeSessions(int index) { * repeated .google.spanner.v1.Session sessions = 1; */ public com.google.spanner.v1.Session.Builder getSessionsBuilder(int index) { - return getSessionsFieldBuilder().getBuilder(index); + return internalGetSessionsFieldBuilder().getBuilder(index); } + /** * * @@ -874,6 +869,7 @@ public com.google.spanner.v1.SessionOrBuilder getSessionsOrBuilder(int index) { return sessionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -891,6 +887,7 @@ public com.google.spanner.v1.SessionOrBuilder getSessionsOrBuilder(int index) { return java.util.Collections.unmodifiableList(sessions_); } } + /** * * @@ -901,9 +898,10 @@ public com.google.spanner.v1.SessionOrBuilder getSessionsOrBuilder(int index) { * repeated .google.spanner.v1.Session sessions = 1; */ public com.google.spanner.v1.Session.Builder addSessionsBuilder() { - return getSessionsFieldBuilder() + return internalGetSessionsFieldBuilder() .addBuilder(com.google.spanner.v1.Session.getDefaultInstance()); } + /** * * @@ -914,9 +912,10 @@ public com.google.spanner.v1.Session.Builder addSessionsBuilder() { * repeated .google.spanner.v1.Session sessions = 1; */ public com.google.spanner.v1.Session.Builder addSessionsBuilder(int index) { - return getSessionsFieldBuilder() + return internalGetSessionsFieldBuilder() .addBuilder(index, com.google.spanner.v1.Session.getDefaultInstance()); } + /** * * @@ -927,17 +926,17 @@ public com.google.spanner.v1.Session.Builder addSessionsBuilder(int index) { * repeated .google.spanner.v1.Session sessions = 1; */ public java.util.List getSessionsBuilderList() { - return getSessionsFieldBuilder().getBuilderList(); + return internalGetSessionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder> - getSessionsFieldBuilder() { + internalGetSessionsFieldBuilder() { if (sessionsBuilder_ == null) { sessionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Session, com.google.spanner.v1.Session.Builder, com.google.spanner.v1.SessionOrBuilder>( @@ -948,6 +947,7 @@ public java.util.List getSessionsBuilderL } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -972,6 +972,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -996,6 +997,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1019,6 +1021,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1038,6 +1041,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * @@ -1063,17 +1067,6 @@ public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.ListSessionsResponse) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java index 54991625eac..8a30f2f9997 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ListSessionsResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ListSessionsResponse) @@ -34,6 +36,7 @@ public interface ListSessionsResponseOrBuilder * repeated .google.spanner.v1.Session sessions = 1; */ java.util.List getSessionsList(); + /** * * @@ -44,6 +47,7 @@ public interface ListSessionsResponseOrBuilder * repeated .google.spanner.v1.Session sessions = 1; */ com.google.spanner.v1.Session getSessions(int index); + /** * * @@ -54,6 +58,7 @@ public interface ListSessionsResponseOrBuilder * repeated .google.spanner.v1.Session sessions = 1; */ int getSessionsCount(); + /** * * @@ -64,6 +69,7 @@ public interface ListSessionsResponseOrBuilder * repeated .google.spanner.v1.Session sessions = 1; */ java.util.List getSessionsOrBuilderList(); + /** * * @@ -89,6 +95,7 @@ public interface ListSessionsResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/LocationProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/LocationProto.java new file mode 100644 index 00000000000..e5c3bee3958 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/LocationProto.java @@ -0,0 +1,266 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public final class LocationProto extends com.google.protobuf.GeneratedFile { + private LocationProto() {} + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "LocationProto"); + } + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_Range_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_Range_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_Tablet_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_Tablet_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_Group_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_Group_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_KeyRecipe_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_KeyRecipe_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_KeyRecipe_Part_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_KeyRecipe_Part_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_RecipeList_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_RecipeList_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_CacheUpdate_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_CacheUpdate_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_RoutingHint_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_RoutingHint_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_RoutingHint_SkippedTablet_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_RoutingHint_SkippedTablet_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n" + + " google/spanner/v1/location.proto\022\021goog" + + "le.spanner.v1\032\034google/protobuf/struct.proto\032\034google/spanner/v1/type.proto\"f\n" + + "\005Range\022\021\n" + + "\tstart_key\030\001 \001(\014\022\021\n" + + "\tlimit_key\030\002 \001(\014\022\021\n" + + "\tgroup_uid\030\003 \001(\004\022\020\n" + + "\010split_id\030\004 \001(\004\022\022\n" + + "\n" + + "generation\030\005 \001(\014\"\346\001\n" + + "\006Tablet\022\022\n\n" + + "tablet_uid\030\001 \001(\004\022\026\n" + + "\016server_address\030\002 \001(\t\022\020\n" + + "\010location\030\003 \001(\t\022,\n" + + "\004role\030\004 \001(\0162\036.google.spanner.v1.Tablet.Role\022\023\n" + + "\013incarnation\030\005 \001(\014\022\020\n" + + "\010distance\030\006 \001(\r" + + "\022\014\n" + + "\004skip\030\007 \001(\010\";\n" + + "\004Role\022\024\n" + + "\020ROLE_UNSPECIFIED\020\000\022\016\n\n" + + "READ_WRITE\020\001\022\r\n" + + "\tREAD_ONLY\020\002\"p\n" + + "\005Group\022\021\n" + + "\tgroup_uid\030\001 \001(\004\022*\n" + + "\007tablets\030\002 \003(\0132\031.google.spanner.v1.Tablet\022\024\n" + + "\014leader_index\030\003 \001(\005\022\022\n\n" + + "generation\030\004 \001(\014\"\323\004\n" + + "\tKeyRecipe\022\024\n\n" + + "table_name\030\001 \001(\tH\000\022\024\n\n" + + "index_name\030\002 \001(\tH\000\022\027\n\r" + + "operation_uid\030\003 \001(\004H\000\022/\n" + + "\004part\030\004 \003(\0132!.google.spanner.v1.KeyRecipe.Part\032\305\003\n" + + "\004Part\022\013\n" + + "\003tag\030\001 \001(\r" + + "\0226\n" + + "\005order\030\002 \001(\0162\'.google.spanner.v1.KeyRecipe.Part.Order\022?\n\n" + + "null_order\030\003 \001(\0162+.google.spanner.v1.KeyRecipe.Part.NullOrder\022%\n" + + "\004type\030\004 \001(\0132\027.google.spanner.v1.Type\022\024\n\n" + + "identifier\030\005 \001(\tH\000\022\'\n" + + "\005value\030\006 \001(\0132\026.google.protobuf.ValueH\000\022\020\n" + + "\006random\030\010 \001(\010H\000\022\032\n" + + "\022struct_identifiers\030\007 \003(\005\"=\n" + + "\005Order\022\025\n" + + "\021ORDER_UNSPECIFIED\020\000\022\r\n" + + "\tASCENDING\020\001\022\016\n\n" + + "DESCENDING\020\002\"V\n" + + "\tNullOrder\022\032\n" + + "\026NULL_ORDER_UNSPECIFIED\020\000\022\017\n" + + "\013NULLS_FIRST\020\001\022\016\n\n" + + "NULLS_LAST\020\002\022\014\n" + + "\010NOT_NULL\020\003B\014\n\n" + + "value_typeB\010\n" + + "\006target\"U\n\n" + + "RecipeList\022\031\n" + + "\021schema_generation\030\001 \001(\014\022,\n" + + "\006recipe\030\003 \003(\0132\034.google.spanner.v1.KeyRecipe\"\250\001\n" + + "\013CacheUpdate\022\023\n" + + "\013database_id\030\001 \001(\004\022\'\n" + + "\005range\030\002 \003(\0132\030.google.spanner.v1.Range\022\'\n" + + "\005group\030\003 \003(\0132\030.google.spanner.v1.Group\0222\n" + + "\013key_recipes\030\005 \001(\0132\035.google.spanner.v1.RecipeList\"\312\002\n" + + "\013RoutingHint\022\025\n\r" + + "operation_uid\030\001 \001(\004\022\023\n" + + "\013database_id\030\002 \001(\004\022\031\n" + + "\021schema_generation\030\003 \001(\014\022\013\n" + + "\003key\030\004 \001(\014\022\021\n" + + "\tlimit_key\030\005 \001(\014\022\021\n" + + "\tgroup_uid\030\006 \001(\004\022\020\n" + + "\010split_id\030\007 \001(\004\022\022\n\n" + + "tablet_uid\030\010 \001(\004\022H\n" + + "\022skipped_tablet_uid\030\t" + + " \003(\0132,.google.spanner.v1.RoutingHint.SkippedTablet\022\027\n" + + "\017client_location\030\n" + + " \001(\t\0328\n\r" + + "SkippedTablet\022\022\n\n" + + "tablet_uid\030\001 \001(\004\022\023\n" + + "\013incarnation\030\002 \001(\014B\260\001\n" + + "\025com.google.spanner.v1B\r" + + "LocationProtoP\001Z5cloud.google.com/go/spanner/apiv1/spannerp" + + "b;spannerpb\252\002\027Google.Cloud.Spanner.V1\312\002\027" + + "Google\\Cloud\\Spanner\\V1\352\002\032Google::Cloud::Spanner::V1b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.protobuf.StructProto.getDescriptor(), + com.google.spanner.v1.TypeProto.getDescriptor(), + }); + internal_static_google_spanner_v1_Range_descriptor = getDescriptor().getMessageType(0); + internal_static_google_spanner_v1_Range_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_Range_descriptor, + new java.lang.String[] { + "StartKey", "LimitKey", "GroupUid", "SplitId", "Generation", + }); + internal_static_google_spanner_v1_Tablet_descriptor = getDescriptor().getMessageType(1); + internal_static_google_spanner_v1_Tablet_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_Tablet_descriptor, + new java.lang.String[] { + "TabletUid", "ServerAddress", "Location", "Role", "Incarnation", "Distance", "Skip", + }); + internal_static_google_spanner_v1_Group_descriptor = getDescriptor().getMessageType(2); + internal_static_google_spanner_v1_Group_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_Group_descriptor, + new java.lang.String[] { + "GroupUid", "Tablets", "LeaderIndex", "Generation", + }); + internal_static_google_spanner_v1_KeyRecipe_descriptor = getDescriptor().getMessageType(3); + internal_static_google_spanner_v1_KeyRecipe_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_KeyRecipe_descriptor, + new java.lang.String[] { + "TableName", "IndexName", "OperationUid", "Part", "Target", + }); + internal_static_google_spanner_v1_KeyRecipe_Part_descriptor = + internal_static_google_spanner_v1_KeyRecipe_descriptor.getNestedType(0); + internal_static_google_spanner_v1_KeyRecipe_Part_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_KeyRecipe_Part_descriptor, + new java.lang.String[] { + "Tag", + "Order", + "NullOrder", + "Type", + "Identifier", + "Value", + "Random", + "StructIdentifiers", + "ValueType", + }); + internal_static_google_spanner_v1_RecipeList_descriptor = getDescriptor().getMessageType(4); + internal_static_google_spanner_v1_RecipeList_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_RecipeList_descriptor, + new java.lang.String[] { + "SchemaGeneration", "Recipe", + }); + internal_static_google_spanner_v1_CacheUpdate_descriptor = getDescriptor().getMessageType(5); + internal_static_google_spanner_v1_CacheUpdate_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_CacheUpdate_descriptor, + new java.lang.String[] { + "DatabaseId", "Range", "Group", "KeyRecipes", + }); + internal_static_google_spanner_v1_RoutingHint_descriptor = getDescriptor().getMessageType(6); + internal_static_google_spanner_v1_RoutingHint_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_RoutingHint_descriptor, + new java.lang.String[] { + "OperationUid", + "DatabaseId", + "SchemaGeneration", + "Key", + "LimitKey", + "GroupUid", + "SplitId", + "TabletUid", + "SkippedTabletUid", + "ClientLocation", + }); + internal_static_google_spanner_v1_RoutingHint_SkippedTablet_descriptor = + internal_static_google_spanner_v1_RoutingHint_descriptor.getNestedType(0); + internal_static_google_spanner_v1_RoutingHint_SkippedTablet_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_RoutingHint_SkippedTablet_descriptor, + new java.lang.String[] { + "TabletUid", "Incarnation", + }); + descriptor.resolveAllFeaturesImmutable(); + com.google.protobuf.StructProto.getDescriptor(); + com.google.spanner.v1.TypeProto.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitToken.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitToken.java index 406ebe14199..f6e18f0307c 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitToken.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitToken.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -25,20 +26,34 @@ *
                                  * When a read-write transaction is executed on a multiplexed session,
                                  * this precommit token is sent back to the client
                                - * as a part of the [Transaction] message in the BeginTransaction response and
                                - * also as a part of the [ResultSet] and [PartialResultSet] responses.
                                + * as a part of the [Transaction][google.spanner.v1.Transaction] message in the
                                + * [BeginTransaction][google.spanner.v1.BeginTransactionRequest] response and
                                + * also as a part of the [ResultSet][google.spanner.v1.ResultSet] and
                                + * [PartialResultSet][google.spanner.v1.PartialResultSet] responses.
                                  * 
                                * * Protobuf type {@code google.spanner.v1.MultiplexedSessionPrecommitToken} */ -public final class MultiplexedSessionPrecommitToken extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class MultiplexedSessionPrecommitToken extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.MultiplexedSessionPrecommitToken) MultiplexedSessionPrecommitTokenOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MultiplexedSessionPrecommitToken"); + } + // Use MultiplexedSessionPrecommitToken.newBuilder() to construct. private MultiplexedSessionPrecommitToken( - com.google.protobuf.GeneratedMessageV3.Builder builder) { + com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -46,19 +61,13 @@ private MultiplexedSessionPrecommitToken() { precommitToken_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new MultiplexedSessionPrecommitToken(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_fieldAccessorTable @@ -69,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int PRECOMMIT_TOKEN_FIELD_NUMBER = 1; private com.google.protobuf.ByteString precommitToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -87,6 +97,7 @@ public com.google.protobuf.ByteString getPrecommitToken() { public static final int SEQ_NUM_FIELD_NUMBER = 2; private int seqNum_ = 0; + /** * * @@ -215,38 +226,38 @@ public static com.google.spanner.v1.MultiplexedSessionPrecommitToken parseFrom( public static com.google.spanner.v1.MultiplexedSessionPrecommitToken parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.MultiplexedSessionPrecommitToken parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.MultiplexedSessionPrecommitToken parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.MultiplexedSessionPrecommitToken parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.MultiplexedSessionPrecommitToken parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.MultiplexedSessionPrecommitToken parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -270,23 +281,26 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                    * When a read-write transaction is executed on a multiplexed session,
                                    * this precommit token is sent back to the client
                                -   * as a part of the [Transaction] message in the BeginTransaction response and
                                -   * also as a part of the [ResultSet] and [PartialResultSet] responses.
                                +   * as a part of the [Transaction][google.spanner.v1.Transaction] message in the
                                +   * [BeginTransaction][google.spanner.v1.BeginTransactionRequest] response and
                                +   * also as a part of the [ResultSet][google.spanner.v1.ResultSet] and
                                +   * [PartialResultSet][google.spanner.v1.PartialResultSet] responses.
                                    * 
                                * * Protobuf type {@code google.spanner.v1.MultiplexedSessionPrecommitToken} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.MultiplexedSessionPrecommitToken) com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder { @@ -296,7 +310,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_fieldAccessorTable @@ -308,7 +322,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.MultiplexedSessionPrecommitToken.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -362,39 +376,6 @@ private void buildPartial0(com.google.spanner.v1.MultiplexedSessionPrecommitToke } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.MultiplexedSessionPrecommitToken) { @@ -408,7 +389,7 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(com.google.spanner.v1.MultiplexedSessionPrecommitToken other) { if (other == com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance()) return this; - if (other.getPrecommitToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getPrecommitToken().isEmpty()) { setPrecommitToken(other.getPrecommitToken()); } if (other.getSeqNum() != 0) { @@ -472,6 +453,7 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.ByteString precommitToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -487,6 +469,7 @@ public Builder mergeFrom( public com.google.protobuf.ByteString getPrecommitToken() { return precommitToken_; } + /** * * @@ -508,6 +491,7 @@ public Builder setPrecommitToken(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -527,6 +511,7 @@ public Builder clearPrecommitToken() { } private int seqNum_; + /** * * @@ -544,6 +529,7 @@ public Builder clearPrecommitToken() { public int getSeqNum() { return seqNum_; } + /** * * @@ -565,6 +551,7 @@ public Builder setSeqNum(int value) { onChanged(); return this; } + /** * * @@ -585,17 +572,6 @@ public Builder clearSeqNum() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.MultiplexedSessionPrecommitToken) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitTokenOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitTokenOrBuilder.java index 1c8a9d74b98..30cdf3b0d5e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitTokenOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MultiplexedSessionPrecommitTokenOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface MultiplexedSessionPrecommitTokenOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.MultiplexedSessionPrecommitToken) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java index 1c4c5c76b85..d357769157f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/mutation.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -30,31 +31,37 @@ * * Protobuf type {@code google.spanner.v1.Mutation} */ -public final class Mutation extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Mutation extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.Mutation) MutationOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Mutation"); + } + // Use Mutation.newBuilder() to construct. - private Mutation(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Mutation(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private Mutation() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Mutation(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_fieldAccessorTable @@ -79,6 +86,7 @@ public interface WriteOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -96,7 +104,8 @@ public interface WriteOrBuilder * * *
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -108,11 +117,13 @@ public interface WriteOrBuilder
                                      * @return A list containing the columns.
                                      */
                                     java.util.List getColumnsList();
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -124,11 +135,13 @@ public interface WriteOrBuilder
                                      * @return The count of columns.
                                      */
                                     int getColumnsCount();
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -141,11 +154,13 @@ public interface WriteOrBuilder
                                      * @return The columns at the given index.
                                      */
                                     java.lang.String getColumns(int index);
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -166,16 +181,19 @@ public interface WriteOrBuilder
                                      * The values to be written. `values` can contain more than one
                                      * list of values. If it does, then multiple rows are written, one
                                      * for each entry in `values`. Each list in `values` must have
                                -     * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns]
                                -     * above. Sending multiple lists is equivalent to sending multiple
                                -     * `Mutation`s, each containing one `values` entry and repeating
                                -     * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are
                                -     * encoded as described [here][google.spanner.v1.TypeCode].
                                +     * exactly as many entries as there are entries in
                                +     * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending
                                +     * multiple lists is equivalent to sending multiple `Mutation`s, each
                                +     * containing one `values` entry and repeating
                                +     * [table][google.spanner.v1.Mutation.Write.table] and
                                +     * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in
                                +     * each list are encoded as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue values = 3; */ java.util.List getValuesList(); + /** * * @@ -183,16 +201,19 @@ public interface WriteOrBuilder * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; */ com.google.protobuf.ListValue getValues(int index); + /** * * @@ -200,16 +221,19 @@ public interface WriteOrBuilder * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; */ int getValuesCount(); + /** * * @@ -217,16 +241,19 @@ public interface WriteOrBuilder * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; */ java.util.List getValuesOrBuilderList(); + /** * * @@ -234,34 +261,50 @@ public interface WriteOrBuilder * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; */ com.google.protobuf.ListValueOrBuilder getValuesOrBuilder(int index); } + /** * * *
                                -   * Arguments to [insert][google.spanner.v1.Mutation.insert], [update][google.spanner.v1.Mutation.update], [insert_or_update][google.spanner.v1.Mutation.insert_or_update], and
                                +   * Arguments to [insert][google.spanner.v1.Mutation.insert],
                                +   * [update][google.spanner.v1.Mutation.update],
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], and
                                    * [replace][google.spanner.v1.Mutation.replace] operations.
                                    * 
                                * * Protobuf type {@code google.spanner.v1.Mutation.Write} */ - public static final class Write extends com.google.protobuf.GeneratedMessageV3 + public static final class Write extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.Mutation.Write) WriteOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Write"); + } + // Use Write.newBuilder() to construct. - private Write(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Write(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -271,19 +314,13 @@ private Write() { values_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Write(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_Write_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_Write_fieldAccessorTable @@ -296,6 +333,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -319,6 +357,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -348,11 +387,13 @@ public com.google.protobuf.ByteString getTableBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * *
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -366,11 +407,13 @@ public com.google.protobuf.ByteString getTableBytes() {
                                     public com.google.protobuf.ProtocolStringList getColumnsList() {
                                       return columns_;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -384,11 +427,13 @@ public com.google.protobuf.ProtocolStringList getColumnsList() {
                                     public int getColumnsCount() {
                                       return columns_.size();
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -403,11 +448,13 @@ public int getColumnsCount() {
                                     public java.lang.String getColumns(int index) {
                                       return columns_.get(index);
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +     * The names of the columns in
                                +     * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                      *
                                      * The list of columns must contain enough columns to allow
                                      * Cloud Spanner to derive values for all primary key columns in the
                                @@ -427,6 +474,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) {
                                 
                                     @SuppressWarnings("serial")
                                     private java.util.List values_;
                                +
                                     /**
                                      *
                                      *
                                @@ -434,11 +482,13 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) {
                                      * The values to be written. `values` can contain more than one
                                      * list of values. If it does, then multiple rows are written, one
                                      * for each entry in `values`. Each list in `values` must have
                                -     * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns]
                                -     * above. Sending multiple lists is equivalent to sending multiple
                                -     * `Mutation`s, each containing one `values` entry and repeating
                                -     * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are
                                -     * encoded as described [here][google.spanner.v1.TypeCode].
                                +     * exactly as many entries as there are entries in
                                +     * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending
                                +     * multiple lists is equivalent to sending multiple `Mutation`s, each
                                +     * containing one `values` entry and repeating
                                +     * [table][google.spanner.v1.Mutation.Write.table] and
                                +     * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in
                                +     * each list are encoded as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue values = 3; @@ -447,6 +497,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { public java.util.List getValuesList() { return values_; } + /** * * @@ -454,11 +505,13 @@ public java.util.List getValuesList() { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -468,6 +521,7 @@ public java.util.List getValuesList() { getValuesOrBuilderList() { return values_; } + /** * * @@ -475,11 +529,13 @@ public java.util.List getValuesList() { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -488,6 +544,7 @@ public java.util.List getValuesList() { public int getValuesCount() { return values_.size(); } + /** * * @@ -495,11 +552,13 @@ public int getValuesCount() { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -508,6 +567,7 @@ public int getValuesCount() { public com.google.protobuf.ListValue getValues(int index) { return values_.get(index); } + /** * * @@ -515,11 +575,13 @@ public com.google.protobuf.ListValue getValues(int index) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; @@ -543,11 +605,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); } for (int i = 0; i < columns_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, columns_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 2, columns_.getRaw(i)); } for (int i = 0; i < values_.size(); i++) { output.writeMessage(3, values_.get(i)); @@ -561,8 +623,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); } { int dataSize = 0; @@ -656,38 +718,38 @@ public static com.google.spanner.v1.Mutation.Write parseFrom( public static com.google.spanner.v1.Mutation.Write parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation.Write parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Mutation.Write parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation.Write parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Mutation.Write parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation.Write parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -710,23 +772,24 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -     * Arguments to [insert][google.spanner.v1.Mutation.insert], [update][google.spanner.v1.Mutation.update], [insert_or_update][google.spanner.v1.Mutation.insert_or_update], and
                                +     * Arguments to [insert][google.spanner.v1.Mutation.insert],
                                +     * [update][google.spanner.v1.Mutation.update],
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], and
                                      * [replace][google.spanner.v1.Mutation.replace] operations.
                                      * 
                                * * Protobuf type {@code google.spanner.v1.Mutation.Write} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.Mutation.Write) com.google.spanner.v1.Mutation.WriteOrBuilder { @@ -736,7 +799,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_Write_fieldAccessorTable @@ -748,7 +811,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.Mutation.Write.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -823,41 +886,6 @@ private void buildPartial0(com.google.spanner.v1.Mutation.Write result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.Mutation.Write) { @@ -904,8 +932,8 @@ public Builder mergeFrom(com.google.spanner.v1.Mutation.Write other) { values_ = other.values_; bitField0_ = (bitField0_ & ~0x00000004); valuesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getValuesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetValuesFieldBuilder() : null; } else { valuesBuilder_.addAllMessages(other.values_); @@ -983,6 +1011,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object table_ = ""; + /** * * @@ -1005,6 +1034,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -1027,6 +1057,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1048,6 +1079,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1065,6 +1097,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -1097,11 +1130,13 @@ private void ensureColumnsIsMutable() { } bitField0_ |= 0x00000002; } + /** * * *
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1116,11 +1151,13 @@ public com.google.protobuf.ProtocolStringList getColumnsList() {
                                         columns_.makeImmutable();
                                         return columns_;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1134,11 +1171,13 @@ public com.google.protobuf.ProtocolStringList getColumnsList() {
                                       public int getColumnsCount() {
                                         return columns_.size();
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1153,11 +1192,13 @@ public int getColumnsCount() {
                                       public java.lang.String getColumns(int index) {
                                         return columns_.get(index);
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1172,11 +1213,13 @@ public java.lang.String getColumns(int index) {
                                       public com.google.protobuf.ByteString getColumnsBytes(int index) {
                                         return columns_.getByteString(index);
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1199,11 +1242,13 @@ public Builder setColumns(int index, java.lang.String value) {
                                         onChanged();
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1225,11 +1270,13 @@ public Builder addColumns(java.lang.String value) {
                                         onChanged();
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1248,11 +1295,13 @@ public Builder addAllColumns(java.lang.Iterable values) {
                                         onChanged();
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1270,11 +1319,13 @@ public Builder clearColumns() {
                                         onChanged();
                                         return this;
                                       }
                                +
                                       /**
                                        *
                                        *
                                        * 
                                -       * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
                                +       * The names of the columns in
                                +       * [table][google.spanner.v1.Mutation.Write.table] to be written.
                                        *
                                        * The list of columns must contain enough columns to allow
                                        * Cloud Spanner to derive values for all primary key columns in the
                                @@ -1308,7 +1359,7 @@ private void ensureValuesIsMutable() {
                                         }
                                       }
                                 
                                -      private com.google.protobuf.RepeatedFieldBuilderV3<
                                +      private com.google.protobuf.RepeatedFieldBuilder<
                                               com.google.protobuf.ListValue,
                                               com.google.protobuf.ListValue.Builder,
                                               com.google.protobuf.ListValueOrBuilder>
                                @@ -1321,11 +1372,13 @@ private void ensureValuesIsMutable() {
                                        * The values to be written. `values` can contain more than one
                                        * list of values. If it does, then multiple rows are written, one
                                        * for each entry in `values`. Each list in `values` must have
                                -       * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns]
                                -       * above. Sending multiple lists is equivalent to sending multiple
                                -       * `Mutation`s, each containing one `values` entry and repeating
                                -       * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are
                                -       * encoded as described [here][google.spanner.v1.TypeCode].
                                +       * exactly as many entries as there are entries in
                                +       * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending
                                +       * multiple lists is equivalent to sending multiple `Mutation`s, each
                                +       * containing one `values` entry and repeating
                                +       * [table][google.spanner.v1.Mutation.Write.table] and
                                +       * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in
                                +       * each list are encoded as described [here][google.spanner.v1.TypeCode].
                                        * 
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1337,6 +1390,7 @@ public java.util.List getValuesList() { return valuesBuilder_.getMessageList(); } } + /** * * @@ -1344,11 +1398,13 @@ public java.util.List getValuesList() { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1360,6 +1416,7 @@ public int getValuesCount() { return valuesBuilder_.getCount(); } } + /** * * @@ -1367,11 +1424,13 @@ public int getValuesCount() { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1383,6 +1442,7 @@ public com.google.protobuf.ListValue getValues(int index) { return valuesBuilder_.getMessage(index); } } + /** * * @@ -1390,11 +1450,13 @@ public com.google.protobuf.ListValue getValues(int index) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1412,6 +1474,7 @@ public Builder setValues(int index, com.google.protobuf.ListValue value) { } return this; } + /** * * @@ -1419,11 +1482,13 @@ public Builder setValues(int index, com.google.protobuf.ListValue value) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1438,6 +1503,7 @@ public Builder setValues(int index, com.google.protobuf.ListValue.Builder builde } return this; } + /** * * @@ -1445,11 +1511,13 @@ public Builder setValues(int index, com.google.protobuf.ListValue.Builder builde * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1467,6 +1535,7 @@ public Builder addValues(com.google.protobuf.ListValue value) { } return this; } + /** * * @@ -1474,11 +1543,13 @@ public Builder addValues(com.google.protobuf.ListValue value) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1496,6 +1567,7 @@ public Builder addValues(int index, com.google.protobuf.ListValue value) { } return this; } + /** * * @@ -1503,11 +1575,13 @@ public Builder addValues(int index, com.google.protobuf.ListValue value) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1522,6 +1596,7 @@ public Builder addValues(com.google.protobuf.ListValue.Builder builderForValue) } return this; } + /** * * @@ -1529,11 +1604,13 @@ public Builder addValues(com.google.protobuf.ListValue.Builder builderForValue) * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. *
                                * * repeated .google.protobuf.ListValue values = 3; @@ -1548,6 +1625,7 @@ public Builder addValues(int index, com.google.protobuf.ListValue.Builder builde } return this; } + /** * * @@ -1555,11 +1633,13 @@ public Builder addValues(int index, com.google.protobuf.ListValue.Builder builde * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; @@ -1575,6 +1655,7 @@ public Builder addAllValues( } return this; } + /** * * @@ -1582,11 +1663,13 @@ public Builder addAllValues( * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; @@ -1601,6 +1684,7 @@ public Builder clearValues() { } return this; } + /** * * @@ -1608,11 +1692,13 @@ public Builder clearValues() { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; @@ -1627,6 +1713,7 @@ public Builder removeValues(int index) { } return this; } + /** * * @@ -1634,18 +1721,21 @@ public Builder removeValues(int index) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; */ public com.google.protobuf.ListValue.Builder getValuesBuilder(int index) { - return getValuesFieldBuilder().getBuilder(index); + return internalGetValuesFieldBuilder().getBuilder(index); } + /** * * @@ -1653,11 +1743,13 @@ public com.google.protobuf.ListValue.Builder getValuesBuilder(int index) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; @@ -1669,6 +1761,7 @@ public com.google.protobuf.ListValueOrBuilder getValuesOrBuilder(int index) { return valuesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1676,11 +1769,13 @@ public com.google.protobuf.ListValueOrBuilder getValuesOrBuilder(int index) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; @@ -1693,6 +1788,7 @@ public com.google.protobuf.ListValueOrBuilder getValuesOrBuilder(int index) { return java.util.Collections.unmodifiableList(values_); } } + /** * * @@ -1700,19 +1796,22 @@ public com.google.protobuf.ListValueOrBuilder getValuesOrBuilder(int index) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; */ public com.google.protobuf.ListValue.Builder addValuesBuilder() { - return getValuesFieldBuilder() + return internalGetValuesFieldBuilder() .addBuilder(com.google.protobuf.ListValue.getDefaultInstance()); } + /** * * @@ -1720,19 +1819,22 @@ public com.google.protobuf.ListValue.Builder addValuesBuilder() { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; */ public com.google.protobuf.ListValue.Builder addValuesBuilder(int index) { - return getValuesFieldBuilder() + return internalGetValuesFieldBuilder() .addBuilder(index, com.google.protobuf.ListValue.getDefaultInstance()); } + /** * * @@ -1740,27 +1842,29 @@ public com.google.protobuf.ListValue.Builder addValuesBuilder(int index) { * The values to be written. `values` can contain more than one * list of values. If it does, then multiple rows are written, one * for each entry in `values`. Each list in `values` must have - * exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - * above. Sending multiple lists is equivalent to sending multiple - * `Mutation`s, each containing one `values` entry and repeating - * [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - * encoded as described [here][google.spanner.v1.TypeCode]. + * exactly as many entries as there are entries in + * [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + * multiple lists is equivalent to sending multiple `Mutation`s, each + * containing one `values` entry and repeating + * [table][google.spanner.v1.Mutation.Write.table] and + * [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + * each list are encoded as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue values = 3; */ public java.util.List getValuesBuilderList() { - return getValuesFieldBuilder().getBuilderList(); + return internalGetValuesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> - getValuesFieldBuilder() { + internalGetValuesFieldBuilder() { if (valuesBuilder_ == null) { valuesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder>( @@ -1770,18 +1874,6 @@ public java.util.List getValuesBuilderLis return valuesBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.Mutation.Write) } @@ -1851,6 +1943,7 @@ public interface DeleteOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -1868,12 +1961,12 @@ public interface DeleteOrBuilder * * *
                                -     * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -     * primary keys must be specified in the order in which they appear in the
                                -     * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -     * statement used to create the table).
                                -     * Delete is idempotent. The transaction will succeed even if some or all
                                -     * rows do not exist.
                                +     * Required. The primary keys of the rows within
                                +     * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +     * keys must be specified in the order in which they appear in the `PRIMARY
                                +     * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +     * used to create the table). Delete is idempotent. The transaction will
                                +     * succeed even if some or all rows do not exist.
                                      * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -1881,16 +1974,17 @@ public interface DeleteOrBuilder * @return Whether the keySet field is set. */ boolean hasKeySet(); + /** * * *
                                -     * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -     * primary keys must be specified in the order in which they appear in the
                                -     * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -     * statement used to create the table).
                                -     * Delete is idempotent. The transaction will succeed even if some or all
                                -     * rows do not exist.
                                +     * Required. The primary keys of the rows within
                                +     * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +     * keys must be specified in the order in which they appear in the `PRIMARY
                                +     * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +     * used to create the table). Delete is idempotent. The transaction will
                                +     * succeed even if some or all rows do not exist.
                                      * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -1898,22 +1992,24 @@ public interface DeleteOrBuilder * @return The keySet. */ com.google.spanner.v1.KeySet getKeySet(); + /** * * *
                                -     * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -     * primary keys must be specified in the order in which they appear in the
                                -     * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -     * statement used to create the table).
                                -     * Delete is idempotent. The transaction will succeed even if some or all
                                -     * rows do not exist.
                                +     * Required. The primary keys of the rows within
                                +     * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +     * keys must be specified in the order in which they appear in the `PRIMARY
                                +     * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +     * used to create the table). Delete is idempotent. The transaction will
                                +     * succeed even if some or all rows do not exist.
                                      * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; */ com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder(); } + /** * * @@ -1923,13 +2019,24 @@ public interface DeleteOrBuilder * * Protobuf type {@code google.spanner.v1.Mutation.Delete} */ - public static final class Delete extends com.google.protobuf.GeneratedMessageV3 + public static final class Delete extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.Mutation.Delete) DeleteOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Delete"); + } + // Use Delete.newBuilder() to construct. - private Delete(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Delete(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -1937,19 +2044,13 @@ private Delete() { table_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Delete(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_Delete_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_Delete_fieldAccessorTable @@ -1963,6 +2064,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -1986,6 +2088,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -2012,16 +2115,17 @@ public com.google.protobuf.ByteString getTableBytes() { public static final int KEY_SET_FIELD_NUMBER = 2; private com.google.spanner.v1.KeySet keySet_; + /** * * *
                                -     * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -     * primary keys must be specified in the order in which they appear in the
                                -     * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -     * statement used to create the table).
                                -     * Delete is idempotent. The transaction will succeed even if some or all
                                -     * rows do not exist.
                                +     * Required. The primary keys of the rows within
                                +     * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +     * keys must be specified in the order in which they appear in the `PRIMARY
                                +     * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +     * used to create the table). Delete is idempotent. The transaction will
                                +     * succeed even if some or all rows do not exist.
                                      * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2032,16 +2136,17 @@ public com.google.protobuf.ByteString getTableBytes() { public boolean hasKeySet() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -     * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -     * primary keys must be specified in the order in which they appear in the
                                -     * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -     * statement used to create the table).
                                -     * Delete is idempotent. The transaction will succeed even if some or all
                                -     * rows do not exist.
                                +     * Required. The primary keys of the rows within
                                +     * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +     * keys must be specified in the order in which they appear in the `PRIMARY
                                +     * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +     * used to create the table). Delete is idempotent. The transaction will
                                +     * succeed even if some or all rows do not exist.
                                      * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2052,16 +2157,17 @@ public boolean hasKeySet() { public com.google.spanner.v1.KeySet getKeySet() { return keySet_ == null ? com.google.spanner.v1.KeySet.getDefaultInstance() : keySet_; } + /** * * *
                                -     * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -     * primary keys must be specified in the order in which they appear in the
                                -     * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -     * statement used to create the table).
                                -     * Delete is idempotent. The transaction will succeed even if some or all
                                -     * rows do not exist.
                                +     * Required. The primary keys of the rows within
                                +     * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +     * keys must be specified in the order in which they appear in the `PRIMARY
                                +     * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +     * used to create the table). Delete is idempotent. The transaction will
                                +     * succeed even if some or all rows do not exist.
                                      * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2085,8 +2191,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getKeySet()); @@ -2100,8 +2206,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getKeySet()); @@ -2185,38 +2291,38 @@ public static com.google.spanner.v1.Mutation.Delete parseFrom( public static com.google.spanner.v1.Mutation.Delete parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation.Delete parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Mutation.Delete parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation.Delete parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Mutation.Delete parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation.Delete parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2239,11 +2345,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2253,8 +2359,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.Mutation.Delete} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.Mutation.Delete) com.google.spanner.v1.Mutation.DeleteOrBuilder { @@ -2264,7 +2369,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_Delete_fieldAccessorTable @@ -2278,14 +2383,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getKeySetFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetKeySetFieldBuilder(); } } @@ -2346,41 +2451,6 @@ private void buildPartial0(com.google.spanner.v1.Mutation.Delete result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.Mutation.Delete) { @@ -2435,7 +2505,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getKeySetFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetKeySetFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -2459,6 +2530,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object table_ = ""; + /** * * @@ -2481,6 +2553,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -2503,6 +2576,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2524,6 +2598,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2541,6 +2616,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -2565,21 +2641,22 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.KeySet keySet_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder> keySetBuilder_; + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2590,16 +2667,17 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { public boolean hasKeySet() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2614,16 +2692,17 @@ public com.google.spanner.v1.KeySet getKeySet() { return keySetBuilder_.getMessage(); } } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2642,16 +2721,17 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { onChanged(); return this; } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2667,16 +2747,17 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { onChanged(); return this; } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2700,16 +2781,17 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { } return this; } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2725,16 +2807,17 @@ public Builder clearKeySet() { onChanged(); return this; } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2743,18 +2826,19 @@ public Builder clearKeySet() { public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getKeySetFieldBuilder().getBuilder(); + return internalGetKeySetFieldBuilder().getBuilder(); } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -2767,29 +2851,30 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { return keySet_ == null ? com.google.spanner.v1.KeySet.getDefaultInstance() : keySet_; } } + /** * * *
                                -       * Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete.  The
                                -       * primary keys must be specified in the order in which they appear in the
                                -       * `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL
                                -       * statement used to create the table).
                                -       * Delete is idempotent. The transaction will succeed even if some or all
                                -       * rows do not exist.
                                +       * Required. The primary keys of the rows within
                                +       * [table][google.spanner.v1.Mutation.Delete.table] to delete.  The primary
                                +       * keys must be specified in the order in which they appear in the `PRIMARY
                                +       * KEY()` clause of the table's equivalent DDL statement (the DDL statement
                                +       * used to create the table). Delete is idempotent. The transaction will
                                +       * succeed even if some or all rows do not exist.
                                        * 
                                * * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder> - getKeySetFieldBuilder() { + internalGetKeySetFieldBuilder() { if (keySetBuilder_ == null) { keySetBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder>( @@ -2799,18 +2884,6 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { return keySetBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.Mutation.Delete) } @@ -2863,81 +2936,2740 @@ public com.google.spanner.v1.Mutation.Delete getDefaultInstanceForType() { } } - private int operationCase_ = 0; + public interface SendOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.Mutation.Send) + com.google.protobuf.MessageOrBuilder { - @SuppressWarnings("serial") - private java.lang.Object operation_; + /** + * + * + *
                                +     * Required. The queue to which the message will be sent.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The queue. + */ + java.lang.String getQueue(); - public enum OperationCase - implements - com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - INSERT(1), - UPDATE(2), - INSERT_OR_UPDATE(3), - REPLACE(4), - DELETE(5), - OPERATION_NOT_SET(0); - private final int value; + /** + * + * + *
                                +     * Required. The queue to which the message will be sent.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for queue. + */ + com.google.protobuf.ByteString getQueueBytes(); - 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. - * @deprecated Use {@link #forNumber(int)} instead. + * + * + *
                                +     * Required. The primary key of the message to be sent.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the key field is set. */ - @java.lang.Deprecated - public static OperationCase valueOf(int value) { - return forNumber(value); - } + boolean hasKey(); - public static OperationCase forNumber(int value) { - switch (value) { - case 1: - return INSERT; - case 2: - return UPDATE; - case 3: - return INSERT_OR_UPDATE; - case 4: - return REPLACE; - case 5: - return DELETE; - case 0: - return OPERATION_NOT_SET; - default: - return null; - } - } + /** + * + * + *
                                +     * Required. The primary key of the message to be sent.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The key. + */ + com.google.protobuf.ListValue getKey(); - public int getNumber() { - return this.value; - } - }; + /** + * + * + *
                                +     * Required. The primary key of the message to be sent.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.protobuf.ListValueOrBuilder getKeyOrBuilder(); - public OperationCase getOperationCase() { - return OperationCase.forNumber(operationCase_); - } + /** + * + * + *
                                +     * The time at which Spanner will begin attempting to deliver the message.
                                +     * If `deliver_time` is not set, Spanner will deliver the message
                                +     * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +     * with a value closer to the current time.
                                +     * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + * + * @return Whether the deliverTime field is set. + */ + boolean hasDeliverTime(); - public static final int INSERT_FIELD_NUMBER = 1; - /** - * - * - *
                                -   * Insert new rows in a table. If any of the rows already exist,
                                -   * the write or transaction fails with error `ALREADY_EXISTS`.
                                -   * 
                                - * - * .google.spanner.v1.Mutation.Write insert = 1; - * - * @return Whether the insert field is set. - */ - @java.lang.Override - public boolean hasInsert() { + /** + * + * + *
                                +     * The time at which Spanner will begin attempting to deliver the message.
                                +     * If `deliver_time` is not set, Spanner will deliver the message
                                +     * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +     * with a value closer to the current time.
                                +     * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + * + * @return The deliverTime. + */ + com.google.protobuf.Timestamp getDeliverTime(); + + /** + * + * + *
                                +     * The time at which Spanner will begin attempting to deliver the message.
                                +     * If `deliver_time` is not set, Spanner will deliver the message
                                +     * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +     * with a value closer to the current time.
                                +     * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + com.google.protobuf.TimestampOrBuilder getDeliverTimeOrBuilder(); + + /** + * + * + *
                                +     * The payload of the message.
                                +     * 
                                + * + * .google.protobuf.Value payload = 4; + * + * @return Whether the payload field is set. + */ + boolean hasPayload(); + + /** + * + * + *
                                +     * The payload of the message.
                                +     * 
                                + * + * .google.protobuf.Value payload = 4; + * + * @return The payload. + */ + com.google.protobuf.Value getPayload(); + + /** + * + * + *
                                +     * The payload of the message.
                                +     * 
                                + * + * .google.protobuf.Value payload = 4; + */ + com.google.protobuf.ValueOrBuilder getPayloadOrBuilder(); + } + + /** + * + * + *
                                +   * Arguments to [send][google.spanner.v1.Mutation.send] operations.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.Mutation.Send} + */ + public static final class Send extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.Mutation.Send) + SendOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Send"); + } + + // Use Send.newBuilder() to construct. + private Send(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Send() { + queue_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Send_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Send_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Mutation.Send.class, + com.google.spanner.v1.Mutation.Send.Builder.class); + } + + private int bitField0_; + public static final int QUEUE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object queue_ = ""; + + /** + * + * + *
                                +     * Required. The queue to which the message will be sent.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The queue. + */ + @java.lang.Override + public java.lang.String getQueue() { + java.lang.Object ref = queue_; + 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(); + queue_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Required. The queue to which the message will be sent.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for queue. + */ + @java.lang.Override + public com.google.protobuf.ByteString getQueueBytes() { + java.lang.Object ref = queue_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + queue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int KEY_FIELD_NUMBER = 2; + private com.google.protobuf.ListValue key_; + + /** + * + * + *
                                +     * Required. The primary key of the message to be sent.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the key field is set. + */ + @java.lang.Override + public boolean hasKey() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Required. The primary key of the message to be sent.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The key. + */ + @java.lang.Override + public com.google.protobuf.ListValue getKey() { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } + + /** + * + * + *
                                +     * Required. The primary key of the message to be sent.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.protobuf.ListValueOrBuilder getKeyOrBuilder() { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } + + public static final int DELIVER_TIME_FIELD_NUMBER = 3; + private com.google.protobuf.Timestamp deliverTime_; + + /** + * + * + *
                                +     * The time at which Spanner will begin attempting to deliver the message.
                                +     * If `deliver_time` is not set, Spanner will deliver the message
                                +     * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +     * with a value closer to the current time.
                                +     * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + * + * @return Whether the deliverTime field is set. + */ + @java.lang.Override + public boolean hasDeliverTime() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
                                +     * The time at which Spanner will begin attempting to deliver the message.
                                +     * If `deliver_time` is not set, Spanner will deliver the message
                                +     * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +     * with a value closer to the current time.
                                +     * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + * + * @return The deliverTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getDeliverTime() { + return deliverTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : deliverTime_; + } + + /** + * + * + *
                                +     * The time at which Spanner will begin attempting to deliver the message.
                                +     * If `deliver_time` is not set, Spanner will deliver the message
                                +     * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +     * with a value closer to the current time.
                                +     * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getDeliverTimeOrBuilder() { + return deliverTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : deliverTime_; + } + + public static final int PAYLOAD_FIELD_NUMBER = 4; + private com.google.protobuf.Value payload_; + + /** + * + * + *
                                +     * The payload of the message.
                                +     * 
                                + * + * .google.protobuf.Value payload = 4; + * + * @return Whether the payload field is set. + */ + @java.lang.Override + public boolean hasPayload() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
                                +     * The payload of the message.
                                +     * 
                                + * + * .google.protobuf.Value payload = 4; + * + * @return The payload. + */ + @java.lang.Override + public com.google.protobuf.Value getPayload() { + return payload_ == null ? com.google.protobuf.Value.getDefaultInstance() : payload_; + } + + /** + * + * + *
                                +     * The payload of the message.
                                +     * 
                                + * + * .google.protobuf.Value payload = 4; + */ + @java.lang.Override + public com.google.protobuf.ValueOrBuilder getPayloadOrBuilder() { + return payload_ == null ? com.google.protobuf.Value.getDefaultInstance() : payload_; + } + + 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.GeneratedMessage.isStringEmpty(queue_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, queue_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getKey()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(3, getDeliverTime()); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(4, getPayload()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(queue_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, queue_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getKey()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getDeliverTime()); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getPayload()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.Mutation.Send)) { + return super.equals(obj); + } + com.google.spanner.v1.Mutation.Send other = (com.google.spanner.v1.Mutation.Send) obj; + + if (!getQueue().equals(other.getQueue())) return false; + if (hasKey() != other.hasKey()) return false; + if (hasKey()) { + if (!getKey().equals(other.getKey())) return false; + } + if (hasDeliverTime() != other.hasDeliverTime()) return false; + if (hasDeliverTime()) { + if (!getDeliverTime().equals(other.getDeliverTime())) return false; + } + if (hasPayload() != other.hasPayload()) return false; + if (hasPayload()) { + if (!getPayload().equals(other.getPayload())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + QUEUE_FIELD_NUMBER; + hash = (53 * hash) + getQueue().hashCode(); + if (hasKey()) { + hash = (37 * hash) + KEY_FIELD_NUMBER; + hash = (53 * hash) + getKey().hashCode(); + } + if (hasDeliverTime()) { + hash = (37 * hash) + DELIVER_TIME_FIELD_NUMBER; + hash = (53 * hash) + getDeliverTime().hashCode(); + } + if (hasPayload()) { + hash = (37 * hash) + PAYLOAD_FIELD_NUMBER; + hash = (53 * hash) + getPayload().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.Mutation.Send parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Send parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Mutation.Send parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Mutation.Send parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.Mutation.Send 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * Arguments to [send][google.spanner.v1.Mutation.send] operations.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.Mutation.Send} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.Mutation.Send) + com.google.spanner.v1.Mutation.SendOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Send_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Send_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Mutation.Send.class, + com.google.spanner.v1.Mutation.Send.Builder.class); + } + + // Construct using com.google.spanner.v1.Mutation.Send.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetKeyFieldBuilder(); + internalGetDeliverTimeFieldBuilder(); + internalGetPayloadFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + queue_ = ""; + key_ = null; + if (keyBuilder_ != null) { + keyBuilder_.dispose(); + keyBuilder_ = null; + } + deliverTime_ = null; + if (deliverTimeBuilder_ != null) { + deliverTimeBuilder_.dispose(); + deliverTimeBuilder_ = null; + } + payload_ = null; + if (payloadBuilder_ != null) { + payloadBuilder_.dispose(); + payloadBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Send_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Send getDefaultInstanceForType() { + return com.google.spanner.v1.Mutation.Send.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Send build() { + com.google.spanner.v1.Mutation.Send result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Send buildPartial() { + com.google.spanner.v1.Mutation.Send result = new com.google.spanner.v1.Mutation.Send(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.Mutation.Send result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.queue_ = queue_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.key_ = keyBuilder_ == null ? key_ : keyBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.deliverTime_ = + deliverTimeBuilder_ == null ? deliverTime_ : deliverTimeBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.payload_ = payloadBuilder_ == null ? payload_ : payloadBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.Mutation.Send) { + return mergeFrom((com.google.spanner.v1.Mutation.Send) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.Mutation.Send other) { + if (other == com.google.spanner.v1.Mutation.Send.getDefaultInstance()) return this; + if (!other.getQueue().isEmpty()) { + queue_ = other.queue_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasKey()) { + mergeKey(other.getKey()); + } + if (other.hasDeliverTime()) { + mergeDeliverTime(other.getDeliverTime()); + } + if (other.hasPayload()) { + mergePayload(other.getPayload()); + } + 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: + { + queue_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetKeyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetDeliverTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetPayloadFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object queue_ = ""; + + /** + * + * + *
                                +       * Required. The queue to which the message will be sent.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The queue. + */ + public java.lang.String getQueue() { + java.lang.Object ref = queue_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + queue_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Required. The queue to which the message will be sent.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for queue. + */ + public com.google.protobuf.ByteString getQueueBytes() { + java.lang.Object ref = queue_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + queue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Required. The queue to which the message will be sent.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The queue to set. + * @return This builder for chaining. + */ + public Builder setQueue(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + queue_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The queue to which the message will be sent.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearQueue() { + queue_ = getDefaultInstance().getQueue(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The queue to which the message will be sent.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for queue to set. + * @return This builder for chaining. + */ + public Builder setQueueBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + queue_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.ListValue key_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + keyBuilder_; + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the key field is set. + */ + public boolean hasKey() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The key. + */ + public com.google.protobuf.ListValue getKey() { + if (keyBuilder_ == null) { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } else { + return keyBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setKey(com.google.protobuf.ListValue value) { + if (keyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + key_ = value; + } else { + keyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setKey(com.google.protobuf.ListValue.Builder builderForValue) { + if (keyBuilder_ == null) { + key_ = builderForValue.build(); + } else { + keyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeKey(com.google.protobuf.ListValue value) { + if (keyBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && key_ != null + && key_ != com.google.protobuf.ListValue.getDefaultInstance()) { + getKeyBuilder().mergeFrom(value); + } else { + key_ = value; + } + } else { + keyBuilder_.mergeFrom(value); + } + if (key_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearKey() { + bitField0_ = (bitField0_ & ~0x00000002); + key_ = null; + if (keyBuilder_ != null) { + keyBuilder_.dispose(); + keyBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.protobuf.ListValue.Builder getKeyBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetKeyFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.protobuf.ListValueOrBuilder getKeyOrBuilder() { + if (keyBuilder_ != null) { + return keyBuilder_.getMessageOrBuilder(); + } else { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be sent.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + internalGetKeyFieldBuilder() { + if (keyBuilder_ == null) { + keyBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder>( + getKey(), getParentForChildren(), isClean()); + key_ = null; + } + return keyBuilder_; + } + + private com.google.protobuf.Timestamp deliverTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + deliverTimeBuilder_; + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + * + * @return Whether the deliverTime field is set. + */ + public boolean hasDeliverTime() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + * + * @return The deliverTime. + */ + public com.google.protobuf.Timestamp getDeliverTime() { + if (deliverTimeBuilder_ == null) { + return deliverTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : deliverTime_; + } else { + return deliverTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + public Builder setDeliverTime(com.google.protobuf.Timestamp value) { + if (deliverTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + deliverTime_ = value; + } else { + deliverTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + public Builder setDeliverTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (deliverTimeBuilder_ == null) { + deliverTime_ = builderForValue.build(); + } else { + deliverTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + public Builder mergeDeliverTime(com.google.protobuf.Timestamp value) { + if (deliverTimeBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && deliverTime_ != null + && deliverTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getDeliverTimeBuilder().mergeFrom(value); + } else { + deliverTime_ = value; + } + } else { + deliverTimeBuilder_.mergeFrom(value); + } + if (deliverTime_ != null) { + bitField0_ |= 0x00000004; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + public Builder clearDeliverTime() { + bitField0_ = (bitField0_ & ~0x00000004); + deliverTime_ = null; + if (deliverTimeBuilder_ != null) { + deliverTimeBuilder_.dispose(); + deliverTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + public com.google.protobuf.Timestamp.Builder getDeliverTimeBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return internalGetDeliverTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + public com.google.protobuf.TimestampOrBuilder getDeliverTimeOrBuilder() { + if (deliverTimeBuilder_ != null) { + return deliverTimeBuilder_.getMessageOrBuilder(); + } else { + return deliverTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : deliverTime_; + } + } + + /** + * + * + *
                                +       * The time at which Spanner will begin attempting to deliver the message.
                                +       * If `deliver_time` is not set, Spanner will deliver the message
                                +       * immediately. If `deliver_time` is in the past, Spanner will replace it
                                +       * with a value closer to the current time.
                                +       * 
                                + * + * .google.protobuf.Timestamp deliver_time = 3; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetDeliverTimeFieldBuilder() { + if (deliverTimeBuilder_ == null) { + deliverTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getDeliverTime(), getParentForChildren(), isClean()); + deliverTime_ = null; + } + return deliverTimeBuilder_; + } + + private com.google.protobuf.Value payload_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder> + payloadBuilder_; + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + * + * @return Whether the payload field is set. + */ + public boolean hasPayload() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + * + * @return The payload. + */ + public com.google.protobuf.Value getPayload() { + if (payloadBuilder_ == null) { + return payload_ == null ? com.google.protobuf.Value.getDefaultInstance() : payload_; + } else { + return payloadBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + */ + public Builder setPayload(com.google.protobuf.Value value) { + if (payloadBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + payload_ = value; + } else { + payloadBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + */ + public Builder setPayload(com.google.protobuf.Value.Builder builderForValue) { + if (payloadBuilder_ == null) { + payload_ = builderForValue.build(); + } else { + payloadBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + */ + public Builder mergePayload(com.google.protobuf.Value value) { + if (payloadBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && payload_ != null + && payload_ != com.google.protobuf.Value.getDefaultInstance()) { + getPayloadBuilder().mergeFrom(value); + } else { + payload_ = value; + } + } else { + payloadBuilder_.mergeFrom(value); + } + if (payload_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + */ + public Builder clearPayload() { + bitField0_ = (bitField0_ & ~0x00000008); + payload_ = null; + if (payloadBuilder_ != null) { + payloadBuilder_.dispose(); + payloadBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + */ + public com.google.protobuf.Value.Builder getPayloadBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetPayloadFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + */ + public com.google.protobuf.ValueOrBuilder getPayloadOrBuilder() { + if (payloadBuilder_ != null) { + return payloadBuilder_.getMessageOrBuilder(); + } else { + return payload_ == null ? com.google.protobuf.Value.getDefaultInstance() : payload_; + } + } + + /** + * + * + *
                                +       * The payload of the message.
                                +       * 
                                + * + * .google.protobuf.Value payload = 4; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder> + internalGetPayloadFieldBuilder() { + if (payloadBuilder_ == null) { + payloadBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Value, + com.google.protobuf.Value.Builder, + com.google.protobuf.ValueOrBuilder>( + getPayload(), getParentForChildren(), isClean()); + payload_ = null; + } + return payloadBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.Mutation.Send) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.Mutation.Send) + private static final com.google.spanner.v1.Mutation.Send DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.Mutation.Send(); + } + + public static com.google.spanner.v1.Mutation.Send getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Send parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Send getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AckOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.Mutation.Ack) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Required. The queue where the message to be acked is stored.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The queue. + */ + java.lang.String getQueue(); + + /** + * + * + *
                                +     * Required. The queue where the message to be acked is stored.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for queue. + */ + com.google.protobuf.ByteString getQueueBytes(); + + /** + * + * + *
                                +     * Required. The primary key of the message to be acked.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the key field is set. + */ + boolean hasKey(); + + /** + * + * + *
                                +     * Required. The primary key of the message to be acked.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The key. + */ + com.google.protobuf.ListValue getKey(); + + /** + * + * + *
                                +     * Required. The primary key of the message to be acked.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.protobuf.ListValueOrBuilder getKeyOrBuilder(); + + /** + * + * + *
                                +     * By default, an attempt to ack a message that does not exist will fail
                                +     * with a `NOT_FOUND` error. With `ignore_not_found` set to true, the ack
                                +     * will succeed even if the message does not exist. This is useful for
                                +     * unconditionally acking a message, even if it is missing or has already
                                +     * been acked.
                                +     * 
                                + * + * bool ignore_not_found = 3; + * + * @return The ignoreNotFound. + */ + boolean getIgnoreNotFound(); + } + + /** + * + * + *
                                +   * Arguments to [ack][google.spanner.v1.Mutation.ack] operations.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.Mutation.Ack} + */ + public static final class Ack extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.Mutation.Ack) + AckOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Ack"); + } + + // Use Ack.newBuilder() to construct. + private Ack(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Ack() { + queue_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Ack_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Ack_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Mutation.Ack.class, + com.google.spanner.v1.Mutation.Ack.Builder.class); + } + + private int bitField0_; + public static final int QUEUE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object queue_ = ""; + + /** + * + * + *
                                +     * Required. The queue where the message to be acked is stored.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The queue. + */ + @java.lang.Override + public java.lang.String getQueue() { + java.lang.Object ref = queue_; + 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(); + queue_ = s; + return s; + } + } + + /** + * + * + *
                                +     * Required. The queue where the message to be acked is stored.
                                +     * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for queue. + */ + @java.lang.Override + public com.google.protobuf.ByteString getQueueBytes() { + java.lang.Object ref = queue_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + queue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int KEY_FIELD_NUMBER = 2; + private com.google.protobuf.ListValue key_; + + /** + * + * + *
                                +     * Required. The primary key of the message to be acked.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the key field is set. + */ + @java.lang.Override + public boolean hasKey() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +     * Required. The primary key of the message to be acked.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The key. + */ + @java.lang.Override + public com.google.protobuf.ListValue getKey() { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } + + /** + * + * + *
                                +     * Required. The primary key of the message to be acked.
                                +     * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.protobuf.ListValueOrBuilder getKeyOrBuilder() { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } + + public static final int IGNORE_NOT_FOUND_FIELD_NUMBER = 3; + private boolean ignoreNotFound_ = false; + + /** + * + * + *
                                +     * By default, an attempt to ack a message that does not exist will fail
                                +     * with a `NOT_FOUND` error. With `ignore_not_found` set to true, the ack
                                +     * will succeed even if the message does not exist. This is useful for
                                +     * unconditionally acking a message, even if it is missing or has already
                                +     * been acked.
                                +     * 
                                + * + * bool ignore_not_found = 3; + * + * @return The ignoreNotFound. + */ + @java.lang.Override + public boolean getIgnoreNotFound() { + return ignoreNotFound_; + } + + 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.GeneratedMessage.isStringEmpty(queue_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, queue_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getKey()); + } + if (ignoreNotFound_ != false) { + output.writeBool(3, ignoreNotFound_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(queue_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, queue_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getKey()); + } + if (ignoreNotFound_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, ignoreNotFound_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.Mutation.Ack)) { + return super.equals(obj); + } + com.google.spanner.v1.Mutation.Ack other = (com.google.spanner.v1.Mutation.Ack) obj; + + if (!getQueue().equals(other.getQueue())) return false; + if (hasKey() != other.hasKey()) return false; + if (hasKey()) { + if (!getKey().equals(other.getKey())) return false; + } + if (getIgnoreNotFound() != other.getIgnoreNotFound()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + QUEUE_FIELD_NUMBER; + hash = (53 * hash) + getQueue().hashCode(); + if (hasKey()) { + hash = (37 * hash) + KEY_FIELD_NUMBER; + hash = (53 * hash) + getKey().hashCode(); + } + hash = (37 * hash) + IGNORE_NOT_FOUND_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIgnoreNotFound()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Ack parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Mutation.Ack parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Mutation.Ack parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.Mutation.Ack 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * Arguments to [ack][google.spanner.v1.Mutation.ack] operations.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.Mutation.Ack} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.Mutation.Ack) + com.google.spanner.v1.Mutation.AckOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Ack_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Ack_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Mutation.Ack.class, + com.google.spanner.v1.Mutation.Ack.Builder.class); + } + + // Construct using com.google.spanner.v1.Mutation.Ack.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetKeyFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + queue_ = ""; + key_ = null; + if (keyBuilder_ != null) { + keyBuilder_.dispose(); + keyBuilder_ = null; + } + ignoreNotFound_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_Ack_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Ack getDefaultInstanceForType() { + return com.google.spanner.v1.Mutation.Ack.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Ack build() { + com.google.spanner.v1.Mutation.Ack result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Ack buildPartial() { + com.google.spanner.v1.Mutation.Ack result = new com.google.spanner.v1.Mutation.Ack(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.Mutation.Ack result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.queue_ = queue_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.key_ = keyBuilder_ == null ? key_ : keyBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.ignoreNotFound_ = ignoreNotFound_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.Mutation.Ack) { + return mergeFrom((com.google.spanner.v1.Mutation.Ack) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.Mutation.Ack other) { + if (other == com.google.spanner.v1.Mutation.Ack.getDefaultInstance()) return this; + if (!other.getQueue().isEmpty()) { + queue_ = other.queue_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasKey()) { + mergeKey(other.getKey()); + } + if (other.getIgnoreNotFound() != false) { + setIgnoreNotFound(other.getIgnoreNotFound()); + } + 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: + { + queue_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetKeyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + ignoreNotFound_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object queue_ = ""; + + /** + * + * + *
                                +       * Required. The queue where the message to be acked is stored.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The queue. + */ + public java.lang.String getQueue() { + java.lang.Object ref = queue_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + queue_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +       * Required. The queue where the message to be acked is stored.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for queue. + */ + public com.google.protobuf.ByteString getQueueBytes() { + java.lang.Object ref = queue_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + queue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +       * Required. The queue where the message to be acked is stored.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The queue to set. + * @return This builder for chaining. + */ + public Builder setQueue(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + queue_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The queue where the message to be acked is stored.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearQueue() { + queue_ = getDefaultInstance().getQueue(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The queue where the message to be acked is stored.
                                +       * 
                                + * + * string queue = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for queue to set. + * @return This builder for chaining. + */ + public Builder setQueueBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + queue_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.ListValue key_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + keyBuilder_; + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the key field is set. + */ + public boolean hasKey() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The key. + */ + public com.google.protobuf.ListValue getKey() { + if (keyBuilder_ == null) { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } else { + return keyBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setKey(com.google.protobuf.ListValue value) { + if (keyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + key_ = value; + } else { + keyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setKey(com.google.protobuf.ListValue.Builder builderForValue) { + if (keyBuilder_ == null) { + key_ = builderForValue.build(); + } else { + keyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeKey(com.google.protobuf.ListValue value) { + if (keyBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && key_ != null + && key_ != com.google.protobuf.ListValue.getDefaultInstance()) { + getKeyBuilder().mergeFrom(value); + } else { + key_ = value; + } + } else { + keyBuilder_.mergeFrom(value); + } + if (key_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearKey() { + bitField0_ = (bitField0_ & ~0x00000002); + key_ = null; + if (keyBuilder_ != null) { + keyBuilder_.dispose(); + keyBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.protobuf.ListValue.Builder getKeyBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetKeyFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.protobuf.ListValueOrBuilder getKeyOrBuilder() { + if (keyBuilder_ != null) { + return keyBuilder_.getMessageOrBuilder(); + } else { + return key_ == null ? com.google.protobuf.ListValue.getDefaultInstance() : key_; + } + } + + /** + * + * + *
                                +       * Required. The primary key of the message to be acked.
                                +       * 
                                + * + * .google.protobuf.ListValue key = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + internalGetKeyFieldBuilder() { + if (keyBuilder_ == null) { + keyBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder>( + getKey(), getParentForChildren(), isClean()); + key_ = null; + } + return keyBuilder_; + } + + private boolean ignoreNotFound_; + + /** + * + * + *
                                +       * By default, an attempt to ack a message that does not exist will fail
                                +       * with a `NOT_FOUND` error. With `ignore_not_found` set to true, the ack
                                +       * will succeed even if the message does not exist. This is useful for
                                +       * unconditionally acking a message, even if it is missing or has already
                                +       * been acked.
                                +       * 
                                + * + * bool ignore_not_found = 3; + * + * @return The ignoreNotFound. + */ + @java.lang.Override + public boolean getIgnoreNotFound() { + return ignoreNotFound_; + } + + /** + * + * + *
                                +       * By default, an attempt to ack a message that does not exist will fail
                                +       * with a `NOT_FOUND` error. With `ignore_not_found` set to true, the ack
                                +       * will succeed even if the message does not exist. This is useful for
                                +       * unconditionally acking a message, even if it is missing or has already
                                +       * been acked.
                                +       * 
                                + * + * bool ignore_not_found = 3; + * + * @param value The ignoreNotFound to set. + * @return This builder for chaining. + */ + public Builder setIgnoreNotFound(boolean value) { + + ignoreNotFound_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * By default, an attempt to ack a message that does not exist will fail
                                +       * with a `NOT_FOUND` error. With `ignore_not_found` set to true, the ack
                                +       * will succeed even if the message does not exist. This is useful for
                                +       * unconditionally acking a message, even if it is missing or has already
                                +       * been acked.
                                +       * 
                                + * + * bool ignore_not_found = 3; + * + * @return This builder for chaining. + */ + public Builder clearIgnoreNotFound() { + bitField0_ = (bitField0_ & ~0x00000004); + ignoreNotFound_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.Mutation.Ack) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.Mutation.Ack) + private static final com.google.spanner.v1.Mutation.Ack DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.Mutation.Ack(); + } + + public static com.google.spanner.v1.Mutation.Ack getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Ack parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation.Ack getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int operationCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object operation_; + + public enum OperationCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + INSERT(1), + UPDATE(2), + INSERT_OR_UPDATE(3), + REPLACE(4), + DELETE(5), + SEND(6), + ACK(7), + OPERATION_NOT_SET(0); + private final int value; + + 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. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static OperationCase valueOf(int value) { + return forNumber(value); + } + + public static OperationCase forNumber(int value) { + switch (value) { + case 1: + return INSERT; + case 2: + return UPDATE; + case 3: + return INSERT_OR_UPDATE; + case 4: + return REPLACE; + case 5: + return DELETE; + case 6: + return SEND; + case 7: + return ACK; + case 0: + return OPERATION_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public OperationCase getOperationCase() { + return OperationCase.forNumber(operationCase_); + } + + public static final int INSERT_FIELD_NUMBER = 1; + + /** + * + * + *
                                +   * Insert new rows in a table. If any of the rows already exist,
                                +   * the write or transaction fails with error `ALREADY_EXISTS`.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + * + * @return Whether the insert field is set. + */ + @java.lang.Override + public boolean hasInsert() { return operationCase_ == 1; } + /** * * @@ -2957,6 +5689,7 @@ public com.google.spanner.v1.Mutation.Write getInsert() { } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } + /** * * @@ -2976,6 +5709,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrBuilder() { } public static final int UPDATE_FIELD_NUMBER = 2; + /** * * @@ -2992,6 +5726,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrBuilder() { public boolean hasUpdate() { return operationCase_ == 2; } + /** * * @@ -3011,6 +5746,7 @@ public com.google.spanner.v1.Mutation.Write getUpdate() { } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } + /** * * @@ -3030,17 +5766,20 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() { } public static final int INSERT_OR_UPDATE_FIELD_NUMBER = 3; + /** * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -   * its column values are overwritten with the ones provided. Any
                                -   * column values not explicitly written are preserved.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, then its column values are overwritten with the ones
                                +   * provided. Any column values not explicitly written are preserved.
                                    *
                                -   * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -   * NULL` columns in the table must be given a value. This holds true
                                -   * even when the row already exists and will therefore actually be updated.
                                +   * When using
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +   * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +   * columns in the table must be given a value. This holds true even when the
                                +   * row already exists and will therefore actually be updated.
                                    * 
                                * * .google.spanner.v1.Mutation.Write insert_or_update = 3; @@ -3051,17 +5790,20 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() { public boolean hasInsertOrUpdate() { return operationCase_ == 3; } + /** * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -   * its column values are overwritten with the ones provided. Any
                                -   * column values not explicitly written are preserved.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, then its column values are overwritten with the ones
                                +   * provided. Any column values not explicitly written are preserved.
                                    *
                                -   * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -   * NULL` columns in the table must be given a value. This holds true
                                -   * even when the row already exists and will therefore actually be updated.
                                +   * When using
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +   * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +   * columns in the table must be given a value. This holds true even when the
                                +   * row already exists and will therefore actually be updated.
                                    * 
                                * * .google.spanner.v1.Mutation.Write insert_or_update = 3; @@ -3075,17 +5817,20 @@ public com.google.spanner.v1.Mutation.Write getInsertOrUpdate() { } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } + /** * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -   * its column values are overwritten with the ones provided. Any
                                -   * column values not explicitly written are preserved.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, then its column values are overwritten with the ones
                                +   * provided. Any column values not explicitly written are preserved.
                                    *
                                -   * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -   * NULL` columns in the table must be given a value. This holds true
                                -   * even when the row already exists and will therefore actually be updated.
                                +   * When using
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +   * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +   * columns in the table must be given a value. This holds true even when the
                                +   * row already exists and will therefore actually be updated.
                                    * 
                                * * .google.spanner.v1.Mutation.Write insert_or_update = 3; @@ -3099,14 +5844,16 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder( } public static final int REPLACE_FIELD_NUMBER = 4; + /** * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -   * deleted, and the column values provided are inserted
                                -   * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -   * explicitly written become `NULL`.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, it is deleted, and the column values provided are
                                +   * inserted instead. Unlike
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +   * means any values not explicitly written become `NULL`.
                                    *
                                    * In an interleaved table, if you create the child table with the
                                    * `ON DELETE CASCADE` annotation, then replacing a parent row
                                @@ -3122,14 +5869,16 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder(
                                   public boolean hasReplace() {
                                     return operationCase_ == 4;
                                   }
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -   * deleted, and the column values provided are inserted
                                -   * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -   * explicitly written become `NULL`.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, it is deleted, and the column values provided are
                                +   * inserted instead. Unlike
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +   * means any values not explicitly written become `NULL`.
                                    *
                                    * In an interleaved table, if you create the child table with the
                                    * `ON DELETE CASCADE` annotation, then replacing a parent row
                                @@ -3146,85 +5895,198 @@ public com.google.spanner.v1.Mutation.Write getReplace() {
                                     if (operationCase_ == 4) {
                                       return (com.google.spanner.v1.Mutation.Write) operation_;
                                     }
                                -    return com.google.spanner.v1.Mutation.Write.getDefaultInstance();
                                +    return com.google.spanner.v1.Mutation.Write.getDefaultInstance();
                                +  }
                                +
                                +  /**
                                +   *
                                +   *
                                +   * 
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, it is deleted, and the column values provided are
                                +   * inserted instead. Unlike
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +   * means any values not explicitly written become `NULL`.
                                +   *
                                +   * In an interleaved table, if you create the child table with the
                                +   * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +   * also deletes the child rows. Otherwise, you must delete the
                                +   * child rows before you replace the parent row.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Write replace = 4; + */ + @java.lang.Override + public com.google.spanner.v1.Mutation.WriteOrBuilder getReplaceOrBuilder() { + if (operationCase_ == 4) { + return (com.google.spanner.v1.Mutation.Write) operation_; + } + return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + } + + public static final int DELETE_FIELD_NUMBER = 5; + + /** + * + * + *
                                +   * Delete rows from a table. Succeeds whether or not the named
                                +   * rows were present.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Delete delete = 5; + * + * @return Whether the delete field is set. + */ + @java.lang.Override + public boolean hasDelete() { + return operationCase_ == 5; + } + + /** + * + * + *
                                +   * Delete rows from a table. Succeeds whether or not the named
                                +   * rows were present.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Delete delete = 5; + * + * @return The delete. + */ + @java.lang.Override + public com.google.spanner.v1.Mutation.Delete getDelete() { + if (operationCase_ == 5) { + return (com.google.spanner.v1.Mutation.Delete) operation_; + } + return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + } + + /** + * + * + *
                                +   * Delete rows from a table. Succeeds whether or not the named
                                +   * rows were present.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Delete delete = 5; + */ + @java.lang.Override + public com.google.spanner.v1.Mutation.DeleteOrBuilder getDeleteOrBuilder() { + if (operationCase_ == 5) { + return (com.google.spanner.v1.Mutation.Delete) operation_; + } + return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + } + + public static final int SEND_FIELD_NUMBER = 6; + + /** + * + * + *
                                +   * Send a message to a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Send send = 6; + * + * @return Whether the send field is set. + */ + @java.lang.Override + public boolean hasSend() { + return operationCase_ == 6; + } + + /** + * + * + *
                                +   * Send a message to a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Send send = 6; + * + * @return The send. + */ + @java.lang.Override + public com.google.spanner.v1.Mutation.Send getSend() { + if (operationCase_ == 6) { + return (com.google.spanner.v1.Mutation.Send) operation_; + } + return com.google.spanner.v1.Mutation.Send.getDefaultInstance(); } + /** * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -   * deleted, and the column values provided are inserted
                                -   * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -   * explicitly written become `NULL`.
                                -   *
                                -   * In an interleaved table, if you create the child table with the
                                -   * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -   * also deletes the child rows. Otherwise, you must delete the
                                -   * child rows before you replace the parent row.
                                +   * Send a message to a queue.
                                    * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ @java.lang.Override - public com.google.spanner.v1.Mutation.WriteOrBuilder getReplaceOrBuilder() { - if (operationCase_ == 4) { - return (com.google.spanner.v1.Mutation.Write) operation_; + public com.google.spanner.v1.Mutation.SendOrBuilder getSendOrBuilder() { + if (operationCase_ == 6) { + return (com.google.spanner.v1.Mutation.Send) operation_; } - return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Send.getDefaultInstance(); } - public static final int DELETE_FIELD_NUMBER = 5; + public static final int ACK_FIELD_NUMBER = 7; + /** * * *
                                -   * Delete rows from a table. Succeeds whether or not the named
                                -   * rows were present.
                                +   * Ack a message from a queue.
                                    * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; * - * @return Whether the delete field is set. + * @return Whether the ack field is set. */ @java.lang.Override - public boolean hasDelete() { - return operationCase_ == 5; + public boolean hasAck() { + return operationCase_ == 7; } + /** * * *
                                -   * Delete rows from a table. Succeeds whether or not the named
                                -   * rows were present.
                                +   * Ack a message from a queue.
                                    * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; * - * @return The delete. + * @return The ack. */ @java.lang.Override - public com.google.spanner.v1.Mutation.Delete getDelete() { - if (operationCase_ == 5) { - return (com.google.spanner.v1.Mutation.Delete) operation_; + public com.google.spanner.v1.Mutation.Ack getAck() { + if (operationCase_ == 7) { + return (com.google.spanner.v1.Mutation.Ack) operation_; } - return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Ack.getDefaultInstance(); } + /** * * *
                                -   * Delete rows from a table. Succeeds whether or not the named
                                -   * rows were present.
                                +   * Ack a message from a queue.
                                    * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ @java.lang.Override - public com.google.spanner.v1.Mutation.DeleteOrBuilder getDeleteOrBuilder() { - if (operationCase_ == 5) { - return (com.google.spanner.v1.Mutation.Delete) operation_; + public com.google.spanner.v1.Mutation.AckOrBuilder getAckOrBuilder() { + if (operationCase_ == 7) { + return (com.google.spanner.v1.Mutation.Ack) operation_; } - return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Ack.getDefaultInstance(); } private byte memoizedIsInitialized = -1; @@ -3256,6 +6118,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (operationCase_ == 5) { output.writeMessage(5, (com.google.spanner.v1.Mutation.Delete) operation_); } + if (operationCase_ == 6) { + output.writeMessage(6, (com.google.spanner.v1.Mutation.Send) operation_); + } + if (operationCase_ == 7) { + output.writeMessage(7, (com.google.spanner.v1.Mutation.Ack) operation_); + } getUnknownFields().writeTo(output); } @@ -3290,6 +6158,16 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeMessageSize( 5, (com.google.spanner.v1.Mutation.Delete) operation_); } + if (operationCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.spanner.v1.Mutation.Send) operation_); + } + if (operationCase_ == 7) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, (com.google.spanner.v1.Mutation.Ack) operation_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -3322,6 +6200,12 @@ public boolean equals(final java.lang.Object obj) { case 5: if (!getDelete().equals(other.getDelete())) return false; break; + case 6: + if (!getSend().equals(other.getSend())) return false; + break; + case 7: + if (!getAck().equals(other.getAck())) return false; + break; case 0: default: } @@ -3357,6 +6241,14 @@ public int hashCode() { hash = (37 * hash) + DELETE_FIELD_NUMBER; hash = (53 * hash) + getDelete().hashCode(); break; + case 6: + hash = (37 * hash) + SEND_FIELD_NUMBER; + hash = (53 * hash) + getSend().hashCode(); + break; + case 7: + hash = (37 * hash) + ACK_FIELD_NUMBER; + hash = (53 * hash) + getAck().hashCode(); + break; case 0: default: } @@ -3401,38 +6293,38 @@ public static com.google.spanner.v1.Mutation parseFrom( public static com.google.spanner.v1.Mutation parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Mutation parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Mutation parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Mutation parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -3455,10 +6347,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -3470,7 +6363,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.Mutation} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.Mutation) com.google.spanner.v1.MutationOrBuilder { @@ -3480,7 +6373,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.MutationProto .internal_static_google_spanner_v1_Mutation_fieldAccessorTable @@ -3488,360 +6381,854 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { com.google.spanner.v1.Mutation.class, com.google.spanner.v1.Mutation.Builder.class); } - // Construct using com.google.spanner.v1.Mutation.newBuilder() - private Builder() {} + // Construct using com.google.spanner.v1.Mutation.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (insertBuilder_ != null) { + insertBuilder_.clear(); + } + if (updateBuilder_ != null) { + updateBuilder_.clear(); + } + if (insertOrUpdateBuilder_ != null) { + insertOrUpdateBuilder_.clear(); + } + if (replaceBuilder_ != null) { + replaceBuilder_.clear(); + } + if (deleteBuilder_ != null) { + deleteBuilder_.clear(); + } + if (sendBuilder_ != null) { + sendBuilder_.clear(); + } + if (ackBuilder_ != null) { + ackBuilder_.clear(); + } + operationCase_ = 0; + operation_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.MutationProto + .internal_static_google_spanner_v1_Mutation_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation getDefaultInstanceForType() { + return com.google.spanner.v1.Mutation.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.Mutation build() { + com.google.spanner.v1.Mutation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.Mutation buildPartial() { + com.google.spanner.v1.Mutation result = new com.google.spanner.v1.Mutation(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.Mutation result) { + int from_bitField0_ = bitField0_; + } + + private void buildPartialOneofs(com.google.spanner.v1.Mutation result) { + result.operationCase_ = operationCase_; + result.operation_ = this.operation_; + if (operationCase_ == 1 && insertBuilder_ != null) { + result.operation_ = insertBuilder_.build(); + } + if (operationCase_ == 2 && updateBuilder_ != null) { + result.operation_ = updateBuilder_.build(); + } + if (operationCase_ == 3 && insertOrUpdateBuilder_ != null) { + result.operation_ = insertOrUpdateBuilder_.build(); + } + if (operationCase_ == 4 && replaceBuilder_ != null) { + result.operation_ = replaceBuilder_.build(); + } + if (operationCase_ == 5 && deleteBuilder_ != null) { + result.operation_ = deleteBuilder_.build(); + } + if (operationCase_ == 6 && sendBuilder_ != null) { + result.operation_ = sendBuilder_.build(); + } + if (operationCase_ == 7 && ackBuilder_ != null) { + result.operation_ = ackBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.Mutation) { + return mergeFrom((com.google.spanner.v1.Mutation) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.Mutation other) { + if (other == com.google.spanner.v1.Mutation.getDefaultInstance()) return this; + switch (other.getOperationCase()) { + case INSERT: + { + mergeInsert(other.getInsert()); + break; + } + case UPDATE: + { + mergeUpdate(other.getUpdate()); + break; + } + case INSERT_OR_UPDATE: + { + mergeInsertOrUpdate(other.getInsertOrUpdate()); + break; + } + case REPLACE: + { + mergeReplace(other.getReplace()); + break; + } + case DELETE: + { + mergeDelete(other.getDelete()); + break; + } + case SEND: + { + mergeSend(other.getSend()); + break; + } + case ACK: + { + mergeAck(other.getAck()); + break; + } + case OPERATION_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: + { + input.readMessage(internalGetInsertFieldBuilder().getBuilder(), extensionRegistry); + operationCase_ = 1; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetUpdateFieldBuilder().getBuilder(), extensionRegistry); + operationCase_ = 2; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetInsertOrUpdateFieldBuilder().getBuilder(), extensionRegistry); + operationCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage(internalGetReplaceFieldBuilder().getBuilder(), extensionRegistry); + operationCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage(internalGetDeleteFieldBuilder().getBuilder(), extensionRegistry); + operationCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage(internalGetSendFieldBuilder().getBuilder(), extensionRegistry); + operationCase_ = 6; + break; + } // case 50 + case 58: + { + input.readMessage(internalGetAckFieldBuilder().getBuilder(), extensionRegistry); + operationCase_ = 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 operationCase_ = 0; + private java.lang.Object operation_; - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); + public OperationCase getOperationCase() { + return OperationCase.forNumber(operationCase_); } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (insertBuilder_ != null) { - insertBuilder_.clear(); - } - if (updateBuilder_ != null) { - updateBuilder_.clear(); - } - if (insertOrUpdateBuilder_ != null) { - insertOrUpdateBuilder_.clear(); - } - if (replaceBuilder_ != null) { - replaceBuilder_.clear(); - } - if (deleteBuilder_ != null) { - deleteBuilder_.clear(); - } + public Builder clearOperation() { operationCase_ = 0; operation_ = null; + onChanged(); return this; } - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return com.google.spanner.v1.MutationProto - .internal_static_google_spanner_v1_Mutation_descriptor; - } + private int bitField0_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Write, + com.google.spanner.v1.Mutation.Write.Builder, + com.google.spanner.v1.Mutation.WriteOrBuilder> + insertBuilder_; + + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + * + * @return Whether the insert field is set. + */ @java.lang.Override - public com.google.spanner.v1.Mutation getDefaultInstanceForType() { - return com.google.spanner.v1.Mutation.getDefaultInstance(); + public boolean hasInsert() { + return operationCase_ == 1; } + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + * + * @return The insert. + */ @java.lang.Override - public com.google.spanner.v1.Mutation build() { - com.google.spanner.v1.Mutation result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + public com.google.spanner.v1.Mutation.Write getInsert() { + if (insertBuilder_ == null) { + if (operationCase_ == 1) { + return (com.google.spanner.v1.Mutation.Write) operation_; + } + return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + } else { + if (operationCase_ == 1) { + return insertBuilder_.getMessage(); + } + return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } - return result; } - @java.lang.Override - public com.google.spanner.v1.Mutation buildPartial() { - com.google.spanner.v1.Mutation result = new com.google.spanner.v1.Mutation(this); - if (bitField0_ != 0) { - buildPartial0(result); + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + */ + public Builder setInsert(com.google.spanner.v1.Mutation.Write value) { + if (insertBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + operation_ = value; + onChanged(); + } else { + insertBuilder_.setMessage(value); } - buildPartialOneofs(result); - onBuilt(); - return result; + operationCase_ = 1; + return this; } - private void buildPartial0(com.google.spanner.v1.Mutation result) { - int from_bitField0_ = bitField0_; + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + */ + public Builder setInsert(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { + if (insertBuilder_ == null) { + operation_ = builderForValue.build(); + onChanged(); + } else { + insertBuilder_.setMessage(builderForValue.build()); + } + operationCase_ = 1; + return this; } - private void buildPartialOneofs(com.google.spanner.v1.Mutation result) { - result.operationCase_ = operationCase_; - result.operation_ = this.operation_; - if (operationCase_ == 1 && insertBuilder_ != null) { - result.operation_ = insertBuilder_.build(); - } - if (operationCase_ == 2 && updateBuilder_ != null) { - result.operation_ = updateBuilder_.build(); + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + */ + public Builder mergeInsert(com.google.spanner.v1.Mutation.Write value) { + if (insertBuilder_ == null) { + if (operationCase_ == 1 + && operation_ != com.google.spanner.v1.Mutation.Write.getDefaultInstance()) { + operation_ = + com.google.spanner.v1.Mutation.Write.newBuilder( + (com.google.spanner.v1.Mutation.Write) operation_) + .mergeFrom(value) + .buildPartial(); + } else { + operation_ = value; + } + onChanged(); + } else { + if (operationCase_ == 1) { + insertBuilder_.mergeFrom(value); + } else { + insertBuilder_.setMessage(value); + } } - if (operationCase_ == 3 && insertOrUpdateBuilder_ != null) { - result.operation_ = insertOrUpdateBuilder_.build(); + operationCase_ = 1; + return this; + } + + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + */ + public Builder clearInsert() { + if (insertBuilder_ == null) { + if (operationCase_ == 1) { + operationCase_ = 0; + operation_ = null; + onChanged(); + } + } else { + if (operationCase_ == 1) { + operationCase_ = 0; + operation_ = null; + } + insertBuilder_.clear(); } - if (operationCase_ == 4 && replaceBuilder_ != null) { - result.operation_ = replaceBuilder_.build(); + return this; + } + + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + */ + public com.google.spanner.v1.Mutation.Write.Builder getInsertBuilder() { + return internalGetInsertFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + */ + @java.lang.Override + public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrBuilder() { + if ((operationCase_ == 1) && (insertBuilder_ != null)) { + return insertBuilder_.getMessageOrBuilder(); + } else { + if (operationCase_ == 1) { + return (com.google.spanner.v1.Mutation.Write) operation_; + } + return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } - if (operationCase_ == 5 && deleteBuilder_ != null) { - result.operation_ = deleteBuilder_.build(); + } + + /** + * + * + *
                                +     * Insert new rows in a table. If any of the rows already exist,
                                +     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write insert = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Write, + com.google.spanner.v1.Mutation.Write.Builder, + com.google.spanner.v1.Mutation.WriteOrBuilder> + internalGetInsertFieldBuilder() { + if (insertBuilder_ == null) { + if (!(operationCase_ == 1)) { + operation_ = com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + } + insertBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Write, + com.google.spanner.v1.Mutation.Write.Builder, + com.google.spanner.v1.Mutation.WriteOrBuilder>( + (com.google.spanner.v1.Mutation.Write) operation_, + getParentForChildren(), + isClean()); + operation_ = null; } + operationCase_ = 1; + onChanged(); + return insertBuilder_; } - @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); - } + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Write, + com.google.spanner.v1.Mutation.Write.Builder, + com.google.spanner.v1.Mutation.WriteOrBuilder> + updateBuilder_; + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + * + * @return Whether the update field is set. + */ @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); + public boolean hasUpdate() { + return operationCase_ == 2; } + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + * + * @return The update. + */ @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); + public com.google.spanner.v1.Mutation.Write getUpdate() { + if (updateBuilder_ == null) { + if (operationCase_ == 2) { + return (com.google.spanner.v1.Mutation.Write) operation_; + } + return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + } else { + if (operationCase_ == 2) { + return updateBuilder_.getMessage(); + } + return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + } } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.google.spanner.v1.Mutation) { - return mergeFrom((com.google.spanner.v1.Mutation) other); + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + */ + public Builder setUpdate(com.google.spanner.v1.Mutation.Write value) { + if (updateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + operation_ = value; + onChanged(); } else { - super.mergeFrom(other); - return this; + updateBuilder_.setMessage(value); } + operationCase_ = 2; + return this; } - public Builder mergeFrom(com.google.spanner.v1.Mutation other) { - if (other == com.google.spanner.v1.Mutation.getDefaultInstance()) return this; - switch (other.getOperationCase()) { - case INSERT: - { - mergeInsert(other.getInsert()); - break; - } - case UPDATE: - { - mergeUpdate(other.getUpdate()); - break; - } - case INSERT_OR_UPDATE: - { - mergeInsertOrUpdate(other.getInsertOrUpdate()); - break; - } - case REPLACE: - { - mergeReplace(other.getReplace()); - break; - } - case DELETE: - { - mergeDelete(other.getDelete()); - break; - } - case OPERATION_NOT_SET: - { - break; - } + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + */ + public Builder setUpdate(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { + if (updateBuilder_ == null) { + operation_ = builderForValue.build(); + onChanged(); + } else { + updateBuilder_.setMessage(builderForValue.build()); } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); + operationCase_ = 2; return this; } - @java.lang.Override - public final boolean isInitialized() { - return true; + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + */ + public Builder mergeUpdate(com.google.spanner.v1.Mutation.Write value) { + if (updateBuilder_ == null) { + if (operationCase_ == 2 + && operation_ != com.google.spanner.v1.Mutation.Write.getDefaultInstance()) { + operation_ = + com.google.spanner.v1.Mutation.Write.newBuilder( + (com.google.spanner.v1.Mutation.Write) operation_) + .mergeFrom(value) + .buildPartial(); + } else { + operation_ = value; + } + onChanged(); + } else { + if (operationCase_ == 2) { + updateBuilder_.mergeFrom(value); + } else { + updateBuilder_.setMessage(value); + } + } + operationCase_ = 2; + return this; } - @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(getInsertFieldBuilder().getBuilder(), extensionRegistry); - operationCase_ = 1; - break; - } // case 10 - case 18: - { - input.readMessage(getUpdateFieldBuilder().getBuilder(), extensionRegistry); - operationCase_ = 2; - break; - } // case 18 - case 26: - { - input.readMessage(getInsertOrUpdateFieldBuilder().getBuilder(), extensionRegistry); - operationCase_ = 3; - break; - } // case 26 - case 34: - { - input.readMessage(getReplaceFieldBuilder().getBuilder(), extensionRegistry); - operationCase_ = 4; - break; - } // case 34 - case 42: - { - input.readMessage(getDeleteFieldBuilder().getBuilder(), extensionRegistry); - operationCase_ = 5; - break; - } // case 42 - 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 + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + */ + public Builder clearUpdate() { + if (updateBuilder_ == null) { + if (operationCase_ == 2) { + operationCase_ = 0; + operation_ = null; + onChanged(); + } + } else { + if (operationCase_ == 2) { + operationCase_ = 0; + operation_ = null; + } + updateBuilder_.clear(); + } return this; } - private int operationCase_ = 0; - private java.lang.Object operation_; + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + */ + public com.google.spanner.v1.Mutation.Write.Builder getUpdateBuilder() { + return internalGetUpdateFieldBuilder().getBuilder(); + } - public OperationCase getOperationCase() { - return OperationCase.forNumber(operationCase_); + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + */ + @java.lang.Override + public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() { + if ((operationCase_ == 2) && (updateBuilder_ != null)) { + return updateBuilder_.getMessageOrBuilder(); + } else { + if (operationCase_ == 2) { + return (com.google.spanner.v1.Mutation.Write) operation_; + } + return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + } } - public Builder clearOperation() { - operationCase_ = 0; - operation_ = null; + /** + * + * + *
                                +     * Update existing rows in a table. If any of the rows does not
                                +     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * 
                                + * + * .google.spanner.v1.Mutation.Write update = 2; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Write, + com.google.spanner.v1.Mutation.Write.Builder, + com.google.spanner.v1.Mutation.WriteOrBuilder> + internalGetUpdateFieldBuilder() { + if (updateBuilder_ == null) { + if (!(operationCase_ == 2)) { + operation_ = com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + } + updateBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Write, + com.google.spanner.v1.Mutation.Write.Builder, + com.google.spanner.v1.Mutation.WriteOrBuilder>( + (com.google.spanner.v1.Mutation.Write) operation_, + getParentForChildren(), + isClean()); + operation_ = null; + } + operationCase_ = 2; onChanged(); - return this; + return updateBuilder_; } - private int bitField0_; - - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation.Write, com.google.spanner.v1.Mutation.Write.Builder, com.google.spanner.v1.Mutation.WriteOrBuilder> - insertBuilder_; + insertOrUpdateBuilder_; + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; * - * @return Whether the insert field is set. + * @return Whether the insertOrUpdate field is set. */ @java.lang.Override - public boolean hasInsert() { - return operationCase_ == 1; + public boolean hasInsertOrUpdate() { + return operationCase_ == 3; } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; * - * @return The insert. + * @return The insertOrUpdate. */ @java.lang.Override - public com.google.spanner.v1.Mutation.Write getInsert() { - if (insertBuilder_ == null) { - if (operationCase_ == 1) { + public com.google.spanner.v1.Mutation.Write getInsertOrUpdate() { + if (insertOrUpdateBuilder_ == null) { + if (operationCase_ == 3) { return (com.google.spanner.v1.Mutation.Write) operation_; } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } else { - if (operationCase_ == 1) { - return insertBuilder_.getMessage(); + if (operationCase_ == 3) { + return insertOrUpdateBuilder_.getMessage(); } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; */ - public Builder setInsert(com.google.spanner.v1.Mutation.Write value) { - if (insertBuilder_ == null) { + public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) { + if (insertOrUpdateBuilder_ == null) { if (value == null) { throw new NullPointerException(); } operation_ = value; onChanged(); } else { - insertBuilder_.setMessage(value); + insertOrUpdateBuilder_.setMessage(value); } - operationCase_ = 1; + operationCase_ = 3; return this; } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; */ - public Builder setInsert(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { - if (insertBuilder_ == null) { + public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { + if (insertOrUpdateBuilder_ == null) { operation_ = builderForValue.build(); onChanged(); } else { - insertBuilder_.setMessage(builderForValue.build()); + insertOrUpdateBuilder_.setMessage(builderForValue.build()); } - operationCase_ = 1; + operationCase_ = 3; return this; } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; */ - public Builder mergeInsert(com.google.spanner.v1.Mutation.Write value) { - if (insertBuilder_ == null) { - if (operationCase_ == 1 + public Builder mergeInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) { + if (insertOrUpdateBuilder_ == null) { + if (operationCase_ == 3 && operation_ != com.google.spanner.v1.Mutation.Write.getDefaultInstance()) { operation_ = com.google.spanner.v1.Mutation.Write.newBuilder( @@ -3853,96 +7240,128 @@ public Builder mergeInsert(com.google.spanner.v1.Mutation.Write value) { } onChanged(); } else { - if (operationCase_ == 1) { - insertBuilder_.mergeFrom(value); + if (operationCase_ == 3) { + insertOrUpdateBuilder_.mergeFrom(value); } else { - insertBuilder_.setMessage(value); + insertOrUpdateBuilder_.setMessage(value); } } - operationCase_ = 1; + operationCase_ = 3; return this; } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; */ - public Builder clearInsert() { - if (insertBuilder_ == null) { - if (operationCase_ == 1) { + public Builder clearInsertOrUpdate() { + if (insertOrUpdateBuilder_ == null) { + if (operationCase_ == 3) { operationCase_ = 0; operation_ = null; onChanged(); } } else { - if (operationCase_ == 1) { + if (operationCase_ == 3) { operationCase_ = 0; operation_ = null; } - insertBuilder_.clear(); + insertOrUpdateBuilder_.clear(); } return this; } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; */ - public com.google.spanner.v1.Mutation.Write.Builder getInsertBuilder() { - return getInsertFieldBuilder().getBuilder(); + public com.google.spanner.v1.Mutation.Write.Builder getInsertOrUpdateBuilder() { + return internalGetInsertOrUpdateFieldBuilder().getBuilder(); } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; */ @java.lang.Override - public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrBuilder() { - if ((operationCase_ == 1) && (insertBuilder_ != null)) { - return insertBuilder_.getMessageOrBuilder(); + public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder() { + if ((operationCase_ == 3) && (insertOrUpdateBuilder_ != null)) { + return insertOrUpdateBuilder_.getMessageOrBuilder(); } else { - if (operationCase_ == 1) { + if (operationCase_ == 3) { return (com.google.spanner.v1.Mutation.Write) operation_; } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } } + /** * * *
                                -     * Insert new rows in a table. If any of the rows already exist,
                                -     * the write or transaction fails with error `ALREADY_EXISTS`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, then its column values are overwritten with the ones
                                +     * provided. Any column values not explicitly written are preserved.
                                +     *
                                +     * When using
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +     * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +     * columns in the table must be given a value. This holds true even when the
                                +     * row already exists and will therefore actually be updated.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert = 1; + * .google.spanner.v1.Mutation.Write insert_or_update = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation.Write, com.google.spanner.v1.Mutation.Write.Builder, com.google.spanner.v1.Mutation.WriteOrBuilder> - getInsertFieldBuilder() { - if (insertBuilder_ == null) { - if (!(operationCase_ == 1)) { + internalGetInsertOrUpdateFieldBuilder() { + if (insertOrUpdateBuilder_ == null) { + if (!(operationCase_ == 3)) { operation_ = com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } - insertBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + insertOrUpdateBuilder_ = + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation.Write, com.google.spanner.v1.Mutation.Write.Builder, com.google.spanner.v1.Mutation.WriteOrBuilder>( @@ -3951,114 +7370,159 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrBuilder() { isClean()); operation_ = null; } - operationCase_ = 1; + operationCase_ = 3; onChanged(); - return insertBuilder_; + return insertOrUpdateBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation.Write, com.google.spanner.v1.Mutation.Write.Builder, com.google.spanner.v1.Mutation.WriteOrBuilder> - updateBuilder_; + replaceBuilder_; + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; * - * @return Whether the update field is set. + * @return Whether the replace field is set. */ @java.lang.Override - public boolean hasUpdate() { - return operationCase_ == 2; + public boolean hasReplace() { + return operationCase_ == 4; } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; * - * @return The update. + * @return The replace. */ @java.lang.Override - public com.google.spanner.v1.Mutation.Write getUpdate() { - if (updateBuilder_ == null) { - if (operationCase_ == 2) { + public com.google.spanner.v1.Mutation.Write getReplace() { + if (replaceBuilder_ == null) { + if (operationCase_ == 4) { return (com.google.spanner.v1.Mutation.Write) operation_; } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } else { - if (operationCase_ == 2) { - return updateBuilder_.getMessage(); + if (operationCase_ == 4) { + return replaceBuilder_.getMessage(); } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; */ - public Builder setUpdate(com.google.spanner.v1.Mutation.Write value) { - if (updateBuilder_ == null) { + public Builder setReplace(com.google.spanner.v1.Mutation.Write value) { + if (replaceBuilder_ == null) { if (value == null) { throw new NullPointerException(); } operation_ = value; onChanged(); } else { - updateBuilder_.setMessage(value); + replaceBuilder_.setMessage(value); } - operationCase_ = 2; + operationCase_ = 4; return this; } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; */ - public Builder setUpdate(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { - if (updateBuilder_ == null) { + public Builder setReplace(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { + if (replaceBuilder_ == null) { operation_ = builderForValue.build(); onChanged(); } else { - updateBuilder_.setMessage(builderForValue.build()); + replaceBuilder_.setMessage(builderForValue.build()); } - operationCase_ = 2; + operationCase_ = 4; return this; } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; */ - public Builder mergeUpdate(com.google.spanner.v1.Mutation.Write value) { - if (updateBuilder_ == null) { - if (operationCase_ == 2 + public Builder mergeReplace(com.google.spanner.v1.Mutation.Write value) { + if (replaceBuilder_ == null) { + if (operationCase_ == 4 && operation_ != com.google.spanner.v1.Mutation.Write.getDefaultInstance()) { operation_ = com.google.spanner.v1.Mutation.Write.newBuilder( @@ -4070,96 +7534,132 @@ public Builder mergeUpdate(com.google.spanner.v1.Mutation.Write value) { } onChanged(); } else { - if (operationCase_ == 2) { - updateBuilder_.mergeFrom(value); + if (operationCase_ == 4) { + replaceBuilder_.mergeFrom(value); } else { - updateBuilder_.setMessage(value); + replaceBuilder_.setMessage(value); } } - operationCase_ = 2; + operationCase_ = 4; return this; } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; */ - public Builder clearUpdate() { - if (updateBuilder_ == null) { - if (operationCase_ == 2) { + public Builder clearReplace() { + if (replaceBuilder_ == null) { + if (operationCase_ == 4) { operationCase_ = 0; operation_ = null; onChanged(); } } else { - if (operationCase_ == 2) { + if (operationCase_ == 4) { operationCase_ = 0; operation_ = null; } - updateBuilder_.clear(); + replaceBuilder_.clear(); } return this; } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; */ - public com.google.spanner.v1.Mutation.Write.Builder getUpdateBuilder() { - return getUpdateFieldBuilder().getBuilder(); + public com.google.spanner.v1.Mutation.Write.Builder getReplaceBuilder() { + return internalGetReplaceFieldBuilder().getBuilder(); } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; */ @java.lang.Override - public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() { - if ((operationCase_ == 2) && (updateBuilder_ != null)) { - return updateBuilder_.getMessageOrBuilder(); + public com.google.spanner.v1.Mutation.WriteOrBuilder getReplaceOrBuilder() { + if ((operationCase_ == 4) && (replaceBuilder_ != null)) { + return replaceBuilder_.getMessageOrBuilder(); } else { - if (operationCase_ == 2) { + if (operationCase_ == 4) { return (com.google.spanner.v1.Mutation.Write) operation_; } return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } } + /** * * *
                                -     * Update existing rows in a table. If any of the rows does not
                                -     * already exist, the transaction fails with error `NOT_FOUND`.
                                +     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +     * already exists, it is deleted, and the column values provided are
                                +     * inserted instead. Unlike
                                +     * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +     * means any values not explicitly written become `NULL`.
                                +     *
                                +     * In an interleaved table, if you create the child table with the
                                +     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                +     * also deletes the child rows. Otherwise, you must delete the
                                +     * child rows before you replace the parent row.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write update = 2; + * .google.spanner.v1.Mutation.Write replace = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation.Write, com.google.spanner.v1.Mutation.Write.Builder, com.google.spanner.v1.Mutation.WriteOrBuilder> - getUpdateFieldBuilder() { - if (updateBuilder_ == null) { - if (!(operationCase_ == 2)) { + internalGetReplaceFieldBuilder() { + if (replaceBuilder_ == null) { + if (!(operationCase_ == 4)) { operation_ = com.google.spanner.v1.Mutation.Write.getDefaultInstance(); } - updateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + replaceBuilder_ = + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Mutation.Write, com.google.spanner.v1.Mutation.Write.Builder, com.google.spanner.v1.Mutation.WriteOrBuilder>( @@ -4168,143 +7668,123 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() { isClean()); operation_ = null; } - operationCase_ = 2; + operationCase_ = 4; onChanged(); - return updateBuilder_; + return replaceBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Write, - com.google.spanner.v1.Mutation.Write.Builder, - com.google.spanner.v1.Mutation.WriteOrBuilder> - insertOrUpdateBuilder_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Delete, + com.google.spanner.v1.Mutation.Delete.Builder, + com.google.spanner.v1.Mutation.DeleteOrBuilder> + deleteBuilder_; + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; * - * @return Whether the insertOrUpdate field is set. + * @return Whether the delete field is set. */ @java.lang.Override - public boolean hasInsertOrUpdate() { - return operationCase_ == 3; + public boolean hasDelete() { + return operationCase_ == 5; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; * - * @return The insertOrUpdate. + * @return The delete. */ @java.lang.Override - public com.google.spanner.v1.Mutation.Write getInsertOrUpdate() { - if (insertOrUpdateBuilder_ == null) { - if (operationCase_ == 3) { - return (com.google.spanner.v1.Mutation.Write) operation_; + public com.google.spanner.v1.Mutation.Delete getDelete() { + if (deleteBuilder_ == null) { + if (operationCase_ == 5) { + return (com.google.spanner.v1.Mutation.Delete) operation_; } - return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); } else { - if (operationCase_ == 3) { - return insertOrUpdateBuilder_.getMessage(); + if (operationCase_ == 5) { + return deleteBuilder_.getMessage(); } - return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); } } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; */ - public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) { - if (insertOrUpdateBuilder_ == null) { + public Builder setDelete(com.google.spanner.v1.Mutation.Delete value) { + if (deleteBuilder_ == null) { if (value == null) { throw new NullPointerException(); } operation_ = value; onChanged(); } else { - insertOrUpdateBuilder_.setMessage(value); + deleteBuilder_.setMessage(value); } - operationCase_ = 3; + operationCase_ = 5; return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; */ - public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { - if (insertOrUpdateBuilder_ == null) { + public Builder setDelete(com.google.spanner.v1.Mutation.Delete.Builder builderForValue) { + if (deleteBuilder_ == null) { operation_ = builderForValue.build(); onChanged(); } else { - insertOrUpdateBuilder_.setMessage(builderForValue.build()); + deleteBuilder_.setMessage(builderForValue.build()); } - operationCase_ = 3; + operationCase_ = 5; return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; */ - public Builder mergeInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) { - if (insertOrUpdateBuilder_ == null) { - if (operationCase_ == 3 - && operation_ != com.google.spanner.v1.Mutation.Write.getDefaultInstance()) { + public Builder mergeDelete(com.google.spanner.v1.Mutation.Delete value) { + if (deleteBuilder_ == null) { + if (operationCase_ == 5 + && operation_ != com.google.spanner.v1.Mutation.Delete.getDefaultInstance()) { operation_ = - com.google.spanner.v1.Mutation.Write.newBuilder( - (com.google.spanner.v1.Mutation.Write) operation_) + com.google.spanner.v1.Mutation.Delete.newBuilder( + (com.google.spanner.v1.Mutation.Delete) operation_) .mergeFrom(value) .buildPartial(); } else { @@ -4312,271 +7792,220 @@ public Builder mergeInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) { } onChanged(); } else { - if (operationCase_ == 3) { - insertOrUpdateBuilder_.mergeFrom(value); + if (operationCase_ == 5) { + deleteBuilder_.mergeFrom(value); } else { - insertOrUpdateBuilder_.setMessage(value); + deleteBuilder_.setMessage(value); } } - operationCase_ = 3; + operationCase_ = 5; return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; */ - public Builder clearInsertOrUpdate() { - if (insertOrUpdateBuilder_ == null) { - if (operationCase_ == 3) { + public Builder clearDelete() { + if (deleteBuilder_ == null) { + if (operationCase_ == 5) { operationCase_ = 0; operation_ = null; onChanged(); } } else { - if (operationCase_ == 3) { + if (operationCase_ == 5) { operationCase_ = 0; operation_ = null; } - insertOrUpdateBuilder_.clear(); + deleteBuilder_.clear(); } return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; */ - public com.google.spanner.v1.Mutation.Write.Builder getInsertOrUpdateBuilder() { - return getInsertOrUpdateFieldBuilder().getBuilder(); + public com.google.spanner.v1.Mutation.Delete.Builder getDeleteBuilder() { + return internalGetDeleteFieldBuilder().getBuilder(); } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; */ @java.lang.Override - public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder() { - if ((operationCase_ == 3) && (insertOrUpdateBuilder_ != null)) { - return insertOrUpdateBuilder_.getMessageOrBuilder(); + public com.google.spanner.v1.Mutation.DeleteOrBuilder getDeleteOrBuilder() { + if ((operationCase_ == 5) && (deleteBuilder_ != null)) { + return deleteBuilder_.getMessageOrBuilder(); } else { - if (operationCase_ == 3) { - return (com.google.spanner.v1.Mutation.Write) operation_; + if (operationCase_ == 5) { + return (com.google.spanner.v1.Mutation.Delete) operation_; } - return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); } } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -     * its column values are overwritten with the ones provided. Any
                                -     * column values not explicitly written are preserved.
                                -     *
                                -     * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -     * NULL` columns in the table must be given a value. This holds true
                                -     * even when the row already exists and will therefore actually be updated.
                                +     * Delete rows from a table. Succeeds whether or not the named
                                +     * rows were present.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write insert_or_update = 3; + * .google.spanner.v1.Mutation.Delete delete = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Write, - com.google.spanner.v1.Mutation.Write.Builder, - com.google.spanner.v1.Mutation.WriteOrBuilder> - getInsertOrUpdateFieldBuilder() { - if (insertOrUpdateBuilder_ == null) { - if (!(operationCase_ == 3)) { - operation_ = com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Delete, + com.google.spanner.v1.Mutation.Delete.Builder, + com.google.spanner.v1.Mutation.DeleteOrBuilder> + internalGetDeleteFieldBuilder() { + if (deleteBuilder_ == null) { + if (!(operationCase_ == 5)) { + operation_ = com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); } - insertOrUpdateBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Write, - com.google.spanner.v1.Mutation.Write.Builder, - com.google.spanner.v1.Mutation.WriteOrBuilder>( - (com.google.spanner.v1.Mutation.Write) operation_, + deleteBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Delete, + com.google.spanner.v1.Mutation.Delete.Builder, + com.google.spanner.v1.Mutation.DeleteOrBuilder>( + (com.google.spanner.v1.Mutation.Delete) operation_, getParentForChildren(), isClean()); operation_ = null; } - operationCase_ = 3; + operationCase_ = 5; onChanged(); - return insertOrUpdateBuilder_; + return deleteBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Write, - com.google.spanner.v1.Mutation.Write.Builder, - com.google.spanner.v1.Mutation.WriteOrBuilder> - replaceBuilder_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Send, + com.google.spanner.v1.Mutation.Send.Builder, + com.google.spanner.v1.Mutation.SendOrBuilder> + sendBuilder_; + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; * - * @return Whether the replace field is set. + * @return Whether the send field is set. */ @java.lang.Override - public boolean hasReplace() { - return operationCase_ == 4; + public boolean hasSend() { + return operationCase_ == 6; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; * - * @return The replace. + * @return The send. */ @java.lang.Override - public com.google.spanner.v1.Mutation.Write getReplace() { - if (replaceBuilder_ == null) { - if (operationCase_ == 4) { - return (com.google.spanner.v1.Mutation.Write) operation_; + public com.google.spanner.v1.Mutation.Send getSend() { + if (sendBuilder_ == null) { + if (operationCase_ == 6) { + return (com.google.spanner.v1.Mutation.Send) operation_; } - return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Send.getDefaultInstance(); } else { - if (operationCase_ == 4) { - return replaceBuilder_.getMessage(); + if (operationCase_ == 6) { + return sendBuilder_.getMessage(); } - return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Send.getDefaultInstance(); } } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ - public Builder setReplace(com.google.spanner.v1.Mutation.Write value) { - if (replaceBuilder_ == null) { + public Builder setSend(com.google.spanner.v1.Mutation.Send value) { + if (sendBuilder_ == null) { if (value == null) { throw new NullPointerException(); } operation_ = value; onChanged(); } else { - replaceBuilder_.setMessage(value); + sendBuilder_.setMessage(value); } - operationCase_ = 4; + operationCase_ = 6; return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ - public Builder setReplace(com.google.spanner.v1.Mutation.Write.Builder builderForValue) { - if (replaceBuilder_ == null) { + public Builder setSend(com.google.spanner.v1.Mutation.Send.Builder builderForValue) { + if (sendBuilder_ == null) { operation_ = builderForValue.build(); onChanged(); } else { - replaceBuilder_.setMessage(builderForValue.build()); + sendBuilder_.setMessage(builderForValue.build()); } - operationCase_ = 4; + operationCase_ = 6; return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ - public Builder mergeReplace(com.google.spanner.v1.Mutation.Write value) { - if (replaceBuilder_ == null) { - if (operationCase_ == 4 - && operation_ != com.google.spanner.v1.Mutation.Write.getDefaultInstance()) { + public Builder mergeSend(com.google.spanner.v1.Mutation.Send value) { + if (sendBuilder_ == null) { + if (operationCase_ == 6 + && operation_ != com.google.spanner.v1.Mutation.Send.getDefaultInstance()) { operation_ = - com.google.spanner.v1.Mutation.Write.newBuilder( - (com.google.spanner.v1.Mutation.Write) operation_) + com.google.spanner.v1.Mutation.Send.newBuilder( + (com.google.spanner.v1.Mutation.Send) operation_) .mergeFrom(value) .buildPartial(); } else { @@ -4584,244 +8013,216 @@ public Builder mergeReplace(com.google.spanner.v1.Mutation.Write value) { } onChanged(); } else { - if (operationCase_ == 4) { - replaceBuilder_.mergeFrom(value); + if (operationCase_ == 6) { + sendBuilder_.mergeFrom(value); } else { - replaceBuilder_.setMessage(value); + sendBuilder_.setMessage(value); } } - operationCase_ = 4; + operationCase_ = 6; return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ - public Builder clearReplace() { - if (replaceBuilder_ == null) { - if (operationCase_ == 4) { + public Builder clearSend() { + if (sendBuilder_ == null) { + if (operationCase_ == 6) { operationCase_ = 0; operation_ = null; onChanged(); } } else { - if (operationCase_ == 4) { + if (operationCase_ == 6) { operationCase_ = 0; operation_ = null; } - replaceBuilder_.clear(); + sendBuilder_.clear(); } return this; } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ - public com.google.spanner.v1.Mutation.Write.Builder getReplaceBuilder() { - return getReplaceFieldBuilder().getBuilder(); + public com.google.spanner.v1.Mutation.Send.Builder getSendBuilder() { + return internalGetSendFieldBuilder().getBuilder(); } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ @java.lang.Override - public com.google.spanner.v1.Mutation.WriteOrBuilder getReplaceOrBuilder() { - if ((operationCase_ == 4) && (replaceBuilder_ != null)) { - return replaceBuilder_.getMessageOrBuilder(); + public com.google.spanner.v1.Mutation.SendOrBuilder getSendOrBuilder() { + if ((operationCase_ == 6) && (sendBuilder_ != null)) { + return sendBuilder_.getMessageOrBuilder(); } else { - if (operationCase_ == 4) { - return (com.google.spanner.v1.Mutation.Write) operation_; + if (operationCase_ == 6) { + return (com.google.spanner.v1.Mutation.Send) operation_; } - return com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Send.getDefaultInstance(); } } + /** * * *
                                -     * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -     * deleted, and the column values provided are inserted
                                -     * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -     * explicitly written become `NULL`.
                                -     *
                                -     * In an interleaved table, if you create the child table with the
                                -     * `ON DELETE CASCADE` annotation, then replacing a parent row
                                -     * also deletes the child rows. Otherwise, you must delete the
                                -     * child rows before you replace the parent row.
                                +     * Send a message to a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Write replace = 4; + * .google.spanner.v1.Mutation.Send send = 6; */ - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Write, - com.google.spanner.v1.Mutation.Write.Builder, - com.google.spanner.v1.Mutation.WriteOrBuilder> - getReplaceFieldBuilder() { - if (replaceBuilder_ == null) { - if (!(operationCase_ == 4)) { - operation_ = com.google.spanner.v1.Mutation.Write.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Send, + com.google.spanner.v1.Mutation.Send.Builder, + com.google.spanner.v1.Mutation.SendOrBuilder> + internalGetSendFieldBuilder() { + if (sendBuilder_ == null) { + if (!(operationCase_ == 6)) { + operation_ = com.google.spanner.v1.Mutation.Send.getDefaultInstance(); } - replaceBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Write, - com.google.spanner.v1.Mutation.Write.Builder, - com.google.spanner.v1.Mutation.WriteOrBuilder>( - (com.google.spanner.v1.Mutation.Write) operation_, + sendBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Send, + com.google.spanner.v1.Mutation.Send.Builder, + com.google.spanner.v1.Mutation.SendOrBuilder>( + (com.google.spanner.v1.Mutation.Send) operation_, getParentForChildren(), isClean()); operation_ = null; } - operationCase_ = 4; + operationCase_ = 6; onChanged(); - return replaceBuilder_; + return sendBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Delete, - com.google.spanner.v1.Mutation.Delete.Builder, - com.google.spanner.v1.Mutation.DeleteOrBuilder> - deleteBuilder_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Ack, + com.google.spanner.v1.Mutation.Ack.Builder, + com.google.spanner.v1.Mutation.AckOrBuilder> + ackBuilder_; + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; * - * @return Whether the delete field is set. + * @return Whether the ack field is set. */ @java.lang.Override - public boolean hasDelete() { - return operationCase_ == 5; + public boolean hasAck() { + return operationCase_ == 7; } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; * - * @return The delete. + * @return The ack. */ @java.lang.Override - public com.google.spanner.v1.Mutation.Delete getDelete() { - if (deleteBuilder_ == null) { - if (operationCase_ == 5) { - return (com.google.spanner.v1.Mutation.Delete) operation_; + public com.google.spanner.v1.Mutation.Ack getAck() { + if (ackBuilder_ == null) { + if (operationCase_ == 7) { + return (com.google.spanner.v1.Mutation.Ack) operation_; } - return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Ack.getDefaultInstance(); } else { - if (operationCase_ == 5) { - return deleteBuilder_.getMessage(); + if (operationCase_ == 7) { + return ackBuilder_.getMessage(); } - return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Ack.getDefaultInstance(); } } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ - public Builder setDelete(com.google.spanner.v1.Mutation.Delete value) { - if (deleteBuilder_ == null) { + public Builder setAck(com.google.spanner.v1.Mutation.Ack value) { + if (ackBuilder_ == null) { if (value == null) { throw new NullPointerException(); } operation_ = value; onChanged(); } else { - deleteBuilder_.setMessage(value); + ackBuilder_.setMessage(value); } - operationCase_ = 5; + operationCase_ = 7; return this; } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ - public Builder setDelete(com.google.spanner.v1.Mutation.Delete.Builder builderForValue) { - if (deleteBuilder_ == null) { + public Builder setAck(com.google.spanner.v1.Mutation.Ack.Builder builderForValue) { + if (ackBuilder_ == null) { operation_ = builderForValue.build(); onChanged(); } else { - deleteBuilder_.setMessage(builderForValue.build()); + ackBuilder_.setMessage(builderForValue.build()); } - operationCase_ = 5; + operationCase_ = 7; return this; } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ - public Builder mergeDelete(com.google.spanner.v1.Mutation.Delete value) { - if (deleteBuilder_ == null) { - if (operationCase_ == 5 - && operation_ != com.google.spanner.v1.Mutation.Delete.getDefaultInstance()) { + public Builder mergeAck(com.google.spanner.v1.Mutation.Ack value) { + if (ackBuilder_ == null) { + if (operationCase_ == 7 + && operation_ != com.google.spanner.v1.Mutation.Ack.getDefaultInstance()) { operation_ = - com.google.spanner.v1.Mutation.Delete.newBuilder( - (com.google.spanner.v1.Mutation.Delete) operation_) + com.google.spanner.v1.Mutation.Ack.newBuilder( + (com.google.spanner.v1.Mutation.Ack) operation_) .mergeFrom(value) .buildPartial(); } else { @@ -4829,118 +8230,105 @@ public Builder mergeDelete(com.google.spanner.v1.Mutation.Delete value) { } onChanged(); } else { - if (operationCase_ == 5) { - deleteBuilder_.mergeFrom(value); + if (operationCase_ == 7) { + ackBuilder_.mergeFrom(value); } else { - deleteBuilder_.setMessage(value); + ackBuilder_.setMessage(value); } } - operationCase_ = 5; + operationCase_ = 7; return this; } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ - public Builder clearDelete() { - if (deleteBuilder_ == null) { - if (operationCase_ == 5) { + public Builder clearAck() { + if (ackBuilder_ == null) { + if (operationCase_ == 7) { operationCase_ = 0; operation_ = null; onChanged(); } } else { - if (operationCase_ == 5) { + if (operationCase_ == 7) { operationCase_ = 0; operation_ = null; } - deleteBuilder_.clear(); + ackBuilder_.clear(); } return this; } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ - public com.google.spanner.v1.Mutation.Delete.Builder getDeleteBuilder() { - return getDeleteFieldBuilder().getBuilder(); + public com.google.spanner.v1.Mutation.Ack.Builder getAckBuilder() { + return internalGetAckFieldBuilder().getBuilder(); } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ @java.lang.Override - public com.google.spanner.v1.Mutation.DeleteOrBuilder getDeleteOrBuilder() { - if ((operationCase_ == 5) && (deleteBuilder_ != null)) { - return deleteBuilder_.getMessageOrBuilder(); + public com.google.spanner.v1.Mutation.AckOrBuilder getAckOrBuilder() { + if ((operationCase_ == 7) && (ackBuilder_ != null)) { + return ackBuilder_.getMessageOrBuilder(); } else { - if (operationCase_ == 5) { - return (com.google.spanner.v1.Mutation.Delete) operation_; + if (operationCase_ == 7) { + return (com.google.spanner.v1.Mutation.Ack) operation_; } - return com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + return com.google.spanner.v1.Mutation.Ack.getDefaultInstance(); } } + /** * * *
                                -     * Delete rows from a table. Succeeds whether or not the named
                                -     * rows were present.
                                +     * Ack a message from a queue.
                                      * 
                                * - * .google.spanner.v1.Mutation.Delete delete = 5; + * .google.spanner.v1.Mutation.Ack ack = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Delete, - com.google.spanner.v1.Mutation.Delete.Builder, - com.google.spanner.v1.Mutation.DeleteOrBuilder> - getDeleteFieldBuilder() { - if (deleteBuilder_ == null) { - if (!(operationCase_ == 5)) { - operation_ = com.google.spanner.v1.Mutation.Delete.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Ack, + com.google.spanner.v1.Mutation.Ack.Builder, + com.google.spanner.v1.Mutation.AckOrBuilder> + internalGetAckFieldBuilder() { + if (ackBuilder_ == null) { + if (!(operationCase_ == 7)) { + operation_ = com.google.spanner.v1.Mutation.Ack.getDefaultInstance(); } - deleteBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.Mutation.Delete, - com.google.spanner.v1.Mutation.Delete.Builder, - com.google.spanner.v1.Mutation.DeleteOrBuilder>( - (com.google.spanner.v1.Mutation.Delete) operation_, - getParentForChildren(), - isClean()); + ackBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.Mutation.Ack, + com.google.spanner.v1.Mutation.Ack.Builder, + com.google.spanner.v1.Mutation.AckOrBuilder>( + (com.google.spanner.v1.Mutation.Ack) operation_, getParentForChildren(), isClean()); operation_ = null; } - operationCase_ = 5; + operationCase_ = 7; onChanged(); - return deleteBuilder_; - } - - @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); + return ackBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.Mutation) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java index e2e89c432f9..b0bd8d72816 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/mutation.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface MutationOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.Mutation) @@ -37,6 +39,7 @@ public interface MutationOrBuilder * @return Whether the insert field is set. */ boolean hasInsert(); + /** * * @@ -50,6 +53,7 @@ public interface MutationOrBuilder * @return The insert. */ com.google.spanner.v1.Mutation.Write getInsert(); + /** * * @@ -75,6 +79,7 @@ public interface MutationOrBuilder * @return Whether the update field is set. */ boolean hasUpdate(); + /** * * @@ -88,6 +93,7 @@ public interface MutationOrBuilder * @return The update. */ com.google.spanner.v1.Mutation.Write getUpdate(); + /** * * @@ -104,13 +110,15 @@ public interface MutationOrBuilder * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -   * its column values are overwritten with the ones provided. Any
                                -   * column values not explicitly written are preserved.
                                -   *
                                -   * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -   * NULL` columns in the table must be given a value. This holds true
                                -   * even when the row already exists and will therefore actually be updated.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, then its column values are overwritten with the ones
                                +   * provided. Any column values not explicitly written are preserved.
                                +   *
                                +   * When using
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +   * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +   * columns in the table must be given a value. This holds true even when the
                                +   * row already exists and will therefore actually be updated.
                                    * 
                                * * .google.spanner.v1.Mutation.Write insert_or_update = 3; @@ -118,17 +126,20 @@ public interface MutationOrBuilder * @return Whether the insertOrUpdate field is set. */ boolean hasInsertOrUpdate(); + /** * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -   * its column values are overwritten with the ones provided. Any
                                -   * column values not explicitly written are preserved.
                                -   *
                                -   * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -   * NULL` columns in the table must be given a value. This holds true
                                -   * even when the row already exists and will therefore actually be updated.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, then its column values are overwritten with the ones
                                +   * provided. Any column values not explicitly written are preserved.
                                +   *
                                +   * When using
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +   * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +   * columns in the table must be given a value. This holds true even when the
                                +   * row already exists and will therefore actually be updated.
                                    * 
                                * * .google.spanner.v1.Mutation.Write insert_or_update = 3; @@ -136,17 +147,20 @@ public interface MutationOrBuilder * @return The insertOrUpdate. */ com.google.spanner.v1.Mutation.Write getInsertOrUpdate(); + /** * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
                                -   * its column values are overwritten with the ones provided. Any
                                -   * column values not explicitly written are preserved.
                                -   *
                                -   * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
                                -   * NULL` columns in the table must be given a value. This holds true
                                -   * even when the row already exists and will therefore actually be updated.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, then its column values are overwritten with the ones
                                +   * provided. Any column values not explicitly written are preserved.
                                +   *
                                +   * When using
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as
                                +   * when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL`
                                +   * columns in the table must be given a value. This holds true even when the
                                +   * row already exists and will therefore actually be updated.
                                    * 
                                * * .google.spanner.v1.Mutation.Write insert_or_update = 3; @@ -157,10 +171,11 @@ public interface MutationOrBuilder * * *
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -   * deleted, and the column values provided are inserted
                                -   * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -   * explicitly written become `NULL`.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, it is deleted, and the column values provided are
                                +   * inserted instead. Unlike
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +   * means any values not explicitly written become `NULL`.
                                    *
                                    * In an interleaved table, if you create the child table with the
                                    * `ON DELETE CASCADE` annotation, then replacing a parent row
                                @@ -173,14 +188,16 @@ public interface MutationOrBuilder
                                    * @return Whether the replace field is set.
                                    */
                                   boolean hasReplace();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -   * deleted, and the column values provided are inserted
                                -   * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -   * explicitly written become `NULL`.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, it is deleted, and the column values provided are
                                +   * inserted instead. Unlike
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +   * means any values not explicitly written become `NULL`.
                                    *
                                    * In an interleaved table, if you create the child table with the
                                    * `ON DELETE CASCADE` annotation, then replacing a parent row
                                @@ -193,14 +210,16 @@ public interface MutationOrBuilder
                                    * @return The replace.
                                    */
                                   com.google.spanner.v1.Mutation.Write getReplace();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is
                                -   * deleted, and the column values provided are inserted
                                -   * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
                                -   * explicitly written become `NULL`.
                                +   * Like [insert][google.spanner.v1.Mutation.insert], except that if the row
                                +   * already exists, it is deleted, and the column values provided are
                                +   * inserted instead. Unlike
                                +   * [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this
                                +   * means any values not explicitly written become `NULL`.
                                    *
                                    * In an interleaved table, if you create the child table with the
                                    * `ON DELETE CASCADE` annotation, then replacing a parent row
                                @@ -225,6 +244,7 @@ public interface MutationOrBuilder
                                    * @return Whether the delete field is set.
                                    */
                                   boolean hasDelete();
                                +
                                   /**
                                    *
                                    *
                                @@ -238,6 +258,7 @@ public interface MutationOrBuilder
                                    * @return The delete.
                                    */
                                   com.google.spanner.v1.Mutation.Delete getDelete();
                                +
                                   /**
                                    *
                                    *
                                @@ -250,5 +271,79 @@ public interface MutationOrBuilder
                                    */
                                   com.google.spanner.v1.Mutation.DeleteOrBuilder getDeleteOrBuilder();
                                 
                                +  /**
                                +   *
                                +   *
                                +   * 
                                +   * Send a message to a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Send send = 6; + * + * @return Whether the send field is set. + */ + boolean hasSend(); + + /** + * + * + *
                                +   * Send a message to a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Send send = 6; + * + * @return The send. + */ + com.google.spanner.v1.Mutation.Send getSend(); + + /** + * + * + *
                                +   * Send a message to a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Send send = 6; + */ + com.google.spanner.v1.Mutation.SendOrBuilder getSendOrBuilder(); + + /** + * + * + *
                                +   * Ack a message from a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Ack ack = 7; + * + * @return Whether the ack field is set. + */ + boolean hasAck(); + + /** + * + * + *
                                +   * Ack a message from a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Ack ack = 7; + * + * @return The ack. + */ + com.google.spanner.v1.Mutation.Ack getAck(); + + /** + * + * + *
                                +   * Ack a message from a queue.
                                +   * 
                                + * + * .google.spanner.v1.Mutation.Ack ack = 7; + */ + com.google.spanner.v1.Mutation.AckOrBuilder getAckOrBuilder(); + com.google.spanner.v1.Mutation.OperationCase getOperationCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java index 9acd3b6542c..48bf250009d 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/mutation.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class MutationProto { +@com.google.protobuf.Generated +public final class MutationProto extends com.google.protobuf.GeneratedFile { private MutationProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MutationProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,16 +42,24 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Mutation_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Mutation_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Mutation_Write_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Mutation_Write_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Mutation_Delete_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Mutation_Delete_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_Mutation_Send_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_Mutation_Send_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_Mutation_Ack_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_Mutation_Ack_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { return descriptor; @@ -49,27 +69,42 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n google/spanner/v1/mutation.proto\022\021goog" + "\n" + + " google/spanner/v1/mutation.proto\022\021goog" + "le.spanner.v1\032\037google/api/field_behavior" - + ".proto\032\034google/protobuf/struct.proto\032\034go" - + "ogle/spanner/v1/keys.proto\"\325\003\n\010Mutation\022" - + "3\n\006insert\030\001 \001(\0132!.google.spanner.v1.Muta" - + "tion.WriteH\000\0223\n\006update\030\002 \001(\0132!.google.sp" - + "anner.v1.Mutation.WriteH\000\022=\n\020insert_or_u" - + "pdate\030\003 \001(\0132!.google.spanner.v1.Mutation" - + ".WriteH\000\0224\n\007replace\030\004 \001(\0132!.google.spann" - + "er.v1.Mutation.WriteH\000\0224\n\006delete\030\005 \001(\0132\"" - + ".google.spanner.v1.Mutation.DeleteH\000\032X\n\005" - + "Write\022\022\n\005table\030\001 \001(\tB\003\340A\002\022\017\n\007columns\030\002 \003" - + "(\t\022*\n\006values\030\003 \003(\0132\032.google.protobuf.Lis" - + "tValue\032M\n\006Delete\022\022\n\005table\030\001 \001(\tB\003\340A\002\022/\n\007" - + "key_set\030\002 \001(\0132\031.google.spanner.v1.KeySet" - + "B\003\340A\002B\013\n\toperationB\260\001\n\025com.google.spanne" - + "r.v1B\rMutationProtoP\001Z5cloud.google.com/" - + "go/spanner/apiv1/spannerpb;spannerpb\252\002\027G" - + "oogle.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Sp" - + "anner\\V1\352\002\032Google::Cloud::Spanner::V1b\006p" - + "roto3" + + ".proto\032\034google/protobuf/struct.proto\032\037go" + + "ogle/protobuf/timestamp.proto\032\034google/spanner/v1/keys.proto\"\300\006\n" + + "\010Mutation\0223\n" + + "\006insert\030\001 \001(\0132!.google.spanner.v1.Mutation.WriteH\000\0223\n" + + "\006update\030\002 \001(\0132!.google.spanner.v1.Mutation.WriteH\000\022=\n" + + "\020insert_or_update\030\003 \001(\0132!.google.spanner.v1.Mutation.WriteH\000\0224\n" + + "\007replace\030\004 \001(\0132!.google.spanner.v1.Mutation.WriteH\000\0224\n" + + "\006delete\030\005 \001(\0132\".google.spanner.v1.Mutation.DeleteH\000\0220\n" + + "\004send\030\006 \001(\0132 .google.spanner.v1.Mutation.SendH\000\022.\n" + + "\003ack\030\007 \001(\0132\037.google.spanner.v1.Mutation.AckH\000\032X\n" + + "\005Write\022\022\n" + + "\005table\030\001 \001(\tB\003\340A\002\022\017\n" + + "\007columns\030\002 \003(\t\022*\n" + + "\006values\030\003 \003(\0132\032.google.protobuf.ListValue\032M\n" + + "\006Delete\022\022\n" + + "\005table\030\001 \001(\tB\003\340A\002\022/\n" + + "\007key_set\030\002" + + " \001(\0132\031.google.spanner.v1.KeySetB\003\340A\002\032\243\001\n" + + "\004Send\022\022\n" + + "\005queue\030\001 \001(\tB\003\340A\002\022,\n" + + "\003key\030\002 \001(\0132\032.google.protobuf.ListValueB\003\340A\002\0220\n" + + "\014deliver_time\030\003 \001(\0132\032.google.protobuf.Timestamp\022\'\n" + + "\007payload\030\004 \001(\0132\026.google.protobuf.Value\032a\n" + + "\003Ack\022\022\n" + + "\005queue\030\001 \001(\tB\003\340A\002\022,\n" + + "\003key\030\002 \001(\0132\032.google.protobuf.ListValueB\003\340A\002\022\030\n" + + "\020ignore_not_found\030\003 \001(\010B\013\n" + + "\toperationB\260\001\n" + + "\025com.google.spanner.v1B\r" + + "MutationProtoP\001Z5cloud.google.com/go/s" + + "panner/apiv1/spannerpb;spannerpb\252\002\027Googl" + + "e.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spanne" + + "r\\V1\352\002\032Google::Cloud::Spanner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -77,40 +112,58 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.api.FieldBehaviorProto.getDescriptor(), com.google.protobuf.StructProto.getDescriptor(), + com.google.protobuf.TimestampProto.getDescriptor(), com.google.spanner.v1.KeysProto.getDescriptor(), }); - internal_static_google_spanner_v1_Mutation_descriptor = - getDescriptor().getMessageTypes().get(0); + internal_static_google_spanner_v1_Mutation_descriptor = getDescriptor().getMessageType(0); internal_static_google_spanner_v1_Mutation_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_Mutation_descriptor, new java.lang.String[] { - "Insert", "Update", "InsertOrUpdate", "Replace", "Delete", "Operation", + "Insert", "Update", "InsertOrUpdate", "Replace", "Delete", "Send", "Ack", "Operation", }); internal_static_google_spanner_v1_Mutation_Write_descriptor = - internal_static_google_spanner_v1_Mutation_descriptor.getNestedTypes().get(0); + internal_static_google_spanner_v1_Mutation_descriptor.getNestedType(0); internal_static_google_spanner_v1_Mutation_Write_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_Mutation_Write_descriptor, new java.lang.String[] { "Table", "Columns", "Values", }); internal_static_google_spanner_v1_Mutation_Delete_descriptor = - internal_static_google_spanner_v1_Mutation_descriptor.getNestedTypes().get(1); + internal_static_google_spanner_v1_Mutation_descriptor.getNestedType(1); internal_static_google_spanner_v1_Mutation_Delete_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_Mutation_Delete_descriptor, new java.lang.String[] { "Table", "KeySet", }); + internal_static_google_spanner_v1_Mutation_Send_descriptor = + internal_static_google_spanner_v1_Mutation_descriptor.getNestedType(2); + internal_static_google_spanner_v1_Mutation_Send_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_Mutation_Send_descriptor, + new java.lang.String[] { + "Queue", "Key", "DeliverTime", "Payload", + }); + internal_static_google_spanner_v1_Mutation_Ack_descriptor = + internal_static_google_spanner_v1_Mutation_descriptor.getNestedType(3); + internal_static_google_spanner_v1_Mutation_Ack_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_Mutation_Ack_descriptor, + new java.lang.String[] { + "Queue", "Key", "IgnoreNotFound", + }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.protobuf.StructProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.spanner.v1.KeysProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.FieldBehaviorProto.getDescriptor(); - com.google.protobuf.StructProto.getDescriptor(); - com.google.spanner.v1.KeysProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java index 261b5a8e03b..28dd7cef022 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -30,13 +31,25 @@ * * Protobuf type {@code google.spanner.v1.PartialResultSet} */ -public final class PartialResultSet extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class PartialResultSet extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PartialResultSet) PartialResultSetOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartialResultSet"); + } + // Use PartialResultSet.newBuilder() to construct. - private PartialResultSet(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PartialResultSet(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private PartialResultSet() { resumeToken_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PartialResultSet(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_PartialResultSet_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_PartialResultSet_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int METADATA_FIELD_NUMBER = 1; private com.google.spanner.v1.ResultSetMetadata metadata_; + /** * * @@ -85,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasMetadata() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -103,6 +112,7 @@ public com.google.spanner.v1.ResultSetMetadata getMetadata() { ? com.google.spanner.v1.ResultSetMetadata.getDefaultInstance() : metadata_; } + /** * * @@ -124,6 +134,7 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { @SuppressWarnings("serial") private java.util.List values_; + /** * * @@ -137,70 +148,75 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". *
                                * * repeated .google.protobuf.Value values = 2; @@ -209,6 +225,7 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { public java.util.List getValuesList() { return values_; } + /** * * @@ -222,70 +239,75 @@ public java.util.List getValuesList() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". *
                                * * repeated .google.protobuf.Value values = 2; @@ -294,6 +316,7 @@ public java.util.List getValuesList() { public java.util.List getValuesOrBuilderList() { return values_; } + /** * * @@ -307,70 +330,75 @@ public java.util.List getValuesOrB * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". *
                                * * repeated .google.protobuf.Value values = 2; @@ -379,6 +407,7 @@ public java.util.List getValuesOrB public int getValuesCount() { return values_.size(); } + /** * * @@ -392,70 +421,75 @@ public int getValuesCount() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". *
                                * * repeated .google.protobuf.Value values = 2; @@ -464,6 +498,7 @@ public int getValuesCount() { public com.google.protobuf.Value getValues(int index) { return values_.get(index); } + /** * * @@ -477,70 +512,75 @@ public com.google.protobuf.Value getValues(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". *
                                * * repeated .google.protobuf.Value values = 2; @@ -552,13 +592,15 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { public static final int CHUNKED_VALUE_FIELD_NUMBER = 3; private boolean chunkedValue_ = false; + /** * * *
                                -   * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
                                -   * be combined with more values from subsequent `PartialResultSet`s
                                -   * to obtain a complete field value.
                                +   * If true, then the final value in
                                +   * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
                                +   * combined with more values from subsequent `PartialResultSet`s to obtain a
                                +   * complete field value.
                                    * 
                                * * bool chunked_value = 3; @@ -572,6 +614,7 @@ public boolean getChunkedValue() { public static final int RESUME_TOKEN_FIELD_NUMBER = 4; private com.google.protobuf.ByteString resumeToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -594,16 +637,16 @@ public com.google.protobuf.ByteString getResumeToken() { public static final int STATS_FIELD_NUMBER = 5; private com.google.spanner.v1.ResultSetStats stats_; + /** * * *
                                    * Query plan and execution statistics for the statement that produced this
                                    * streaming result set. These can be requested by setting
                                -   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -   * only once with the last response in the stream.
                                -   * This field will also be present in the last response for DML
                                -   * statements.
                                +   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +   * and are sent only once with the last response in the stream. This field is
                                +   * also present in the last response for DML statements.
                                    * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -614,16 +657,16 @@ public com.google.protobuf.ByteString getResumeToken() { public boolean hasStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                    * Query plan and execution statistics for the statement that produced this
                                    * streaming result set. These can be requested by setting
                                -   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -   * only once with the last response in the stream.
                                -   * This field will also be present in the last response for DML
                                -   * statements.
                                +   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +   * and are sent only once with the last response in the stream. This field is
                                +   * also present in the last response for DML statements.
                                    * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -634,16 +677,16 @@ public boolean hasStats() { public com.google.spanner.v1.ResultSetStats getStats() { return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; } + /** * * *
                                    * Query plan and execution statistics for the statement that produced this
                                    * streaming result set. These can be requested by setting
                                -   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -   * only once with the last response in the stream.
                                -   * This field will also be present in the last response for DML
                                -   * statements.
                                +   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +   * and are sent only once with the last response in the stream. This field is
                                +   * also present in the last response for DML statements.
                                    * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -655,17 +698,15 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { public static final int PRECOMMIT_TOKEN_FIELD_NUMBER = 8; private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -678,17 +719,15 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -703,17 +742,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( ? com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance() : precommitToken_; } + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -728,6 +765,101 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( : precommitToken_; } + public static final int LAST_FIELD_NUMBER = 9; + private boolean last_ = false; + + /** + * + * + *
                                +   * Optional. Indicates whether this is the last `PartialResultSet` in the
                                +   * stream. The server might optionally set this field. Clients shouldn't rely
                                +   * on this field being set in all cases.
                                +   * 
                                + * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The last. + */ + @java.lang.Override + public boolean getLast() { + return last_; + } + + public static final int CACHE_UPDATE_FIELD_NUMBER = 10; + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + @java.lang.Override + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -760,6 +892,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(8, getPrecommitToken()); } + if (last_ != false) { + output.writeBool(9, last_); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(10, getCacheUpdate()); + } getUnknownFields().writeTo(output); } @@ -787,6 +925,12 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, getPrecommitToken()); } + if (last_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(9, last_); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, getCacheUpdate()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -817,6 +961,11 @@ public boolean equals(final java.lang.Object obj) { if (hasPrecommitToken()) { if (!getPrecommitToken().equals(other.getPrecommitToken())) return false; } + if (getLast() != other.getLast()) return false; + if (hasCacheUpdate() != other.hasCacheUpdate()) return false; + if (hasCacheUpdate()) { + if (!getCacheUpdate().equals(other.getCacheUpdate())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -848,6 +997,12 @@ public int hashCode() { hash = (37 * hash) + PRECOMMIT_TOKEN_FIELD_NUMBER; hash = (53 * hash) + getPrecommitToken().hashCode(); } + hash = (37 * hash) + LAST_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getLast()); + if (hasCacheUpdate()) { + hash = (37 * hash) + CACHE_UPDATE_FIELD_NUMBER; + hash = (53 * hash) + getCacheUpdate().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -890,38 +1045,38 @@ public static com.google.spanner.v1.PartialResultSet parseFrom( public static com.google.spanner.v1.PartialResultSet parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartialResultSet parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartialResultSet parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PartialResultSet parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartialResultSet parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartialResultSet parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -944,10 +1099,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -959,7 +1115,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.PartialResultSet} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PartialResultSet) com.google.spanner.v1.PartialResultSetOrBuilder { @@ -969,7 +1125,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_PartialResultSet_fieldAccessorTable @@ -983,17 +1139,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getMetadataFieldBuilder(); - getValuesFieldBuilder(); - getStatsFieldBuilder(); - getPrecommitTokenFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMetadataFieldBuilder(); + internalGetValuesFieldBuilder(); + internalGetStatsFieldBuilder(); + internalGetPrecommitTokenFieldBuilder(); + internalGetCacheUpdateFieldBuilder(); } } @@ -1025,6 +1182,12 @@ public Builder clear() { precommitTokenBuilder_.dispose(); precommitTokenBuilder_ = null; } + last_ = false; + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } return this; } @@ -1094,42 +1257,17 @@ private void buildPartial0(com.google.spanner.v1.PartialResultSet result) { precommitTokenBuilder_ == null ? precommitToken_ : precommitTokenBuilder_.build(); to_bitField0_ |= 0x00000004; } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.last_ = last_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.cacheUpdate_ = + cacheUpdateBuilder_ == null ? cacheUpdate_ : cacheUpdateBuilder_.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.spanner.v1.PartialResultSet) { @@ -1164,8 +1302,8 @@ public Builder mergeFrom(com.google.spanner.v1.PartialResultSet other) { values_ = other.values_; bitField0_ = (bitField0_ & ~0x00000002); valuesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getValuesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetValuesFieldBuilder() : null; } else { valuesBuilder_.addAllMessages(other.values_); @@ -1175,7 +1313,7 @@ public Builder mergeFrom(com.google.spanner.v1.PartialResultSet other) { if (other.getChunkedValue() != false) { setChunkedValue(other.getChunkedValue()); } - if (other.getResumeToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getResumeToken().isEmpty()) { setResumeToken(other.getResumeToken()); } if (other.hasStats()) { @@ -1184,6 +1322,12 @@ public Builder mergeFrom(com.google.spanner.v1.PartialResultSet other) { if (other.hasPrecommitToken()) { mergePrecommitToken(other.getPrecommitToken()); } + if (other.getLast() != false) { + setLast(other.getLast()); + } + if (other.hasCacheUpdate()) { + mergeCacheUpdate(other.getCacheUpdate()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1212,7 +1356,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getMetadataFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMetadataFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -1242,16 +1387,30 @@ public Builder mergeFrom( } // case 34 case 42: { - input.readMessage(getStatsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetStatsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 case 66: { - input.readMessage(getPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 66 + case 72: + { + last_ = input.readBool(); + bitField0_ |= 0x00000040; + break; + } // case 72 + case 82: + { + input.readMessage( + internalGetCacheUpdateFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000080; + break; + } // case 82 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1272,11 +1431,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.v1.ResultSetMetadata metadata_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetMetadata, com.google.spanner.v1.ResultSetMetadata.Builder, com.google.spanner.v1.ResultSetMetadataOrBuilder> metadataBuilder_; + /** * * @@ -1292,6 +1452,7 @@ public Builder mergeFrom( public boolean hasMetadata() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1313,6 +1474,7 @@ public com.google.spanner.v1.ResultSetMetadata getMetadata() { return metadataBuilder_.getMessage(); } } + /** * * @@ -1336,6 +1498,7 @@ public Builder setMetadata(com.google.spanner.v1.ResultSetMetadata value) { onChanged(); return this; } + /** * * @@ -1356,6 +1519,7 @@ public Builder setMetadata(com.google.spanner.v1.ResultSetMetadata.Builder build onChanged(); return this; } + /** * * @@ -1384,6 +1548,7 @@ public Builder mergeMetadata(com.google.spanner.v1.ResultSetMetadata value) { } return this; } + /** * * @@ -1404,6 +1569,7 @@ public Builder clearMetadata() { onChanged(); return this; } + /** * * @@ -1417,8 +1583,9 @@ public Builder clearMetadata() { public com.google.spanner.v1.ResultSetMetadata.Builder getMetadataBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getMetadataFieldBuilder().getBuilder(); + return internalGetMetadataFieldBuilder().getBuilder(); } + /** * * @@ -1438,6 +1605,7 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { : metadata_; } } + /** * * @@ -1448,14 +1616,14 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * * .google.spanner.v1.ResultSetMetadata metadata = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetMetadata, com.google.spanner.v1.ResultSetMetadata.Builder, com.google.spanner.v1.ResultSetMetadataOrBuilder> - getMetadataFieldBuilder() { + internalGetMetadataFieldBuilder() { if (metadataBuilder_ == null) { metadataBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetMetadata, com.google.spanner.v1.ResultSetMetadata.Builder, com.google.spanner.v1.ResultSetMetadataOrBuilder>( @@ -1474,7 +1642,7 @@ private void ensureValuesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.Value, com.google.protobuf.Value.Builder, com.google.protobuf.ValueOrBuilder> @@ -1493,70 +1661,75 @@ private void ensureValuesIsMutable() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1568,6 +1741,7 @@ public java.util.List getValuesList() { return valuesBuilder_.getMessageList(); } } + /** * * @@ -1581,70 +1755,75 @@ public java.util.List getValuesList() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1656,6 +1835,7 @@ public int getValuesCount() { return valuesBuilder_.getCount(); } } + /** * * @@ -1669,70 +1849,75 @@ public int getValuesCount() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1744,6 +1929,7 @@ public com.google.protobuf.Value getValues(int index) { return valuesBuilder_.getMessage(index); } } + /** * * @@ -1757,70 +1943,75 @@ public com.google.protobuf.Value getValues(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1838,6 +2029,7 @@ public Builder setValues(int index, com.google.protobuf.Value value) { } return this; } + /** * * @@ -1851,70 +2043,75 @@ public Builder setValues(int index, com.google.protobuf.Value value) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1929,6 +2126,7 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor } return this; } + /** * * @@ -1942,70 +2140,75 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2023,6 +2226,7 @@ public Builder addValues(com.google.protobuf.Value value) { } return this; } + /** * * @@ -2036,70 +2240,75 @@ public Builder addValues(com.google.protobuf.Value value) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2117,6 +2326,7 @@ public Builder addValues(int index, com.google.protobuf.Value value) { } return this; } + /** * * @@ -2130,70 +2340,75 @@ public Builder addValues(int index, com.google.protobuf.Value value) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2208,6 +2423,7 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) { } return this; } + /** * * @@ -2221,70 +2437,75 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2299,6 +2520,7 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor } return this; } + /** * * @@ -2312,70 +2534,75 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2390,6 +2617,7 @@ public Builder addAllValues(java.lang.Iterable * * repeated .google.protobuf.Value values = 2; @@ -2481,6 +2714,7 @@ public Builder clearValues() { } return this; } + /** * * @@ -2494,70 +2728,75 @@ public Builder clearValues() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2572,6 +2811,7 @@ public Builder removeValues(int index) { } return this; } + /** * * @@ -2585,77 +2825,83 @@ public Builder removeValues(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ public com.google.protobuf.Value.Builder getValuesBuilder(int index) { - return getValuesFieldBuilder().getBuilder(index); + return internalGetValuesFieldBuilder().getBuilder(index); } + /** * * @@ -2669,70 +2915,75 @@ public com.google.protobuf.Value.Builder getValuesBuilder(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2744,6 +2995,7 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { return valuesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2757,70 +3009,75 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2832,6 +3089,7 @@ public java.util.List getValuesOrB return java.util.Collections.unmodifiableList(values_); } } + /** * * @@ -2845,77 +3103,84 @@ public java.util.List getValuesOrB * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ public com.google.protobuf.Value.Builder addValuesBuilder() { - return getValuesFieldBuilder().addBuilder(com.google.protobuf.Value.getDefaultInstance()); + return internalGetValuesFieldBuilder() + .addBuilder(com.google.protobuf.Value.getDefaultInstance()); } + /** * * @@ -2929,78 +3194,84 @@ public com.google.protobuf.Value.Builder addValuesBuilder() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ public com.google.protobuf.Value.Builder addValuesBuilder(int index) { - return getValuesFieldBuilder() + return internalGetValuesFieldBuilder() .addBuilder(index, com.google.protobuf.Value.getDefaultInstance()); } + /** * * @@ -3014,86 +3285,91 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ public java.util.List getValuesBuilderList() { - return getValuesFieldBuilder().getBuilderList(); + return internalGetValuesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.Value, com.google.protobuf.Value.Builder, com.google.protobuf.ValueOrBuilder> - getValuesFieldBuilder() { + internalGetValuesFieldBuilder() { if (valuesBuilder_ == null) { valuesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.Value, com.google.protobuf.Value.Builder, com.google.protobuf.ValueOrBuilder>( @@ -3104,13 +3380,15 @@ public java.util.List getValuesBuilderList() } private boolean chunkedValue_; + /** * * *
                                -     * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
                                -     * be combined with more values from subsequent `PartialResultSet`s
                                -     * to obtain a complete field value.
                                +     * If true, then the final value in
                                +     * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
                                +     * combined with more values from subsequent `PartialResultSet`s to obtain a
                                +     * complete field value.
                                      * 
                                * * bool chunked_value = 3; @@ -3121,13 +3399,15 @@ public java.util.List getValuesBuilderList() public boolean getChunkedValue() { return chunkedValue_; } + /** * * *
                                -     * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
                                -     * be combined with more values from subsequent `PartialResultSet`s
                                -     * to obtain a complete field value.
                                +     * If true, then the final value in
                                +     * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
                                +     * combined with more values from subsequent `PartialResultSet`s to obtain a
                                +     * complete field value.
                                      * 
                                * * bool chunked_value = 3; @@ -3142,13 +3422,15 @@ public Builder setChunkedValue(boolean value) { onChanged(); return this; } + /** * * *
                                -     * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
                                -     * be combined with more values from subsequent `PartialResultSet`s
                                -     * to obtain a complete field value.
                                +     * If true, then the final value in
                                +     * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
                                +     * combined with more values from subsequent `PartialResultSet`s to obtain a
                                +     * complete field value.
                                      * 
                                * * bool chunked_value = 3; @@ -3163,6 +3445,7 @@ public Builder clearChunkedValue() { } private com.google.protobuf.ByteString resumeToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -3182,6 +3465,7 @@ public Builder clearChunkedValue() { public com.google.protobuf.ByteString getResumeToken() { return resumeToken_; } + /** * * @@ -3207,6 +3491,7 @@ public Builder setResumeToken(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -3230,21 +3515,21 @@ public Builder clearResumeToken() { } private com.google.spanner.v1.ResultSetStats stats_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetStats, com.google.spanner.v1.ResultSetStats.Builder, com.google.spanner.v1.ResultSetStatsOrBuilder> statsBuilder_; + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3254,16 +3539,16 @@ public Builder clearResumeToken() { public boolean hasStats() { return ((bitField0_ & 0x00000010) != 0); } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3277,16 +3562,16 @@ public com.google.spanner.v1.ResultSetStats getStats() { return statsBuilder_.getMessage(); } } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3304,16 +3589,16 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats value) { onChanged(); return this; } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3328,16 +3613,16 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats.Builder builderForV onChanged(); return this; } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3360,16 +3645,16 @@ public Builder mergeStats(com.google.spanner.v1.ResultSetStats value) { } return this; } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3384,16 +3669,16 @@ public Builder clearStats() { onChanged(); return this; } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3401,18 +3686,18 @@ public Builder clearStats() { public com.google.spanner.v1.ResultSetStats.Builder getStatsBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getStatsFieldBuilder().getBuilder(); + return internalGetStatsFieldBuilder().getBuilder(); } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -3424,28 +3709,28 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; } } + /** * * *
                                      * Query plan and execution statistics for the statement that produced this
                                      * streaming result set. These can be requested by setting
                                -     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -     * only once with the last response in the stream.
                                -     * This field will also be present in the last response for DML
                                -     * statements.
                                +     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +     * and are sent only once with the last response in the stream. This field is
                                +     * also present in the last response for DML statements.
                                      * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetStats, com.google.spanner.v1.ResultSetStats.Builder, com.google.spanner.v1.ResultSetStatsOrBuilder> - getStatsFieldBuilder() { + internalGetStatsFieldBuilder() { if (statsBuilder_ == null) { statsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetStats, com.google.spanner.v1.ResultSetStats.Builder, com.google.spanner.v1.ResultSetStatsOrBuilder>( @@ -3456,22 +3741,20 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { } private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> precommitTokenBuilder_; + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3483,17 +3766,15 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000020) != 0); } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3511,17 +3792,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( return precommitTokenBuilder_.getMessage(); } } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3541,17 +3820,15 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3569,17 +3846,15 @@ public Builder setPrecommitToken( onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3606,17 +3881,15 @@ public Builder mergePrecommitToken( } return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3633,17 +3906,15 @@ public Builder clearPrecommitToken() { onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3654,19 +3925,17 @@ public Builder clearPrecommitToken() { getPrecommitTokenBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getPrecommitTokenFieldBuilder().getBuilder(); + return internalGetPrecommitTokenFieldBuilder().getBuilder(); } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -3683,31 +3952,29 @@ public Builder clearPrecommitToken() { : precommitToken_; } } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction
                                +     * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +     * sequence number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 8 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> - getPrecommitTokenFieldBuilder() { + internalGetPrecommitTokenFieldBuilder() { if (precommitTokenBuilder_ == null) { precommitTokenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder>( @@ -3717,15 +3984,323 @@ public Builder clearPrecommitToken() { return precommitTokenBuilder_; } + private boolean last_; + + /** + * + * + *
                                +     * Optional. Indicates whether this is the last `PartialResultSet` in the
                                +     * stream. The server might optionally set this field. Clients shouldn't rely
                                +     * on this field being set in all cases.
                                +     * 
                                + * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The last. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public boolean getLast() { + return last_; } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. Indicates whether this is the last `PartialResultSet` in the
                                +     * stream. The server might optionally set this field. Clients shouldn't rely
                                +     * on this field being set in all cases.
                                +     * 
                                + * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The last to set. + * @return This builder for chaining. + */ + public Builder setLast(boolean value) { + + last_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Indicates whether this is the last `PartialResultSet` in the
                                +     * stream. The server might optionally set this field. Clients shouldn't rely
                                +     * on this field being set in all cases.
                                +     * 
                                + * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearLast() { + bitField0_ = (bitField0_ & ~0x00000040); + last_ = false; + onChanged(); + return this; + } + + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + cacheUpdateBuilder_; + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000080) != 0); + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + if (cacheUpdateBuilder_ == null) { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } else { + return cacheUpdateBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cacheUpdate_ = value; + } else { + cacheUpdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate.Builder builderForValue) { + if (cacheUpdateBuilder_ == null) { + cacheUpdate_ = builderForValue.build(); + } else { + cacheUpdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0) + && cacheUpdate_ != null + && cacheUpdate_ != com.google.spanner.v1.CacheUpdate.getDefaultInstance()) { + getCacheUpdateBuilder().mergeFrom(value); + } else { + cacheUpdate_ = value; + } + } else { + cacheUpdateBuilder_.mergeFrom(value); + } + if (cacheUpdate_ != null) { + bitField0_ |= 0x00000080; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearCacheUpdate() { + bitField0_ = (bitField0_ & ~0x00000080); + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdate.Builder getCacheUpdateBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return internalGetCacheUpdateFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + if (cacheUpdateBuilder_ != null) { + return cacheUpdateBuilder_.getMessageOrBuilder(); + } else { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + internalGetCacheUpdateFieldBuilder() { + if (cacheUpdateBuilder_ == null) { + cacheUpdateBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder>( + getCacheUpdate(), getParentForChildren(), isClean()); + cacheUpdate_ = null; + } + return cacheUpdateBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.PartialResultSet) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java index fdf1f461f68..4e33ea86022 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface PartialResultSetOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.PartialResultSet) @@ -37,6 +39,7 @@ public interface PartialResultSetOrBuilder * @return Whether the metadata field is set. */ boolean hasMetadata(); + /** * * @@ -50,6 +53,7 @@ public interface PartialResultSetOrBuilder * @return The metadata. */ com.google.spanner.v1.ResultSetMetadata getMetadata(); + /** * * @@ -75,75 +79,81 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ java.util.List getValuesList(); + /** * * @@ -157,75 +167,81 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ com.google.protobuf.Value getValues(int index); + /** * * @@ -239,75 +255,81 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ int getValuesCount(); + /** * * @@ -321,75 +343,81 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; */ java.util.List getValuesOrBuilderList(); + /** * * @@ -403,70 +431,75 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: - * - * * `bool/number/null`: cannot be chunked - * * `string`: concatenate the strings - * * `list`: concatenate the lists. If the last element in a list is a - * `string`, `list`, or `object`, merge it with the first element in - * the next list by applying these rules recursively. - * * `object`: concatenate the (field name, field value) pairs. If a - * field name is duplicated, then apply these rules recursively - * to merge the field values. + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: + * + * * `bool/number/null`: can't be chunked + * * `string`: concatenate the strings + * * `list`: concatenate the lists. If the last element in a list is a + * `string`, `list`, or `object`, merge it with the first element in + * the next list by applying these rules recursively. + * * `object`: concatenate the (field name, field value) pairs. If a + * field name is duplicated, then apply these rules recursively + * to merge the field values. * * Some examples of merging: * - * # Strings are concatenated. - * "foo", "bar" => "foobar" + * Strings are concatenated. + * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. - * [2, 3], [4] => [2, 3, 4] + * Lists of non-strings are concatenated. + * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. - * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + * Lists are concatenated, but the last and first elements are merged + * because they are strings. + * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. - * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. + * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. - * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + * Non-overlapping object fields are combined. + * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. - * {"a": "1"}, {"a": "2"} => {"a": "12"} + * Overlapping object fields are merged. + * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. - * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + * Examples of merging objects containing lists of strings. + * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is * yielding a result set whose rows contain a single string * field. The following `PartialResultSet`s might be yielded: * - * { - * "metadata": { ... } - * "values": ["Hello", "W"] - * "chunked_value": true - * "resume_token": "Af65..." - * } - * { - * "values": ["orl"] - * "chunked_value": true - * "resume_token": "Bqp2..." - * } - * { - * "values": ["d"] - * "resume_token": "Zx1B..." - * } + * { + * "metadata": { ... } + * "values": ["Hello", "W"] + * "chunked_value": true + * "resume_token": "Af65..." + * } + * { + * "values": ["orl"] + * "chunked_value": true + * } + * { + * "values": ["d"] + * "resume_token": "Zx1B..." + * } * * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -477,9 +510,10 @@ public interface PartialResultSetOrBuilder * * *
                                -   * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
                                -   * be combined with more values from subsequent `PartialResultSet`s
                                -   * to obtain a complete field value.
                                +   * If true, then the final value in
                                +   * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
                                +   * combined with more values from subsequent `PartialResultSet`s to obtain a
                                +   * complete field value.
                                    * 
                                * * bool chunked_value = 3; @@ -511,10 +545,9 @@ public interface PartialResultSetOrBuilder *
                                    * Query plan and execution statistics for the statement that produced this
                                    * streaming result set. These can be requested by setting
                                -   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -   * only once with the last response in the stream.
                                -   * This field will also be present in the last response for DML
                                -   * statements.
                                +   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +   * and are sent only once with the last response in the stream. This field is
                                +   * also present in the last response for DML statements.
                                    * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -522,16 +555,16 @@ public interface PartialResultSetOrBuilder * @return Whether the stats field is set. */ boolean hasStats(); + /** * * *
                                    * Query plan and execution statistics for the statement that produced this
                                    * streaming result set. These can be requested by setting
                                -   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -   * only once with the last response in the stream.
                                -   * This field will also be present in the last response for DML
                                -   * statements.
                                +   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +   * and are sent only once with the last response in the stream. This field is
                                +   * also present in the last response for DML statements.
                                    * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -539,16 +572,16 @@ public interface PartialResultSetOrBuilder * @return The stats. */ com.google.spanner.v1.ResultSetStats getStats(); + /** * * *
                                    * Query plan and execution statistics for the statement that produced this
                                    * streaming result set. These can be requested by setting
                                -   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
                                -   * only once with the last response in the stream.
                                -   * This field will also be present in the last response for DML
                                -   * statements.
                                +   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
                                +   * and are sent only once with the last response in the stream. This field is
                                +   * also present in the last response for DML statements.
                                    * 
                                * * .google.spanner.v1.ResultSetStats stats = 5; @@ -559,13 +592,10 @@ public interface PartialResultSetOrBuilder * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -575,17 +605,15 @@ public interface PartialResultSetOrBuilder * @return Whether the precommitToken field is set. */ boolean hasPrecommitToken(); + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -595,17 +623,15 @@ public interface PartialResultSetOrBuilder * @return The precommitToken. */ com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken(); + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction
                                +   * has multiplexed sessions enabled. Pass the precommit token with the highest
                                +   * sequence number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -613,4 +639,77 @@ public interface PartialResultSetOrBuilder * */ com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder getPrecommitTokenOrBuilder(); + + /** + * + * + *
                                +   * Optional. Indicates whether this is the last `PartialResultSet` in the
                                +   * stream. The server might optionally set this field. Clients shouldn't rely
                                +   * on this field being set in all cases.
                                +   * 
                                + * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The last. + */ + boolean getLast(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + boolean hasCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + com.google.spanner.v1.CacheUpdate getCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java index 6a15a91d006..9b8b36727be 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.Partition} */ -public final class Partition extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Partition extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.Partition) PartitionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Partition"); + } + // Use Partition.newBuilder() to construct. - private Partition(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Partition(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private Partition() { partitionToken_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Partition(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_Partition_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_Partition_fieldAccessorTable @@ -65,13 +72,14 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int PARTITION_TOKEN_FIELD_NUMBER = 1; private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * *
                                -   * This token can be passed to Read, StreamingRead, ExecuteSql, or
                                -   * ExecuteStreamingSql requests to restrict the results to those identified by
                                -   * this partition token.
                                +   * This token can be passed to `Read`, `StreamingRead`, `ExecuteSql`, or
                                +   * `ExecuteStreamingSql` requests to restrict the results to those identified
                                +   * by this partition token.
                                    * 
                                * * bytes partition_token = 1; @@ -182,38 +190,38 @@ public static com.google.spanner.v1.Partition parseFrom( public static com.google.spanner.v1.Partition parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Partition parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Partition parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.Partition parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Partition parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Partition parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -236,10 +244,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -250,7 +259,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.Partition} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.Partition) com.google.spanner.v1.PartitionOrBuilder { @@ -260,7 +269,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_Partition_fieldAccessorTable @@ -271,7 +280,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.Partition.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -320,39 +329,6 @@ private void buildPartial0(com.google.spanner.v1.Partition result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.Partition) { @@ -365,7 +341,7 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(com.google.spanner.v1.Partition other) { if (other == com.google.spanner.v1.Partition.getDefaultInstance()) return this; - if (other.getPartitionToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getPartitionToken().isEmpty()) { setPartitionToken(other.getPartitionToken()); } this.mergeUnknownFields(other.getUnknownFields()); @@ -420,13 +396,14 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * *
                                -     * This token can be passed to Read, StreamingRead, ExecuteSql, or
                                -     * ExecuteStreamingSql requests to restrict the results to those identified by
                                -     * this partition token.
                                +     * This token can be passed to `Read`, `StreamingRead`, `ExecuteSql`, or
                                +     * `ExecuteStreamingSql` requests to restrict the results to those identified
                                +     * by this partition token.
                                      * 
                                * * bytes partition_token = 1; @@ -437,13 +414,14 @@ public Builder mergeFrom( public com.google.protobuf.ByteString getPartitionToken() { return partitionToken_; } + /** * * *
                                -     * This token can be passed to Read, StreamingRead, ExecuteSql, or
                                -     * ExecuteStreamingSql requests to restrict the results to those identified by
                                -     * this partition token.
                                +     * This token can be passed to `Read`, `StreamingRead`, `ExecuteSql`, or
                                +     * `ExecuteStreamingSql` requests to restrict the results to those identified
                                +     * by this partition token.
                                      * 
                                * * bytes partition_token = 1; @@ -460,13 +438,14 @@ public Builder setPartitionToken(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * *
                                -     * This token can be passed to Read, StreamingRead, ExecuteSql, or
                                -     * ExecuteStreamingSql requests to restrict the results to those identified by
                                -     * this partition token.
                                +     * This token can be passed to `Read`, `StreamingRead`, `ExecuteSql`, or
                                +     * `ExecuteStreamingSql` requests to restrict the results to those identified
                                +     * by this partition token.
                                      * 
                                * * bytes partition_token = 1; @@ -480,17 +459,6 @@ public Builder clearPartitionToken() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.Partition) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java index 75d5ce4506d..94447be37dc 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,46 +14,52 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** * * *
                                - * Options for a PartitionQueryRequest and
                                - * PartitionReadRequest.
                                + * Options for a `PartitionQueryRequest` and `PartitionReadRequest`.
                                  * 
                                * * Protobuf type {@code google.spanner.v1.PartitionOptions} */ -public final class PartitionOptions extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class PartitionOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PartitionOptions) PartitionOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionOptions"); + } + // Use PartitionOptions.newBuilder() to construct. - private PartitionOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PartitionOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private PartitionOptions() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PartitionOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionOptions_fieldAccessorTable @@ -64,16 +70,17 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int PARTITION_SIZE_BYTES_FIELD_NUMBER = 1; private long partitionSizeBytes_ = 0L; + /** * * *
                                -   * **Note:** This hint is currently ignored by PartitionQuery and
                                -   * PartitionRead requests.
                                +   * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +   * `PartitionRead` requests.
                                    *
                                -   * The desired data size for each partition generated.  The default for this
                                -   * option is currently 1 GiB.  This is only a hint. The actual size of each
                                -   * partition may be smaller or larger than this size request.
                                +   * The desired data size for each partition generated. The default for this
                                +   * option is currently 1 GiB. This is only a hint. The actual size of each
                                +   * partition can be smaller or larger than this size request.
                                    * 
                                * * int64 partition_size_bytes = 1; @@ -87,18 +94,19 @@ public long getPartitionSizeBytes() { public static final int MAX_PARTITIONS_FIELD_NUMBER = 2; private long maxPartitions_ = 0L; + /** * * *
                                -   * **Note:** This hint is currently ignored by PartitionQuery and
                                -   * PartitionRead requests.
                                +   * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +   * `PartitionRead` requests.
                                    *
                                -   * The desired maximum number of partitions to return.  For example, this may
                                -   * be set to the number of workers available.  The default for this option
                                -   * is currently 10,000. The maximum value is currently 200,000.  This is only
                                -   * a hint.  The actual number of partitions returned may be smaller or larger
                                -   * than this maximum count request.
                                +   * The desired maximum number of partitions to return. For example, this
                                +   * might be set to the number of workers available. The default for this
                                +   * option is currently 10,000. The maximum value is currently 200,000. This
                                +   * is only a hint. The actual number of partitions returned can be smaller or
                                +   * larger than this maximum count request.
                                    * 
                                * * int64 max_partitions = 2; @@ -219,38 +227,38 @@ public static com.google.spanner.v1.PartitionOptions parseFrom( public static com.google.spanner.v1.PartitionOptions parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionOptions parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -273,21 +281,21 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -   * Options for a PartitionQueryRequest and
                                -   * PartitionReadRequest.
                                +   * Options for a `PartitionQueryRequest` and `PartitionReadRequest`.
                                    * 
                                * * Protobuf type {@code google.spanner.v1.PartitionOptions} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PartitionOptions) com.google.spanner.v1.PartitionOptionsOrBuilder { @@ -297,7 +305,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionOptions_fieldAccessorTable @@ -309,7 +317,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.PartitionOptions.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -363,39 +371,6 @@ private void buildPartial0(com.google.spanner.v1.PartitionOptions result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.PartitionOptions) { @@ -472,16 +447,17 @@ public Builder mergeFrom( private int bitField0_; private long partitionSizeBytes_; + /** * * *
                                -     * **Note:** This hint is currently ignored by PartitionQuery and
                                -     * PartitionRead requests.
                                +     * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +     * `PartitionRead` requests.
                                      *
                                -     * The desired data size for each partition generated.  The default for this
                                -     * option is currently 1 GiB.  This is only a hint. The actual size of each
                                -     * partition may be smaller or larger than this size request.
                                +     * The desired data size for each partition generated. The default for this
                                +     * option is currently 1 GiB. This is only a hint. The actual size of each
                                +     * partition can be smaller or larger than this size request.
                                      * 
                                * * int64 partition_size_bytes = 1; @@ -492,16 +468,17 @@ public Builder mergeFrom( public long getPartitionSizeBytes() { return partitionSizeBytes_; } + /** * * *
                                -     * **Note:** This hint is currently ignored by PartitionQuery and
                                -     * PartitionRead requests.
                                +     * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +     * `PartitionRead` requests.
                                      *
                                -     * The desired data size for each partition generated.  The default for this
                                -     * option is currently 1 GiB.  This is only a hint. The actual size of each
                                -     * partition may be smaller or larger than this size request.
                                +     * The desired data size for each partition generated. The default for this
                                +     * option is currently 1 GiB. This is only a hint. The actual size of each
                                +     * partition can be smaller or larger than this size request.
                                      * 
                                * * int64 partition_size_bytes = 1; @@ -516,16 +493,17 @@ public Builder setPartitionSizeBytes(long value) { onChanged(); return this; } + /** * * *
                                -     * **Note:** This hint is currently ignored by PartitionQuery and
                                -     * PartitionRead requests.
                                +     * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +     * `PartitionRead` requests.
                                      *
                                -     * The desired data size for each partition generated.  The default for this
                                -     * option is currently 1 GiB.  This is only a hint. The actual size of each
                                -     * partition may be smaller or larger than this size request.
                                +     * The desired data size for each partition generated. The default for this
                                +     * option is currently 1 GiB. This is only a hint. The actual size of each
                                +     * partition can be smaller or larger than this size request.
                                      * 
                                * * int64 partition_size_bytes = 1; @@ -540,18 +518,19 @@ public Builder clearPartitionSizeBytes() { } private long maxPartitions_; + /** * * *
                                -     * **Note:** This hint is currently ignored by PartitionQuery and
                                -     * PartitionRead requests.
                                +     * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +     * `PartitionRead` requests.
                                      *
                                -     * The desired maximum number of partitions to return.  For example, this may
                                -     * be set to the number of workers available.  The default for this option
                                -     * is currently 10,000. The maximum value is currently 200,000.  This is only
                                -     * a hint.  The actual number of partitions returned may be smaller or larger
                                -     * than this maximum count request.
                                +     * The desired maximum number of partitions to return. For example, this
                                +     * might be set to the number of workers available. The default for this
                                +     * option is currently 10,000. The maximum value is currently 200,000. This
                                +     * is only a hint. The actual number of partitions returned can be smaller or
                                +     * larger than this maximum count request.
                                      * 
                                * * int64 max_partitions = 2; @@ -562,18 +541,19 @@ public Builder clearPartitionSizeBytes() { public long getMaxPartitions() { return maxPartitions_; } + /** * * *
                                -     * **Note:** This hint is currently ignored by PartitionQuery and
                                -     * PartitionRead requests.
                                +     * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +     * `PartitionRead` requests.
                                      *
                                -     * The desired maximum number of partitions to return.  For example, this may
                                -     * be set to the number of workers available.  The default for this option
                                -     * is currently 10,000. The maximum value is currently 200,000.  This is only
                                -     * a hint.  The actual number of partitions returned may be smaller or larger
                                -     * than this maximum count request.
                                +     * The desired maximum number of partitions to return. For example, this
                                +     * might be set to the number of workers available. The default for this
                                +     * option is currently 10,000. The maximum value is currently 200,000. This
                                +     * is only a hint. The actual number of partitions returned can be smaller or
                                +     * larger than this maximum count request.
                                      * 
                                * * int64 max_partitions = 2; @@ -588,18 +568,19 @@ public Builder setMaxPartitions(long value) { onChanged(); return this; } + /** * * *
                                -     * **Note:** This hint is currently ignored by PartitionQuery and
                                -     * PartitionRead requests.
                                +     * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +     * `PartitionRead` requests.
                                      *
                                -     * The desired maximum number of partitions to return.  For example, this may
                                -     * be set to the number of workers available.  The default for this option
                                -     * is currently 10,000. The maximum value is currently 200,000.  This is only
                                -     * a hint.  The actual number of partitions returned may be smaller or larger
                                -     * than this maximum count request.
                                +     * The desired maximum number of partitions to return. For example, this
                                +     * might be set to the number of workers available. The default for this
                                +     * option is currently 10,000. The maximum value is currently 200,000. This
                                +     * is only a hint. The actual number of partitions returned can be smaller or
                                +     * larger than this maximum count request.
                                      * 
                                * * int64 max_partitions = 2; @@ -613,17 +594,6 @@ public Builder clearMaxPartitions() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.PartitionOptions) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java index 3deb5dac336..94ae119aa28 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface PartitionOptionsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.PartitionOptions) @@ -28,12 +30,12 @@ public interface PartitionOptionsOrBuilder * * *
                                -   * **Note:** This hint is currently ignored by PartitionQuery and
                                -   * PartitionRead requests.
                                +   * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +   * `PartitionRead` requests.
                                    *
                                -   * The desired data size for each partition generated.  The default for this
                                -   * option is currently 1 GiB.  This is only a hint. The actual size of each
                                -   * partition may be smaller or larger than this size request.
                                +   * The desired data size for each partition generated. The default for this
                                +   * option is currently 1 GiB. This is only a hint. The actual size of each
                                +   * partition can be smaller or larger than this size request.
                                    * 
                                * * int64 partition_size_bytes = 1; @@ -46,14 +48,14 @@ public interface PartitionOptionsOrBuilder * * *
                                -   * **Note:** This hint is currently ignored by PartitionQuery and
                                -   * PartitionRead requests.
                                +   * **Note:** This hint is currently ignored by `PartitionQuery` and
                                +   * `PartitionRead` requests.
                                    *
                                -   * The desired maximum number of partitions to return.  For example, this may
                                -   * be set to the number of workers available.  The default for this option
                                -   * is currently 10,000. The maximum value is currently 200,000.  This is only
                                -   * a hint.  The actual number of partitions returned may be smaller or larger
                                -   * than this maximum count request.
                                +   * The desired maximum number of partitions to return. For example, this
                                +   * might be set to the number of workers available. The default for this
                                +   * option is currently 10,000. The maximum value is currently 200,000. This
                                +   * is only a hint. The actual number of partitions returned can be smaller or
                                +   * larger than this maximum count request.
                                    * 
                                * * int64 max_partitions = 2; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java index 835fa411ea3..ff7d8444c17 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface PartitionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.Partition) @@ -28,9 +30,9 @@ public interface PartitionOrBuilder * * *
                                -   * This token can be passed to Read, StreamingRead, ExecuteSql, or
                                -   * ExecuteStreamingSql requests to restrict the results to those identified by
                                -   * this partition token.
                                +   * This token can be passed to `Read`, `StreamingRead`, `ExecuteSql`, or
                                +   * `ExecuteStreamingSql` requests to restrict the results to those identified
                                +   * by this partition token.
                                    * 
                                * * bytes partition_token = 1; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java index bc440470227..591c068dc72 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.PartitionQueryRequest} */ -public final class PartitionQueryRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class PartitionQueryRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PartitionQueryRequest) PartitionQueryRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionQueryRequest"); + } + // Use PartitionQueryRequest.newBuilder() to construct. - private PartitionQueryRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PartitionQueryRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,12 +56,6 @@ private PartitionQueryRequest() { sql_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PartitionQueryRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionQueryRequest_descriptor; @@ -67,7 +74,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionQueryRequest_fieldAccessorTable @@ -81,6 +88,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -106,6 +114,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -134,12 +143,13 @@ public com.google.protobuf.ByteString getSessionBytes() { public static final int TRANSACTION_FIELD_NUMBER = 2; private com.google.spanner.v1.TransactionSelector transaction_; + /** * * *
                                -   * Read only snapshot transactions are supported, read/write and single use
                                -   * transactions are not.
                                +   * Read-only snapshot transactions are supported, read and write and
                                +   * single-use transactions are not.
                                    * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -150,12 +160,13 @@ public com.google.protobuf.ByteString getSessionBytes() { public boolean hasTransaction() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -   * Read only snapshot transactions are supported, read/write and single use
                                -   * transactions are not.
                                +   * Read-only snapshot transactions are supported, read and write and
                                +   * single-use transactions are not.
                                    * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -168,12 +179,13 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { ? com.google.spanner.v1.TransactionSelector.getDefaultInstance() : transaction_; } + /** * * *
                                -   * Read only snapshot transactions are supported, read/write and single use
                                -   * transactions are not.
                                +   * Read-only snapshot transactions are supported, read and write and
                                +   * single-use transactions are not.
                                    * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -189,22 +201,24 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde @SuppressWarnings("serial") private volatile java.lang.Object sql_ = ""; + /** * * *
                                -   * Required. The query request to generate partitions for. The request will
                                -   * fail if the query is not root partitionable. For a query to be root
                                +   * Required. The query request to generate partitions for. The request fails
                                +   * if the query isn't root partitionable. For a query to be root
                                    * partitionable, it needs to satisfy a few conditions. For example, if the
                                    * query execution plan contains a distributed union operator, then it must be
                                    * the first operator in the plan. For more information about other
                                    * conditions, see [Read data in
                                    * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                    *
                                -   * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -   * DELETE. Use
                                -   * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -   * PartitionedDml transaction for large, partition-friendly DML operations.
                                +   * The query request must not contain DML commands, such as `INSERT`,
                                +   * `UPDATE`, or `DELETE`. Use
                                +   * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +   * a `PartitionedDml` transaction for large, partition-friendly DML
                                +   * operations.
                                    * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -223,22 +237,24 @@ public java.lang.String getSql() { return s; } } + /** * * *
                                -   * Required. The query request to generate partitions for. The request will
                                -   * fail if the query is not root partitionable. For a query to be root
                                +   * Required. The query request to generate partitions for. The request fails
                                +   * if the query isn't root partitionable. For a query to be root
                                    * partitionable, it needs to satisfy a few conditions. For example, if the
                                    * query execution plan contains a distributed union operator, then it must be
                                    * the first operator in the plan. For more information about other
                                    * conditions, see [Read data in
                                    * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                    *
                                -   * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -   * DELETE. Use
                                -   * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -   * PartitionedDml transaction for large, partition-friendly DML operations.
                                +   * The query request must not contain DML commands, such as `INSERT`,
                                +   * `UPDATE`, or `DELETE`. Use
                                +   * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +   * a `PartitionedDml` transaction for large, partition-friendly DML
                                +   * operations.
                                    * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -260,25 +276,27 @@ public com.google.protobuf.ByteString getSqlBytes() { public static final int PARAMS_FIELD_NUMBER = 4; private com.google.protobuf.Struct params_; + /** * * *
                                -   * Parameter names and values that bind to placeholders in the SQL string.
                                +   * Optional. Parameter names and values that bind to placeholders in the SQL
                                +   * string.
                                    *
                                    * A parameter placeholder consists of the `@` character followed by the
                                    * parameter name (for example, `@firstName`). Parameter names can contain
                                    * letters, numbers, and underscores.
                                    *
                                -   * Parameters can appear anywhere that a literal value is expected.  The same
                                +   * Parameters can appear anywhere that a literal value is expected. The same
                                    * parameter name can be used more than once, for example:
                                    *
                                    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                    *
                                -   * It is an error to execute a SQL statement with unbound parameters.
                                +   * It's an error to execute a SQL statement with unbound parameters.
                                    * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; * * @return Whether the params field is set. */ @@ -286,25 +304,27 @@ public com.google.protobuf.ByteString getSqlBytes() { public boolean hasParams() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -   * Parameter names and values that bind to placeholders in the SQL string.
                                +   * Optional. Parameter names and values that bind to placeholders in the SQL
                                +   * string.
                                    *
                                    * A parameter placeholder consists of the `@` character followed by the
                                    * parameter name (for example, `@firstName`). Parameter names can contain
                                    * letters, numbers, and underscores.
                                    *
                                -   * Parameters can appear anywhere that a literal value is expected.  The same
                                +   * Parameters can appear anywhere that a literal value is expected. The same
                                    * parameter name can be used more than once, for example:
                                    *
                                    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                    *
                                -   * It is an error to execute a SQL statement with unbound parameters.
                                +   * It's an error to execute a SQL statement with unbound parameters.
                                    * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; * * @return The params. */ @@ -312,25 +332,27 @@ public boolean hasParams() { public com.google.protobuf.Struct getParams() { return params_ == null ? com.google.protobuf.Struct.getDefaultInstance() : params_; } + /** * * *
                                -   * Parameter names and values that bind to placeholders in the SQL string.
                                +   * Optional. Parameter names and values that bind to placeholders in the SQL
                                +   * string.
                                    *
                                    * A parameter placeholder consists of the `@` character followed by the
                                    * parameter name (for example, `@firstName`). Parameter names can contain
                                    * letters, numbers, and underscores.
                                    *
                                -   * Parameters can appear anywhere that a literal value is expected.  The same
                                +   * Parameters can appear anywhere that a literal value is expected. The same
                                    * parameter name can be used more than once, for example:
                                    *
                                    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                    *
                                -   * It is an error to execute a SQL statement with unbound parameters.
                                +   * It's an error to execute a SQL statement with unbound parameters.
                                    * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ @java.lang.Override public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { @@ -366,13 +388,14 @@ private static final class ParamTypesDefaultEntryHolder { public int getParamTypesCount() { return internalGetParamTypes().getMap().size(); } + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -381,7 +404,9 @@ public int getParamTypesCount() {
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public boolean containsParamTypes(java.lang.String key) { @@ -390,19 +415,21 @@ public boolean containsParamTypes(java.lang.String key) { } return internalGetParamTypes().getMap().containsKey(key); } + /** Use {@link #getParamTypesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getParamTypes() { return getParamTypesMap(); } + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -411,19 +438,22 @@ public java.util.Map getParamTypes
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public java.util.Map getParamTypesMap() { return internalGetParamTypes().getMap(); } + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -432,7 +462,9 @@ public java.util.Map getParamTypes
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public /* nullable */ com.google.spanner.v1.Type getParamTypesOrDefault( @@ -446,13 +478,14 @@ public java.util.Map getParamTypes internalGetParamTypes().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -461,7 +494,9 @@ public java.util.Map getParamTypes
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public com.google.spanner.v1.Type getParamTypesOrThrow(java.lang.String key) { @@ -478,6 +513,7 @@ public com.google.spanner.v1.Type getParamTypesOrThrow(java.lang.String key) { public static final int PARTITION_OPTIONS_FIELD_NUMBER = 6; private com.google.spanner.v1.PartitionOptions partitionOptions_; + /** * * @@ -493,6 +529,7 @@ public com.google.spanner.v1.Type getParamTypesOrThrow(java.lang.String key) { public boolean hasPartitionOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -510,6 +547,7 @@ public com.google.spanner.v1.PartitionOptions getPartitionOptions() { ? com.google.spanner.v1.PartitionOptions.getDefaultInstance() : partitionOptions_; } + /** * * @@ -540,19 +578,19 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, sql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, sql_); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(4, getParams()); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetParamTypes(), ParamTypesDefaultEntryHolder.defaultEntry, 5); if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(6, getPartitionOptions()); @@ -566,14 +604,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sql_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, sql_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sql_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, sql_); } if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getParams()); @@ -695,38 +733,38 @@ public static com.google.spanner.v1.PartitionQueryRequest parseFrom( public static com.google.spanner.v1.PartitionQueryRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionQueryRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionQueryRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionQueryRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionQueryRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionQueryRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -749,10 +787,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -762,7 +801,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.PartitionQueryRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PartitionQueryRequest) com.google.spanner.v1.PartitionQueryRequestOrBuilder { @@ -794,7 +833,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionQueryRequest_fieldAccessorTable @@ -808,16 +847,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTransactionFieldBuilder(); - getParamsFieldBuilder(); - getPartitionOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTransactionFieldBuilder(); + internalGetParamsFieldBuilder(); + internalGetPartitionOptionsFieldBuilder(); } } @@ -907,39 +946,6 @@ private void buildPartial0(com.google.spanner.v1.PartitionQueryRequest result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.PartitionQueryRequest) { @@ -1007,7 +1013,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTransactionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -1019,7 +1026,7 @@ public Builder mergeFrom( } // case 26 case 34: { - input.readMessage(getParamsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetParamsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -1039,7 +1046,7 @@ public Builder mergeFrom( case 50: { input.readMessage( - getPartitionOptionsFieldBuilder().getBuilder(), extensionRegistry); + internalGetPartitionOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 50 @@ -1063,6 +1070,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -1087,6 +1095,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -1111,6 +1120,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1134,6 +1144,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1153,6 +1164,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -1179,17 +1191,18 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.TransactionSelector transaction_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> transactionBuilder_; + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1199,12 +1212,13 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1220,12 +1234,13 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { return transactionBuilder_.getMessage(); } } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1243,12 +1258,13 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { onChanged(); return this; } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1264,12 +1280,13 @@ public Builder setTransaction( onChanged(); return this; } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1292,12 +1309,13 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) } return this; } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1312,12 +1330,13 @@ public Builder clearTransaction() { onChanged(); return this; } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1325,14 +1344,15 @@ public Builder clearTransaction() { public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTransactionFieldBuilder().getBuilder(); + return internalGetTransactionFieldBuilder().getBuilder(); } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -1346,24 +1366,25 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde : transaction_; } } + /** * * *
                                -     * Read only snapshot transactions are supported, read/write and single use
                                -     * transactions are not.
                                +     * Read-only snapshot transactions are supported, read and write and
                                +     * single-use transactions are not.
                                      * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> - getTransactionFieldBuilder() { + internalGetTransactionFieldBuilder() { if (transactionBuilder_ == null) { transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder>( @@ -1374,22 +1395,24 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde } private java.lang.Object sql_ = ""; + /** * * *
                                -     * Required. The query request to generate partitions for. The request will
                                -     * fail if the query is not root partitionable. For a query to be root
                                +     * Required. The query request to generate partitions for. The request fails
                                +     * if the query isn't root partitionable. For a query to be root
                                      * partitionable, it needs to satisfy a few conditions. For example, if the
                                      * query execution plan contains a distributed union operator, then it must be
                                      * the first operator in the plan. For more information about other
                                      * conditions, see [Read data in
                                      * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                      *
                                -     * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -     * DELETE. Use
                                -     * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -     * PartitionedDml transaction for large, partition-friendly DML operations.
                                +     * The query request must not contain DML commands, such as `INSERT`,
                                +     * `UPDATE`, or `DELETE`. Use
                                +     * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +     * a `PartitionedDml` transaction for large, partition-friendly DML
                                +     * operations.
                                      * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -1407,22 +1430,24 @@ public java.lang.String getSql() { return (java.lang.String) ref; } } + /** * * *
                                -     * Required. The query request to generate partitions for. The request will
                                -     * fail if the query is not root partitionable. For a query to be root
                                +     * Required. The query request to generate partitions for. The request fails
                                +     * if the query isn't root partitionable. For a query to be root
                                      * partitionable, it needs to satisfy a few conditions. For example, if the
                                      * query execution plan contains a distributed union operator, then it must be
                                      * the first operator in the plan. For more information about other
                                      * conditions, see [Read data in
                                      * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                      *
                                -     * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -     * DELETE. Use
                                -     * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -     * PartitionedDml transaction for large, partition-friendly DML operations.
                                +     * The query request must not contain DML commands, such as `INSERT`,
                                +     * `UPDATE`, or `DELETE`. Use
                                +     * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +     * a `PartitionedDml` transaction for large, partition-friendly DML
                                +     * operations.
                                      * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -1440,22 +1465,24 @@ public com.google.protobuf.ByteString getSqlBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                -     * Required. The query request to generate partitions for. The request will
                                -     * fail if the query is not root partitionable. For a query to be root
                                +     * Required. The query request to generate partitions for. The request fails
                                +     * if the query isn't root partitionable. For a query to be root
                                      * partitionable, it needs to satisfy a few conditions. For example, if the
                                      * query execution plan contains a distributed union operator, then it must be
                                      * the first operator in the plan. For more information about other
                                      * conditions, see [Read data in
                                      * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                      *
                                -     * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -     * DELETE. Use
                                -     * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -     * PartitionedDml transaction for large, partition-friendly DML operations.
                                +     * The query request must not contain DML commands, such as `INSERT`,
                                +     * `UPDATE`, or `DELETE`. Use
                                +     * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +     * a `PartitionedDml` transaction for large, partition-friendly DML
                                +     * operations.
                                      * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -1472,22 +1499,24 @@ public Builder setSql(java.lang.String value) { onChanged(); return this; } + /** * * *
                                -     * Required. The query request to generate partitions for. The request will
                                -     * fail if the query is not root partitionable. For a query to be root
                                +     * Required. The query request to generate partitions for. The request fails
                                +     * if the query isn't root partitionable. For a query to be root
                                      * partitionable, it needs to satisfy a few conditions. For example, if the
                                      * query execution plan contains a distributed union operator, then it must be
                                      * the first operator in the plan. For more information about other
                                      * conditions, see [Read data in
                                      * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                      *
                                -     * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -     * DELETE. Use
                                -     * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -     * PartitionedDml transaction for large, partition-friendly DML operations.
                                +     * The query request must not contain DML commands, such as `INSERT`,
                                +     * `UPDATE`, or `DELETE`. Use
                                +     * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +     * a `PartitionedDml` transaction for large, partition-friendly DML
                                +     * operations.
                                      * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -1500,22 +1529,24 @@ public Builder clearSql() { onChanged(); return this; } + /** * * *
                                -     * Required. The query request to generate partitions for. The request will
                                -     * fail if the query is not root partitionable. For a query to be root
                                +     * Required. The query request to generate partitions for. The request fails
                                +     * if the query isn't root partitionable. For a query to be root
                                      * partitionable, it needs to satisfy a few conditions. For example, if the
                                      * query execution plan contains a distributed union operator, then it must be
                                      * the first operator in the plan. For more information about other
                                      * conditions, see [Read data in
                                      * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                      *
                                -     * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -     * DELETE. Use
                                -     * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -     * PartitionedDml transaction for large, partition-friendly DML operations.
                                +     * The query request must not contain DML commands, such as `INSERT`,
                                +     * `UPDATE`, or `DELETE`. Use
                                +     * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +     * a `PartitionedDml` transaction for large, partition-friendly DML
                                +     * operations.
                                      * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -1535,55 +1566,59 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.Struct params_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> paramsBuilder_; + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; * * @return Whether the params field is set. */ public boolean hasParams() { return ((bitField0_ & 0x00000008) != 0); } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; * * @return The params. */ @@ -1594,25 +1629,27 @@ public com.google.protobuf.Struct getParams() { return paramsBuilder_.getMessage(); } } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ public Builder setParams(com.google.protobuf.Struct value) { if (paramsBuilder_ == null) { @@ -1627,25 +1664,27 @@ public Builder setParams(com.google.protobuf.Struct value) { onChanged(); return this; } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { if (paramsBuilder_ == null) { @@ -1657,25 +1696,27 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { onChanged(); return this; } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ public Builder mergeParams(com.google.protobuf.Struct value) { if (paramsBuilder_ == null) { @@ -1695,25 +1736,27 @@ public Builder mergeParams(com.google.protobuf.Struct value) { } return this; } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ public Builder clearParams() { bitField0_ = (bitField0_ & ~0x00000008); @@ -1725,50 +1768,54 @@ public Builder clearParams() { onChanged(); return this; } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ public com.google.protobuf.Struct.Builder getParamsBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getParamsFieldBuilder().getBuilder(); + return internalGetParamsFieldBuilder().getBuilder(); } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { if (paramsBuilder_ != null) { @@ -1777,34 +1824,36 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { return params_ == null ? com.google.protobuf.Struct.getDefaultInstance() : params_; } } + /** * * *
                                -     * Parameter names and values that bind to placeholders in the SQL string.
                                +     * Optional. Parameter names and values that bind to placeholders in the SQL
                                +     * string.
                                      *
                                      * A parameter placeholder consists of the `@` character followed by the
                                      * parameter name (for example, `@firstName`). Parameter names can contain
                                      * letters, numbers, and underscores.
                                      *
                                -     * Parameters can appear anywhere that a literal value is expected.  The same
                                +     * Parameters can appear anywhere that a literal value is expected. The same
                                      * parameter name can be used more than once, for example:
                                      *
                                      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                      *
                                -     * It is an error to execute a SQL statement with unbound parameters.
                                +     * It's an error to execute a SQL statement with unbound parameters.
                                      * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> - getParamsFieldBuilder() { + internalGetParamsFieldBuilder() { if (paramsBuilder_ == null) { paramsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>( @@ -1830,7 +1879,8 @@ public com.google.spanner.v1.Type build(com.google.spanner.v1.TypeOrBuilder val) defaultEntry() { return ParamTypesDefaultEntryHolder.defaultEntry; } - }; + } + ; private static final ParamTypesConverter paramTypesConverter = new ParamTypesConverter(); @@ -1870,13 +1920,14 @@ public com.google.spanner.v1.Type build(com.google.spanner.v1.TypeOrBuilder val) public int getParamTypesCount() { return internalGetParamTypes().ensureBuilderMap().size(); } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -1885,7 +1936,9 @@ public int getParamTypesCount() {
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public boolean containsParamTypes(java.lang.String key) { @@ -1894,19 +1947,21 @@ public boolean containsParamTypes(java.lang.String key) { } return internalGetParamTypes().ensureBuilderMap().containsKey(key); } + /** Use {@link #getParamTypesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getParamTypes() { return getParamTypesMap(); } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -1915,19 +1970,22 @@ public java.util.Map getParamTypes
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public java.util.Map getParamTypesMap() { return internalGetParamTypes().getImmutableMap(); } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -1936,7 +1994,9 @@ public java.util.Map getParamTypes
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public /* nullable */ com.google.spanner.v1.Type getParamTypesOrDefault( @@ -1950,13 +2010,14 @@ public java.util.Map getParamTypes internalGetMutableParamTypes().ensureBuilderMap(); return map.containsKey(key) ? paramTypesConverter.build(map.get(key)) : defaultValue; } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -1965,7 +2026,9 @@ public java.util.Map getParamTypes
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ @java.lang.Override public com.google.spanner.v1.Type getParamTypesOrThrow(java.lang.String key) { @@ -1985,13 +2048,14 @@ public Builder clearParamTypes() { internalGetMutableParamTypes().clear(); return this; } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -2000,7 +2064,9 @@ public Builder clearParamTypes() {
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ public Builder removeParamTypes(java.lang.String key) { if (key == null) { @@ -2009,19 +2075,21 @@ public Builder removeParamTypes(java.lang.String key) { internalGetMutableParamTypes().ensureBuilderMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map getMutableParamTypes() { bitField0_ |= 0x00000010; return internalGetMutableParamTypes().ensureMessageMap(); } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -2030,7 +2098,9 @@ public java.util.Map getMutablePar
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type value) { if (key == null) { @@ -2043,13 +2113,14 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va bitField0_ |= 0x00000010; return this; } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -2058,7 +2129,9 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ public Builder putAllParamTypes( java.util.Map values) { @@ -2072,13 +2145,14 @@ public Builder putAllParamTypes( bitField0_ |= 0x00000010; return this; } + /** * * *
                                -     * It is not always possible for Cloud Spanner to infer the right SQL type
                                -     * from a JSON value.  For example, values of type `BYTES` and values
                                -     * of type `STRING` both appear in
                                +     * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +     * type from a JSON value. For example, values of type `BYTES` and values of
                                +     * type `STRING` both appear in
                                      * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                      *
                                      * In these cases, `param_types` can be used to specify the exact
                                @@ -2087,7 +2161,9 @@ public Builder putAllParamTypes(
                                      * about SQL types.
                                      * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ public com.google.spanner.v1.Type.Builder putParamTypesBuilderIfAbsent(java.lang.String key) { java.util.Map builderMap = @@ -2105,11 +2181,12 @@ public com.google.spanner.v1.Type.Builder putParamTypesBuilderIfAbsent(java.lang } private com.google.spanner.v1.PartitionOptions partitionOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PartitionOptions, com.google.spanner.v1.PartitionOptions.Builder, com.google.spanner.v1.PartitionOptionsOrBuilder> partitionOptionsBuilder_; + /** * * @@ -2124,6 +2201,7 @@ public com.google.spanner.v1.Type.Builder putParamTypesBuilderIfAbsent(java.lang public boolean hasPartitionOptions() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -2144,6 +2222,7 @@ public com.google.spanner.v1.PartitionOptions getPartitionOptions() { return partitionOptionsBuilder_.getMessage(); } } + /** * * @@ -2166,6 +2245,7 @@ public Builder setPartitionOptions(com.google.spanner.v1.PartitionOptions value) onChanged(); return this; } + /** * * @@ -2186,6 +2266,7 @@ public Builder setPartitionOptions( onChanged(); return this; } + /** * * @@ -2213,6 +2294,7 @@ public Builder mergePartitionOptions(com.google.spanner.v1.PartitionOptions valu } return this; } + /** * * @@ -2232,6 +2314,7 @@ public Builder clearPartitionOptions() { onChanged(); return this; } + /** * * @@ -2244,8 +2327,9 @@ public Builder clearPartitionOptions() { public com.google.spanner.v1.PartitionOptions.Builder getPartitionOptionsBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getPartitionOptionsFieldBuilder().getBuilder(); + return internalGetPartitionOptionsFieldBuilder().getBuilder(); } + /** * * @@ -2264,6 +2348,7 @@ public com.google.spanner.v1.PartitionOptionsOrBuilder getPartitionOptionsOrBuil : partitionOptions_; } } + /** * * @@ -2273,14 +2358,14 @@ public com.google.spanner.v1.PartitionOptionsOrBuilder getPartitionOptionsOrBuil * * .google.spanner.v1.PartitionOptions partition_options = 6; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PartitionOptions, com.google.spanner.v1.PartitionOptions.Builder, com.google.spanner.v1.PartitionOptionsOrBuilder> - getPartitionOptionsFieldBuilder() { + internalGetPartitionOptionsFieldBuilder() { if (partitionOptionsBuilder_ == null) { partitionOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PartitionOptions, com.google.spanner.v1.PartitionOptions.Builder, com.google.spanner.v1.PartitionOptionsOrBuilder>( @@ -2290,17 +2375,6 @@ public com.google.spanner.v1.PartitionOptionsOrBuilder getPartitionOptionsOrBuil return partitionOptionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.PartitionQueryRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java index cb9db5d4d56..c03b0b2e6af 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface PartitionQueryRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.PartitionQueryRequest) @@ -38,6 +40,7 @@ public interface PartitionQueryRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -57,8 +60,8 @@ public interface PartitionQueryRequestOrBuilder * * *
                                -   * Read only snapshot transactions are supported, read/write and single use
                                -   * transactions are not.
                                +   * Read-only snapshot transactions are supported, read and write and
                                +   * single-use transactions are not.
                                    * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -66,12 +69,13 @@ public interface PartitionQueryRequestOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * *
                                -   * Read only snapshot transactions are supported, read/write and single use
                                -   * transactions are not.
                                +   * Read-only snapshot transactions are supported, read and write and
                                +   * single-use transactions are not.
                                    * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -79,12 +83,13 @@ public interface PartitionQueryRequestOrBuilder * @return The transaction. */ com.google.spanner.v1.TransactionSelector getTransaction(); + /** * * *
                                -   * Read only snapshot transactions are supported, read/write and single use
                                -   * transactions are not.
                                +   * Read-only snapshot transactions are supported, read and write and
                                +   * single-use transactions are not.
                                    * 
                                * * .google.spanner.v1.TransactionSelector transaction = 2; @@ -95,18 +100,19 @@ public interface PartitionQueryRequestOrBuilder * * *
                                -   * Required. The query request to generate partitions for. The request will
                                -   * fail if the query is not root partitionable. For a query to be root
                                +   * Required. The query request to generate partitions for. The request fails
                                +   * if the query isn't root partitionable. For a query to be root
                                    * partitionable, it needs to satisfy a few conditions. For example, if the
                                    * query execution plan contains a distributed union operator, then it must be
                                    * the first operator in the plan. For more information about other
                                    * conditions, see [Read data in
                                    * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                    *
                                -   * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -   * DELETE. Use
                                -   * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -   * PartitionedDml transaction for large, partition-friendly DML operations.
                                +   * The query request must not contain DML commands, such as `INSERT`,
                                +   * `UPDATE`, or `DELETE`. Use
                                +   * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +   * a `PartitionedDml` transaction for large, partition-friendly DML
                                +   * operations.
                                    * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -114,22 +120,24 @@ public interface PartitionQueryRequestOrBuilder * @return The sql. */ java.lang.String getSql(); + /** * * *
                                -   * Required. The query request to generate partitions for. The request will
                                -   * fail if the query is not root partitionable. For a query to be root
                                +   * Required. The query request to generate partitions for. The request fails
                                +   * if the query isn't root partitionable. For a query to be root
                                    * partitionable, it needs to satisfy a few conditions. For example, if the
                                    * query execution plan contains a distributed union operator, then it must be
                                    * the first operator in the plan. For more information about other
                                    * conditions, see [Read data in
                                    * parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
                                    *
                                -   * The query request must not contain DML commands, such as INSERT, UPDATE, or
                                -   * DELETE. Use
                                -   * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
                                -   * PartitionedDml transaction for large, partition-friendly DML operations.
                                +   * The query request must not contain DML commands, such as `INSERT`,
                                +   * `UPDATE`, or `DELETE`. Use
                                +   * [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with
                                +   * a `PartitionedDml` transaction for large, partition-friendly DML
                                +   * operations.
                                    * 
                                * * string sql = 3 [(.google.api.field_behavior) = REQUIRED]; @@ -142,67 +150,72 @@ public interface PartitionQueryRequestOrBuilder * * *
                                -   * Parameter names and values that bind to placeholders in the SQL string.
                                +   * Optional. Parameter names and values that bind to placeholders in the SQL
                                +   * string.
                                    *
                                    * A parameter placeholder consists of the `@` character followed by the
                                    * parameter name (for example, `@firstName`). Parameter names can contain
                                    * letters, numbers, and underscores.
                                    *
                                -   * Parameters can appear anywhere that a literal value is expected.  The same
                                +   * Parameters can appear anywhere that a literal value is expected. The same
                                    * parameter name can be used more than once, for example:
                                    *
                                    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                    *
                                -   * It is an error to execute a SQL statement with unbound parameters.
                                +   * It's an error to execute a SQL statement with unbound parameters.
                                    * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; * * @return Whether the params field is set. */ boolean hasParams(); + /** * * *
                                -   * Parameter names and values that bind to placeholders in the SQL string.
                                +   * Optional. Parameter names and values that bind to placeholders in the SQL
                                +   * string.
                                    *
                                    * A parameter placeholder consists of the `@` character followed by the
                                    * parameter name (for example, `@firstName`). Parameter names can contain
                                    * letters, numbers, and underscores.
                                    *
                                -   * Parameters can appear anywhere that a literal value is expected.  The same
                                +   * Parameters can appear anywhere that a literal value is expected. The same
                                    * parameter name can be used more than once, for example:
                                    *
                                    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                    *
                                -   * It is an error to execute a SQL statement with unbound parameters.
                                +   * It's an error to execute a SQL statement with unbound parameters.
                                    * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; * * @return The params. */ com.google.protobuf.Struct getParams(); + /** * * *
                                -   * Parameter names and values that bind to placeholders in the SQL string.
                                +   * Optional. Parameter names and values that bind to placeholders in the SQL
                                +   * string.
                                    *
                                    * A parameter placeholder consists of the `@` character followed by the
                                    * parameter name (for example, `@firstName`). Parameter names can contain
                                    * letters, numbers, and underscores.
                                    *
                                -   * Parameters can appear anywhere that a literal value is expected.  The same
                                +   * Parameters can appear anywhere that a literal value is expected. The same
                                    * parameter name can be used more than once, for example:
                                    *
                                    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
                                    *
                                -   * It is an error to execute a SQL statement with unbound parameters.
                                +   * It's an error to execute a SQL statement with unbound parameters.
                                    * 
                                * - * .google.protobuf.Struct params = 4; + * .google.protobuf.Struct params = 4 [(.google.api.field_behavior) = OPTIONAL]; */ com.google.protobuf.StructOrBuilder getParamsOrBuilder(); @@ -210,9 +223,9 @@ public interface PartitionQueryRequestOrBuilder * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -221,16 +234,19 @@ public interface PartitionQueryRequestOrBuilder
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ int getParamTypesCount(); + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -239,19 +255,23 @@ public interface PartitionQueryRequestOrBuilder
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ boolean containsParamTypes(java.lang.String key); + /** Use {@link #getParamTypesMap()} instead. */ @java.lang.Deprecated java.util.Map getParamTypes(); + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -260,16 +280,19 @@ public interface PartitionQueryRequestOrBuilder
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ java.util.Map getParamTypesMap(); + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -278,20 +301,23 @@ public interface PartitionQueryRequestOrBuilder
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ /* nullable */ com.google.spanner.v1.Type getParamTypesOrDefault( java.lang.String key, /* nullable */ com.google.spanner.v1.Type defaultValue); + /** * * *
                                -   * It is not always possible for Cloud Spanner to infer the right SQL type
                                -   * from a JSON value.  For example, values of type `BYTES` and values
                                -   * of type `STRING` both appear in
                                +   * Optional. It isn't always possible for Cloud Spanner to infer the right SQL
                                +   * type from a JSON value. For example, values of type `BYTES` and values of
                                +   * type `STRING` both appear in
                                    * [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings.
                                    *
                                    * In these cases, `param_types` can be used to specify the exact
                                @@ -300,7 +326,9 @@ com.google.spanner.v1.Type getParamTypesOrDefault(
                                    * about SQL types.
                                    * 
                                * - * map<string, .google.spanner.v1.Type> param_types = 5; + * + * map<string, .google.spanner.v1.Type> param_types = 5 [(.google.api.field_behavior) = OPTIONAL]; + * */ com.google.spanner.v1.Type getParamTypesOrThrow(java.lang.String key); @@ -316,6 +344,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return Whether the partitionOptions field is set. */ boolean hasPartitionOptions(); + /** * * @@ -328,6 +357,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return The partitionOptions. */ com.google.spanner.v1.PartitionOptions getPartitionOptions(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java index 99f475d105d..e3880e91f1b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.PartitionReadRequest} */ -public final class PartitionReadRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class PartitionReadRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PartitionReadRequest) PartitionReadRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionReadRequest"); + } + // Use PartitionReadRequest.newBuilder() to construct. - private PartitionReadRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PartitionReadRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,19 +58,13 @@ private PartitionReadRequest() { columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PartitionReadRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionReadRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionReadRequest_fieldAccessorTable @@ -71,6 +78,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -96,6 +104,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -124,6 +133,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public static final int TRANSACTION_FIELD_NUMBER = 2; private com.google.spanner.v1.TransactionSelector transaction_; + /** * * @@ -140,6 +150,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public boolean hasTransaction() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -158,6 +169,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { ? com.google.spanner.v1.TransactionSelector.getDefaultInstance() : transaction_; } + /** * * @@ -179,6 +191,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -202,6 +215,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -230,6 +244,7 @@ public com.google.protobuf.ByteString getTableBytes() { @SuppressWarnings("serial") private volatile java.lang.Object index_ = ""; + /** * * @@ -258,6 +273,7 @@ public java.lang.String getIndex() { return s; } } + /** * * @@ -292,6 +308,7 @@ public com.google.protobuf.ByteString getIndexBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -307,6 +324,7 @@ public com.google.protobuf.ByteString getIndexBytes() { public com.google.protobuf.ProtocolStringList getColumnsList() { return columns_; } + /** * * @@ -322,6 +340,7 @@ public com.google.protobuf.ProtocolStringList getColumnsList() { public int getColumnsCount() { return columns_.size(); } + /** * * @@ -338,6 +357,7 @@ public int getColumnsCount() { public java.lang.String getColumns(int index) { return columns_.get(index); } + /** * * @@ -357,6 +377,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { public static final int KEY_SET_FIELD_NUMBER = 6; private com.google.spanner.v1.KeySet keySet_; + /** * * @@ -369,7 +390,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -381,6 +402,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { public boolean hasKeySet() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -393,7 +415,7 @@ public boolean hasKeySet() { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -405,6 +427,7 @@ public boolean hasKeySet() { public com.google.spanner.v1.KeySet getKeySet() { return keySet_ == null ? com.google.spanner.v1.KeySet.getDefaultInstance() : keySet_; } + /** * * @@ -417,7 +440,7 @@ public com.google.spanner.v1.KeySet getKeySet() { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -430,6 +453,7 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { public static final int PARTITION_OPTIONS_FIELD_NUMBER = 9; private com.google.spanner.v1.PartitionOptions partitionOptions_; + /** * * @@ -445,6 +469,7 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { public boolean hasPartitionOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -462,6 +487,7 @@ public com.google.spanner.v1.PartitionOptions getPartitionOptions() { ? com.google.spanner.v1.PartitionOptions.getDefaultInstance() : partitionOptions_; } + /** * * @@ -492,20 +518,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, table_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(index_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, index_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(index_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, index_); } for (int i = 0; i < columns_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, columns_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 5, columns_.getRaw(i)); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(6, getKeySet()); @@ -522,17 +548,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, table_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(index_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, index_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(index_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, index_); } { int dataSize = 0; @@ -655,38 +681,38 @@ public static com.google.spanner.v1.PartitionReadRequest parseFrom( public static com.google.spanner.v1.PartitionReadRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionReadRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionReadRequest parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionReadRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionReadRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionReadRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -709,10 +735,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -722,7 +749,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.PartitionReadRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PartitionReadRequest) com.google.spanner.v1.PartitionReadRequestOrBuilder { @@ -732,7 +759,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionReadRequest_fieldAccessorTable @@ -746,16 +773,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTransactionFieldBuilder(); - getKeySetFieldBuilder(); - getPartitionOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTransactionFieldBuilder(); + internalGetKeySetFieldBuilder(); + internalGetPartitionOptionsFieldBuilder(); } } @@ -849,39 +876,6 @@ private void buildPartial0(com.google.spanner.v1.PartitionReadRequest result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.PartitionReadRequest) { @@ -962,7 +956,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTransactionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -987,14 +982,14 @@ public Builder mergeFrom( } // case 42 case 50: { - input.readMessage(getKeySetFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetKeySetFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 50 case 74: { input.readMessage( - getPartitionOptionsFieldBuilder().getBuilder(), extensionRegistry); + internalGetPartitionOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000040; break; } // case 74 @@ -1018,6 +1013,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -1042,6 +1038,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -1066,6 +1063,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1089,6 +1087,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1108,6 +1107,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -1134,11 +1134,12 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.TransactionSelector transaction_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> transactionBuilder_; + /** * * @@ -1154,6 +1155,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1175,6 +1177,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { return transactionBuilder_.getMessage(); } } + /** * * @@ -1198,6 +1201,7 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { onChanged(); return this; } + /** * * @@ -1219,6 +1223,7 @@ public Builder setTransaction( onChanged(); return this; } + /** * * @@ -1247,6 +1252,7 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) } return this; } + /** * * @@ -1267,6 +1273,7 @@ public Builder clearTransaction() { onChanged(); return this; } + /** * * @@ -1280,8 +1287,9 @@ public Builder clearTransaction() { public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTransactionFieldBuilder().getBuilder(); + return internalGetTransactionFieldBuilder().getBuilder(); } + /** * * @@ -1301,6 +1309,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde : transaction_; } } + /** * * @@ -1311,14 +1320,14 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * * .google.spanner.v1.TransactionSelector transaction = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> - getTransactionFieldBuilder() { + internalGetTransactionFieldBuilder() { if (transactionBuilder_ == null) { transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder>( @@ -1329,6 +1338,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde } private java.lang.Object table_ = ""; + /** * * @@ -1351,6 +1361,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -1373,6 +1384,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1394,6 +1406,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1411,6 +1424,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -1435,6 +1449,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { } private java.lang.Object index_ = ""; + /** * * @@ -1462,6 +1477,7 @@ public java.lang.String getIndex() { return (java.lang.String) ref; } } + /** * * @@ -1489,6 +1505,7 @@ public com.google.protobuf.ByteString getIndexBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1515,6 +1532,7 @@ public Builder setIndex(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1537,6 +1555,7 @@ public Builder clearIndex() { onChanged(); return this; } + /** * * @@ -1574,6 +1593,7 @@ private void ensureColumnsIsMutable() { } bitField0_ |= 0x00000010; } + /** * * @@ -1590,6 +1610,7 @@ public com.google.protobuf.ProtocolStringList getColumnsList() { columns_.makeImmutable(); return columns_; } + /** * * @@ -1605,6 +1626,7 @@ public com.google.protobuf.ProtocolStringList getColumnsList() { public int getColumnsCount() { return columns_.size(); } + /** * * @@ -1621,6 +1643,7 @@ public int getColumnsCount() { public java.lang.String getColumns(int index) { return columns_.get(index); } + /** * * @@ -1637,6 +1660,7 @@ public java.lang.String getColumns(int index) { public com.google.protobuf.ByteString getColumnsBytes(int index) { return columns_.getByteString(index); } + /** * * @@ -1661,6 +1685,7 @@ public Builder setColumns(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -1684,6 +1709,7 @@ public Builder addColumns(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1704,6 +1730,7 @@ public Builder addAllColumns(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1723,6 +1750,7 @@ public Builder clearColumns() { onChanged(); return this; } + /** * * @@ -1749,11 +1777,12 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.KeySet keySet_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder> keySetBuilder_; + /** * * @@ -1766,7 +1795,7 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1777,6 +1806,7 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { public boolean hasKeySet() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -1789,7 +1819,7 @@ public boolean hasKeySet() { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1804,6 +1834,7 @@ public com.google.spanner.v1.KeySet getKeySet() { return keySetBuilder_.getMessage(); } } + /** * * @@ -1816,7 +1847,7 @@ public com.google.spanner.v1.KeySet getKeySet() { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1835,6 +1866,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { onChanged(); return this; } + /** * * @@ -1847,7 +1879,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1863,6 +1895,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -1875,7 +1908,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1899,6 +1932,7 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { } return this; } + /** * * @@ -1911,7 +1945,7 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1927,6 +1961,7 @@ public Builder clearKeySet() { onChanged(); return this; } + /** * * @@ -1939,7 +1974,7 @@ public Builder clearKeySet() { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1948,8 +1983,9 @@ public Builder clearKeySet() { public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getKeySetFieldBuilder().getBuilder(); + return internalGetKeySetFieldBuilder().getBuilder(); } + /** * * @@ -1962,7 +1998,7 @@ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -1975,6 +2011,7 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { return keySet_ == null ? com.google.spanner.v1.KeySet.getDefaultInstance() : keySet_; } } + /** * * @@ -1987,20 +2024,20 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * * .google.spanner.v1.KeySet key_set = 6 [(.google.api.field_behavior) = REQUIRED]; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder> - getKeySetFieldBuilder() { + internalGetKeySetFieldBuilder() { if (keySetBuilder_ == null) { keySetBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder>( @@ -2011,11 +2048,12 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { } private com.google.spanner.v1.PartitionOptions partitionOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PartitionOptions, com.google.spanner.v1.PartitionOptions.Builder, com.google.spanner.v1.PartitionOptionsOrBuilder> partitionOptionsBuilder_; + /** * * @@ -2030,6 +2068,7 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { public boolean hasPartitionOptions() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -2050,6 +2089,7 @@ public com.google.spanner.v1.PartitionOptions getPartitionOptions() { return partitionOptionsBuilder_.getMessage(); } } + /** * * @@ -2072,6 +2112,7 @@ public Builder setPartitionOptions(com.google.spanner.v1.PartitionOptions value) onChanged(); return this; } + /** * * @@ -2092,6 +2133,7 @@ public Builder setPartitionOptions( onChanged(); return this; } + /** * * @@ -2119,6 +2161,7 @@ public Builder mergePartitionOptions(com.google.spanner.v1.PartitionOptions valu } return this; } + /** * * @@ -2138,6 +2181,7 @@ public Builder clearPartitionOptions() { onChanged(); return this; } + /** * * @@ -2150,8 +2194,9 @@ public Builder clearPartitionOptions() { public com.google.spanner.v1.PartitionOptions.Builder getPartitionOptionsBuilder() { bitField0_ |= 0x00000040; onChanged(); - return getPartitionOptionsFieldBuilder().getBuilder(); + return internalGetPartitionOptionsFieldBuilder().getBuilder(); } + /** * * @@ -2170,6 +2215,7 @@ public com.google.spanner.v1.PartitionOptionsOrBuilder getPartitionOptionsOrBuil : partitionOptions_; } } + /** * * @@ -2179,14 +2225,14 @@ public com.google.spanner.v1.PartitionOptionsOrBuilder getPartitionOptionsOrBuil * * .google.spanner.v1.PartitionOptions partition_options = 9; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PartitionOptions, com.google.spanner.v1.PartitionOptions.Builder, com.google.spanner.v1.PartitionOptionsOrBuilder> - getPartitionOptionsFieldBuilder() { + internalGetPartitionOptionsFieldBuilder() { if (partitionOptionsBuilder_ == null) { partitionOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PartitionOptions, com.google.spanner.v1.PartitionOptions.Builder, com.google.spanner.v1.PartitionOptionsOrBuilder>( @@ -2196,17 +2242,6 @@ public com.google.spanner.v1.PartitionOptionsOrBuilder getPartitionOptionsOrBuil return partitionOptionsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.PartitionReadRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java index 6a88d89cc4d..506b61d7824 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface PartitionReadRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.PartitionReadRequest) @@ -38,6 +40,7 @@ public interface PartitionReadRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -66,6 +69,7 @@ public interface PartitionReadRequestOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -79,6 +83,7 @@ public interface PartitionReadRequestOrBuilder * @return The transaction. */ com.google.spanner.v1.TransactionSelector getTransaction(); + /** * * @@ -103,6 +108,7 @@ public interface PartitionReadRequestOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -133,6 +139,7 @@ public interface PartitionReadRequestOrBuilder * @return The index. */ java.lang.String getIndex(); + /** * * @@ -164,6 +171,7 @@ public interface PartitionReadRequestOrBuilder * @return A list containing the columns. */ java.util.List getColumnsList(); + /** * * @@ -177,6 +185,7 @@ public interface PartitionReadRequestOrBuilder * @return The count of columns. */ int getColumnsCount(); + /** * * @@ -191,6 +200,7 @@ public interface PartitionReadRequestOrBuilder * @return The columns at the given index. */ java.lang.String getColumns(int index); + /** * * @@ -218,7 +228,7 @@ public interface PartitionReadRequestOrBuilder * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -227,6 +237,7 @@ public interface PartitionReadRequestOrBuilder * @return Whether the keySet field is set. */ boolean hasKeySet(); + /** * * @@ -239,7 +250,7 @@ public interface PartitionReadRequestOrBuilder * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -248,6 +259,7 @@ public interface PartitionReadRequestOrBuilder * @return The keySet. */ com.google.spanner.v1.KeySet getKeySet(); + /** * * @@ -260,7 +272,7 @@ public interface PartitionReadRequestOrBuilder * [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -280,6 +292,7 @@ public interface PartitionReadRequestOrBuilder * @return Whether the partitionOptions field is set. */ boolean hasPartitionOptions(); + /** * * @@ -292,6 +305,7 @@ public interface PartitionReadRequestOrBuilder * @return The partitionOptions. */ com.google.spanner.v1.PartitionOptions getPartitionOptions(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java index 39ce19b3e14..47d8ccb7cb5 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.PartitionResponse} */ -public final class PartitionResponse extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class PartitionResponse extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PartitionResponse) PartitionResponseOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionResponse"); + } + // Use PartitionResponse.newBuilder() to construct. - private PartitionResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PartitionResponse(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private PartitionResponse() { partitions_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PartitionResponse(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionResponse_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionResponse_fieldAccessorTable @@ -69,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List partitions_; + /** * * @@ -82,6 +90,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getPartitionsList() { return partitions_; } + /** * * @@ -96,6 +105,7 @@ public java.util.List getPartitionsList() { getPartitionsOrBuilderList() { return partitions_; } + /** * * @@ -109,6 +119,7 @@ public java.util.List getPartitionsList() { public int getPartitionsCount() { return partitions_.size(); } + /** * * @@ -122,6 +133,7 @@ public int getPartitionsCount() { public com.google.spanner.v1.Partition getPartitions(int index) { return partitions_.get(index); } + /** * * @@ -138,6 +150,7 @@ public com.google.spanner.v1.PartitionOrBuilder getPartitionsOrBuilder(int index public static final int TRANSACTION_FIELD_NUMBER = 2; private com.google.spanner.v1.Transaction transaction_; + /** * * @@ -153,6 +166,7 @@ public com.google.spanner.v1.PartitionOrBuilder getPartitionsOrBuilder(int index public boolean hasTransaction() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -170,6 +184,7 @@ public com.google.spanner.v1.Transaction getTransaction() { ? com.google.spanner.v1.Transaction.getDefaultInstance() : transaction_; } + /** * * @@ -302,38 +317,38 @@ public static com.google.spanner.v1.PartitionResponse parseFrom( public static com.google.spanner.v1.PartitionResponse parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionResponse parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PartitionResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PartitionResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -356,10 +371,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -370,7 +386,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.PartitionResponse} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PartitionResponse) com.google.spanner.v1.PartitionResponseOrBuilder { @@ -380,7 +396,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionResponse_fieldAccessorTable @@ -394,15 +410,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getPartitionsFieldBuilder(); - getTransactionFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPartitionsFieldBuilder(); + internalGetTransactionFieldBuilder(); } } @@ -480,39 +496,6 @@ private void buildPartial0(com.google.spanner.v1.PartitionResponse result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.PartitionResponse) { @@ -544,8 +527,8 @@ public Builder mergeFrom(com.google.spanner.v1.PartitionResponse other) { partitions_ = other.partitions_; bitField0_ = (bitField0_ & ~0x00000001); partitionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getPartitionsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetPartitionsFieldBuilder() : null; } else { partitionsBuilder_.addAllMessages(other.partitions_); @@ -595,7 +578,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTransactionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -628,7 +612,7 @@ private void ensurePartitionsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Partition, com.google.spanner.v1.Partition.Builder, com.google.spanner.v1.PartitionOrBuilder> @@ -650,6 +634,7 @@ public java.util.List getPartitionsList() { return partitionsBuilder_.getMessageList(); } } + /** * * @@ -666,6 +651,7 @@ public int getPartitionsCount() { return partitionsBuilder_.getCount(); } } + /** * * @@ -682,6 +668,7 @@ public com.google.spanner.v1.Partition getPartitions(int index) { return partitionsBuilder_.getMessage(index); } } + /** * * @@ -704,6 +691,7 @@ public Builder setPartitions(int index, com.google.spanner.v1.Partition value) { } return this; } + /** * * @@ -724,6 +712,7 @@ public Builder setPartitions( } return this; } + /** * * @@ -746,6 +735,7 @@ public Builder addPartitions(com.google.spanner.v1.Partition value) { } return this; } + /** * * @@ -768,6 +758,7 @@ public Builder addPartitions(int index, com.google.spanner.v1.Partition value) { } return this; } + /** * * @@ -787,6 +778,7 @@ public Builder addPartitions(com.google.spanner.v1.Partition.Builder builderForV } return this; } + /** * * @@ -807,6 +799,7 @@ public Builder addPartitions( } return this; } + /** * * @@ -827,6 +820,7 @@ public Builder addAllPartitions( } return this; } + /** * * @@ -846,6 +840,7 @@ public Builder clearPartitions() { } return this; } + /** * * @@ -865,6 +860,7 @@ public Builder removePartitions(int index) { } return this; } + /** * * @@ -875,8 +871,9 @@ public Builder removePartitions(int index) { * repeated .google.spanner.v1.Partition partitions = 1; */ public com.google.spanner.v1.Partition.Builder getPartitionsBuilder(int index) { - return getPartitionsFieldBuilder().getBuilder(index); + return internalGetPartitionsFieldBuilder().getBuilder(index); } + /** * * @@ -893,6 +890,7 @@ public com.google.spanner.v1.PartitionOrBuilder getPartitionsOrBuilder(int index return partitionsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -910,6 +908,7 @@ public com.google.spanner.v1.PartitionOrBuilder getPartitionsOrBuilder(int index return java.util.Collections.unmodifiableList(partitions_); } } + /** * * @@ -920,9 +919,10 @@ public com.google.spanner.v1.PartitionOrBuilder getPartitionsOrBuilder(int index * repeated .google.spanner.v1.Partition partitions = 1; */ public com.google.spanner.v1.Partition.Builder addPartitionsBuilder() { - return getPartitionsFieldBuilder() + return internalGetPartitionsFieldBuilder() .addBuilder(com.google.spanner.v1.Partition.getDefaultInstance()); } + /** * * @@ -933,9 +933,10 @@ public com.google.spanner.v1.Partition.Builder addPartitionsBuilder() { * repeated .google.spanner.v1.Partition partitions = 1; */ public com.google.spanner.v1.Partition.Builder addPartitionsBuilder(int index) { - return getPartitionsFieldBuilder() + return internalGetPartitionsFieldBuilder() .addBuilder(index, com.google.spanner.v1.Partition.getDefaultInstance()); } + /** * * @@ -946,17 +947,17 @@ public com.google.spanner.v1.Partition.Builder addPartitionsBuilder(int index) { * repeated .google.spanner.v1.Partition partitions = 1; */ public java.util.List getPartitionsBuilderList() { - return getPartitionsFieldBuilder().getBuilderList(); + return internalGetPartitionsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Partition, com.google.spanner.v1.Partition.Builder, com.google.spanner.v1.PartitionOrBuilder> - getPartitionsFieldBuilder() { + internalGetPartitionsFieldBuilder() { if (partitionsBuilder_ == null) { partitionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.Partition, com.google.spanner.v1.Partition.Builder, com.google.spanner.v1.PartitionOrBuilder>( @@ -967,11 +968,12 @@ public java.util.List getPartitionsBuil } private com.google.spanner.v1.Transaction transaction_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Transaction, com.google.spanner.v1.Transaction.Builder, com.google.spanner.v1.TransactionOrBuilder> transactionBuilder_; + /** * * @@ -986,6 +988,7 @@ public java.util.List getPartitionsBuil public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1006,6 +1009,7 @@ public com.google.spanner.v1.Transaction getTransaction() { return transactionBuilder_.getMessage(); } } + /** * * @@ -1028,6 +1032,7 @@ public Builder setTransaction(com.google.spanner.v1.Transaction value) { onChanged(); return this; } + /** * * @@ -1047,6 +1052,7 @@ public Builder setTransaction(com.google.spanner.v1.Transaction.Builder builderF onChanged(); return this; } + /** * * @@ -1074,6 +1080,7 @@ public Builder mergeTransaction(com.google.spanner.v1.Transaction value) { } return this; } + /** * * @@ -1093,6 +1100,7 @@ public Builder clearTransaction() { onChanged(); return this; } + /** * * @@ -1105,8 +1113,9 @@ public Builder clearTransaction() { public com.google.spanner.v1.Transaction.Builder getTransactionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTransactionFieldBuilder().getBuilder(); + return internalGetTransactionFieldBuilder().getBuilder(); } + /** * * @@ -1125,6 +1134,7 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { : transaction_; } } + /** * * @@ -1134,14 +1144,14 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { * * .google.spanner.v1.Transaction transaction = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Transaction, com.google.spanner.v1.Transaction.Builder, com.google.spanner.v1.TransactionOrBuilder> - getTransactionFieldBuilder() { + internalGetTransactionFieldBuilder() { if (transactionBuilder_ == null) { transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Transaction, com.google.spanner.v1.Transaction.Builder, com.google.spanner.v1.TransactionOrBuilder>( @@ -1151,17 +1161,6 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { return transactionBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.PartitionResponse) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java index ff1cc442d0a..078cd629d68 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface PartitionResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.PartitionResponse) @@ -34,6 +36,7 @@ public interface PartitionResponseOrBuilder * repeated .google.spanner.v1.Partition partitions = 1; */ java.util.List getPartitionsList(); + /** * * @@ -44,6 +47,7 @@ public interface PartitionResponseOrBuilder * repeated .google.spanner.v1.Partition partitions = 1; */ com.google.spanner.v1.Partition getPartitions(int index); + /** * * @@ -54,6 +58,7 @@ public interface PartitionResponseOrBuilder * repeated .google.spanner.v1.Partition partitions = 1; */ int getPartitionsCount(); + /** * * @@ -64,6 +69,7 @@ public interface PartitionResponseOrBuilder * repeated .google.spanner.v1.Partition partitions = 1; */ java.util.List getPartitionsOrBuilderList(); + /** * * @@ -87,6 +93,7 @@ public interface PartitionResponseOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -99,6 +106,7 @@ public interface PartitionResponseOrBuilder * @return The transaction. */ com.google.spanner.v1.Transaction getTransaction(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java index 315436a7291..2573c5966d2 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,27 +14,41 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/query_plan.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** * * *
                                - * Node information for nodes appearing in a [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes].
                                + * Node information for nodes appearing in a
                                + * [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes].
                                  * 
                                * * Protobuf type {@code google.spanner.v1.PlanNode} */ -public final class PlanNode extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class PlanNode extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PlanNode) PlanNodeOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PlanNode"); + } + // Use PlanNode.newBuilder() to construct. - private PlanNode(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PlanNode(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +58,13 @@ private PlanNode() { childLinks_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PlanNode(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_fieldAccessorTable @@ -68,8 +76,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * * *
                                -   * The kind of [PlanNode][google.spanner.v1.PlanNode]. Distinguishes between the two different kinds of
                                -   * nodes that can appear in a query plan.
                                +   * The kind of [PlanNode][google.spanner.v1.PlanNode]. Distinguishes between
                                +   * the two different kinds of nodes that can appear in a query plan.
                                    * 
                                * * Protobuf enum {@code google.spanner.v1.PlanNode.Kind} @@ -113,6 +121,16 @@ public enum Kind implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Kind"); + } + /** * * @@ -123,6 +141,7 @@ public enum Kind implements com.google.protobuf.ProtocolMessageEnum { * KIND_UNSPECIFIED = 0; */ public static final int KIND_UNSPECIFIED_VALUE = 0; + /** * * @@ -135,6 +154,7 @@ public enum Kind implements com.google.protobuf.ProtocolMessageEnum { * RELATIONAL = 1; */ public static final int RELATIONAL_VALUE = 1; + /** * * @@ -207,7 +227,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.PlanNode.getDescriptor().getEnumTypes().get(0); } @@ -265,6 +285,7 @@ public interface ChildLinkOrBuilder * @return The type. */ java.lang.String getType(); + /** * * @@ -285,14 +306,14 @@ public interface ChildLinkOrBuilder * * *
                                -     * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -     * to an output variable of the parent node. The field carries the name of
                                -     * the output variable.
                                -     * For example, a `TableScan` operator that reads rows from a table will
                                -     * have child links to the `SCALAR` nodes representing the output variables
                                -     * created for each column that is read by the operator. The corresponding
                                -     * `variable` fields will be set to the variable names assigned to the
                                -     * columns.
                                +     * Only present if the child node is
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +     * output variable of the parent node. The field carries the name of the
                                +     * output variable. For example, a `TableScan` operator that reads rows from
                                +     * a table will have child links to the `SCALAR` nodes representing the
                                +     * output variables created for each column that is read by the operator.
                                +     * The corresponding `variable` fields will be set to the variable names
                                +     * assigned to the columns.
                                      * 
                                * * string variable = 3; @@ -300,18 +321,19 @@ public interface ChildLinkOrBuilder * @return The variable. */ java.lang.String getVariable(); + /** * * *
                                -     * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -     * to an output variable of the parent node. The field carries the name of
                                -     * the output variable.
                                -     * For example, a `TableScan` operator that reads rows from a table will
                                -     * have child links to the `SCALAR` nodes representing the output variables
                                -     * created for each column that is read by the operator. The corresponding
                                -     * `variable` fields will be set to the variable names assigned to the
                                -     * columns.
                                +     * Only present if the child node is
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +     * output variable of the parent node. The field carries the name of the
                                +     * output variable. For example, a `TableScan` operator that reads rows from
                                +     * a table will have child links to the `SCALAR` nodes representing the
                                +     * output variables created for each column that is read by the operator.
                                +     * The corresponding `variable` fields will be set to the variable names
                                +     * assigned to the columns.
                                      * 
                                * * string variable = 3; @@ -320,6 +342,7 @@ public interface ChildLinkOrBuilder */ com.google.protobuf.ByteString getVariableBytes(); } + /** * * @@ -330,13 +353,24 @@ public interface ChildLinkOrBuilder * * Protobuf type {@code google.spanner.v1.PlanNode.ChildLink} */ - public static final class ChildLink extends com.google.protobuf.GeneratedMessageV3 + public static final class ChildLink extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PlanNode.ChildLink) ChildLinkOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ChildLink"); + } + // Use ChildLink.newBuilder() to construct. - private ChildLink(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ChildLink(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -345,19 +379,13 @@ private ChildLink() { variable_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ChildLink(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ChildLink_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ChildLink_fieldAccessorTable @@ -368,6 +396,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int CHILD_INDEX_FIELD_NUMBER = 1; private int childIndex_ = 0; + /** * * @@ -388,6 +417,7 @@ public int getChildIndex() { @SuppressWarnings("serial") private volatile java.lang.Object type_ = ""; + /** * * @@ -414,6 +444,7 @@ public java.lang.String getType() { return s; } } + /** * * @@ -445,18 +476,19 @@ public com.google.protobuf.ByteString getTypeBytes() { @SuppressWarnings("serial") private volatile java.lang.Object variable_ = ""; + /** * * *
                                -     * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -     * to an output variable of the parent node. The field carries the name of
                                -     * the output variable.
                                -     * For example, a `TableScan` operator that reads rows from a table will
                                -     * have child links to the `SCALAR` nodes representing the output variables
                                -     * created for each column that is read by the operator. The corresponding
                                -     * `variable` fields will be set to the variable names assigned to the
                                -     * columns.
                                +     * Only present if the child node is
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +     * output variable of the parent node. The field carries the name of the
                                +     * output variable. For example, a `TableScan` operator that reads rows from
                                +     * a table will have child links to the `SCALAR` nodes representing the
                                +     * output variables created for each column that is read by the operator.
                                +     * The corresponding `variable` fields will be set to the variable names
                                +     * assigned to the columns.
                                      * 
                                * * string variable = 3; @@ -475,18 +507,19 @@ public java.lang.String getVariable() { return s; } } + /** * * *
                                -     * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -     * to an output variable of the parent node. The field carries the name of
                                -     * the output variable.
                                -     * For example, a `TableScan` operator that reads rows from a table will
                                -     * have child links to the `SCALAR` nodes representing the output variables
                                -     * created for each column that is read by the operator. The corresponding
                                -     * `variable` fields will be set to the variable names assigned to the
                                -     * columns.
                                +     * Only present if the child node is
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +     * output variable of the parent node. The field carries the name of the
                                +     * output variable. For example, a `TableScan` operator that reads rows from
                                +     * a table will have child links to the `SCALAR` nodes representing the
                                +     * output variables created for each column that is read by the operator.
                                +     * The corresponding `variable` fields will be set to the variable names
                                +     * assigned to the columns.
                                      * 
                                * * string variable = 3; @@ -523,11 +556,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (childIndex_ != 0) { output.writeInt32(1, childIndex_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, type_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(type_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, type_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(variable_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, variable_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(variable_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, variable_); } getUnknownFields().writeTo(output); } @@ -541,11 +574,11 @@ public int getSerializedSize() { if (childIndex_ != 0) { size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, childIndex_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, type_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(type_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, type_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(variable_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, variable_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(variable_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, variable_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -625,38 +658,38 @@ public static com.google.spanner.v1.PlanNode.ChildLink parseFrom( public static com.google.spanner.v1.PlanNode.ChildLink parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode.ChildLink parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PlanNode.ChildLink parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode.ChildLink parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PlanNode.ChildLink parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode.ChildLink parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -679,11 +712,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -694,8 +727,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.PlanNode.ChildLink} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PlanNode.ChildLink) com.google.spanner.v1.PlanNode.ChildLinkOrBuilder { @@ -705,7 +737,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ChildLink_fieldAccessorTable @@ -717,7 +749,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.PlanNode.ChildLink.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -775,41 +807,6 @@ private void buildPartial0(com.google.spanner.v1.PlanNode.ChildLink result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.PlanNode.ChildLink) { @@ -899,6 +896,7 @@ public Builder mergeFrom( private int bitField0_; private int childIndex_; + /** * * @@ -914,6 +912,7 @@ public Builder mergeFrom( public int getChildIndex() { return childIndex_; } + /** * * @@ -933,6 +932,7 @@ public Builder setChildIndex(int value) { onChanged(); return this; } + /** * * @@ -952,6 +952,7 @@ public Builder clearChildIndex() { } private java.lang.Object type_ = ""; + /** * * @@ -977,6 +978,7 @@ public java.lang.String getType() { return (java.lang.String) ref; } } + /** * * @@ -1002,6 +1004,7 @@ public com.google.protobuf.ByteString getTypeBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1026,6 +1029,7 @@ public Builder setType(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1046,6 +1050,7 @@ public Builder clearType() { onChanged(); return this; } + /** * * @@ -1073,18 +1078,19 @@ public Builder setTypeBytes(com.google.protobuf.ByteString value) { } private java.lang.Object variable_ = ""; + /** * * *
                                -       * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -       * to an output variable of the parent node. The field carries the name of
                                -       * the output variable.
                                -       * For example, a `TableScan` operator that reads rows from a table will
                                -       * have child links to the `SCALAR` nodes representing the output variables
                                -       * created for each column that is read by the operator. The corresponding
                                -       * `variable` fields will be set to the variable names assigned to the
                                -       * columns.
                                +       * Only present if the child node is
                                +       * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +       * output variable of the parent node. The field carries the name of the
                                +       * output variable. For example, a `TableScan` operator that reads rows from
                                +       * a table will have child links to the `SCALAR` nodes representing the
                                +       * output variables created for each column that is read by the operator.
                                +       * The corresponding `variable` fields will be set to the variable names
                                +       * assigned to the columns.
                                        * 
                                * * string variable = 3; @@ -1102,18 +1108,19 @@ public java.lang.String getVariable() { return (java.lang.String) ref; } } + /** * * *
                                -       * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -       * to an output variable of the parent node. The field carries the name of
                                -       * the output variable.
                                -       * For example, a `TableScan` operator that reads rows from a table will
                                -       * have child links to the `SCALAR` nodes representing the output variables
                                -       * created for each column that is read by the operator. The corresponding
                                -       * `variable` fields will be set to the variable names assigned to the
                                -       * columns.
                                +       * Only present if the child node is
                                +       * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +       * output variable of the parent node. The field carries the name of the
                                +       * output variable. For example, a `TableScan` operator that reads rows from
                                +       * a table will have child links to the `SCALAR` nodes representing the
                                +       * output variables created for each column that is read by the operator.
                                +       * The corresponding `variable` fields will be set to the variable names
                                +       * assigned to the columns.
                                        * 
                                * * string variable = 3; @@ -1131,18 +1138,19 @@ public com.google.protobuf.ByteString getVariableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                -       * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -       * to an output variable of the parent node. The field carries the name of
                                -       * the output variable.
                                -       * For example, a `TableScan` operator that reads rows from a table will
                                -       * have child links to the `SCALAR` nodes representing the output variables
                                -       * created for each column that is read by the operator. The corresponding
                                -       * `variable` fields will be set to the variable names assigned to the
                                -       * columns.
                                +       * Only present if the child node is
                                +       * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +       * output variable of the parent node. The field carries the name of the
                                +       * output variable. For example, a `TableScan` operator that reads rows from
                                +       * a table will have child links to the `SCALAR` nodes representing the
                                +       * output variables created for each column that is read by the operator.
                                +       * The corresponding `variable` fields will be set to the variable names
                                +       * assigned to the columns.
                                        * 
                                * * string variable = 3; @@ -1159,18 +1167,19 @@ public Builder setVariable(java.lang.String value) { onChanged(); return this; } + /** * * *
                                -       * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -       * to an output variable of the parent node. The field carries the name of
                                -       * the output variable.
                                -       * For example, a `TableScan` operator that reads rows from a table will
                                -       * have child links to the `SCALAR` nodes representing the output variables
                                -       * created for each column that is read by the operator. The corresponding
                                -       * `variable` fields will be set to the variable names assigned to the
                                -       * columns.
                                +       * Only present if the child node is
                                +       * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +       * output variable of the parent node. The field carries the name of the
                                +       * output variable. For example, a `TableScan` operator that reads rows from
                                +       * a table will have child links to the `SCALAR` nodes representing the
                                +       * output variables created for each column that is read by the operator.
                                +       * The corresponding `variable` fields will be set to the variable names
                                +       * assigned to the columns.
                                        * 
                                * * string variable = 3; @@ -1183,18 +1192,19 @@ public Builder clearVariable() { onChanged(); return this; } + /** * * *
                                -       * Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
                                -       * to an output variable of the parent node. The field carries the name of
                                -       * the output variable.
                                -       * For example, a `TableScan` operator that reads rows from a table will
                                -       * have child links to the `SCALAR` nodes representing the output variables
                                -       * created for each column that is read by the operator. The corresponding
                                -       * `variable` fields will be set to the variable names assigned to the
                                -       * columns.
                                +       * Only present if the child node is
                                +       * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an
                                +       * output variable of the parent node. The field carries the name of the
                                +       * output variable. For example, a `TableScan` operator that reads rows from
                                +       * a table will have child links to the `SCALAR` nodes representing the
                                +       * output variables created for each column that is read by the operator.
                                +       * The corresponding `variable` fields will be set to the variable names
                                +       * assigned to the columns.
                                        * 
                                * * string variable = 3; @@ -1213,18 +1223,6 @@ public Builder setVariableBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.PlanNode.ChildLink) } @@ -1294,6 +1292,7 @@ public interface ShortRepresentationOrBuilder * @return The description. */ java.lang.String getDescription(); + /** * * @@ -1321,6 +1320,7 @@ public interface ShortRepresentationOrBuilder * map<string, int32> subqueries = 2; */ int getSubqueriesCount(); + /** * * @@ -1335,9 +1335,11 @@ public interface ShortRepresentationOrBuilder * map<string, int32> subqueries = 2; */ boolean containsSubqueries(java.lang.String key); + /** Use {@link #getSubqueriesMap()} instead. */ @java.lang.Deprecated java.util.Map getSubqueries(); + /** * * @@ -1352,6 +1354,7 @@ public interface ShortRepresentationOrBuilder * map<string, int32> subqueries = 2; */ java.util.Map getSubqueriesMap(); + /** * * @@ -1366,6 +1369,7 @@ public interface ShortRepresentationOrBuilder * map<string, int32> subqueries = 2; */ int getSubqueriesOrDefault(java.lang.String key, int defaultValue); + /** * * @@ -1381,6 +1385,7 @@ public interface ShortRepresentationOrBuilder */ int getSubqueriesOrThrow(java.lang.String key); } + /** * * @@ -1391,13 +1396,24 @@ public interface ShortRepresentationOrBuilder * * Protobuf type {@code google.spanner.v1.PlanNode.ShortRepresentation} */ - public static final class ShortRepresentation extends com.google.protobuf.GeneratedMessageV3 + public static final class ShortRepresentation extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.PlanNode.ShortRepresentation) ShortRepresentationOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ShortRepresentation"); + } + // Use ShortRepresentation.newBuilder() to construct. - private ShortRepresentation(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ShortRepresentation(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -1405,12 +1421,6 @@ private ShortRepresentation() { description_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ShortRepresentation(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor; @@ -1429,7 +1439,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ShortRepresentation_fieldAccessorTable @@ -1442,6 +1452,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object description_ = ""; + /** * * @@ -1465,6 +1476,7 @@ public java.lang.String getDescription() { return s; } } + /** * * @@ -1517,6 +1529,7 @@ private static final class SubqueriesDefaultEntryHolder { public int getSubqueriesCount() { return internalGetSubqueries().getMap().size(); } + /** * * @@ -1537,12 +1550,14 @@ public boolean containsSubqueries(java.lang.String key) { } return internalGetSubqueries().getMap().containsKey(key); } + /** Use {@link #getSubqueriesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getSubqueries() { return getSubqueriesMap(); } + /** * * @@ -1560,6 +1575,7 @@ public java.util.Map getSubqueries() { public java.util.Map getSubqueriesMap() { return internalGetSubqueries().getMap(); } + /** * * @@ -1581,6 +1597,7 @@ public int getSubqueriesOrDefault(java.lang.String key, int defaultValue) { java.util.Map map = internalGetSubqueries().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1620,10 +1637,10 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, description_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(description_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, description_); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetSubqueries(), SubqueriesDefaultEntryHolder.defaultEntry, 2); getUnknownFields().writeTo(output); } @@ -1634,8 +1651,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, description_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(description_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, description_); } for (java.util.Map.Entry entry : internalGetSubqueries().getMap().entrySet()) { @@ -1724,38 +1741,38 @@ public static com.google.spanner.v1.PlanNode.ShortRepresentation parseFrom( public static com.google.spanner.v1.PlanNode.ShortRepresentation parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode.ShortRepresentation parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PlanNode.ShortRepresentation parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode.ShortRepresentation parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PlanNode.ShortRepresentation parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode.ShortRepresentation parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1778,11 +1795,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1793,8 +1810,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.PlanNode.ShortRepresentation} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PlanNode.ShortRepresentation) com.google.spanner.v1.PlanNode.ShortRepresentationOrBuilder { @@ -1826,7 +1842,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ShortRepresentation_fieldAccessorTable @@ -1838,7 +1854,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi // Construct using com.google.spanner.v1.PlanNode.ShortRepresentation.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1893,41 +1909,6 @@ private void buildPartial0(com.google.spanner.v1.PlanNode.ShortRepresentation re } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.PlanNode.ShortRepresentation) { @@ -2012,6 +1993,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object description_ = ""; + /** * * @@ -2034,6 +2016,7 @@ public java.lang.String getDescription() { return (java.lang.String) ref; } } + /** * * @@ -2056,6 +2039,7 @@ public com.google.protobuf.ByteString getDescriptionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2077,6 +2061,7 @@ public Builder setDescription(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2094,6 +2079,7 @@ public Builder clearDescription() { onChanged(); return this; } + /** * * @@ -2145,6 +2131,7 @@ public Builder setDescriptionBytes(com.google.protobuf.ByteString value) { public int getSubqueriesCount() { return internalGetSubqueries().getMap().size(); } + /** * * @@ -2165,12 +2152,14 @@ public boolean containsSubqueries(java.lang.String key) { } return internalGetSubqueries().getMap().containsKey(key); } + /** Use {@link #getSubqueriesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getSubqueries() { return getSubqueriesMap(); } + /** * * @@ -2188,6 +2177,7 @@ public java.util.Map getSubqueries() { public java.util.Map getSubqueriesMap() { return internalGetSubqueries().getMap(); } + /** * * @@ -2209,6 +2199,7 @@ public int getSubqueriesOrDefault(java.lang.String key, int defaultValue) { java.util.Map map = internalGetSubqueries().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -2239,6 +2230,7 @@ public Builder clearSubqueries() { internalGetMutableSubqueries().getMutableMap().clear(); return this; } + /** * * @@ -2259,12 +2251,14 @@ public Builder removeSubqueries(java.lang.String key) { internalGetMutableSubqueries().getMutableMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map getMutableSubqueries() { bitField0_ |= 0x00000002; return internalGetMutableSubqueries().getMutableMap(); } + /** * * @@ -2287,6 +2281,7 @@ public Builder putSubqueries(java.lang.String key, int value) { bitField0_ |= 0x00000002; return this; } + /** * * @@ -2306,18 +2301,6 @@ public Builder putAllSubqueries(java.util.Map - * The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes]. + * The `PlanNode`'s index in [node + * list][google.spanner.v1.QueryPlan.plan_nodes]. * * * int32 index = 1; @@ -2391,15 +2376,16 @@ public int getIndex() { public static final int KIND_FIELD_NUMBER = 2; private int kind_ = 0; + /** * * *
                                    * Used to determine the type of node. May be needed for visualizing
                                    * different kinds of nodes differently. For example, If the node is a
                                -   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -   * which can be used to directly embed a description of the node in its
                                -   * parent.
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +   * condensed representation which can be used to directly embed a description
                                +   * of the node in its parent.
                                    * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -2410,15 +2396,16 @@ public int getIndex() { public int getKindValue() { return kind_; } + /** * * *
                                    * Used to determine the type of node. May be needed for visualizing
                                    * different kinds of nodes differently. For example, If the node is a
                                -   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -   * which can be used to directly embed a description of the node in its
                                -   * parent.
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +   * condensed representation which can be used to directly embed a description
                                +   * of the node in its parent.
                                    * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -2436,6 +2423,7 @@ public com.google.spanner.v1.PlanNode.Kind getKind() { @SuppressWarnings("serial") private volatile java.lang.Object displayName_ = ""; + /** * * @@ -2459,6 +2447,7 @@ public java.lang.String getDisplayName() { return s; } } + /** * * @@ -2487,6 +2476,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { @SuppressWarnings("serial") private java.util.List childLinks_; + /** * * @@ -2500,6 +2490,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { public java.util.List getChildLinksList() { return childLinks_; } + /** * * @@ -2514,6 +2505,7 @@ public java.util.List getChildLinksLis getChildLinksOrBuilderList() { return childLinks_; } + /** * * @@ -2527,6 +2519,7 @@ public java.util.List getChildLinksLis public int getChildLinksCount() { return childLinks_.size(); } + /** * * @@ -2540,6 +2533,7 @@ public int getChildLinksCount() { public com.google.spanner.v1.PlanNode.ChildLink getChildLinks(int index) { return childLinks_.get(index); } + /** * * @@ -2556,11 +2550,13 @@ public com.google.spanner.v1.PlanNode.ChildLinkOrBuilder getChildLinksOrBuilder( public static final int SHORT_REPRESENTATION_FIELD_NUMBER = 5; private com.google.spanner.v1.PlanNode.ShortRepresentation shortRepresentation_; + /** * * *
                                -   * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +   * Condensed representation for
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                    * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -2571,11 +2567,13 @@ public com.google.spanner.v1.PlanNode.ChildLinkOrBuilder getChildLinksOrBuilder( public boolean hasShortRepresentation() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -   * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +   * Condensed representation for
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                    * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -2588,11 +2586,13 @@ public com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation ? com.google.spanner.v1.PlanNode.ShortRepresentation.getDefaultInstance() : shortRepresentation_; } + /** * * *
                                -   * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +   * Condensed representation for
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                    * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -2607,6 +2607,7 @@ public com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation public static final int METADATA_FIELD_NUMBER = 6; private com.google.protobuf.Struct metadata_; + /** * * @@ -2615,10 +2616,10 @@ public com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -2629,6 +2630,7 @@ public com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation public boolean hasMetadata() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -2637,10 +2639,10 @@ public boolean hasMetadata() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -2651,6 +2653,7 @@ public boolean hasMetadata() { public com.google.protobuf.Struct getMetadata() { return metadata_ == null ? com.google.protobuf.Struct.getDefaultInstance() : metadata_; } + /** * * @@ -2659,10 +2662,10 @@ public com.google.protobuf.Struct getMetadata() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -2674,6 +2677,7 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { public static final int EXECUTION_STATS_FIELD_NUMBER = 7; private com.google.protobuf.Struct executionStats_; + /** * * @@ -2692,6 +2696,7 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { public boolean hasExecutionStats() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -2712,6 +2717,7 @@ public com.google.protobuf.Struct getExecutionStats() { ? com.google.protobuf.Struct.getDefaultInstance() : executionStats_; } + /** * * @@ -2751,8 +2757,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (kind_ != com.google.spanner.v1.PlanNode.Kind.KIND_UNSPECIFIED.getNumber()) { output.writeEnum(2, kind_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, displayName_); } for (int i = 0; i < childLinks_.size(); i++) { output.writeMessage(4, childLinks_.get(i)); @@ -2781,8 +2787,8 @@ public int getSerializedSize() { if (kind_ != com.google.spanner.v1.PlanNode.Kind.KIND_UNSPECIFIED.getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, kind_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, displayName_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(displayName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, displayName_); } for (int i = 0; i < childLinks_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, childLinks_.get(i)); @@ -2901,38 +2907,38 @@ public static com.google.spanner.v1.PlanNode parseFrom( public static com.google.spanner.v1.PlanNode parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PlanNode parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.PlanNode parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.PlanNode parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2955,20 +2961,22 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -   * Node information for nodes appearing in a [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes].
                                +   * Node information for nodes appearing in a
                                +   * [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes].
                                    * 
                                * * Protobuf type {@code google.spanner.v1.PlanNode} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.PlanNode) com.google.spanner.v1.PlanNodeOrBuilder { @@ -2978,7 +2986,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_fieldAccessorTable @@ -2991,17 +2999,17 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getChildLinksFieldBuilder(); - getShortRepresentationFieldBuilder(); - getMetadataFieldBuilder(); - getExecutionStatsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetChildLinksFieldBuilder(); + internalGetShortRepresentationFieldBuilder(); + internalGetMetadataFieldBuilder(); + internalGetExecutionStatsFieldBuilder(); } } @@ -3111,39 +3119,6 @@ private void buildPartial0(com.google.spanner.v1.PlanNode result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.PlanNode) { @@ -3186,8 +3161,8 @@ public Builder mergeFrom(com.google.spanner.v1.PlanNode other) { childLinks_ = other.childLinks_; bitField0_ = (bitField0_ & ~0x00000008); childLinksBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getChildLinksFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetChildLinksFieldBuilder() : null; } else { childLinksBuilder_.addAllMessages(other.childLinks_); @@ -3263,19 +3238,21 @@ public Builder mergeFrom( case 42: { input.readMessage( - getShortRepresentationFieldBuilder().getBuilder(), extensionRegistry); + internalGetShortRepresentationFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000010; break; } // case 42 case 50: { - input.readMessage(getMetadataFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMetadataFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 50 case 58: { - input.readMessage(getExecutionStatsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetExecutionStatsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000040; break; } // case 58 @@ -3299,11 +3276,13 @@ public Builder mergeFrom( private int bitField0_; private int index_; + /** * * *
                                -     * The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes].
                                +     * The `PlanNode`'s index in [node
                                +     * list][google.spanner.v1.QueryPlan.plan_nodes].
                                      * 
                                * * int32 index = 1; @@ -3314,11 +3293,13 @@ public Builder mergeFrom( public int getIndex() { return index_; } + /** * * *
                                -     * The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes].
                                +     * The `PlanNode`'s index in [node
                                +     * list][google.spanner.v1.QueryPlan.plan_nodes].
                                      * 
                                * * int32 index = 1; @@ -3333,11 +3314,13 @@ public Builder setIndex(int value) { onChanged(); return this; } + /** * * *
                                -     * The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes].
                                +     * The `PlanNode`'s index in [node
                                +     * list][google.spanner.v1.QueryPlan.plan_nodes].
                                      * 
                                * * int32 index = 1; @@ -3352,15 +3335,16 @@ public Builder clearIndex() { } private int kind_ = 0; + /** * * *
                                      * Used to determine the type of node. May be needed for visualizing
                                      * different kinds of nodes differently. For example, If the node is a
                                -     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -     * which can be used to directly embed a description of the node in its
                                -     * parent.
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +     * condensed representation which can be used to directly embed a description
                                +     * of the node in its parent.
                                      * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -3371,15 +3355,16 @@ public Builder clearIndex() { public int getKindValue() { return kind_; } + /** * * *
                                      * Used to determine the type of node. May be needed for visualizing
                                      * different kinds of nodes differently. For example, If the node is a
                                -     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -     * which can be used to directly embed a description of the node in its
                                -     * parent.
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +     * condensed representation which can be used to directly embed a description
                                +     * of the node in its parent.
                                      * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -3393,15 +3378,16 @@ public Builder setKindValue(int value) { onChanged(); return this; } + /** * * *
                                      * Used to determine the type of node. May be needed for visualizing
                                      * different kinds of nodes differently. For example, If the node is a
                                -     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -     * which can be used to directly embed a description of the node in its
                                -     * parent.
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +     * condensed representation which can be used to directly embed a description
                                +     * of the node in its parent.
                                      * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -3414,15 +3400,16 @@ public com.google.spanner.v1.PlanNode.Kind getKind() { com.google.spanner.v1.PlanNode.Kind.forNumber(kind_); return result == null ? com.google.spanner.v1.PlanNode.Kind.UNRECOGNIZED : result; } + /** * * *
                                      * Used to determine the type of node. May be needed for visualizing
                                      * different kinds of nodes differently. For example, If the node is a
                                -     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -     * which can be used to directly embed a description of the node in its
                                -     * parent.
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +     * condensed representation which can be used to directly embed a description
                                +     * of the node in its parent.
                                      * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -3439,15 +3426,16 @@ public Builder setKind(com.google.spanner.v1.PlanNode.Kind value) { onChanged(); return this; } + /** * * *
                                      * Used to determine the type of node. May be needed for visualizing
                                      * different kinds of nodes differently. For example, If the node is a
                                -     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -     * which can be used to directly embed a description of the node in its
                                -     * parent.
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +     * condensed representation which can be used to directly embed a description
                                +     * of the node in its parent.
                                      * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -3462,6 +3450,7 @@ public Builder clearKind() { } private java.lang.Object displayName_ = ""; + /** * * @@ -3484,6 +3473,7 @@ public java.lang.String getDisplayName() { return (java.lang.String) ref; } } + /** * * @@ -3506,6 +3496,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -3527,6 +3518,7 @@ public Builder setDisplayName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -3544,6 +3536,7 @@ public Builder clearDisplayName() { onChanged(); return this; } + /** * * @@ -3578,7 +3571,7 @@ private void ensureChildLinksIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.PlanNode.ChildLink, com.google.spanner.v1.PlanNode.ChildLink.Builder, com.google.spanner.v1.PlanNode.ChildLinkOrBuilder> @@ -3600,6 +3593,7 @@ public java.util.List getChildLinksLis return childLinksBuilder_.getMessageList(); } } + /** * * @@ -3616,6 +3610,7 @@ public int getChildLinksCount() { return childLinksBuilder_.getCount(); } } + /** * * @@ -3632,6 +3627,7 @@ public com.google.spanner.v1.PlanNode.ChildLink getChildLinks(int index) { return childLinksBuilder_.getMessage(index); } } + /** * * @@ -3654,6 +3650,7 @@ public Builder setChildLinks(int index, com.google.spanner.v1.PlanNode.ChildLink } return this; } + /** * * @@ -3674,6 +3671,7 @@ public Builder setChildLinks( } return this; } + /** * * @@ -3696,6 +3694,7 @@ public Builder addChildLinks(com.google.spanner.v1.PlanNode.ChildLink value) { } return this; } + /** * * @@ -3718,6 +3717,7 @@ public Builder addChildLinks(int index, com.google.spanner.v1.PlanNode.ChildLink } return this; } + /** * * @@ -3737,6 +3737,7 @@ public Builder addChildLinks(com.google.spanner.v1.PlanNode.ChildLink.Builder bu } return this; } + /** * * @@ -3757,6 +3758,7 @@ public Builder addChildLinks( } return this; } + /** * * @@ -3777,6 +3779,7 @@ public Builder addAllChildLinks( } return this; } + /** * * @@ -3796,6 +3799,7 @@ public Builder clearChildLinks() { } return this; } + /** * * @@ -3815,6 +3819,7 @@ public Builder removeChildLinks(int index) { } return this; } + /** * * @@ -3825,8 +3830,9 @@ public Builder removeChildLinks(int index) { * repeated .google.spanner.v1.PlanNode.ChildLink child_links = 4; */ public com.google.spanner.v1.PlanNode.ChildLink.Builder getChildLinksBuilder(int index) { - return getChildLinksFieldBuilder().getBuilder(index); + return internalGetChildLinksFieldBuilder().getBuilder(index); } + /** * * @@ -3843,6 +3849,7 @@ public com.google.spanner.v1.PlanNode.ChildLinkOrBuilder getChildLinksOrBuilder( return childLinksBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3860,6 +3867,7 @@ public com.google.spanner.v1.PlanNode.ChildLinkOrBuilder getChildLinksOrBuilder( return java.util.Collections.unmodifiableList(childLinks_); } } + /** * * @@ -3870,9 +3878,10 @@ public com.google.spanner.v1.PlanNode.ChildLinkOrBuilder getChildLinksOrBuilder( * repeated .google.spanner.v1.PlanNode.ChildLink child_links = 4; */ public com.google.spanner.v1.PlanNode.ChildLink.Builder addChildLinksBuilder() { - return getChildLinksFieldBuilder() + return internalGetChildLinksFieldBuilder() .addBuilder(com.google.spanner.v1.PlanNode.ChildLink.getDefaultInstance()); } + /** * * @@ -3883,9 +3892,10 @@ public com.google.spanner.v1.PlanNode.ChildLink.Builder addChildLinksBuilder() { * repeated .google.spanner.v1.PlanNode.ChildLink child_links = 4; */ public com.google.spanner.v1.PlanNode.ChildLink.Builder addChildLinksBuilder(int index) { - return getChildLinksFieldBuilder() + return internalGetChildLinksFieldBuilder() .addBuilder(index, com.google.spanner.v1.PlanNode.ChildLink.getDefaultInstance()); } + /** * * @@ -3897,17 +3907,17 @@ public com.google.spanner.v1.PlanNode.ChildLink.Builder addChildLinksBuilder(int */ public java.util.List getChildLinksBuilderList() { - return getChildLinksFieldBuilder().getBuilderList(); + return internalGetChildLinksFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.PlanNode.ChildLink, com.google.spanner.v1.PlanNode.ChildLink.Builder, com.google.spanner.v1.PlanNode.ChildLinkOrBuilder> - getChildLinksFieldBuilder() { + internalGetChildLinksFieldBuilder() { if (childLinksBuilder_ == null) { childLinksBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.PlanNode.ChildLink, com.google.spanner.v1.PlanNode.ChildLink.Builder, com.google.spanner.v1.PlanNode.ChildLinkOrBuilder>( @@ -3918,16 +3928,18 @@ public com.google.spanner.v1.PlanNode.ChildLink.Builder addChildLinksBuilder(int } private com.google.spanner.v1.PlanNode.ShortRepresentation shortRepresentation_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PlanNode.ShortRepresentation, com.google.spanner.v1.PlanNode.ShortRepresentation.Builder, com.google.spanner.v1.PlanNode.ShortRepresentationOrBuilder> shortRepresentationBuilder_; + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -3937,11 +3949,13 @@ public com.google.spanner.v1.PlanNode.ChildLink.Builder addChildLinksBuilder(int public boolean hasShortRepresentation() { return ((bitField0_ & 0x00000010) != 0); } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -3957,11 +3971,13 @@ public com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation return shortRepresentationBuilder_.getMessage(); } } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -3980,11 +3996,13 @@ public Builder setShortRepresentation( onChanged(); return this; } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -4000,11 +4018,13 @@ public Builder setShortRepresentation( onChanged(); return this; } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -4029,11 +4049,13 @@ public Builder mergeShortRepresentation( } return this; } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -4048,11 +4070,13 @@ public Builder clearShortRepresentation() { onChanged(); return this; } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -4061,13 +4085,15 @@ public Builder clearShortRepresentation() { getShortRepresentationBuilder() { bitField0_ |= 0x00000010; onChanged(); - return getShortRepresentationFieldBuilder().getBuilder(); + return internalGetShortRepresentationFieldBuilder().getBuilder(); } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -4082,23 +4108,25 @@ public Builder clearShortRepresentation() { : shortRepresentation_; } } + /** * * *
                                -     * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +     * Condensed representation for
                                +     * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                      * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PlanNode.ShortRepresentation, com.google.spanner.v1.PlanNode.ShortRepresentation.Builder, com.google.spanner.v1.PlanNode.ShortRepresentationOrBuilder> - getShortRepresentationFieldBuilder() { + internalGetShortRepresentationFieldBuilder() { if (shortRepresentationBuilder_ == null) { shortRepresentationBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.PlanNode.ShortRepresentation, com.google.spanner.v1.PlanNode.ShortRepresentation.Builder, com.google.spanner.v1.PlanNode.ShortRepresentationOrBuilder>( @@ -4109,11 +4137,12 @@ public Builder clearShortRepresentation() { } private com.google.protobuf.Struct metadata_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> metadataBuilder_; + /** * * @@ -4122,10 +4151,10 @@ public Builder clearShortRepresentation() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4135,6 +4164,7 @@ public Builder clearShortRepresentation() { public boolean hasMetadata() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -4143,10 +4173,10 @@ public boolean hasMetadata() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4160,6 +4190,7 @@ public com.google.protobuf.Struct getMetadata() { return metadataBuilder_.getMessage(); } } + /** * * @@ -4168,10 +4199,10 @@ public com.google.protobuf.Struct getMetadata() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4189,6 +4220,7 @@ public Builder setMetadata(com.google.protobuf.Struct value) { onChanged(); return this; } + /** * * @@ -4197,10 +4229,10 @@ public Builder setMetadata(com.google.protobuf.Struct value) { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4215,6 +4247,7 @@ public Builder setMetadata(com.google.protobuf.Struct.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -4223,10 +4256,10 @@ public Builder setMetadata(com.google.protobuf.Struct.Builder builderForValue) { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4249,6 +4282,7 @@ public Builder mergeMetadata(com.google.protobuf.Struct value) { } return this; } + /** * * @@ -4257,10 +4291,10 @@ public Builder mergeMetadata(com.google.protobuf.Struct value) { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4275,6 +4309,7 @@ public Builder clearMetadata() { onChanged(); return this; } + /** * * @@ -4283,10 +4318,10 @@ public Builder clearMetadata() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4294,8 +4329,9 @@ public Builder clearMetadata() { public com.google.protobuf.Struct.Builder getMetadataBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getMetadataFieldBuilder().getBuilder(); + return internalGetMetadataFieldBuilder().getBuilder(); } + /** * * @@ -4304,10 +4340,10 @@ public com.google.protobuf.Struct.Builder getMetadataBuilder() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -4319,6 +4355,7 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { return metadata_ == null ? com.google.protobuf.Struct.getDefaultInstance() : metadata_; } } + /** * * @@ -4327,22 +4364,22 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> - getMetadataFieldBuilder() { + internalGetMetadataFieldBuilder() { if (metadataBuilder_ == null) { metadataBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>( @@ -4353,11 +4390,12 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { } private com.google.protobuf.Struct executionStats_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> executionStatsBuilder_; + /** * * @@ -4375,6 +4413,7 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { public boolean hasExecutionStats() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -4398,6 +4437,7 @@ public com.google.protobuf.Struct getExecutionStats() { return executionStatsBuilder_.getMessage(); } } + /** * * @@ -4423,6 +4463,7 @@ public Builder setExecutionStats(com.google.protobuf.Struct value) { onChanged(); return this; } + /** * * @@ -4445,6 +4486,7 @@ public Builder setExecutionStats(com.google.protobuf.Struct.Builder builderForVa onChanged(); return this; } + /** * * @@ -4475,6 +4517,7 @@ public Builder mergeExecutionStats(com.google.protobuf.Struct value) { } return this; } + /** * * @@ -4497,6 +4540,7 @@ public Builder clearExecutionStats() { onChanged(); return this; } + /** * * @@ -4512,8 +4556,9 @@ public Builder clearExecutionStats() { public com.google.protobuf.Struct.Builder getExecutionStatsBuilder() { bitField0_ |= 0x00000040; onChanged(); - return getExecutionStatsFieldBuilder().getBuilder(); + return internalGetExecutionStatsFieldBuilder().getBuilder(); } + /** * * @@ -4535,6 +4580,7 @@ public com.google.protobuf.StructOrBuilder getExecutionStatsOrBuilder() { : executionStats_; } } + /** * * @@ -4547,14 +4593,14 @@ public com.google.protobuf.StructOrBuilder getExecutionStatsOrBuilder() { * * .google.protobuf.Struct execution_stats = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> - getExecutionStatsFieldBuilder() { + internalGetExecutionStatsFieldBuilder() { if (executionStatsBuilder_ == null) { executionStatsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>( @@ -4564,17 +4610,6 @@ public com.google.protobuf.StructOrBuilder getExecutionStatsOrBuilder() { return executionStatsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.PlanNode) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java index 443e4ac7079..75a22e50173 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/query_plan.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface PlanNodeOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.PlanNode) @@ -28,7 +30,8 @@ public interface PlanNodeOrBuilder * * *
                                -   * The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes].
                                +   * The `PlanNode`'s index in [node
                                +   * list][google.spanner.v1.QueryPlan.plan_nodes].
                                    * 
                                * * int32 index = 1; @@ -43,9 +46,9 @@ public interface PlanNodeOrBuilder *
                                    * Used to determine the type of node. May be needed for visualizing
                                    * different kinds of nodes differently. For example, If the node is a
                                -   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -   * which can be used to directly embed a description of the node in its
                                -   * parent.
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +   * condensed representation which can be used to directly embed a description
                                +   * of the node in its parent.
                                    * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -53,15 +56,16 @@ public interface PlanNodeOrBuilder * @return The enum numeric value on the wire for kind. */ int getKindValue(); + /** * * *
                                    * Used to determine the type of node. May be needed for visualizing
                                    * different kinds of nodes differently. For example, If the node is a
                                -   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
                                -   * which can be used to directly embed a description of the node in its
                                -   * parent.
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a
                                +   * condensed representation which can be used to directly embed a description
                                +   * of the node in its parent.
                                    * 
                                * * .google.spanner.v1.PlanNode.Kind kind = 2; @@ -82,6 +86,7 @@ public interface PlanNodeOrBuilder * @return The displayName. */ java.lang.String getDisplayName(); + /** * * @@ -105,6 +110,7 @@ public interface PlanNodeOrBuilder * repeated .google.spanner.v1.PlanNode.ChildLink child_links = 4; */ java.util.List getChildLinksList(); + /** * * @@ -115,6 +121,7 @@ public interface PlanNodeOrBuilder * repeated .google.spanner.v1.PlanNode.ChildLink child_links = 4; */ com.google.spanner.v1.PlanNode.ChildLink getChildLinks(int index); + /** * * @@ -125,6 +132,7 @@ public interface PlanNodeOrBuilder * repeated .google.spanner.v1.PlanNode.ChildLink child_links = 4; */ int getChildLinksCount(); + /** * * @@ -136,6 +144,7 @@ public interface PlanNodeOrBuilder */ java.util.List getChildLinksOrBuilderList(); + /** * * @@ -151,7 +160,8 @@ public interface PlanNodeOrBuilder * * *
                                -   * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +   * Condensed representation for
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                    * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -159,11 +169,13 @@ public interface PlanNodeOrBuilder * @return Whether the shortRepresentation field is set. */ boolean hasShortRepresentation(); + /** * * *
                                -   * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +   * Condensed representation for
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                    * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -171,11 +183,13 @@ public interface PlanNodeOrBuilder * @return The shortRepresentation. */ com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation(); + /** * * *
                                -   * Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                +   * Condensed representation for
                                +   * [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
                                    * 
                                * * .google.spanner.v1.PlanNode.ShortRepresentation short_representation = 5; @@ -190,10 +204,10 @@ public interface PlanNodeOrBuilder * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -201,6 +215,7 @@ public interface PlanNodeOrBuilder * @return Whether the metadata field is set. */ boolean hasMetadata(); + /** * * @@ -209,10 +224,10 @@ public interface PlanNodeOrBuilder * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -220,6 +235,7 @@ public interface PlanNodeOrBuilder * @return The metadata. */ com.google.protobuf.Struct getMetadata(); + /** * * @@ -228,10 +244,10 @@ public interface PlanNodeOrBuilder * For example, a Parameter Reference node could have the following * information in its metadata: * - * { - * "parameter_reference": "param1", - * "parameter_type": "array" - * } + * { + * "parameter_reference": "param1", + * "parameter_type": "array" + * } * * * .google.protobuf.Struct metadata = 6; @@ -253,6 +269,7 @@ public interface PlanNodeOrBuilder * @return Whether the executionStats field is set. */ boolean hasExecutionStats(); + /** * * @@ -268,6 +285,7 @@ public interface PlanNodeOrBuilder * @return The executionStats. */ com.google.protobuf.Struct getExecutionStats(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryAdvisorResult.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryAdvisorResult.java new file mode 100644 index 00000000000..abbcc3cf3a0 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryAdvisorResult.java @@ -0,0 +1,1884 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/query_plan.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * Output of query advisor analysis.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.QueryAdvisorResult} + */ +@com.google.protobuf.Generated +public final class QueryAdvisorResult extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.QueryAdvisorResult) + QueryAdvisorResultOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryAdvisorResult"); + } + + // Use QueryAdvisorResult.newBuilder() to construct. + private QueryAdvisorResult(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private QueryAdvisorResult() { + indexAdvice_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.QueryAdvisorResult.class, + com.google.spanner.v1.QueryAdvisorResult.Builder.class); + } + + public interface IndexAdviceOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.QueryAdvisorResult.IndexAdvice) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ddl. + */ + java.util.List getDdlList(); + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ddl. + */ + int getDdlCount(); + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ddl at the given index. + */ + java.lang.String getDdl(int index); + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ddl at the given index. + */ + com.google.protobuf.ByteString getDdlBytes(int index); + + /** + * + * + *
                                +     * Optional. Estimated latency improvement factor. For example if the query
                                +     * currently takes 500 ms to run and the estimated latency with new indexes
                                +     * is 100 ms this field will be 5.
                                +     * 
                                + * + * double improvement_factor = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The improvementFactor. + */ + double getImprovementFactor(); + } + + /** + * + * + *
                                +   * Recommendation to add new indexes to run queries more efficiently.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.QueryAdvisorResult.IndexAdvice} + */ + public static final class IndexAdvice extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.QueryAdvisorResult.IndexAdvice) + IndexAdviceOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "IndexAdvice"); + } + + // Use IndexAdvice.newBuilder() to construct. + private IndexAdvice(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private IndexAdvice() { + ddl_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.class, + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder.class); + } + + public static final int DDL_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList ddl_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ddl. + */ + public com.google.protobuf.ProtocolStringList getDdlList() { + return ddl_; + } + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ddl. + */ + public int getDdlCount() { + return ddl_.size(); + } + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ddl at the given index. + */ + public java.lang.String getDdl(int index) { + return ddl_.get(index); + } + + /** + * + * + *
                                +     * Optional. DDL statements to add new indexes that will improve the query.
                                +     * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ddl at the given index. + */ + public com.google.protobuf.ByteString getDdlBytes(int index) { + return ddl_.getByteString(index); + } + + public static final int IMPROVEMENT_FACTOR_FIELD_NUMBER = 2; + private double improvementFactor_ = 0D; + + /** + * + * + *
                                +     * Optional. Estimated latency improvement factor. For example if the query
                                +     * currently takes 500 ms to run and the estimated latency with new indexes
                                +     * is 100 ms this field will be 5.
                                +     * 
                                + * + * double improvement_factor = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The improvementFactor. + */ + @java.lang.Override + public double getImprovementFactor() { + return improvementFactor_; + } + + 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 < ddl_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, ddl_.getRaw(i)); + } + if (java.lang.Double.doubleToRawLongBits(improvementFactor_) != 0) { + output.writeDouble(2, improvementFactor_); + } + 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 < ddl_.size(); i++) { + dataSize += computeStringSizeNoTag(ddl_.getRaw(i)); + } + size += dataSize; + size += 1 * getDdlList().size(); + } + if (java.lang.Double.doubleToRawLongBits(improvementFactor_) != 0) { + size += com.google.protobuf.CodedOutputStream.computeDoubleSize(2, improvementFactor_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.QueryAdvisorResult.IndexAdvice)) { + return super.equals(obj); + } + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice other = + (com.google.spanner.v1.QueryAdvisorResult.IndexAdvice) obj; + + if (!getDdlList().equals(other.getDdlList())) return false; + if (java.lang.Double.doubleToLongBits(getImprovementFactor()) + != java.lang.Double.doubleToLongBits(other.getImprovementFactor())) 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 (getDdlCount() > 0) { + hash = (37 * hash) + DDL_FIELD_NUMBER; + hash = (53 * hash) + getDdlList().hashCode(); + } + hash = (37 * hash) + IMPROVEMENT_FACTOR_FIELD_NUMBER; + hash = + (53 * hash) + + com.google.protobuf.Internal.hashLong( + java.lang.Double.doubleToLongBits(getImprovementFactor())); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * Recommendation to add new indexes to run queries more efficiently.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.QueryAdvisorResult.IndexAdvice} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.QueryAdvisorResult.IndexAdvice) + com.google.spanner.v1.QueryAdvisorResult.IndexAdviceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.class, + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder.class); + } + + // Construct using com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + ddl_ = com.google.protobuf.LazyStringArrayList.emptyList(); + improvementFactor_ = 0D; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice getDefaultInstanceForType() { + return com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice build() { + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice buildPartial() { + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice result = + new com.google.spanner.v1.QueryAdvisorResult.IndexAdvice(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.QueryAdvisorResult.IndexAdvice result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + ddl_.makeImmutable(); + result.ddl_ = ddl_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.improvementFactor_ = improvementFactor_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.QueryAdvisorResult.IndexAdvice) { + return mergeFrom((com.google.spanner.v1.QueryAdvisorResult.IndexAdvice) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.QueryAdvisorResult.IndexAdvice other) { + if (other == com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.getDefaultInstance()) + return this; + if (!other.ddl_.isEmpty()) { + if (ddl_.isEmpty()) { + ddl_ = other.ddl_; + bitField0_ |= 0x00000001; + } else { + ensureDdlIsMutable(); + ddl_.addAll(other.ddl_); + } + onChanged(); + } + if (java.lang.Double.doubleToRawLongBits(other.getImprovementFactor()) != 0) { + setImprovementFactor(other.getImprovementFactor()); + } + 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(); + ensureDdlIsMutable(); + ddl_.add(s); + break; + } // case 10 + case 17: + { + improvementFactor_ = input.readDouble(); + bitField0_ |= 0x00000002; + break; + } // case 17 + 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 ddl_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureDdlIsMutable() { + if (!ddl_.isModifiable()) { + ddl_ = new com.google.protobuf.LazyStringArrayList(ddl_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ddl. + */ + public com.google.protobuf.ProtocolStringList getDdlList() { + ddl_.makeImmutable(); + return ddl_; + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ddl. + */ + public int getDdlCount() { + return ddl_.size(); + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ddl at the given index. + */ + public java.lang.String getDdl(int index) { + return ddl_.get(index); + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ddl at the given index. + */ + public com.google.protobuf.ByteString getDdlBytes(int index) { + return ddl_.getByteString(index); + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index to set the value at. + * @param value The ddl to set. + * @return This builder for chaining. + */ + public Builder setDdl(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureDdlIsMutable(); + ddl_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The ddl to add. + * @return This builder for chaining. + */ + public Builder addDdl(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureDdlIsMutable(); + ddl_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param values The ddl to add. + * @return This builder for chaining. + */ + public Builder addAllDdl(java.lang.Iterable values) { + ensureDdlIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ddl_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearDdl() { + ddl_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Optional. DDL statements to add new indexes that will improve the query.
                                +       * 
                                + * + * repeated string ddl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes of the ddl to add. + * @return This builder for chaining. + */ + public Builder addDdlBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureDdlIsMutable(); + ddl_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private double improvementFactor_; + + /** + * + * + *
                                +       * Optional. Estimated latency improvement factor. For example if the query
                                +       * currently takes 500 ms to run and the estimated latency with new indexes
                                +       * is 100 ms this field will be 5.
                                +       * 
                                + * + * double improvement_factor = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The improvementFactor. + */ + @java.lang.Override + public double getImprovementFactor() { + return improvementFactor_; + } + + /** + * + * + *
                                +       * Optional. Estimated latency improvement factor. For example if the query
                                +       * currently takes 500 ms to run and the estimated latency with new indexes
                                +       * is 100 ms this field will be 5.
                                +       * 
                                + * + * double improvement_factor = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The improvementFactor to set. + * @return This builder for chaining. + */ + public Builder setImprovementFactor(double value) { + + improvementFactor_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * Optional. Estimated latency improvement factor. For example if the query
                                +       * currently takes 500 ms to run and the estimated latency with new indexes
                                +       * is 100 ms this field will be 5.
                                +       * 
                                + * + * double improvement_factor = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearImprovementFactor() { + bitField0_ = (bitField0_ & ~0x00000002); + improvementFactor_ = 0D; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.QueryAdvisorResult.IndexAdvice) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.QueryAdvisorResult.IndexAdvice) + private static final com.google.spanner.v1.QueryAdvisorResult.IndexAdvice DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.QueryAdvisorResult.IndexAdvice(); + } + + public static com.google.spanner.v1.QueryAdvisorResult.IndexAdvice getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public IndexAdvice parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public static final int INDEX_ADVICE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List indexAdvice_; + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getIndexAdviceList() { + return indexAdvice_; + } + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getIndexAdviceOrBuilderList() { + return indexAdvice_; + } + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getIndexAdviceCount() { + return indexAdvice_.size(); + } + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice getIndexAdvice(int index) { + return indexAdvice_.get(index); + } + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult.IndexAdviceOrBuilder getIndexAdviceOrBuilder( + int index) { + return indexAdvice_.get(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 < indexAdvice_.size(); i++) { + output.writeMessage(1, indexAdvice_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < indexAdvice_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, indexAdvice_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.QueryAdvisorResult)) { + return super.equals(obj); + } + com.google.spanner.v1.QueryAdvisorResult other = (com.google.spanner.v1.QueryAdvisorResult) obj; + + if (!getIndexAdviceList().equals(other.getIndexAdviceList())) 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 (getIndexAdviceCount() > 0) { + hash = (37 * hash) + INDEX_ADVICE_FIELD_NUMBER; + hash = (53 * hash) + getIndexAdviceList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.QueryAdvisorResult parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.QueryAdvisorResult 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * Output of query advisor analysis.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.QueryAdvisorResult} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.QueryAdvisorResult) + com.google.spanner.v1.QueryAdvisorResultOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.QueryAdvisorResult.class, + com.google.spanner.v1.QueryAdvisorResult.Builder.class); + } + + // Construct using com.google.spanner.v1.QueryAdvisorResult.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (indexAdviceBuilder_ == null) { + indexAdvice_ = java.util.Collections.emptyList(); + } else { + indexAdvice_ = null; + indexAdviceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.QueryPlanProto + .internal_static_google_spanner_v1_QueryAdvisorResult_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult getDefaultInstanceForType() { + return com.google.spanner.v1.QueryAdvisorResult.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult build() { + com.google.spanner.v1.QueryAdvisorResult result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult buildPartial() { + com.google.spanner.v1.QueryAdvisorResult result = + new com.google.spanner.v1.QueryAdvisorResult(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.QueryAdvisorResult result) { + if (indexAdviceBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + indexAdvice_ = java.util.Collections.unmodifiableList(indexAdvice_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.indexAdvice_ = indexAdvice_; + } else { + result.indexAdvice_ = indexAdviceBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.QueryAdvisorResult result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.QueryAdvisorResult) { + return mergeFrom((com.google.spanner.v1.QueryAdvisorResult) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.QueryAdvisorResult other) { + if (other == com.google.spanner.v1.QueryAdvisorResult.getDefaultInstance()) return this; + if (indexAdviceBuilder_ == null) { + if (!other.indexAdvice_.isEmpty()) { + if (indexAdvice_.isEmpty()) { + indexAdvice_ = other.indexAdvice_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureIndexAdviceIsMutable(); + indexAdvice_.addAll(other.indexAdvice_); + } + onChanged(); + } + } else { + if (!other.indexAdvice_.isEmpty()) { + if (indexAdviceBuilder_.isEmpty()) { + indexAdviceBuilder_.dispose(); + indexAdviceBuilder_ = null; + indexAdvice_ = other.indexAdvice_; + bitField0_ = (bitField0_ & ~0x00000001); + indexAdviceBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetIndexAdviceFieldBuilder() + : null; + } else { + indexAdviceBuilder_.addAllMessages(other.indexAdvice_); + } + } + } + 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: + { + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice m = + input.readMessage( + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.parser(), + extensionRegistry); + if (indexAdviceBuilder_ == null) { + ensureIndexAdviceIsMutable(); + indexAdvice_.add(m); + } else { + indexAdviceBuilder_.addMessage(m); + } + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List indexAdvice_ = + java.util.Collections.emptyList(); + + private void ensureIndexAdviceIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + indexAdvice_ = + new java.util.ArrayList( + indexAdvice_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice, + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder, + com.google.spanner.v1.QueryAdvisorResult.IndexAdviceOrBuilder> + indexAdviceBuilder_; + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getIndexAdviceList() { + if (indexAdviceBuilder_ == null) { + return java.util.Collections.unmodifiableList(indexAdvice_); + } else { + return indexAdviceBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getIndexAdviceCount() { + if (indexAdviceBuilder_ == null) { + return indexAdvice_.size(); + } else { + return indexAdviceBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice getIndexAdvice(int index) { + if (indexAdviceBuilder_ == null) { + return indexAdvice_.get(index); + } else { + return indexAdviceBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setIndexAdvice( + int index, com.google.spanner.v1.QueryAdvisorResult.IndexAdvice value) { + if (indexAdviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureIndexAdviceIsMutable(); + indexAdvice_.set(index, value); + onChanged(); + } else { + indexAdviceBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setIndexAdvice( + int index, com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder builderForValue) { + if (indexAdviceBuilder_ == null) { + ensureIndexAdviceIsMutable(); + indexAdvice_.set(index, builderForValue.build()); + onChanged(); + } else { + indexAdviceBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addIndexAdvice(com.google.spanner.v1.QueryAdvisorResult.IndexAdvice value) { + if (indexAdviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureIndexAdviceIsMutable(); + indexAdvice_.add(value); + onChanged(); + } else { + indexAdviceBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addIndexAdvice( + int index, com.google.spanner.v1.QueryAdvisorResult.IndexAdvice value) { + if (indexAdviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureIndexAdviceIsMutable(); + indexAdvice_.add(index, value); + onChanged(); + } else { + indexAdviceBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addIndexAdvice( + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder builderForValue) { + if (indexAdviceBuilder_ == null) { + ensureIndexAdviceIsMutable(); + indexAdvice_.add(builderForValue.build()); + onChanged(); + } else { + indexAdviceBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addIndexAdvice( + int index, com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder builderForValue) { + if (indexAdviceBuilder_ == null) { + ensureIndexAdviceIsMutable(); + indexAdvice_.add(index, builderForValue.build()); + onChanged(); + } else { + indexAdviceBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllIndexAdvice( + java.lang.Iterable values) { + if (indexAdviceBuilder_ == null) { + ensureIndexAdviceIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, indexAdvice_); + onChanged(); + } else { + indexAdviceBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearIndexAdvice() { + if (indexAdviceBuilder_ == null) { + indexAdvice_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + indexAdviceBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeIndexAdvice(int index) { + if (indexAdviceBuilder_ == null) { + ensureIndexAdviceIsMutable(); + indexAdvice_.remove(index); + onChanged(); + } else { + indexAdviceBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder getIndexAdviceBuilder( + int index) { + return internalGetIndexAdviceFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.QueryAdvisorResult.IndexAdviceOrBuilder getIndexAdviceOrBuilder( + int index) { + if (indexAdviceBuilder_ == null) { + return indexAdvice_.get(index); + } else { + return indexAdviceBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getIndexAdviceOrBuilderList() { + if (indexAdviceBuilder_ != null) { + return indexAdviceBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(indexAdvice_); + } + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder addIndexAdviceBuilder() { + return internalGetIndexAdviceFieldBuilder() + .addBuilder(com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder addIndexAdviceBuilder( + int index) { + return internalGetIndexAdviceFieldBuilder() + .addBuilder( + index, com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.getDefaultInstance()); + } + + /** + * + * + *
                                +     * Optional. Index Recommendation for a query. This is an optional field and
                                +     * the recommendation will only be available when the recommendation
                                +     * guarantees significant improvement in query performance.
                                +     * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getIndexAdviceBuilderList() { + return internalGetIndexAdviceFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice, + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder, + com.google.spanner.v1.QueryAdvisorResult.IndexAdviceOrBuilder> + internalGetIndexAdviceFieldBuilder() { + if (indexAdviceBuilder_ == null) { + indexAdviceBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice, + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice.Builder, + com.google.spanner.v1.QueryAdvisorResult.IndexAdviceOrBuilder>( + indexAdvice_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + indexAdvice_ = null; + } + return indexAdviceBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.QueryAdvisorResult) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.QueryAdvisorResult) + private static final com.google.spanner.v1.QueryAdvisorResult DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.QueryAdvisorResult(); + } + + public static com.google.spanner.v1.QueryAdvisorResult getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public QueryAdvisorResult parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryAdvisorResultOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryAdvisorResultOrBuilder.java new file mode 100644 index 00000000000..8d46964cf30 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryAdvisorResultOrBuilder.java @@ -0,0 +1,104 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/query_plan.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface QueryAdvisorResultOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.QueryAdvisorResult) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getIndexAdviceList(); + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.QueryAdvisorResult.IndexAdvice getIndexAdvice(int index); + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getIndexAdviceCount(); + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List + getIndexAdviceOrBuilderList(); + + /** + * + * + *
                                +   * Optional. Index Recommendation for a query. This is an optional field and
                                +   * the recommendation will only be available when the recommendation
                                +   * guarantees significant improvement in query performance.
                                +   * 
                                + * + * + * repeated .google.spanner.v1.QueryAdvisorResult.IndexAdvice index_advice = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.QueryAdvisorResult.IndexAdviceOrBuilder getIndexAdviceOrBuilder(int index); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java index fe542ddeed6..789c2f58e73 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/query_plan.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.QueryPlan} */ -public final class QueryPlan extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class QueryPlan extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.QueryPlan) QueryPlanOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryPlan"); + } + // Use QueryPlan.newBuilder() to construct. - private QueryPlan(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private QueryPlan(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private QueryPlan() { planNodes_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new QueryPlan(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_QueryPlan_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_QueryPlan_fieldAccessorTable @@ -62,17 +69,19 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { com.google.spanner.v1.QueryPlan.class, com.google.spanner.v1.QueryPlan.Builder.class); } + private int bitField0_; public static final int PLAN_NODES_FIELD_NUMBER = 1; @SuppressWarnings("serial") private java.util.List planNodes_; + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -81,13 +90,14 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getPlanNodesList() { return planNodes_; } + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -97,13 +107,14 @@ public java.util.List getPlanNodesList() { getPlanNodesOrBuilderList() { return planNodes_; } + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -112,13 +123,14 @@ public java.util.List getPlanNodesList() { public int getPlanNodesCount() { return planNodes_.size(); } + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -127,13 +139,14 @@ public int getPlanNodesCount() { public com.google.spanner.v1.PlanNode getPlanNodes(int index) { return planNodes_.get(index); } + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -143,6 +156,68 @@ public com.google.spanner.v1.PlanNodeOrBuilder getPlanNodesOrBuilder(int index) return planNodes_.get(index); } + public static final int QUERY_ADVICE_FIELD_NUMBER = 2; + private com.google.spanner.v1.QueryAdvisorResult queryAdvice_; + + /** + * + * + *
                                +   * Optional. The advise/recommendations for a query. Currently this field will
                                +   * be serving index recommendations for a query.
                                +   * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the queryAdvice field is set. + */ + @java.lang.Override + public boolean hasQueryAdvice() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * Optional. The advise/recommendations for a query. Currently this field will
                                +   * be serving index recommendations for a query.
                                +   * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The queryAdvice. + */ + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResult getQueryAdvice() { + return queryAdvice_ == null + ? com.google.spanner.v1.QueryAdvisorResult.getDefaultInstance() + : queryAdvice_; + } + + /** + * + * + *
                                +   * Optional. The advise/recommendations for a query. Currently this field will
                                +   * be serving index recommendations for a query.
                                +   * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.QueryAdvisorResultOrBuilder getQueryAdviceOrBuilder() { + return queryAdvice_ == null + ? com.google.spanner.v1.QueryAdvisorResult.getDefaultInstance() + : queryAdvice_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -160,6 +235,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < planNodes_.size(); i++) { output.writeMessage(1, planNodes_.get(i)); } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getQueryAdvice()); + } getUnknownFields().writeTo(output); } @@ -172,6 +250,9 @@ public int getSerializedSize() { for (int i = 0; i < planNodes_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, planNodes_.get(i)); } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getQueryAdvice()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -188,6 +269,10 @@ public boolean equals(final java.lang.Object obj) { com.google.spanner.v1.QueryPlan other = (com.google.spanner.v1.QueryPlan) obj; if (!getPlanNodesList().equals(other.getPlanNodesList())) return false; + if (hasQueryAdvice() != other.hasQueryAdvice()) return false; + if (hasQueryAdvice()) { + if (!getQueryAdvice().equals(other.getQueryAdvice())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -203,6 +288,10 @@ public int hashCode() { hash = (37 * hash) + PLAN_NODES_FIELD_NUMBER; hash = (53 * hash) + getPlanNodesList().hashCode(); } + if (hasQueryAdvice()) { + hash = (37 * hash) + QUERY_ADVICE_FIELD_NUMBER; + hash = (53 * hash) + getQueryAdvice().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -244,38 +333,38 @@ public static com.google.spanner.v1.QueryPlan parseFrom( public static com.google.spanner.v1.QueryPlan parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.QueryPlan parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.QueryPlan parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.QueryPlan parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.QueryPlan parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.QueryPlan parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -298,10 +387,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -311,7 +401,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.QueryPlan} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.QueryPlan) com.google.spanner.v1.QueryPlanOrBuilder { @@ -321,7 +411,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_QueryPlan_fieldAccessorTable @@ -330,10 +420,20 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } // Construct using com.google.spanner.v1.QueryPlan.newBuilder() - private Builder() {} + private Builder() { + maybeForceBuilderInitialization(); + } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPlanNodesFieldBuilder(); + internalGetQueryAdviceFieldBuilder(); + } } @java.lang.Override @@ -347,6 +447,11 @@ public Builder clear() { planNodesBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000001); + queryAdvice_ = null; + if (queryAdviceBuilder_ != null) { + queryAdviceBuilder_.dispose(); + queryAdviceBuilder_ = null; + } return this; } @@ -395,39 +500,13 @@ private void buildPartialRepeatedFields(com.google.spanner.v1.QueryPlan result) private void buildPartial0(com.google.spanner.v1.QueryPlan result) { int from_bitField0_ = 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); + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.queryAdvice_ = + queryAdviceBuilder_ == null ? queryAdvice_ : queryAdviceBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; } @java.lang.Override @@ -461,14 +540,17 @@ public Builder mergeFrom(com.google.spanner.v1.QueryPlan other) { planNodes_ = other.planNodes_; bitField0_ = (bitField0_ & ~0x00000001); planNodesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getPlanNodesFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetPlanNodesFieldBuilder() : null; } else { planNodesBuilder_.addAllMessages(other.planNodes_); } } } + if (other.hasQueryAdvice()) { + mergeQueryAdvice(other.getQueryAdvice()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -507,6 +589,13 @@ public Builder mergeFrom( } break; } // case 10 + case 18: + { + input.readMessage( + internalGetQueryAdviceFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -536,7 +625,7 @@ private void ensurePlanNodesIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.PlanNode, com.google.spanner.v1.PlanNode.Builder, com.google.spanner.v1.PlanNodeOrBuilder> @@ -547,8 +636,8 @@ private void ensurePlanNodesIsMutable() { * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -560,13 +649,14 @@ public java.util.List getPlanNodesList() { return planNodesBuilder_.getMessageList(); } } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -578,13 +668,14 @@ public int getPlanNodesCount() { return planNodesBuilder_.getCount(); } } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -596,13 +687,14 @@ public com.google.spanner.v1.PlanNode getPlanNodes(int index) { return planNodesBuilder_.getMessage(index); } } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -620,13 +712,14 @@ public Builder setPlanNodes(int index, com.google.spanner.v1.PlanNode value) { } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -641,13 +734,14 @@ public Builder setPlanNodes(int index, com.google.spanner.v1.PlanNode.Builder bu } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -665,13 +759,14 @@ public Builder addPlanNodes(com.google.spanner.v1.PlanNode value) { } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -689,13 +784,14 @@ public Builder addPlanNodes(int index, com.google.spanner.v1.PlanNode value) { } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -710,13 +806,14 @@ public Builder addPlanNodes(com.google.spanner.v1.PlanNode.Builder builderForVal } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -731,13 +828,14 @@ public Builder addPlanNodes(int index, com.google.spanner.v1.PlanNode.Builder bu } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -753,13 +851,14 @@ public Builder addAllPlanNodes( } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -774,13 +873,14 @@ public Builder clearPlanNodes() { } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -795,27 +895,29 @@ public Builder removePlanNodes(int index) { } return this; } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ public com.google.spanner.v1.PlanNode.Builder getPlanNodesBuilder(int index) { - return getPlanNodesFieldBuilder().getBuilder(index); + return internalGetPlanNodesFieldBuilder().getBuilder(index); } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -827,13 +929,14 @@ public com.google.spanner.v1.PlanNodeOrBuilder getPlanNodesOrBuilder(int index) return planNodesBuilder_.getMessageOrBuilder(index); } } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; @@ -846,59 +949,62 @@ public com.google.spanner.v1.PlanNodeOrBuilder getPlanNodesOrBuilder(int index) return java.util.Collections.unmodifiableList(planNodes_); } } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ public com.google.spanner.v1.PlanNode.Builder addPlanNodesBuilder() { - return getPlanNodesFieldBuilder() + return internalGetPlanNodesFieldBuilder() .addBuilder(com.google.spanner.v1.PlanNode.getDefaultInstance()); } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ public com.google.spanner.v1.PlanNode.Builder addPlanNodesBuilder(int index) { - return getPlanNodesFieldBuilder() + return internalGetPlanNodesFieldBuilder() .addBuilder(index, com.google.spanner.v1.PlanNode.getDefaultInstance()); } + /** * * *
                                      * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -     * `plan_nodes`.
                                +     * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +     * corresponds to its index in `plan_nodes`.
                                      * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ public java.util.List getPlanNodesBuilderList() { - return getPlanNodesFieldBuilder().getBuilderList(); + return internalGetPlanNodesFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.PlanNode, com.google.spanner.v1.PlanNode.Builder, com.google.spanner.v1.PlanNodeOrBuilder> - getPlanNodesFieldBuilder() { + internalGetPlanNodesFieldBuilder() { if (planNodesBuilder_ == null) { planNodesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.PlanNode, com.google.spanner.v1.PlanNode.Builder, com.google.spanner.v1.PlanNodeOrBuilder>( @@ -908,15 +1014,226 @@ public java.util.List getPlanNodesBuilde return planNodesBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.QueryAdvisorResult queryAdvice_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.QueryAdvisorResult, + com.google.spanner.v1.QueryAdvisorResult.Builder, + com.google.spanner.v1.QueryAdvisorResultOrBuilder> + queryAdviceBuilder_; + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the queryAdvice field is set. + */ + public boolean hasQueryAdvice() { + return ((bitField0_ & 0x00000002) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The queryAdvice. + */ + public com.google.spanner.v1.QueryAdvisorResult getQueryAdvice() { + if (queryAdviceBuilder_ == null) { + return queryAdvice_ == null + ? com.google.spanner.v1.QueryAdvisorResult.getDefaultInstance() + : queryAdvice_; + } else { + return queryAdviceBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setQueryAdvice(com.google.spanner.v1.QueryAdvisorResult value) { + if (queryAdviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + queryAdvice_ = value; + } else { + queryAdviceBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setQueryAdvice( + com.google.spanner.v1.QueryAdvisorResult.Builder builderForValue) { + if (queryAdviceBuilder_ == null) { + queryAdvice_ = builderForValue.build(); + } else { + queryAdviceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeQueryAdvice(com.google.spanner.v1.QueryAdvisorResult value) { + if (queryAdviceBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && queryAdvice_ != null + && queryAdvice_ != com.google.spanner.v1.QueryAdvisorResult.getDefaultInstance()) { + getQueryAdviceBuilder().mergeFrom(value); + } else { + queryAdvice_ = value; + } + } else { + queryAdviceBuilder_.mergeFrom(value); + } + if (queryAdvice_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearQueryAdvice() { + bitField0_ = (bitField0_ & ~0x00000002); + queryAdvice_ = null; + if (queryAdviceBuilder_ != null) { + queryAdviceBuilder_.dispose(); + queryAdviceBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.QueryAdvisorResult.Builder getQueryAdviceBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetQueryAdviceFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.QueryAdvisorResultOrBuilder getQueryAdviceOrBuilder() { + if (queryAdviceBuilder_ != null) { + return queryAdviceBuilder_.getMessageOrBuilder(); + } else { + return queryAdvice_ == null + ? com.google.spanner.v1.QueryAdvisorResult.getDefaultInstance() + : queryAdvice_; + } + } + + /** + * + * + *
                                +     * Optional. The advise/recommendations for a query. Currently this field will
                                +     * be serving index recommendations for a query.
                                +     * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.QueryAdvisorResult, + com.google.spanner.v1.QueryAdvisorResult.Builder, + com.google.spanner.v1.QueryAdvisorResultOrBuilder> + internalGetQueryAdviceFieldBuilder() { + if (queryAdviceBuilder_ == null) { + queryAdviceBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.QueryAdvisorResult, + com.google.spanner.v1.QueryAdvisorResult.Builder, + com.google.spanner.v1.QueryAdvisorResultOrBuilder>( + getQueryAdvice(), getParentForChildren(), isClean()); + queryAdvice_ = null; + } + return queryAdviceBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.QueryPlan) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java index e1f67c4e1f0..39bf2ec6dfe 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/query_plan.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface QueryPlanOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.QueryPlan) @@ -29,59 +31,109 @@ public interface QueryPlanOrBuilder * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ java.util.List getPlanNodesList(); + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ com.google.spanner.v1.PlanNode getPlanNodes(int index); + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ int getPlanNodesCount(); + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ java.util.List getPlanNodesOrBuilderList(); + /** * * *
                                    * The nodes in the query plan. Plan nodes are returned in pre-order starting
                                -   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
                                -   * `plan_nodes`.
                                +   * with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id`
                                +   * corresponds to its index in `plan_nodes`.
                                    * 
                                * * repeated .google.spanner.v1.PlanNode plan_nodes = 1; */ com.google.spanner.v1.PlanNodeOrBuilder getPlanNodesOrBuilder(int index); + + /** + * + * + *
                                +   * Optional. The advise/recommendations for a query. Currently this field will
                                +   * be serving index recommendations for a query.
                                +   * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the queryAdvice field is set. + */ + boolean hasQueryAdvice(); + + /** + * + * + *
                                +   * Optional. The advise/recommendations for a query. Currently this field will
                                +   * be serving index recommendations for a query.
                                +   * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The queryAdvice. + */ + com.google.spanner.v1.QueryAdvisorResult getQueryAdvice(); + + /** + * + * + *
                                +   * Optional. The advise/recommendations for a query. Currently this field will
                                +   * be serving index recommendations for a query.
                                +   * 
                                + * + * + * .google.spanner.v1.QueryAdvisorResult query_advice = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.QueryAdvisorResultOrBuilder getQueryAdviceOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java index 858e911a6b6..e5b42e99007 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/query_plan.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class QueryPlanProto { +@com.google.protobuf.Generated +public final class QueryPlanProto extends com.google.protobuf.GeneratedFile { private QueryPlanProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "QueryPlanProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,23 +42,31 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PlanNode_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PlanNode_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PlanNode_ChildLink_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PlanNode_ChildLink_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PlanNode_ShortRepresentation_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PlanNode_ShortRepresentation_SubqueriesEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PlanNode_ShortRepresentation_SubqueriesEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_QueryAdvisorResult_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_QueryAdvisorResult_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_QueryPlan_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_QueryPlan_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -57,42 +77,59 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n\"google/spanner/v1/query_plan.proto\022\021go" - + "ogle.spanner.v1\032\034google/protobuf/struct." - + "proto\"\370\004\n\010PlanNode\022\r\n\005index\030\001 \001(\005\022.\n\004kin" - + "d\030\002 \001(\0162 .google.spanner.v1.PlanNode.Kin" - + "d\022\024\n\014display_name\030\003 \001(\t\022:\n\013child_links\030\004" - + " \003(\0132%.google.spanner.v1.PlanNode.ChildL" - + "ink\022M\n\024short_representation\030\005 \001(\0132/.goog" - + "le.spanner.v1.PlanNode.ShortRepresentati" - + "on\022)\n\010metadata\030\006 \001(\0132\027.google.protobuf.S" - + "truct\0220\n\017execution_stats\030\007 \001(\0132\027.google." - + "protobuf.Struct\032@\n\tChildLink\022\023\n\013child_in" - + "dex\030\001 \001(\005\022\014\n\004type\030\002 \001(\t\022\020\n\010variable\030\003 \001(" - + "\t\032\262\001\n\023ShortRepresentation\022\023\n\013description" - + "\030\001 \001(\t\022S\n\nsubqueries\030\002 \003(\0132?.google.span" - + "ner.v1.PlanNode.ShortRepresentation.Subq" - + "ueriesEntry\0321\n\017SubqueriesEntry\022\013\n\003key\030\001 " - + "\001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\"8\n\004Kind\022\024\n\020KIND_U" - + "NSPECIFIED\020\000\022\016\n\nRELATIONAL\020\001\022\n\n\006SCALAR\020\002" - + "\"<\n\tQueryPlan\022/\n\nplan_nodes\030\001 \003(\0132\033.goog" - + "le.spanner.v1.PlanNodeB\261\001\n\025com.google.sp" - + "anner.v1B\016QueryPlanProtoP\001Z5cloud.google" - + ".com/go/spanner/apiv1/spannerpb;spannerp" - + "b\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Clo" - + "ud\\Spanner\\V1\352\002\032Google::Cloud::Spanner::" - + "V1b\006proto3" + "\n" + + "\"google/spanner/v1/query_plan.proto\022\021go" + + "ogle.spanner.v1\032\037google/api/field_behavi" + + "or.proto\032\034google/protobuf/struct.proto\"\370\004\n" + + "\010PlanNode\022\r\n" + + "\005index\030\001 \001(\005\022.\n" + + "\004kind\030\002 \001(\0162 .google.spanner.v1.PlanNode.Kind\022\024\n" + + "\014display_name\030\003 \001(\t\022:\n" + + "\013child_links\030\004 \003(\0132%.google.spanner.v1.PlanNode.ChildLink\022M\n" + + "\024short_representation\030\005" + + " \001(\0132/.google.spanner.v1.PlanNode.ShortRepresentation\022)\n" + + "\010metadata\030\006 \001(\0132\027.google.protobuf.Struct\0220\n" + + "\017execution_stats\030\007 \001(\0132\027.google.protobuf.Struct\032@\n" + + "\tChildLink\022\023\n" + + "\013child_index\030\001 \001(\005\022\014\n" + + "\004type\030\002 \001(\t\022\020\n" + + "\010variable\030\003 \001(\t\032\262\001\n" + + "\023ShortRepresentation\022\023\n" + + "\013description\030\001 \001(\t\022S\n\n" + + "subqueries\030\002 \003(\0132?.google.spanner.v1." + + "PlanNode.ShortRepresentation.SubqueriesEntry\0321\n" + + "\017SubqueriesEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\005:\0028\001\"8\n" + + "\004Kind\022\024\n" + + "\020KIND_UNSPECIFIED\020\000\022\016\n\n" + + "RELATIONAL\020\001\022\n\n" + + "\006SCALAR\020\002\"\244\001\n" + + "\022QueryAdvisorResult\022L\n" + + "\014index_advice\030\001 \003(\01321" + + ".google.spanner.v1.QueryAdvisorResult.IndexAdviceB\003\340A\001\032@\n" + + "\013IndexAdvice\022\020\n" + + "\003ddl\030\001 \003(\tB\003\340A\001\022\037\n" + + "\022improvement_factor\030\002 \001(\001B\003\340A\001\"~\n" + + "\tQueryPlan\022/\n\n" + + "plan_nodes\030\001 \003(\0132\033.google.spanner.v1.PlanNode\022@\n" + + "\014query_advice\030\002" + + " \001(\0132%.google.spanner.v1.QueryAdvisorResultB\003\340A\001B\261\001\n" + + "\025com.google.spanner.v1B\016QueryPlanProtoP\001Z5cloud.google.com/go/spanne" + + "r/apiv1/spannerpb;spannerpb\252\002\027Google.Clo" + + "ud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352" + + "\002\032Google::Cloud::Spanner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.api.FieldBehaviorProto.getDescriptor(), com.google.protobuf.StructProto.getDescriptor(), }); - internal_static_google_spanner_v1_PlanNode_descriptor = - getDescriptor().getMessageTypes().get(0); + internal_static_google_spanner_v1_PlanNode_descriptor = getDescriptor().getMessageType(0); internal_static_google_spanner_v1_PlanNode_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_PlanNode_descriptor, new java.lang.String[] { "Index", @@ -104,40 +141,60 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ExecutionStats", }); internal_static_google_spanner_v1_PlanNode_ChildLink_descriptor = - internal_static_google_spanner_v1_PlanNode_descriptor.getNestedTypes().get(0); + internal_static_google_spanner_v1_PlanNode_descriptor.getNestedType(0); internal_static_google_spanner_v1_PlanNode_ChildLink_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_PlanNode_ChildLink_descriptor, new java.lang.String[] { "ChildIndex", "Type", "Variable", }); internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor = - internal_static_google_spanner_v1_PlanNode_descriptor.getNestedTypes().get(1); + internal_static_google_spanner_v1_PlanNode_descriptor.getNestedType(1); internal_static_google_spanner_v1_PlanNode_ShortRepresentation_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor, new java.lang.String[] { "Description", "Subqueries", }); internal_static_google_spanner_v1_PlanNode_ShortRepresentation_SubqueriesEntry_descriptor = - internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor - .getNestedTypes() - .get(0); + internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor.getNestedType(0); internal_static_google_spanner_v1_PlanNode_ShortRepresentation_SubqueriesEntry_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_PlanNode_ShortRepresentation_SubqueriesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); - internal_static_google_spanner_v1_QueryPlan_descriptor = - getDescriptor().getMessageTypes().get(1); + internal_static_google_spanner_v1_QueryAdvisorResult_descriptor = + getDescriptor().getMessageType(1); + internal_static_google_spanner_v1_QueryAdvisorResult_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_QueryAdvisorResult_descriptor, + new java.lang.String[] { + "IndexAdvice", + }); + internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_descriptor = + internal_static_google_spanner_v1_QueryAdvisorResult_descriptor.getNestedType(0); + internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spanner_v1_QueryAdvisorResult_IndexAdvice_descriptor, + new java.lang.String[] { + "Ddl", "ImprovementFactor", + }); + internal_static_google_spanner_v1_QueryPlan_descriptor = getDescriptor().getMessageType(2); internal_static_google_spanner_v1_QueryPlan_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_QueryPlan_descriptor, new java.lang.String[] { - "PlanNodes", + "PlanNodes", "QueryAdvice", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); com.google.protobuf.StructProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Range.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Range.java new file mode 100644 index 00000000000..e01efe1b227 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Range.java @@ -0,0 +1,944 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * A `Range` represents a range of keys in a database. The keys themselves
                                + * are encoded in "sortable string format", also known as ssformat. Consult
                                + * Spanner's open source client libraries for details on the encoding.
                                + *
                                + * Each range represents a contiguous range of rows, possibly from multiple
                                + * tables/indexes. Each range is associated with a single paxos group (known as
                                + * a "group" throughout this API), a split (which names the exact range within
                                + * the group), and a generation that can be used to determine whether a given
                                + * `Range` represents a newer or older location for the key range.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.Range} + */ +@com.google.protobuf.Generated +public final class Range extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.Range) + RangeOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Range"); + } + + // Use Range.newBuilder() to construct. + private Range(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Range() { + startKey_ = com.google.protobuf.ByteString.EMPTY; + limitKey_ = com.google.protobuf.ByteString.EMPTY; + generation_ = com.google.protobuf.ByteString.EMPTY; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto.internal_static_google_spanner_v1_Range_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Range_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Range.class, com.google.spanner.v1.Range.Builder.class); + } + + public static final int START_KEY_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString startKey_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * The start key of the range, inclusive. Encoded in "sortable string format"
                                +   * (ssformat).
                                +   * 
                                + * + * bytes start_key = 1; + * + * @return The startKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getStartKey() { + return startKey_; + } + + public static final int LIMIT_KEY_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString limitKey_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * The limit key of the range, exclusive. Encoded in "sortable string format"
                                +   * (ssformat).
                                +   * 
                                + * + * bytes limit_key = 2; + * + * @return The limitKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getLimitKey() { + return limitKey_; + } + + public static final int GROUP_UID_FIELD_NUMBER = 3; + private long groupUid_ = 0L; + + /** + * + * + *
                                +   * The UID of the paxos group where this range is stored. UIDs are unique
                                +   * within the database. References `Group.group_uid`.
                                +   * 
                                + * + * uint64 group_uid = 3; + * + * @return The groupUid. + */ + @java.lang.Override + public long getGroupUid() { + return groupUid_; + } + + public static final int SPLIT_ID_FIELD_NUMBER = 4; + private long splitId_ = 0L; + + /** + * + * + *
                                +   * A group can store multiple ranges of keys. Each key range is named by an
                                +   * ID (the split ID). Within a group, split IDs are unique. The `split_id`
                                +   * names the exact split in `group_uid` where this range is stored.
                                +   * 
                                + * + * uint64 split_id = 4; + * + * @return The splitId. + */ + @java.lang.Override + public long getSplitId() { + return splitId_; + } + + public static final int GENERATION_FIELD_NUMBER = 5; + private com.google.protobuf.ByteString generation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * `generation` indicates the freshness of the range information contained
                                +   * in this proto. Generations can be compared lexicographically; if generation
                                +   * A is greater than generation B, then the `Range` corresponding to A is
                                +   * newer than the `Range` corresponding to B, and should be used
                                +   * preferentially.
                                +   * 
                                + * + * bytes generation = 5; + * + * @return The generation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGeneration() { + return generation_; + } + + 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 (!startKey_.isEmpty()) { + output.writeBytes(1, startKey_); + } + if (!limitKey_.isEmpty()) { + output.writeBytes(2, limitKey_); + } + if (groupUid_ != 0L) { + output.writeUInt64(3, groupUid_); + } + if (splitId_ != 0L) { + output.writeUInt64(4, splitId_); + } + if (!generation_.isEmpty()) { + output.writeBytes(5, generation_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!startKey_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, startKey_); + } + if (!limitKey_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, limitKey_); + } + if (groupUid_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(3, groupUid_); + } + if (splitId_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(4, splitId_); + } + if (!generation_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(5, generation_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.Range)) { + return super.equals(obj); + } + com.google.spanner.v1.Range other = (com.google.spanner.v1.Range) obj; + + if (!getStartKey().equals(other.getStartKey())) return false; + if (!getLimitKey().equals(other.getLimitKey())) return false; + if (getGroupUid() != other.getGroupUid()) return false; + if (getSplitId() != other.getSplitId()) return false; + if (!getGeneration().equals(other.getGeneration())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + START_KEY_FIELD_NUMBER; + hash = (53 * hash) + getStartKey().hashCode(); + hash = (37 * hash) + LIMIT_KEY_FIELD_NUMBER; + hash = (53 * hash) + getLimitKey().hashCode(); + hash = (37 * hash) + GROUP_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getGroupUid()); + hash = (37 * hash) + SPLIT_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getSplitId()); + hash = (37 * hash) + GENERATION_FIELD_NUMBER; + hash = (53 * hash) + getGeneration().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.Range parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Range parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Range parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Range parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Range parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Range parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Range parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Range parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Range parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Range parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Range parseFrom(com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Range parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.Range 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * A `Range` represents a range of keys in a database. The keys themselves
                                +   * are encoded in "sortable string format", also known as ssformat. Consult
                                +   * Spanner's open source client libraries for details on the encoding.
                                +   *
                                +   * Each range represents a contiguous range of rows, possibly from multiple
                                +   * tables/indexes. Each range is associated with a single paxos group (known as
                                +   * a "group" throughout this API), a split (which names the exact range within
                                +   * the group), and a generation that can be used to determine whether a given
                                +   * `Range` represents a newer or older location for the key range.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.Range} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.Range) + com.google.spanner.v1.RangeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto.internal_static_google_spanner_v1_Range_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Range_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Range.class, com.google.spanner.v1.Range.Builder.class); + } + + // Construct using com.google.spanner.v1.Range.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + startKey_ = com.google.protobuf.ByteString.EMPTY; + limitKey_ = com.google.protobuf.ByteString.EMPTY; + groupUid_ = 0L; + splitId_ = 0L; + generation_ = com.google.protobuf.ByteString.EMPTY; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto.internal_static_google_spanner_v1_Range_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.Range getDefaultInstanceForType() { + return com.google.spanner.v1.Range.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.Range build() { + com.google.spanner.v1.Range result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.Range buildPartial() { + com.google.spanner.v1.Range result = new com.google.spanner.v1.Range(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.Range result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.startKey_ = startKey_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.limitKey_ = limitKey_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.groupUid_ = groupUid_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.splitId_ = splitId_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.generation_ = generation_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.Range) { + return mergeFrom((com.google.spanner.v1.Range) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.Range other) { + if (other == com.google.spanner.v1.Range.getDefaultInstance()) return this; + if (!other.getStartKey().isEmpty()) { + setStartKey(other.getStartKey()); + } + if (!other.getLimitKey().isEmpty()) { + setLimitKey(other.getLimitKey()); + } + if (other.getGroupUid() != 0L) { + setGroupUid(other.getGroupUid()); + } + if (other.getSplitId() != 0L) { + setSplitId(other.getSplitId()); + } + if (!other.getGeneration().isEmpty()) { + setGeneration(other.getGeneration()); + } + 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: + { + startKey_ = input.readBytes(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + limitKey_ = input.readBytes(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + groupUid_ = input.readUInt64(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + splitId_ = input.readUInt64(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 42: + { + generation_ = input.readBytes(); + bitField0_ |= 0x00000010; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.ByteString startKey_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * The start key of the range, inclusive. Encoded in "sortable string format"
                                +     * (ssformat).
                                +     * 
                                + * + * bytes start_key = 1; + * + * @return The startKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getStartKey() { + return startKey_; + } + + /** + * + * + *
                                +     * The start key of the range, inclusive. Encoded in "sortable string format"
                                +     * (ssformat).
                                +     * 
                                + * + * bytes start_key = 1; + * + * @param value The startKey to set. + * @return This builder for chaining. + */ + public Builder setStartKey(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + startKey_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The start key of the range, inclusive. Encoded in "sortable string format"
                                +     * (ssformat).
                                +     * 
                                + * + * bytes start_key = 1; + * + * @return This builder for chaining. + */ + public Builder clearStartKey() { + bitField0_ = (bitField0_ & ~0x00000001); + startKey_ = getDefaultInstance().getStartKey(); + onChanged(); + return this; + } + + private com.google.protobuf.ByteString limitKey_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * The limit key of the range, exclusive. Encoded in "sortable string format"
                                +     * (ssformat).
                                +     * 
                                + * + * bytes limit_key = 2; + * + * @return The limitKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getLimitKey() { + return limitKey_; + } + + /** + * + * + *
                                +     * The limit key of the range, exclusive. Encoded in "sortable string format"
                                +     * (ssformat).
                                +     * 
                                + * + * bytes limit_key = 2; + * + * @param value The limitKey to set. + * @return This builder for chaining. + */ + public Builder setLimitKey(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + limitKey_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The limit key of the range, exclusive. Encoded in "sortable string format"
                                +     * (ssformat).
                                +     * 
                                + * + * bytes limit_key = 2; + * + * @return This builder for chaining. + */ + public Builder clearLimitKey() { + bitField0_ = (bitField0_ & ~0x00000002); + limitKey_ = getDefaultInstance().getLimitKey(); + onChanged(); + return this; + } + + private long groupUid_; + + /** + * + * + *
                                +     * The UID of the paxos group where this range is stored. UIDs are unique
                                +     * within the database. References `Group.group_uid`.
                                +     * 
                                + * + * uint64 group_uid = 3; + * + * @return The groupUid. + */ + @java.lang.Override + public long getGroupUid() { + return groupUid_; + } + + /** + * + * + *
                                +     * The UID of the paxos group where this range is stored. UIDs are unique
                                +     * within the database. References `Group.group_uid`.
                                +     * 
                                + * + * uint64 group_uid = 3; + * + * @param value The groupUid to set. + * @return This builder for chaining. + */ + public Builder setGroupUid(long value) { + + groupUid_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The UID of the paxos group where this range is stored. UIDs are unique
                                +     * within the database. References `Group.group_uid`.
                                +     * 
                                + * + * uint64 group_uid = 3; + * + * @return This builder for chaining. + */ + public Builder clearGroupUid() { + bitField0_ = (bitField0_ & ~0x00000004); + groupUid_ = 0L; + onChanged(); + return this; + } + + private long splitId_; + + /** + * + * + *
                                +     * A group can store multiple ranges of keys. Each key range is named by an
                                +     * ID (the split ID). Within a group, split IDs are unique. The `split_id`
                                +     * names the exact split in `group_uid` where this range is stored.
                                +     * 
                                + * + * uint64 split_id = 4; + * + * @return The splitId. + */ + @java.lang.Override + public long getSplitId() { + return splitId_; + } + + /** + * + * + *
                                +     * A group can store multiple ranges of keys. Each key range is named by an
                                +     * ID (the split ID). Within a group, split IDs are unique. The `split_id`
                                +     * names the exact split in `group_uid` where this range is stored.
                                +     * 
                                + * + * uint64 split_id = 4; + * + * @param value The splitId to set. + * @return This builder for chaining. + */ + public Builder setSplitId(long value) { + + splitId_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A group can store multiple ranges of keys. Each key range is named by an
                                +     * ID (the split ID). Within a group, split IDs are unique. The `split_id`
                                +     * names the exact split in `group_uid` where this range is stored.
                                +     * 
                                + * + * uint64 split_id = 4; + * + * @return This builder for chaining. + */ + public Builder clearSplitId() { + bitField0_ = (bitField0_ & ~0x00000008); + splitId_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString generation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * `generation` indicates the freshness of the range information contained
                                +     * in this proto. Generations can be compared lexicographically; if generation
                                +     * A is greater than generation B, then the `Range` corresponding to A is
                                +     * newer than the `Range` corresponding to B, and should be used
                                +     * preferentially.
                                +     * 
                                + * + * bytes generation = 5; + * + * @return The generation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGeneration() { + return generation_; + } + + /** + * + * + *
                                +     * `generation` indicates the freshness of the range information contained
                                +     * in this proto. Generations can be compared lexicographically; if generation
                                +     * A is greater than generation B, then the `Range` corresponding to A is
                                +     * newer than the `Range` corresponding to B, and should be used
                                +     * preferentially.
                                +     * 
                                + * + * bytes generation = 5; + * + * @param value The generation to set. + * @return This builder for chaining. + */ + public Builder setGeneration(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + generation_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * `generation` indicates the freshness of the range information contained
                                +     * in this proto. Generations can be compared lexicographically; if generation
                                +     * A is greater than generation B, then the `Range` corresponding to A is
                                +     * newer than the `Range` corresponding to B, and should be used
                                +     * preferentially.
                                +     * 
                                + * + * bytes generation = 5; + * + * @return This builder for chaining. + */ + public Builder clearGeneration() { + bitField0_ = (bitField0_ & ~0x00000010); + generation_ = getDefaultInstance().getGeneration(); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.Range) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.Range) + private static final com.google.spanner.v1.Range DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.Range(); + } + + public static com.google.spanner.v1.Range getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Range parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.Range getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RangeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RangeOrBuilder.java new file mode 100644 index 00000000000..d4f2488803f --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RangeOrBuilder.java @@ -0,0 +1,102 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface RangeOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.Range) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * The start key of the range, inclusive. Encoded in "sortable string format"
                                +   * (ssformat).
                                +   * 
                                + * + * bytes start_key = 1; + * + * @return The startKey. + */ + com.google.protobuf.ByteString getStartKey(); + + /** + * + * + *
                                +   * The limit key of the range, exclusive. Encoded in "sortable string format"
                                +   * (ssformat).
                                +   * 
                                + * + * bytes limit_key = 2; + * + * @return The limitKey. + */ + com.google.protobuf.ByteString getLimitKey(); + + /** + * + * + *
                                +   * The UID of the paxos group where this range is stored. UIDs are unique
                                +   * within the database. References `Group.group_uid`.
                                +   * 
                                + * + * uint64 group_uid = 3; + * + * @return The groupUid. + */ + long getGroupUid(); + + /** + * + * + *
                                +   * A group can store multiple ranges of keys. Each key range is named by an
                                +   * ID (the split ID). Within a group, split IDs are unique. The `split_id`
                                +   * names the exact split in `group_uid` where this range is stored.
                                +   * 
                                + * + * uint64 split_id = 4; + * + * @return The splitId. + */ + long getSplitId(); + + /** + * + * + *
                                +   * `generation` indicates the freshness of the range information contained
                                +   * in this proto. Generations can be compared lexicographically; if generation
                                +   * A is greater than generation B, then the `Range` corresponding to A is
                                +   * newer than the `Range` corresponding to B, and should be used
                                +   * preferentially.
                                +   * 
                                + * + * bytes generation = 5; + * + * @return The generation. + */ + com.google.protobuf.ByteString getGeneration(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java index 7c73c96dfbf..692d4e3f994 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.ReadRequest} */ -public final class ReadRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ReadRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ReadRequest) ReadRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReadRequest"); + } + // Use ReadRequest.newBuilder() to construct. - private ReadRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReadRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -50,19 +63,13 @@ private ReadRequest() { lockHint_ = 0; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReadRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ReadRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ReadRequest_fieldAccessorTable @@ -87,7 +94,7 @@ public enum OrderBy implements com.google.protobuf.ProtocolMessageEnum { *
                                      * Default value.
                                      *
                                -     * ORDER_BY_UNSPECIFIED is equivalent to ORDER_BY_PRIMARY_KEY.
                                +     * `ORDER_BY_UNSPECIFIED` is equivalent to `ORDER_BY_PRIMARY_KEY`.
                                      * 
                                * * ORDER_BY_UNSPECIFIED = 0; @@ -100,7 +107,7 @@ public enum OrderBy implements com.google.protobuf.ProtocolMessageEnum { * Read rows are returned in primary key order. * * In the event that this option is used in conjunction with the - * `partition_token` field, the API will return an `INVALID_ARGUMENT` error. + * `partition_token` field, the API returns an `INVALID_ARGUMENT` error. * * * ORDER_BY_PRIMARY_KEY = 1; @@ -119,18 +126,29 @@ public enum OrderBy implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "OrderBy"); + } + /** * * *
                                      * Default value.
                                      *
                                -     * ORDER_BY_UNSPECIFIED is equivalent to ORDER_BY_PRIMARY_KEY.
                                +     * `ORDER_BY_UNSPECIFIED` is equivalent to `ORDER_BY_PRIMARY_KEY`.
                                      * 
                                * * ORDER_BY_UNSPECIFIED = 0; */ public static final int ORDER_BY_UNSPECIFIED_VALUE = 0; + /** * * @@ -138,12 +156,13 @@ public enum OrderBy implements com.google.protobuf.ProtocolMessageEnum { * Read rows are returned in primary key order. * * In the event that this option is used in conjunction with the - * `partition_token` field, the API will return an `INVALID_ARGUMENT` error. + * `partition_token` field, the API returns an `INVALID_ARGUMENT` error. * * * ORDER_BY_PRIMARY_KEY = 1; */ public static final int ORDER_BY_PRIMARY_KEY_VALUE = 1; + /** * * @@ -213,7 +232,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.ReadRequest.getDescriptor().getEnumTypes().get(0); } @@ -254,7 +273,7 @@ public enum LockHint implements com.google.protobuf.ProtocolMessageEnum { *
                                      * Default value.
                                      *
                                -     * LOCK_HINT_UNSPECIFIED is equivalent to LOCK_HINT_SHARED.
                                +     * `LOCK_HINT_UNSPECIFIED` is equivalent to `LOCK_HINT_SHARED`.
                                      * 
                                * * LOCK_HINT_UNSPECIFIED = 0; @@ -299,8 +318,8 @@ public enum LockHint implements com.google.protobuf.ProtocolMessageEnum { * serialized. Each transaction waits its turn to acquire the lock and * avoids getting into deadlock situations. * - * Because the exclusive lock hint is just a hint, it should not be - * considered equivalent to a mutex. In other words, you should not use + * Because the exclusive lock hint is just a hint, it shouldn't be + * considered equivalent to a mutex. In other words, you shouldn't use * Spanner exclusive locks as a mutual exclusion mechanism for the execution * of code outside of Spanner. * @@ -317,18 +336,29 @@ public enum LockHint implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "LockHint"); + } + /** * * *
                                      * Default value.
                                      *
                                -     * LOCK_HINT_UNSPECIFIED is equivalent to LOCK_HINT_SHARED.
                                +     * `LOCK_HINT_UNSPECIFIED` is equivalent to `LOCK_HINT_SHARED`.
                                      * 
                                * * LOCK_HINT_UNSPECIFIED = 0; */ public static final int LOCK_HINT_UNSPECIFIED_VALUE = 0; + /** * * @@ -347,6 +377,7 @@ public enum LockHint implements com.google.protobuf.ProtocolMessageEnum { * LOCK_HINT_SHARED = 1; */ public static final int LOCK_HINT_SHARED_VALUE = 1; + /** * * @@ -368,8 +399,8 @@ public enum LockHint implements com.google.protobuf.ProtocolMessageEnum { * serialized. Each transaction waits its turn to acquire the lock and * avoids getting into deadlock situations. * - * Because the exclusive lock hint is just a hint, it should not be - * considered equivalent to a mutex. In other words, you should not use + * Because the exclusive lock hint is just a hint, it shouldn't be + * considered equivalent to a mutex. In other words, you shouldn't use * Spanner exclusive locks as a mutual exclusion mechanism for the execution * of code outside of Spanner. * @@ -442,7 +473,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.ReadRequest.getDescriptor().getEnumTypes().get(1); } @@ -472,6 +503,7 @@ private LockHint(int value) { @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -497,6 +529,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -525,6 +558,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public static final int TRANSACTION_FIELD_NUMBER = 2; private com.google.spanner.v1.TransactionSelector transaction_; + /** * * @@ -541,6 +575,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public boolean hasTransaction() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -559,6 +594,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { ? com.google.spanner.v1.TransactionSelector.getDefaultInstance() : transaction_; } + /** * * @@ -580,6 +616,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde @SuppressWarnings("serial") private volatile java.lang.Object table_ = ""; + /** * * @@ -603,6 +640,7 @@ public java.lang.String getTable() { return s; } } + /** * * @@ -631,6 +669,7 @@ public com.google.protobuf.ByteString getTableBytes() { @SuppressWarnings("serial") private volatile java.lang.Object index_ = ""; + /** * * @@ -659,6 +698,7 @@ public java.lang.String getIndex() { return s; } } + /** * * @@ -693,6 +733,7 @@ public com.google.protobuf.ByteString getIndexBytes() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -708,6 +749,7 @@ public com.google.protobuf.ByteString getIndexBytes() { public com.google.protobuf.ProtocolStringList getColumnsList() { return columns_; } + /** * * @@ -723,6 +765,7 @@ public com.google.protobuf.ProtocolStringList getColumnsList() { public int getColumnsCount() { return columns_.size(); } + /** * * @@ -739,6 +782,7 @@ public int getColumnsCount() { public java.lang.String getColumns(int index) { return columns_.get(index); } + /** * * @@ -758,6 +802,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { public static final int KEY_SET_FIELD_NUMBER = 6; private com.google.spanner.v1.KeySet keySet_; + /** * * @@ -772,11 +817,11 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -788,6 +833,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { public boolean hasKeySet() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -802,11 +848,11 @@ public boolean hasKeySet() { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -818,6 +864,7 @@ public boolean hasKeySet() { public com.google.spanner.v1.KeySet getKeySet() { return keySet_ == null ? com.google.spanner.v1.KeySet.getDefaultInstance() : keySet_; } + /** * * @@ -832,11 +879,11 @@ public com.google.spanner.v1.KeySet getKeySet() { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -849,12 +896,13 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { public static final int LIMIT_FIELD_NUMBER = 8; private long limit_ = 0L; + /** * * *
                                    * If greater than zero, only the first `limit` rows are yielded. If `limit`
                                -   * is zero, the default is no limit. A limit cannot be specified if
                                +   * is zero, the default is no limit. A limit can't be specified if
                                    * `partition_token` is set.
                                    * 
                                * @@ -869,6 +917,7 @@ public long getLimit() { public static final int RESUME_TOKEN_FIELD_NUMBER = 9; private com.google.protobuf.ByteString resumeToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -892,12 +941,13 @@ public com.google.protobuf.ByteString getResumeToken() { public static final int PARTITION_TOKEN_FIELD_NUMBER = 10; private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * *
                                -   * If present, results will be restricted to the specified partition
                                -   * previously created using PartitionRead().    There must be an exact
                                +   * If present, results are restricted to the specified partition
                                +   * previously created using `PartitionRead`. There must be an exact
                                    * match for the values of fields common to this message and the
                                    * PartitionReadRequest message used to create this partition_token.
                                    * 
                                @@ -913,6 +963,7 @@ public com.google.protobuf.ByteString getPartitionToken() { public static final int REQUEST_OPTIONS_FIELD_NUMBER = 11; private com.google.spanner.v1.RequestOptions requestOptions_; + /** * * @@ -928,6 +979,7 @@ public com.google.protobuf.ByteString getPartitionToken() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -945,6 +997,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { ? com.google.spanner.v1.RequestOptions.getDefaultInstance() : requestOptions_; } + /** * * @@ -963,6 +1016,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public static final int DIRECTED_READ_OPTIONS_FIELD_NUMBER = 14; private com.google.spanner.v1.DirectedReadOptions directedReadOptions_; + /** * * @@ -978,6 +1032,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasDirectedReadOptions() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -995,6 +1050,7 @@ public com.google.spanner.v1.DirectedReadOptions getDirectedReadOptions() { ? com.google.spanner.v1.DirectedReadOptions.getDefaultInstance() : directedReadOptions_; } + /** * * @@ -1013,6 +1069,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions public static final int DATA_BOOST_ENABLED_FIELD_NUMBER = 15; private boolean dataBoostEnabled_ = false; + /** * * @@ -1020,7 +1077,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions * If this is for a partitioned read and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. * * @@ -1035,17 +1092,19 @@ public boolean getDataBoostEnabled() { public static final int ORDER_BY_FIELD_NUMBER = 16; private int orderBy_ = 0; + /** * * *
                                    * Optional. Order for the returned rows.
                                    *
                                -   * By default, Spanner will return result rows in primary key order except for
                                -   * PartitionRead requests. For applications that do not require rows to be
                                +   * By default, Spanner returns result rows in primary key order except for
                                +   * PartitionRead requests. For applications that don't require rows to be
                                    * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                    * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -   * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +   * resulting in lower latencies in certain cases (for example, bulk point
                                +   * lookups).
                                    * 
                                * * @@ -1058,17 +1117,19 @@ public boolean getDataBoostEnabled() { public int getOrderByValue() { return orderBy_; } + /** * * *
                                    * Optional. Order for the returned rows.
                                    *
                                -   * By default, Spanner will return result rows in primary key order except for
                                -   * PartitionRead requests. For applications that do not require rows to be
                                +   * By default, Spanner returns result rows in primary key order except for
                                +   * PartitionRead requests. For applications that don't require rows to be
                                    * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                    * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -   * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +   * resulting in lower latencies in certain cases (for example, bulk point
                                +   * lookups).
                                    * 
                                * * @@ -1086,6 +1147,7 @@ public com.google.spanner.v1.ReadRequest.OrderBy getOrderBy() { public static final int LOCK_HINT_FIELD_NUMBER = 17; private int lockHint_ = 0; + /** * * @@ -1104,6 +1166,7 @@ public com.google.spanner.v1.ReadRequest.OrderBy getOrderBy() { public int getLockHintValue() { return lockHint_; } + /** * * @@ -1125,6 +1188,80 @@ public com.google.spanner.v1.ReadRequest.LockHint getLockHint() { return result == null ? com.google.spanner.v1.ReadRequest.LockHint.UNRECOGNIZED : result; } + public static final int ROUTING_HINT_FIELD_NUMBER = 18; + private com.google.spanner.v1.RoutingHint routingHint_; + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + @java.lang.Override + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHint getRoutingHint() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -1139,20 +1276,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, table_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(index_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, index_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(index_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, index_); } for (int i = 0; i < columns_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, columns_.getRaw(i)); + com.google.protobuf.GeneratedMessage.writeString(output, 5, columns_.getRaw(i)); } if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(6, getKeySet()); @@ -1181,6 +1318,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (lockHint_ != com.google.spanner.v1.ReadRequest.LockHint.LOCK_HINT_UNSPECIFIED.getNumber()) { output.writeEnum(17, lockHint_); } + if (((bitField0_ & 0x00000010) != 0)) { + output.writeMessage(18, getRoutingHint()); + } getUnknownFields().writeTo(output); } @@ -1190,17 +1330,17 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTransaction()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(table_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, table_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, table_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(index_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, index_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(index_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, index_); } { int dataSize = 0; @@ -1238,6 +1378,9 @@ public int getSerializedSize() { if (lockHint_ != com.google.spanner.v1.ReadRequest.LockHint.LOCK_HINT_UNSPECIFIED.getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(17, lockHint_); } + if (((bitField0_ & 0x00000010) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(18, getRoutingHint()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -1279,6 +1422,10 @@ public boolean equals(final java.lang.Object obj) { if (getDataBoostEnabled() != other.getDataBoostEnabled()) return false; if (orderBy_ != other.orderBy_) return false; if (lockHint_ != other.lockHint_) return false; + if (hasRoutingHint() != other.hasRoutingHint()) return false; + if (hasRoutingHint()) { + if (!getRoutingHint().equals(other.getRoutingHint())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -1328,6 +1475,10 @@ public int hashCode() { hash = (53 * hash) + orderBy_; hash = (37 * hash) + LOCK_HINT_FIELD_NUMBER; hash = (53 * hash) + lockHint_; + if (hasRoutingHint()) { + hash = (37 * hash) + ROUTING_HINT_FIELD_NUMBER; + hash = (53 * hash) + getRoutingHint().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -1369,38 +1520,38 @@ public static com.google.spanner.v1.ReadRequest parseFrom( public static com.google.spanner.v1.ReadRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ReadRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ReadRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ReadRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ReadRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ReadRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1423,10 +1574,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1437,7 +1589,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.ReadRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ReadRequest) com.google.spanner.v1.ReadRequestOrBuilder { @@ -1447,7 +1599,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ReadRequest_fieldAccessorTable @@ -1461,17 +1613,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTransactionFieldBuilder(); - getKeySetFieldBuilder(); - getRequestOptionsFieldBuilder(); - getDirectedReadOptionsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTransactionFieldBuilder(); + internalGetKeySetFieldBuilder(); + internalGetRequestOptionsFieldBuilder(); + internalGetDirectedReadOptionsFieldBuilder(); + internalGetRoutingHintFieldBuilder(); } } @@ -1509,6 +1662,11 @@ public Builder clear() { dataBoostEnabled_ = false; orderBy_ = 0; lockHint_ = 0; + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } return this; } @@ -1597,42 +1755,14 @@ private void buildPartial0(com.google.spanner.v1.ReadRequest result) { if (((from_bitField0_ & 0x00002000) != 0)) { result.lockHint_ = lockHint_; } + if (((from_bitField0_ & 0x00004000) != 0)) { + result.routingHint_ = + routingHintBuilder_ == null ? routingHint_ : routingHintBuilder_.build(); + to_bitField0_ |= 0x00000010; + } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ReadRequest) { @@ -1679,10 +1809,10 @@ public Builder mergeFrom(com.google.spanner.v1.ReadRequest other) { if (other.getLimit() != 0L) { setLimit(other.getLimit()); } - if (other.getResumeToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getResumeToken().isEmpty()) { setResumeToken(other.getResumeToken()); } - if (other.getPartitionToken() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getPartitionToken().isEmpty()) { setPartitionToken(other.getPartitionToken()); } if (other.hasRequestOptions()) { @@ -1700,6 +1830,9 @@ public Builder mergeFrom(com.google.spanner.v1.ReadRequest other) { if (other.lockHint_ != 0) { setLockHintValue(other.getLockHintValue()); } + if (other.hasRoutingHint()) { + mergeRoutingHint(other.getRoutingHint()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1734,7 +1867,8 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTransactionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -1759,7 +1893,7 @@ public Builder mergeFrom( } // case 42 case 50: { - input.readMessage(getKeySetFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetKeySetFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000020; break; } // case 50 @@ -1783,14 +1917,15 @@ public Builder mergeFrom( } // case 82 case 90: { - input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000200; break; } // case 90 case 114: { input.readMessage( - getDirectedReadOptionsFieldBuilder().getBuilder(), extensionRegistry); + internalGetDirectedReadOptionsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000400; break; } // case 114 @@ -1812,6 +1947,13 @@ public Builder mergeFrom( bitField0_ |= 0x00002000; break; } // case 136 + case 146: + { + input.readMessage( + internalGetRoutingHintFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00004000; + break; + } // case 146 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1832,6 +1974,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -1856,6 +1999,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -1880,6 +2024,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1903,6 +2048,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1922,6 +2068,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -1948,11 +2095,12 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.TransactionSelector transaction_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> transactionBuilder_; + /** * * @@ -1968,6 +2116,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1989,6 +2138,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { return transactionBuilder_.getMessage(); } } + /** * * @@ -2012,6 +2162,7 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { onChanged(); return this; } + /** * * @@ -2033,6 +2184,7 @@ public Builder setTransaction( onChanged(); return this; } + /** * * @@ -2061,6 +2213,7 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) } return this; } + /** * * @@ -2081,6 +2234,7 @@ public Builder clearTransaction() { onChanged(); return this; } + /** * * @@ -2094,8 +2248,9 @@ public Builder clearTransaction() { public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTransactionFieldBuilder().getBuilder(); + return internalGetTransactionFieldBuilder().getBuilder(); } + /** * * @@ -2115,6 +2270,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde : transaction_; } } + /** * * @@ -2125,14 +2281,14 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * * .google.spanner.v1.TransactionSelector transaction = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder> - getTransactionFieldBuilder() { + internalGetTransactionFieldBuilder() { if (transactionBuilder_ == null) { transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionSelector, com.google.spanner.v1.TransactionSelector.Builder, com.google.spanner.v1.TransactionSelectorOrBuilder>( @@ -2143,6 +2299,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde } private java.lang.Object table_ = ""; + /** * * @@ -2165,6 +2322,7 @@ public java.lang.String getTable() { return (java.lang.String) ref; } } + /** * * @@ -2187,6 +2345,7 @@ public com.google.protobuf.ByteString getTableBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2208,6 +2367,7 @@ public Builder setTable(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2225,6 +2385,7 @@ public Builder clearTable() { onChanged(); return this; } + /** * * @@ -2249,6 +2410,7 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { } private java.lang.Object index_ = ""; + /** * * @@ -2276,6 +2438,7 @@ public java.lang.String getIndex() { return (java.lang.String) ref; } } + /** * * @@ -2303,6 +2466,7 @@ public com.google.protobuf.ByteString getIndexBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2329,6 +2493,7 @@ public Builder setIndex(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2351,6 +2516,7 @@ public Builder clearIndex() { onChanged(); return this; } + /** * * @@ -2388,6 +2554,7 @@ private void ensureColumnsIsMutable() { } bitField0_ |= 0x00000010; } + /** * * @@ -2404,6 +2571,7 @@ public com.google.protobuf.ProtocolStringList getColumnsList() { columns_.makeImmutable(); return columns_; } + /** * * @@ -2419,6 +2587,7 @@ public com.google.protobuf.ProtocolStringList getColumnsList() { public int getColumnsCount() { return columns_.size(); } + /** * * @@ -2435,6 +2604,7 @@ public int getColumnsCount() { public java.lang.String getColumns(int index) { return columns_.get(index); } + /** * * @@ -2451,6 +2621,7 @@ public java.lang.String getColumns(int index) { public com.google.protobuf.ByteString getColumnsBytes(int index) { return columns_.getByteString(index); } + /** * * @@ -2475,6 +2646,7 @@ public Builder setColumns(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -2498,6 +2670,7 @@ public Builder addColumns(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2518,6 +2691,7 @@ public Builder addAllColumns(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -2537,6 +2711,7 @@ public Builder clearColumns() { onChanged(); return this; } + /** * * @@ -2563,11 +2738,12 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.KeySet keySet_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder> keySetBuilder_; + /** * * @@ -2582,11 +2758,11 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2597,6 +2773,7 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { public boolean hasKeySet() { return ((bitField0_ & 0x00000020) != 0); } + /** * * @@ -2611,11 +2788,11 @@ public boolean hasKeySet() { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2630,6 +2807,7 @@ public com.google.spanner.v1.KeySet getKeySet() { return keySetBuilder_.getMessage(); } } + /** * * @@ -2644,11 +2822,11 @@ public com.google.spanner.v1.KeySet getKeySet() { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2667,6 +2845,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { onChanged(); return this; } + /** * * @@ -2681,11 +2860,11 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2701,6 +2880,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -2715,11 +2895,11 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2743,6 +2923,7 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { } return this; } + /** * * @@ -2757,11 +2938,11 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2777,6 +2958,7 @@ public Builder clearKeySet() { onChanged(); return this; } + /** * * @@ -2791,11 +2973,11 @@ public Builder clearKeySet() { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2804,8 +2986,9 @@ public Builder clearKeySet() { public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { bitField0_ |= 0x00000020; onChanged(); - return getKeySetFieldBuilder().getBuilder(); + return internalGetKeySetFieldBuilder().getBuilder(); } + /** * * @@ -2820,11 +3003,11 @@ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -2837,6 +3020,7 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { return keySet_ == null ? com.google.spanner.v1.KeySet.getDefaultInstance() : keySet_; } } + /** * * @@ -2851,24 +3035,24 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * * .google.spanner.v1.KeySet key_set = 6 [(.google.api.field_behavior) = REQUIRED]; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder> - getKeySetFieldBuilder() { + internalGetKeySetFieldBuilder() { if (keySetBuilder_ == null) { keySetBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.KeySet, com.google.spanner.v1.KeySet.Builder, com.google.spanner.v1.KeySetOrBuilder>( @@ -2879,12 +3063,13 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { } private long limit_; + /** * * *
                                      * If greater than zero, only the first `limit` rows are yielded. If `limit`
                                -     * is zero, the default is no limit. A limit cannot be specified if
                                +     * is zero, the default is no limit. A limit can't be specified if
                                      * `partition_token` is set.
                                      * 
                                * @@ -2896,12 +3081,13 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { public long getLimit() { return limit_; } + /** * * *
                                      * If greater than zero, only the first `limit` rows are yielded. If `limit`
                                -     * is zero, the default is no limit. A limit cannot be specified if
                                +     * is zero, the default is no limit. A limit can't be specified if
                                      * `partition_token` is set.
                                      * 
                                * @@ -2917,12 +3103,13 @@ public Builder setLimit(long value) { onChanged(); return this; } + /** * * *
                                      * If greater than zero, only the first `limit` rows are yielded. If `limit`
                                -     * is zero, the default is no limit. A limit cannot be specified if
                                +     * is zero, the default is no limit. A limit can't be specified if
                                      * `partition_token` is set.
                                      * 
                                * @@ -2938,6 +3125,7 @@ public Builder clearLimit() { } private com.google.protobuf.ByteString resumeToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -2958,6 +3146,7 @@ public Builder clearLimit() { public com.google.protobuf.ByteString getResumeToken() { return resumeToken_; } + /** * * @@ -2984,6 +3173,7 @@ public Builder setResumeToken(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -3008,12 +3198,13 @@ public Builder clearResumeToken() { } private com.google.protobuf.ByteString partitionToken_ = com.google.protobuf.ByteString.EMPTY; + /** * * *
                                -     * If present, results will be restricted to the specified partition
                                -     * previously created using PartitionRead().    There must be an exact
                                +     * If present, results are restricted to the specified partition
                                +     * previously created using `PartitionRead`. There must be an exact
                                      * match for the values of fields common to this message and the
                                      * PartitionReadRequest message used to create this partition_token.
                                      * 
                                @@ -3026,12 +3217,13 @@ public Builder clearResumeToken() { public com.google.protobuf.ByteString getPartitionToken() { return partitionToken_; } + /** * * *
                                -     * If present, results will be restricted to the specified partition
                                -     * previously created using PartitionRead().    There must be an exact
                                +     * If present, results are restricted to the specified partition
                                +     * previously created using `PartitionRead`. There must be an exact
                                      * match for the values of fields common to this message and the
                                      * PartitionReadRequest message used to create this partition_token.
                                      * 
                                @@ -3050,12 +3242,13 @@ public Builder setPartitionToken(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * *
                                -     * If present, results will be restricted to the specified partition
                                -     * previously created using PartitionRead().    There must be an exact
                                +     * If present, results are restricted to the specified partition
                                +     * previously created using `PartitionRead`. There must be an exact
                                      * match for the values of fields common to this message and the
                                      * PartitionReadRequest message used to create this partition_token.
                                      * 
                                @@ -3072,11 +3265,12 @@ public Builder clearPartitionToken() { } private com.google.spanner.v1.RequestOptions requestOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> requestOptionsBuilder_; + /** * * @@ -3091,6 +3285,7 @@ public Builder clearPartitionToken() { public boolean hasRequestOptions() { return ((bitField0_ & 0x00000200) != 0); } + /** * * @@ -3111,6 +3306,7 @@ public com.google.spanner.v1.RequestOptions getRequestOptions() { return requestOptionsBuilder_.getMessage(); } } + /** * * @@ -3133,6 +3329,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { onChanged(); return this; } + /** * * @@ -3152,6 +3349,7 @@ public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder bu onChanged(); return this; } + /** * * @@ -3179,6 +3377,7 @@ public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { } return this; } + /** * * @@ -3198,6 +3397,7 @@ public Builder clearRequestOptions() { onChanged(); return this; } + /** * * @@ -3210,8 +3410,9 @@ public Builder clearRequestOptions() { public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { bitField0_ |= 0x00000200; onChanged(); - return getRequestOptionsFieldBuilder().getBuilder(); + return internalGetRequestOptionsFieldBuilder().getBuilder(); } + /** * * @@ -3230,6 +3431,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } } + /** * * @@ -3239,14 +3441,14 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( * * .google.spanner.v1.RequestOptions request_options = 11; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder> - getRequestOptionsFieldBuilder() { + internalGetRequestOptionsFieldBuilder() { if (requestOptionsBuilder_ == null) { requestOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.RequestOptions, com.google.spanner.v1.RequestOptions.Builder, com.google.spanner.v1.RequestOptionsOrBuilder>( @@ -3257,11 +3459,12 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( } private com.google.spanner.v1.DirectedReadOptions directedReadOptions_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions, com.google.spanner.v1.DirectedReadOptions.Builder, com.google.spanner.v1.DirectedReadOptionsOrBuilder> directedReadOptionsBuilder_; + /** * * @@ -3276,6 +3479,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( public boolean hasDirectedReadOptions() { return ((bitField0_ & 0x00000400) != 0); } + /** * * @@ -3296,6 +3500,7 @@ public com.google.spanner.v1.DirectedReadOptions getDirectedReadOptions() { return directedReadOptionsBuilder_.getMessage(); } } + /** * * @@ -3318,6 +3523,7 @@ public Builder setDirectedReadOptions(com.google.spanner.v1.DirectedReadOptions onChanged(); return this; } + /** * * @@ -3338,6 +3544,7 @@ public Builder setDirectedReadOptions( onChanged(); return this; } + /** * * @@ -3366,6 +3573,7 @@ public Builder mergeDirectedReadOptions(com.google.spanner.v1.DirectedReadOption } return this; } + /** * * @@ -3385,6 +3593,7 @@ public Builder clearDirectedReadOptions() { onChanged(); return this; } + /** * * @@ -3397,8 +3606,9 @@ public Builder clearDirectedReadOptions() { public com.google.spanner.v1.DirectedReadOptions.Builder getDirectedReadOptionsBuilder() { bitField0_ |= 0x00000400; onChanged(); - return getDirectedReadOptionsFieldBuilder().getBuilder(); + return internalGetDirectedReadOptionsFieldBuilder().getBuilder(); } + /** * * @@ -3417,6 +3627,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions : directedReadOptions_; } } + /** * * @@ -3426,14 +3637,14 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions * * .google.spanner.v1.DirectedReadOptions directed_read_options = 14; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions, com.google.spanner.v1.DirectedReadOptions.Builder, com.google.spanner.v1.DirectedReadOptionsOrBuilder> - getDirectedReadOptionsFieldBuilder() { + internalGetDirectedReadOptionsFieldBuilder() { if (directedReadOptionsBuilder_ == null) { directedReadOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.DirectedReadOptions, com.google.spanner.v1.DirectedReadOptions.Builder, com.google.spanner.v1.DirectedReadOptionsOrBuilder>( @@ -3444,6 +3655,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions } private boolean dataBoostEnabled_; + /** * * @@ -3451,7 +3663,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions * If this is for a partitioned read and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. * * @@ -3463,6 +3675,7 @@ public com.google.spanner.v1.DirectedReadOptionsOrBuilder getDirectedReadOptions public boolean getDataBoostEnabled() { return dataBoostEnabled_; } + /** * * @@ -3470,7 +3683,7 @@ public boolean getDataBoostEnabled() { * If this is for a partitioned read and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. * * @@ -3486,6 +3699,7 @@ public Builder setDataBoostEnabled(boolean value) { onChanged(); return this; } + /** * * @@ -3493,7 +3707,7 @@ public Builder setDataBoostEnabled(boolean value) { * If this is for a partitioned read and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. * * @@ -3509,17 +3723,19 @@ public Builder clearDataBoostEnabled() { } private int orderBy_ = 0; + /** * * *
                                      * Optional. Order for the returned rows.
                                      *
                                -     * By default, Spanner will return result rows in primary key order except for
                                -     * PartitionRead requests. For applications that do not require rows to be
                                +     * By default, Spanner returns result rows in primary key order except for
                                +     * PartitionRead requests. For applications that don't require rows to be
                                      * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                      * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -     * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +     * resulting in lower latencies in certain cases (for example, bulk point
                                +     * lookups).
                                      * 
                                * * @@ -3532,17 +3748,19 @@ public Builder clearDataBoostEnabled() { public int getOrderByValue() { return orderBy_; } + /** * * *
                                      * Optional. Order for the returned rows.
                                      *
                                -     * By default, Spanner will return result rows in primary key order except for
                                -     * PartitionRead requests. For applications that do not require rows to be
                                +     * By default, Spanner returns result rows in primary key order except for
                                +     * PartitionRead requests. For applications that don't require rows to be
                                      * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                      * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -     * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +     * resulting in lower latencies in certain cases (for example, bulk point
                                +     * lookups).
                                      * 
                                * * @@ -3558,17 +3776,19 @@ public Builder setOrderByValue(int value) { onChanged(); return this; } + /** * * *
                                      * Optional. Order for the returned rows.
                                      *
                                -     * By default, Spanner will return result rows in primary key order except for
                                -     * PartitionRead requests. For applications that do not require rows to be
                                +     * By default, Spanner returns result rows in primary key order except for
                                +     * PartitionRead requests. For applications that don't require rows to be
                                      * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                      * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -     * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +     * resulting in lower latencies in certain cases (for example, bulk point
                                +     * lookups).
                                      * 
                                * * @@ -3583,17 +3803,19 @@ public com.google.spanner.v1.ReadRequest.OrderBy getOrderBy() { com.google.spanner.v1.ReadRequest.OrderBy.forNumber(orderBy_); return result == null ? com.google.spanner.v1.ReadRequest.OrderBy.UNRECOGNIZED : result; } + /** * * *
                                      * Optional. Order for the returned rows.
                                      *
                                -     * By default, Spanner will return result rows in primary key order except for
                                -     * PartitionRead requests. For applications that do not require rows to be
                                +     * By default, Spanner returns result rows in primary key order except for
                                +     * PartitionRead requests. For applications that don't require rows to be
                                      * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                      * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -     * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +     * resulting in lower latencies in certain cases (for example, bulk point
                                +     * lookups).
                                      * 
                                * * @@ -3612,17 +3834,19 @@ public Builder setOrderBy(com.google.spanner.v1.ReadRequest.OrderBy value) { onChanged(); return this; } + /** * * *
                                      * Optional. Order for the returned rows.
                                      *
                                -     * By default, Spanner will return result rows in primary key order except for
                                -     * PartitionRead requests. For applications that do not require rows to be
                                +     * By default, Spanner returns result rows in primary key order except for
                                +     * PartitionRead requests. For applications that don't require rows to be
                                      * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                      * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -     * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +     * resulting in lower latencies in certain cases (for example, bulk point
                                +     * lookups).
                                      * 
                                * * @@ -3639,6 +3863,7 @@ public Builder clearOrderBy() { } private int lockHint_ = 0; + /** * * @@ -3657,6 +3882,7 @@ public Builder clearOrderBy() { public int getLockHintValue() { return lockHint_; } + /** * * @@ -3678,6 +3904,7 @@ public Builder setLockHintValue(int value) { onChanged(); return this; } + /** * * @@ -3698,6 +3925,7 @@ public com.google.spanner.v1.ReadRequest.LockHint getLockHint() { com.google.spanner.v1.ReadRequest.LockHint.forNumber(lockHint_); return result == null ? com.google.spanner.v1.ReadRequest.LockHint.UNRECOGNIZED : result; } + /** * * @@ -3722,6 +3950,7 @@ public Builder setLockHint(com.google.spanner.v1.ReadRequest.LockHint value) { onChanged(); return this; } + /** * * @@ -3743,15 +3972,261 @@ public Builder clearLockHint() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.RoutingHint routingHint_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + routingHintBuilder_; + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + public boolean hasRoutingHint() { + return ((bitField0_ & 0x00004000) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + public com.google.spanner.v1.RoutingHint getRoutingHint() { + if (routingHintBuilder_ == null) { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } else { + return routingHintBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + routingHint_ = value; + } else { + routingHintBuilder_.setMessage(value); + } + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRoutingHint(com.google.spanner.v1.RoutingHint.Builder builderForValue) { + if (routingHintBuilder_ == null) { + routingHint_ = builderForValue.build(); + } else { + routingHintBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeRoutingHint(com.google.spanner.v1.RoutingHint value) { + if (routingHintBuilder_ == null) { + if (((bitField0_ & 0x00004000) != 0) + && routingHint_ != null + && routingHint_ != com.google.spanner.v1.RoutingHint.getDefaultInstance()) { + getRoutingHintBuilder().mergeFrom(value); + } else { + routingHint_ = value; + } + } else { + routingHintBuilder_.mergeFrom(value); + } + if (routingHint_ != null) { + bitField0_ |= 0x00004000; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearRoutingHint() { + bitField0_ = (bitField0_ & ~0x00004000); + routingHint_ = null; + if (routingHintBuilder_ != null) { + routingHintBuilder_.dispose(); + routingHintBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHint.Builder getRoutingHintBuilder() { + bitField0_ |= 0x00004000; + onChanged(); + return internalGetRoutingHintFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder() { + if (routingHintBuilder_ != null) { + return routingHintBuilder_.getMessageOrBuilder(); + } else { + return routingHint_ == null + ? com.google.spanner.v1.RoutingHint.getDefaultInstance() + : routingHint_; + } + } + + /** + * + * + *
                                +     * Optional. Makes the Spanner requests location-aware if present.
                                +     *
                                +     * It gives the server hints that can be used to route the request
                                +     * to an appropriate server, potentially significantly decreasing latency and
                                +     * improving throughput. To achieve improved performance, most fields must be
                                +     * filled in with accurate values.
                                +     * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder> + internalGetRoutingHintFieldBuilder() { + if (routingHintBuilder_ == null) { + routingHintBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RoutingHint, + com.google.spanner.v1.RoutingHint.Builder, + com.google.spanner.v1.RoutingHintOrBuilder>( + getRoutingHint(), getParentForChildren(), isClean()); + routingHint_ = null; + } + return routingHintBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.ReadRequest) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java index 9e16532ff3c..812bf0956b6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ReadRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ReadRequest) @@ -38,6 +40,7 @@ public interface ReadRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * @@ -66,6 +69,7 @@ public interface ReadRequestOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -79,6 +83,7 @@ public interface ReadRequestOrBuilder * @return The transaction. */ com.google.spanner.v1.TransactionSelector getTransaction(); + /** * * @@ -103,6 +108,7 @@ public interface ReadRequestOrBuilder * @return The table. */ java.lang.String getTable(); + /** * * @@ -133,6 +139,7 @@ public interface ReadRequestOrBuilder * @return The index. */ java.lang.String getIndex(); + /** * * @@ -164,6 +171,7 @@ public interface ReadRequestOrBuilder * @return A list containing the columns. */ java.util.List getColumnsList(); + /** * * @@ -177,6 +185,7 @@ public interface ReadRequestOrBuilder * @return The count of columns. */ int getColumnsCount(); + /** * * @@ -191,6 +200,7 @@ public interface ReadRequestOrBuilder * @return The columns at the given index. */ java.lang.String getColumns(int index); + /** * * @@ -220,11 +230,11 @@ public interface ReadRequestOrBuilder * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -233,6 +243,7 @@ public interface ReadRequestOrBuilder * @return Whether the keySet field is set. */ boolean hasKeySet(); + /** * * @@ -247,11 +258,11 @@ public interface ReadRequestOrBuilder * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -260,6 +271,7 @@ public interface ReadRequestOrBuilder * @return The keySet. */ com.google.spanner.v1.KeySet getKeySet(); + /** * * @@ -274,11 +286,11 @@ public interface ReadRequestOrBuilder * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] * field is empty, rows are yielded in table primary key order (if * [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - * [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - * not empty, rows will be yielded in an unspecified order. + * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + * [partition_token][google.spanner.v1.ReadRequest.partition_token] field + * isn't empty, rows are yielded in an unspecified order. * - * It is not an error for the `key_set` to name rows that do not + * It isn't an error for the `key_set` to name rows that don't * exist in the database. Read yields nothing for nonexistent rows. * * @@ -291,7 +303,7 @@ public interface ReadRequestOrBuilder * *
                                    * If greater than zero, only the first `limit` rows are yielded. If `limit`
                                -   * is zero, the default is no limit. A limit cannot be specified if
                                +   * is zero, the default is no limit. A limit can't be specified if
                                    * `partition_token` is set.
                                    * 
                                * @@ -323,8 +335,8 @@ public interface ReadRequestOrBuilder * * *
                                -   * If present, results will be restricted to the specified partition
                                -   * previously created using PartitionRead().    There must be an exact
                                +   * If present, results are restricted to the specified partition
                                +   * previously created using `PartitionRead`. There must be an exact
                                    * match for the values of fields common to this message and the
                                    * PartitionReadRequest message used to create this partition_token.
                                    * 
                                @@ -347,6 +359,7 @@ public interface ReadRequestOrBuilder * @return Whether the requestOptions field is set. */ boolean hasRequestOptions(); + /** * * @@ -359,6 +372,7 @@ public interface ReadRequestOrBuilder * @return The requestOptions. */ com.google.spanner.v1.RequestOptions getRequestOptions(); + /** * * @@ -382,6 +396,7 @@ public interface ReadRequestOrBuilder * @return Whether the directedReadOptions field is set. */ boolean hasDirectedReadOptions(); + /** * * @@ -394,6 +409,7 @@ public interface ReadRequestOrBuilder * @return The directedReadOptions. */ com.google.spanner.v1.DirectedReadOptions getDirectedReadOptions(); + /** * * @@ -412,7 +428,7 @@ public interface ReadRequestOrBuilder * If this is for a partitioned read and this field is set to `true`, the * request is executed with Spanner Data Boost independent compute resources. * - * If the field is set to `true` but the request does not set + * If the field is set to `true` but the request doesn't set * `partition_token`, the API returns an `INVALID_ARGUMENT` error. * * @@ -428,11 +444,12 @@ public interface ReadRequestOrBuilder *
                                    * Optional. Order for the returned rows.
                                    *
                                -   * By default, Spanner will return result rows in primary key order except for
                                -   * PartitionRead requests. For applications that do not require rows to be
                                +   * By default, Spanner returns result rows in primary key order except for
                                +   * PartitionRead requests. For applications that don't require rows to be
                                    * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                    * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -   * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +   * resulting in lower latencies in certain cases (for example, bulk point
                                +   * lookups).
                                    * 
                                * * @@ -442,17 +459,19 @@ public interface ReadRequestOrBuilder * @return The enum numeric value on the wire for orderBy. */ int getOrderByValue(); + /** * * *
                                    * Optional. Order for the returned rows.
                                    *
                                -   * By default, Spanner will return result rows in primary key order except for
                                -   * PartitionRead requests. For applications that do not require rows to be
                                +   * By default, Spanner returns result rows in primary key order except for
                                +   * PartitionRead requests. For applications that don't require rows to be
                                    * returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting
                                    * `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval,
                                -   * resulting in lower latencies in certain cases (e.g. bulk point lookups).
                                +   * resulting in lower latencies in certain cases (for example, bulk point
                                +   * lookups).
                                    * 
                                * * @@ -478,6 +497,7 @@ public interface ReadRequestOrBuilder * @return The enum numeric value on the wire for lockHint. */ int getLockHintValue(); + /** * * @@ -493,4 +513,62 @@ public interface ReadRequestOrBuilder * @return The lockHint. */ com.google.spanner.v1.ReadRequest.LockHint getLockHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the routingHint field is set. + */ + boolean hasRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The routingHint. + */ + com.google.spanner.v1.RoutingHint getRoutingHint(); + + /** + * + * + *
                                +   * Optional. Makes the Spanner requests location-aware if present.
                                +   *
                                +   * It gives the server hints that can be used to route the request
                                +   * to an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   * 
                                + * + * + * .google.spanner.v1.RoutingHint routing_hint = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.RoutingHintOrBuilder getRoutingHintOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RecipeList.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RecipeList.java new file mode 100644 index 00000000000..6ff0c098f9f --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RecipeList.java @@ -0,0 +1,1034 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * A `RecipeList` contains a list of `KeyRecipe`s, which share the same
                                + * schema generation.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.RecipeList} + */ +@com.google.protobuf.Generated +public final class RecipeList extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.RecipeList) + RecipeListOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RecipeList"); + } + + // Use RecipeList.newBuilder() to construct. + private RecipeList(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private RecipeList() { + schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + recipe_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RecipeList_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RecipeList_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RecipeList.class, com.google.spanner.v1.RecipeList.Builder.class); + } + + public static final int SCHEMA_GENERATION_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * The schema generation of the recipes. To be sent to the server in
                                +   * `RoutingHint.schema_generation` whenever one of the recipes is used.
                                +   * `schema_generation` values are comparable with each other; if generation A
                                +   * compares greater than generation B, then A is a more recent schema than B.
                                +   * Clients should in general aim to cache only the latest schema generation,
                                +   * and discard more stale recipes.
                                +   * 
                                + * + * bytes schema_generation = 1; + * + * @return The schemaGeneration. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSchemaGeneration() { + return schemaGeneration_; + } + + public static final int RECIPE_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private java.util.List recipe_; + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + @java.lang.Override + public java.util.List getRecipeList() { + return recipe_; + } + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + @java.lang.Override + public java.util.List + getRecipeOrBuilderList() { + return recipe_; + } + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + @java.lang.Override + public int getRecipeCount() { + return recipe_.size(); + } + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipe getRecipe(int index) { + return recipe_.get(index); + } + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + @java.lang.Override + public com.google.spanner.v1.KeyRecipeOrBuilder getRecipeOrBuilder(int index) { + return recipe_.get(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!schemaGeneration_.isEmpty()) { + output.writeBytes(1, schemaGeneration_); + } + for (int i = 0; i < recipe_.size(); i++) { + output.writeMessage(3, recipe_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!schemaGeneration_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, schemaGeneration_); + } + for (int i = 0; i < recipe_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, recipe_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.RecipeList)) { + return super.equals(obj); + } + com.google.spanner.v1.RecipeList other = (com.google.spanner.v1.RecipeList) obj; + + if (!getSchemaGeneration().equals(other.getSchemaGeneration())) return false; + if (!getRecipeList().equals(other.getRecipeList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SCHEMA_GENERATION_FIELD_NUMBER; + hash = (53 * hash) + getSchemaGeneration().hashCode(); + if (getRecipeCount() > 0) { + hash = (37 * hash) + RECIPE_FIELD_NUMBER; + hash = (53 * hash) + getRecipeList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.RecipeList parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RecipeList parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RecipeList parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RecipeList parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RecipeList parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RecipeList parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RecipeList parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RecipeList parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RecipeList parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RecipeList parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RecipeList parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RecipeList parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.RecipeList 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * A `RecipeList` contains a list of `KeyRecipe`s, which share the same
                                +   * schema generation.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.RecipeList} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.RecipeList) + com.google.spanner.v1.RecipeListOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RecipeList_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RecipeList_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RecipeList.class, + com.google.spanner.v1.RecipeList.Builder.class); + } + + // Construct using com.google.spanner.v1.RecipeList.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + if (recipeBuilder_ == null) { + recipe_ = java.util.Collections.emptyList(); + } else { + recipe_ = null; + recipeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RecipeList_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.RecipeList getDefaultInstanceForType() { + return com.google.spanner.v1.RecipeList.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.RecipeList build() { + com.google.spanner.v1.RecipeList result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.RecipeList buildPartial() { + com.google.spanner.v1.RecipeList result = new com.google.spanner.v1.RecipeList(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.RecipeList result) { + if (recipeBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + recipe_ = java.util.Collections.unmodifiableList(recipe_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.recipe_ = recipe_; + } else { + result.recipe_ = recipeBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.RecipeList result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.schemaGeneration_ = schemaGeneration_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.RecipeList) { + return mergeFrom((com.google.spanner.v1.RecipeList) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.RecipeList other) { + if (other == com.google.spanner.v1.RecipeList.getDefaultInstance()) return this; + if (!other.getSchemaGeneration().isEmpty()) { + setSchemaGeneration(other.getSchemaGeneration()); + } + if (recipeBuilder_ == null) { + if (!other.recipe_.isEmpty()) { + if (recipe_.isEmpty()) { + recipe_ = other.recipe_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureRecipeIsMutable(); + recipe_.addAll(other.recipe_); + } + onChanged(); + } + } else { + if (!other.recipe_.isEmpty()) { + if (recipeBuilder_.isEmpty()) { + recipeBuilder_.dispose(); + recipeBuilder_ = null; + recipe_ = other.recipe_; + bitField0_ = (bitField0_ & ~0x00000002); + recipeBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetRecipeFieldBuilder() + : null; + } else { + recipeBuilder_.addAllMessages(other.recipe_); + } + } + } + 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: + { + schemaGeneration_ = input.readBytes(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 26: + { + com.google.spanner.v1.KeyRecipe m = + input.readMessage(com.google.spanner.v1.KeyRecipe.parser(), extensionRegistry); + if (recipeBuilder_ == null) { + ensureRecipeIsMutable(); + recipe_.add(m); + } else { + recipeBuilder_.addMessage(m); + } + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.ByteString schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * The schema generation of the recipes. To be sent to the server in
                                +     * `RoutingHint.schema_generation` whenever one of the recipes is used.
                                +     * `schema_generation` values are comparable with each other; if generation A
                                +     * compares greater than generation B, then A is a more recent schema than B.
                                +     * Clients should in general aim to cache only the latest schema generation,
                                +     * and discard more stale recipes.
                                +     * 
                                + * + * bytes schema_generation = 1; + * + * @return The schemaGeneration. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSchemaGeneration() { + return schemaGeneration_; + } + + /** + * + * + *
                                +     * The schema generation of the recipes. To be sent to the server in
                                +     * `RoutingHint.schema_generation` whenever one of the recipes is used.
                                +     * `schema_generation` values are comparable with each other; if generation A
                                +     * compares greater than generation B, then A is a more recent schema than B.
                                +     * Clients should in general aim to cache only the latest schema generation,
                                +     * and discard more stale recipes.
                                +     * 
                                + * + * bytes schema_generation = 1; + * + * @param value The schemaGeneration to set. + * @return This builder for chaining. + */ + public Builder setSchemaGeneration(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + schemaGeneration_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The schema generation of the recipes. To be sent to the server in
                                +     * `RoutingHint.schema_generation` whenever one of the recipes is used.
                                +     * `schema_generation` values are comparable with each other; if generation A
                                +     * compares greater than generation B, then A is a more recent schema than B.
                                +     * Clients should in general aim to cache only the latest schema generation,
                                +     * and discard more stale recipes.
                                +     * 
                                + * + * bytes schema_generation = 1; + * + * @return This builder for chaining. + */ + public Builder clearSchemaGeneration() { + bitField0_ = (bitField0_ & ~0x00000001); + schemaGeneration_ = getDefaultInstance().getSchemaGeneration(); + onChanged(); + return this; + } + + private java.util.List recipe_ = + java.util.Collections.emptyList(); + + private void ensureRecipeIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + recipe_ = new java.util.ArrayList(recipe_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.KeyRecipe, + com.google.spanner.v1.KeyRecipe.Builder, + com.google.spanner.v1.KeyRecipeOrBuilder> + recipeBuilder_; + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public java.util.List getRecipeList() { + if (recipeBuilder_ == null) { + return java.util.Collections.unmodifiableList(recipe_); + } else { + return recipeBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public int getRecipeCount() { + if (recipeBuilder_ == null) { + return recipe_.size(); + } else { + return recipeBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public com.google.spanner.v1.KeyRecipe getRecipe(int index) { + if (recipeBuilder_ == null) { + return recipe_.get(index); + } else { + return recipeBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder setRecipe(int index, com.google.spanner.v1.KeyRecipe value) { + if (recipeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRecipeIsMutable(); + recipe_.set(index, value); + onChanged(); + } else { + recipeBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder setRecipe(int index, com.google.spanner.v1.KeyRecipe.Builder builderForValue) { + if (recipeBuilder_ == null) { + ensureRecipeIsMutable(); + recipe_.set(index, builderForValue.build()); + onChanged(); + } else { + recipeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder addRecipe(com.google.spanner.v1.KeyRecipe value) { + if (recipeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRecipeIsMutable(); + recipe_.add(value); + onChanged(); + } else { + recipeBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder addRecipe(int index, com.google.spanner.v1.KeyRecipe value) { + if (recipeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRecipeIsMutable(); + recipe_.add(index, value); + onChanged(); + } else { + recipeBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder addRecipe(com.google.spanner.v1.KeyRecipe.Builder builderForValue) { + if (recipeBuilder_ == null) { + ensureRecipeIsMutable(); + recipe_.add(builderForValue.build()); + onChanged(); + } else { + recipeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder addRecipe(int index, com.google.spanner.v1.KeyRecipe.Builder builderForValue) { + if (recipeBuilder_ == null) { + ensureRecipeIsMutable(); + recipe_.add(index, builderForValue.build()); + onChanged(); + } else { + recipeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder addAllRecipe( + java.lang.Iterable values) { + if (recipeBuilder_ == null) { + ensureRecipeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, recipe_); + onChanged(); + } else { + recipeBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder clearRecipe() { + if (recipeBuilder_ == null) { + recipe_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + recipeBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public Builder removeRecipe(int index) { + if (recipeBuilder_ == null) { + ensureRecipeIsMutable(); + recipe_.remove(index); + onChanged(); + } else { + recipeBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public com.google.spanner.v1.KeyRecipe.Builder getRecipeBuilder(int index) { + return internalGetRecipeFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public com.google.spanner.v1.KeyRecipeOrBuilder getRecipeOrBuilder(int index) { + if (recipeBuilder_ == null) { + return recipe_.get(index); + } else { + return recipeBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public java.util.List + getRecipeOrBuilderList() { + if (recipeBuilder_ != null) { + return recipeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(recipe_); + } + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public com.google.spanner.v1.KeyRecipe.Builder addRecipeBuilder() { + return internalGetRecipeFieldBuilder() + .addBuilder(com.google.spanner.v1.KeyRecipe.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public com.google.spanner.v1.KeyRecipe.Builder addRecipeBuilder(int index) { + return internalGetRecipeFieldBuilder() + .addBuilder(index, com.google.spanner.v1.KeyRecipe.getDefaultInstance()); + } + + /** + * + * + *
                                +     * A list of recipes to be cached.
                                +     * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + public java.util.List getRecipeBuilderList() { + return internalGetRecipeFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.KeyRecipe, + com.google.spanner.v1.KeyRecipe.Builder, + com.google.spanner.v1.KeyRecipeOrBuilder> + internalGetRecipeFieldBuilder() { + if (recipeBuilder_ == null) { + recipeBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.KeyRecipe, + com.google.spanner.v1.KeyRecipe.Builder, + com.google.spanner.v1.KeyRecipeOrBuilder>( + recipe_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean()); + recipe_ = null; + } + return recipeBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.RecipeList) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.RecipeList) + private static final com.google.spanner.v1.RecipeList DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.RecipeList(); + } + + public static com.google.spanner.v1.RecipeList getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RecipeList parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.RecipeList getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RecipeListOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RecipeListOrBuilder.java new file mode 100644 index 00000000000..d05927ae915 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RecipeListOrBuilder.java @@ -0,0 +1,101 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface RecipeListOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.RecipeList) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * The schema generation of the recipes. To be sent to the server in
                                +   * `RoutingHint.schema_generation` whenever one of the recipes is used.
                                +   * `schema_generation` values are comparable with each other; if generation A
                                +   * compares greater than generation B, then A is a more recent schema than B.
                                +   * Clients should in general aim to cache only the latest schema generation,
                                +   * and discard more stale recipes.
                                +   * 
                                + * + * bytes schema_generation = 1; + * + * @return The schemaGeneration. + */ + com.google.protobuf.ByteString getSchemaGeneration(); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + java.util.List getRecipeList(); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + com.google.spanner.v1.KeyRecipe getRecipe(int index); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + int getRecipeCount(); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + java.util.List getRecipeOrBuilderList(); + + /** + * + * + *
                                +   * A list of recipes to be cached.
                                +   * 
                                + * + * repeated .google.spanner.v1.KeyRecipe recipe = 3; + */ + com.google.spanner.v1.KeyRecipeOrBuilder getRecipeOrBuilder(int index); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java index 6df3f2b3fae..6a2afc8f087 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.RequestOptions} */ -public final class RequestOptions extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class RequestOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.RequestOptions) RequestOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RequestOptions"); + } + // Use RequestOptions.newBuilder() to construct. - private RequestOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private RequestOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -44,19 +57,13 @@ private RequestOptions() { transactionTag_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RequestOptions(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RequestOptions_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RequestOptions_fieldAccessorTable @@ -69,22 +76,22 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * * *
                                -   * The relative priority for requests. Note that priority is not applicable
                                +   * The relative priority for requests. Note that priority isn't applicable
                                    * for [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                    *
                                -   * The priority acts as a hint to the Cloud Spanner scheduler and does not
                                +   * The priority acts as a hint to the Cloud Spanner scheduler and doesn't
                                    * guarantee priority or order of execution. For example:
                                    *
                                    * * Some parts of a write operation always execute at `PRIORITY_HIGH`,
                                -   *   regardless of the specified priority. This may cause you to see an
                                -   *   increase in high priority workload even when executing a low priority
                                -   *   request. This can also potentially cause a priority inversion where a
                                -   *   lower priority request will be fulfilled ahead of a higher priority
                                -   *   request.
                                +   * regardless of the specified priority. This can cause you to see an
                                +   * increase in high priority workload even when executing a low priority
                                +   * request. This can also potentially cause a priority inversion where a
                                +   * lower priority request is fulfilled ahead of a higher priority
                                +   * request.
                                    * * If a transaction contains multiple operations with different priorities,
                                -   *   Cloud Spanner does not guarantee to process the higher priority
                                -   *   operations first. There may be other constraints to satisfy, such as
                                -   *   order of operations.
                                +   * Cloud Spanner doesn't guarantee to process the higher priority
                                +   * operations first. There might be other constraints to satisfy, such as
                                +   * the order of operations.
                                    * 
                                * * Protobuf enum {@code google.spanner.v1.RequestOptions.Priority} @@ -133,6 +140,16 @@ public enum Priority implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Priority"); + } + /** * * @@ -143,6 +160,7 @@ public enum Priority implements com.google.protobuf.ProtocolMessageEnum { * PRIORITY_UNSPECIFIED = 0; */ public static final int PRIORITY_UNSPECIFIED_VALUE = 0; + /** * * @@ -153,6 +171,7 @@ public enum Priority implements com.google.protobuf.ProtocolMessageEnum { * PRIORITY_LOW = 1; */ public static final int PRIORITY_LOW_VALUE = 1; + /** * * @@ -163,6 +182,7 @@ public enum Priority implements com.google.protobuf.ProtocolMessageEnum { * PRIORITY_MEDIUM = 2; */ public static final int PRIORITY_MEDIUM_VALUE = 2; + /** * * @@ -192,75 +212,1023 @@ public static Priority 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 Priority forNumber(int value) { - switch (value) { - case 0: - return PRIORITY_UNSPECIFIED; - case 1: - return PRIORITY_LOW; - case 2: - return PRIORITY_MEDIUM; - case 3: - return PRIORITY_HIGH; - default: - return null; + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static Priority forNumber(int value) { + switch (value) { + case 0: + return PRIORITY_UNSPECIFIED; + case 1: + return PRIORITY_LOW; + case 2: + return PRIORITY_MEDIUM; + case 3: + return PRIORITY_HIGH; + 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 Priority findValueByNumber(int number) { + return Priority.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.RequestOptions.getDescriptor().getEnumTypes().get(0); + } + + private static final Priority[] VALUES = values(); + + public static Priority 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 Priority(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.RequestOptions.Priority) + } + + public interface ClientContextOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.RequestOptions.ClientContext) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getSecureContextCount(); + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsSecureContext(java.lang.String key); + + /** Use {@link #getSecureContextMap()} instead. */ + @java.lang.Deprecated + java.util.Map getSecureContext(); + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getSecureContextMap(); + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + com.google.protobuf.Value getSecureContextOrDefault( + java.lang.String key, + /* nullable */ + com.google.protobuf.Value defaultValue); + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.Value getSecureContextOrThrow(java.lang.String key); + } + + /** + * + * + *
                                +   * Container for various pieces of client-owned context attached to a request.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.RequestOptions.ClientContext} + */ + public static final class ClientContext extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.RequestOptions.ClientContext) + ClientContextOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ClientContext"); + } + + // Use ClientContext.newBuilder() to construct. + private ClientContext(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ClientContext() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_RequestOptions_ClientContext_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 1: + return internalGetSecureContext(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_RequestOptions_ClientContext_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RequestOptions.ClientContext.class, + com.google.spanner.v1.RequestOptions.ClientContext.Builder.class); + } + + public static final int SECURE_CONTEXT_FIELD_NUMBER = 1; + + private static final class SecureContextDefaultEntryHolder { + static final com.google.protobuf.MapEntry + defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_RequestOptions_ClientContext_SecureContextEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.MESSAGE, + com.google.protobuf.Value.getDefaultInstance()); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField + secureContext_; + + private com.google.protobuf.MapField + internalGetSecureContext() { + if (secureContext_ == null) { + return com.google.protobuf.MapField.emptyMapField( + SecureContextDefaultEntryHolder.defaultEntry); + } + return secureContext_; + } + + public int getSecureContextCount() { + return internalGetSecureContext().getMap().size(); + } + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsSecureContext(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetSecureContext().getMap().containsKey(key); + } + + /** Use {@link #getSecureContextMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getSecureContext() { + return getSecureContextMap(); + } + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getSecureContextMap() { + return internalGetSecureContext().getMap(); + } + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ com.google.protobuf.Value getSecureContextOrDefault( + java.lang.String key, + /* nullable */ + com.google.protobuf.Value defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = + internalGetSecureContext().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
                                +     * Optional. Map of parameter name to value for this request. These values
                                +     * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +     * (e.g., by queries against Parameterized Secure Views).
                                +     * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.Value getSecureContextOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = + internalGetSecureContext().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetSecureContext(), SecureContextDefaultEntryHolder.defaultEntry, 1); + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (java.util.Map.Entry entry : + internalGetSecureContext().getMap().entrySet()) { + com.google.protobuf.MapEntry secureContext__ = + SecureContextDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, secureContext__); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.RequestOptions.ClientContext)) { + return super.equals(obj); + } + com.google.spanner.v1.RequestOptions.ClientContext other = + (com.google.spanner.v1.RequestOptions.ClientContext) obj; + + if (!internalGetSecureContext().equals(other.internalGetSecureContext())) 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 (!internalGetSecureContext().getMap().isEmpty()) { + hash = (37 * hash) + SECURE_CONTEXT_FIELD_NUMBER; + hash = (53 * hash) + internalGetSecureContext().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RequestOptions.ClientContext parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.RequestOptions.ClientContext 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * Container for various pieces of client-owned context attached to a request.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.RequestOptions.ClientContext} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.RequestOptions.ClientContext) + com.google.spanner.v1.RequestOptions.ClientContextOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_RequestOptions_ClientContext_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 1: + return internalGetSecureContext(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 1: + return internalGetMutableSecureContext(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_RequestOptions_ClientContext_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RequestOptions.ClientContext.class, + com.google.spanner.v1.RequestOptions.ClientContext.Builder.class); + } + + // Construct using com.google.spanner.v1.RequestOptions.ClientContext.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + internalGetMutableSecureContext().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_RequestOptions_ClientContext_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.RequestOptions.ClientContext getDefaultInstanceForType() { + return com.google.spanner.v1.RequestOptions.ClientContext.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.RequestOptions.ClientContext build() { + com.google.spanner.v1.RequestOptions.ClientContext result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.RequestOptions.ClientContext buildPartial() { + com.google.spanner.v1.RequestOptions.ClientContext result = + new com.google.spanner.v1.RequestOptions.ClientContext(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.RequestOptions.ClientContext result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.secureContext_ = + internalGetSecureContext().build(SecureContextDefaultEntryHolder.defaultEntry); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.RequestOptions.ClientContext) { + return mergeFrom((com.google.spanner.v1.RequestOptions.ClientContext) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.RequestOptions.ClientContext other) { + if (other == com.google.spanner.v1.RequestOptions.ClientContext.getDefaultInstance()) + return this; + internalGetMutableSecureContext().mergeFrom(other.internalGetSecureContext()); + bitField0_ |= 0x00000001; + 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: + { + com.google.protobuf.MapEntry + secureContext__ = + input.readMessage( + SecureContextDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableSecureContext() + .ensureBuilderMap() + .put(secureContext__.getKey(), secureContext__.getValue()); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private static final class SecureContextConverter + implements com.google.protobuf.MapFieldBuilder.Converter< + java.lang.String, com.google.protobuf.ValueOrBuilder, com.google.protobuf.Value> { + @java.lang.Override + public com.google.protobuf.Value build(com.google.protobuf.ValueOrBuilder val) { + if (val instanceof com.google.protobuf.Value) { + return (com.google.protobuf.Value) val; + } + return ((com.google.protobuf.Value.Builder) val).build(); + } + + @java.lang.Override + public com.google.protobuf.MapEntry + defaultEntry() { + return SecureContextDefaultEntryHolder.defaultEntry; + } + } + ; + + private static final SecureContextConverter secureContextConverter = + new SecureContextConverter(); + + private com.google.protobuf.MapFieldBuilder< + java.lang.String, + com.google.protobuf.ValueOrBuilder, + com.google.protobuf.Value, + com.google.protobuf.Value.Builder> + secureContext_; + + private com.google.protobuf.MapFieldBuilder< + java.lang.String, + com.google.protobuf.ValueOrBuilder, + com.google.protobuf.Value, + com.google.protobuf.Value.Builder> + internalGetSecureContext() { + if (secureContext_ == null) { + return new com.google.protobuf.MapFieldBuilder<>(secureContextConverter); + } + return secureContext_; + } + + private com.google.protobuf.MapFieldBuilder< + java.lang.String, + com.google.protobuf.ValueOrBuilder, + com.google.protobuf.Value, + com.google.protobuf.Value.Builder> + internalGetMutableSecureContext() { + if (secureContext_ == null) { + secureContext_ = new com.google.protobuf.MapFieldBuilder<>(secureContextConverter); + } + bitField0_ |= 0x00000001; + onChanged(); + return secureContext_; + } + + public int getSecureContextCount() { + return internalGetSecureContext().ensureBuilderMap().size(); + } + + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsSecureContext(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetSecureContext().ensureBuilderMap().containsKey(key); + } + + /** Use {@link #getSecureContextMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getSecureContext() { + return getSecureContextMap(); + } + + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getSecureContextMap() { + return internalGetSecureContext().getImmutableMap(); + } + + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ com.google.protobuf.Value getSecureContextOrDefault( + java.lang.String key, + /* nullable */ + com.google.protobuf.Value defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = + internalGetMutableSecureContext().ensureBuilderMap(); + return map.containsKey(key) ? secureContextConverter.build(map.get(key)) : defaultValue; + } + + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.Value getSecureContextOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = + internalGetMutableSecureContext().ensureBuilderMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return secureContextConverter.build(map.get(key)); + } + + public Builder clearSecureContext() { + bitField0_ = (bitField0_ & ~0x00000001); + internalGetMutableSecureContext().clear(); + return this; + } + + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeSecureContext(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableSecureContext().ensureBuilderMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableSecureContext() { + bitField0_ |= 0x00000001; + return internalGetMutableSecureContext().ensureMessageMap(); } - } - public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { - return internalValueMap; - } + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putSecureContext(java.lang.String key, com.google.protobuf.Value value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableSecureContext().ensureBuilderMap().put(key, value); + bitField0_ |= 0x00000001; + return this; + } - private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public Priority findValueByNumber(int number) { - return Priority.forNumber(number); + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllSecureContext( + java.util.Map values) { + for (java.util.Map.Entry e : + values.entrySet()) { + if (e.getKey() == null || e.getValue() == null) { + throw new NullPointerException(); } - }; + } + internalGetMutableSecureContext().ensureBuilderMap().putAll(values); + bitField0_ |= 0x00000001; + return this; + } - 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."); + /** + * + * + *
                                +       * Optional. Map of parameter name to value for this request. These values
                                +       * will be returned by any SECURE_CONTEXT() calls invoked by this request
                                +       * (e.g., by queries against Parameterized Secure Views).
                                +       * 
                                + * + * + * map<string, .google.protobuf.Value> secure_context = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Value.Builder putSecureContextBuilderIfAbsent( + java.lang.String key) { + java.util.Map builderMap = + internalGetMutableSecureContext().ensureBuilderMap(); + com.google.protobuf.ValueOrBuilder entry = builderMap.get(key); + if (entry == null) { + entry = com.google.protobuf.Value.newBuilder(); + builderMap.put(key, entry); + } + if (entry instanceof com.google.protobuf.Value) { + entry = ((com.google.protobuf.Value) entry).toBuilder(); + builderMap.put(key, entry); + } + return (com.google.protobuf.Value.Builder) entry; } - return getDescriptor().getValues().get(ordinal()); + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.RequestOptions.ClientContext) } - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); + // @@protoc_insertion_point(class_scope:google.spanner.v1.RequestOptions.ClientContext) + private static final com.google.spanner.v1.RequestOptions.ClientContext DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.RequestOptions.ClientContext(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return com.google.spanner.v1.RequestOptions.getDescriptor().getEnumTypes().get(0); + public static com.google.spanner.v1.RequestOptions.ClientContext getDefaultInstance() { + return DEFAULT_INSTANCE; } - private static final Priority[] VALUES = values(); + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ClientContext 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 Priority 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()]; + public static com.google.protobuf.Parser parser() { + return PARSER; } - private final int value; - - private Priority(int value) { - this.value = value; + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; } - // @@protoc_insertion_point(enum_scope:google.spanner.v1.RequestOptions.Priority) + @java.lang.Override + public com.google.spanner.v1.RequestOptions.ClientContext getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } } + private int bitField0_; public static final int PRIORITY_FIELD_NUMBER = 1; private int priority_ = 0; + /** * * @@ -276,6 +1244,7 @@ private Priority(int value) { public int getPriorityValue() { return priority_; } + /** * * @@ -298,20 +1267,21 @@ public com.google.spanner.v1.RequestOptions.Priority getPriority() { @SuppressWarnings("serial") private volatile java.lang.Object requestTag_ = ""; + /** * * *
                                    * A per-request tag which can be applied to queries or reads, used for
                                    * statistics collection.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * This field is ignored for requests where it's not applicable (e.g.
                                -   * CommitRequest).
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * This field is ignored for requests where it's not applicable (for example,
                                +   * `CommitRequest`).
                                    * Legal characters for `request_tag` values are all printable characters
                                    * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string request_tag = 2; @@ -330,20 +1300,21 @@ public java.lang.String getRequestTag() { return s; } } + /** * * *
                                    * A per-request tag which can be applied to queries or reads, used for
                                    * statistics collection.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * This field is ignored for requests where it's not applicable (e.g.
                                -   * CommitRequest).
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * This field is ignored for requests where it's not applicable (for example,
                                +   * `CommitRequest`).
                                    * Legal characters for `request_tag` values are all printable characters
                                    * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string request_tag = 2; @@ -367,21 +1338,23 @@ public com.google.protobuf.ByteString getRequestTagBytes() { @SuppressWarnings("serial") private volatile java.lang.Object transactionTag_ = ""; + /** * * *
                                    * A tag used for statistics collection about this transaction.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * The value of transaction_tag should be the same for all requests belonging
                                -   * to the same transaction.
                                -   * If this request doesn't belong to any transaction, transaction_tag will be
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +   * same value for all requests belonging to the same transaction, including
                                +   * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +   * If this request doesn't belong to any transaction, `transaction_tag` is
                                    * ignored.
                                    * Legal characters for `transaction_tag` values are all printable characters
                                -   * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +   * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string transaction_tag = 3; @@ -400,21 +1373,23 @@ public java.lang.String getTransactionTag() { return s; } } + /** * * *
                                    * A tag used for statistics collection about this transaction.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * The value of transaction_tag should be the same for all requests belonging
                                -   * to the same transaction.
                                -   * If this request doesn't belong to any transaction, transaction_tag will be
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +   * same value for all requests belonging to the same transaction, including
                                +   * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +   * If this request doesn't belong to any transaction, `transaction_tag` is
                                    * ignored.
                                    * Legal characters for `transaction_tag` values are all printable characters
                                -   * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +   * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string transaction_tag = 3; @@ -434,6 +1409,65 @@ public com.google.protobuf.ByteString getTransactionTagBytes() { } } + public static final int CLIENT_CONTEXT_FIELD_NUMBER = 4; + private com.google.spanner.v1.RequestOptions.ClientContext clientContext_; + + /** + * + * + *
                                +   * Optional. Optional context that may be needed for some requests.
                                +   * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the clientContext field is set. + */ + @java.lang.Override + public boolean hasClientContext() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
                                +   * Optional. Optional context that may be needed for some requests.
                                +   * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The clientContext. + */ + @java.lang.Override + public com.google.spanner.v1.RequestOptions.ClientContext getClientContext() { + return clientContext_ == null + ? com.google.spanner.v1.RequestOptions.ClientContext.getDefaultInstance() + : clientContext_; + } + + /** + * + * + *
                                +   * Optional. Optional context that may be needed for some requests.
                                +   * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.RequestOptions.ClientContextOrBuilder getClientContextOrBuilder() { + return clientContext_ == null + ? com.google.spanner.v1.RequestOptions.ClientContext.getDefaultInstance() + : clientContext_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -452,11 +1486,14 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io != com.google.spanner.v1.RequestOptions.Priority.PRIORITY_UNSPECIFIED.getNumber()) { output.writeEnum(1, priority_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(requestTag_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, requestTag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(requestTag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, requestTag_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionTag_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, transactionTag_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionTag_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, transactionTag_); + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(4, getClientContext()); } getUnknownFields().writeTo(output); } @@ -471,11 +1508,14 @@ public int getSerializedSize() { != com.google.spanner.v1.RequestOptions.Priority.PRIORITY_UNSPECIFIED.getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, priority_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(requestTag_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, requestTag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(requestTag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, requestTag_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transactionTag_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, transactionTag_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(transactionTag_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, transactionTag_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getClientContext()); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -495,6 +1535,10 @@ public boolean equals(final java.lang.Object obj) { if (priority_ != other.priority_) return false; if (!getRequestTag().equals(other.getRequestTag())) return false; if (!getTransactionTag().equals(other.getTransactionTag())) return false; + if (hasClientContext() != other.hasClientContext()) return false; + if (hasClientContext()) { + if (!getClientContext().equals(other.getClientContext())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -512,6 +1556,10 @@ public int hashCode() { hash = (53 * hash) + getRequestTag().hashCode(); hash = (37 * hash) + TRANSACTION_TAG_FIELD_NUMBER; hash = (53 * hash) + getTransactionTag().hashCode(); + if (hasClientContext()) { + hash = (37 * hash) + CLIENT_CONTEXT_FIELD_NUMBER; + hash = (53 * hash) + getClientContext().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -553,38 +1601,38 @@ public static com.google.spanner.v1.RequestOptions parseFrom( public static com.google.spanner.v1.RequestOptions parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.RequestOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.RequestOptions parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.RequestOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.RequestOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.RequestOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -607,10 +1655,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -620,7 +1669,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.RequestOptions} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.RequestOptions) com.google.spanner.v1.RequestOptionsOrBuilder { @@ -630,7 +1679,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RequestOptions_fieldAccessorTable @@ -640,10 +1689,19 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } // Construct using com.google.spanner.v1.RequestOptions.newBuilder() - private Builder() {} + private Builder() { + maybeForceBuilderInitialization(); + } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetClientContextFieldBuilder(); + } } @java.lang.Override @@ -653,6 +1711,11 @@ public Builder clear() { priority_ = 0; requestTag_ = ""; transactionTag_ = ""; + clientContext_ = null; + if (clientContextBuilder_ != null) { + clientContextBuilder_.dispose(); + clientContextBuilder_ = null; + } return this; } @@ -697,39 +1760,13 @@ private void buildPartial0(com.google.spanner.v1.RequestOptions result) { if (((from_bitField0_ & 0x00000004) != 0)) { result.transactionTag_ = transactionTag_; } - } - - @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); + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000008) != 0)) { + result.clientContext_ = + clientContextBuilder_ == null ? clientContext_ : clientContextBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; } @java.lang.Override @@ -757,6 +1794,9 @@ public Builder mergeFrom(com.google.spanner.v1.RequestOptions other) { bitField0_ |= 0x00000004; onChanged(); } + if (other.hasClientContext()) { + mergeClientContext(other.getClientContext()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -801,6 +1841,13 @@ public Builder mergeFrom( bitField0_ |= 0x00000004; break; } // case 26 + case 34: + { + input.readMessage( + internalGetClientContextFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -821,6 +1868,7 @@ public Builder mergeFrom( private int bitField0_; private int priority_ = 0; + /** * * @@ -836,6 +1884,7 @@ public Builder mergeFrom( public int getPriorityValue() { return priority_; } + /** * * @@ -854,6 +1903,7 @@ public Builder setPriorityValue(int value) { onChanged(); return this; } + /** * * @@ -871,6 +1921,7 @@ public com.google.spanner.v1.RequestOptions.Priority getPriority() { com.google.spanner.v1.RequestOptions.Priority.forNumber(priority_); return result == null ? com.google.spanner.v1.RequestOptions.Priority.UNRECOGNIZED : result; } + /** * * @@ -892,6 +1943,7 @@ public Builder setPriority(com.google.spanner.v1.RequestOptions.Priority value) onChanged(); return this; } + /** * * @@ -911,20 +1963,21 @@ public Builder clearPriority() { } private java.lang.Object requestTag_ = ""; + /** * * *
                                      * A per-request tag which can be applied to queries or reads, used for
                                      * statistics collection.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * This field is ignored for requests where it's not applicable (e.g.
                                -     * CommitRequest).
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * This field is ignored for requests where it's not applicable (for example,
                                +     * `CommitRequest`).
                                      * Legal characters for `request_tag` values are all printable characters
                                      * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string request_tag = 2; @@ -942,20 +1995,21 @@ public java.lang.String getRequestTag() { return (java.lang.String) ref; } } + /** * * *
                                      * A per-request tag which can be applied to queries or reads, used for
                                      * statistics collection.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * This field is ignored for requests where it's not applicable (e.g.
                                -     * CommitRequest).
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * This field is ignored for requests where it's not applicable (for example,
                                +     * `CommitRequest`).
                                      * Legal characters for `request_tag` values are all printable characters
                                      * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string request_tag = 2; @@ -973,20 +2027,21 @@ public com.google.protobuf.ByteString getRequestTagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                      * A per-request tag which can be applied to queries or reads, used for
                                      * statistics collection.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * This field is ignored for requests where it's not applicable (e.g.
                                -     * CommitRequest).
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * This field is ignored for requests where it's not applicable (for example,
                                +     * `CommitRequest`).
                                      * Legal characters for `request_tag` values are all printable characters
                                      * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string request_tag = 2; @@ -1003,20 +2058,21 @@ public Builder setRequestTag(java.lang.String value) { onChanged(); return this; } + /** * * *
                                      * A per-request tag which can be applied to queries or reads, used for
                                      * statistics collection.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * This field is ignored for requests where it's not applicable (e.g.
                                -     * CommitRequest).
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * This field is ignored for requests where it's not applicable (for example,
                                +     * `CommitRequest`).
                                      * Legal characters for `request_tag` values are all printable characters
                                      * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string request_tag = 2; @@ -1029,20 +2085,21 @@ public Builder clearRequestTag() { onChanged(); return this; } + /** * * *
                                      * A per-request tag which can be applied to queries or reads, used for
                                      * statistics collection.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * This field is ignored for requests where it's not applicable (e.g.
                                -     * CommitRequest).
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * This field is ignored for requests where it's not applicable (for example,
                                +     * `CommitRequest`).
                                      * Legal characters for `request_tag` values are all printable characters
                                      * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string request_tag = 2; @@ -1062,21 +2119,23 @@ public Builder setRequestTagBytes(com.google.protobuf.ByteString value) { } private java.lang.Object transactionTag_ = ""; + /** * * *
                                      * A tag used for statistics collection about this transaction.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * The value of transaction_tag should be the same for all requests belonging
                                -     * to the same transaction.
                                -     * If this request doesn't belong to any transaction, transaction_tag will be
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +     * same value for all requests belonging to the same transaction, including
                                +     * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +     * If this request doesn't belong to any transaction, `transaction_tag` is
                                      * ignored.
                                      * Legal characters for `transaction_tag` values are all printable characters
                                -     * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +     * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string transaction_tag = 3; @@ -1094,21 +2153,23 @@ public java.lang.String getTransactionTag() { return (java.lang.String) ref; } } + /** * * *
                                      * A tag used for statistics collection about this transaction.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * The value of transaction_tag should be the same for all requests belonging
                                -     * to the same transaction.
                                -     * If this request doesn't belong to any transaction, transaction_tag will be
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +     * same value for all requests belonging to the same transaction, including
                                +     * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +     * If this request doesn't belong to any transaction, `transaction_tag` is
                                      * ignored.
                                      * Legal characters for `transaction_tag` values are all printable characters
                                -     * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +     * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string transaction_tag = 3; @@ -1126,21 +2187,23 @@ public com.google.protobuf.ByteString getTransactionTagBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * *
                                      * A tag used for statistics collection about this transaction.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * The value of transaction_tag should be the same for all requests belonging
                                -     * to the same transaction.
                                -     * If this request doesn't belong to any transaction, transaction_tag will be
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +     * same value for all requests belonging to the same transaction, including
                                +     * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +     * If this request doesn't belong to any transaction, `transaction_tag` is
                                      * ignored.
                                      * Legal characters for `transaction_tag` values are all printable characters
                                -     * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +     * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string transaction_tag = 3; @@ -1157,21 +2220,23 @@ public Builder setTransactionTag(java.lang.String value) { onChanged(); return this; } + /** * * *
                                      * A tag used for statistics collection about this transaction.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * The value of transaction_tag should be the same for all requests belonging
                                -     * to the same transaction.
                                -     * If this request doesn't belong to any transaction, transaction_tag will be
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +     * same value for all requests belonging to the same transaction, including
                                +     * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +     * If this request doesn't belong to any transaction, `transaction_tag` is
                                      * ignored.
                                      * Legal characters for `transaction_tag` values are all printable characters
                                -     * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +     * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string transaction_tag = 3; @@ -1184,21 +2249,23 @@ public Builder clearTransactionTag() { onChanged(); return this; } + /** * * *
                                      * A tag used for statistics collection about this transaction.
                                -     * Both request_tag and transaction_tag can be specified for a read or query
                                -     * that belongs to a transaction.
                                -     * The value of transaction_tag should be the same for all requests belonging
                                -     * to the same transaction.
                                -     * If this request doesn't belong to any transaction, transaction_tag will be
                                +     * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +     * query that belongs to a transaction.
                                +     * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +     * same value for all requests belonging to the same transaction, including
                                +     * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +     * If this request doesn't belong to any transaction, `transaction_tag` is
                                      * ignored.
                                      * Legal characters for `transaction_tag` values are all printable characters
                                -     * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +     * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                      * characters. Values that exceed this limit are truncated.
                                -     * Any leading underscore (_) characters will be removed from the string.
                                +     * Any leading underscore (_) characters are removed from the string.
                                      * 
                                * * string transaction_tag = 3; @@ -1217,15 +2284,218 @@ public Builder setTransactionTagBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.RequestOptions.ClientContext clientContext_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RequestOptions.ClientContext, + com.google.spanner.v1.RequestOptions.ClientContext.Builder, + com.google.spanner.v1.RequestOptions.ClientContextOrBuilder> + clientContextBuilder_; + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the clientContext field is set. + */ + public boolean hasClientContext() { + return ((bitField0_ & 0x00000008) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The clientContext. + */ + public com.google.spanner.v1.RequestOptions.ClientContext getClientContext() { + if (clientContextBuilder_ == null) { + return clientContext_ == null + ? com.google.spanner.v1.RequestOptions.ClientContext.getDefaultInstance() + : clientContext_; + } else { + return clientContextBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setClientContext(com.google.spanner.v1.RequestOptions.ClientContext value) { + if (clientContextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + clientContext_ = value; + } else { + clientContextBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setClientContext( + com.google.spanner.v1.RequestOptions.ClientContext.Builder builderForValue) { + if (clientContextBuilder_ == null) { + clientContext_ = builderForValue.build(); + } else { + clientContextBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeClientContext(com.google.spanner.v1.RequestOptions.ClientContext value) { + if (clientContextBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && clientContext_ != null + && clientContext_ + != com.google.spanner.v1.RequestOptions.ClientContext.getDefaultInstance()) { + getClientContextBuilder().mergeFrom(value); + } else { + clientContext_ = value; + } + } else { + clientContextBuilder_.mergeFrom(value); + } + if (clientContext_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearClientContext() { + bitField0_ = (bitField0_ & ~0x00000008); + clientContext_ = null; + if (clientContextBuilder_ != null) { + clientContextBuilder_.dispose(); + clientContextBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RequestOptions.ClientContext.Builder getClientContextBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetClientContextFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.RequestOptions.ClientContextOrBuilder getClientContextOrBuilder() { + if (clientContextBuilder_ != null) { + return clientContextBuilder_.getMessageOrBuilder(); + } else { + return clientContext_ == null + ? com.google.spanner.v1.RequestOptions.ClientContext.getDefaultInstance() + : clientContext_; + } + } + + /** + * + * + *
                                +     * Optional. Optional context that may be needed for some requests.
                                +     * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RequestOptions.ClientContext, + com.google.spanner.v1.RequestOptions.ClientContext.Builder, + com.google.spanner.v1.RequestOptions.ClientContextOrBuilder> + internalGetClientContextFieldBuilder() { + if (clientContextBuilder_ == null) { + clientContextBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.RequestOptions.ClientContext, + com.google.spanner.v1.RequestOptions.ClientContext.Builder, + com.google.spanner.v1.RequestOptions.ClientContextOrBuilder>( + getClientContext(), getParentForChildren(), isClean()); + clientContext_ = null; + } + return clientContextBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.RequestOptions) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java index 97b5a3eda32..601c48378eb 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface RequestOptionsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.RequestOptions) @@ -36,6 +38,7 @@ public interface RequestOptionsOrBuilder * @return The enum numeric value on the wire for priority. */ int getPriorityValue(); + /** * * @@ -55,14 +58,14 @@ public interface RequestOptionsOrBuilder *
                                    * A per-request tag which can be applied to queries or reads, used for
                                    * statistics collection.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * This field is ignored for requests where it's not applicable (e.g.
                                -   * CommitRequest).
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * This field is ignored for requests where it's not applicable (for example,
                                +   * `CommitRequest`).
                                    * Legal characters for `request_tag` values are all printable characters
                                    * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string request_tag = 2; @@ -70,20 +73,21 @@ public interface RequestOptionsOrBuilder * @return The requestTag. */ java.lang.String getRequestTag(); + /** * * *
                                    * A per-request tag which can be applied to queries or reads, used for
                                    * statistics collection.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * This field is ignored for requests where it's not applicable (e.g.
                                -   * CommitRequest).
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * This field is ignored for requests where it's not applicable (for example,
                                +   * `CommitRequest`).
                                    * Legal characters for `request_tag` values are all printable characters
                                    * (ASCII 32 - 126) and the length of a request_tag is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string request_tag = 2; @@ -97,16 +101,17 @@ public interface RequestOptionsOrBuilder * *
                                    * A tag used for statistics collection about this transaction.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * The value of transaction_tag should be the same for all requests belonging
                                -   * to the same transaction.
                                -   * If this request doesn't belong to any transaction, transaction_tag will be
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +   * same value for all requests belonging to the same transaction, including
                                +   * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +   * If this request doesn't belong to any transaction, `transaction_tag` is
                                    * ignored.
                                    * Legal characters for `transaction_tag` values are all printable characters
                                -   * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +   * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string transaction_tag = 3; @@ -114,21 +119,23 @@ public interface RequestOptionsOrBuilder * @return The transactionTag. */ java.lang.String getTransactionTag(); + /** * * *
                                    * A tag used for statistics collection about this transaction.
                                -   * Both request_tag and transaction_tag can be specified for a read or query
                                -   * that belongs to a transaction.
                                -   * The value of transaction_tag should be the same for all requests belonging
                                -   * to the same transaction.
                                -   * If this request doesn't belong to any transaction, transaction_tag will be
                                +   * Both `request_tag` and `transaction_tag` can be specified for a read or
                                +   * query that belongs to a transaction.
                                +   * To enable tagging on a transaction, `transaction_tag` must be set to the
                                +   * same value for all requests belonging to the same transaction, including
                                +   * [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
                                +   * If this request doesn't belong to any transaction, `transaction_tag` is
                                    * ignored.
                                    * Legal characters for `transaction_tag` values are all printable characters
                                -   * (ASCII 32 - 126) and the length of a transaction_tag is limited to 50
                                +   * (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50
                                    * characters. Values that exceed this limit are truncated.
                                -   * Any leading underscore (_) characters will be removed from the string.
                                +   * Any leading underscore (_) characters are removed from the string.
                                    * 
                                * * string transaction_tag = 3; @@ -136,4 +143,47 @@ public interface RequestOptionsOrBuilder * @return The bytes for transactionTag. */ com.google.protobuf.ByteString getTransactionTagBytes(); + + /** + * + * + *
                                +   * Optional. Optional context that may be needed for some requests.
                                +   * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the clientContext field is set. + */ + boolean hasClientContext(); + + /** + * + * + *
                                +   * Optional. Optional context that may be needed for some requests.
                                +   * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The clientContext. + */ + com.google.spanner.v1.RequestOptions.ClientContext getClientContext(); + + /** + * + * + *
                                +   * Optional. Optional context that may be needed for some requests.
                                +   * 
                                + * + * + * .google.spanner.v1.RequestOptions.ClientContext client_context = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.RequestOptions.ClientContextOrBuilder getClientContextOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java index 42ee5817b9e..3c1b8d0b4e0 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.ResultSet} */ -public final class ResultSet extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ResultSet extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ResultSet) ResultSetOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ResultSet"); + } + // Use ResultSet.newBuilder() to construct. - private ResultSet(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ResultSet(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private ResultSet() { rows_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ResultSet(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSet_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSet_fieldAccessorTable @@ -66,6 +73,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int METADATA_FIELD_NUMBER = 1; private com.google.spanner.v1.ResultSetMetadata metadata_; + /** * * @@ -81,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasMetadata() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +107,7 @@ public com.google.spanner.v1.ResultSetMetadata getMetadata() { ? com.google.spanner.v1.ResultSetMetadata.getDefaultInstance() : metadata_; } + /** * * @@ -118,16 +128,16 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { @SuppressWarnings("serial") private java.util.List rows_; + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -136,16 +146,16 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { public java.util.List getRowsList() { return rows_; } + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -154,16 +164,16 @@ public java.util.List getRowsList() { public java.util.List getRowsOrBuilderList() { return rows_; } + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -172,16 +182,16 @@ public java.util.List getRowsO public int getRowsCount() { return rows_.size(); } + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -190,16 +200,16 @@ public int getRowsCount() { public com.google.protobuf.ListValue getRows(int index) { return rows_.get(index); } + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -211,6 +221,7 @@ public com.google.protobuf.ListValueOrBuilder getRowsOrBuilder(int index) { public static final int STATS_FIELD_NUMBER = 3; private com.google.spanner.v1.ResultSetStats stats_; + /** * * @@ -220,8 +231,9 @@ public com.google.protobuf.ListValueOrBuilder getRowsOrBuilder(int index) { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -233,6 +245,7 @@ public com.google.protobuf.ListValueOrBuilder getRowsOrBuilder(int index) { public boolean hasStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -242,8 +255,9 @@ public boolean hasStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -255,6 +269,7 @@ public boolean hasStats() { public com.google.spanner.v1.ResultSetStats getStats() { return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; } + /** * * @@ -264,8 +279,9 @@ public com.google.spanner.v1.ResultSetStats getStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -278,17 +294,15 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { public static final int PRECOMMIT_TOKEN_FIELD_NUMBER = 5; private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction is on
                                +   * a multiplexed session. Pass the precommit token with the highest sequence
                                +   * number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -301,17 +315,15 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction is on
                                +   * a multiplexed session. Pass the precommit token with the highest sequence
                                +   * number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -326,17 +338,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( ? com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance() : precommitToken_; } + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction is on
                                +   * a multiplexed session. Pass the precommit token with the highest sequence
                                +   * number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -351,6 +361,80 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( : precommitToken_; } + public static final int CACHE_UPDATE_FIELD_NUMBER = 6; + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + @java.lang.Override + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -377,6 +461,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(5, getPrecommitToken()); } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(6, getCacheUpdate()); + } getUnknownFields().writeTo(output); } @@ -398,6 +485,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getPrecommitToken()); } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getCacheUpdate()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -426,6 +516,10 @@ public boolean equals(final java.lang.Object obj) { if (hasPrecommitToken()) { if (!getPrecommitToken().equals(other.getPrecommitToken())) return false; } + if (hasCacheUpdate() != other.hasCacheUpdate()) return false; + if (hasCacheUpdate()) { + if (!getCacheUpdate().equals(other.getCacheUpdate())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -453,6 +547,10 @@ public int hashCode() { hash = (37 * hash) + PRECOMMIT_TOKEN_FIELD_NUMBER; hash = (53 * hash) + getPrecommitToken().hashCode(); } + if (hasCacheUpdate()) { + hash = (37 * hash) + CACHE_UPDATE_FIELD_NUMBER; + hash = (53 * hash) + getCacheUpdate().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -494,38 +592,38 @@ public static com.google.spanner.v1.ResultSet parseFrom( public static com.google.spanner.v1.ResultSet parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSet parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ResultSet parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSet parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ResultSet parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSet parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -548,10 +646,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -562,7 +661,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.ResultSet} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ResultSet) com.google.spanner.v1.ResultSetOrBuilder { @@ -572,7 +671,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSet_fieldAccessorTable @@ -585,17 +684,18 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getMetadataFieldBuilder(); - getRowsFieldBuilder(); - getStatsFieldBuilder(); - getPrecommitTokenFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMetadataFieldBuilder(); + internalGetRowsFieldBuilder(); + internalGetStatsFieldBuilder(); + internalGetPrecommitTokenFieldBuilder(); + internalGetCacheUpdateFieldBuilder(); } } @@ -625,6 +725,11 @@ public Builder clear() { precommitTokenBuilder_.dispose(); precommitTokenBuilder_ = null; } + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } return this; } @@ -687,42 +792,14 @@ private void buildPartial0(com.google.spanner.v1.ResultSet result) { precommitTokenBuilder_ == null ? precommitToken_ : precommitTokenBuilder_.build(); to_bitField0_ |= 0x00000004; } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.cacheUpdate_ = + cacheUpdateBuilder_ == null ? cacheUpdate_ : cacheUpdateBuilder_.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.spanner.v1.ResultSet) { @@ -757,8 +834,8 @@ public Builder mergeFrom(com.google.spanner.v1.ResultSet other) { rows_ = other.rows_; bitField0_ = (bitField0_ & ~0x00000002); rowsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getRowsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetRowsFieldBuilder() : null; } else { rowsBuilder_.addAllMessages(other.rows_); @@ -771,6 +848,9 @@ public Builder mergeFrom(com.google.spanner.v1.ResultSet other) { if (other.hasPrecommitToken()) { mergePrecommitToken(other.getPrecommitToken()); } + if (other.hasCacheUpdate()) { + mergeCacheUpdate(other.getCacheUpdate()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -799,7 +879,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getMetadataFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMetadataFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 @@ -817,16 +898,24 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getStatsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetStatsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 42: { - input.readMessage(getPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; } // case 42 + case 50: + { + input.readMessage( + internalGetCacheUpdateFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 50 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -847,11 +936,12 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.v1.ResultSetMetadata metadata_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetMetadata, com.google.spanner.v1.ResultSetMetadata.Builder, com.google.spanner.v1.ResultSetMetadataOrBuilder> metadataBuilder_; + /** * * @@ -866,6 +956,7 @@ public Builder mergeFrom( public boolean hasMetadata() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -886,6 +977,7 @@ public com.google.spanner.v1.ResultSetMetadata getMetadata() { return metadataBuilder_.getMessage(); } } + /** * * @@ -908,6 +1000,7 @@ public Builder setMetadata(com.google.spanner.v1.ResultSetMetadata value) { onChanged(); return this; } + /** * * @@ -927,6 +1020,7 @@ public Builder setMetadata(com.google.spanner.v1.ResultSetMetadata.Builder build onChanged(); return this; } + /** * * @@ -954,6 +1048,7 @@ public Builder mergeMetadata(com.google.spanner.v1.ResultSetMetadata value) { } return this; } + /** * * @@ -973,6 +1068,7 @@ public Builder clearMetadata() { onChanged(); return this; } + /** * * @@ -985,8 +1081,9 @@ public Builder clearMetadata() { public com.google.spanner.v1.ResultSetMetadata.Builder getMetadataBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getMetadataFieldBuilder().getBuilder(); + return internalGetMetadataFieldBuilder().getBuilder(); } + /** * * @@ -1005,6 +1102,7 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { : metadata_; } } + /** * * @@ -1014,14 +1112,14 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * * .google.spanner.v1.ResultSetMetadata metadata = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetMetadata, com.google.spanner.v1.ResultSetMetadata.Builder, com.google.spanner.v1.ResultSetMetadataOrBuilder> - getMetadataFieldBuilder() { + internalGetMetadataFieldBuilder() { if (metadataBuilder_ == null) { metadataBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetMetadata, com.google.spanner.v1.ResultSetMetadata.Builder, com.google.spanner.v1.ResultSetMetadataOrBuilder>( @@ -1040,7 +1138,7 @@ private void ensureRowsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> @@ -1051,11 +1149,10 @@ private void ensureRowsIsMutable() { * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1067,16 +1164,16 @@ public java.util.List getRowsList() { return rowsBuilder_.getMessageList(); } } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1088,16 +1185,16 @@ public int getRowsCount() { return rowsBuilder_.getCount(); } } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1109,16 +1206,16 @@ public com.google.protobuf.ListValue getRows(int index) { return rowsBuilder_.getMessage(index); } } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1136,16 +1233,16 @@ public Builder setRows(int index, com.google.protobuf.ListValue value) { } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1160,16 +1257,16 @@ public Builder setRows(int index, com.google.protobuf.ListValue.Builder builderF } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1187,16 +1284,16 @@ public Builder addRows(com.google.protobuf.ListValue value) { } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1214,16 +1311,16 @@ public Builder addRows(int index, com.google.protobuf.ListValue value) { } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1238,16 +1335,16 @@ public Builder addRows(com.google.protobuf.ListValue.Builder builderForValue) { } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1262,16 +1359,16 @@ public Builder addRows(int index, com.google.protobuf.ListValue.Builder builderF } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1286,16 +1383,16 @@ public Builder addAllRows(java.lang.Iterable * Each element in `rows` is a row whose format is defined by - * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element - * in each row matches the ith field in - * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are - * encoded based on type as described - * [here][google.spanner.v1.TypeCode]. + * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith + * element in each row matches the ith field in + * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements + * are encoded based on type as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue rows = 2; @@ -1310,16 +1407,16 @@ public Builder clearRows() { } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1334,33 +1431,33 @@ public Builder removeRows(int index) { } return this; } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ public com.google.protobuf.ListValue.Builder getRowsBuilder(int index) { - return getRowsFieldBuilder().getBuilder(index); + return internalGetRowsFieldBuilder().getBuilder(index); } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1372,16 +1469,16 @@ public com.google.protobuf.ListValueOrBuilder getRowsOrBuilder(int index) { return rowsBuilder_.getMessageOrBuilder(index); } } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -1393,67 +1490,68 @@ public java.util.List getRowsO return java.util.Collections.unmodifiableList(rows_); } } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ public com.google.protobuf.ListValue.Builder addRowsBuilder() { - return getRowsFieldBuilder().addBuilder(com.google.protobuf.ListValue.getDefaultInstance()); + return internalGetRowsFieldBuilder() + .addBuilder(com.google.protobuf.ListValue.getDefaultInstance()); } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ public com.google.protobuf.ListValue.Builder addRowsBuilder(int index) { - return getRowsFieldBuilder() + return internalGetRowsFieldBuilder() .addBuilder(index, com.google.protobuf.ListValue.getDefaultInstance()); } + /** * * *
                                      * Each element in `rows` is a row whose format is defined by
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -     * in each row matches the ith field in
                                -     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -     * encoded based on type as described
                                -     * [here][google.spanner.v1.TypeCode].
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +     * element in each row matches the ith field in
                                +     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                      * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ public java.util.List getRowsBuilderList() { - return getRowsFieldBuilder().getBuilderList(); + return internalGetRowsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder> - getRowsFieldBuilder() { + internalGetRowsFieldBuilder() { if (rowsBuilder_ == null) { rowsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.protobuf.ListValue, com.google.protobuf.ListValue.Builder, com.google.protobuf.ListValueOrBuilder>( @@ -1464,11 +1562,12 @@ public java.util.List getRowsBuilderList( } private com.google.spanner.v1.ResultSetStats stats_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetStats, com.google.spanner.v1.ResultSetStats.Builder, com.google.spanner.v1.ResultSetStatsOrBuilder> statsBuilder_; + /** * * @@ -1478,8 +1577,9 @@ public java.util.List getRowsBuilderList( * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1490,6 +1590,7 @@ public java.util.List getRowsBuilderList( public boolean hasStats() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1499,8 +1600,9 @@ public boolean hasStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1515,6 +1617,7 @@ public com.google.spanner.v1.ResultSetStats getStats() { return statsBuilder_.getMessage(); } } + /** * * @@ -1524,8 +1627,9 @@ public com.google.spanner.v1.ResultSetStats getStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1544,6 +1648,7 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats value) { onChanged(); return this; } + /** * * @@ -1553,8 +1658,9 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats value) { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1570,6 +1676,7 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats.Builder builderForV onChanged(); return this; } + /** * * @@ -1579,8 +1686,9 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats.Builder builderForV * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1604,6 +1712,7 @@ public Builder mergeStats(com.google.spanner.v1.ResultSetStats value) { } return this; } + /** * * @@ -1613,8 +1722,9 @@ public Builder mergeStats(com.google.spanner.v1.ResultSetStats value) { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1630,6 +1740,7 @@ public Builder clearStats() { onChanged(); return this; } + /** * * @@ -1639,8 +1750,9 @@ public Builder clearStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1649,8 +1761,9 @@ public Builder clearStats() { public com.google.spanner.v1.ResultSetStats.Builder getStatsBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getStatsFieldBuilder().getBuilder(); + return internalGetStatsFieldBuilder().getBuilder(); } + /** * * @@ -1660,8 +1773,9 @@ public com.google.spanner.v1.ResultSetStats.Builder getStatsBuilder() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1674,6 +1788,7 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; } } + /** * * @@ -1683,21 +1798,22 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * * .google.spanner.v1.ResultSetStats stats = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetStats, com.google.spanner.v1.ResultSetStats.Builder, com.google.spanner.v1.ResultSetStatsOrBuilder> - getStatsFieldBuilder() { + internalGetStatsFieldBuilder() { if (statsBuilder_ == null) { statsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.ResultSetStats, com.google.spanner.v1.ResultSetStats.Builder, com.google.spanner.v1.ResultSetStatsOrBuilder>( @@ -1708,22 +1824,20 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { } private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> precommitTokenBuilder_; + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1735,17 +1849,15 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000008) != 0); } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1763,17 +1875,15 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( return precommitTokenBuilder_.getMessage(); } } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1793,17 +1903,15 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1821,17 +1929,15 @@ public Builder setPrecommitToken( onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1858,17 +1964,15 @@ public Builder mergePrecommitToken( } return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1885,17 +1989,15 @@ public Builder clearPrecommitToken() { onChanged(); return this; } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1906,19 +2008,17 @@ public Builder clearPrecommitToken() { getPrecommitTokenBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getPrecommitTokenFieldBuilder().getBuilder(); + return internalGetPrecommitTokenFieldBuilder().getBuilder(); } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * @@ -1935,31 +2035,29 @@ public Builder clearPrecommitToken() { : precommitToken_; } } + /** * * *
                                -     * Optional. A precommit token will be included if the read-write transaction
                                -     * is on a multiplexed session.
                                -     * The precommit token with the highest sequence number from this transaction
                                -     * attempt should be passed to the
                                +     * Optional. A precommit token is included if the read-write transaction is on
                                +     * a multiplexed session. Pass the precommit token with the highest sequence
                                +     * number from this transaction attempt to the
                                      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 5 [(.google.api.field_behavior) = OPTIONAL]; * */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> - getPrecommitTokenFieldBuilder() { + internalGetPrecommitTokenFieldBuilder() { if (precommitTokenBuilder_ == null) { precommitTokenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder>( @@ -1969,15 +2067,261 @@ public Builder clearPrecommitToken() { return precommitTokenBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + cacheUpdateBuilder_; + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000010) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + if (cacheUpdateBuilder_ == null) { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } else { + return cacheUpdateBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cacheUpdate_ = value; + } else { + cacheUpdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate.Builder builderForValue) { + if (cacheUpdateBuilder_ == null) { + cacheUpdate_ = builderForValue.build(); + } else { + cacheUpdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && cacheUpdate_ != null + && cacheUpdate_ != com.google.spanner.v1.CacheUpdate.getDefaultInstance()) { + getCacheUpdateBuilder().mergeFrom(value); + } else { + cacheUpdate_ = value; + } + } else { + cacheUpdateBuilder_.mergeFrom(value); + } + if (cacheUpdate_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearCacheUpdate() { + bitField0_ = (bitField0_ & ~0x00000010); + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdate.Builder getCacheUpdateBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return internalGetCacheUpdateFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + if (cacheUpdateBuilder_ != null) { + return cacheUpdateBuilder_.getMessageOrBuilder(); + } else { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + internalGetCacheUpdateFieldBuilder() { + if (cacheUpdateBuilder_ == null) { + cacheUpdateBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder>( + getCacheUpdate(), getParentForChildren(), isClean()); + cacheUpdate_ = null; + } + return cacheUpdateBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.ResultSet) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java index f87dcaf1d9d..6cd09c5326b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,45 +14,53 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** * * *
                                - * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
                                + * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or
                                + * [PartialResultSet][google.spanner.v1.PartialResultSet].
                                  * 
                                * * Protobuf type {@code google.spanner.v1.ResultSetMetadata} */ -public final class ResultSetMetadata extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ResultSetMetadata extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ResultSetMetadata) ResultSetMetadataOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ResultSetMetadata"); + } + // Use ResultSetMetadata.newBuilder() to construct. - private ResultSetMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ResultSetMetadata(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private ResultSetMetadata() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ResultSetMetadata(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSetMetadata_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSetMetadata_fieldAccessorTable @@ -64,18 +72,19 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int ROW_TYPE_FIELD_NUMBER = 1; private com.google.spanner.v1.StructType rowType_; + /** * * *
                                    * Indicates the field names and types for the rows in the result
                                -   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                    * Users"` could return a `row_type` value like:
                                    *
                                -   *     "fields": [
                                -   *       { "name": "UserId", "type": { "code": "INT64" } },
                                -   *       { "name": "UserName", "type": { "code": "STRING" } },
                                -   *     ]
                                +   * "fields": [
                                +   * { "name": "UserId", "type": { "code": "INT64" } },
                                +   * { "name": "UserName", "type": { "code": "STRING" } },
                                +   * ]
                                    * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -86,18 +95,19 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasRowType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                    * Indicates the field names and types for the rows in the result
                                -   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                    * Users"` could return a `row_type` value like:
                                    *
                                -   *     "fields": [
                                -   *       { "name": "UserId", "type": { "code": "INT64" } },
                                -   *       { "name": "UserName", "type": { "code": "STRING" } },
                                -   *     ]
                                +   * "fields": [
                                +   * { "name": "UserId", "type": { "code": "INT64" } },
                                +   * { "name": "UserName", "type": { "code": "STRING" } },
                                +   * ]
                                    * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -108,18 +118,19 @@ public boolean hasRowType() { public com.google.spanner.v1.StructType getRowType() { return rowType_ == null ? com.google.spanner.v1.StructType.getDefaultInstance() : rowType_; } + /** * * *
                                    * Indicates the field names and types for the rows in the result
                                -   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                    * Users"` could return a `row_type` value like:
                                    *
                                -   *     "fields": [
                                -   *       { "name": "UserId", "type": { "code": "INT64" } },
                                -   *       { "name": "UserName", "type": { "code": "STRING" } },
                                -   *     ]
                                +   * "fields": [
                                +   * { "name": "UserId", "type": { "code": "INT64" } },
                                +   * { "name": "UserName", "type": { "code": "STRING" } },
                                +   * ]
                                    * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -131,6 +142,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { public static final int TRANSACTION_FIELD_NUMBER = 2; private com.google.spanner.v1.Transaction transaction_; + /** * * @@ -147,6 +159,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -165,6 +178,7 @@ public com.google.spanner.v1.Transaction getTransaction() { ? com.google.spanner.v1.Transaction.getDefaultInstance() : transaction_; } + /** * * @@ -184,6 +198,7 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { public static final int UNDECLARED_PARAMETERS_FIELD_NUMBER = 3; private com.google.spanner.v1.StructType undeclaredParameters_; + /** * * @@ -194,10 +209,10 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -208,6 +223,7 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { public boolean hasUndeclaredParameters() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -218,10 +234,10 @@ public boolean hasUndeclaredParameters() { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -234,6 +250,7 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() { ? com.google.spanner.v1.StructType.getDefaultInstance() : undeclaredParameters_; } + /** * * @@ -244,10 +261,10 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -393,38 +410,38 @@ public static com.google.spanner.v1.ResultSetMetadata parseFrom( public static com.google.spanner.v1.ResultSetMetadata parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSetMetadata parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ResultSetMetadata parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSetMetadata parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ResultSetMetadata parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSetMetadata parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -447,20 +464,22 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -   * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
                                +   * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or
                                +   * [PartialResultSet][google.spanner.v1.PartialResultSet].
                                    * 
                                * * Protobuf type {@code google.spanner.v1.ResultSetMetadata} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ResultSetMetadata) com.google.spanner.v1.ResultSetMetadataOrBuilder { @@ -470,7 +489,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSetMetadata_fieldAccessorTable @@ -484,16 +503,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getRowTypeFieldBuilder(); - getTransactionFieldBuilder(); - getUndeclaredParametersFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRowTypeFieldBuilder(); + internalGetTransactionFieldBuilder(); + internalGetUndeclaredParametersFieldBuilder(); } } @@ -572,39 +591,6 @@ private void buildPartial0(com.google.spanner.v1.ResultSetMetadata result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ResultSetMetadata) { @@ -654,20 +640,21 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getRowTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetRowTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetTransactionFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { input.readMessage( - getUndeclaredParametersFieldBuilder().getBuilder(), extensionRegistry); + internalGetUndeclaredParametersFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -691,23 +678,24 @@ public Builder mergeFrom( private int bitField0_; private com.google.spanner.v1.StructType rowType_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> rowTypeBuilder_; + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -717,18 +705,19 @@ public Builder mergeFrom( public boolean hasRowType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -742,18 +731,19 @@ public com.google.spanner.v1.StructType getRowType() { return rowTypeBuilder_.getMessage(); } } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -771,18 +761,19 @@ public Builder setRowType(com.google.spanner.v1.StructType value) { onChanged(); return this; } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -797,18 +788,19 @@ public Builder setRowType(com.google.spanner.v1.StructType.Builder builderForVal onChanged(); return this; } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -831,18 +823,19 @@ public Builder mergeRowType(com.google.spanner.v1.StructType value) { } return this; } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -857,18 +850,19 @@ public Builder clearRowType() { onChanged(); return this; } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -876,20 +870,21 @@ public Builder clearRowType() { public com.google.spanner.v1.StructType.Builder getRowTypeBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getRowTypeFieldBuilder().getBuilder(); + return internalGetRowTypeFieldBuilder().getBuilder(); } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -901,30 +896,31 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { return rowType_ == null ? com.google.spanner.v1.StructType.getDefaultInstance() : rowType_; } } + /** * * *
                                      * Indicates the field names and types for the rows in the result
                                -     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                      * Users"` could return a `row_type` value like:
                                      *
                                -     *     "fields": [
                                -     *       { "name": "UserId", "type": { "code": "INT64" } },
                                -     *       { "name": "UserName", "type": { "code": "STRING" } },
                                -     *     ]
                                +     * "fields": [
                                +     * { "name": "UserId", "type": { "code": "INT64" } },
                                +     * { "name": "UserName", "type": { "code": "STRING" } },
                                +     * ]
                                      * 
                                * * .google.spanner.v1.StructType row_type = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> - getRowTypeFieldBuilder() { + internalGetRowTypeFieldBuilder() { if (rowTypeBuilder_ == null) { rowTypeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder>( @@ -935,11 +931,12 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { } private com.google.spanner.v1.Transaction transaction_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Transaction, com.google.spanner.v1.Transaction.Builder, com.google.spanner.v1.TransactionOrBuilder> transactionBuilder_; + /** * * @@ -955,6 +952,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() { public boolean hasTransaction() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -976,6 +974,7 @@ public com.google.spanner.v1.Transaction getTransaction() { return transactionBuilder_.getMessage(); } } + /** * * @@ -999,6 +998,7 @@ public Builder setTransaction(com.google.spanner.v1.Transaction value) { onChanged(); return this; } + /** * * @@ -1019,6 +1019,7 @@ public Builder setTransaction(com.google.spanner.v1.Transaction.Builder builderF onChanged(); return this; } + /** * * @@ -1047,6 +1048,7 @@ public Builder mergeTransaction(com.google.spanner.v1.Transaction value) { } return this; } + /** * * @@ -1067,6 +1069,7 @@ public Builder clearTransaction() { onChanged(); return this; } + /** * * @@ -1080,8 +1083,9 @@ public Builder clearTransaction() { public com.google.spanner.v1.Transaction.Builder getTransactionBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTransactionFieldBuilder().getBuilder(); + return internalGetTransactionFieldBuilder().getBuilder(); } + /** * * @@ -1101,6 +1105,7 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { : transaction_; } } + /** * * @@ -1111,14 +1116,14 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { * * .google.spanner.v1.Transaction transaction = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Transaction, com.google.spanner.v1.Transaction.Builder, com.google.spanner.v1.TransactionOrBuilder> - getTransactionFieldBuilder() { + internalGetTransactionFieldBuilder() { if (transactionBuilder_ == null) { transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Transaction, com.google.spanner.v1.Transaction.Builder, com.google.spanner.v1.TransactionOrBuilder>( @@ -1129,11 +1134,12 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { } private com.google.spanner.v1.StructType undeclaredParameters_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> undeclaredParametersBuilder_; + /** * * @@ -1144,10 +1150,10 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1157,6 +1163,7 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { public boolean hasUndeclaredParameters() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1167,10 +1174,10 @@ public boolean hasUndeclaredParameters() { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1186,6 +1193,7 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() { return undeclaredParametersBuilder_.getMessage(); } } + /** * * @@ -1196,10 +1204,10 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1217,6 +1225,7 @@ public Builder setUndeclaredParameters(com.google.spanner.v1.StructType value) { onChanged(); return this; } + /** * * @@ -1227,10 +1236,10 @@ public Builder setUndeclaredParameters(com.google.spanner.v1.StructType value) { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1246,6 +1255,7 @@ public Builder setUndeclaredParameters( onChanged(); return this; } + /** * * @@ -1256,10 +1266,10 @@ public Builder setUndeclaredParameters( * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1282,6 +1292,7 @@ public Builder mergeUndeclaredParameters(com.google.spanner.v1.StructType value) } return this; } + /** * * @@ -1292,10 +1303,10 @@ public Builder mergeUndeclaredParameters(com.google.spanner.v1.StructType value) * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1310,6 +1321,7 @@ public Builder clearUndeclaredParameters() { onChanged(); return this; } + /** * * @@ -1320,10 +1332,10 @@ public Builder clearUndeclaredParameters() { * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1331,8 +1343,9 @@ public Builder clearUndeclaredParameters() { public com.google.spanner.v1.StructType.Builder getUndeclaredParametersBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getUndeclaredParametersFieldBuilder().getBuilder(); + return internalGetUndeclaredParametersFieldBuilder().getBuilder(); } + /** * * @@ -1343,10 +1356,10 @@ public com.google.spanner.v1.StructType.Builder getUndeclaredParametersBuilder() * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -1360,6 +1373,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilde : undeclaredParameters_; } } + /** * * @@ -1370,22 +1384,22 @@ public com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilde * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> - getUndeclaredParametersFieldBuilder() { + internalGetUndeclaredParametersFieldBuilder() { if (undeclaredParametersBuilder_ == null) { undeclaredParametersBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder>( @@ -1395,17 +1409,6 @@ public com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilde return undeclaredParametersBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.ResultSetMetadata) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java index 6680d86b3fb..c4943749436 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ResultSetMetadataOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ResultSetMetadata) @@ -29,13 +31,13 @@ public interface ResultSetMetadataOrBuilder * *
                                    * Indicates the field names and types for the rows in the result
                                -   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                    * Users"` could return a `row_type` value like:
                                    *
                                -   *     "fields": [
                                -   *       { "name": "UserId", "type": { "code": "INT64" } },
                                -   *       { "name": "UserName", "type": { "code": "STRING" } },
                                -   *     ]
                                +   * "fields": [
                                +   * { "name": "UserId", "type": { "code": "INT64" } },
                                +   * { "name": "UserName", "type": { "code": "STRING" } },
                                +   * ]
                                    * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -43,18 +45,19 @@ public interface ResultSetMetadataOrBuilder * @return Whether the rowType field is set. */ boolean hasRowType(); + /** * * *
                                    * Indicates the field names and types for the rows in the result
                                -   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                    * Users"` could return a `row_type` value like:
                                    *
                                -   *     "fields": [
                                -   *       { "name": "UserId", "type": { "code": "INT64" } },
                                -   *       { "name": "UserName", "type": { "code": "STRING" } },
                                -   *     ]
                                +   * "fields": [
                                +   * { "name": "UserId", "type": { "code": "INT64" } },
                                +   * { "name": "UserName", "type": { "code": "STRING" } },
                                +   * ]
                                    * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -62,18 +65,19 @@ public interface ResultSetMetadataOrBuilder * @return The rowType. */ com.google.spanner.v1.StructType getRowType(); + /** * * *
                                    * Indicates the field names and types for the rows in the result
                                -   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
                                +   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
                                    * Users"` could return a `row_type` value like:
                                    *
                                -   *     "fields": [
                                -   *       { "name": "UserId", "type": { "code": "INT64" } },
                                -   *       { "name": "UserName", "type": { "code": "STRING" } },
                                -   *     ]
                                +   * "fields": [
                                +   * { "name": "UserId", "type": { "code": "INT64" } },
                                +   * { "name": "UserName", "type": { "code": "STRING" } },
                                +   * ]
                                    * 
                                * * .google.spanner.v1.StructType row_type = 1; @@ -93,6 +97,7 @@ public interface ResultSetMetadataOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -106,6 +111,7 @@ public interface ResultSetMetadataOrBuilder * @return The transaction. */ com.google.spanner.v1.Transaction getTransaction(); + /** * * @@ -128,10 +134,10 @@ public interface ResultSetMetadataOrBuilder * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -139,6 +145,7 @@ public interface ResultSetMetadataOrBuilder * @return Whether the undeclaredParameters field is set. */ boolean hasUndeclaredParameters(); + /** * * @@ -149,10 +156,10 @@ public interface ResultSetMetadataOrBuilder * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; @@ -160,6 +167,7 @@ public interface ResultSetMetadataOrBuilder * @return The undeclaredParameters. */ com.google.spanner.v1.StructType getUndeclaredParameters(); + /** * * @@ -170,10 +178,10 @@ public interface ResultSetMetadataOrBuilder * Users where UserId = @userId and UserName = @userName "` could return a * `undeclared_parameters` value like: * - * "fields": [ - * { "name": "UserId", "type": { "code": "INT64" } }, - * { "name": "UserName", "type": { "code": "STRING" } }, - * ] + * "fields": [ + * { "name": "UserId", "type": { "code": "INT64" } }, + * { "name": "UserName", "type": { "code": "STRING" } }, + * ] * * * .google.spanner.v1.StructType undeclared_parameters = 3; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java index 3ce8f7d3e2d..a3694c8fb99 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ResultSetOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ResultSet) @@ -36,6 +38,7 @@ public interface ResultSetOrBuilder * @return Whether the metadata field is set. */ boolean hasMetadata(); + /** * * @@ -48,6 +51,7 @@ public interface ResultSetOrBuilder * @return The metadata. */ com.google.spanner.v1.ResultSetMetadata getMetadata(); + /** * * @@ -64,71 +68,70 @@ public interface ResultSetOrBuilder * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ java.util.List getRowsList(); + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ com.google.protobuf.ListValue getRows(int index); + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ int getRowsCount(); + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; */ java.util.List getRowsOrBuilderList(); + /** * * *
                                    * Each element in `rows` is a row whose format is defined by
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
                                -   * in each row matches the ith field in
                                -   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
                                -   * encoded based on type as described
                                -   * [here][google.spanner.v1.TypeCode].
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
                                +   * element in each row matches the ith field in
                                +   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
                                +   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
                                    * 
                                * * repeated .google.protobuf.ListValue rows = 2; @@ -144,8 +147,9 @@ public interface ResultSetOrBuilder * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -154,6 +158,7 @@ public interface ResultSetOrBuilder * @return Whether the stats field is set. */ boolean hasStats(); + /** * * @@ -163,8 +168,9 @@ public interface ResultSetOrBuilder * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -173,6 +179,7 @@ public interface ResultSetOrBuilder * @return The stats. */ com.google.spanner.v1.ResultSetStats getStats(); + /** * * @@ -182,8 +189,9 @@ public interface ResultSetOrBuilder * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -195,13 +203,10 @@ public interface ResultSetOrBuilder * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction is on
                                +   * a multiplexed session. Pass the precommit token with the highest sequence
                                +   * number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -211,17 +216,15 @@ public interface ResultSetOrBuilder * @return Whether the precommitToken field is set. */ boolean hasPrecommitToken(); + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction is on
                                +   * a multiplexed session. Pass the precommit token with the highest sequence
                                +   * number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -231,17 +234,15 @@ public interface ResultSetOrBuilder * @return The precommitToken. */ com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken(); + /** * * *
                                -   * Optional. A precommit token will be included if the read-write transaction
                                -   * is on a multiplexed session.
                                -   * The precommit token with the highest sequence number from this transaction
                                -   * attempt should be passed to the
                                +   * Optional. A precommit token is included if the read-write transaction is on
                                +   * a multiplexed session. Pass the precommit token with the highest sequence
                                +   * number from this transaction attempt to the
                                    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * @@ -249,4 +250,62 @@ public interface ResultSetOrBuilder * */ com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder getPrecommitTokenOrBuilder(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + boolean hasCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + com.google.spanner.v1.CacheUpdate getCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java index 93b78d65669..c705555c44d 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class ResultSetProto { +@com.google.protobuf.Generated +public final class ResultSetProto extends com.google.protobuf.GeneratedFile { private ResultSetProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ResultSetProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,19 +42,19 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ResultSet_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ResultSet_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PartialResultSet_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PartialResultSet_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ResultSetMetadata_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ResultSetMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ResultSetStats_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ResultSetStats_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -55,38 +67,42 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { java.lang.String[] descriptorData = { "\n\"google/spanner/v1/result_set.proto\022\021go" + "ogle.spanner.v1\032\037google/api/field_behavi" - + "or.proto\032\034google/protobuf/struct.proto\032\"" - + "google/spanner/v1/query_plan.proto\032#goog" - + "le/spanner/v1/transaction.proto\032\034google/" - + "spanner/v1/type.proto\"\362\001\n\tResultSet\0226\n\010m" - + "etadata\030\001 \001(\0132$.google.spanner.v1.Result" - + "SetMetadata\022(\n\004rows\030\002 \003(\0132\032.google.proto" - + "buf.ListValue\0220\n\005stats\030\003 \001(\0132!.google.sp" - + "anner.v1.ResultSetStats\022Q\n\017precommit_tok" - + "en\030\005 \001(\01323.google.spanner.v1.Multiplexed" - + "SessionPrecommitTokenB\003\340A\001\"\244\002\n\020PartialRe" - + "sultSet\0226\n\010metadata\030\001 \001(\0132$.google.spann" - + "er.v1.ResultSetMetadata\022&\n\006values\030\002 \003(\0132" - + "\026.google.protobuf.Value\022\025\n\rchunked_value" - + "\030\003 \001(\010\022\024\n\014resume_token\030\004 \001(\014\0220\n\005stats\030\005 " - + "\001(\0132!.google.spanner.v1.ResultSetStats\022Q" - + "\n\017precommit_token\030\010 \001(\01323.google.spanner" - + ".v1.MultiplexedSessionPrecommitTokenB\003\340A" - + "\001\"\267\001\n\021ResultSetMetadata\022/\n\010row_type\030\001 \001(" - + "\0132\035.google.spanner.v1.StructType\0223\n\013tran" - + "saction\030\002 \001(\0132\036.google.spanner.v1.Transa" - + "ction\022<\n\025undeclared_parameters\030\003 \001(\0132\035.g" - + "oogle.spanner.v1.StructType\"\271\001\n\016ResultSe" - + "tStats\0220\n\nquery_plan\030\001 \001(\0132\034.google.span" - + "ner.v1.QueryPlan\022,\n\013query_stats\030\002 \001(\0132\027." - + "google.protobuf.Struct\022\031\n\017row_count_exac" - + "t\030\003 \001(\003H\000\022\037\n\025row_count_lower_bound\030\004 \001(\003" - + "H\000B\013\n\trow_countB\264\001\n\025com.google.spanner.v" - + "1B\016ResultSetProtoP\001Z5cloud.google.com/go" - + "/spanner/apiv1/spannerpb;spannerpb\370\001\001\252\002\027" - + "Google.Cloud.Spanner.V1\312\002\027Google\\Cloud\\S" - + "panner\\V1\352\002\032Google::Cloud::Spanner::V1b\006" - + "proto3" + + "or.proto\032\034google/protobuf/struct.proto\032 " + + "google/spanner/v1/location.proto\032\"google" + + "/spanner/v1/query_plan.proto\032#google/spa" + + "nner/v1/transaction.proto\032\034google/spanne" + + "r/v1/type.proto\"\255\002\n\tResultSet\0226\n\010metadat" + + "a\030\001 \001(\0132$.google.spanner.v1.ResultSetMet" + + "adata\022(\n\004rows\030\002 \003(\0132\032.google.protobuf.Li" + + "stValue\0220\n\005stats\030\003 \001(\0132!.google.spanner." + + "v1.ResultSetStats\022Q\n\017precommit_token\030\005 \001" + + "(\01323.google.spanner.v1.MultiplexedSessio" + + "nPrecommitTokenB\003\340A\001\0229\n\014cache_update\030\006 \001" + + "(\0132\036.google.spanner.v1.CacheUpdateB\003\340A\001\"" + + "\362\002\n\020PartialResultSet\0226\n\010metadata\030\001 \001(\0132$" + + ".google.spanner.v1.ResultSetMetadata\022&\n\006" + + "values\030\002 \003(\0132\026.google.protobuf.Value\022\025\n\r" + + "chunked_value\030\003 \001(\010\022\024\n\014resume_token\030\004 \001(" + + "\014\0220\n\005stats\030\005 \001(\0132!.google.spanner.v1.Res" + + "ultSetStats\022Q\n\017precommit_token\030\010 \001(\01323.g" + + "oogle.spanner.v1.MultiplexedSessionPreco" + + "mmitTokenB\003\340A\001\022\021\n\004last\030\t \001(\010B\003\340A\001\0229\n\014cac" + + "he_update\030\n \001(\0132\036.google.spanner.v1.Cach" + + "eUpdateB\003\340A\001\"\267\001\n\021ResultSetMetadata\022/\n\010ro" + + "w_type\030\001 \001(\0132\035.google.spanner.v1.StructT" + + "ype\0223\n\013transaction\030\002 \001(\0132\036.google.spanne" + + "r.v1.Transaction\022<\n\025undeclared_parameter" + + "s\030\003 \001(\0132\035.google.spanner.v1.StructType\"\271" + + "\001\n\016ResultSetStats\0220\n\nquery_plan\030\001 \001(\0132\034." + + "google.spanner.v1.QueryPlan\022,\n\013query_sta" + + "ts\030\002 \001(\0132\027.google.protobuf.Struct\022\031\n\017row" + + "_count_exact\030\003 \001(\003H\000\022\037\n\025row_count_lower_" + + "bound\030\004 \001(\003H\000B\013\n\trow_countB\261\001\n\025com.googl" + + "e.spanner.v1B\016ResultSetProtoP\001Z5cloud.go" + + "ogle.com/go/spanner/apiv1/spannerpb;span" + + "nerpb\252\002\027Google.Cloud.Spanner.V1\312\002\027Google" + + "\\Cloud\\Spanner\\V1\352\002\032Google::Cloud::Spann" + + "er::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -94,52 +110,60 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.api.FieldBehaviorProto.getDescriptor(), com.google.protobuf.StructProto.getDescriptor(), + com.google.spanner.v1.LocationProto.getDescriptor(), com.google.spanner.v1.QueryPlanProto.getDescriptor(), com.google.spanner.v1.TransactionProto.getDescriptor(), com.google.spanner.v1.TypeProto.getDescriptor(), }); - internal_static_google_spanner_v1_ResultSet_descriptor = - getDescriptor().getMessageTypes().get(0); + internal_static_google_spanner_v1_ResultSet_descriptor = getDescriptor().getMessageType(0); internal_static_google_spanner_v1_ResultSet_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_ResultSet_descriptor, new java.lang.String[] { - "Metadata", "Rows", "Stats", "PrecommitToken", + "Metadata", "Rows", "Stats", "PrecommitToken", "CacheUpdate", }); internal_static_google_spanner_v1_PartialResultSet_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageType(1); internal_static_google_spanner_v1_PartialResultSet_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_PartialResultSet_descriptor, new java.lang.String[] { - "Metadata", "Values", "ChunkedValue", "ResumeToken", "Stats", "PrecommitToken", + "Metadata", + "Values", + "ChunkedValue", + "ResumeToken", + "Stats", + "PrecommitToken", + "Last", + "CacheUpdate", }); internal_static_google_spanner_v1_ResultSetMetadata_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_v1_ResultSetMetadata_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_ResultSetMetadata_descriptor, new java.lang.String[] { "RowType", "Transaction", "UndeclaredParameters", }); - internal_static_google_spanner_v1_ResultSetStats_descriptor = - getDescriptor().getMessageTypes().get(3); + internal_static_google_spanner_v1_ResultSetStats_descriptor = getDescriptor().getMessageType(3); internal_static_google_spanner_v1_ResultSetStats_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_ResultSetStats_descriptor, new java.lang.String[] { "QueryPlan", "QueryStats", "RowCountExact", "RowCountLowerBound", "RowCount", }); - com.google.protobuf.ExtensionRegistry registry = - com.google.protobuf.ExtensionRegistry.newInstance(); - registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); - com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( - descriptor, registry); + descriptor.resolveAllFeaturesImmutable(); com.google.api.FieldBehaviorProto.getDescriptor(); com.google.protobuf.StructProto.getDescriptor(); + com.google.spanner.v1.LocationProto.getDescriptor(); com.google.spanner.v1.QueryPlanProto.getDescriptor(); com.google.spanner.v1.TransactionProto.getDescriptor(); com.google.spanner.v1.TypeProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java index ff87998e87f..e89b89efbed 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,45 +14,53 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** * * *
                                - * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
                                + * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or
                                + * [PartialResultSet][google.spanner.v1.PartialResultSet].
                                  * 
                                * * Protobuf type {@code google.spanner.v1.ResultSetStats} */ -public final class ResultSetStats extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class ResultSetStats extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.ResultSetStats) ResultSetStatsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ResultSetStats"); + } + // Use ResultSetStats.newBuilder() to construct. - private ResultSetStats(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ResultSetStats(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private ResultSetStats() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ResultSetStats(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSetStats_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSetStats_fieldAccessorTable @@ -79,6 +87,7 @@ public enum RowCountCase private RowCountCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -113,11 +122,13 @@ public RowCountCase getRowCountCase() { public static final int QUERY_PLAN_FIELD_NUMBER = 1; private com.google.spanner.v1.QueryPlan queryPlan_; + /** * * *
                                -   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +   * result.
                                    * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -128,11 +139,13 @@ public RowCountCase getRowCountCase() { public boolean hasQueryPlan() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +   * result.
                                    * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -143,11 +156,13 @@ public boolean hasQueryPlan() { public com.google.spanner.v1.QueryPlan getQueryPlan() { return queryPlan_ == null ? com.google.spanner.v1.QueryPlan.getDefaultInstance() : queryPlan_; } + /** * * *
                                -   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +   * result.
                                    * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -159,6 +174,7 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { public static final int QUERY_STATS_FIELD_NUMBER = 2; private com.google.protobuf.Struct queryStats_; + /** * * @@ -167,11 +183,11 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -182,6 +198,7 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { public boolean hasQueryStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -190,11 +207,11 @@ public boolean hasQueryStats() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -205,6 +222,7 @@ public boolean hasQueryStats() { public com.google.protobuf.Struct getQueryStats() { return queryStats_ == null ? com.google.protobuf.Struct.getDefaultInstance() : queryStats_; } + /** * * @@ -213,11 +231,11 @@ public com.google.protobuf.Struct getQueryStats() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -228,6 +246,7 @@ public com.google.protobuf.StructOrBuilder getQueryStatsOrBuilder() { } public static final int ROW_COUNT_EXACT_FIELD_NUMBER = 3; + /** * * @@ -243,6 +262,7 @@ public com.google.protobuf.StructOrBuilder getQueryStatsOrBuilder() { public boolean hasRowCountExact() { return rowCountCase_ == 3; } + /** * * @@ -263,11 +283,12 @@ public long getRowCountExact() { } public static final int ROW_COUNT_LOWER_BOUND_FIELD_NUMBER = 4; + /** * * *
                                -   * Partitioned DML does not offer exactly-once semantics, so it
                                +   * Partitioned DML doesn't offer exactly-once semantics, so it
                                    * returns a lower bound of the rows modified.
                                    * 
                                * @@ -279,11 +300,12 @@ public long getRowCountExact() { public boolean hasRowCountLowerBound() { return rowCountCase_ == 4; } + /** * * *
                                -   * Partitioned DML does not offer exactly-once semantics, so it
                                +   * Partitioned DML doesn't offer exactly-once semantics, so it
                                    * returns a lower bound of the rows modified.
                                    * 
                                * @@ -456,38 +478,38 @@ public static com.google.spanner.v1.ResultSetStats parseFrom( public static com.google.spanner.v1.ResultSetStats parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSetStats parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ResultSetStats parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSetStats parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.ResultSetStats parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.ResultSetStats parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -510,20 +532,22 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -   * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
                                +   * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or
                                +   * [PartialResultSet][google.spanner.v1.PartialResultSet].
                                    * 
                                * * Protobuf type {@code google.spanner.v1.ResultSetStats} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.ResultSetStats) com.google.spanner.v1.ResultSetStatsOrBuilder { @@ -533,7 +557,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.ResultSetProto .internal_static_google_spanner_v1_ResultSetStats_fieldAccessorTable @@ -547,15 +571,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getQueryPlanFieldBuilder(); - getQueryStatsFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetQueryPlanFieldBuilder(); + internalGetQueryStatsFieldBuilder(); } } @@ -628,39 +652,6 @@ private void buildPartialOneofs(com.google.spanner.v1.ResultSetStats result) { result.rowCount_ = this.rowCount_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.ResultSetStats) { @@ -723,13 +714,15 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getQueryPlanFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetQueryPlanFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { - input.readMessage(getQueryStatsFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetQueryStatsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -779,16 +772,18 @@ public Builder clearRowCount() { private int bitField0_; private com.google.spanner.v1.QueryPlan queryPlan_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.QueryPlan, com.google.spanner.v1.QueryPlan.Builder, com.google.spanner.v1.QueryPlanOrBuilder> queryPlanBuilder_; + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -798,11 +793,13 @@ public Builder clearRowCount() { public boolean hasQueryPlan() { return ((bitField0_ & 0x00000001) != 0); } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -818,11 +815,13 @@ public com.google.spanner.v1.QueryPlan getQueryPlan() { return queryPlanBuilder_.getMessage(); } } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -840,11 +839,13 @@ public Builder setQueryPlan(com.google.spanner.v1.QueryPlan value) { onChanged(); return this; } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -859,11 +860,13 @@ public Builder setQueryPlan(com.google.spanner.v1.QueryPlan.Builder builderForVa onChanged(); return this; } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -886,11 +889,13 @@ public Builder mergeQueryPlan(com.google.spanner.v1.QueryPlan value) { } return this; } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -905,11 +910,13 @@ public Builder clearQueryPlan() { onChanged(); return this; } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -917,13 +924,15 @@ public Builder clearQueryPlan() { public com.google.spanner.v1.QueryPlan.Builder getQueryPlanBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getQueryPlanFieldBuilder().getBuilder(); + return internalGetQueryPlanFieldBuilder().getBuilder(); } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -937,23 +946,25 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { : queryPlan_; } } + /** * * *
                                -     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +     * result.
                                      * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.QueryPlan, com.google.spanner.v1.QueryPlan.Builder, com.google.spanner.v1.QueryPlanOrBuilder> - getQueryPlanFieldBuilder() { + internalGetQueryPlanFieldBuilder() { if (queryPlanBuilder_ == null) { queryPlanBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.QueryPlan, com.google.spanner.v1.QueryPlan.Builder, com.google.spanner.v1.QueryPlanOrBuilder>( @@ -964,11 +975,12 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { } private com.google.protobuf.Struct queryStats_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> queryStatsBuilder_; + /** * * @@ -977,11 +989,11 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -991,6 +1003,7 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { public boolean hasQueryStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -999,11 +1012,11 @@ public boolean hasQueryStats() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -1017,6 +1030,7 @@ public com.google.protobuf.Struct getQueryStats() { return queryStatsBuilder_.getMessage(); } } + /** * * @@ -1025,11 +1039,11 @@ public com.google.protobuf.Struct getQueryStats() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -1047,6 +1061,7 @@ public Builder setQueryStats(com.google.protobuf.Struct value) { onChanged(); return this; } + /** * * @@ -1055,11 +1070,11 @@ public Builder setQueryStats(com.google.protobuf.Struct value) { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -1074,6 +1089,7 @@ public Builder setQueryStats(com.google.protobuf.Struct.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1082,11 +1098,11 @@ public Builder setQueryStats(com.google.protobuf.Struct.Builder builderForValue) * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -1109,6 +1125,7 @@ public Builder mergeQueryStats(com.google.protobuf.Struct value) { } return this; } + /** * * @@ -1117,11 +1134,11 @@ public Builder mergeQueryStats(com.google.protobuf.Struct value) { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -1136,6 +1153,7 @@ public Builder clearQueryStats() { onChanged(); return this; } + /** * * @@ -1144,11 +1162,11 @@ public Builder clearQueryStats() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -1156,8 +1174,9 @@ public Builder clearQueryStats() { public com.google.protobuf.Struct.Builder getQueryStatsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getQueryStatsFieldBuilder().getBuilder(); + return internalGetQueryStatsFieldBuilder().getBuilder(); } + /** * * @@ -1166,11 +1185,11 @@ public com.google.protobuf.Struct.Builder getQueryStatsBuilder() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -1182,6 +1201,7 @@ public com.google.protobuf.StructOrBuilder getQueryStatsOrBuilder() { return queryStats_ == null ? com.google.protobuf.Struct.getDefaultInstance() : queryStats_; } } + /** * * @@ -1190,23 +1210,23 @@ public com.google.protobuf.StructOrBuilder getQueryStatsOrBuilder() { * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> - getQueryStatsFieldBuilder() { + internalGetQueryStatsFieldBuilder() { if (queryStatsBuilder_ == null) { queryStatsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder>( @@ -1230,6 +1250,7 @@ public com.google.protobuf.StructOrBuilder getQueryStatsOrBuilder() { public boolean hasRowCountExact() { return rowCountCase_ == 3; } + /** * * @@ -1247,6 +1268,7 @@ public long getRowCountExact() { } return 0L; } + /** * * @@ -1266,6 +1288,7 @@ public Builder setRowCountExact(long value) { onChanged(); return this; } + /** * * @@ -1290,7 +1313,7 @@ public Builder clearRowCountExact() { * * *
                                -     * Partitioned DML does not offer exactly-once semantics, so it
                                +     * Partitioned DML doesn't offer exactly-once semantics, so it
                                      * returns a lower bound of the rows modified.
                                      * 
                                * @@ -1301,11 +1324,12 @@ public Builder clearRowCountExact() { public boolean hasRowCountLowerBound() { return rowCountCase_ == 4; } + /** * * *
                                -     * Partitioned DML does not offer exactly-once semantics, so it
                                +     * Partitioned DML doesn't offer exactly-once semantics, so it
                                      * returns a lower bound of the rows modified.
                                      * 
                                * @@ -1319,11 +1343,12 @@ public long getRowCountLowerBound() { } return 0L; } + /** * * *
                                -     * Partitioned DML does not offer exactly-once semantics, so it
                                +     * Partitioned DML doesn't offer exactly-once semantics, so it
                                      * returns a lower bound of the rows modified.
                                      * 
                                * @@ -1339,11 +1364,12 @@ public Builder setRowCountLowerBound(long value) { onChanged(); return this; } + /** * * *
                                -     * Partitioned DML does not offer exactly-once semantics, so it
                                +     * Partitioned DML doesn't offer exactly-once semantics, so it
                                      * returns a lower bound of the rows modified.
                                      * 
                                * @@ -1360,17 +1386,6 @@ public Builder clearRowCountLowerBound() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.ResultSetStats) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java index 3362ee8e08d..efdc44f7257 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/result_set.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface ResultSetStatsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.ResultSetStats) @@ -28,7 +30,8 @@ public interface ResultSetStatsOrBuilder * * *
                                -   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +   * result.
                                    * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -36,11 +39,13 @@ public interface ResultSetStatsOrBuilder * @return Whether the queryPlan field is set. */ boolean hasQueryPlan(); + /** * * *
                                -   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +   * result.
                                    * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -48,11 +53,13 @@ public interface ResultSetStatsOrBuilder * @return The queryPlan. */ com.google.spanner.v1.QueryPlan getQueryPlan(); + /** * * *
                                -   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
                                +   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
                                +   * result.
                                    * 
                                * * .google.spanner.v1.QueryPlan query_plan = 1; @@ -67,11 +74,11 @@ public interface ResultSetStatsOrBuilder * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -79,6 +86,7 @@ public interface ResultSetStatsOrBuilder * @return Whether the queryStats field is set. */ boolean hasQueryStats(); + /** * * @@ -87,11 +95,11 @@ public interface ResultSetStatsOrBuilder * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -99,6 +107,7 @@ public interface ResultSetStatsOrBuilder * @return The queryStats. */ com.google.protobuf.Struct getQueryStats(); + /** * * @@ -107,11 +116,11 @@ public interface ResultSetStatsOrBuilder * the query is profiled. For example, a query could return the statistics as * follows: * - * { - * "rows_returned": "3", - * "elapsed_time": "1.22 secs", - * "cpu_time": "1.19 secs" - * } + * { + * "rows_returned": "3", + * "elapsed_time": "1.22 secs", + * "cpu_time": "1.19 secs" + * } * * * .google.protobuf.Struct query_stats = 2; @@ -130,6 +139,7 @@ public interface ResultSetStatsOrBuilder * @return Whether the rowCountExact field is set. */ boolean hasRowCountExact(); + /** * * @@ -147,7 +157,7 @@ public interface ResultSetStatsOrBuilder * * *
                                -   * Partitioned DML does not offer exactly-once semantics, so it
                                +   * Partitioned DML doesn't offer exactly-once semantics, so it
                                    * returns a lower bound of the rows modified.
                                    * 
                                * @@ -156,11 +166,12 @@ public interface ResultSetStatsOrBuilder * @return Whether the rowCountLowerBound field is set. */ boolean hasRowCountLowerBound(); + /** * * *
                                -   * Partitioned DML does not offer exactly-once semantics, so it
                                +   * Partitioned DML doesn't offer exactly-once semantics, so it
                                    * returns a lower bound of the rows modified.
                                    * 
                                * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java index caa8e5d74c9..bedf1ee135f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.RollbackRequest} */ -public final class RollbackRequest extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class RollbackRequest extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.RollbackRequest) RollbackRequestOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RollbackRequest"); + } + // Use RollbackRequest.newBuilder() to construct. - private RollbackRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private RollbackRequest(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,19 +56,13 @@ private RollbackRequest() { transactionId_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RollbackRequest(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RollbackRequest_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RollbackRequest_fieldAccessorTable @@ -68,6 +75,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object session_ = ""; + /** * * @@ -93,6 +101,7 @@ public java.lang.String getSession() { return s; } } + /** * * @@ -121,6 +130,7 @@ public com.google.protobuf.ByteString getSessionBytes() { public static final int TRANSACTION_ID_FIELD_NUMBER = 2; private com.google.protobuf.ByteString transactionId_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -151,8 +161,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, session_); } if (!transactionId_.isEmpty()) { output.writeBytes(2, transactionId_); @@ -166,8 +176,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, session_); } if (!transactionId_.isEmpty()) { size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, transactionId_); @@ -245,38 +255,38 @@ public static com.google.spanner.v1.RollbackRequest parseFrom( public static com.google.spanner.v1.RollbackRequest parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.RollbackRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.RollbackRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.RollbackRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.RollbackRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.RollbackRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -299,10 +309,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -312,7 +323,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.RollbackRequest} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.RollbackRequest) com.google.spanner.v1.RollbackRequestOrBuilder { @@ -322,7 +333,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RollbackRequest_fieldAccessorTable @@ -334,7 +345,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.RollbackRequest.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -388,39 +399,6 @@ private void buildPartial0(com.google.spanner.v1.RollbackRequest result) { } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.RollbackRequest) { @@ -438,7 +416,7 @@ public Builder mergeFrom(com.google.spanner.v1.RollbackRequest other) { bitField0_ |= 0x00000001; onChanged(); } - if (other.getTransactionId() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getTransactionId().isEmpty()) { setTransactionId(other.getTransactionId()); } this.mergeUnknownFields(other.getUnknownFields()); @@ -499,6 +477,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object session_ = ""; + /** * * @@ -523,6 +502,7 @@ public java.lang.String getSession() { return (java.lang.String) ref; } } + /** * * @@ -547,6 +527,7 @@ public com.google.protobuf.ByteString getSessionBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -570,6 +551,7 @@ public Builder setSession(java.lang.String value) { onChanged(); return this; } + /** * * @@ -589,6 +571,7 @@ public Builder clearSession() { onChanged(); return this; } + /** * * @@ -615,6 +598,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.ByteString transactionId_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -630,6 +614,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { public com.google.protobuf.ByteString getTransactionId() { return transactionId_; } + /** * * @@ -651,6 +636,7 @@ public Builder setTransactionId(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -669,17 +655,6 @@ public Builder clearTransactionId() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.RollbackRequest) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java index 2bfdefaf8de..10871a3dfb6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface RollbackRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.RollbackRequest) @@ -38,6 +40,7 @@ public interface RollbackRequestOrBuilder * @return The session. */ java.lang.String getSession(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RoutingHint.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RoutingHint.java new file mode 100644 index 00000000000..b4b8b40a23c --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RoutingHint.java @@ -0,0 +1,2777 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * `RoutingHint` can be optionally added to location-aware Spanner
                                + * requests. It gives the server hints that can be used to route the request to
                                + * an appropriate server, potentially significantly decreasing latency and
                                + * improving throughput. To achieve improved performance, most fields must be
                                + * filled in with accurate values.
                                + *
                                + * The presence of a valid `RoutingHint` tells the server that the client
                                + * is location-aware.
                                + *
                                + * `RoutingHint` does not change the semantics of the request; it is
                                + * purely a performance hint; the request will perform the same actions on the
                                + * database's data as if `RoutingHint` were not present. However, if
                                + * the `RoutingHint` is incomplete or incorrect, the response may include
                                + * a `CacheUpdate` the client can use to correct its location cache.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.RoutingHint} + */ +@com.google.protobuf.Generated +public final class RoutingHint extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.RoutingHint) + RoutingHintOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RoutingHint"); + } + + // Use RoutingHint.newBuilder() to construct. + private RoutingHint(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private RoutingHint() { + schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + key_ = com.google.protobuf.ByteString.EMPTY; + limitKey_ = com.google.protobuf.ByteString.EMPTY; + skippedTabletUid_ = java.util.Collections.emptyList(); + clientLocation_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RoutingHint.class, + com.google.spanner.v1.RoutingHint.Builder.class); + } + + public interface SkippedTabletOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.RoutingHint.SkippedTablet) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +     * The tablet UID of the tablet that was skipped. See `Tablet.tablet_uid`.
                                +     * 
                                + * + * uint64 tablet_uid = 1; + * + * @return The tabletUid. + */ + long getTabletUid(); + + /** + * + * + *
                                +     * The incarnation of the tablet that was skipped. See `Tablet.incarnation`.
                                +     * 
                                + * + * bytes incarnation = 2; + * + * @return The incarnation. + */ + com.google.protobuf.ByteString getIncarnation(); + } + + /** + * + * + *
                                +   * A tablet that was skipped by the client. See `Tablet.tablet_uid` and
                                +   * `Tablet.incarnation`.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.RoutingHint.SkippedTablet} + */ + public static final class SkippedTablet extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.RoutingHint.SkippedTablet) + SkippedTabletOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SkippedTablet"); + } + + // Use SkippedTablet.newBuilder() to construct. + private SkippedTablet(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private SkippedTablet() { + incarnation_ = com.google.protobuf.ByteString.EMPTY; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_SkippedTablet_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_SkippedTablet_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RoutingHint.SkippedTablet.class, + com.google.spanner.v1.RoutingHint.SkippedTablet.Builder.class); + } + + public static final int TABLET_UID_FIELD_NUMBER = 1; + private long tabletUid_ = 0L; + + /** + * + * + *
                                +     * The tablet UID of the tablet that was skipped. See `Tablet.tablet_uid`.
                                +     * 
                                + * + * uint64 tablet_uid = 1; + * + * @return The tabletUid. + */ + @java.lang.Override + public long getTabletUid() { + return tabletUid_; + } + + public static final int INCARNATION_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString incarnation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * The incarnation of the tablet that was skipped. See `Tablet.incarnation`.
                                +     * 
                                + * + * bytes incarnation = 2; + * + * @return The incarnation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIncarnation() { + return incarnation_; + } + + 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 (tabletUid_ != 0L) { + output.writeUInt64(1, tabletUid_); + } + if (!incarnation_.isEmpty()) { + output.writeBytes(2, incarnation_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (tabletUid_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(1, tabletUid_); + } + if (!incarnation_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, incarnation_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.RoutingHint.SkippedTablet)) { + return super.equals(obj); + } + com.google.spanner.v1.RoutingHint.SkippedTablet other = + (com.google.spanner.v1.RoutingHint.SkippedTablet) obj; + + if (getTabletUid() != other.getTabletUid()) return false; + if (!getIncarnation().equals(other.getIncarnation())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TABLET_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getTabletUid()); + hash = (37 * hash) + INCARNATION_FIELD_NUMBER; + hash = (53 * hash) + getIncarnation().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.RoutingHint.SkippedTablet 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +     * A tablet that was skipped by the client. See `Tablet.tablet_uid` and
                                +     * `Tablet.incarnation`.
                                +     * 
                                + * + * Protobuf type {@code google.spanner.v1.RoutingHint.SkippedTablet} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.RoutingHint.SkippedTablet) + com.google.spanner.v1.RoutingHint.SkippedTabletOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_SkippedTablet_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_SkippedTablet_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RoutingHint.SkippedTablet.class, + com.google.spanner.v1.RoutingHint.SkippedTablet.Builder.class); + } + + // Construct using com.google.spanner.v1.RoutingHint.SkippedTablet.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + tabletUid_ = 0L; + incarnation_ = com.google.protobuf.ByteString.EMPTY; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_SkippedTablet_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint.SkippedTablet getDefaultInstanceForType() { + return com.google.spanner.v1.RoutingHint.SkippedTablet.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint.SkippedTablet build() { + com.google.spanner.v1.RoutingHint.SkippedTablet result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint.SkippedTablet buildPartial() { + com.google.spanner.v1.RoutingHint.SkippedTablet result = + new com.google.spanner.v1.RoutingHint.SkippedTablet(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.RoutingHint.SkippedTablet result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.tabletUid_ = tabletUid_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.incarnation_ = incarnation_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.RoutingHint.SkippedTablet) { + return mergeFrom((com.google.spanner.v1.RoutingHint.SkippedTablet) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.RoutingHint.SkippedTablet other) { + if (other == com.google.spanner.v1.RoutingHint.SkippedTablet.getDefaultInstance()) + return this; + if (other.getTabletUid() != 0L) { + setTabletUid(other.getTabletUid()); + } + if (!other.getIncarnation().isEmpty()) { + setIncarnation(other.getIncarnation()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + tabletUid_ = input.readUInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + incarnation_ = input.readBytes(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private long tabletUid_; + + /** + * + * + *
                                +       * The tablet UID of the tablet that was skipped. See `Tablet.tablet_uid`.
                                +       * 
                                + * + * uint64 tablet_uid = 1; + * + * @return The tabletUid. + */ + @java.lang.Override + public long getTabletUid() { + return tabletUid_; + } + + /** + * + * + *
                                +       * The tablet UID of the tablet that was skipped. See `Tablet.tablet_uid`.
                                +       * 
                                + * + * uint64 tablet_uid = 1; + * + * @param value The tabletUid to set. + * @return This builder for chaining. + */ + public Builder setTabletUid(long value) { + + tabletUid_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The tablet UID of the tablet that was skipped. See `Tablet.tablet_uid`.
                                +       * 
                                + * + * uint64 tablet_uid = 1; + * + * @return This builder for chaining. + */ + public Builder clearTabletUid() { + bitField0_ = (bitField0_ & ~0x00000001); + tabletUid_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString incarnation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +       * The incarnation of the tablet that was skipped. See `Tablet.incarnation`.
                                +       * 
                                + * + * bytes incarnation = 2; + * + * @return The incarnation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIncarnation() { + return incarnation_; + } + + /** + * + * + *
                                +       * The incarnation of the tablet that was skipped. See `Tablet.incarnation`.
                                +       * 
                                + * + * bytes incarnation = 2; + * + * @param value The incarnation to set. + * @return This builder for chaining. + */ + public Builder setIncarnation(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + incarnation_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +       * The incarnation of the tablet that was skipped. See `Tablet.incarnation`.
                                +       * 
                                + * + * bytes incarnation = 2; + * + * @return This builder for chaining. + */ + public Builder clearIncarnation() { + bitField0_ = (bitField0_ & ~0x00000002); + incarnation_ = getDefaultInstance().getIncarnation(); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.RoutingHint.SkippedTablet) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.RoutingHint.SkippedTablet) + private static final com.google.spanner.v1.RoutingHint.SkippedTablet DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.RoutingHint.SkippedTablet(); + } + + public static com.google.spanner.v1.RoutingHint.SkippedTablet getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SkippedTablet parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint.SkippedTablet getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public static final int OPERATION_UID_FIELD_NUMBER = 1; + private long operationUid_ = 0L; + + /** + * + * + *
                                +   * A session-scoped unique ID for the operation, computed client-side.
                                +   * Requests with the same `operation_uid` should have a shared 'shape',
                                +   * meaning that some fields are expected to be the same, such as the SQL
                                +   * query, the target table/columns (for reads) etc. Requests with the same
                                +   * `operation_uid` are meant to differ only in fields like keys/key
                                +   * ranges/query parameters, transaction IDs, etc.
                                +   *
                                +   * `operation_uid` must be non-zero for `RoutingHint` to be valid.
                                +   * 
                                + * + * uint64 operation_uid = 1; + * + * @return The operationUid. + */ + @java.lang.Override + public long getOperationUid() { + return operationUid_; + } + + public static final int DATABASE_ID_FIELD_NUMBER = 2; + private long databaseId_ = 0L; + + /** + * + * + *
                                +   * The database ID of the database being accessed, see
                                +   * `CacheUpdate.database_id`. Should match the cache entries that were used
                                +   * to generate the rest of the fields in this `RoutingHint`.
                                +   * 
                                + * + * uint64 database_id = 2; + * + * @return The databaseId. + */ + @java.lang.Override + public long getDatabaseId() { + return databaseId_; + } + + public static final int SCHEMA_GENERATION_FIELD_NUMBER = 3; + private com.google.protobuf.ByteString schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * The schema generation of the recipe that was used to generate `key` and
                                +   * `limit_key`. See also `RecipeList.schema_generation`.
                                +   * 
                                + * + * bytes schema_generation = 3; + * + * @return The schemaGeneration. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSchemaGeneration() { + return schemaGeneration_; + } + + public static final int KEY_FIELD_NUMBER = 4; + private com.google.protobuf.ByteString key_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * The key / key range that this request accesses. For operations that
                                +   * access a single key, `key` should be set and `limit_key` should be empty.
                                +   * For operations that access a key range, `key` and `limit_key` should both
                                +   * be set, to the inclusive start and exclusive end of the range respectively.
                                +   *
                                +   * The keys are encoded in "sortable string format" (ssformat), using a
                                +   * `KeyRecipe` that is appropriate for the request. See `KeyRecipe` for more
                                +   * details.
                                +   * 
                                + * + * bytes key = 4; + * + * @return The key. + */ + @java.lang.Override + public com.google.protobuf.ByteString getKey() { + return key_; + } + + public static final int LIMIT_KEY_FIELD_NUMBER = 5; + private com.google.protobuf.ByteString limitKey_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * If this request targets a key range, this is the exclusive end of the
                                +   * range. See `key` for more details.
                                +   * 
                                + * + * bytes limit_key = 5; + * + * @return The limitKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getLimitKey() { + return limitKey_; + } + + public static final int GROUP_UID_FIELD_NUMBER = 6; + private long groupUid_ = 0L; + + /** + * + * + *
                                +   * The group UID of the group that the client believes serves the range
                                +   * defined by `key` and `limit_key`. See `Range.group_uid` for more details.
                                +   * 
                                + * + * uint64 group_uid = 6; + * + * @return The groupUid. + */ + @java.lang.Override + public long getGroupUid() { + return groupUid_; + } + + public static final int SPLIT_ID_FIELD_NUMBER = 7; + private long splitId_ = 0L; + + /** + * + * + *
                                +   * The split ID of the split that the client believes contains the range
                                +   * defined by `key` and `limit_key`. See `Range.split_id` for more details.
                                +   * 
                                + * + * uint64 split_id = 7; + * + * @return The splitId. + */ + @java.lang.Override + public long getSplitId() { + return splitId_; + } + + public static final int TABLET_UID_FIELD_NUMBER = 8; + private long tabletUid_ = 0L; + + /** + * + * + *
                                +   * The tablet UID of the tablet from group `group_uid` that the client
                                +   * believes is best to serve this request. See `Group.local_tablet_uids` and
                                +   * `Group.leader_tablet_uid`.
                                +   * 
                                + * + * uint64 tablet_uid = 8; + * + * @return The tabletUid. + */ + @java.lang.Override + public long getTabletUid() { + return tabletUid_; + } + + public static final int SKIPPED_TABLET_UID_FIELD_NUMBER = 9; + + @SuppressWarnings("serial") + private java.util.List skippedTabletUid_; + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + @java.lang.Override + public java.util.List getSkippedTabletUidList() { + return skippedTabletUid_; + } + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + @java.lang.Override + public java.util.List + getSkippedTabletUidOrBuilderList() { + return skippedTabletUid_; + } + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + @java.lang.Override + public int getSkippedTabletUidCount() { + return skippedTabletUid_.size(); + } + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHint.SkippedTablet getSkippedTabletUid(int index) { + return skippedTabletUid_.get(index); + } + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + @java.lang.Override + public com.google.spanner.v1.RoutingHint.SkippedTabletOrBuilder getSkippedTabletUidOrBuilder( + int index) { + return skippedTabletUid_.get(index); + } + + public static final int CLIENT_LOCATION_FIELD_NUMBER = 10; + + @SuppressWarnings("serial") + private volatile java.lang.Object clientLocation_ = ""; + + /** + * + * + *
                                +   * If present, the client's current location. This should be the name of a
                                +   * Google Cloud zone or region, such as "us-central1".
                                +   *
                                +   * If absent, the client's location will be assumed to be the same as the
                                +   * location of the server the client ends up connected to.
                                +   *
                                +   * Locations are primarily valuable for clients that connect from regions
                                +   * other than the ones that contain the Spanner database.
                                +   * 
                                + * + * string client_location = 10; + * + * @return The clientLocation. + */ + @java.lang.Override + public java.lang.String getClientLocation() { + java.lang.Object ref = clientLocation_; + 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(); + clientLocation_ = s; + return s; + } + } + + /** + * + * + *
                                +   * If present, the client's current location. This should be the name of a
                                +   * Google Cloud zone or region, such as "us-central1".
                                +   *
                                +   * If absent, the client's location will be assumed to be the same as the
                                +   * location of the server the client ends up connected to.
                                +   *
                                +   * Locations are primarily valuable for clients that connect from regions
                                +   * other than the ones that contain the Spanner database.
                                +   * 
                                + * + * string client_location = 10; + * + * @return The bytes for clientLocation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClientLocationBytes() { + java.lang.Object ref = clientLocation_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clientLocation_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (operationUid_ != 0L) { + output.writeUInt64(1, operationUid_); + } + if (databaseId_ != 0L) { + output.writeUInt64(2, databaseId_); + } + if (!schemaGeneration_.isEmpty()) { + output.writeBytes(3, schemaGeneration_); + } + if (!key_.isEmpty()) { + output.writeBytes(4, key_); + } + if (!limitKey_.isEmpty()) { + output.writeBytes(5, limitKey_); + } + if (groupUid_ != 0L) { + output.writeUInt64(6, groupUid_); + } + if (splitId_ != 0L) { + output.writeUInt64(7, splitId_); + } + if (tabletUid_ != 0L) { + output.writeUInt64(8, tabletUid_); + } + for (int i = 0; i < skippedTabletUid_.size(); i++) { + output.writeMessage(9, skippedTabletUid_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clientLocation_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 10, clientLocation_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (operationUid_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(1, operationUid_); + } + if (databaseId_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(2, databaseId_); + } + if (!schemaGeneration_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(3, schemaGeneration_); + } + if (!key_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(4, key_); + } + if (!limitKey_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(5, limitKey_); + } + if (groupUid_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(6, groupUid_); + } + if (splitId_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(7, splitId_); + } + if (tabletUid_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(8, tabletUid_); + } + for (int i = 0; i < skippedTabletUid_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, skippedTabletUid_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clientLocation_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(10, clientLocation_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.RoutingHint)) { + return super.equals(obj); + } + com.google.spanner.v1.RoutingHint other = (com.google.spanner.v1.RoutingHint) obj; + + if (getOperationUid() != other.getOperationUid()) return false; + if (getDatabaseId() != other.getDatabaseId()) return false; + if (!getSchemaGeneration().equals(other.getSchemaGeneration())) return false; + if (!getKey().equals(other.getKey())) return false; + if (!getLimitKey().equals(other.getLimitKey())) return false; + if (getGroupUid() != other.getGroupUid()) return false; + if (getSplitId() != other.getSplitId()) return false; + if (getTabletUid() != other.getTabletUid()) return false; + if (!getSkippedTabletUidList().equals(other.getSkippedTabletUidList())) return false; + if (!getClientLocation().equals(other.getClientLocation())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + OPERATION_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOperationUid()); + hash = (37 * hash) + DATABASE_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getDatabaseId()); + hash = (37 * hash) + SCHEMA_GENERATION_FIELD_NUMBER; + hash = (53 * hash) + getSchemaGeneration().hashCode(); + hash = (37 * hash) + KEY_FIELD_NUMBER; + hash = (53 * hash) + getKey().hashCode(); + hash = (37 * hash) + LIMIT_KEY_FIELD_NUMBER; + hash = (53 * hash) + getLimitKey().hashCode(); + hash = (37 * hash) + GROUP_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getGroupUid()); + hash = (37 * hash) + SPLIT_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getSplitId()); + hash = (37 * hash) + TABLET_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getTabletUid()); + if (getSkippedTabletUidCount() > 0) { + hash = (37 * hash) + SKIPPED_TABLET_UID_FIELD_NUMBER; + hash = (53 * hash) + getSkippedTabletUidList().hashCode(); + } + hash = (37 * hash) + CLIENT_LOCATION_FIELD_NUMBER; + hash = (53 * hash) + getClientLocation().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.RoutingHint parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RoutingHint parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RoutingHint parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.RoutingHint parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RoutingHint parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RoutingHint parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.RoutingHint parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.RoutingHint parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.RoutingHint 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * `RoutingHint` can be optionally added to location-aware Spanner
                                +   * requests. It gives the server hints that can be used to route the request to
                                +   * an appropriate server, potentially significantly decreasing latency and
                                +   * improving throughput. To achieve improved performance, most fields must be
                                +   * filled in with accurate values.
                                +   *
                                +   * The presence of a valid `RoutingHint` tells the server that the client
                                +   * is location-aware.
                                +   *
                                +   * `RoutingHint` does not change the semantics of the request; it is
                                +   * purely a performance hint; the request will perform the same actions on the
                                +   * database's data as if `RoutingHint` were not present. However, if
                                +   * the `RoutingHint` is incomplete or incorrect, the response may include
                                +   * a `CacheUpdate` the client can use to correct its location cache.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.RoutingHint} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.RoutingHint) + com.google.spanner.v1.RoutingHintOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.RoutingHint.class, + com.google.spanner.v1.RoutingHint.Builder.class); + } + + // Construct using com.google.spanner.v1.RoutingHint.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + operationUid_ = 0L; + databaseId_ = 0L; + schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + key_ = com.google.protobuf.ByteString.EMPTY; + limitKey_ = com.google.protobuf.ByteString.EMPTY; + groupUid_ = 0L; + splitId_ = 0L; + tabletUid_ = 0L; + if (skippedTabletUidBuilder_ == null) { + skippedTabletUid_ = java.util.Collections.emptyList(); + } else { + skippedTabletUid_ = null; + skippedTabletUidBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + clientLocation_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_RoutingHint_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint getDefaultInstanceForType() { + return com.google.spanner.v1.RoutingHint.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint build() { + com.google.spanner.v1.RoutingHint result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint buildPartial() { + com.google.spanner.v1.RoutingHint result = new com.google.spanner.v1.RoutingHint(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.RoutingHint result) { + if (skippedTabletUidBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0)) { + skippedTabletUid_ = java.util.Collections.unmodifiableList(skippedTabletUid_); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.skippedTabletUid_ = skippedTabletUid_; + } else { + result.skippedTabletUid_ = skippedTabletUidBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.RoutingHint result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.operationUid_ = operationUid_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.databaseId_ = databaseId_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.schemaGeneration_ = schemaGeneration_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.key_ = key_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.limitKey_ = limitKey_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.groupUid_ = groupUid_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.splitId_ = splitId_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.tabletUid_ = tabletUid_; + } + if (((from_bitField0_ & 0x00000200) != 0)) { + result.clientLocation_ = clientLocation_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.RoutingHint) { + return mergeFrom((com.google.spanner.v1.RoutingHint) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.RoutingHint other) { + if (other == com.google.spanner.v1.RoutingHint.getDefaultInstance()) return this; + if (other.getOperationUid() != 0L) { + setOperationUid(other.getOperationUid()); + } + if (other.getDatabaseId() != 0L) { + setDatabaseId(other.getDatabaseId()); + } + if (!other.getSchemaGeneration().isEmpty()) { + setSchemaGeneration(other.getSchemaGeneration()); + } + if (!other.getKey().isEmpty()) { + setKey(other.getKey()); + } + if (!other.getLimitKey().isEmpty()) { + setLimitKey(other.getLimitKey()); + } + if (other.getGroupUid() != 0L) { + setGroupUid(other.getGroupUid()); + } + if (other.getSplitId() != 0L) { + setSplitId(other.getSplitId()); + } + if (other.getTabletUid() != 0L) { + setTabletUid(other.getTabletUid()); + } + if (skippedTabletUidBuilder_ == null) { + if (!other.skippedTabletUid_.isEmpty()) { + if (skippedTabletUid_.isEmpty()) { + skippedTabletUid_ = other.skippedTabletUid_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.addAll(other.skippedTabletUid_); + } + onChanged(); + } + } else { + if (!other.skippedTabletUid_.isEmpty()) { + if (skippedTabletUidBuilder_.isEmpty()) { + skippedTabletUidBuilder_.dispose(); + skippedTabletUidBuilder_ = null; + skippedTabletUid_ = other.skippedTabletUid_; + bitField0_ = (bitField0_ & ~0x00000100); + skippedTabletUidBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSkippedTabletUidFieldBuilder() + : null; + } else { + skippedTabletUidBuilder_.addAllMessages(other.skippedTabletUid_); + } + } + } + if (!other.getClientLocation().isEmpty()) { + clientLocation_ = other.clientLocation_; + bitField0_ |= 0x00000200; + 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 8: + { + operationUid_ = input.readUInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: + { + databaseId_ = input.readUInt64(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + schemaGeneration_ = input.readBytes(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + key_ = input.readBytes(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + limitKey_ = input.readBytes(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 48: + { + groupUid_ = input.readUInt64(); + bitField0_ |= 0x00000020; + break; + } // case 48 + case 56: + { + splitId_ = input.readUInt64(); + bitField0_ |= 0x00000040; + break; + } // case 56 + case 64: + { + tabletUid_ = input.readUInt64(); + bitField0_ |= 0x00000080; + break; + } // case 64 + case 74: + { + com.google.spanner.v1.RoutingHint.SkippedTablet m = + input.readMessage( + com.google.spanner.v1.RoutingHint.SkippedTablet.parser(), + extensionRegistry); + if (skippedTabletUidBuilder_ == null) { + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.add(m); + } else { + skippedTabletUidBuilder_.addMessage(m); + } + break; + } // case 74 + case 82: + { + clientLocation_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000200; + break; + } // case 82 + 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 long operationUid_; + + /** + * + * + *
                                +     * A session-scoped unique ID for the operation, computed client-side.
                                +     * Requests with the same `operation_uid` should have a shared 'shape',
                                +     * meaning that some fields are expected to be the same, such as the SQL
                                +     * query, the target table/columns (for reads) etc. Requests with the same
                                +     * `operation_uid` are meant to differ only in fields like keys/key
                                +     * ranges/query parameters, transaction IDs, etc.
                                +     *
                                +     * `operation_uid` must be non-zero for `RoutingHint` to be valid.
                                +     * 
                                + * + * uint64 operation_uid = 1; + * + * @return The operationUid. + */ + @java.lang.Override + public long getOperationUid() { + return operationUid_; + } + + /** + * + * + *
                                +     * A session-scoped unique ID for the operation, computed client-side.
                                +     * Requests with the same `operation_uid` should have a shared 'shape',
                                +     * meaning that some fields are expected to be the same, such as the SQL
                                +     * query, the target table/columns (for reads) etc. Requests with the same
                                +     * `operation_uid` are meant to differ only in fields like keys/key
                                +     * ranges/query parameters, transaction IDs, etc.
                                +     *
                                +     * `operation_uid` must be non-zero for `RoutingHint` to be valid.
                                +     * 
                                + * + * uint64 operation_uid = 1; + * + * @param value The operationUid to set. + * @return This builder for chaining. + */ + public Builder setOperationUid(long value) { + + operationUid_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * A session-scoped unique ID for the operation, computed client-side.
                                +     * Requests with the same `operation_uid` should have a shared 'shape',
                                +     * meaning that some fields are expected to be the same, such as the SQL
                                +     * query, the target table/columns (for reads) etc. Requests with the same
                                +     * `operation_uid` are meant to differ only in fields like keys/key
                                +     * ranges/query parameters, transaction IDs, etc.
                                +     *
                                +     * `operation_uid` must be non-zero for `RoutingHint` to be valid.
                                +     * 
                                + * + * uint64 operation_uid = 1; + * + * @return This builder for chaining. + */ + public Builder clearOperationUid() { + bitField0_ = (bitField0_ & ~0x00000001); + operationUid_ = 0L; + onChanged(); + return this; + } + + private long databaseId_; + + /** + * + * + *
                                +     * The database ID of the database being accessed, see
                                +     * `CacheUpdate.database_id`. Should match the cache entries that were used
                                +     * to generate the rest of the fields in this `RoutingHint`.
                                +     * 
                                + * + * uint64 database_id = 2; + * + * @return The databaseId. + */ + @java.lang.Override + public long getDatabaseId() { + return databaseId_; + } + + /** + * + * + *
                                +     * The database ID of the database being accessed, see
                                +     * `CacheUpdate.database_id`. Should match the cache entries that were used
                                +     * to generate the rest of the fields in this `RoutingHint`.
                                +     * 
                                + * + * uint64 database_id = 2; + * + * @param value The databaseId to set. + * @return This builder for chaining. + */ + public Builder setDatabaseId(long value) { + + databaseId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The database ID of the database being accessed, see
                                +     * `CacheUpdate.database_id`. Should match the cache entries that were used
                                +     * to generate the rest of the fields in this `RoutingHint`.
                                +     * 
                                + * + * uint64 database_id = 2; + * + * @return This builder for chaining. + */ + public Builder clearDatabaseId() { + bitField0_ = (bitField0_ & ~0x00000002); + databaseId_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString schemaGeneration_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * The schema generation of the recipe that was used to generate `key` and
                                +     * `limit_key`. See also `RecipeList.schema_generation`.
                                +     * 
                                + * + * bytes schema_generation = 3; + * + * @return The schemaGeneration. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSchemaGeneration() { + return schemaGeneration_; + } + + /** + * + * + *
                                +     * The schema generation of the recipe that was used to generate `key` and
                                +     * `limit_key`. See also `RecipeList.schema_generation`.
                                +     * 
                                + * + * bytes schema_generation = 3; + * + * @param value The schemaGeneration to set. + * @return This builder for chaining. + */ + public Builder setSchemaGeneration(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + schemaGeneration_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The schema generation of the recipe that was used to generate `key` and
                                +     * `limit_key`. See also `RecipeList.schema_generation`.
                                +     * 
                                + * + * bytes schema_generation = 3; + * + * @return This builder for chaining. + */ + public Builder clearSchemaGeneration() { + bitField0_ = (bitField0_ & ~0x00000004); + schemaGeneration_ = getDefaultInstance().getSchemaGeneration(); + onChanged(); + return this; + } + + private com.google.protobuf.ByteString key_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * The key / key range that this request accesses. For operations that
                                +     * access a single key, `key` should be set and `limit_key` should be empty.
                                +     * For operations that access a key range, `key` and `limit_key` should both
                                +     * be set, to the inclusive start and exclusive end of the range respectively.
                                +     *
                                +     * The keys are encoded in "sortable string format" (ssformat), using a
                                +     * `KeyRecipe` that is appropriate for the request. See `KeyRecipe` for more
                                +     * details.
                                +     * 
                                + * + * bytes key = 4; + * + * @return The key. + */ + @java.lang.Override + public com.google.protobuf.ByteString getKey() { + return key_; + } + + /** + * + * + *
                                +     * The key / key range that this request accesses. For operations that
                                +     * access a single key, `key` should be set and `limit_key` should be empty.
                                +     * For operations that access a key range, `key` and `limit_key` should both
                                +     * be set, to the inclusive start and exclusive end of the range respectively.
                                +     *
                                +     * The keys are encoded in "sortable string format" (ssformat), using a
                                +     * `KeyRecipe` that is appropriate for the request. See `KeyRecipe` for more
                                +     * details.
                                +     * 
                                + * + * bytes key = 4; + * + * @param value The key to set. + * @return This builder for chaining. + */ + public Builder setKey(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + key_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The key / key range that this request accesses. For operations that
                                +     * access a single key, `key` should be set and `limit_key` should be empty.
                                +     * For operations that access a key range, `key` and `limit_key` should both
                                +     * be set, to the inclusive start and exclusive end of the range respectively.
                                +     *
                                +     * The keys are encoded in "sortable string format" (ssformat), using a
                                +     * `KeyRecipe` that is appropriate for the request. See `KeyRecipe` for more
                                +     * details.
                                +     * 
                                + * + * bytes key = 4; + * + * @return This builder for chaining. + */ + public Builder clearKey() { + bitField0_ = (bitField0_ & ~0x00000008); + key_ = getDefaultInstance().getKey(); + onChanged(); + return this; + } + + private com.google.protobuf.ByteString limitKey_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * If this request targets a key range, this is the exclusive end of the
                                +     * range. See `key` for more details.
                                +     * 
                                + * + * bytes limit_key = 5; + * + * @return The limitKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getLimitKey() { + return limitKey_; + } + + /** + * + * + *
                                +     * If this request targets a key range, this is the exclusive end of the
                                +     * range. See `key` for more details.
                                +     * 
                                + * + * bytes limit_key = 5; + * + * @param value The limitKey to set. + * @return This builder for chaining. + */ + public Builder setLimitKey(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + limitKey_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If this request targets a key range, this is the exclusive end of the
                                +     * range. See `key` for more details.
                                +     * 
                                + * + * bytes limit_key = 5; + * + * @return This builder for chaining. + */ + public Builder clearLimitKey() { + bitField0_ = (bitField0_ & ~0x00000010); + limitKey_ = getDefaultInstance().getLimitKey(); + onChanged(); + return this; + } + + private long groupUid_; + + /** + * + * + *
                                +     * The group UID of the group that the client believes serves the range
                                +     * defined by `key` and `limit_key`. See `Range.group_uid` for more details.
                                +     * 
                                + * + * uint64 group_uid = 6; + * + * @return The groupUid. + */ + @java.lang.Override + public long getGroupUid() { + return groupUid_; + } + + /** + * + * + *
                                +     * The group UID of the group that the client believes serves the range
                                +     * defined by `key` and `limit_key`. See `Range.group_uid` for more details.
                                +     * 
                                + * + * uint64 group_uid = 6; + * + * @param value The groupUid to set. + * @return This builder for chaining. + */ + public Builder setGroupUid(long value) { + + groupUid_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The group UID of the group that the client believes serves the range
                                +     * defined by `key` and `limit_key`. See `Range.group_uid` for more details.
                                +     * 
                                + * + * uint64 group_uid = 6; + * + * @return This builder for chaining. + */ + public Builder clearGroupUid() { + bitField0_ = (bitField0_ & ~0x00000020); + groupUid_ = 0L; + onChanged(); + return this; + } + + private long splitId_; + + /** + * + * + *
                                +     * The split ID of the split that the client believes contains the range
                                +     * defined by `key` and `limit_key`. See `Range.split_id` for more details.
                                +     * 
                                + * + * uint64 split_id = 7; + * + * @return The splitId. + */ + @java.lang.Override + public long getSplitId() { + return splitId_; + } + + /** + * + * + *
                                +     * The split ID of the split that the client believes contains the range
                                +     * defined by `key` and `limit_key`. See `Range.split_id` for more details.
                                +     * 
                                + * + * uint64 split_id = 7; + * + * @param value The splitId to set. + * @return This builder for chaining. + */ + public Builder setSplitId(long value) { + + splitId_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The split ID of the split that the client believes contains the range
                                +     * defined by `key` and `limit_key`. See `Range.split_id` for more details.
                                +     * 
                                + * + * uint64 split_id = 7; + * + * @return This builder for chaining. + */ + public Builder clearSplitId() { + bitField0_ = (bitField0_ & ~0x00000040); + splitId_ = 0L; + onChanged(); + return this; + } + + private long tabletUid_; + + /** + * + * + *
                                +     * The tablet UID of the tablet from group `group_uid` that the client
                                +     * believes is best to serve this request. See `Group.local_tablet_uids` and
                                +     * `Group.leader_tablet_uid`.
                                +     * 
                                + * + * uint64 tablet_uid = 8; + * + * @return The tabletUid. + */ + @java.lang.Override + public long getTabletUid() { + return tabletUid_; + } + + /** + * + * + *
                                +     * The tablet UID of the tablet from group `group_uid` that the client
                                +     * believes is best to serve this request. See `Group.local_tablet_uids` and
                                +     * `Group.leader_tablet_uid`.
                                +     * 
                                + * + * uint64 tablet_uid = 8; + * + * @param value The tabletUid to set. + * @return This builder for chaining. + */ + public Builder setTabletUid(long value) { + + tabletUid_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The tablet UID of the tablet from group `group_uid` that the client
                                +     * believes is best to serve this request. See `Group.local_tablet_uids` and
                                +     * `Group.leader_tablet_uid`.
                                +     * 
                                + * + * uint64 tablet_uid = 8; + * + * @return This builder for chaining. + */ + public Builder clearTabletUid() { + bitField0_ = (bitField0_ & ~0x00000080); + tabletUid_ = 0L; + onChanged(); + return this; + } + + private java.util.List skippedTabletUid_ = + java.util.Collections.emptyList(); + + private void ensureSkippedTabletUidIsMutable() { + if (!((bitField0_ & 0x00000100) != 0)) { + skippedTabletUid_ = + new java.util.ArrayList( + skippedTabletUid_); + bitField0_ |= 0x00000100; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.RoutingHint.SkippedTablet, + com.google.spanner.v1.RoutingHint.SkippedTablet.Builder, + com.google.spanner.v1.RoutingHint.SkippedTabletOrBuilder> + skippedTabletUidBuilder_; + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public java.util.List + getSkippedTabletUidList() { + if (skippedTabletUidBuilder_ == null) { + return java.util.Collections.unmodifiableList(skippedTabletUid_); + } else { + return skippedTabletUidBuilder_.getMessageList(); + } + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public int getSkippedTabletUidCount() { + if (skippedTabletUidBuilder_ == null) { + return skippedTabletUid_.size(); + } else { + return skippedTabletUidBuilder_.getCount(); + } + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public com.google.spanner.v1.RoutingHint.SkippedTablet getSkippedTabletUid(int index) { + if (skippedTabletUidBuilder_ == null) { + return skippedTabletUid_.get(index); + } else { + return skippedTabletUidBuilder_.getMessage(index); + } + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder setSkippedTabletUid( + int index, com.google.spanner.v1.RoutingHint.SkippedTablet value) { + if (skippedTabletUidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.set(index, value); + onChanged(); + } else { + skippedTabletUidBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder setSkippedTabletUid( + int index, com.google.spanner.v1.RoutingHint.SkippedTablet.Builder builderForValue) { + if (skippedTabletUidBuilder_ == null) { + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.set(index, builderForValue.build()); + onChanged(); + } else { + skippedTabletUidBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder addSkippedTabletUid(com.google.spanner.v1.RoutingHint.SkippedTablet value) { + if (skippedTabletUidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.add(value); + onChanged(); + } else { + skippedTabletUidBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder addSkippedTabletUid( + int index, com.google.spanner.v1.RoutingHint.SkippedTablet value) { + if (skippedTabletUidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.add(index, value); + onChanged(); + } else { + skippedTabletUidBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder addSkippedTabletUid( + com.google.spanner.v1.RoutingHint.SkippedTablet.Builder builderForValue) { + if (skippedTabletUidBuilder_ == null) { + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.add(builderForValue.build()); + onChanged(); + } else { + skippedTabletUidBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder addSkippedTabletUid( + int index, com.google.spanner.v1.RoutingHint.SkippedTablet.Builder builderForValue) { + if (skippedTabletUidBuilder_ == null) { + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.add(index, builderForValue.build()); + onChanged(); + } else { + skippedTabletUidBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder addAllSkippedTabletUid( + java.lang.Iterable values) { + if (skippedTabletUidBuilder_ == null) { + ensureSkippedTabletUidIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, skippedTabletUid_); + onChanged(); + } else { + skippedTabletUidBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder clearSkippedTabletUid() { + if (skippedTabletUidBuilder_ == null) { + skippedTabletUid_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + } else { + skippedTabletUidBuilder_.clear(); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public Builder removeSkippedTabletUid(int index) { + if (skippedTabletUidBuilder_ == null) { + ensureSkippedTabletUidIsMutable(); + skippedTabletUid_.remove(index); + onChanged(); + } else { + skippedTabletUidBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public com.google.spanner.v1.RoutingHint.SkippedTablet.Builder getSkippedTabletUidBuilder( + int index) { + return internalGetSkippedTabletUidFieldBuilder().getBuilder(index); + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public com.google.spanner.v1.RoutingHint.SkippedTabletOrBuilder getSkippedTabletUidOrBuilder( + int index) { + if (skippedTabletUidBuilder_ == null) { + return skippedTabletUid_.get(index); + } else { + return skippedTabletUidBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public java.util.List + getSkippedTabletUidOrBuilderList() { + if (skippedTabletUidBuilder_ != null) { + return skippedTabletUidBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(skippedTabletUid_); + } + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public com.google.spanner.v1.RoutingHint.SkippedTablet.Builder addSkippedTabletUidBuilder() { + return internalGetSkippedTabletUidFieldBuilder() + .addBuilder(com.google.spanner.v1.RoutingHint.SkippedTablet.getDefaultInstance()); + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public com.google.spanner.v1.RoutingHint.SkippedTablet.Builder addSkippedTabletUidBuilder( + int index) { + return internalGetSkippedTabletUidFieldBuilder() + .addBuilder(index, com.google.spanner.v1.RoutingHint.SkippedTablet.getDefaultInstance()); + } + + /** + * + * + *
                                +     * If the client had multiple options for tablet selection, and some of its
                                +     * first choices were unhealthy (e.g., the server is unreachable, or
                                +     * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +     * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +     * with new locations for those tablets.
                                +     * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + public java.util.List + getSkippedTabletUidBuilderList() { + return internalGetSkippedTabletUidFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.RoutingHint.SkippedTablet, + com.google.spanner.v1.RoutingHint.SkippedTablet.Builder, + com.google.spanner.v1.RoutingHint.SkippedTabletOrBuilder> + internalGetSkippedTabletUidFieldBuilder() { + if (skippedTabletUidBuilder_ == null) { + skippedTabletUidBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.spanner.v1.RoutingHint.SkippedTablet, + com.google.spanner.v1.RoutingHint.SkippedTablet.Builder, + com.google.spanner.v1.RoutingHint.SkippedTabletOrBuilder>( + skippedTabletUid_, + ((bitField0_ & 0x00000100) != 0), + getParentForChildren(), + isClean()); + skippedTabletUid_ = null; + } + return skippedTabletUidBuilder_; + } + + private java.lang.Object clientLocation_ = ""; + + /** + * + * + *
                                +     * If present, the client's current location. This should be the name of a
                                +     * Google Cloud zone or region, such as "us-central1".
                                +     *
                                +     * If absent, the client's location will be assumed to be the same as the
                                +     * location of the server the client ends up connected to.
                                +     *
                                +     * Locations are primarily valuable for clients that connect from regions
                                +     * other than the ones that contain the Spanner database.
                                +     * 
                                + * + * string client_location = 10; + * + * @return The clientLocation. + */ + public java.lang.String getClientLocation() { + java.lang.Object ref = clientLocation_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clientLocation_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * If present, the client's current location. This should be the name of a
                                +     * Google Cloud zone or region, such as "us-central1".
                                +     *
                                +     * If absent, the client's location will be assumed to be the same as the
                                +     * location of the server the client ends up connected to.
                                +     *
                                +     * Locations are primarily valuable for clients that connect from regions
                                +     * other than the ones that contain the Spanner database.
                                +     * 
                                + * + * string client_location = 10; + * + * @return The bytes for clientLocation. + */ + public com.google.protobuf.ByteString getClientLocationBytes() { + java.lang.Object ref = clientLocation_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clientLocation_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * If present, the client's current location. This should be the name of a
                                +     * Google Cloud zone or region, such as "us-central1".
                                +     *
                                +     * If absent, the client's location will be assumed to be the same as the
                                +     * location of the server the client ends up connected to.
                                +     *
                                +     * Locations are primarily valuable for clients that connect from regions
                                +     * other than the ones that contain the Spanner database.
                                +     * 
                                + * + * string client_location = 10; + * + * @param value The clientLocation to set. + * @return This builder for chaining. + */ + public Builder setClientLocation(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + clientLocation_ = value; + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If present, the client's current location. This should be the name of a
                                +     * Google Cloud zone or region, such as "us-central1".
                                +     *
                                +     * If absent, the client's location will be assumed to be the same as the
                                +     * location of the server the client ends up connected to.
                                +     *
                                +     * Locations are primarily valuable for clients that connect from regions
                                +     * other than the ones that contain the Spanner database.
                                +     * 
                                + * + * string client_location = 10; + * + * @return This builder for chaining. + */ + public Builder clearClientLocation() { + clientLocation_ = getDefaultInstance().getClientLocation(); + bitField0_ = (bitField0_ & ~0x00000200); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If present, the client's current location. This should be the name of a
                                +     * Google Cloud zone or region, such as "us-central1".
                                +     *
                                +     * If absent, the client's location will be assumed to be the same as the
                                +     * location of the server the client ends up connected to.
                                +     *
                                +     * Locations are primarily valuable for clients that connect from regions
                                +     * other than the ones that contain the Spanner database.
                                +     * 
                                + * + * string client_location = 10; + * + * @param value The bytes for clientLocation to set. + * @return This builder for chaining. + */ + public Builder setClientLocationBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + clientLocation_ = value; + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.RoutingHint) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.RoutingHint) + private static final com.google.spanner.v1.RoutingHint DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.RoutingHint(); + } + + public static com.google.spanner.v1.RoutingHint getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RoutingHint parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.RoutingHint getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RoutingHintOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RoutingHintOrBuilder.java new file mode 100644 index 00000000000..eb685eaa894 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RoutingHintOrBuilder.java @@ -0,0 +1,270 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface RoutingHintOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.RoutingHint) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * A session-scoped unique ID for the operation, computed client-side.
                                +   * Requests with the same `operation_uid` should have a shared 'shape',
                                +   * meaning that some fields are expected to be the same, such as the SQL
                                +   * query, the target table/columns (for reads) etc. Requests with the same
                                +   * `operation_uid` are meant to differ only in fields like keys/key
                                +   * ranges/query parameters, transaction IDs, etc.
                                +   *
                                +   * `operation_uid` must be non-zero for `RoutingHint` to be valid.
                                +   * 
                                + * + * uint64 operation_uid = 1; + * + * @return The operationUid. + */ + long getOperationUid(); + + /** + * + * + *
                                +   * The database ID of the database being accessed, see
                                +   * `CacheUpdate.database_id`. Should match the cache entries that were used
                                +   * to generate the rest of the fields in this `RoutingHint`.
                                +   * 
                                + * + * uint64 database_id = 2; + * + * @return The databaseId. + */ + long getDatabaseId(); + + /** + * + * + *
                                +   * The schema generation of the recipe that was used to generate `key` and
                                +   * `limit_key`. See also `RecipeList.schema_generation`.
                                +   * 
                                + * + * bytes schema_generation = 3; + * + * @return The schemaGeneration. + */ + com.google.protobuf.ByteString getSchemaGeneration(); + + /** + * + * + *
                                +   * The key / key range that this request accesses. For operations that
                                +   * access a single key, `key` should be set and `limit_key` should be empty.
                                +   * For operations that access a key range, `key` and `limit_key` should both
                                +   * be set, to the inclusive start and exclusive end of the range respectively.
                                +   *
                                +   * The keys are encoded in "sortable string format" (ssformat), using a
                                +   * `KeyRecipe` that is appropriate for the request. See `KeyRecipe` for more
                                +   * details.
                                +   * 
                                + * + * bytes key = 4; + * + * @return The key. + */ + com.google.protobuf.ByteString getKey(); + + /** + * + * + *
                                +   * If this request targets a key range, this is the exclusive end of the
                                +   * range. See `key` for more details.
                                +   * 
                                + * + * bytes limit_key = 5; + * + * @return The limitKey. + */ + com.google.protobuf.ByteString getLimitKey(); + + /** + * + * + *
                                +   * The group UID of the group that the client believes serves the range
                                +   * defined by `key` and `limit_key`. See `Range.group_uid` for more details.
                                +   * 
                                + * + * uint64 group_uid = 6; + * + * @return The groupUid. + */ + long getGroupUid(); + + /** + * + * + *
                                +   * The split ID of the split that the client believes contains the range
                                +   * defined by `key` and `limit_key`. See `Range.split_id` for more details.
                                +   * 
                                + * + * uint64 split_id = 7; + * + * @return The splitId. + */ + long getSplitId(); + + /** + * + * + *
                                +   * The tablet UID of the tablet from group `group_uid` that the client
                                +   * believes is best to serve this request. See `Group.local_tablet_uids` and
                                +   * `Group.leader_tablet_uid`.
                                +   * 
                                + * + * uint64 tablet_uid = 8; + * + * @return The tabletUid. + */ + long getTabletUid(); + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + java.util.List getSkippedTabletUidList(); + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + com.google.spanner.v1.RoutingHint.SkippedTablet getSkippedTabletUid(int index); + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + int getSkippedTabletUidCount(); + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + java.util.List + getSkippedTabletUidOrBuilderList(); + + /** + * + * + *
                                +   * If the client had multiple options for tablet selection, and some of its
                                +   * first choices were unhealthy (e.g., the server is unreachable, or
                                +   * `Tablet.skip` is true), this field will contain the tablet UIDs of those
                                +   * tablets, with their incarnations. The server may include a `CacheUpdate`
                                +   * with new locations for those tablets.
                                +   * 
                                + * + * repeated .google.spanner.v1.RoutingHint.SkippedTablet skipped_tablet_uid = 9; + */ + com.google.spanner.v1.RoutingHint.SkippedTabletOrBuilder getSkippedTabletUidOrBuilder(int index); + + /** + * + * + *
                                +   * If present, the client's current location. This should be the name of a
                                +   * Google Cloud zone or region, such as "us-central1".
                                +   *
                                +   * If absent, the client's location will be assumed to be the same as the
                                +   * location of the server the client ends up connected to.
                                +   *
                                +   * Locations are primarily valuable for clients that connect from regions
                                +   * other than the ones that contain the Spanner database.
                                +   * 
                                + * + * string client_location = 10; + * + * @return The clientLocation. + */ + java.lang.String getClientLocation(); + + /** + * + * + *
                                +   * If present, the client's current location. This should be the name of a
                                +   * Google Cloud zone or region, such as "us-central1".
                                +   *
                                +   * If absent, the client's location will be assumed to be the same as the
                                +   * location of the server the client ends up connected to.
                                +   *
                                +   * Locations are primarily valuable for clients that connect from regions
                                +   * other than the ones that contain the Spanner database.
                                +   * 
                                + * + * string client_location = 10; + * + * @return The bytes for clientLocation. + */ + com.google.protobuf.ByteString getClientLocationBytes(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java index e4979e05f66..ffddd0a0470 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.Session} */ -public final class Session extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Session extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.Session) SessionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Session"); + } + // Use Session.newBuilder() to construct. - private Session(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Session(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,12 +56,6 @@ private Session() { creatorRole_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Session(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto.internal_static_google_spanner_v1_Session_descriptor; } @@ -66,7 +73,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_Session_fieldAccessorTable @@ -79,6 +86,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -102,6 +110,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -152,17 +161,18 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -176,23 +186,25 @@ 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(); } + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -203,17 +215,18 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -231,17 +244,18 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -262,6 +276,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public static final int CREATE_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -278,6 +293,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public boolean hasCreateTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -294,6 +310,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -311,11 +328,12 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public static final int APPROXIMATE_LAST_USE_TIME_FIELD_NUMBER = 4; private com.google.protobuf.Timestamp approximateLastUseTime_; + /** * * *
                                -   * Output only. The approximate timestamp when the session is last used. It is
                                +   * Output only. The approximate timestamp when the session is last used. It's
                                    * typically earlier than the actual last use time.
                                    * 
                                * @@ -329,11 +347,12 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasApproximateLastUseTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -   * Output only. The approximate timestamp when the session is last used. It is
                                +   * Output only. The approximate timestamp when the session is last used. It's
                                    * typically earlier than the actual last use time.
                                    * 
                                * @@ -349,11 +368,12 @@ public com.google.protobuf.Timestamp getApproximateLastUseTime() { ? com.google.protobuf.Timestamp.getDefaultInstance() : approximateLastUseTime_; } + /** * * *
                                -   * Output only. The approximate timestamp when the session is last used. It is
                                +   * Output only. The approximate timestamp when the session is last used. It's
                                    * typically earlier than the actual last use time.
                                    * 
                                * @@ -372,6 +392,7 @@ public com.google.protobuf.TimestampOrBuilder getApproximateLastUseTimeOrBuilder @SuppressWarnings("serial") private volatile java.lang.Object creatorRole_ = ""; + /** * * @@ -395,6 +416,7 @@ public java.lang.String getCreatorRole() { return s; } } + /** * * @@ -421,17 +443,19 @@ public com.google.protobuf.ByteString getCreatorRoleBytes() { public static final int MULTIPLEXED_FIELD_NUMBER = 6; private boolean multiplexed_ = false; + /** * * *
                                -   * Optional. If true, specifies a multiplexed session. A multiplexed session
                                -   * may be used for multiple, concurrent read-only operations but can not be
                                -   * used for read-write transactions, partitioned reads, or partitioned
                                -   * queries. Multiplexed sessions can be created via
                                -   * [CreateSession][google.spanner.v1.Spanner.CreateSession] but not via
                                -   * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions].
                                -   * Multiplexed sessions may not be deleted nor listed.
                                +   * Optional. If `true`, specifies a multiplexed session. Use a multiplexed
                                +   * session for multiple, concurrent operations including any combination of
                                +   * read-only and read-write transactions. Use
                                +   * [`sessions.create`][google.spanner.v1.Spanner.CreateSession] to create
                                +   * multiplexed sessions. Don't use
                                +   * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions] to
                                +   * create a multiplexed session. You can't delete or list multiplexed
                                +   * sessions.
                                    * 
                                * * bool multiplexed = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -457,10 +481,10 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } - com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + com.google.protobuf.GeneratedMessage.serializeStringMapTo( output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 2); if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(3, getCreateTime()); @@ -468,8 +492,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(4, getApproximateLastUseTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(creatorRole_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, creatorRole_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(creatorRole_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, creatorRole_); } if (multiplexed_ != false) { output.writeBool(6, multiplexed_); @@ -483,8 +507,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } for (java.util.Map.Entry entry : internalGetLabels().getMap().entrySet()) { @@ -503,8 +527,8 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getApproximateLastUseTime()); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(creatorRole_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, creatorRole_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(creatorRole_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, creatorRole_); } if (multiplexed_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, multiplexed_); @@ -606,38 +630,38 @@ public static com.google.spanner.v1.Session parseFrom( public static com.google.spanner.v1.Session parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Session parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Session parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.Session parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Session parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Session parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -660,10 +684,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -673,7 +698,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.Session} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.Session) com.google.spanner.v1.SessionOrBuilder { @@ -705,7 +730,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFi } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_Session_fieldAccessorTable @@ -718,15 +743,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getCreateTimeFieldBuilder(); - getApproximateLastUseTimeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetCreateTimeFieldBuilder(); + internalGetApproximateLastUseTimeFieldBuilder(); } } @@ -811,39 +836,6 @@ private void buildPartial0(com.google.spanner.v1.Session result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.Session) { @@ -923,14 +915,16 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getCreateTimeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetCreateTimeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 case 34: { input.readMessage( - getApproximateLastUseTimeFieldBuilder().getBuilder(), extensionRegistry); + internalGetApproximateLastUseTimeFieldBuilder().getBuilder(), + extensionRegistry); bitField0_ |= 0x00000008; break; } // case 34 @@ -966,6 +960,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -988,6 +983,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1010,6 +1006,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1031,6 +1028,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1048,6 +1046,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -1096,17 +1095,18 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * *
                                      * The labels for the session.
                                      *
                                -     *  * Label keys must be between 1 and 63 characters long and must conform to
                                -     *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -     *  * Label values must be between 0 and 63 characters long and must conform
                                -     *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -     *  * No more than 64 labels can be associated with a given session.
                                +     * * Label keys must be between 1 and 63 characters long and must conform to
                                +     * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +     * * Label values must be between 0 and 63 characters long and must conform
                                +     * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +     * * No more than 64 labels can be associated with a given session.
                                      *
                                      * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                      * 
                                @@ -1120,23 +1120,25 @@ 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(); } + /** * * *
                                      * The labels for the session.
                                      *
                                -     *  * Label keys must be between 1 and 63 characters long and must conform to
                                -     *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -     *  * Label values must be between 0 and 63 characters long and must conform
                                -     *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -     *  * No more than 64 labels can be associated with a given session.
                                +     * * Label keys must be between 1 and 63 characters long and must conform to
                                +     * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +     * * Label values must be between 0 and 63 characters long and must conform
                                +     * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +     * * No more than 64 labels can be associated with a given session.
                                      *
                                      * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                      * 
                                @@ -1147,17 +1149,18 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * *
                                      * The labels for the session.
                                      *
                                -     *  * Label keys must be between 1 and 63 characters long and must conform to
                                -     *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -     *  * Label values must be between 0 and 63 characters long and must conform
                                -     *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -     *  * No more than 64 labels can be associated with a given session.
                                +     * * Label keys must be between 1 and 63 characters long and must conform to
                                +     * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +     * * Label values must be between 0 and 63 characters long and must conform
                                +     * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +     * * No more than 64 labels can be associated with a given session.
                                      *
                                      * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                      * 
                                @@ -1175,17 +1178,18 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * *
                                      * The labels for the session.
                                      *
                                -     *  * Label keys must be between 1 and 63 characters long and must conform to
                                -     *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -     *  * Label values must be between 0 and 63 characters long and must conform
                                -     *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -     *  * No more than 64 labels can be associated with a given session.
                                +     * * Label keys must be between 1 and 63 characters long and must conform to
                                +     * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +     * * Label values must be between 0 and 63 characters long and must conform
                                +     * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +     * * No more than 64 labels can be associated with a given session.
                                      *
                                      * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                      * 
                                @@ -1209,17 +1213,18 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * *
                                      * The labels for the session.
                                      *
                                -     *  * Label keys must be between 1 and 63 characters long and must conform to
                                -     *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -     *  * Label values must be between 0 and 63 characters long and must conform
                                -     *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -     *  * No more than 64 labels can be associated with a given session.
                                +     * * Label keys must be between 1 and 63 characters long and must conform to
                                +     * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +     * * Label values must be between 0 and 63 characters long and must conform
                                +     * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +     * * No more than 64 labels can be associated with a given session.
                                      *
                                      * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                      * 
                                @@ -1233,23 +1238,25 @@ 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(); } + /** * * *
                                      * The labels for the session.
                                      *
                                -     *  * Label keys must be between 1 and 63 characters long and must conform to
                                -     *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -     *  * Label values must be between 0 and 63 characters long and must conform
                                -     *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -     *  * No more than 64 labels can be associated with a given session.
                                +     * * Label keys must be between 1 and 63 characters long and must conform to
                                +     * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +     * * Label values must be between 0 and 63 characters long and must conform
                                +     * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +     * * No more than 64 labels can be associated with a given session.
                                      *
                                      * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                      * 
                                @@ -1267,17 +1274,18 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000002; return this; } + /** * * *
                                      * The labels for the session.
                                      *
                                -     *  * Label keys must be between 1 and 63 characters long and must conform to
                                -     *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -     *  * Label values must be between 0 and 63 characters long and must conform
                                -     *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -     *  * No more than 64 labels can be associated with a given session.
                                +     * * Label keys must be between 1 and 63 characters long and must conform to
                                +     * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +     * * Label values must be between 0 and 63 characters long and must conform
                                +     * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +     * * No more than 64 labels can be associated with a given session.
                                      *
                                      * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                      * 
                                @@ -1291,11 +1299,12 @@ public Builder putAllLabels(java.util.Map va } private com.google.protobuf.Timestamp createTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -1312,6 +1321,7 @@ public Builder putAllLabels(java.util.Map va public boolean hasCreateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1334,6 +1344,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -1358,6 +1369,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1379,6 +1391,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1408,6 +1421,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1429,6 +1443,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -1443,8 +1458,9 @@ public Builder clearCreateTime() { public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCreateTimeFieldBuilder().getBuilder(); + return internalGetCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -1465,6 +1481,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -1476,14 +1493,14 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * .google.protobuf.Timestamp create_time = 3 [(.google.api.field_behavior) = OUTPUT_ONLY]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreateTimeFieldBuilder() { + internalGetCreateTimeFieldBuilder() { if (createTimeBuilder_ == null) { createTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1494,16 +1511,17 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { } private com.google.protobuf.Timestamp approximateLastUseTime_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> approximateLastUseTimeBuilder_; + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1516,11 +1534,12 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasApproximateLastUseTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1539,11 +1558,12 @@ public com.google.protobuf.Timestamp getApproximateLastUseTime() { return approximateLastUseTimeBuilder_.getMessage(); } } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1564,11 +1584,12 @@ public Builder setApproximateLastUseTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1587,11 +1608,12 @@ public Builder setApproximateLastUseTime( onChanged(); return this; } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1617,11 +1639,12 @@ public Builder mergeApproximateLastUseTime(com.google.protobuf.Timestamp value) } return this; } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1639,11 +1662,12 @@ public Builder clearApproximateLastUseTime() { onChanged(); return this; } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1654,13 +1678,14 @@ public Builder clearApproximateLastUseTime() { public com.google.protobuf.Timestamp.Builder getApproximateLastUseTimeBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getApproximateLastUseTimeFieldBuilder().getBuilder(); + return internalGetApproximateLastUseTimeFieldBuilder().getBuilder(); } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1677,11 +1702,12 @@ public com.google.protobuf.TimestampOrBuilder getApproximateLastUseTimeOrBuilder : approximateLastUseTime_; } } + /** * * *
                                -     * Output only. The approximate timestamp when the session is last used. It is
                                +     * Output only. The approximate timestamp when the session is last used. It's
                                      * typically earlier than the actual last use time.
                                      * 
                                * @@ -1689,14 +1715,14 @@ public com.google.protobuf.TimestampOrBuilder getApproximateLastUseTimeOrBuilder * .google.protobuf.Timestamp approximate_last_use_time = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; *
                                */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getApproximateLastUseTimeFieldBuilder() { + internalGetApproximateLastUseTimeFieldBuilder() { if (approximateLastUseTimeBuilder_ == null) { approximateLastUseTimeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -1707,6 +1733,7 @@ public com.google.protobuf.TimestampOrBuilder getApproximateLastUseTimeOrBuilder } private java.lang.Object creatorRole_ = ""; + /** * * @@ -1729,6 +1756,7 @@ public java.lang.String getCreatorRole() { return (java.lang.String) ref; } } + /** * * @@ -1751,6 +1779,7 @@ public com.google.protobuf.ByteString getCreatorRoleBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1772,6 +1801,7 @@ public Builder setCreatorRole(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1789,6 +1819,7 @@ public Builder clearCreatorRole() { onChanged(); return this; } + /** * * @@ -1813,17 +1844,19 @@ public Builder setCreatorRoleBytes(com.google.protobuf.ByteString value) { } private boolean multiplexed_; + /** * * *
                                -     * Optional. If true, specifies a multiplexed session. A multiplexed session
                                -     * may be used for multiple, concurrent read-only operations but can not be
                                -     * used for read-write transactions, partitioned reads, or partitioned
                                -     * queries. Multiplexed sessions can be created via
                                -     * [CreateSession][google.spanner.v1.Spanner.CreateSession] but not via
                                -     * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions].
                                -     * Multiplexed sessions may not be deleted nor listed.
                                +     * Optional. If `true`, specifies a multiplexed session. Use a multiplexed
                                +     * session for multiple, concurrent operations including any combination of
                                +     * read-only and read-write transactions. Use
                                +     * [`sessions.create`][google.spanner.v1.Spanner.CreateSession] to create
                                +     * multiplexed sessions. Don't use
                                +     * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions] to
                                +     * create a multiplexed session. You can't delete or list multiplexed
                                +     * sessions.
                                      * 
                                * * bool multiplexed = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -1834,17 +1867,19 @@ public Builder setCreatorRoleBytes(com.google.protobuf.ByteString value) { public boolean getMultiplexed() { return multiplexed_; } + /** * * *
                                -     * Optional. If true, specifies a multiplexed session. A multiplexed session
                                -     * may be used for multiple, concurrent read-only operations but can not be
                                -     * used for read-write transactions, partitioned reads, or partitioned
                                -     * queries. Multiplexed sessions can be created via
                                -     * [CreateSession][google.spanner.v1.Spanner.CreateSession] but not via
                                -     * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions].
                                -     * Multiplexed sessions may not be deleted nor listed.
                                +     * Optional. If `true`, specifies a multiplexed session. Use a multiplexed
                                +     * session for multiple, concurrent operations including any combination of
                                +     * read-only and read-write transactions. Use
                                +     * [`sessions.create`][google.spanner.v1.Spanner.CreateSession] to create
                                +     * multiplexed sessions. Don't use
                                +     * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions] to
                                +     * create a multiplexed session. You can't delete or list multiplexed
                                +     * sessions.
                                      * 
                                * * bool multiplexed = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -1859,17 +1894,19 @@ public Builder setMultiplexed(boolean value) { onChanged(); return this; } + /** * * *
                                -     * Optional. If true, specifies a multiplexed session. A multiplexed session
                                -     * may be used for multiple, concurrent read-only operations but can not be
                                -     * used for read-write transactions, partitioned reads, or partitioned
                                -     * queries. Multiplexed sessions can be created via
                                -     * [CreateSession][google.spanner.v1.Spanner.CreateSession] but not via
                                -     * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions].
                                -     * Multiplexed sessions may not be deleted nor listed.
                                +     * Optional. If `true`, specifies a multiplexed session. Use a multiplexed
                                +     * session for multiple, concurrent operations including any combination of
                                +     * read-only and read-write transactions. Use
                                +     * [`sessions.create`][google.spanner.v1.Spanner.CreateSession] to create
                                +     * multiplexed sessions. Don't use
                                +     * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions] to
                                +     * create a multiplexed session. You can't delete or list multiplexed
                                +     * sessions.
                                      * 
                                * * bool multiplexed = 6 [(.google.api.field_behavior) = OPTIONAL]; @@ -1883,17 +1920,6 @@ public Builder clearMultiplexed() { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.Session) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionName.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionName.java index 6fd690eb101..a71cf0eac13 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionName.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionName.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 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-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java index cefd62dc560..fc02633e834 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface SessionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.Session) @@ -36,6 +38,7 @@ public interface SessionOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -55,11 +58,11 @@ public interface SessionOrBuilder *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -67,17 +70,18 @@ public interface SessionOrBuilder * map<string, string> labels = 2; */ int getLabelsCount(); + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -85,20 +89,22 @@ public interface SessionOrBuilder * map<string, string> labels = 2; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -106,17 +112,18 @@ public interface SessionOrBuilder * map<string, string> labels = 2; */ java.util.Map getLabelsMap(); + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -128,17 +135,18 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * *
                                    * The labels for the session.
                                    *
                                -   *  * Label keys must be between 1 and 63 characters long and must conform to
                                -   *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                -   *  * Label values must be between 0 and 63 characters long and must conform
                                -   *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                -   *  * No more than 64 labels can be associated with a given session.
                                +   * * Label keys must be between 1 and 63 characters long and must conform to
                                +   * the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
                                +   * * Label values must be between 0 and 63 characters long and must conform
                                +   * to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
                                +   * * No more than 64 labels can be associated with a given session.
                                    *
                                    * See https://goo.gl/xmQnxf for more information on and examples of labels.
                                    * 
                                @@ -160,6 +168,7 @@ java.lang.String getLabelsOrDefault( * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -173,6 +182,7 @@ java.lang.String getLabelsOrDefault( * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -189,7 +199,7 @@ java.lang.String getLabelsOrDefault( * * *
                                -   * Output only. The approximate timestamp when the session is last used. It is
                                +   * Output only. The approximate timestamp when the session is last used. It's
                                    * typically earlier than the actual last use time.
                                    * 
                                * @@ -200,11 +210,12 @@ java.lang.String getLabelsOrDefault( * @return Whether the approximateLastUseTime field is set. */ boolean hasApproximateLastUseTime(); + /** * * *
                                -   * Output only. The approximate timestamp when the session is last used. It is
                                +   * Output only. The approximate timestamp when the session is last used. It's
                                    * typically earlier than the actual last use time.
                                    * 
                                * @@ -215,11 +226,12 @@ java.lang.String getLabelsOrDefault( * @return The approximateLastUseTime. */ com.google.protobuf.Timestamp getApproximateLastUseTime(); + /** * * *
                                -   * Output only. The approximate timestamp when the session is last used. It is
                                +   * Output only. The approximate timestamp when the session is last used. It's
                                    * typically earlier than the actual last use time.
                                    * 
                                * @@ -241,6 +253,7 @@ java.lang.String getLabelsOrDefault( * @return The creatorRole. */ java.lang.String getCreatorRole(); + /** * * @@ -258,13 +271,14 @@ java.lang.String getLabelsOrDefault( * * *
                                -   * Optional. If true, specifies a multiplexed session. A multiplexed session
                                -   * may be used for multiple, concurrent read-only operations but can not be
                                -   * used for read-write transactions, partitioned reads, or partitioned
                                -   * queries. Multiplexed sessions can be created via
                                -   * [CreateSession][google.spanner.v1.Spanner.CreateSession] but not via
                                -   * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions].
                                -   * Multiplexed sessions may not be deleted nor listed.
                                +   * Optional. If `true`, specifies a multiplexed session. Use a multiplexed
                                +   * session for multiple, concurrent operations including any combination of
                                +   * read-only and read-write transactions. Use
                                +   * [`sessions.create`][google.spanner.v1.Spanner.CreateSession] to create
                                +   * multiplexed sessions. Don't use
                                +   * [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions] to
                                +   * create a multiplexed session. You can't delete or list multiplexed
                                +   * sessions.
                                    * 
                                * * bool multiplexed = 6 [(.google.api.field_behavior) = OPTIONAL]; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java index 0be619a96af..e69777ee73f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/spanner.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class SpannerProto { +@com.google.protobuf.Generated +public final class SpannerProto extends com.google.protobuf.GeneratedFile { private SpannerProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SpannerProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,139 +42,147 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_CreateSessionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_CreateSessionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BatchCreateSessionsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_BatchCreateSessionsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BatchCreateSessionsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_BatchCreateSessionsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Session_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Session_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Session_LabelsEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Session_LabelsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_GetSessionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_GetSessionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ListSessionsRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ListSessionsRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ListSessionsResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ListSessionsResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_DeleteSessionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_DeleteSessionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_RequestOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_RequestOptions_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_RequestOptions_ClientContext_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_RequestOptions_ClientContext_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_RequestOptions_ClientContext_SecureContextEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spanner_v1_RequestOptions_ClientContext_SecureContextEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_DirectedReadOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_DirectedReadOptions_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_DirectedReadOptions_ReplicaSelection_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_DirectedReadOptions_ReplicaSelection_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_DirectedReadOptions_IncludeReplicas_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_DirectedReadOptions_IncludeReplicas_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_DirectedReadOptions_ExcludeReplicas_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_DirectedReadOptions_ExcludeReplicas_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ExecuteSqlRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ExecuteSqlRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ExecuteSqlRequest_QueryOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ExecuteSqlRequest_QueryOptions_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ExecuteSqlRequest_ParamTypesEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ExecuteSqlRequest_ParamTypesEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ExecuteBatchDmlRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ExecuteBatchDmlRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_ParamTypesEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_ParamTypesEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ExecuteBatchDmlResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ExecuteBatchDmlResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PartitionOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PartitionOptions_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PartitionQueryRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PartitionQueryRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PartitionQueryRequest_ParamTypesEntry_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PartitionQueryRequest_ParamTypesEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PartitionReadRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PartitionReadRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Partition_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Partition_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_PartitionResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_PartitionResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_ReadRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_ReadRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BeginTransactionRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_BeginTransactionRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_CommitRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_CommitRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_RollbackRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_RollbackRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BatchWriteRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BatchWriteRequest_MutationGroup_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_BatchWriteRequest_MutationGroup_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BatchWriteResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -173,7 +193,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n\037google/spanner/v1/spanner.proto\022\021googl" + "\n" + + "\037google/spanner/v1/spanner.proto\022\021googl" + "e.spanner.v1\032\'google/spanner/v1/commit_r" + "esponse.proto\032\034google/api/annotations.pr" + "oto\032\027google/api/client.proto\032\037google/api" @@ -181,265 +202,314 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "ce.proto\032\036google/protobuf/duration.proto" + "\032\033google/protobuf/empty.proto\032\034google/pr" + "otobuf/struct.proto\032\037google/protobuf/tim" - + "estamp.proto\032\027google/rpc/status.proto\032\034g" - + "oogle/spanner/v1/keys.proto\032 google/span" - + "ner/v1/mutation.proto\032\"google/spanner/v1" - + "/result_set.proto\032#google/spanner/v1/tra" - + "nsaction.proto\032\034google/spanner/v1/type.p" - + "roto\"\203\001\n\024CreateSessionRequest\0229\n\010databas" - + "e\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/" - + "Database\0220\n\007session\030\002 \001(\0132\032.google.spann" - + "er.v1.SessionB\003\340A\002\"\251\001\n\032BatchCreateSessio" - + "nsRequest\0229\n\010database\030\001 \001(\tB\'\340A\002\372A!\n\037spa" - + "nner.googleapis.com/Database\0224\n\020session_" - + "template\030\002 \001(\0132\032.google.spanner.v1.Sessi" - + "on\022\032\n\rsession_count\030\003 \001(\005B\003\340A\002\"J\n\033BatchC" - + "reateSessionsResponse\022+\n\007session\030\001 \003(\0132\032" - + ".google.spanner.v1.Session\"\243\003\n\007Session\022\021" - + "\n\004name\030\001 \001(\tB\003\340A\003\0226\n\006labels\030\002 \003(\0132&.goog" - + "le.spanner.v1.Session.LabelsEntry\0224\n\013cre" - + "ate_time\030\003 \001(\0132\032.google.protobuf.Timesta" - + "mpB\003\340A\003\022B\n\031approximate_last_use_time\030\004 \001" - + "(\0132\032.google.protobuf.TimestampB\003\340A\003\022\024\n\014c" - + "reator_role\030\005 \001(\t\022\030\n\013multiplexed\030\006 \001(\010B\003" - + "\340A\001\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value" - + "\030\002 \001(\t:\0028\001:t\352Aq\n\036spanner.googleapis.com/" - + "Session\022Oprojects/{project}/instances/{i" - + "nstance}/databases/{database}/sessions/{" - + "session}\"I\n\021GetSessionRequest\0224\n\004name\030\001 " - + "\001(\tB&\340A\002\372A \n\036spanner.googleapis.com/Sess" - + "ion\"\207\001\n\023ListSessionsRequest\0229\n\010database\030" - + "\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Da" - + "tabase\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030" - + "\003 \001(\t\022\016\n\006filter\030\004 \001(\t\"]\n\024ListSessionsRes" - + "ponse\022,\n\010sessions\030\001 \003(\0132\032.google.spanner" - + ".v1.Session\022\027\n\017next_page_token\030\002 \001(\t\"L\n\024" - + "DeleteSessionRequest\0224\n\004name\030\001 \001(\tB&\340A\002\372" - + "A \n\036spanner.googleapis.com/Session\"\334\001\n\016R" - + "equestOptions\022<\n\010priority\030\001 \001(\0162*.google" - + ".spanner.v1.RequestOptions.Priority\022\023\n\013r" - + "equest_tag\030\002 \001(\t\022\027\n\017transaction_tag\030\003 \001(" - + "\t\"^\n\010Priority\022\030\n\024PRIORITY_UNSPECIFIED\020\000\022" - + "\020\n\014PRIORITY_LOW\020\001\022\023\n\017PRIORITY_MEDIUM\020\002\022\021" - + "\n\rPRIORITY_HIGH\020\003\"\352\004\n\023DirectedReadOption" - + "s\022R\n\020include_replicas\030\001 \001(\01326.google.spa" - + "nner.v1.DirectedReadOptions.IncludeRepli" - + "casH\000\022R\n\020exclude_replicas\030\002 \001(\01326.google" - + ".spanner.v1.DirectedReadOptions.ExcludeR" - + "eplicasH\000\032\255\001\n\020ReplicaSelection\022\020\n\010locati" - + "on\030\001 \001(\t\022J\n\004type\030\002 \001(\0162<.google.spanner." - + "v1.DirectedReadOptions.ReplicaSelection." - + "Type\";\n\004Type\022\024\n\020TYPE_UNSPECIFIED\020\000\022\016\n\nRE" - + "AD_WRITE\020\001\022\r\n\tREAD_ONLY\020\002\032\206\001\n\017IncludeRep" - + "licas\022S\n\022replica_selections\030\001 \003(\01327.goog" - + "le.spanner.v1.DirectedReadOptions.Replic" - + "aSelection\022\036\n\026auto_failover_disabled\030\002 \001" - + "(\010\032f\n\017ExcludeReplicas\022S\n\022replica_selecti" - + "ons\030\001 \003(\01327.google.spanner.v1.DirectedRe" - + "adOptions.ReplicaSelectionB\n\n\010replicas\"\215" - + "\007\n\021ExecuteSqlRequest\0227\n\007session\030\001 \001(\tB&\340" - + "A\002\372A \n\036spanner.googleapis.com/Session\022;\n" - + "\013transaction\030\002 \001(\0132&.google.spanner.v1.T" - + "ransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n\006" - + "params\030\004 \001(\0132\027.google.protobuf.Struct\022I\n" - + "\013param_types\030\005 \003(\01324.google.spanner.v1.E" - + "xecuteSqlRequest.ParamTypesEntry\022\024\n\014resu" - + "me_token\030\006 \001(\014\022B\n\nquery_mode\030\007 \001(\0162..goo" - + "gle.spanner.v1.ExecuteSqlRequest.QueryMo" - + "de\022\027\n\017partition_token\030\010 \001(\014\022\r\n\005seqno\030\t \001" - + "(\003\022H\n\rquery_options\030\n \001(\01321.google.spann" - + "er.v1.ExecuteSqlRequest.QueryOptions\022:\n\017" - + "request_options\030\013 \001(\0132!.google.spanner.v" - + "1.RequestOptions\022E\n\025directed_read_option" - + "s\030\017 \001(\0132&.google.spanner.v1.DirectedRead" - + "Options\022\032\n\022data_boost_enabled\030\020 \001(\010\022\033\n\016l" - + "ast_statement\030\021 \001(\010B\003\340A\001\032O\n\014QueryOptions" - + "\022\031\n\021optimizer_version\030\001 \001(\t\022$\n\034optimizer" - + "_statistics_package\030\002 \001(\t\032J\n\017ParamTypesE" - + "ntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.googl" - + "e.spanner.v1.Type:\0028\001\"W\n\tQueryMode\022\n\n\006NO" - + "RMAL\020\000\022\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002\022\016\n\nWITH_ST" - + "ATS\020\003\022\027\n\023WITH_PLAN_AND_STATS\020\004\"\276\004\n\026Execu" - + "teBatchDmlRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372" - + "A \n\036spanner.googleapis.com/Session\022@\n\013tr" - + "ansaction\030\002 \001(\0132&.google.spanner.v1.Tran" - + "sactionSelectorB\003\340A\002\022L\n\nstatements\030\003 \003(\013" - + "23.google.spanner.v1.ExecuteBatchDmlRequ" - + "est.StatementB\003\340A\002\022\022\n\005seqno\030\004 \001(\003B\003\340A\002\022:" - + "\n\017request_options\030\005 \001(\0132!.google.spanner" - + ".v1.RequestOptions\022\034\n\017last_statements\030\006 " - + "\001(\010B\003\340A\001\032\354\001\n\tStatement\022\020\n\003sql\030\001 \001(\tB\003\340A\002" - + "\022\'\n\006params\030\002 \001(\0132\027.google.protobuf.Struc" - + "t\022X\n\013param_types\030\003 \003(\0132C.google.spanner." - + "v1.ExecuteBatchDmlRequest.Statement.Para" - + "mTypesEntry\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 " - + "\001(\t\022&\n\005value\030\002 \001(\0132\027.google.spanner.v1.T" - + "ype:\0028\001\"\303\001\n\027ExecuteBatchDmlResponse\0221\n\013r" - + "esult_sets\030\001 \003(\0132\034.google.spanner.v1.Res" - + "ultSet\022\"\n\006status\030\002 \001(\0132\022.google.rpc.Stat" - + "us\022Q\n\017precommit_token\030\003 \001(\01323.google.spa" - + "nner.v1.MultiplexedSessionPrecommitToken" - + "B\003\340A\001\"H\n\020PartitionOptions\022\034\n\024partition_s" - + "ize_bytes\030\001 \001(\003\022\026\n\016max_partitions\030\002 \001(\003\"" - + "\243\003\n\025PartitionQueryRequest\0227\n\007session\030\001 \001" - + "(\tB&\340A\002\372A \n\036spanner.googleapis.com/Sessi" - + "on\022;\n\013transaction\030\002 \001(\0132&.google.spanner" - + ".v1.TransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A" - + "\002\022\'\n\006params\030\004 \001(\0132\027.google.protobuf.Stru" - + "ct\022M\n\013param_types\030\005 \003(\01328.google.spanner" - + ".v1.PartitionQueryRequest.ParamTypesEntr" - + "y\022>\n\021partition_options\030\006 \001(\0132#.google.sp" - + "anner.v1.PartitionOptions\032J\n\017ParamTypesE" - + "ntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.googl" - + "e.spanner.v1.Type:\0028\001\"\261\002\n\024PartitionReadR" - + "equest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner" - + ".googleapis.com/Session\022;\n\013transaction\030\002" - + " \001(\0132&.google.spanner.v1.TransactionSele" - + "ctor\022\022\n\005table\030\003 \001(\tB\003\340A\002\022\r\n\005index\030\004 \001(\t\022" - + "\017\n\007columns\030\005 \003(\t\022/\n\007key_set\030\006 \001(\0132\031.goog" - + "le.spanner.v1.KeySetB\003\340A\002\022>\n\021partition_o" - + "ptions\030\t \001(\0132#.google.spanner.v1.Partiti" - + "onOptions\"$\n\tPartition\022\027\n\017partition_toke" - + "n\030\001 \001(\014\"z\n\021PartitionResponse\0220\n\npartitio" - + "ns\030\001 \003(\0132\034.google.spanner.v1.Partition\0223" - + "\n\013transaction\030\002 \001(\0132\036.google.spanner.v1." - + "Transaction\"\366\005\n\013ReadRequest\0227\n\007session\030\001" - + " \001(\tB&\340A\002\372A \n\036spanner.googleapis.com/Ses" - + "sion\022;\n\013transaction\030\002 \001(\0132&.google.spann" - + "er.v1.TransactionSelector\022\022\n\005table\030\003 \001(\t" - + "B\003\340A\002\022\r\n\005index\030\004 \001(\t\022\024\n\007columns\030\005 \003(\tB\003\340" - + "A\002\022/\n\007key_set\030\006 \001(\0132\031.google.spanner.v1." - + "KeySetB\003\340A\002\022\r\n\005limit\030\010 \001(\003\022\024\n\014resume_tok" - + "en\030\t \001(\014\022\027\n\017partition_token\030\n \001(\014\022:\n\017req" - + "uest_options\030\013 \001(\0132!.google.spanner.v1.R" - + "equestOptions\022E\n\025directed_read_options\030\016" - + " \001(\0132&.google.spanner.v1.DirectedReadOpt" - + "ions\022\032\n\022data_boost_enabled\030\017 \001(\010\022=\n\010orde" - + "r_by\030\020 \001(\0162&.google.spanner.v1.ReadReque" - + "st.OrderByB\003\340A\001\022?\n\tlock_hint\030\021 \001(\0162\'.goo" - + "gle.spanner.v1.ReadRequest.LockHintB\003\340A\001" - + "\"T\n\007OrderBy\022\030\n\024ORDER_BY_UNSPECIFIED\020\000\022\030\n" - + "\024ORDER_BY_PRIMARY_KEY\020\001\022\025\n\021ORDER_BY_NO_O" - + "RDER\020\002\"T\n\010LockHint\022\031\n\025LOCK_HINT_UNSPECIF" - + "IED\020\000\022\024\n\020LOCK_HINT_SHARED\020\001\022\027\n\023LOCK_HINT" - + "_EXCLUSIVE\020\002\"\203\002\n\027BeginTransactionRequest" - + "\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.googl" - + "eapis.com/Session\022;\n\007options\030\002 \001(\0132%.goo" - + "gle.spanner.v1.TransactionOptionsB\003\340A\002\022:" - + "\n\017request_options\030\003 \001(\0132!.google.spanner" - + ".v1.RequestOptions\0226\n\014mutation_key\030\004 \001(\013" - + "2\033.google.spanner.v1.MutationB\003\340A\001\"\320\003\n\rC" - + "ommitRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036s" - + "panner.googleapis.com/Session\022\030\n\016transac" - + "tion_id\030\002 \001(\014H\000\022G\n\026single_use_transactio" - + "n\030\003 \001(\0132%.google.spanner.v1.TransactionO" - + "ptionsH\000\022.\n\tmutations\030\004 \003(\0132\033.google.spa" - + "nner.v1.Mutation\022\033\n\023return_commit_stats\030" - + "\005 \001(\010\0228\n\020max_commit_delay\030\010 \001(\0132\031.google" - + ".protobuf.DurationB\003\340A\001\022:\n\017request_optio" - + "ns\030\006 \001(\0132!.google.spanner.v1.RequestOpti" - + "ons\022Q\n\017precommit_token\030\t \001(\01323.google.sp" - + "anner.v1.MultiplexedSessionPrecommitToke" - + "nB\003\340A\001B\r\n\013transaction\"g\n\017RollbackRequest" - + "\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.googl" - + "eapis.com/Session\022\033\n\016transaction_id\030\002 \001(" - + "\014B\003\340A\002\"\316\002\n\021BatchWriteRequest\0227\n\007session\030" - + "\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.com/Se" - + "ssion\022:\n\017request_options\030\003 \001(\0132!.google." - + "spanner.v1.RequestOptions\022P\n\017mutation_gr" - + "oups\030\004 \003(\01322.google.spanner.v1.BatchWrit" - + "eRequest.MutationGroupB\003\340A\002\022,\n\037exclude_t" - + "xn_from_change_streams\030\005 \001(\010B\003\340A\001\032D\n\rMut" - + "ationGroup\0223\n\tmutations\030\001 \003(\0132\033.google.s" - + "panner.v1.MutationB\003\340A\002\"\177\n\022BatchWriteRes" - + "ponse\022\017\n\007indexes\030\001 \003(\005\022\"\n\006status\030\002 \001(\0132\022" - + ".google.rpc.Status\0224\n\020commit_timestamp\030\003" - + " \001(\0132\032.google.protobuf.Timestamp2\213\030\n\007Spa" - + "nner\022\246\001\n\rCreateSession\022\'.google.spanner." - + "v1.CreateSessionRequest\032\032.google.spanner" - + ".v1.Session\"P\332A\010database\202\323\344\223\002?\":/v1/{dat" - + "abase=projects/*/instances/*/databases/*" - + "}/sessions:\001*\022\340\001\n\023BatchCreateSessions\022-." - + "google.spanner.v1.BatchCreateSessionsReq" - + "uest\032..google.spanner.v1.BatchCreateSess" - + "ionsResponse\"j\332A\026database,session_count\202" - + "\323\344\223\002K\"F/v1/{database=projects/*/instance" - + "s/*/databases/*}/sessions:batchCreate:\001*" - + "\022\227\001\n\nGetSession\022$.google.spanner.v1.GetS" - + "essionRequest\032\032.google.spanner.v1.Sessio" - + "n\"G\332A\004name\202\323\344\223\002:\0228/v1/{name=projects/*/i" - + "nstances/*/databases/*/sessions/*}\022\256\001\n\014L" - + "istSessions\022&.google.spanner.v1.ListSess" - + "ionsRequest\032\'.google.spanner.v1.ListSess" - + "ionsResponse\"M\332A\010database\202\323\344\223\002<\022:/v1/{da" - + "tabase=projects/*/instances/*/databases/" - + "*}/sessions\022\231\001\n\rDeleteSession\022\'.google.s" - + "panner.v1.DeleteSessionRequest\032\026.google." - + "protobuf.Empty\"G\332A\004name\202\323\344\223\002:*8/v1/{name" - + "=projects/*/instances/*/databases/*/sess" - + "ions/*}\022\243\001\n\nExecuteSql\022$.google.spanner." - + "v1.ExecuteSqlRequest\032\034.google.spanner.v1" - + ".ResultSet\"Q\202\323\344\223\002K\"F/v1/{session=project" - + "s/*/instances/*/databases/*/sessions/*}:" - + "executeSql:\001*\022\276\001\n\023ExecuteStreamingSql\022$." - + "google.spanner.v1.ExecuteSqlRequest\032#.go" - + "ogle.spanner.v1.PartialResultSet\"Z\202\323\344\223\002T" - + "\"O/v1/{session=projects/*/instances/*/da" - + "tabases/*/sessions/*}:executeStreamingSq" - + "l:\001*0\001\022\300\001\n\017ExecuteBatchDml\022).google.span" - + "ner.v1.ExecuteBatchDmlRequest\032*.google.s" - + "panner.v1.ExecuteBatchDmlResponse\"V\202\323\344\223\002" - + "P\"K/v1/{session=projects/*/instances/*/d" - + "atabases/*/sessions/*}:executeBatchDml:\001" - + "*\022\221\001\n\004Read\022\036.google.spanner.v1.ReadReque" - + "st\032\034.google.spanner.v1.ResultSet\"K\202\323\344\223\002E" - + "\"@/v1/{session=projects/*/instances/*/da" - + "tabases/*/sessions/*}:read:\001*\022\254\001\n\rStream" - + "ingRead\022\036.google.spanner.v1.ReadRequest\032" - + "#.google.spanner.v1.PartialResultSet\"T\202\323" - + "\344\223\002N\"I/v1/{session=projects/*/instances/" - + "*/databases/*/sessions/*}:streamingRead:" - + "\001*0\001\022\311\001\n\020BeginTransaction\022*.google.spann" - + "er.v1.BeginTransactionRequest\032\036.google.s" - + "panner.v1.Transaction\"i\332A\017session,option" - + "s\202\323\344\223\002Q\"L/v1/{session=projects/*/instanc" - + "es/*/databases/*/sessions/*}:beginTransa" - + "ction:\001*\022\353\001\n\006Commit\022 .google.spanner.v1." - + "CommitRequest\032!.google.spanner.v1.Commit" - + "Response\"\233\001\332A session,transaction_id,mut" - + "ations\332A(session,single_use_transaction," - + "mutations\202\323\344\223\002G\"B/v1/{session=projects/*" - + "/instances/*/databases/*/sessions/*}:com" - + "mit:\001*\022\260\001\n\010Rollback\022\".google.spanner.v1." - + "RollbackRequest\032\026.google.protobuf.Empty\"" - + "h\332A\026session,transaction_id\202\323\344\223\002I\"D/v1/{s" - + "ession=projects/*/instances/*/databases/" - + "*/sessions/*}:rollback:\001*\022\267\001\n\016PartitionQ" - + "uery\022(.google.spanner.v1.PartitionQueryR" - + "equest\032$.google.spanner.v1.PartitionResp" - + "onse\"U\202\323\344\223\002O\"J/v1/{session=projects/*/in" - + "stances/*/databases/*/sessions/*}:partit" - + "ionQuery:\001*\022\264\001\n\rPartitionRead\022\'.google.s" - + "panner.v1.PartitionReadRequest\032$.google." - + "spanner.v1.PartitionResponse\"T\202\323\344\223\002N\"I/v" - + "1/{session=projects/*/instances/*/databa" - + "ses/*/sessions/*}:partitionRead:\001*\022\310\001\n\nB" - + "atchWrite\022$.google.spanner.v1.BatchWrite" - + "Request\032%.google.spanner.v1.BatchWriteRe" - + "sponse\"k\332A\027session,mutation_groups\202\323\344\223\002K" - + "\"F/v1/{session=projects/*/instances/*/da" - + "tabases/*/sessions/*}:batchWrite:\001*0\001\032w\312" - + "A\026spanner.googleapis.com\322A[https://www.g" - + "oogleapis.com/auth/cloud-platform,https:" - + "//www.googleapis.com/auth/spanner.dataB\221" - + "\002\n\025com.google.spanner.v1B\014SpannerProtoP\001" - + "Z5cloud.google.com/go/spanner/apiv1/span" - + "nerpb;spannerpb\252\002\027Google.Cloud.Spanner.V" - + "1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google::Cl" - + "oud::Spanner::V1\352A_\n\037spanner.googleapis." - + "com/Database\022\n" + + "\021partition_options\030\006 \001(\0132#.google.spanner.v1.PartitionOptions\032J\n" + + "\017ParamTypesEntry\022\013\n" + + "\003key\030\001 \001(\t\022&\n" + + "\005value\030\002 \001(\0132\027.google.spanner.v1.Type:\0028\001\"\261\002\n" + + "\024PartitionReadRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n" + + "\036spanner.googleapis.com/Session\022;\n" + + "\013transaction\030\002 \001(\0132&.google.spanner.v1.TransactionSelector\022\022\n" + + "\005table\030\003 \001(\tB\003\340A\002\022\r\n" + + "\005index\030\004 \001(\t\022\017\n" + + "\007columns\030\005 \003(\t\022/\n" + + "\007key_set\030\006 \001(\0132\031.google.spanner.v1.KeySetB\003\340A\002\022>\n" + + "\021partition_options\030\t \001(\0132#.google.spanner.v1.PartitionOptions\"$\n" + + "\tPartition\022\027\n" + + "\017partition_token\030\001 \001(\014\"z\n" + + "\021PartitionResponse\0220\n\n" + + "partitions\030\001 \003(\0132\034.google.spanner.v1.Partition\0223\n" + + "\013transaction\030\002 \001(\0132\036.google.spanner.v1.Transaction\"\261\006\n" + + "\013ReadRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n" + + "\036spanner.googleapis.com/Session\022;\n" + + "\013transaction\030\002 \001(\0132&.google.spanner.v1.TransactionSelector\022\022\n" + + "\005table\030\003 \001(\tB\003\340A\002\022\r\n" + + "\005index\030\004 \001(\t\022\024\n" + + "\007columns\030\005 \003(\tB\003\340A\002\022/\n" + + "\007key_set\030\006 \001(\0132\031.google.spanner.v1.KeySetB\003\340A\002\022\r\n" + + "\005limit\030\010 \001(\003\022\024\n" + + "\014resume_token\030\t \001(\014\022\027\n" + + "\017partition_token\030\n" + + " \001(\014\022:\n" + + "\017request_options\030\013 \001(\0132!.google.spanner.v1.RequestOptions\022E\n" + + "\025directed_read_options\030\016 \001(\0132" + + "&.google.spanner.v1.DirectedReadOptions\022\032\n" + + "\022data_boost_enabled\030\017 \001(\010\022=\n" + + "\010order_by\030\020" + + " \001(\0162&.google.spanner.v1.ReadRequest.OrderByB\003\340A\001\022?\n" + + "\tlock_hint\030\021" + + " \001(\0162\'.google.spanner.v1.ReadRequest.LockHintB\003\340A\001\0229\n" + + "\014routing_hint\030\022" + + " \001(\0132\036.google.spanner.v1.RoutingHintB\003\340A\001\"T\n" + + "\007OrderBy\022\030\n" + + "\024ORDER_BY_UNSPECIFIED\020\000\022\030\n" + + "\024ORDER_BY_PRIMARY_KEY\020\001\022\025\n" + + "\021ORDER_BY_NO_ORDER\020\002\"T\n" + + "\010LockHint\022\031\n" + + "\025LOCK_HINT_UNSPECIFIED\020\000\022\024\n" + + "\020LOCK_HINT_SHARED\020\001\022\027\n" + + "\023LOCK_HINT_EXCLUSIVE\020\002\"\276\002\n" + + "\027BeginTransactionRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n" + + "\036spanner.googleapis.com/Session\022;\n" + + "\007options\030\002" + + " \001(\0132%.google.spanner.v1.TransactionOptionsB\003\340A\002\022:\n" + + "\017request_options\030\003 \001(\0132!.google.spanner.v1.RequestOptions\0226\n" + + "\014mutation_key\030\004" + + " \001(\0132\033.google.spanner.v1.MutationB\003\340A\001\0229\n" + + "\014routing_hint\030\005" + + " \001(\0132\036.google.spanner.v1.RoutingHintB\003\340A\001\"\213\004\n\r" + + "CommitRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n" + + "\036spanner.googleapis.com/Session\022\030\n" + + "\016transaction_id\030\002 \001(\014H\000\022G\n" + + "\026single_use_transaction\030\003 \001(\013" + + "2%.google.spanner.v1.TransactionOptionsH\000\022.\n" + + "\tmutations\030\004 \003(\0132\033.google.spanner.v1.Mutation\022\033\n" + + "\023return_commit_stats\030\005 \001(\010\0228\n" + + "\020max_commit_delay\030\010" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\001\022:\n" + + "\017request_options\030\006 \001(\0132!.google.spanner.v1.RequestOptions\022Q\n" + + "\017precommit_token\030\t \001(\01323.google.spanner.v" + + "1.MultiplexedSessionPrecommitTokenB\003\340A\001\0229\n" + + "\014routing_hint\030\n" + + " \001(\0132\036.google.spanner.v1.RoutingHintB\003\340A\001B\r\n" + + "\013transaction\"g\n" + + "\017RollbackRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n" + + "\036spanner.googleapis.com/Session\022\033\n" + + "\016transaction_id\030\002 \001(\014B\003\340A\002\"\316\002\n" + + "\021BatchWriteRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n" + + "\036spanner.googleapis.com/Session\022:\n" + + "\017request_options\030\003 \001(\0132!.google.spanner.v1.RequestOptions\022P\n" + + "\017mutation_groups\030\004 \003(\01322.google.spanner." + + "v1.BatchWriteRequest.MutationGroupB\003\340A\002\022,\n" + + "\037exclude_txn_from_change_streams\030\005 \001(\010B\003\340A\001\032D\n\r" + + "MutationGroup\0223\n" + + "\tmutations\030\001 \003(\0132\033.google.spanner.v1.MutationB\003\340A\002\"\177\n" + + "\022BatchWriteResponse\022\017\n" + + "\007indexes\030\001 \003(\005\022\"\n" + + "\006status\030\002 \001(\0132\022.google.rpc.Status\0224\n" + + "\020commit_timestamp\030\003 \001(\0132\032.google.protobuf.Timestamp2\213\030\n" + + "\007Spanner\022\246\001\n\r" + + "CreateSession\022\'.google.spanner.v1.CreateSessionRequest\032\032.go" + + "ogle.spanner.v1.Session\"P\332A\010database\202\323\344\223" + + "\002?\":/v1/{database=projects/*/instances/*/databases/*}/sessions:\001*\022\340\001\n" + + "\023BatchCreateSessions\022-.google.spanner.v1.BatchCreat" + + "eSessionsRequest\032..google.spanner.v1.Bat" + + "chCreateSessionsResponse\"j\332A\026database,se" + + "ssion_count\202\323\344\223\002K\"F/v1/{database=project" + + "s/*/instances/*/databases/*}/sessions:batchCreate:\001*\022\227\001\n\n" + + "GetSession\022$.google.spanner.v1.GetSessionRequest\032\032.google.spann" + + "er.v1.Session\"G\332A\004name\202\323\344\223\002:\0228/v1/{name=" + + "projects/*/instances/*/databases/*/sessions/*}\022\256\001\n" + + "\014ListSessions\022&.google.spanner.v1.ListSessionsRequest\032\'.google.spanner" + + ".v1.ListSessionsResponse\"M\332A\010database\202\323\344" + + "\223\002<\022:/v1/{database=projects/*/instances/*/databases/*}/sessions\022\231\001\n\r" + + "DeleteSession\022\'.google.spanner.v1.DeleteSessionReque" + + "st\032\026.google.protobuf.Empty\"G\332A\004name\202\323\344\223\002" + + ":*8/v1/{name=projects/*/instances/*/databases/*/sessions/*}\022\243\001\n\n" + + "ExecuteSql\022$.google.spanner.v1.ExecuteSqlRequest\032\034.googl" + + "e.spanner.v1.ResultSet\"Q\202\323\344\223\002K\"F/v1/{ses" + + "sion=projects/*/instances/*/databases/*/sessions/*}:executeSql:\001*\022\276\001\n" + + "\023ExecuteStreamingSql\022$.google.spanner.v1.ExecuteSql" + + "Request\032#.google.spanner.v1.PartialResul" + + "tSet\"Z\202\323\344\223\002T\"O/v1/{session=projects/*/in" + + "stances/*/databases/*/sessions/*}:executeStreamingSql:\001*0\001\022\300\001\n" + + "\017ExecuteBatchDml\022).google.spanner.v1.ExecuteBatchDmlReques" + + "t\032*.google.spanner.v1.ExecuteBatchDmlRes" + + "ponse\"V\202\323\344\223\002P\"K/v1/{session=projects/*/i" + + "nstances/*/databases/*/sessions/*}:executeBatchDml:\001*\022\221\001\n" + + "\004Read\022\036.google.spanner.v1.ReadRequest\032\034.google.spanner.v1.Resul" + + "tSet\"K\202\323\344\223\002E\"@/v1/{session=projects/*/in" + + "stances/*/databases/*/sessions/*}:read:\001*\022\254\001\n\r" + + "StreamingRead\022\036.google.spanner.v1.ReadRequest\032#.google.spanner.v1.PartialR" + + "esultSet\"T\202\323\344\223\002N\"I/v1/{session=projects/" + + "*/instances/*/databases/*/sessions/*}:streamingRead:\001*0\001\022\311\001\n" + + "\020BeginTransaction\022*.google.spanner.v1.BeginTransactionReques" + + "t\032\036.google.spanner.v1.Transaction\"i\332A\017se" + + "ssion,options\202\323\344\223\002Q\"L/v1/{session=projec" + + "ts/*/instances/*/databases/*/sessions/*}:beginTransaction:\001*\022\353\001\n" + + "\006Commit\022 .google" + + ".spanner.v1.CommitRequest\032!.google.spanner.v1.CommitResponse\"\233\001\332A" + + " session,transaction_id,mutations\332A(session,single_use_" + + "transaction,mutations\202\323\344\223\002G\"B/v1/{sessio" + + "n=projects/*/instances/*/databases/*/sessions/*}:commit:\001*\022\260\001\n" + + "\010Rollback\022\".google.spanner.v1.RollbackRequest\032\026.google.pro" + + "tobuf.Empty\"h\332A\026session,transaction_id\202\323" + + "\344\223\002I\"D/v1/{session=projects/*/instances/" + + "*/databases/*/sessions/*}:rollback:\001*\022\267\001\n" + + "\016PartitionQuery\022(.google.spanner.v1.Par" + + "titionQueryRequest\032$.google.spanner.v1.P" + + "artitionResponse\"U\202\323\344\223\002O\"J/v1/{session=p" + + "rojects/*/instances/*/databases/*/sessions/*}:partitionQuery:\001*\022\264\001\n\r" + + "PartitionRead\022\'.google.spanner.v1.PartitionReadReque" + + "st\032$.google.spanner.v1.PartitionResponse" + + "\"T\202\323\344\223\002N\"I/v1/{session=projects/*/instan" + + "ces/*/databases/*/sessions/*}:partitionRead:\001*\022\310\001\n\n" + + "BatchWrite\022$.google.spanner.v1.BatchWriteRequest\032%.google.spanner.v1." + + "BatchWriteResponse\"k\332A\027session,mutation_" + + "groups\202\323\344\223\002K\"F/v1/{session=projects/*/in" + + "stances/*/databases/*/sessions/*}:batchW" + + "rite:\001*0\001\032w\312A\026spanner.googleapis.com\322A[h" + + "ttps://www.googleapis.com/auth/cloud-pla" + + "tform,https://www.googleapis.com/auth/spanner.dataB\221\002\n" + + "\025com.google.spanner.v1B\014SpannerProtoP\001Z5cloud.google.com/go/spanne" + + "r/apiv1/spannerpb;spannerpb\252\002\027Google.Clo" + + "ud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google::Cloud::Spanner::V1\352A_\n" + + "\037spanner.googleapis.com/Database\022 builder) { + private StructType(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -43,18 +56,12 @@ private StructType() { fields_ = java.util.Collections.emptyList(); } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new StructType(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TypeProto.internal_static_google_spanner_v1_StructType_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TypeProto .internal_static_google_spanner_v1_StructType_fieldAccessorTable @@ -85,6 +92,7 @@ public interface FieldOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -116,6 +124,7 @@ public interface FieldOrBuilder * @return Whether the type field is set. */ boolean hasType(); + /** * * @@ -128,6 +137,7 @@ public interface FieldOrBuilder * @return The type. */ com.google.spanner.v1.Type getType(); + /** * * @@ -139,6 +149,7 @@ public interface FieldOrBuilder */ com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder(); } + /** * * @@ -148,13 +159,24 @@ public interface FieldOrBuilder * * Protobuf type {@code google.spanner.v1.StructType.Field} */ - public static final class Field extends com.google.protobuf.GeneratedMessageV3 + public static final class Field extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.StructType.Field) FieldOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Field"); + } + // Use Field.newBuilder() to construct. - private Field(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Field(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -162,19 +184,13 @@ private Field() { name_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Field(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TypeProto .internal_static_google_spanner_v1_StructType_Field_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TypeProto .internal_static_google_spanner_v1_StructType_Field_fieldAccessorTable @@ -188,6 +204,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -217,6 +234,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -249,6 +267,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int TYPE_FIELD_NUMBER = 2; private com.google.spanner.v1.Type type_; + /** * * @@ -264,6 +283,7 @@ public com.google.protobuf.ByteString getNameBytes() { public boolean hasType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -279,6 +299,7 @@ public boolean hasType() { public com.google.spanner.v1.Type getType() { return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; } + /** * * @@ -307,8 +328,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); } if (((bitField0_ & 0x00000001) != 0)) { output.writeMessage(2, getType()); @@ -322,8 +343,8 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); } if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getType()); @@ -407,38 +428,38 @@ public static com.google.spanner.v1.StructType.Field parseFrom( public static com.google.spanner.v1.StructType.Field parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.StructType.Field parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.StructType.Field parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.StructType.Field parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.StructType.Field parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.StructType.Field parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -461,11 +482,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -475,8 +496,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.StructType.Field} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.StructType.Field) com.google.spanner.v1.StructType.FieldOrBuilder { @@ -486,7 +506,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TypeProto .internal_static_google_spanner_v1_StructType_Field_fieldAccessorTable @@ -500,14 +520,14 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getTypeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTypeFieldBuilder(); } } @@ -568,41 +588,6 @@ private void buildPartial0(com.google.spanner.v1.StructType.Field result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.StructType.Field) { @@ -657,7 +642,7 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 @@ -681,6 +666,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -709,6 +695,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -737,6 +724,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -764,6 +752,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -787,6 +776,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -817,11 +807,12 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private com.google.spanner.v1.Type type_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> typeBuilder_; + /** * * @@ -836,6 +827,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public boolean hasType() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -854,6 +846,7 @@ public com.google.spanner.v1.Type getType() { return typeBuilder_.getMessage(); } } + /** * * @@ -876,6 +869,7 @@ public Builder setType(com.google.spanner.v1.Type value) { onChanged(); return this; } + /** * * @@ -895,6 +889,7 @@ public Builder setType(com.google.spanner.v1.Type.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -922,6 +917,7 @@ public Builder mergeType(com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -941,6 +937,7 @@ public Builder clearType() { onChanged(); return this; } + /** * * @@ -953,8 +950,9 @@ public Builder clearType() { public com.google.spanner.v1.Type.Builder getTypeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getTypeFieldBuilder().getBuilder(); + return internalGetTypeFieldBuilder().getBuilder(); } + /** * * @@ -971,6 +969,7 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { return type_ == null ? com.google.spanner.v1.Type.getDefaultInstance() : type_; } } + /** * * @@ -980,14 +979,14 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { * * .google.spanner.v1.Type type = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> - getTypeFieldBuilder() { + internalGetTypeFieldBuilder() { if (typeBuilder_ == null) { typeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder>( @@ -997,18 +996,6 @@ public com.google.spanner.v1.TypeOrBuilder getTypeOrBuilder() { return typeBuilder_; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.StructType.Field) } @@ -1065,6 +1052,7 @@ public com.google.spanner.v1.StructType.Field getDefaultInstanceForType() { @SuppressWarnings("serial") private java.util.List fields_; + /** * * @@ -1083,6 +1071,7 @@ public com.google.spanner.v1.StructType.Field getDefaultInstanceForType() { public java.util.List getFieldsList() { return fields_; } + /** * * @@ -1102,6 +1091,7 @@ public java.util.List getFieldsList() { getFieldsOrBuilderList() { return fields_; } + /** * * @@ -1120,6 +1110,7 @@ public java.util.List getFieldsList() { public int getFieldsCount() { return fields_.size(); } + /** * * @@ -1138,6 +1129,7 @@ public int getFieldsCount() { public com.google.spanner.v1.StructType.Field getFields(int index) { return fields_.get(index); } + /** * * @@ -1258,38 +1250,38 @@ public static com.google.spanner.v1.StructType parseFrom( public static com.google.spanner.v1.StructType parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.StructType parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.StructType parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.StructType parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.StructType parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.StructType parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1312,10 +1304,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1326,7 +1319,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.StructType} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.StructType) com.google.spanner.v1.StructTypeOrBuilder { @@ -1336,7 +1329,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TypeProto .internal_static_google_spanner_v1_StructType_fieldAccessorTable @@ -1348,7 +1341,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.StructType.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1413,39 +1406,6 @@ private void buildPartial0(com.google.spanner.v1.StructType result) { int from_bitField0_ = bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.StructType) { @@ -1477,8 +1437,8 @@ public Builder mergeFrom(com.google.spanner.v1.StructType other) { fields_ = other.fields_; bitField0_ = (bitField0_ & ~0x00000001); fieldsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getFieldsFieldBuilder() + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetFieldsFieldBuilder() : null; } else { fieldsBuilder_.addAllMessages(other.fields_); @@ -1553,7 +1513,7 @@ private void ensureFieldsIsMutable() { } } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.StructType.Field, com.google.spanner.v1.StructType.Field.Builder, com.google.spanner.v1.StructType.FieldOrBuilder> @@ -1580,6 +1540,7 @@ public java.util.List getFieldsList() { return fieldsBuilder_.getMessageList(); } } + /** * * @@ -1601,6 +1562,7 @@ public int getFieldsCount() { return fieldsBuilder_.getCount(); } } + /** * * @@ -1622,6 +1584,7 @@ public com.google.spanner.v1.StructType.Field getFields(int index) { return fieldsBuilder_.getMessage(index); } } + /** * * @@ -1649,6 +1612,7 @@ public Builder setFields(int index, com.google.spanner.v1.StructType.Field value } return this; } + /** * * @@ -1674,6 +1638,7 @@ public Builder setFields( } return this; } + /** * * @@ -1701,6 +1666,7 @@ public Builder addFields(com.google.spanner.v1.StructType.Field value) { } return this; } + /** * * @@ -1728,6 +1694,7 @@ public Builder addFields(int index, com.google.spanner.v1.StructType.Field value } return this; } + /** * * @@ -1752,6 +1719,7 @@ public Builder addFields(com.google.spanner.v1.StructType.Field.Builder builderF } return this; } + /** * * @@ -1777,6 +1745,7 @@ public Builder addFields( } return this; } + /** * * @@ -1802,6 +1771,7 @@ public Builder addAllFields( } return this; } + /** * * @@ -1826,6 +1796,7 @@ public Builder clearFields() { } return this; } + /** * * @@ -1850,6 +1821,7 @@ public Builder removeFields(int index) { } return this; } + /** * * @@ -1865,8 +1837,9 @@ public Builder removeFields(int index) { * repeated .google.spanner.v1.StructType.Field fields = 1; */ public com.google.spanner.v1.StructType.Field.Builder getFieldsBuilder(int index) { - return getFieldsFieldBuilder().getBuilder(index); + return internalGetFieldsFieldBuilder().getBuilder(index); } + /** * * @@ -1888,6 +1861,7 @@ public com.google.spanner.v1.StructType.FieldOrBuilder getFieldsOrBuilder(int in return fieldsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1910,6 +1884,7 @@ public com.google.spanner.v1.StructType.FieldOrBuilder getFieldsOrBuilder(int in return java.util.Collections.unmodifiableList(fields_); } } + /** * * @@ -1925,9 +1900,10 @@ public com.google.spanner.v1.StructType.FieldOrBuilder getFieldsOrBuilder(int in * repeated .google.spanner.v1.StructType.Field fields = 1; */ public com.google.spanner.v1.StructType.Field.Builder addFieldsBuilder() { - return getFieldsFieldBuilder() + return internalGetFieldsFieldBuilder() .addBuilder(com.google.spanner.v1.StructType.Field.getDefaultInstance()); } + /** * * @@ -1943,9 +1919,10 @@ public com.google.spanner.v1.StructType.Field.Builder addFieldsBuilder() { * repeated .google.spanner.v1.StructType.Field fields = 1; */ public com.google.spanner.v1.StructType.Field.Builder addFieldsBuilder(int index) { - return getFieldsFieldBuilder() + return internalGetFieldsFieldBuilder() .addBuilder(index, com.google.spanner.v1.StructType.Field.getDefaultInstance()); } + /** * * @@ -1961,17 +1938,17 @@ public com.google.spanner.v1.StructType.Field.Builder addFieldsBuilder(int index * repeated .google.spanner.v1.StructType.Field fields = 1; */ public java.util.List getFieldsBuilderList() { - return getFieldsFieldBuilder().getBuilderList(); + return internalGetFieldsFieldBuilder().getBuilderList(); } - private com.google.protobuf.RepeatedFieldBuilderV3< + private com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.StructType.Field, com.google.spanner.v1.StructType.Field.Builder, com.google.spanner.v1.StructType.FieldOrBuilder> - getFieldsFieldBuilder() { + internalGetFieldsFieldBuilder() { if (fieldsBuilder_ == null) { fieldsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< + new com.google.protobuf.RepeatedFieldBuilder< com.google.spanner.v1.StructType.Field, com.google.spanner.v1.StructType.Field.Builder, com.google.spanner.v1.StructType.FieldOrBuilder>( @@ -1981,17 +1958,6 @@ public java.util.List getFieldsB return fieldsBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.StructType) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java index 0f1a899c670..a3f5422bf31 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/type.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface StructTypeOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.StructType) @@ -39,6 +41,7 @@ public interface StructTypeOrBuilder * repeated .google.spanner.v1.StructType.Field fields = 1; */ java.util.List getFieldsList(); + /** * * @@ -54,6 +57,7 @@ public interface StructTypeOrBuilder * repeated .google.spanner.v1.StructType.Field fields = 1; */ com.google.spanner.v1.StructType.Field getFields(int index); + /** * * @@ -69,6 +73,7 @@ public interface StructTypeOrBuilder * repeated .google.spanner.v1.StructType.Field fields = 1; */ int getFieldsCount(); + /** * * @@ -85,6 +90,7 @@ public interface StructTypeOrBuilder */ java.util.List getFieldsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Tablet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Tablet.java new file mode 100644 index 00000000000..5983e78b52b --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Tablet.java @@ -0,0 +1,1673 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +/** + * + * + *
                                + * A `Tablet` represents a single replica of a `Group`. A tablet is served by a
                                + * single server at a time, and can move between servers due to server death or
                                + * simply load balancing.
                                + * 
                                + * + * Protobuf type {@code google.spanner.v1.Tablet} + */ +@com.google.protobuf.Generated +public final class Tablet extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.Tablet) + TabletOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Tablet"); + } + + // Use Tablet.newBuilder() to construct. + private Tablet(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Tablet() { + serverAddress_ = ""; + location_ = ""; + role_ = 0; + incarnation_ = com.google.protobuf.ByteString.EMPTY; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto.internal_static_google_spanner_v1_Tablet_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Tablet_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Tablet.class, com.google.spanner.v1.Tablet.Builder.class); + } + + /** + * + * + *
                                +   * Indicates the role of the tablet.
                                +   * 
                                + * + * Protobuf enum {@code google.spanner.v1.Tablet.Role} + */ + public enum Role implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * ROLE_UNSPECIFIED = 0; + */ + ROLE_UNSPECIFIED(0), + /** + * + * + *
                                +     * The tablet can perform reads and (if elected leader) writes.
                                +     * 
                                + * + * READ_WRITE = 1; + */ + READ_WRITE(1), + /** + * + * + *
                                +     * The tablet can only perform reads.
                                +     * 
                                + * + * READ_ONLY = 2; + */ + READ_ONLY(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Role"); + } + + /** + * + * + *
                                +     * Not specified.
                                +     * 
                                + * + * ROLE_UNSPECIFIED = 0; + */ + public static final int ROLE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +     * The tablet can perform reads and (if elected leader) writes.
                                +     * 
                                + * + * READ_WRITE = 1; + */ + public static final int READ_WRITE_VALUE = 1; + + /** + * + * + *
                                +     * The tablet can only perform reads.
                                +     * 
                                + * + * READ_ONLY = 2; + */ + public static final int READ_ONLY_VALUE = 2; + + 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 Role 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 Role forNumber(int value) { + switch (value) { + case 0: + return ROLE_UNSPECIFIED; + case 1: + return READ_WRITE; + case 2: + return READ_ONLY; + 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 Role findValueByNumber(int number) { + return Role.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.Tablet.getDescriptor().getEnumTypes().get(0); + } + + private static final Role[] VALUES = values(); + + public static Role 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 Role(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.Tablet.Role) + } + + public static final int TABLET_UID_FIELD_NUMBER = 1; + private long tabletUid_ = 0L; + + /** + * + * + *
                                +   * The UID of the tablet, unique within the database. Matches the
                                +   * `tablet_uids` and `leader_tablet_uid` fields in `Group`.
                                +   * 
                                + * + * uint64 tablet_uid = 1; + * + * @return The tabletUid. + */ + @java.lang.Override + public long getTabletUid() { + return tabletUid_; + } + + public static final int SERVER_ADDRESS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object serverAddress_ = ""; + + /** + * + * + *
                                +   * The address of the server that is serving this tablet -- either an IP
                                +   * address or DNS hostname and a port number.
                                +   * 
                                + * + * string server_address = 2; + * + * @return The serverAddress. + */ + @java.lang.Override + public java.lang.String getServerAddress() { + java.lang.Object ref = serverAddress_; + 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(); + serverAddress_ = s; + return s; + } + } + + /** + * + * + *
                                +   * The address of the server that is serving this tablet -- either an IP
                                +   * address or DNS hostname and a port number.
                                +   * 
                                + * + * string server_address = 2; + * + * @return The bytes for serverAddress. + */ + @java.lang.Override + public com.google.protobuf.ByteString getServerAddressBytes() { + java.lang.Object ref = serverAddress_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serverAddress_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LOCATION_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object location_ = ""; + + /** + * + * + *
                                +   * Where this tablet is located. This is the name of a Google Cloud region,
                                +   * such as "us-central1".
                                +   * 
                                + * + * string location = 3; + * + * @return The location. + */ + @java.lang.Override + public java.lang.String getLocation() { + java.lang.Object ref = location_; + 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(); + location_ = s; + return s; + } + } + + /** + * + * + *
                                +   * Where this tablet is located. This is the name of a Google Cloud region,
                                +   * such as "us-central1".
                                +   * 
                                + * + * string location = 3; + * + * @return The bytes for location. + */ + @java.lang.Override + public com.google.protobuf.ByteString getLocationBytes() { + java.lang.Object ref = location_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + location_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ROLE_FIELD_NUMBER = 4; + private int role_ = 0; + + /** + * + * + *
                                +   * The role of the tablet.
                                +   * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @return The enum numeric value on the wire for role. + */ + @java.lang.Override + public int getRoleValue() { + return role_; + } + + /** + * + * + *
                                +   * The role of the tablet.
                                +   * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @return The role. + */ + @java.lang.Override + public com.google.spanner.v1.Tablet.Role getRole() { + com.google.spanner.v1.Tablet.Role result = com.google.spanner.v1.Tablet.Role.forNumber(role_); + return result == null ? com.google.spanner.v1.Tablet.Role.UNRECOGNIZED : result; + } + + public static final int INCARNATION_FIELD_NUMBER = 5; + private com.google.protobuf.ByteString incarnation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +   * `incarnation` indicates the freshness of the tablet information contained
                                +   * in this proto. Incarnations can be compared lexicographically; if
                                +   * incarnation A is greater than incarnation B, then the `Tablet`
                                +   * corresponding to A is newer than the `Tablet` corresponding to B, and
                                +   * should be used preferentially.
                                +   * 
                                + * + * bytes incarnation = 5; + * + * @return The incarnation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIncarnation() { + return incarnation_; + } + + public static final int DISTANCE_FIELD_NUMBER = 6; + private int distance_ = 0; + + /** + * + * + *
                                +   * Distances help the client pick the closest tablet out of the list of
                                +   * tablets for a given request. Tablets with lower distances should generally
                                +   * be preferred. Tablets with the same distance are approximately equally
                                +   * close; the client can choose arbitrarily.
                                +   *
                                +   * Distances do not correspond precisely to expected latency, geographical
                                +   * distance, or anything else. Distances should be compared only between
                                +   * tablets of the same group; they are not meaningful between different
                                +   * groups.
                                +   *
                                +   * A value of zero indicates that the tablet may be in the same zone as
                                +   * the client, and have minimum network latency. A value less than or equal to
                                +   * five indicates that the tablet is thought to be in the same region as the
                                +   * client, and may have a few milliseconds of network latency. Values greater
                                +   * than five are most likely in a different region, with non-trivial network
                                +   * latency.
                                +   *
                                +   * Clients should use the following algorithm:
                                +   * * If the request is using a directed read, eliminate any tablets that
                                +   * do not match the directed read's target zone and/or replica type.
                                +   * * (Read-write transactions only) Choose leader tablet if it has an
                                +   * distance <=5.
                                +   * * Group and sort tablets by distance. Choose a random
                                +   * tablet with the lowest distance. If the request
                                +   * is not a directed read, only consider replicas with distances <=5.
                                +   * * Send the request to the fallback endpoint.
                                +   *
                                +   * The tablet picked by this algorithm may be skipped, either because it is
                                +   * marked as `skip` by the server or because the corresponding server is
                                +   * unreachable, flow controlled, etc. Skipped tablets should be added to the
                                +   * `skipped_tablet_uid` field in `RoutingHint`; the algorithm above should
                                +   * then be re-run without including the skipped tablet(s) to pick the next
                                +   * best tablet.
                                +   * 
                                + * + * uint32 distance = 6; + * + * @return The distance. + */ + @java.lang.Override + public int getDistance() { + return distance_; + } + + public static final int SKIP_FIELD_NUMBER = 7; + private boolean skip_ = false; + + /** + * + * + *
                                +   * If true, the tablet should not be chosen by the client. Typically, this
                                +   * signals that the tablet is unhealthy in some way. Tablets with `skip`
                                +   * set to true should be reported back to the server in
                                +   * `RoutingHint.skipped_tablet_uid`; this cues the server to send updated
                                +   * information for this tablet should it become usable again.
                                +   * 
                                + * + * bool skip = 7; + * + * @return The skip. + */ + @java.lang.Override + public boolean getSkip() { + return skip_; + } + + 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 (tabletUid_ != 0L) { + output.writeUInt64(1, tabletUid_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serverAddress_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, serverAddress_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, location_); + } + if (role_ != com.google.spanner.v1.Tablet.Role.ROLE_UNSPECIFIED.getNumber()) { + output.writeEnum(4, role_); + } + if (!incarnation_.isEmpty()) { + output.writeBytes(5, incarnation_); + } + if (distance_ != 0) { + output.writeUInt32(6, distance_); + } + if (skip_ != false) { + output.writeBool(7, skip_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (tabletUid_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeUInt64Size(1, tabletUid_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serverAddress_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, serverAddress_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(location_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, location_); + } + if (role_ != com.google.spanner.v1.Tablet.Role.ROLE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(4, role_); + } + if (!incarnation_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(5, incarnation_); + } + if (distance_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(6, distance_); + } + if (skip_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(7, skip_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.Tablet)) { + return super.equals(obj); + } + com.google.spanner.v1.Tablet other = (com.google.spanner.v1.Tablet) obj; + + if (getTabletUid() != other.getTabletUid()) return false; + if (!getServerAddress().equals(other.getServerAddress())) return false; + if (!getLocation().equals(other.getLocation())) return false; + if (role_ != other.role_) return false; + if (!getIncarnation().equals(other.getIncarnation())) return false; + if (getDistance() != other.getDistance()) return false; + if (getSkip() != other.getSkip()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TABLET_UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getTabletUid()); + hash = (37 * hash) + SERVER_ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getServerAddress().hashCode(); + hash = (37 * hash) + LOCATION_FIELD_NUMBER; + hash = (53 * hash) + getLocation().hashCode(); + hash = (37 * hash) + ROLE_FIELD_NUMBER; + hash = (53 * hash) + role_; + hash = (37 * hash) + INCARNATION_FIELD_NUMBER; + hash = (53 * hash) + getIncarnation().hashCode(); + hash = (37 * hash) + DISTANCE_FIELD_NUMBER; + hash = (53 * hash) + getDistance(); + hash = (37 * hash) + SKIP_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getSkip()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.Tablet parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Tablet parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Tablet parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Tablet parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Tablet parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.Tablet parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.Tablet parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Tablet parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Tablet parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Tablet parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.Tablet parseFrom(com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.Tablet parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.Tablet 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
                                +   * A `Tablet` represents a single replica of a `Group`. A tablet is served by a
                                +   * single server at a time, and can move between servers due to server death or
                                +   * simply load balancing.
                                +   * 
                                + * + * Protobuf type {@code google.spanner.v1.Tablet} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.Tablet) + com.google.spanner.v1.TabletOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Tablet_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Tablet_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.Tablet.class, com.google.spanner.v1.Tablet.Builder.class); + } + + // Construct using com.google.spanner.v1.Tablet.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + tabletUid_ = 0L; + serverAddress_ = ""; + location_ = ""; + role_ = 0; + incarnation_ = com.google.protobuf.ByteString.EMPTY; + distance_ = 0; + skip_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.LocationProto + .internal_static_google_spanner_v1_Tablet_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.Tablet getDefaultInstanceForType() { + return com.google.spanner.v1.Tablet.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.Tablet build() { + com.google.spanner.v1.Tablet result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.Tablet buildPartial() { + com.google.spanner.v1.Tablet result = new com.google.spanner.v1.Tablet(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.v1.Tablet result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.tabletUid_ = tabletUid_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.serverAddress_ = serverAddress_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.location_ = location_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.role_ = role_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.incarnation_ = incarnation_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.distance_ = distance_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.skip_ = skip_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.Tablet) { + return mergeFrom((com.google.spanner.v1.Tablet) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.Tablet other) { + if (other == com.google.spanner.v1.Tablet.getDefaultInstance()) return this; + if (other.getTabletUid() != 0L) { + setTabletUid(other.getTabletUid()); + } + if (!other.getServerAddress().isEmpty()) { + serverAddress_ = other.serverAddress_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getLocation().isEmpty()) { + location_ = other.location_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (other.role_ != 0) { + setRoleValue(other.getRoleValue()); + } + if (!other.getIncarnation().isEmpty()) { + setIncarnation(other.getIncarnation()); + } + if (other.getDistance() != 0) { + setDistance(other.getDistance()); + } + if (other.getSkip() != false) { + setSkip(other.getSkip()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + tabletUid_ = input.readUInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + serverAddress_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + location_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 32: + { + role_ = input.readEnum(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 42: + { + incarnation_ = input.readBytes(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 48: + { + distance_ = input.readUInt32(); + bitField0_ |= 0x00000020; + break; + } // case 48 + case 56: + { + skip_ = input.readBool(); + bitField0_ |= 0x00000040; + break; + } // case 56 + 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 long tabletUid_; + + /** + * + * + *
                                +     * The UID of the tablet, unique within the database. Matches the
                                +     * `tablet_uids` and `leader_tablet_uid` fields in `Group`.
                                +     * 
                                + * + * uint64 tablet_uid = 1; + * + * @return The tabletUid. + */ + @java.lang.Override + public long getTabletUid() { + return tabletUid_; + } + + /** + * + * + *
                                +     * The UID of the tablet, unique within the database. Matches the
                                +     * `tablet_uids` and `leader_tablet_uid` fields in `Group`.
                                +     * 
                                + * + * uint64 tablet_uid = 1; + * + * @param value The tabletUid to set. + * @return This builder for chaining. + */ + public Builder setTabletUid(long value) { + + tabletUid_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The UID of the tablet, unique within the database. Matches the
                                +     * `tablet_uids` and `leader_tablet_uid` fields in `Group`.
                                +     * 
                                + * + * uint64 tablet_uid = 1; + * + * @return This builder for chaining. + */ + public Builder clearTabletUid() { + bitField0_ = (bitField0_ & ~0x00000001); + tabletUid_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object serverAddress_ = ""; + + /** + * + * + *
                                +     * The address of the server that is serving this tablet -- either an IP
                                +     * address or DNS hostname and a port number.
                                +     * 
                                + * + * string server_address = 2; + * + * @return The serverAddress. + */ + public java.lang.String getServerAddress() { + java.lang.Object ref = serverAddress_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serverAddress_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * The address of the server that is serving this tablet -- either an IP
                                +     * address or DNS hostname and a port number.
                                +     * 
                                + * + * string server_address = 2; + * + * @return The bytes for serverAddress. + */ + public com.google.protobuf.ByteString getServerAddressBytes() { + java.lang.Object ref = serverAddress_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serverAddress_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * The address of the server that is serving this tablet -- either an IP
                                +     * address or DNS hostname and a port number.
                                +     * 
                                + * + * string server_address = 2; + * + * @param value The serverAddress to set. + * @return This builder for chaining. + */ + public Builder setServerAddress(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + serverAddress_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The address of the server that is serving this tablet -- either an IP
                                +     * address or DNS hostname and a port number.
                                +     * 
                                + * + * string server_address = 2; + * + * @return This builder for chaining. + */ + public Builder clearServerAddress() { + serverAddress_ = getDefaultInstance().getServerAddress(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The address of the server that is serving this tablet -- either an IP
                                +     * address or DNS hostname and a port number.
                                +     * 
                                + * + * string server_address = 2; + * + * @param value The bytes for serverAddress to set. + * @return This builder for chaining. + */ + public Builder setServerAddressBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + serverAddress_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object location_ = ""; + + /** + * + * + *
                                +     * Where this tablet is located. This is the name of a Google Cloud region,
                                +     * such as "us-central1".
                                +     * 
                                + * + * string location = 3; + * + * @return The location. + */ + public java.lang.String getLocation() { + java.lang.Object ref = location_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + location_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
                                +     * Where this tablet is located. This is the name of a Google Cloud region,
                                +     * such as "us-central1".
                                +     * 
                                + * + * string location = 3; + * + * @return The bytes for location. + */ + public com.google.protobuf.ByteString getLocationBytes() { + java.lang.Object ref = location_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + location_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
                                +     * Where this tablet is located. This is the name of a Google Cloud region,
                                +     * such as "us-central1".
                                +     * 
                                + * + * string location = 3; + * + * @param value The location to set. + * @return This builder for chaining. + */ + public Builder setLocation(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + location_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Where this tablet is located. This is the name of a Google Cloud region,
                                +     * such as "us-central1".
                                +     * 
                                + * + * string location = 3; + * + * @return This builder for chaining. + */ + public Builder clearLocation() { + location_ = getDefaultInstance().getLocation(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Where this tablet is located. This is the name of a Google Cloud region,
                                +     * such as "us-central1".
                                +     * 
                                + * + * string location = 3; + * + * @param value The bytes for location to set. + * @return This builder for chaining. + */ + public Builder setLocationBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + location_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private int role_ = 0; + + /** + * + * + *
                                +     * The role of the tablet.
                                +     * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @return The enum numeric value on the wire for role. + */ + @java.lang.Override + public int getRoleValue() { + return role_; + } + + /** + * + * + *
                                +     * The role of the tablet.
                                +     * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @param value The enum numeric value on the wire for role to set. + * @return This builder for chaining. + */ + public Builder setRoleValue(int value) { + role_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The role of the tablet.
                                +     * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @return The role. + */ + @java.lang.Override + public com.google.spanner.v1.Tablet.Role getRole() { + com.google.spanner.v1.Tablet.Role result = com.google.spanner.v1.Tablet.Role.forNumber(role_); + return result == null ? com.google.spanner.v1.Tablet.Role.UNRECOGNIZED : result; + } + + /** + * + * + *
                                +     * The role of the tablet.
                                +     * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @param value The role to set. + * @return This builder for chaining. + */ + public Builder setRole(com.google.spanner.v1.Tablet.Role value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + role_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * The role of the tablet.
                                +     * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @return This builder for chaining. + */ + public Builder clearRole() { + bitField0_ = (bitField0_ & ~0x00000008); + role_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString incarnation_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
                                +     * `incarnation` indicates the freshness of the tablet information contained
                                +     * in this proto. Incarnations can be compared lexicographically; if
                                +     * incarnation A is greater than incarnation B, then the `Tablet`
                                +     * corresponding to A is newer than the `Tablet` corresponding to B, and
                                +     * should be used preferentially.
                                +     * 
                                + * + * bytes incarnation = 5; + * + * @return The incarnation. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIncarnation() { + return incarnation_; + } + + /** + * + * + *
                                +     * `incarnation` indicates the freshness of the tablet information contained
                                +     * in this proto. Incarnations can be compared lexicographically; if
                                +     * incarnation A is greater than incarnation B, then the `Tablet`
                                +     * corresponding to A is newer than the `Tablet` corresponding to B, and
                                +     * should be used preferentially.
                                +     * 
                                + * + * bytes incarnation = 5; + * + * @param value The incarnation to set. + * @return This builder for chaining. + */ + public Builder setIncarnation(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + incarnation_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * `incarnation` indicates the freshness of the tablet information contained
                                +     * in this proto. Incarnations can be compared lexicographically; if
                                +     * incarnation A is greater than incarnation B, then the `Tablet`
                                +     * corresponding to A is newer than the `Tablet` corresponding to B, and
                                +     * should be used preferentially.
                                +     * 
                                + * + * bytes incarnation = 5; + * + * @return This builder for chaining. + */ + public Builder clearIncarnation() { + bitField0_ = (bitField0_ & ~0x00000010); + incarnation_ = getDefaultInstance().getIncarnation(); + onChanged(); + return this; + } + + private int distance_; + + /** + * + * + *
                                +     * Distances help the client pick the closest tablet out of the list of
                                +     * tablets for a given request. Tablets with lower distances should generally
                                +     * be preferred. Tablets with the same distance are approximately equally
                                +     * close; the client can choose arbitrarily.
                                +     *
                                +     * Distances do not correspond precisely to expected latency, geographical
                                +     * distance, or anything else. Distances should be compared only between
                                +     * tablets of the same group; they are not meaningful between different
                                +     * groups.
                                +     *
                                +     * A value of zero indicates that the tablet may be in the same zone as
                                +     * the client, and have minimum network latency. A value less than or equal to
                                +     * five indicates that the tablet is thought to be in the same region as the
                                +     * client, and may have a few milliseconds of network latency. Values greater
                                +     * than five are most likely in a different region, with non-trivial network
                                +     * latency.
                                +     *
                                +     * Clients should use the following algorithm:
                                +     * * If the request is using a directed read, eliminate any tablets that
                                +     * do not match the directed read's target zone and/or replica type.
                                +     * * (Read-write transactions only) Choose leader tablet if it has an
                                +     * distance <=5.
                                +     * * Group and sort tablets by distance. Choose a random
                                +     * tablet with the lowest distance. If the request
                                +     * is not a directed read, only consider replicas with distances <=5.
                                +     * * Send the request to the fallback endpoint.
                                +     *
                                +     * The tablet picked by this algorithm may be skipped, either because it is
                                +     * marked as `skip` by the server or because the corresponding server is
                                +     * unreachable, flow controlled, etc. Skipped tablets should be added to the
                                +     * `skipped_tablet_uid` field in `RoutingHint`; the algorithm above should
                                +     * then be re-run without including the skipped tablet(s) to pick the next
                                +     * best tablet.
                                +     * 
                                + * + * uint32 distance = 6; + * + * @return The distance. + */ + @java.lang.Override + public int getDistance() { + return distance_; + } + + /** + * + * + *
                                +     * Distances help the client pick the closest tablet out of the list of
                                +     * tablets for a given request. Tablets with lower distances should generally
                                +     * be preferred. Tablets with the same distance are approximately equally
                                +     * close; the client can choose arbitrarily.
                                +     *
                                +     * Distances do not correspond precisely to expected latency, geographical
                                +     * distance, or anything else. Distances should be compared only between
                                +     * tablets of the same group; they are not meaningful between different
                                +     * groups.
                                +     *
                                +     * A value of zero indicates that the tablet may be in the same zone as
                                +     * the client, and have minimum network latency. A value less than or equal to
                                +     * five indicates that the tablet is thought to be in the same region as the
                                +     * client, and may have a few milliseconds of network latency. Values greater
                                +     * than five are most likely in a different region, with non-trivial network
                                +     * latency.
                                +     *
                                +     * Clients should use the following algorithm:
                                +     * * If the request is using a directed read, eliminate any tablets that
                                +     * do not match the directed read's target zone and/or replica type.
                                +     * * (Read-write transactions only) Choose leader tablet if it has an
                                +     * distance <=5.
                                +     * * Group and sort tablets by distance. Choose a random
                                +     * tablet with the lowest distance. If the request
                                +     * is not a directed read, only consider replicas with distances <=5.
                                +     * * Send the request to the fallback endpoint.
                                +     *
                                +     * The tablet picked by this algorithm may be skipped, either because it is
                                +     * marked as `skip` by the server or because the corresponding server is
                                +     * unreachable, flow controlled, etc. Skipped tablets should be added to the
                                +     * `skipped_tablet_uid` field in `RoutingHint`; the algorithm above should
                                +     * then be re-run without including the skipped tablet(s) to pick the next
                                +     * best tablet.
                                +     * 
                                + * + * uint32 distance = 6; + * + * @param value The distance to set. + * @return This builder for chaining. + */ + public Builder setDistance(int value) { + + distance_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Distances help the client pick the closest tablet out of the list of
                                +     * tablets for a given request. Tablets with lower distances should generally
                                +     * be preferred. Tablets with the same distance are approximately equally
                                +     * close; the client can choose arbitrarily.
                                +     *
                                +     * Distances do not correspond precisely to expected latency, geographical
                                +     * distance, or anything else. Distances should be compared only between
                                +     * tablets of the same group; they are not meaningful between different
                                +     * groups.
                                +     *
                                +     * A value of zero indicates that the tablet may be in the same zone as
                                +     * the client, and have minimum network latency. A value less than or equal to
                                +     * five indicates that the tablet is thought to be in the same region as the
                                +     * client, and may have a few milliseconds of network latency. Values greater
                                +     * than five are most likely in a different region, with non-trivial network
                                +     * latency.
                                +     *
                                +     * Clients should use the following algorithm:
                                +     * * If the request is using a directed read, eliminate any tablets that
                                +     * do not match the directed read's target zone and/or replica type.
                                +     * * (Read-write transactions only) Choose leader tablet if it has an
                                +     * distance <=5.
                                +     * * Group and sort tablets by distance. Choose a random
                                +     * tablet with the lowest distance. If the request
                                +     * is not a directed read, only consider replicas with distances <=5.
                                +     * * Send the request to the fallback endpoint.
                                +     *
                                +     * The tablet picked by this algorithm may be skipped, either because it is
                                +     * marked as `skip` by the server or because the corresponding server is
                                +     * unreachable, flow controlled, etc. Skipped tablets should be added to the
                                +     * `skipped_tablet_uid` field in `RoutingHint`; the algorithm above should
                                +     * then be re-run without including the skipped tablet(s) to pick the next
                                +     * best tablet.
                                +     * 
                                + * + * uint32 distance = 6; + * + * @return This builder for chaining. + */ + public Builder clearDistance() { + bitField0_ = (bitField0_ & ~0x00000020); + distance_ = 0; + onChanged(); + return this; + } + + private boolean skip_; + + /** + * + * + *
                                +     * If true, the tablet should not be chosen by the client. Typically, this
                                +     * signals that the tablet is unhealthy in some way. Tablets with `skip`
                                +     * set to true should be reported back to the server in
                                +     * `RoutingHint.skipped_tablet_uid`; this cues the server to send updated
                                +     * information for this tablet should it become usable again.
                                +     * 
                                + * + * bool skip = 7; + * + * @return The skip. + */ + @java.lang.Override + public boolean getSkip() { + return skip_; + } + + /** + * + * + *
                                +     * If true, the tablet should not be chosen by the client. Typically, this
                                +     * signals that the tablet is unhealthy in some way. Tablets with `skip`
                                +     * set to true should be reported back to the server in
                                +     * `RoutingHint.skipped_tablet_uid`; this cues the server to send updated
                                +     * information for this tablet should it become usable again.
                                +     * 
                                + * + * bool skip = 7; + * + * @param value The skip to set. + * @return This builder for chaining. + */ + public Builder setSkip(boolean value) { + + skip_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * If true, the tablet should not be chosen by the client. Typically, this
                                +     * signals that the tablet is unhealthy in some way. Tablets with `skip`
                                +     * set to true should be reported back to the server in
                                +     * `RoutingHint.skipped_tablet_uid`; this cues the server to send updated
                                +     * information for this tablet should it become usable again.
                                +     * 
                                + * + * bool skip = 7; + * + * @return This builder for chaining. + */ + public Builder clearSkip() { + bitField0_ = (bitField0_ & ~0x00000040); + skip_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.Tablet) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.Tablet) + private static final com.google.spanner.v1.Tablet DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.Tablet(); + } + + public static com.google.spanner.v1.Tablet getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Tablet parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.Tablet getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TabletOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TabletOrBuilder.java new file mode 100644 index 00000000000..df919eebae5 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TabletOrBuilder.java @@ -0,0 +1,203 @@ +/* + * Copyright 2026 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! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spanner/v1/location.proto +// Protobuf Java Version: 4.33.2 + +package com.google.spanner.v1; + +@com.google.protobuf.Generated +public interface TabletOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.Tablet) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
                                +   * The UID of the tablet, unique within the database. Matches the
                                +   * `tablet_uids` and `leader_tablet_uid` fields in `Group`.
                                +   * 
                                + * + * uint64 tablet_uid = 1; + * + * @return The tabletUid. + */ + long getTabletUid(); + + /** + * + * + *
                                +   * The address of the server that is serving this tablet -- either an IP
                                +   * address or DNS hostname and a port number.
                                +   * 
                                + * + * string server_address = 2; + * + * @return The serverAddress. + */ + java.lang.String getServerAddress(); + + /** + * + * + *
                                +   * The address of the server that is serving this tablet -- either an IP
                                +   * address or DNS hostname and a port number.
                                +   * 
                                + * + * string server_address = 2; + * + * @return The bytes for serverAddress. + */ + com.google.protobuf.ByteString getServerAddressBytes(); + + /** + * + * + *
                                +   * Where this tablet is located. This is the name of a Google Cloud region,
                                +   * such as "us-central1".
                                +   * 
                                + * + * string location = 3; + * + * @return The location. + */ + java.lang.String getLocation(); + + /** + * + * + *
                                +   * Where this tablet is located. This is the name of a Google Cloud region,
                                +   * such as "us-central1".
                                +   * 
                                + * + * string location = 3; + * + * @return The bytes for location. + */ + com.google.protobuf.ByteString getLocationBytes(); + + /** + * + * + *
                                +   * The role of the tablet.
                                +   * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @return The enum numeric value on the wire for role. + */ + int getRoleValue(); + + /** + * + * + *
                                +   * The role of the tablet.
                                +   * 
                                + * + * .google.spanner.v1.Tablet.Role role = 4; + * + * @return The role. + */ + com.google.spanner.v1.Tablet.Role getRole(); + + /** + * + * + *
                                +   * `incarnation` indicates the freshness of the tablet information contained
                                +   * in this proto. Incarnations can be compared lexicographically; if
                                +   * incarnation A is greater than incarnation B, then the `Tablet`
                                +   * corresponding to A is newer than the `Tablet` corresponding to B, and
                                +   * should be used preferentially.
                                +   * 
                                + * + * bytes incarnation = 5; + * + * @return The incarnation. + */ + com.google.protobuf.ByteString getIncarnation(); + + /** + * + * + *
                                +   * Distances help the client pick the closest tablet out of the list of
                                +   * tablets for a given request. Tablets with lower distances should generally
                                +   * be preferred. Tablets with the same distance are approximately equally
                                +   * close; the client can choose arbitrarily.
                                +   *
                                +   * Distances do not correspond precisely to expected latency, geographical
                                +   * distance, or anything else. Distances should be compared only between
                                +   * tablets of the same group; they are not meaningful between different
                                +   * groups.
                                +   *
                                +   * A value of zero indicates that the tablet may be in the same zone as
                                +   * the client, and have minimum network latency. A value less than or equal to
                                +   * five indicates that the tablet is thought to be in the same region as the
                                +   * client, and may have a few milliseconds of network latency. Values greater
                                +   * than five are most likely in a different region, with non-trivial network
                                +   * latency.
                                +   *
                                +   * Clients should use the following algorithm:
                                +   * * If the request is using a directed read, eliminate any tablets that
                                +   * do not match the directed read's target zone and/or replica type.
                                +   * * (Read-write transactions only) Choose leader tablet if it has an
                                +   * distance <=5.
                                +   * * Group and sort tablets by distance. Choose a random
                                +   * tablet with the lowest distance. If the request
                                +   * is not a directed read, only consider replicas with distances <=5.
                                +   * * Send the request to the fallback endpoint.
                                +   *
                                +   * The tablet picked by this algorithm may be skipped, either because it is
                                +   * marked as `skip` by the server or because the corresponding server is
                                +   * unreachable, flow controlled, etc. Skipped tablets should be added to the
                                +   * `skipped_tablet_uid` field in `RoutingHint`; the algorithm above should
                                +   * then be re-run without including the skipped tablet(s) to pick the next
                                +   * best tablet.
                                +   * 
                                + * + * uint32 distance = 6; + * + * @return The distance. + */ + int getDistance(); + + /** + * + * + *
                                +   * If true, the tablet should not be chosen by the client. Typically, this
                                +   * signals that the tablet is unhealthy in some way. Tablets with `skip`
                                +   * set to true should be reported back to the server in
                                +   * `RoutingHint.skipped_tablet_uid`; this cues the server to send updated
                                +   * information for this tablet should it become usable again.
                                +   * 
                                + * + * bool skip = 7; + * + * @return The skip. + */ + boolean getSkip(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java index 5fc6801f4f8..8cf66a0d30f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -28,13 +29,25 @@ * * Protobuf type {@code google.spanner.v1.Transaction} */ -public final class Transaction extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Transaction extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.Transaction) TransactionOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Transaction"); + } + // Use Transaction.newBuilder() to construct. - private Transaction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Transaction(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -42,19 +55,13 @@ private Transaction() { id_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Transaction(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_Transaction_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_Transaction_fieldAccessorTable @@ -66,6 +73,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int ID_FIELD_NUMBER = 1; private com.google.protobuf.ByteString id_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -91,6 +99,7 @@ public com.google.protobuf.ByteString getId() { public static final int READ_TIMESTAMP_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp readTimestamp_; + /** * * @@ -111,6 +120,7 @@ public com.google.protobuf.ByteString getId() { public boolean hasReadTimestamp() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -133,6 +143,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { ? com.google.protobuf.Timestamp.getDefaultInstance() : readTimestamp_; } + /** * * @@ -156,19 +167,18 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { public static final int PRECOMMIT_TOKEN_FIELD_NUMBER = 3; private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; + /** * * *
                                -   * A precommit token will be included in the response of a BeginTransaction
                                +   * A precommit token is included in the response of a BeginTransaction
                                    * request if the read-write transaction is on a multiplexed session and
                                    * a mutation_key was specified in the
                                    * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                    * The precommit token with the highest sequence number from this transaction
                                    * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                    * request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -179,19 +189,18 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000002) != 0); } + /** * * *
                                -   * A precommit token will be included in the response of a BeginTransaction
                                +   * A precommit token is included in the response of a BeginTransaction
                                    * request if the read-write transaction is on a multiplexed session and
                                    * a mutation_key was specified in the
                                    * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                    * The precommit token with the highest sequence number from this transaction
                                    * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                    * request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -204,19 +213,18 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( ? com.google.spanner.v1.MultiplexedSessionPrecommitToken.getDefaultInstance() : precommitToken_; } + /** * * *
                                -   * A precommit token will be included in the response of a BeginTransaction
                                +   * A precommit token is included in the response of a BeginTransaction
                                    * request if the read-write transaction is on a multiplexed session and
                                    * a mutation_key was specified in the
                                    * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                    * The precommit token with the highest sequence number from this transaction
                                    * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                    * request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -229,6 +237,80 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( : precommitToken_; } + public static final int CACHE_UPDATE_FIELD_NUMBER = 5; + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + @java.lang.Override + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -252,6 +334,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(3, getPrecommitToken()); } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(5, getCacheUpdate()); + } getUnknownFields().writeTo(output); } @@ -270,6 +355,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getPrecommitToken()); } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getCacheUpdate()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -294,6 +382,10 @@ public boolean equals(final java.lang.Object obj) { if (hasPrecommitToken()) { if (!getPrecommitToken().equals(other.getPrecommitToken())) return false; } + if (hasCacheUpdate() != other.hasCacheUpdate()) return false; + if (hasCacheUpdate()) { + if (!getCacheUpdate().equals(other.getCacheUpdate())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -315,6 +407,10 @@ public int hashCode() { hash = (37 * hash) + PRECOMMIT_TOKEN_FIELD_NUMBER; hash = (53 * hash) + getPrecommitToken().hashCode(); } + if (hasCacheUpdate()) { + hash = (37 * hash) + CACHE_UPDATE_FIELD_NUMBER; + hash = (53 * hash) + getCacheUpdate().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -356,38 +452,38 @@ public static com.google.spanner.v1.Transaction parseFrom( public static com.google.spanner.v1.Transaction parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Transaction parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Transaction parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.Transaction parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Transaction parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Transaction parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -410,10 +506,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -423,7 +520,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.Transaction} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.Transaction) com.google.spanner.v1.TransactionOrBuilder { @@ -433,7 +530,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_Transaction_fieldAccessorTable @@ -447,15 +544,16 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getReadTimestampFieldBuilder(); - getPrecommitTokenFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetReadTimestampFieldBuilder(); + internalGetPrecommitTokenFieldBuilder(); + internalGetCacheUpdateFieldBuilder(); } } @@ -474,6 +572,11 @@ public Builder clear() { precommitTokenBuilder_.dispose(); precommitTokenBuilder_ = null; } + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } return this; } @@ -523,42 +626,14 @@ private void buildPartial0(com.google.spanner.v1.Transaction result) { precommitTokenBuilder_ == null ? precommitToken_ : precommitTokenBuilder_.build(); to_bitField0_ |= 0x00000002; } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.cacheUpdate_ = + cacheUpdateBuilder_ == null ? cacheUpdate_ : cacheUpdateBuilder_.build(); + to_bitField0_ |= 0x00000004; + } result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.Transaction) { @@ -571,7 +646,7 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(com.google.spanner.v1.Transaction other) { if (other == com.google.spanner.v1.Transaction.getDefaultInstance()) return this; - if (other.getId() != com.google.protobuf.ByteString.EMPTY) { + if (!other.getId().isEmpty()) { setId(other.getId()); } if (other.hasReadTimestamp()) { @@ -580,6 +655,9 @@ public Builder mergeFrom(com.google.spanner.v1.Transaction other) { if (other.hasPrecommitToken()) { mergePrecommitToken(other.getPrecommitToken()); } + if (other.hasCacheUpdate()) { + mergeCacheUpdate(other.getCacheUpdate()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -614,16 +692,25 @@ public Builder mergeFrom( } // case 10 case 18: { - input.readMessage(getReadTimestampFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetReadTimestampFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPrecommitTokenFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 + case 42: + { + input.readMessage( + internalGetCacheUpdateFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 42 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -644,6 +731,7 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.ByteString id_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -666,6 +754,7 @@ public Builder mergeFrom( public com.google.protobuf.ByteString getId() { return id_; } + /** * * @@ -694,6 +783,7 @@ public Builder setId(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -720,11 +810,12 @@ public Builder clearId() { } private com.google.protobuf.Timestamp readTimestamp_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> readTimestampBuilder_; + /** * * @@ -744,6 +835,7 @@ public Builder clearId() { public boolean hasReadTimestamp() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -769,6 +861,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { return readTimestampBuilder_.getMessage(); } } + /** * * @@ -796,6 +889,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -820,6 +914,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp.Builder builderFor onChanged(); return this; } + /** * * @@ -852,6 +947,7 @@ public Builder mergeReadTimestamp(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -876,6 +972,7 @@ public Builder clearReadTimestamp() { onChanged(); return this; } + /** * * @@ -893,8 +990,9 @@ public Builder clearReadTimestamp() { public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getReadTimestampFieldBuilder().getBuilder(); + return internalGetReadTimestampFieldBuilder().getBuilder(); } + /** * * @@ -918,6 +1016,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { : readTimestamp_; } } + /** * * @@ -932,14 +1031,14 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { * * .google.protobuf.Timestamp read_timestamp = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getReadTimestampFieldBuilder() { + internalGetReadTimestampFieldBuilder() { if (readTimestampBuilder_ == null) { readTimestampBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -950,24 +1049,23 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { } private com.google.spanner.v1.MultiplexedSessionPrecommitToken precommitToken_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> precommitTokenBuilder_; + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -977,19 +1075,18 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { public boolean hasPrecommitToken() { return ((bitField0_ & 0x00000004) != 0); } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -1005,19 +1102,18 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( return precommitTokenBuilder_.getMessage(); } } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -1035,19 +1131,18 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm onChanged(); return this; } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -1063,19 +1158,18 @@ public Builder setPrecommitToken( onChanged(); return this; } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -1100,19 +1194,18 @@ public Builder mergePrecommitToken( } return this; } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -1127,19 +1220,18 @@ public Builder clearPrecommitToken() { onChanged(); return this; } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -1148,21 +1240,20 @@ public Builder clearPrecommitToken() { getPrecommitTokenBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getPrecommitTokenFieldBuilder().getBuilder(); + return internalGetPrecommitTokenFieldBuilder().getBuilder(); } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -1177,31 +1268,30 @@ public Builder clearPrecommitToken() { : precommitToken_; } } + /** * * *
                                -     * A precommit token will be included in the response of a BeginTransaction
                                +     * A precommit token is included in the response of a BeginTransaction
                                      * request if the read-write transaction is on a multiplexed session and
                                      * a mutation_key was specified in the
                                      * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                      * The precommit token with the highest sequence number from this transaction
                                      * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                      * request for this transaction.
                                -     * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -     * error.
                                      * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder> - getPrecommitTokenFieldBuilder() { + internalGetPrecommitTokenFieldBuilder() { if (precommitTokenBuilder_ == null) { precommitTokenBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.MultiplexedSessionPrecommitToken, com.google.spanner.v1.MultiplexedSessionPrecommitToken.Builder, com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder>( @@ -1211,15 +1301,261 @@ public Builder clearPrecommitToken() { return precommitTokenBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + private com.google.spanner.v1.CacheUpdate cacheUpdate_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + cacheUpdateBuilder_; + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + public boolean hasCacheUpdate() { + return ((bitField0_ & 0x00000008) != 0); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + public com.google.spanner.v1.CacheUpdate getCacheUpdate() { + if (cacheUpdateBuilder_ == null) { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } else { + return cacheUpdateBuilder_.getMessage(); + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cacheUpdate_ = value; + } else { + cacheUpdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCacheUpdate(com.google.spanner.v1.CacheUpdate.Builder builderForValue) { + if (cacheUpdateBuilder_ == null) { + cacheUpdate_ = builderForValue.build(); + } else { + cacheUpdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeCacheUpdate(com.google.spanner.v1.CacheUpdate value) { + if (cacheUpdateBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && cacheUpdate_ != null + && cacheUpdate_ != com.google.spanner.v1.CacheUpdate.getDefaultInstance()) { + getCacheUpdateBuilder().mergeFrom(value); + } else { + cacheUpdate_ = value; + } + } else { + cacheUpdateBuilder_.mergeFrom(value); + } + if (cacheUpdate_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearCacheUpdate() { + bitField0_ = (bitField0_ & ~0x00000008); + cacheUpdate_ = null; + if (cacheUpdateBuilder_ != null) { + cacheUpdateBuilder_.dispose(); + cacheUpdateBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdate.Builder getCacheUpdateBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetCacheUpdateFieldBuilder().getBuilder(); + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder() { + if (cacheUpdateBuilder_ != null) { + return cacheUpdateBuilder_.getMessageOrBuilder(); + } else { + return cacheUpdate_ == null + ? com.google.spanner.v1.CacheUpdate.getDefaultInstance() + : cacheUpdate_; + } + } + + /** + * + * + *
                                +     * Optional. A cache update expresses a set of changes the client should
                                +     * incorporate into its location cache. The client should discard the changes
                                +     * if they are older than the data it already has. This data can be obtained
                                +     * in response to requests that included a `RoutingHint` field, but may also
                                +     * be obtained by explicit location-fetching RPCs which may be added in the
                                +     * future.
                                +     * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder> + internalGetCacheUpdateFieldBuilder() { + if (cacheUpdateBuilder_ == null) { + cacheUpdateBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.CacheUpdate, + com.google.spanner.v1.CacheUpdate.Builder, + com.google.spanner.v1.CacheUpdateOrBuilder>( + getCacheUpdate(), getParentForChildren(), isClean()); + cacheUpdate_ = null; + } + return cacheUpdateBuilder_; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.Transaction) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java index 31688b10739..ecba9c42e3e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,359 +14,45 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** * * *
                                - * Transactions:
                                - *
                                - * Each session can have at most one active transaction at a time (note that
                                - * standalone reads and queries use a transaction internally and do count
                                - * towards the one transaction limit). After the active transaction is
                                - * completed, the session can immediately be re-used for the next transaction.
                                - * It is not necessary to create a new session for each transaction.
                                - *
                                - * Transaction modes:
                                - *
                                - * Cloud Spanner supports three transaction modes:
                                - *
                                - *   1. Locking read-write. This type of transaction is the only way
                                - *      to write data into Cloud Spanner. These transactions rely on
                                - *      pessimistic locking and, if necessary, two-phase commit.
                                - *      Locking read-write transactions may abort, requiring the
                                - *      application to retry.
                                - *
                                - *   2. Snapshot read-only. Snapshot read-only transactions provide guaranteed
                                - *      consistency across several reads, but do not allow
                                - *      writes. Snapshot read-only transactions can be configured to read at
                                - *      timestamps in the past, or configured to perform a strong read
                                - *      (where Spanner will select a timestamp such that the read is
                                - *      guaranteed to see the effects of all transactions that have committed
                                - *      before the start of the read). Snapshot read-only transactions do not
                                - *      need to be committed.
                                - *
                                - *      Queries on change streams must be performed with the snapshot read-only
                                - *      transaction mode, specifying a strong read. Please see
                                - *      [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]
                                - *      for more details.
                                - *
                                - *   3. Partitioned DML. This type of transaction is used to execute
                                - *      a single Partitioned DML statement. Partitioned DML partitions
                                - *      the key space and runs the DML statement over each partition
                                - *      in parallel using separate, internal transactions that commit
                                - *      independently. Partitioned DML transactions do not need to be
                                - *      committed.
                                - *
                                - * For transactions that only read, snapshot read-only transactions
                                - * provide simpler semantics and are almost always faster. In
                                - * particular, read-only transactions do not take locks, so they do
                                - * not conflict with read-write transactions. As a consequence of not
                                - * taking locks, they also do not abort, so retry loops are not needed.
                                - *
                                - * Transactions may only read-write data in a single database. They
                                - * may, however, read-write data in different tables within that
                                - * database.
                                - *
                                - * Locking read-write transactions:
                                - *
                                - * Locking transactions may be used to atomically read-modify-write
                                - * data anywhere in a database. This type of transaction is externally
                                - * consistent.
                                - *
                                - * Clients should attempt to minimize the amount of time a transaction
                                - * is active. Faster transactions commit with higher probability
                                - * and cause less contention. Cloud Spanner attempts to keep read locks
                                - * active as long as the transaction continues to do reads, and the
                                - * transaction has not been terminated by
                                - * [Commit][google.spanner.v1.Spanner.Commit] or
                                - * [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of
                                - * inactivity at the client may cause Cloud Spanner to release a
                                - * transaction's locks and abort it.
                                - *
                                - * Conceptually, a read-write transaction consists of zero or more
                                - * reads or SQL statements followed by
                                - * [Commit][google.spanner.v1.Spanner.Commit]. At any time before
                                - * [Commit][google.spanner.v1.Spanner.Commit], the client can send a
                                - * [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the
                                - * transaction.
                                - *
                                - * Semantics:
                                - *
                                - * Cloud Spanner can commit the transaction if all read locks it acquired
                                - * are still valid at commit time, and it is able to acquire write
                                - * locks for all writes. Cloud Spanner can abort the transaction for any
                                - * reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
                                - * that the transaction has not modified any user data in Cloud Spanner.
                                - *
                                - * Unless the transaction commits, Cloud Spanner makes no guarantees about
                                - * how long the transaction's locks were held for. It is an error to
                                - * use Cloud Spanner locks for any sort of mutual exclusion other than
                                - * between Cloud Spanner transactions themselves.
                                - *
                                - * Retrying aborted transactions:
                                - *
                                - * When a transaction aborts, the application can choose to retry the
                                - * whole transaction again. To maximize the chances of successfully
                                - * committing the retry, the client should execute the retry in the
                                - * same session as the original attempt. The original session's lock
                                - * priority increases with each consecutive abort, meaning that each
                                - * attempt has a slightly better chance of success than the previous.
                                - *
                                - * Under some circumstances (for example, many transactions attempting to
                                - * modify the same row(s)), a transaction can abort many times in a
                                - * short period before successfully committing. Thus, it is not a good
                                - * idea to cap the number of retries a transaction can attempt;
                                - * instead, it is better to limit the total amount of time spent
                                - * retrying.
                                - *
                                - * Idle transactions:
                                - *
                                - * A transaction is considered idle if it has no outstanding reads or
                                - * SQL queries and has not started a read or SQL query within the last 10
                                - * seconds. Idle transactions can be aborted by Cloud Spanner so that they
                                - * don't hold on to locks indefinitely. If an idle transaction is aborted, the
                                - * commit will fail with error `ABORTED`.
                                - *
                                - * If this behavior is undesirable, periodically executing a simple
                                - * SQL query in the transaction (for example, `SELECT 1`) prevents the
                                - * transaction from becoming idle.
                                - *
                                - * Snapshot read-only transactions:
                                - *
                                - * Snapshot read-only transactions provides a simpler method than
                                - * locking read-write transactions for doing several consistent
                                - * reads. However, this type of transaction does not support writes.
                                - *
                                - * Snapshot transactions do not take locks. Instead, they work by
                                - * choosing a Cloud Spanner timestamp, then executing all reads at that
                                - * timestamp. Since they do not acquire locks, they do not block
                                - * concurrent read-write transactions.
                                - *
                                - * Unlike locking read-write transactions, snapshot read-only
                                - * transactions never abort. They can fail if the chosen read
                                - * timestamp is garbage collected; however, the default garbage
                                - * collection policy is generous enough that most applications do not
                                - * need to worry about this in practice.
                                - *
                                - * Snapshot read-only transactions do not need to call
                                - * [Commit][google.spanner.v1.Spanner.Commit] or
                                - * [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not
                                - * permitted to do so).
                                - *
                                - * To execute a snapshot transaction, the client specifies a timestamp
                                - * bound, which tells Cloud Spanner how to choose a read timestamp.
                                - *
                                - * The types of timestamp bound are:
                                - *
                                - *   - Strong (the default).
                                - *   - Bounded staleness.
                                - *   - Exact staleness.
                                - *
                                - * If the Cloud Spanner database to be read is geographically distributed,
                                - * stale read-only transactions can execute more quickly than strong
                                - * or read-write transactions, because they are able to execute far
                                - * from the leader replica.
                                - *
                                - * Each type of timestamp bound is discussed in detail below.
                                - *
                                - * Strong: Strong reads are guaranteed to see the effects of all transactions
                                - * that have committed before the start of the read. Furthermore, all
                                - * rows yielded by a single read are consistent with each other -- if
                                - * any part of the read observes a transaction, all parts of the read
                                - * see the transaction.
                                - *
                                - * Strong reads are not repeatable: two consecutive strong read-only
                                - * transactions might return inconsistent results if there are
                                - * concurrent writes. If consistency across reads is required, the
                                - * reads should be executed within a transaction or at an exact read
                                - * timestamp.
                                - *
                                - * Queries on change streams (see below for more details) must also specify
                                - * the strong read timestamp bound.
                                - *
                                - * See
                                - * [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong].
                                - *
                                - * Exact staleness:
                                - *
                                - * These timestamp bounds execute reads at a user-specified
                                - * timestamp. Reads at a timestamp are guaranteed to see a consistent
                                - * prefix of the global transaction history: they observe
                                - * modifications done by all transactions with a commit timestamp less than or
                                - * equal to the read timestamp, and observe none of the modifications done by
                                - * transactions with a larger commit timestamp. They will block until
                                - * all conflicting transactions that may be assigned commit timestamps
                                - * <= the read timestamp have finished.
                                - *
                                - * The timestamp can either be expressed as an absolute Cloud Spanner commit
                                - * timestamp or a staleness relative to the current time.
                                - *
                                - * These modes do not require a "negotiation phase" to pick a
                                - * timestamp. As a result, they execute slightly faster than the
                                - * equivalent boundedly stale concurrency modes. On the other hand,
                                - * boundedly stale reads usually return fresher results.
                                - *
                                - * See
                                - * [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp]
                                - * and
                                - * [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness].
                                - *
                                - * Bounded staleness:
                                - *
                                - * Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
                                - * subject to a user-provided staleness bound. Cloud Spanner chooses the
                                - * newest timestamp within the staleness bound that allows execution
                                - * of the reads at the closest available replica without blocking.
                                - *
                                - * All rows yielded are consistent with each other -- if any part of
                                - * the read observes a transaction, all parts of the read see the
                                - * transaction. Boundedly stale reads are not repeatable: two stale
                                - * reads, even if they use the same staleness bound, can execute at
                                - * different timestamps and thus return inconsistent results.
                                - *
                                - * Boundedly stale reads execute in two phases: the first phase
                                - * negotiates a timestamp among all replicas needed to serve the
                                - * read. In the second phase, reads are executed at the negotiated
                                - * timestamp.
                                - *
                                - * As a result of the two phase execution, bounded staleness reads are
                                - * usually a little slower than comparable exact staleness
                                - * reads. However, they are typically able to return fresher
                                - * results, and are more likely to execute at the closest replica.
                                - *
                                - * Because the timestamp negotiation requires up-front knowledge of
                                - * which rows will be read, it can only be used with single-use
                                - * read-only transactions.
                                - *
                                - * See
                                - * [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness]
                                - * and
                                - * [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp].
                                - *
                                - * Old read timestamps and garbage collection:
                                - *
                                - * Cloud Spanner continuously garbage collects deleted and overwritten data
                                - * in the background to reclaim storage space. This process is known
                                - * as "version GC". By default, version GC reclaims versions after they
                                - * are one hour old. Because of this, Cloud Spanner cannot perform reads
                                - * at read timestamps more than one hour in the past. This
                                - * restriction also applies to in-progress reads and/or SQL queries whose
                                - * timestamp become too old while executing. Reads and SQL queries with
                                - * too-old read timestamps fail with the error `FAILED_PRECONDITION`.
                                - *
                                - * You can configure and extend the `VERSION_RETENTION_PERIOD` of a
                                - * database up to a period as long as one week, which allows Cloud Spanner
                                - * to perform reads up to one week in the past.
                                - *
                                - * Querying change Streams:
                                - *
                                - * A Change Stream is a schema object that can be configured to watch data
                                - * changes on the entire database, a set of tables, or a set of columns
                                - * in a database.
                                - *
                                - * When a change stream is created, Spanner automatically defines a
                                - * corresponding SQL Table-Valued Function (TVF) that can be used to query
                                - * the change records in the associated change stream using the
                                - * ExecuteStreamingSql API. The name of the TVF for a change stream is
                                - * generated from the name of the change stream: READ_<change_stream_name>.
                                - *
                                - * All queries on change stream TVFs must be executed using the
                                - * ExecuteStreamingSql API with a single-use read-only transaction with a
                                - * strong read-only timestamp_bound. The change stream TVF allows users to
                                - * specify the start_timestamp and end_timestamp for the time range of
                                - * interest. All change records within the retention period is accessible
                                - * using the strong read-only timestamp_bound. All other TransactionOptions
                                - * are invalid for change stream queries.
                                - *
                                - * In addition, if TransactionOptions.read_only.return_read_timestamp is set
                                - * to true, a special value of 2^63 - 2 will be returned in the
                                - * [Transaction][google.spanner.v1.Transaction] message that describes the
                                - * transaction, instead of a valid read timestamp. This special value should be
                                - * discarded and not used for any subsequent queries.
                                - *
                                - * Please see https://cloud.google.com/spanner/docs/change-streams
                                - * for more details on how to query the change stream TVFs.
                                - *
                                - * Partitioned DML transactions:
                                - *
                                - * Partitioned DML transactions are used to execute DML statements with a
                                - * different execution strategy that provides different, and often better,
                                - * scalability properties for large, table-wide operations than DML in a
                                - * ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
                                - * should prefer using ReadWrite transactions.
                                - *
                                - * Partitioned DML partitions the keyspace and runs the DML statement on each
                                - * partition in separate, internal transactions. These transactions commit
                                - * automatically when complete, and run independently from one another.
                                - *
                                - * To reduce lock contention, this execution strategy only acquires read locks
                                - * on rows that match the WHERE clause of the statement. Additionally, the
                                - * smaller per-partition transactions hold locks for less time.
                                - *
                                - * That said, Partitioned DML is not a drop-in replacement for standard DML used
                                - * in ReadWrite transactions.
                                - *
                                - *  - The DML statement must be fully-partitionable. Specifically, the statement
                                - *    must be expressible as the union of many statements which each access only
                                - *    a single row of the table.
                                - *
                                - *  - The statement is not applied atomically to all rows of the table. Rather,
                                - *    the statement is applied atomically to partitions of the table, in
                                - *    independent transactions. Secondary index rows are updated atomically
                                - *    with the base table rows.
                                - *
                                - *  - Partitioned DML does not guarantee exactly-once execution semantics
                                - *    against a partition. The statement will be applied at least once to each
                                - *    partition. It is strongly recommended that the DML statement should be
                                - *    idempotent to avoid unexpected results. For instance, it is potentially
                                - *    dangerous to run a statement such as
                                - *    `UPDATE table SET column = column + 1` as it could be run multiple times
                                - *    against some rows.
                                - *
                                - *  - The partitions are committed automatically - there is no support for
                                - *    Commit or Rollback. If the call returns an error, or if the client issuing
                                - *    the ExecuteSql call dies, it is possible that some rows had the statement
                                - *    executed on them successfully. It is also possible that statement was
                                - *    never executed against other rows.
                                - *
                                - *  - Partitioned DML transactions may only contain the execution of a single
                                - *    DML statement via ExecuteSql or ExecuteStreamingSql.
                                - *
                                - *  - If any error is encountered during the execution of the partitioned DML
                                - *    operation (for instance, a UNIQUE INDEX violation, division by zero, or a
                                - *    value that cannot be stored due to schema constraints), then the
                                - *    operation is stopped at that point and an error is returned. It is
                                - *    possible that at this point, some partitions have been committed (or even
                                - *    committed multiple times), and other partitions have not been run at all.
                                - *
                                - * Given the above, Partitioned DML is good fit for large, database-wide,
                                - * operations that are idempotent, such as deleting old rows from a very large
                                - * table.
                                + * Options to use for transactions.
                                  * 
                                * * Protobuf type {@code google.spanner.v1.TransactionOptions} */ -public final class TransactionOptions extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class TransactionOptions extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.TransactionOptions) TransactionOptionsOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TransactionOptions"); + } + // Use TransactionOptions.newBuilder() to construct. - private TransactionOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private TransactionOptions(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } - private TransactionOptions() {} - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new TransactionOptions(); + private TransactionOptions() { + isolationLevel_ = 0; } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @@ -375,7 +61,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_fieldAccessorTable @@ -384,6 +70,219 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { com.google.spanner.v1.TransactionOptions.Builder.class); } + /** + * + * + *
                                +   * `IsolationLevel` is used when setting the [isolation
                                +   * level](https://cloud.google.com/spanner/docs/isolation-levels) for a
                                +   * transaction.
                                +   * 
                                + * + * Protobuf enum {@code google.spanner.v1.TransactionOptions.IsolationLevel} + */ + public enum IsolationLevel implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
                                +     * Default value.
                                +     *
                                +     * If the value is not specified, the `SERIALIZABLE` isolation level is
                                +     * used.
                                +     * 
                                + * + * ISOLATION_LEVEL_UNSPECIFIED = 0; + */ + ISOLATION_LEVEL_UNSPECIFIED(0), + /** + * + * + *
                                +     * All transactions appear as if they executed in a serial order, even if
                                +     * some of the reads, writes, and other operations of distinct transactions
                                +     * actually occurred in parallel. Spanner assigns commit timestamps that
                                +     * reflect the order of committed transactions to implement this property.
                                +     * Spanner offers a stronger guarantee than serializability called external
                                +     * consistency. For more information, see
                                +     * [TrueTime and external
                                +     * consistency](https://cloud.google.com/spanner/docs/true-time-external-consistency#serializability).
                                +     * 
                                + * + * SERIALIZABLE = 1; + */ + SERIALIZABLE(1), + /** + * + * + *
                                +     * All reads performed during the transaction observe a consistent snapshot
                                +     * of the database, and the transaction is only successfully committed in
                                +     * the absence of conflicts between its updates and any concurrent updates
                                +     * that have occurred since that snapshot. Consequently, in contrast to
                                +     * `SERIALIZABLE` transactions, only write-write conflicts are detected in
                                +     * snapshot transactions.
                                +     *
                                +     * This isolation level does not support read-only and partitioned DML
                                +     * transactions.
                                +     *
                                +     * When `REPEATABLE_READ` is specified on a read-write transaction, the
                                +     * locking semantics default to `OPTIMISTIC`.
                                +     * 
                                + * + * REPEATABLE_READ = 2; + */ + REPEATABLE_READ(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "IsolationLevel"); + } + + /** + * + * + *
                                +     * Default value.
                                +     *
                                +     * If the value is not specified, the `SERIALIZABLE` isolation level is
                                +     * used.
                                +     * 
                                + * + * ISOLATION_LEVEL_UNSPECIFIED = 0; + */ + public static final int ISOLATION_LEVEL_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
                                +     * All transactions appear as if they executed in a serial order, even if
                                +     * some of the reads, writes, and other operations of distinct transactions
                                +     * actually occurred in parallel. Spanner assigns commit timestamps that
                                +     * reflect the order of committed transactions to implement this property.
                                +     * Spanner offers a stronger guarantee than serializability called external
                                +     * consistency. For more information, see
                                +     * [TrueTime and external
                                +     * consistency](https://cloud.google.com/spanner/docs/true-time-external-consistency#serializability).
                                +     * 
                                + * + * SERIALIZABLE = 1; + */ + public static final int SERIALIZABLE_VALUE = 1; + + /** + * + * + *
                                +     * All reads performed during the transaction observe a consistent snapshot
                                +     * of the database, and the transaction is only successfully committed in
                                +     * the absence of conflicts between its updates and any concurrent updates
                                +     * that have occurred since that snapshot. Consequently, in contrast to
                                +     * `SERIALIZABLE` transactions, only write-write conflicts are detected in
                                +     * snapshot transactions.
                                +     *
                                +     * This isolation level does not support read-only and partitioned DML
                                +     * transactions.
                                +     *
                                +     * When `REPEATABLE_READ` is specified on a read-write transaction, the
                                +     * locking semantics default to `OPTIMISTIC`.
                                +     * 
                                + * + * REPEATABLE_READ = 2; + */ + public static final int REPEATABLE_READ_VALUE = 2; + + 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 IsolationLevel 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 IsolationLevel forNumber(int value) { + switch (value) { + case 0: + return ISOLATION_LEVEL_UNSPECIFIED; + case 1: + return SERIALIZABLE; + case 2: + return REPEATABLE_READ; + 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 IsolationLevel findValueByNumber(int number) { + return IsolationLevel.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 com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.TransactionOptions.getDescriptor().getEnumTypes().get(0); + } + + private static final IsolationLevel[] VALUES = values(); + + public static IsolationLevel 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 IsolationLevel(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.TransactionOptions.IsolationLevel) + } + public interface ReadWriteOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.TransactionOptions.ReadWrite) @@ -401,6 +300,7 @@ public interface ReadWriteOrBuilder * @return The enum numeric value on the wire for readLockMode. */ int getReadLockModeValue(); + /** * * @@ -421,8 +321,6 @@ public interface ReadWriteOrBuilder * Optional. Clients should pass the transaction ID of the previous * transaction attempt that was aborted if this transaction is being * executed on a multiplexed session. - * This feature is not yet supported and will result in an UNIMPLEMENTED - * error. * * * @@ -433,6 +331,7 @@ public interface ReadWriteOrBuilder */ com.google.protobuf.ByteString getMultiplexedSessionPreviousTransactionId(); } + /** * * @@ -443,13 +342,24 @@ public interface ReadWriteOrBuilder * * Protobuf type {@code google.spanner.v1.TransactionOptions.ReadWrite} */ - public static final class ReadWrite extends com.google.protobuf.GeneratedMessageV3 + public static final class ReadWrite extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.TransactionOptions.ReadWrite) ReadWriteOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReadWrite"); + } + // Use ReadWrite.newBuilder() to construct. - private ReadWrite(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReadWrite(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -458,19 +368,13 @@ private ReadWrite() { multiplexedSessionPreviousTransactionId_ = com.google.protobuf.ByteString.EMPTY; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReadWrite(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadWrite_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadWrite_fieldAccessorTable @@ -496,7 +400,16 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { *
                                        * Default value.
                                        *
                                -       * If the value is not specified, the pessimistic read lock is used.
                                +       * * If isolation level is
                                +       * [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE],
                                +       * locking semantics default to `PESSIMISTIC`.
                                +       * * If isolation level is
                                +       * [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ],
                                +       * locking semantics default to `OPTIMISTIC`.
                                +       * * See
                                +       * [Concurrency
                                +       * control](https://cloud.google.com/spanner/docs/concurrency-control)
                                +       * for more details.
                                        * 
                                * * READ_LOCK_MODE_UNSPECIFIED = 0; @@ -508,7 +421,17 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { *
                                        * Pessimistic lock mode.
                                        *
                                -       * Read locks are acquired immediately on read.
                                +       * Lock acquisition behavior depends on the isolation level in use. In
                                +       * [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE]
                                +       * isolation, reads and writes acquire necessary locks during transaction
                                +       * statement execution. In
                                +       * [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ]
                                +       * isolation, reads that explicitly request to be locked and writes
                                +       * acquire locks.
                                +       * See
                                +       * [Concurrency
                                +       * control](https://cloud.google.com/spanner/docs/concurrency-control) for
                                +       * details on the types of locks acquired at each transaction step.
                                        * 
                                * * PESSIMISTIC = 1; @@ -520,9 +443,18 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { *
                                        * Optimistic lock mode.
                                        *
                                -       * Locks for reads within the transaction are not acquired on read.
                                -       * Instead the locks are acquired on a commit to validate that
                                -       * read/queried data has not changed since the transaction started.
                                +       * Lock acquisition behavior depends on the isolation level in use. In
                                +       * both
                                +       * [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE]
                                +       * and
                                +       * [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ]
                                +       * isolation, reads and writes do not acquire locks during transaction
                                +       * statement execution.
                                +       * See
                                +       * [Concurrency
                                +       * control](https://cloud.google.com/spanner/docs/concurrency-control) for
                                +       * details on how the guarantees of each isolation level are provided at
                                +       * commit time.
                                        * 
                                * * OPTIMISTIC = 2; @@ -531,39 +463,79 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReadLockMode"); + } + /** * * *
                                        * Default value.
                                        *
                                -       * If the value is not specified, the pessimistic read lock is used.
                                +       * * If isolation level is
                                +       * [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE],
                                +       * locking semantics default to `PESSIMISTIC`.
                                +       * * If isolation level is
                                +       * [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ],
                                +       * locking semantics default to `OPTIMISTIC`.
                                +       * * See
                                +       * [Concurrency
                                +       * control](https://cloud.google.com/spanner/docs/concurrency-control)
                                +       * for more details.
                                        * 
                                * * READ_LOCK_MODE_UNSPECIFIED = 0; */ public static final int READ_LOCK_MODE_UNSPECIFIED_VALUE = 0; + /** * * *
                                        * Pessimistic lock mode.
                                        *
                                -       * Read locks are acquired immediately on read.
                                +       * Lock acquisition behavior depends on the isolation level in use. In
                                +       * [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE]
                                +       * isolation, reads and writes acquire necessary locks during transaction
                                +       * statement execution. In
                                +       * [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ]
                                +       * isolation, reads that explicitly request to be locked and writes
                                +       * acquire locks.
                                +       * See
                                +       * [Concurrency
                                +       * control](https://cloud.google.com/spanner/docs/concurrency-control) for
                                +       * details on the types of locks acquired at each transaction step.
                                        * 
                                * * PESSIMISTIC = 1; */ public static final int PESSIMISTIC_VALUE = 1; + /** * * *
                                        * Optimistic lock mode.
                                        *
                                -       * Locks for reads within the transaction are not acquired on read.
                                -       * Instead the locks are acquired on a commit to validate that
                                -       * read/queried data has not changed since the transaction started.
                                +       * Lock acquisition behavior depends on the isolation level in use. In
                                +       * both
                                +       * [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE]
                                +       * and
                                +       * [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ]
                                +       * isolation, reads and writes do not acquire locks during transaction
                                +       * statement execution.
                                +       * See
                                +       * [Concurrency
                                +       * control](https://cloud.google.com/spanner/docs/concurrency-control) for
                                +       * details on how the guarantees of each isolation level are provided at
                                +       * commit time.
                                        * 
                                * * OPTIMISTIC = 2; @@ -628,7 +600,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.TransactionOptions.ReadWrite.getDescriptor() .getEnumTypes() .get(0); @@ -657,6 +629,7 @@ private ReadLockMode(int value) { public static final int READ_LOCK_MODE_FIELD_NUMBER = 1; private int readLockMode_ = 0; + /** * * @@ -672,6 +645,7 @@ private ReadLockMode(int value) { public int getReadLockModeValue() { return readLockMode_; } + /** * * @@ -695,6 +669,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode getReadLo public static final int MULTIPLEXED_SESSION_PREVIOUS_TRANSACTION_ID_FIELD_NUMBER = 2; private com.google.protobuf.ByteString multiplexedSessionPreviousTransactionId_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -702,8 +677,6 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode getReadLo * Optional. Clients should pass the transaction ID of the previous * transaction attempt that was aborted if this transaction is being * executed on a multiplexed session. - * This feature is not yet supported and will result in an UNIMPLEMENTED - * error. * * * @@ -836,38 +809,38 @@ public static com.google.spanner.v1.TransactionOptions.ReadWrite parseFrom( public static com.google.spanner.v1.TransactionOptions.ReadWrite parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.ReadWrite parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions.ReadWrite parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.ReadWrite parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions.ReadWrite parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.ReadWrite parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -890,11 +863,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -905,8 +878,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.TransactionOptions.ReadWrite} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.TransactionOptions.ReadWrite) com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder { @@ -916,7 +888,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadWrite_fieldAccessorTable @@ -928,7 +900,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.TransactionOptions.ReadWrite.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -983,41 +955,6 @@ private void buildPartial0(com.google.spanner.v1.TransactionOptions.ReadWrite re } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.TransactionOptions.ReadWrite) { @@ -1034,8 +971,7 @@ public Builder mergeFrom(com.google.spanner.v1.TransactionOptions.ReadWrite othe if (other.readLockMode_ != 0) { setReadLockModeValue(other.getReadLockModeValue()); } - if (other.getMultiplexedSessionPreviousTransactionId() - != com.google.protobuf.ByteString.EMPTY) { + if (!other.getMultiplexedSessionPreviousTransactionId().isEmpty()) { setMultiplexedSessionPreviousTransactionId( other.getMultiplexedSessionPreviousTransactionId()); } @@ -1097,6 +1033,7 @@ public Builder mergeFrom( private int bitField0_; private int readLockMode_ = 0; + /** * * @@ -1113,6 +1050,7 @@ public Builder mergeFrom( public int getReadLockModeValue() { return readLockMode_; } + /** * * @@ -1132,6 +1070,7 @@ public Builder setReadLockModeValue(int value) { onChanged(); return this; } + /** * * @@ -1153,6 +1092,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode getReadLo ? com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode.UNRECOGNIZED : result; } + /** * * @@ -1176,6 +1116,7 @@ public Builder setReadLockMode( onChanged(); return this; } + /** * * @@ -1197,6 +1138,7 @@ public Builder clearReadLockMode() { private com.google.protobuf.ByteString multiplexedSessionPreviousTransactionId_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1204,8 +1146,6 @@ public Builder clearReadLockMode() { * Optional. Clients should pass the transaction ID of the previous * transaction attempt that was aborted if this transaction is being * executed on a multiplexed session. - * This feature is not yet supported and will result in an UNIMPLEMENTED - * error. * * * @@ -1218,6 +1158,7 @@ public Builder clearReadLockMode() { public com.google.protobuf.ByteString getMultiplexedSessionPreviousTransactionId() { return multiplexedSessionPreviousTransactionId_; } + /** * * @@ -1225,8 +1166,6 @@ public com.google.protobuf.ByteString getMultiplexedSessionPreviousTransactionId * Optional. Clients should pass the transaction ID of the previous * transaction attempt that was aborted if this transaction is being * executed on a multiplexed session. - * This feature is not yet supported and will result in an UNIMPLEMENTED - * error. * * * @@ -1246,6 +1185,7 @@ public Builder setMultiplexedSessionPreviousTransactionId( onChanged(); return this; } + /** * * @@ -1253,8 +1193,6 @@ public Builder setMultiplexedSessionPreviousTransactionId( * Optional. Clients should pass the transaction ID of the previous * transaction attempt that was aborted if this transaction is being * executed on a multiplexed session. - * This feature is not yet supported and will result in an UNIMPLEMENTED - * error. * * * @@ -1271,18 +1209,6 @@ public Builder clearMultiplexedSessionPreviousTransactionId() { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.TransactionOptions.ReadWrite) } @@ -1339,6 +1265,7 @@ public interface PartitionedDmlOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.TransactionOptions.PartitionedDml) com.google.protobuf.MessageOrBuilder {} + /** * * @@ -1348,31 +1275,36 @@ public interface PartitionedDmlOrBuilder * * Protobuf type {@code google.spanner.v1.TransactionOptions.PartitionedDml} */ - public static final class PartitionedDml extends com.google.protobuf.GeneratedMessageV3 + public static final class PartitionedDml extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.TransactionOptions.PartitionedDml) PartitionedDmlOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PartitionedDml"); + } + // Use PartitionedDml.newBuilder() to construct. - private PartitionedDml(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private PartitionedDml(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private PartitionedDml() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new PartitionedDml(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_fieldAccessorTable @@ -1473,38 +1405,38 @@ public static com.google.spanner.v1.TransactionOptions.PartitionedDml parseFrom( public static com.google.spanner.v1.TransactionOptions.PartitionedDml parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.PartitionedDml parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions.PartitionedDml parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.PartitionedDml parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions.PartitionedDml parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.PartitionedDml parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -1528,11 +1460,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -1542,8 +1474,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.TransactionOptions.PartitionedDml} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.TransactionOptions.PartitionedDml) com.google.spanner.v1.TransactionOptions.PartitionedDmlOrBuilder { @@ -1553,7 +1484,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_fieldAccessorTable @@ -1565,7 +1496,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.TransactionOptions.PartitionedDml.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -1603,41 +1534,6 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml buildPartial() { return result; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.TransactionOptions.PartitionedDml) { @@ -1694,18 +1590,6 @@ public Builder mergeFrom( return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.TransactionOptions.PartitionedDml) } @@ -1776,6 +1660,7 @@ public interface ReadOnlyOrBuilder * @return Whether the strong field is set. */ boolean hasStrong(); + /** * * @@ -1811,6 +1696,7 @@ public interface ReadOnlyOrBuilder * @return Whether the minReadTimestamp field is set. */ boolean hasMinReadTimestamp(); + /** * * @@ -1832,6 +1718,7 @@ public interface ReadOnlyOrBuilder * @return The minReadTimestamp. */ com.google.protobuf.Timestamp getMinReadTimestamp(); + /** * * @@ -1876,6 +1763,7 @@ public interface ReadOnlyOrBuilder * @return Whether the maxStaleness field is set. */ boolean hasMaxStaleness(); + /** * * @@ -1900,6 +1788,7 @@ public interface ReadOnlyOrBuilder * @return The maxStaleness. */ com.google.protobuf.Duration getMaxStaleness(); + /** * * @@ -1930,7 +1819,7 @@ public interface ReadOnlyOrBuilder * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -1946,6 +1835,7 @@ public interface ReadOnlyOrBuilder * @return Whether the readTimestamp field is set. */ boolean hasReadTimestamp(); + /** * * @@ -1953,7 +1843,7 @@ public interface ReadOnlyOrBuilder * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -1969,6 +1859,7 @@ public interface ReadOnlyOrBuilder * @return The readTimestamp. */ com.google.protobuf.Timestamp getReadTimestamp(); + /** * * @@ -1976,7 +1867,7 @@ public interface ReadOnlyOrBuilder * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -2013,6 +1904,7 @@ public interface ReadOnlyOrBuilder * @return Whether the exactStaleness field is set. */ boolean hasExactStaleness(); + /** * * @@ -2035,6 +1927,7 @@ public interface ReadOnlyOrBuilder * @return The exactStaleness. */ com.google.protobuf.Duration getExactStaleness(); + /** * * @@ -2073,6 +1966,7 @@ public interface ReadOnlyOrBuilder com.google.spanner.v1.TransactionOptions.ReadOnly.TimestampBoundCase getTimestampBoundCase(); } + /** * * @@ -2082,31 +1976,36 @@ public interface ReadOnlyOrBuilder * * Protobuf type {@code google.spanner.v1.TransactionOptions.ReadOnly} */ - public static final class ReadOnly extends com.google.protobuf.GeneratedMessageV3 + public static final class ReadOnly extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.TransactionOptions.ReadOnly) ReadOnlyOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReadOnly"); + } + // Use ReadOnly.newBuilder() to construct. - private ReadOnly(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private ReadOnly(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private ReadOnly() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ReadOnly(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadOnly_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadOnly_fieldAccessorTable @@ -2135,6 +2034,7 @@ public enum TimestampBoundCase private TimestampBoundCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -2174,6 +2074,7 @@ public TimestampBoundCase getTimestampBoundCase() { } public static final int STRONG_FIELD_NUMBER = 1; + /** * * @@ -2190,6 +2091,7 @@ public TimestampBoundCase getTimestampBoundCase() { public boolean hasStrong() { return timestampBoundCase_ == 1; } + /** * * @@ -2211,6 +2113,7 @@ public boolean getStrong() { } public static final int MIN_READ_TIMESTAMP_FIELD_NUMBER = 2; + /** * * @@ -2235,6 +2138,7 @@ public boolean getStrong() { public boolean hasMinReadTimestamp() { return timestampBoundCase_ == 2; } + /** * * @@ -2262,6 +2166,7 @@ public com.google.protobuf.Timestamp getMinReadTimestamp() { } return com.google.protobuf.Timestamp.getDefaultInstance(); } + /** * * @@ -2289,6 +2194,7 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { } public static final int MAX_STALENESS_FIELD_NUMBER = 3; + /** * * @@ -2316,6 +2222,7 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { public boolean hasMaxStaleness() { return timestampBoundCase_ == 3; } + /** * * @@ -2346,6 +2253,7 @@ public com.google.protobuf.Duration getMaxStaleness() { } return com.google.protobuf.Duration.getDefaultInstance(); } + /** * * @@ -2376,6 +2284,7 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { } public static final int READ_TIMESTAMP_FIELD_NUMBER = 4; + /** * * @@ -2383,7 +2292,7 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -2402,6 +2311,7 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { public boolean hasReadTimestamp() { return timestampBoundCase_ == 4; } + /** * * @@ -2409,7 +2319,7 @@ public boolean hasReadTimestamp() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -2431,6 +2341,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { } return com.google.protobuf.Timestamp.getDefaultInstance(); } + /** * * @@ -2438,7 +2349,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -2460,6 +2371,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { } public static final int EXACT_STALENESS_FIELD_NUMBER = 5; + /** * * @@ -2485,6 +2397,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { public boolean hasExactStaleness() { return timestampBoundCase_ == 5; } + /** * * @@ -2513,6 +2426,7 @@ public com.google.protobuf.Duration getExactStaleness() { } return com.google.protobuf.Duration.getDefaultInstance(); } + /** * * @@ -2542,6 +2456,7 @@ public com.google.protobuf.DurationOrBuilder getExactStalenessOrBuilder() { public static final int RETURN_READ_TIMESTAMP_FIELD_NUMBER = 6; private boolean returnReadTimestamp_ = false; + /** * * @@ -2745,38 +2660,38 @@ public static com.google.spanner.v1.TransactionOptions.ReadOnly parseFrom( public static com.google.spanner.v1.TransactionOptions.ReadOnly parseFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.ReadOnly parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions.ReadOnly parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.ReadOnly parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions.ReadOnly parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions.ReadOnly parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -2799,11 +2714,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -2813,8 +2728,7 @@ protected Builder newBuilderForType( * * Protobuf type {@code google.spanner.v1.TransactionOptions.ReadOnly} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.TransactionOptions.ReadOnly) com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder { @@ -2824,7 +2738,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadOnly_fieldAccessorTable @@ -2836,7 +2750,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.TransactionOptions.ReadOnly.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -2918,41 +2832,6 @@ private void buildPartialOneofs(com.google.spanner.v1.TransactionOptions.ReadOnl } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.TransactionOptions.ReadOnly) { @@ -3035,26 +2914,28 @@ public Builder mergeFrom( case 18: { input.readMessage( - getMinReadTimestampFieldBuilder().getBuilder(), extensionRegistry); + internalGetMinReadTimestampFieldBuilder().getBuilder(), extensionRegistry); timestampBoundCase_ = 2; break; } // case 18 case 26: { - input.readMessage(getMaxStalenessFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetMaxStalenessFieldBuilder().getBuilder(), extensionRegistry); timestampBoundCase_ = 3; break; } // case 26 case 34: { - input.readMessage(getReadTimestampFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetReadTimestampFieldBuilder().getBuilder(), extensionRegistry); timestampBoundCase_ = 4; break; } // case 34 case 42: { input.readMessage( - getExactStalenessFieldBuilder().getBuilder(), extensionRegistry); + internalGetExactStalenessFieldBuilder().getBuilder(), extensionRegistry); timestampBoundCase_ = 5; break; } // case 42 @@ -3112,6 +2993,7 @@ public Builder clearTimestampBound() { public boolean hasStrong() { return timestampBoundCase_ == 1; } + /** * * @@ -3130,6 +3012,7 @@ public boolean getStrong() { } return false; } + /** * * @@ -3150,6 +3033,7 @@ public Builder setStrong(boolean value) { onChanged(); return this; } + /** * * @@ -3171,11 +3055,12 @@ public Builder clearStrong() { return this; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> minReadTimestampBuilder_; + /** * * @@ -3200,6 +3085,7 @@ public Builder clearStrong() { public boolean hasMinReadTimestamp() { return timestampBoundCase_ == 2; } + /** * * @@ -3234,6 +3120,7 @@ public com.google.protobuf.Timestamp getMinReadTimestamp() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -3265,6 +3152,7 @@ public Builder setMinReadTimestamp(com.google.protobuf.Timestamp value) { timestampBoundCase_ = 2; return this; } + /** * * @@ -3293,6 +3181,7 @@ public Builder setMinReadTimestamp(com.google.protobuf.Timestamp.Builder builder timestampBoundCase_ = 2; return this; } + /** * * @@ -3334,6 +3223,7 @@ public Builder mergeMinReadTimestamp(com.google.protobuf.Timestamp value) { timestampBoundCase_ = 2; return this; } + /** * * @@ -3368,6 +3258,7 @@ public Builder clearMinReadTimestamp() { } return this; } + /** * * @@ -3387,8 +3278,9 @@ public Builder clearMinReadTimestamp() { * .google.protobuf.Timestamp min_read_timestamp = 2; */ public com.google.protobuf.Timestamp.Builder getMinReadTimestampBuilder() { - return getMinReadTimestampFieldBuilder().getBuilder(); + return internalGetMinReadTimestampFieldBuilder().getBuilder(); } + /** * * @@ -3418,6 +3310,7 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -3436,17 +3329,17 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { * * .google.protobuf.Timestamp min_read_timestamp = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getMinReadTimestampFieldBuilder() { + internalGetMinReadTimestampFieldBuilder() { if (minReadTimestampBuilder_ == null) { if (!(timestampBoundCase_ == 2)) { timestampBound_ = com.google.protobuf.Timestamp.getDefaultInstance(); } minReadTimestampBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -3460,11 +3353,12 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { return minReadTimestampBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> maxStalenessBuilder_; + /** * * @@ -3492,6 +3386,7 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { public boolean hasMaxStaleness() { return timestampBoundCase_ == 3; } + /** * * @@ -3529,6 +3424,7 @@ public com.google.protobuf.Duration getMaxStaleness() { return com.google.protobuf.Duration.getDefaultInstance(); } } + /** * * @@ -3563,6 +3459,7 @@ public Builder setMaxStaleness(com.google.protobuf.Duration value) { timestampBoundCase_ = 3; return this; } + /** * * @@ -3594,6 +3491,7 @@ public Builder setMaxStaleness(com.google.protobuf.Duration.Builder builderForVa timestampBoundCase_ = 3; return this; } + /** * * @@ -3638,6 +3536,7 @@ public Builder mergeMaxStaleness(com.google.protobuf.Duration value) { timestampBoundCase_ = 3; return this; } + /** * * @@ -3675,6 +3574,7 @@ public Builder clearMaxStaleness() { } return this; } + /** * * @@ -3697,8 +3597,9 @@ public Builder clearMaxStaleness() { * .google.protobuf.Duration max_staleness = 3; */ public com.google.protobuf.Duration.Builder getMaxStalenessBuilder() { - return getMaxStalenessFieldBuilder().getBuilder(); + return internalGetMaxStalenessFieldBuilder().getBuilder(); } + /** * * @@ -3731,6 +3632,7 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { return com.google.protobuf.Duration.getDefaultInstance(); } } + /** * * @@ -3752,17 +3654,17 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * * .google.protobuf.Duration max_staleness = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> - getMaxStalenessFieldBuilder() { + internalGetMaxStalenessFieldBuilder() { if (maxStalenessBuilder_ == null) { if (!(timestampBoundCase_ == 3)) { timestampBound_ = com.google.protobuf.Duration.getDefaultInstance(); } maxStalenessBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>( @@ -3776,11 +3678,12 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { return maxStalenessBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> readTimestampBuilder_; + /** * * @@ -3788,7 +3691,7 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -3807,6 +3710,7 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { public boolean hasReadTimestamp() { return timestampBoundCase_ == 4; } + /** * * @@ -3814,7 +3718,7 @@ public boolean hasReadTimestamp() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -3843,6 +3747,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -3850,7 +3755,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -3876,6 +3781,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp value) { timestampBoundCase_ = 4; return this; } + /** * * @@ -3883,7 +3789,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp value) { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -3906,6 +3812,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp.Builder builderFor timestampBoundCase_ = 4; return this; } + /** * * @@ -3913,7 +3820,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp.Builder builderFor * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -3949,6 +3856,7 @@ public Builder mergeReadTimestamp(com.google.protobuf.Timestamp value) { timestampBoundCase_ = 4; return this; } + /** * * @@ -3956,7 +3864,7 @@ public Builder mergeReadTimestamp(com.google.protobuf.Timestamp value) { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -3985,6 +3893,7 @@ public Builder clearReadTimestamp() { } return this; } + /** * * @@ -3992,7 +3901,7 @@ public Builder clearReadTimestamp() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -4006,8 +3915,9 @@ public Builder clearReadTimestamp() { * .google.protobuf.Timestamp read_timestamp = 4; */ public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { - return getReadTimestampFieldBuilder().getBuilder(); + return internalGetReadTimestampFieldBuilder().getBuilder(); } + /** * * @@ -4015,7 +3925,7 @@ public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -4039,6 +3949,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -4046,7 +3957,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { * Executes all reads at the given timestamp. Unlike other modes, * reads at a specific timestamp are repeatable; the same read at * the same timestamp always returns the same data. If the - * timestamp is in the future, the read will block until the + * timestamp is in the future, the read is blocked until the * specified timestamp, modulo the read's deadline. * * Useful for large scale consistent reads such as mapreduces, or @@ -4059,17 +3970,17 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { * * .google.protobuf.Timestamp read_timestamp = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getReadTimestampFieldBuilder() { + internalGetReadTimestampFieldBuilder() { if (readTimestampBuilder_ == null) { if (!(timestampBoundCase_ == 4)) { timestampBound_ = com.google.protobuf.Timestamp.getDefaultInstance(); } readTimestampBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -4083,11 +3994,12 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { return readTimestampBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> exactStalenessBuilder_; + /** * * @@ -4113,6 +4025,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { public boolean hasExactStaleness() { return timestampBoundCase_ == 5; } + /** * * @@ -4148,6 +4061,7 @@ public com.google.protobuf.Duration getExactStaleness() { return com.google.protobuf.Duration.getDefaultInstance(); } } + /** * * @@ -4180,6 +4094,7 @@ public Builder setExactStaleness(com.google.protobuf.Duration value) { timestampBoundCase_ = 5; return this; } + /** * * @@ -4209,6 +4124,7 @@ public Builder setExactStaleness(com.google.protobuf.Duration.Builder builderFor timestampBoundCase_ = 5; return this; } + /** * * @@ -4251,6 +4167,7 @@ public Builder mergeExactStaleness(com.google.protobuf.Duration value) { timestampBoundCase_ = 5; return this; } + /** * * @@ -4286,6 +4203,7 @@ public Builder clearExactStaleness() { } return this; } + /** * * @@ -4306,8 +4224,9 @@ public Builder clearExactStaleness() { * .google.protobuf.Duration exact_staleness = 5; */ public com.google.protobuf.Duration.Builder getExactStalenessBuilder() { - return getExactStalenessFieldBuilder().getBuilder(); + return internalGetExactStalenessFieldBuilder().getBuilder(); } + /** * * @@ -4338,6 +4257,7 @@ public com.google.protobuf.DurationOrBuilder getExactStalenessOrBuilder() { return com.google.protobuf.Duration.getDefaultInstance(); } } + /** * * @@ -4357,17 +4277,17 @@ public com.google.protobuf.DurationOrBuilder getExactStalenessOrBuilder() { * * .google.protobuf.Duration exact_staleness = 5; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> - getExactStalenessFieldBuilder() { + internalGetExactStalenessFieldBuilder() { if (exactStalenessBuilder_ == null) { if (!(timestampBoundCase_ == 5)) { timestampBound_ = com.google.protobuf.Duration.getDefaultInstance(); } exactStalenessBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>( @@ -4382,6 +4302,7 @@ public com.google.protobuf.DurationOrBuilder getExactStalenessOrBuilder() { } private boolean returnReadTimestamp_; + /** * * @@ -4399,6 +4320,7 @@ public com.google.protobuf.DurationOrBuilder getExactStalenessOrBuilder() { public boolean getReturnReadTimestamp() { return returnReadTimestamp_; } + /** * * @@ -4420,6 +4342,7 @@ public Builder setReturnReadTimestamp(boolean value) { onChanged(); return this; } + /** * * @@ -4440,18 +4363,6 @@ public Builder clearReturnReadTimestamp() { return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.TransactionOptions.ReadOnly) } @@ -4522,6 +4433,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. @@ -4557,6 +4469,7 @@ public ModeCase getModeCase() { } public static final int READ_WRITE_FIELD_NUMBER = 1; + /** * * @@ -4576,6 +4489,7 @@ public ModeCase getModeCase() { public boolean hasReadWrite() { return modeCase_ == 1; } + /** * * @@ -4598,6 +4512,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite getReadWrite() { } return com.google.spanner.v1.TransactionOptions.ReadWrite.getDefaultInstance(); } + /** * * @@ -4620,6 +4535,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO } public static final int PARTITIONED_DML_FIELD_NUMBER = 3; + /** * * @@ -4639,6 +4555,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO public boolean hasPartitionedDml() { return modeCase_ == 3; } + /** * * @@ -4661,6 +4578,7 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml } return com.google.spanner.v1.TransactionOptions.PartitionedDml.getDefaultInstance(); } + /** * * @@ -4684,11 +4602,12 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml } public static final int READ_ONLY_FIELD_NUMBER = 2; + /** * * *
                                -   * Transaction will not write.
                                +   * Transaction does not write.
                                    *
                                    * Authorization to begin a read-only transaction requires
                                    * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -4703,11 +4622,12 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml
                                   public boolean hasReadOnly() {
                                     return modeCase_ == 2;
                                   }
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * Transaction will not write.
                                +   * Transaction does not write.
                                    *
                                    * Authorization to begin a read-only transaction requires
                                    * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -4725,11 +4645,12 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getReadOnly() {
                                     }
                                     return com.google.spanner.v1.TransactionOptions.ReadOnly.getDefaultInstance();
                                   }
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * Transaction will not write.
                                +   * Transaction does not write.
                                    *
                                    * Authorization to begin a read-only transaction requires
                                    * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -4748,24 +4669,29 @@ public com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrB
                                 
                                   public static final int EXCLUDE_TXN_FROM_CHANGE_STREAMS_FIELD_NUMBER = 5;
                                   private boolean excludeTxnFromChangeStreams_ = false;
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * When `exclude_txn_from_change_streams` is set to `true`:
                                -   *  * Mutations from this transaction will not be recorded in change streams
                                -   *  with DDL option `allow_txn_exclusion=true` that are tracking columns
                                -   *  modified by these transactions.
                                -   *  * Mutations from this transaction will be recorded in change streams with
                                -   *  DDL option `allow_txn_exclusion=false or not set` that are tracking
                                -   *  columns modified by these transactions.
                                +   * When `exclude_txn_from_change_streams` is set to `true`, it prevents read
                                +   * or write transactions from being tracked in change streams.
                                +   *
                                +   * * If the DDL option `allow_txn_exclusion` is set to `true`, then the
                                +   * updates
                                +   * made within this transaction aren't recorded in the change stream.
                                +   *
                                +   * * If you don't set the DDL option `allow_txn_exclusion` or if it's
                                +   * set to `false`, then the updates made within this transaction are
                                +   * recorded in the change stream.
                                    *
                                    * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -   * mutations from this transaction will be recorded in all change streams that
                                -   * are tracking columns modified by these transactions.
                                -   * `exclude_txn_from_change_streams` may only be specified for read-write or
                                -   * partitioned-dml transactions, otherwise the API will return an
                                -   * `INVALID_ARGUMENT` error.
                                +   * modifications from this transaction are recorded in all change streams
                                +   * that are tracking columns modified by these transactions.
                                +   *
                                +   * The `exclude_txn_from_change_streams` option can only be specified
                                +   * for read-write or partitioned DML transactions, otherwise the API returns
                                +   * an `INVALID_ARGUMENT` error.
                                    * 
                                * * bool exclude_txn_from_change_streams = 5; @@ -4777,6 +4703,45 @@ public boolean getExcludeTxnFromChangeStreams() { return excludeTxnFromChangeStreams_; } + public static final int ISOLATION_LEVEL_FIELD_NUMBER = 6; + private int isolationLevel_ = 0; + + /** + * + * + *
                                +   * Isolation level for the transaction.
                                +   * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The enum numeric value on the wire for isolationLevel. + */ + @java.lang.Override + public int getIsolationLevelValue() { + return isolationLevel_; + } + + /** + * + * + *
                                +   * Isolation level for the transaction.
                                +   * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The isolationLevel. + */ + @java.lang.Override + public com.google.spanner.v1.TransactionOptions.IsolationLevel getIsolationLevel() { + com.google.spanner.v1.TransactionOptions.IsolationLevel result = + com.google.spanner.v1.TransactionOptions.IsolationLevel.forNumber(isolationLevel_); + return result == null + ? com.google.spanner.v1.TransactionOptions.IsolationLevel.UNRECOGNIZED + : result; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -4803,6 +4768,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (excludeTxnFromChangeStreams_ != false) { output.writeBool(5, excludeTxnFromChangeStreams_); } + if (isolationLevel_ + != com.google.spanner.v1.TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED + .getNumber()) { + output.writeEnum(6, isolationLevel_); + } getUnknownFields().writeTo(output); } @@ -4831,6 +4801,11 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeBoolSize(5, excludeTxnFromChangeStreams_); } + if (isolationLevel_ + != com.google.spanner.v1.TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(6, isolationLevel_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -4847,6 +4822,7 @@ public boolean equals(final java.lang.Object obj) { com.google.spanner.v1.TransactionOptions other = (com.google.spanner.v1.TransactionOptions) obj; if (getExcludeTxnFromChangeStreams() != other.getExcludeTxnFromChangeStreams()) return false; + if (isolationLevel_ != other.isolationLevel_) return false; if (!getModeCase().equals(other.getModeCase())) return false; switch (modeCase_) { case 1: @@ -4874,6 +4850,8 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + EXCLUDE_TXN_FROM_CHANGE_STREAMS_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getExcludeTxnFromChangeStreams()); + hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER; + hash = (53 * hash) + isolationLevel_; switch (modeCase_) { case 1: hash = (37 * hash) + READ_WRITE_FIELD_NUMBER; @@ -4932,38 +4910,38 @@ public static com.google.spanner.v1.TransactionOptions parseFrom( public static com.google.spanner.v1.TransactionOptions parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionOptions parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionOptions parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -4986,343 +4964,21 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * *
                                -   * Transactions:
                                -   *
                                -   * Each session can have at most one active transaction at a time (note that
                                -   * standalone reads and queries use a transaction internally and do count
                                -   * towards the one transaction limit). After the active transaction is
                                -   * completed, the session can immediately be re-used for the next transaction.
                                -   * It is not necessary to create a new session for each transaction.
                                -   *
                                -   * Transaction modes:
                                -   *
                                -   * Cloud Spanner supports three transaction modes:
                                -   *
                                -   *   1. Locking read-write. This type of transaction is the only way
                                -   *      to write data into Cloud Spanner. These transactions rely on
                                -   *      pessimistic locking and, if necessary, two-phase commit.
                                -   *      Locking read-write transactions may abort, requiring the
                                -   *      application to retry.
                                -   *
                                -   *   2. Snapshot read-only. Snapshot read-only transactions provide guaranteed
                                -   *      consistency across several reads, but do not allow
                                -   *      writes. Snapshot read-only transactions can be configured to read at
                                -   *      timestamps in the past, or configured to perform a strong read
                                -   *      (where Spanner will select a timestamp such that the read is
                                -   *      guaranteed to see the effects of all transactions that have committed
                                -   *      before the start of the read). Snapshot read-only transactions do not
                                -   *      need to be committed.
                                -   *
                                -   *      Queries on change streams must be performed with the snapshot read-only
                                -   *      transaction mode, specifying a strong read. Please see
                                -   *      [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]
                                -   *      for more details.
                                -   *
                                -   *   3. Partitioned DML. This type of transaction is used to execute
                                -   *      a single Partitioned DML statement. Partitioned DML partitions
                                -   *      the key space and runs the DML statement over each partition
                                -   *      in parallel using separate, internal transactions that commit
                                -   *      independently. Partitioned DML transactions do not need to be
                                -   *      committed.
                                -   *
                                -   * For transactions that only read, snapshot read-only transactions
                                -   * provide simpler semantics and are almost always faster. In
                                -   * particular, read-only transactions do not take locks, so they do
                                -   * not conflict with read-write transactions. As a consequence of not
                                -   * taking locks, they also do not abort, so retry loops are not needed.
                                -   *
                                -   * Transactions may only read-write data in a single database. They
                                -   * may, however, read-write data in different tables within that
                                -   * database.
                                -   *
                                -   * Locking read-write transactions:
                                -   *
                                -   * Locking transactions may be used to atomically read-modify-write
                                -   * data anywhere in a database. This type of transaction is externally
                                -   * consistent.
                                -   *
                                -   * Clients should attempt to minimize the amount of time a transaction
                                -   * is active. Faster transactions commit with higher probability
                                -   * and cause less contention. Cloud Spanner attempts to keep read locks
                                -   * active as long as the transaction continues to do reads, and the
                                -   * transaction has not been terminated by
                                -   * [Commit][google.spanner.v1.Spanner.Commit] or
                                -   * [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of
                                -   * inactivity at the client may cause Cloud Spanner to release a
                                -   * transaction's locks and abort it.
                                -   *
                                -   * Conceptually, a read-write transaction consists of zero or more
                                -   * reads or SQL statements followed by
                                -   * [Commit][google.spanner.v1.Spanner.Commit]. At any time before
                                -   * [Commit][google.spanner.v1.Spanner.Commit], the client can send a
                                -   * [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the
                                -   * transaction.
                                -   *
                                -   * Semantics:
                                -   *
                                -   * Cloud Spanner can commit the transaction if all read locks it acquired
                                -   * are still valid at commit time, and it is able to acquire write
                                -   * locks for all writes. Cloud Spanner can abort the transaction for any
                                -   * reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
                                -   * that the transaction has not modified any user data in Cloud Spanner.
                                -   *
                                -   * Unless the transaction commits, Cloud Spanner makes no guarantees about
                                -   * how long the transaction's locks were held for. It is an error to
                                -   * use Cloud Spanner locks for any sort of mutual exclusion other than
                                -   * between Cloud Spanner transactions themselves.
                                -   *
                                -   * Retrying aborted transactions:
                                -   *
                                -   * When a transaction aborts, the application can choose to retry the
                                -   * whole transaction again. To maximize the chances of successfully
                                -   * committing the retry, the client should execute the retry in the
                                -   * same session as the original attempt. The original session's lock
                                -   * priority increases with each consecutive abort, meaning that each
                                -   * attempt has a slightly better chance of success than the previous.
                                -   *
                                -   * Under some circumstances (for example, many transactions attempting to
                                -   * modify the same row(s)), a transaction can abort many times in a
                                -   * short period before successfully committing. Thus, it is not a good
                                -   * idea to cap the number of retries a transaction can attempt;
                                -   * instead, it is better to limit the total amount of time spent
                                -   * retrying.
                                -   *
                                -   * Idle transactions:
                                -   *
                                -   * A transaction is considered idle if it has no outstanding reads or
                                -   * SQL queries and has not started a read or SQL query within the last 10
                                -   * seconds. Idle transactions can be aborted by Cloud Spanner so that they
                                -   * don't hold on to locks indefinitely. If an idle transaction is aborted, the
                                -   * commit will fail with error `ABORTED`.
                                -   *
                                -   * If this behavior is undesirable, periodically executing a simple
                                -   * SQL query in the transaction (for example, `SELECT 1`) prevents the
                                -   * transaction from becoming idle.
                                -   *
                                -   * Snapshot read-only transactions:
                                -   *
                                -   * Snapshot read-only transactions provides a simpler method than
                                -   * locking read-write transactions for doing several consistent
                                -   * reads. However, this type of transaction does not support writes.
                                -   *
                                -   * Snapshot transactions do not take locks. Instead, they work by
                                -   * choosing a Cloud Spanner timestamp, then executing all reads at that
                                -   * timestamp. Since they do not acquire locks, they do not block
                                -   * concurrent read-write transactions.
                                -   *
                                -   * Unlike locking read-write transactions, snapshot read-only
                                -   * transactions never abort. They can fail if the chosen read
                                -   * timestamp is garbage collected; however, the default garbage
                                -   * collection policy is generous enough that most applications do not
                                -   * need to worry about this in practice.
                                -   *
                                -   * Snapshot read-only transactions do not need to call
                                -   * [Commit][google.spanner.v1.Spanner.Commit] or
                                -   * [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not
                                -   * permitted to do so).
                                -   *
                                -   * To execute a snapshot transaction, the client specifies a timestamp
                                -   * bound, which tells Cloud Spanner how to choose a read timestamp.
                                -   *
                                -   * The types of timestamp bound are:
                                -   *
                                -   *   - Strong (the default).
                                -   *   - Bounded staleness.
                                -   *   - Exact staleness.
                                -   *
                                -   * If the Cloud Spanner database to be read is geographically distributed,
                                -   * stale read-only transactions can execute more quickly than strong
                                -   * or read-write transactions, because they are able to execute far
                                -   * from the leader replica.
                                -   *
                                -   * Each type of timestamp bound is discussed in detail below.
                                -   *
                                -   * Strong: Strong reads are guaranteed to see the effects of all transactions
                                -   * that have committed before the start of the read. Furthermore, all
                                -   * rows yielded by a single read are consistent with each other -- if
                                -   * any part of the read observes a transaction, all parts of the read
                                -   * see the transaction.
                                -   *
                                -   * Strong reads are not repeatable: two consecutive strong read-only
                                -   * transactions might return inconsistent results if there are
                                -   * concurrent writes. If consistency across reads is required, the
                                -   * reads should be executed within a transaction or at an exact read
                                -   * timestamp.
                                -   *
                                -   * Queries on change streams (see below for more details) must also specify
                                -   * the strong read timestamp bound.
                                -   *
                                -   * See
                                -   * [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong].
                                -   *
                                -   * Exact staleness:
                                -   *
                                -   * These timestamp bounds execute reads at a user-specified
                                -   * timestamp. Reads at a timestamp are guaranteed to see a consistent
                                -   * prefix of the global transaction history: they observe
                                -   * modifications done by all transactions with a commit timestamp less than or
                                -   * equal to the read timestamp, and observe none of the modifications done by
                                -   * transactions with a larger commit timestamp. They will block until
                                -   * all conflicting transactions that may be assigned commit timestamps
                                -   * <= the read timestamp have finished.
                                -   *
                                -   * The timestamp can either be expressed as an absolute Cloud Spanner commit
                                -   * timestamp or a staleness relative to the current time.
                                -   *
                                -   * These modes do not require a "negotiation phase" to pick a
                                -   * timestamp. As a result, they execute slightly faster than the
                                -   * equivalent boundedly stale concurrency modes. On the other hand,
                                -   * boundedly stale reads usually return fresher results.
                                -   *
                                -   * See
                                -   * [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp]
                                -   * and
                                -   * [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness].
                                -   *
                                -   * Bounded staleness:
                                -   *
                                -   * Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
                                -   * subject to a user-provided staleness bound. Cloud Spanner chooses the
                                -   * newest timestamp within the staleness bound that allows execution
                                -   * of the reads at the closest available replica without blocking.
                                -   *
                                -   * All rows yielded are consistent with each other -- if any part of
                                -   * the read observes a transaction, all parts of the read see the
                                -   * transaction. Boundedly stale reads are not repeatable: two stale
                                -   * reads, even if they use the same staleness bound, can execute at
                                -   * different timestamps and thus return inconsistent results.
                                -   *
                                -   * Boundedly stale reads execute in two phases: the first phase
                                -   * negotiates a timestamp among all replicas needed to serve the
                                -   * read. In the second phase, reads are executed at the negotiated
                                -   * timestamp.
                                -   *
                                -   * As a result of the two phase execution, bounded staleness reads are
                                -   * usually a little slower than comparable exact staleness
                                -   * reads. However, they are typically able to return fresher
                                -   * results, and are more likely to execute at the closest replica.
                                -   *
                                -   * Because the timestamp negotiation requires up-front knowledge of
                                -   * which rows will be read, it can only be used with single-use
                                -   * read-only transactions.
                                -   *
                                -   * See
                                -   * [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness]
                                -   * and
                                -   * [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp].
                                -   *
                                -   * Old read timestamps and garbage collection:
                                -   *
                                -   * Cloud Spanner continuously garbage collects deleted and overwritten data
                                -   * in the background to reclaim storage space. This process is known
                                -   * as "version GC". By default, version GC reclaims versions after they
                                -   * are one hour old. Because of this, Cloud Spanner cannot perform reads
                                -   * at read timestamps more than one hour in the past. This
                                -   * restriction also applies to in-progress reads and/or SQL queries whose
                                -   * timestamp become too old while executing. Reads and SQL queries with
                                -   * too-old read timestamps fail with the error `FAILED_PRECONDITION`.
                                -   *
                                -   * You can configure and extend the `VERSION_RETENTION_PERIOD` of a
                                -   * database up to a period as long as one week, which allows Cloud Spanner
                                -   * to perform reads up to one week in the past.
                                -   *
                                -   * Querying change Streams:
                                -   *
                                -   * A Change Stream is a schema object that can be configured to watch data
                                -   * changes on the entire database, a set of tables, or a set of columns
                                -   * in a database.
                                -   *
                                -   * When a change stream is created, Spanner automatically defines a
                                -   * corresponding SQL Table-Valued Function (TVF) that can be used to query
                                -   * the change records in the associated change stream using the
                                -   * ExecuteStreamingSql API. The name of the TVF for a change stream is
                                -   * generated from the name of the change stream: READ_<change_stream_name>.
                                -   *
                                -   * All queries on change stream TVFs must be executed using the
                                -   * ExecuteStreamingSql API with a single-use read-only transaction with a
                                -   * strong read-only timestamp_bound. The change stream TVF allows users to
                                -   * specify the start_timestamp and end_timestamp for the time range of
                                -   * interest. All change records within the retention period is accessible
                                -   * using the strong read-only timestamp_bound. All other TransactionOptions
                                -   * are invalid for change stream queries.
                                -   *
                                -   * In addition, if TransactionOptions.read_only.return_read_timestamp is set
                                -   * to true, a special value of 2^63 - 2 will be returned in the
                                -   * [Transaction][google.spanner.v1.Transaction] message that describes the
                                -   * transaction, instead of a valid read timestamp. This special value should be
                                -   * discarded and not used for any subsequent queries.
                                -   *
                                -   * Please see https://cloud.google.com/spanner/docs/change-streams
                                -   * for more details on how to query the change stream TVFs.
                                -   *
                                -   * Partitioned DML transactions:
                                -   *
                                -   * Partitioned DML transactions are used to execute DML statements with a
                                -   * different execution strategy that provides different, and often better,
                                -   * scalability properties for large, table-wide operations than DML in a
                                -   * ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
                                -   * should prefer using ReadWrite transactions.
                                -   *
                                -   * Partitioned DML partitions the keyspace and runs the DML statement on each
                                -   * partition in separate, internal transactions. These transactions commit
                                -   * automatically when complete, and run independently from one another.
                                -   *
                                -   * To reduce lock contention, this execution strategy only acquires read locks
                                -   * on rows that match the WHERE clause of the statement. Additionally, the
                                -   * smaller per-partition transactions hold locks for less time.
                                -   *
                                -   * That said, Partitioned DML is not a drop-in replacement for standard DML used
                                -   * in ReadWrite transactions.
                                -   *
                                -   *  - The DML statement must be fully-partitionable. Specifically, the statement
                                -   *    must be expressible as the union of many statements which each access only
                                -   *    a single row of the table.
                                -   *
                                -   *  - The statement is not applied atomically to all rows of the table. Rather,
                                -   *    the statement is applied atomically to partitions of the table, in
                                -   *    independent transactions. Secondary index rows are updated atomically
                                -   *    with the base table rows.
                                -   *
                                -   *  - Partitioned DML does not guarantee exactly-once execution semantics
                                -   *    against a partition. The statement will be applied at least once to each
                                -   *    partition. It is strongly recommended that the DML statement should be
                                -   *    idempotent to avoid unexpected results. For instance, it is potentially
                                -   *    dangerous to run a statement such as
                                -   *    `UPDATE table SET column = column + 1` as it could be run multiple times
                                -   *    against some rows.
                                -   *
                                -   *  - The partitions are committed automatically - there is no support for
                                -   *    Commit or Rollback. If the call returns an error, or if the client issuing
                                -   *    the ExecuteSql call dies, it is possible that some rows had the statement
                                -   *    executed on them successfully. It is also possible that statement was
                                -   *    never executed against other rows.
                                -   *
                                -   *  - Partitioned DML transactions may only contain the execution of a single
                                -   *    DML statement via ExecuteSql or ExecuteStreamingSql.
                                -   *
                                -   *  - If any error is encountered during the execution of the partitioned DML
                                -   *    operation (for instance, a UNIQUE INDEX violation, division by zero, or a
                                -   *    value that cannot be stored due to schema constraints), then the
                                -   *    operation is stopped at that point and an error is returned. It is
                                -   *    possible that at this point, some partitions have been committed (or even
                                -   *    committed multiple times), and other partitions have not been run at all.
                                -   *
                                -   * Given the above, Partitioned DML is good fit for large, database-wide,
                                -   * operations that are idempotent, such as deleting old rows from a very large
                                -   * table.
                                +   * Options to use for transactions.
                                    * 
                                * * Protobuf type {@code google.spanner.v1.TransactionOptions} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.TransactionOptions) com.google.spanner.v1.TransactionOptionsOrBuilder { @@ -5332,7 +4988,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_fieldAccessorTable @@ -5344,7 +5000,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.TransactionOptions.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -5362,6 +5018,7 @@ public Builder clear() { readOnlyBuilder_.clear(); } excludeTxnFromChangeStreams_ = false; + isolationLevel_ = 0; modeCase_ = 0; mode_ = null; return this; @@ -5404,6 +5061,9 @@ private void buildPartial0(com.google.spanner.v1.TransactionOptions result) { if (((from_bitField0_ & 0x00000008) != 0)) { result.excludeTxnFromChangeStreams_ = excludeTxnFromChangeStreams_; } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.isolationLevel_ = isolationLevel_; + } } private void buildPartialOneofs(com.google.spanner.v1.TransactionOptions result) { @@ -5420,39 +5080,6 @@ private void buildPartialOneofs(com.google.spanner.v1.TransactionOptions result) } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.TransactionOptions) { @@ -5468,6 +5095,9 @@ public Builder mergeFrom(com.google.spanner.v1.TransactionOptions other) { if (other.getExcludeTxnFromChangeStreams() != false) { setExcludeTxnFromChangeStreams(other.getExcludeTxnFromChangeStreams()); } + if (other.isolationLevel_ != 0) { + setIsolationLevelValue(other.getIsolationLevelValue()); + } switch (other.getModeCase()) { case READ_WRITE: { @@ -5517,19 +5147,22 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getReadWriteFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetReadWriteFieldBuilder().getBuilder(), extensionRegistry); modeCase_ = 1; break; } // case 10 case 18: { - input.readMessage(getReadOnlyFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetReadOnlyFieldBuilder().getBuilder(), extensionRegistry); modeCase_ = 2; break; } // case 18 case 26: { - input.readMessage(getPartitionedDmlFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetPartitionedDmlFieldBuilder().getBuilder(), extensionRegistry); modeCase_ = 3; break; } // case 26 @@ -5539,6 +5172,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000008; break; } // case 40 + case 48: + { + isolationLevel_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 48 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -5572,11 +5211,12 @@ public Builder clearMode() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions.ReadWrite, com.google.spanner.v1.TransactionOptions.ReadWrite.Builder, com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder> readWriteBuilder_; + /** * * @@ -5596,6 +5236,7 @@ public Builder clearMode() { public boolean hasReadWrite() { return modeCase_ == 1; } + /** * * @@ -5625,6 +5266,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite getReadWrite() { return com.google.spanner.v1.TransactionOptions.ReadWrite.getDefaultInstance(); } } + /** * * @@ -5651,6 +5293,7 @@ public Builder setReadWrite(com.google.spanner.v1.TransactionOptions.ReadWrite v modeCase_ = 1; return this; } + /** * * @@ -5675,6 +5318,7 @@ public Builder setReadWrite( modeCase_ = 1; return this; } + /** * * @@ -5711,6 +5355,7 @@ public Builder mergeReadWrite(com.google.spanner.v1.TransactionOptions.ReadWrite modeCase_ = 1; return this; } + /** * * @@ -5740,6 +5385,7 @@ public Builder clearReadWrite() { } return this; } + /** * * @@ -5754,8 +5400,9 @@ public Builder clearReadWrite() { * .google.spanner.v1.TransactionOptions.ReadWrite read_write = 1; */ public com.google.spanner.v1.TransactionOptions.ReadWrite.Builder getReadWriteBuilder() { - return getReadWriteFieldBuilder().getBuilder(); + return internalGetReadWriteFieldBuilder().getBuilder(); } + /** * * @@ -5780,6 +5427,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO return com.google.spanner.v1.TransactionOptions.ReadWrite.getDefaultInstance(); } } + /** * * @@ -5793,17 +5441,17 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO * * .google.spanner.v1.TransactionOptions.ReadWrite read_write = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions.ReadWrite, com.google.spanner.v1.TransactionOptions.ReadWrite.Builder, com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder> - getReadWriteFieldBuilder() { + internalGetReadWriteFieldBuilder() { if (readWriteBuilder_ == null) { if (!(modeCase_ == 1)) { mode_ = com.google.spanner.v1.TransactionOptions.ReadWrite.getDefaultInstance(); } readWriteBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions.ReadWrite, com.google.spanner.v1.TransactionOptions.ReadWrite.Builder, com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder>( @@ -5817,11 +5465,12 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO return readWriteBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions.PartitionedDml, com.google.spanner.v1.TransactionOptions.PartitionedDml.Builder, com.google.spanner.v1.TransactionOptions.PartitionedDmlOrBuilder> partitionedDmlBuilder_; + /** * * @@ -5841,6 +5490,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO public boolean hasPartitionedDml() { return modeCase_ == 3; } + /** * * @@ -5870,6 +5520,7 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml return com.google.spanner.v1.TransactionOptions.PartitionedDml.getDefaultInstance(); } } + /** * * @@ -5897,6 +5548,7 @@ public Builder setPartitionedDml( modeCase_ = 3; return this; } + /** * * @@ -5921,6 +5573,7 @@ public Builder setPartitionedDml( modeCase_ = 3; return this; } + /** * * @@ -5959,6 +5612,7 @@ public Builder mergePartitionedDml( modeCase_ = 3; return this; } + /** * * @@ -5988,6 +5642,7 @@ public Builder clearPartitionedDml() { } return this; } + /** * * @@ -6003,8 +5658,9 @@ public Builder clearPartitionedDml() { */ public com.google.spanner.v1.TransactionOptions.PartitionedDml.Builder getPartitionedDmlBuilder() { - return getPartitionedDmlFieldBuilder().getBuilder(); + return internalGetPartitionedDmlFieldBuilder().getBuilder(); } + /** * * @@ -6030,6 +5686,7 @@ public Builder clearPartitionedDml() { return com.google.spanner.v1.TransactionOptions.PartitionedDml.getDefaultInstance(); } } + /** * * @@ -6043,17 +5700,17 @@ public Builder clearPartitionedDml() { * * .google.spanner.v1.TransactionOptions.PartitionedDml partitioned_dml = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions.PartitionedDml, com.google.spanner.v1.TransactionOptions.PartitionedDml.Builder, com.google.spanner.v1.TransactionOptions.PartitionedDmlOrBuilder> - getPartitionedDmlFieldBuilder() { + internalGetPartitionedDmlFieldBuilder() { if (partitionedDmlBuilder_ == null) { if (!(modeCase_ == 3)) { mode_ = com.google.spanner.v1.TransactionOptions.PartitionedDml.getDefaultInstance(); } partitionedDmlBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions.PartitionedDml, com.google.spanner.v1.TransactionOptions.PartitionedDml.Builder, com.google.spanner.v1.TransactionOptions.PartitionedDmlOrBuilder>( @@ -6067,16 +5724,17 @@ public Builder clearPartitionedDml() { return partitionedDmlBuilder_; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions.ReadOnly, com.google.spanner.v1.TransactionOptions.ReadOnly.Builder, com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder> readOnlyBuilder_; + /** * * *
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6091,11 +5749,12 @@ public Builder clearPartitionedDml() {
                                     public boolean hasReadOnly() {
                                       return modeCase_ == 2;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6120,11 +5779,12 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getReadOnly() {
                                         return com.google.spanner.v1.TransactionOptions.ReadOnly.getDefaultInstance();
                                       }
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6146,11 +5806,12 @@ public Builder setReadOnly(com.google.spanner.v1.TransactionOptions.ReadOnly val
                                       modeCase_ = 2;
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6170,11 +5831,12 @@ public Builder setReadOnly(
                                       modeCase_ = 2;
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6206,11 +5868,12 @@ public Builder mergeReadOnly(com.google.spanner.v1.TransactionOptions.ReadOnly v
                                       modeCase_ = 2;
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6235,11 +5898,12 @@ public Builder clearReadOnly() {
                                       }
                                       return this;
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6249,13 +5913,14 @@ public Builder clearReadOnly() {
                                      * .google.spanner.v1.TransactionOptions.ReadOnly read_only = 2;
                                      */
                                     public com.google.spanner.v1.TransactionOptions.ReadOnly.Builder getReadOnlyBuilder() {
                                -      return getReadOnlyFieldBuilder().getBuilder();
                                +      return internalGetReadOnlyFieldBuilder().getBuilder();
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6275,11 +5940,12 @@ public com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrB
                                         return com.google.spanner.v1.TransactionOptions.ReadOnly.getDefaultInstance();
                                       }
                                     }
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * Transaction will not write.
                                +     * Transaction does not write.
                                      *
                                      * Authorization to begin a read-only transaction requires
                                      * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -6288,17 +5954,17 @@ public com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrB
                                      *
                                      * .google.spanner.v1.TransactionOptions.ReadOnly read_only = 2;
                                      */
                                -    private com.google.protobuf.SingleFieldBuilderV3<
                                +    private com.google.protobuf.SingleFieldBuilder<
                                             com.google.spanner.v1.TransactionOptions.ReadOnly,
                                             com.google.spanner.v1.TransactionOptions.ReadOnly.Builder,
                                             com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder>
                                -        getReadOnlyFieldBuilder() {
                                +        internalGetReadOnlyFieldBuilder() {
                                       if (readOnlyBuilder_ == null) {
                                         if (!(modeCase_ == 2)) {
                                           mode_ = com.google.spanner.v1.TransactionOptions.ReadOnly.getDefaultInstance();
                                         }
                                         readOnlyBuilder_ =
                                -            new com.google.protobuf.SingleFieldBuilderV3<
                                +            new com.google.protobuf.SingleFieldBuilder<
                                                 com.google.spanner.v1.TransactionOptions.ReadOnly,
                                                 com.google.spanner.v1.TransactionOptions.ReadOnly.Builder,
                                                 com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder>(
                                @@ -6313,24 +5979,29 @@ public com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrB
                                     }
                                 
                                     private boolean excludeTxnFromChangeStreams_;
                                +
                                     /**
                                      *
                                      *
                                      * 
                                -     * When `exclude_txn_from_change_streams` is set to `true`:
                                -     *  * Mutations from this transaction will not be recorded in change streams
                                -     *  with DDL option `allow_txn_exclusion=true` that are tracking columns
                                -     *  modified by these transactions.
                                -     *  * Mutations from this transaction will be recorded in change streams with
                                -     *  DDL option `allow_txn_exclusion=false or not set` that are tracking
                                -     *  columns modified by these transactions.
                                +     * When `exclude_txn_from_change_streams` is set to `true`, it prevents read
                                +     * or write transactions from being tracked in change streams.
                                +     *
                                +     * * If the DDL option `allow_txn_exclusion` is set to `true`, then the
                                +     * updates
                                +     * made within this transaction aren't recorded in the change stream.
                                +     *
                                +     * * If you don't set the DDL option `allow_txn_exclusion` or if it's
                                +     * set to `false`, then the updates made within this transaction are
                                +     * recorded in the change stream.
                                      *
                                      * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -     * mutations from this transaction will be recorded in all change streams that
                                -     * are tracking columns modified by these transactions.
                                -     * `exclude_txn_from_change_streams` may only be specified for read-write or
                                -     * partitioned-dml transactions, otherwise the API will return an
                                -     * `INVALID_ARGUMENT` error.
                                +     * modifications from this transaction are recorded in all change streams
                                +     * that are tracking columns modified by these transactions.
                                +     *
                                +     * The `exclude_txn_from_change_streams` option can only be specified
                                +     * for read-write or partitioned DML transactions, otherwise the API returns
                                +     * an `INVALID_ARGUMENT` error.
                                      * 
                                * * bool exclude_txn_from_change_streams = 5; @@ -6341,24 +6012,29 @@ public com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrB public boolean getExcludeTxnFromChangeStreams() { return excludeTxnFromChangeStreams_; } + /** * * *
                                -     * When `exclude_txn_from_change_streams` is set to `true`:
                                -     *  * Mutations from this transaction will not be recorded in change streams
                                -     *  with DDL option `allow_txn_exclusion=true` that are tracking columns
                                -     *  modified by these transactions.
                                -     *  * Mutations from this transaction will be recorded in change streams with
                                -     *  DDL option `allow_txn_exclusion=false or not set` that are tracking
                                -     *  columns modified by these transactions.
                                +     * When `exclude_txn_from_change_streams` is set to `true`, it prevents read
                                +     * or write transactions from being tracked in change streams.
                                +     *
                                +     * * If the DDL option `allow_txn_exclusion` is set to `true`, then the
                                +     * updates
                                +     * made within this transaction aren't recorded in the change stream.
                                +     *
                                +     * * If you don't set the DDL option `allow_txn_exclusion` or if it's
                                +     * set to `false`, then the updates made within this transaction are
                                +     * recorded in the change stream.
                                      *
                                      * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -     * mutations from this transaction will be recorded in all change streams that
                                -     * are tracking columns modified by these transactions.
                                -     * `exclude_txn_from_change_streams` may only be specified for read-write or
                                -     * partitioned-dml transactions, otherwise the API will return an
                                -     * `INVALID_ARGUMENT` error.
                                +     * modifications from this transaction are recorded in all change streams
                                +     * that are tracking columns modified by these transactions.
                                +     *
                                +     * The `exclude_txn_from_change_streams` option can only be specified
                                +     * for read-write or partitioned DML transactions, otherwise the API returns
                                +     * an `INVALID_ARGUMENT` error.
                                      * 
                                * * bool exclude_txn_from_change_streams = 5; @@ -6373,24 +6049,29 @@ public Builder setExcludeTxnFromChangeStreams(boolean value) { onChanged(); return this; } + /** * * *
                                -     * When `exclude_txn_from_change_streams` is set to `true`:
                                -     *  * Mutations from this transaction will not be recorded in change streams
                                -     *  with DDL option `allow_txn_exclusion=true` that are tracking columns
                                -     *  modified by these transactions.
                                -     *  * Mutations from this transaction will be recorded in change streams with
                                -     *  DDL option `allow_txn_exclusion=false or not set` that are tracking
                                -     *  columns modified by these transactions.
                                +     * When `exclude_txn_from_change_streams` is set to `true`, it prevents read
                                +     * or write transactions from being tracked in change streams.
                                +     *
                                +     * * If the DDL option `allow_txn_exclusion` is set to `true`, then the
                                +     * updates
                                +     * made within this transaction aren't recorded in the change stream.
                                +     *
                                +     * * If you don't set the DDL option `allow_txn_exclusion` or if it's
                                +     * set to `false`, then the updates made within this transaction are
                                +     * recorded in the change stream.
                                      *
                                      * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -     * mutations from this transaction will be recorded in all change streams that
                                -     * are tracking columns modified by these transactions.
                                -     * `exclude_txn_from_change_streams` may only be specified for read-write or
                                -     * partitioned-dml transactions, otherwise the API will return an
                                -     * `INVALID_ARGUMENT` error.
                                +     * modifications from this transaction are recorded in all change streams
                                +     * that are tracking columns modified by these transactions.
                                +     *
                                +     * The `exclude_txn_from_change_streams` option can only be specified
                                +     * for read-write or partitioned DML transactions, otherwise the API returns
                                +     * an `INVALID_ARGUMENT` error.
                                      * 
                                * * bool exclude_txn_from_change_streams = 5; @@ -6404,15 +6085,102 @@ public Builder clearExcludeTxnFromChangeStreams() { return this; } + private int isolationLevel_ = 0; + + /** + * + * + *
                                +     * Isolation level for the transaction.
                                +     * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The enum numeric value on the wire for isolationLevel. + */ @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public int getIsolationLevelValue() { + return isolationLevel_; + } + + /** + * + * + *
                                +     * Isolation level for the transaction.
                                +     * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @param value The enum numeric value on the wire for isolationLevel to set. + * @return This builder for chaining. + */ + public Builder setIsolationLevelValue(int value) { + isolationLevel_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; } + /** + * + * + *
                                +     * Isolation level for the transaction.
                                +     * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The isolationLevel. + */ @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public com.google.spanner.v1.TransactionOptions.IsolationLevel getIsolationLevel() { + com.google.spanner.v1.TransactionOptions.IsolationLevel result = + com.google.spanner.v1.TransactionOptions.IsolationLevel.forNumber(isolationLevel_); + return result == null + ? com.google.spanner.v1.TransactionOptions.IsolationLevel.UNRECOGNIZED + : result; + } + + /** + * + * + *
                                +     * Isolation level for the transaction.
                                +     * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @param value The isolationLevel to set. + * @return This builder for chaining. + */ + public Builder setIsolationLevel( + com.google.spanner.v1.TransactionOptions.IsolationLevel value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + isolationLevel_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
                                +     * Isolation level for the transaction.
                                +     * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return This builder for chaining. + */ + public Builder clearIsolationLevel() { + bitField0_ = (bitField0_ & ~0x00000010); + isolationLevel_ = 0; + onChanged(); + return this; } // @@protoc_insertion_point(builder_scope:google.spanner.v1.TransactionOptions) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java index 92630bc65a3..06dad5e90e4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface TransactionOptionsOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.TransactionOptions) @@ -40,6 +42,7 @@ public interface TransactionOptionsOrBuilder * @return Whether the readWrite field is set. */ boolean hasReadWrite(); + /** * * @@ -56,6 +59,7 @@ public interface TransactionOptionsOrBuilder * @return The readWrite. */ com.google.spanner.v1.TransactionOptions.ReadWrite getReadWrite(); + /** * * @@ -87,6 +91,7 @@ public interface TransactionOptionsOrBuilder * @return Whether the partitionedDml field is set. */ boolean hasPartitionedDml(); + /** * * @@ -103,6 +108,7 @@ public interface TransactionOptionsOrBuilder * @return The partitionedDml. */ com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml(); + /** * * @@ -122,7 +128,7 @@ public interface TransactionOptionsOrBuilder * * *
                                -   * Transaction will not write.
                                +   * Transaction does not write.
                                    *
                                    * Authorization to begin a read-only transaction requires
                                    * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -134,11 +140,12 @@ public interface TransactionOptionsOrBuilder
                                    * @return Whether the readOnly field is set.
                                    */
                                   boolean hasReadOnly();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * Transaction will not write.
                                +   * Transaction does not write.
                                    *
                                    * Authorization to begin a read-only transaction requires
                                    * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -150,11 +157,12 @@ public interface TransactionOptionsOrBuilder
                                    * @return The readOnly.
                                    */
                                   com.google.spanner.v1.TransactionOptions.ReadOnly getReadOnly();
                                +
                                   /**
                                    *
                                    *
                                    * 
                                -   * Transaction will not write.
                                +   * Transaction does not write.
                                    *
                                    * Authorization to begin a read-only transaction requires
                                    * `spanner.databases.beginReadOnlyTransaction` permission
                                @@ -169,20 +177,24 @@ public interface TransactionOptionsOrBuilder
                                    *
                                    *
                                    * 
                                -   * When `exclude_txn_from_change_streams` is set to `true`:
                                -   *  * Mutations from this transaction will not be recorded in change streams
                                -   *  with DDL option `allow_txn_exclusion=true` that are tracking columns
                                -   *  modified by these transactions.
                                -   *  * Mutations from this transaction will be recorded in change streams with
                                -   *  DDL option `allow_txn_exclusion=false or not set` that are tracking
                                -   *  columns modified by these transactions.
                                +   * When `exclude_txn_from_change_streams` is set to `true`, it prevents read
                                +   * or write transactions from being tracked in change streams.
                                +   *
                                +   * * If the DDL option `allow_txn_exclusion` is set to `true`, then the
                                +   * updates
                                +   * made within this transaction aren't recorded in the change stream.
                                +   *
                                +   * * If you don't set the DDL option `allow_txn_exclusion` or if it's
                                +   * set to `false`, then the updates made within this transaction are
                                +   * recorded in the change stream.
                                    *
                                    * When `exclude_txn_from_change_streams` is set to `false` or not set,
                                -   * mutations from this transaction will be recorded in all change streams that
                                -   * are tracking columns modified by these transactions.
                                -   * `exclude_txn_from_change_streams` may only be specified for read-write or
                                -   * partitioned-dml transactions, otherwise the API will return an
                                -   * `INVALID_ARGUMENT` error.
                                +   * modifications from this transaction are recorded in all change streams
                                +   * that are tracking columns modified by these transactions.
                                +   *
                                +   * The `exclude_txn_from_change_streams` option can only be specified
                                +   * for read-write or partitioned DML transactions, otherwise the API returns
                                +   * an `INVALID_ARGUMENT` error.
                                    * 
                                * * bool exclude_txn_from_change_streams = 5; @@ -191,5 +203,31 @@ public interface TransactionOptionsOrBuilder */ boolean getExcludeTxnFromChangeStreams(); + /** + * + * + *
                                +   * Isolation level for the transaction.
                                +   * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The enum numeric value on the wire for isolationLevel. + */ + int getIsolationLevelValue(); + + /** + * + * + *
                                +   * Isolation level for the transaction.
                                +   * 
                                + * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The isolationLevel. + */ + com.google.spanner.v1.TransactionOptions.IsolationLevel getIsolationLevel(); + com.google.spanner.v1.TransactionOptions.ModeCase getModeCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java index bf2232c24d2..53adafa6a3a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface TransactionOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.Transaction) @@ -61,6 +63,7 @@ public interface TransactionOrBuilder * @return Whether the readTimestamp field is set. */ boolean hasReadTimestamp(); + /** * * @@ -78,6 +81,7 @@ public interface TransactionOrBuilder * @return The readTimestamp. */ com.google.protobuf.Timestamp getReadTimestamp(); + /** * * @@ -98,15 +102,13 @@ public interface TransactionOrBuilder * * *
                                -   * A precommit token will be included in the response of a BeginTransaction
                                +   * A precommit token is included in the response of a BeginTransaction
                                    * request if the read-write transaction is on a multiplexed session and
                                    * a mutation_key was specified in the
                                    * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                    * The precommit token with the highest sequence number from this transaction
                                    * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                    * request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -114,19 +116,18 @@ public interface TransactionOrBuilder * @return Whether the precommitToken field is set. */ boolean hasPrecommitToken(); + /** * * *
                                -   * A precommit token will be included in the response of a BeginTransaction
                                +   * A precommit token is included in the response of a BeginTransaction
                                    * request if the read-write transaction is on a multiplexed session and
                                    * a mutation_key was specified in the
                                    * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                    * The precommit token with the highest sequence number from this transaction
                                    * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                    * request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; @@ -134,22 +135,79 @@ public interface TransactionOrBuilder * @return The precommitToken. */ com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken(); + /** * * *
                                -   * A precommit token will be included in the response of a BeginTransaction
                                +   * A precommit token is included in the response of a BeginTransaction
                                    * request if the read-write transaction is on a multiplexed session and
                                    * a mutation_key was specified in the
                                    * [BeginTransaction][google.spanner.v1.BeginTransactionRequest].
                                    * The precommit token with the highest sequence number from this transaction
                                    * attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit]
                                    * request for this transaction.
                                -   * This feature is not yet supported and will result in an UNIMPLEMENTED
                                -   * error.
                                    * 
                                * * .google.spanner.v1.MultiplexedSessionPrecommitToken precommit_token = 3; */ com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder getPrecommitTokenOrBuilder(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cacheUpdate field is set. + */ + boolean hasCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cacheUpdate. + */ + com.google.spanner.v1.CacheUpdate getCacheUpdate(); + + /** + * + * + *
                                +   * Optional. A cache update expresses a set of changes the client should
                                +   * incorporate into its location cache. The client should discard the changes
                                +   * if they are older than the data it already has. This data can be obtained
                                +   * in response to requests that included a `RoutingHint` field, but may also
                                +   * be obtained by explicit location-fetching RPCs which may be added in the
                                +   * future.
                                +   * 
                                + * + * + * .google.spanner.v1.CacheUpdate cache_update = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.spanner.v1.CacheUpdateOrBuilder getCacheUpdateOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java index 07dbdbbb0b0..bbfedb2eb48 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class TransactionProto { +@com.google.protobuf.Generated +public final class TransactionProto extends com.google.protobuf.GeneratedFile { private TransactionProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TransactionProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,31 +42,31 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_TransactionOptions_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_TransactionOptions_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_TransactionOptions_ReadWrite_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_TransactionOptions_ReadWrite_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_TransactionOptions_ReadOnly_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_TransactionOptions_ReadOnly_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Transaction_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Transaction_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_TransactionSelector_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_TransactionSelector_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -68,43 +80,50 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "\n#google/spanner/v1/transaction.proto\022\021g" + "oogle.spanner.v1\032\037google/api/field_behav" + "ior.proto\032\036google/protobuf/duration.prot" - + "o\032\037google/protobuf/timestamp.proto\"\316\006\n\022T" - + "ransactionOptions\022E\n\nread_write\030\001 \001(\0132/." - + "google.spanner.v1.TransactionOptions.Rea" - + "dWriteH\000\022O\n\017partitioned_dml\030\003 \001(\01324.goog" - + "le.spanner.v1.TransactionOptions.Partiti" - + "onedDmlH\000\022C\n\tread_only\030\002 \001(\0132..google.sp" - + "anner.v1.TransactionOptions.ReadOnlyH\000\022\'" - + "\n\037exclude_txn_from_change_streams\030\005 \001(\010\032" - + "\354\001\n\tReadWrite\022T\n\016read_lock_mode\030\001 \001(\0162<." - + "google.spanner.v1.TransactionOptions.Rea" - + "dWrite.ReadLockMode\0228\n+multiplexed_sessi" - + "on_previous_transaction_id\030\002 \001(\014B\003\340A\001\"O\n" - + "\014ReadLockMode\022\036\n\032READ_LOCK_MODE_UNSPECIF" - + "IED\020\000\022\017\n\013PESSIMISTIC\020\001\022\016\n\nOPTIMISTIC\020\002\032\020" - + "\n\016PartitionedDml\032\250\002\n\010ReadOnly\022\020\n\006strong\030" - + "\001 \001(\010H\000\0228\n\022min_read_timestamp\030\002 \001(\0132\032.go" - + "ogle.protobuf.TimestampH\000\0222\n\rmax_stalene" - + "ss\030\003 \001(\0132\031.google.protobuf.DurationH\000\0224\n" - + "\016read_timestamp\030\004 \001(\0132\032.google.protobuf." - + "TimestampH\000\0224\n\017exact_staleness\030\005 \001(\0132\031.g" - + "oogle.protobuf.DurationH\000\022\035\n\025return_read" - + "_timestamp\030\006 \001(\010B\021\n\017timestamp_boundB\006\n\004m" - + "ode\"\233\001\n\013Transaction\022\n\n\002id\030\001 \001(\014\0222\n\016read_" - + "timestamp\030\002 \001(\0132\032.google.protobuf.Timest" - + "amp\022L\n\017precommit_token\030\003 \001(\01323.google.sp" - + "anner.v1.MultiplexedSessionPrecommitToke" - + "n\"\244\001\n\023TransactionSelector\022;\n\nsingle_use\030" - + "\001 \001(\0132%.google.spanner.v1.TransactionOpt" - + "ionsH\000\022\014\n\002id\030\002 \001(\014H\000\0226\n\005begin\030\003 \001(\0132%.go" - + "ogle.spanner.v1.TransactionOptionsH\000B\n\n\010" - + "selector\"L\n MultiplexedSessionPrecommitT" - + "oken\022\027\n\017precommit_token\030\001 \001(\014\022\017\n\007seq_num" - + "\030\002 \001(\005B\263\001\n\025com.google.spanner.v1B\020Transa" - + "ctionProtoP\001Z5cloud.google.com/go/spanne" - + "r/apiv1/spannerpb;spannerpb\252\002\027Google.Clo" - + "ud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352" - + "\002\032Google::Cloud::Spanner::V1b\006proto3" + + "o\032\037google/protobuf/timestamp.proto\032 goog" + + "le/spanner/v1/location.proto\"\367\007\n\022Transac" + + "tionOptions\022E\n\nread_write\030\001 \001(\0132/.google" + + ".spanner.v1.TransactionOptions.ReadWrite" + + "H\000\022O\n\017partitioned_dml\030\003 \001(\01324.google.spa" + + "nner.v1.TransactionOptions.PartitionedDm" + + "lH\000\022C\n\tread_only\030\002 \001(\0132..google.spanner." + + "v1.TransactionOptions.ReadOnlyH\000\022\'\n\037excl" + + "ude_txn_from_change_streams\030\005 \001(\010\022M\n\017iso" + + "lation_level\030\006 \001(\01624.google.spanner.v1.T" + + "ransactionOptions.IsolationLevel\032\354\001\n\tRea" + + "dWrite\022T\n\016read_lock_mode\030\001 \001(\0162<.google." + + "spanner.v1.TransactionOptions.ReadWrite." + + "ReadLockMode\0228\n+multiplexed_session_prev" + + "ious_transaction_id\030\002 \001(\014B\003\340A\001\"O\n\014ReadLo" + + "ckMode\022\036\n\032READ_LOCK_MODE_UNSPECIFIED\020\000\022\017" + + "\n\013PESSIMISTIC\020\001\022\016\n\nOPTIMISTIC\020\002\032\020\n\016Parti" + + "tionedDml\032\250\002\n\010ReadOnly\022\020\n\006strong\030\001 \001(\010H\000" + + "\0228\n\022min_read_timestamp\030\002 \001(\0132\032.google.pr" + + "otobuf.TimestampH\000\0222\n\rmax_staleness\030\003 \001(" + + "\0132\031.google.protobuf.DurationH\000\0224\n\016read_t" + + "imestamp\030\004 \001(\0132\032.google.protobuf.Timesta" + + "mpH\000\0224\n\017exact_staleness\030\005 \001(\0132\031.google.p" + + "rotobuf.DurationH\000\022\035\n\025return_read_timest" + + "amp\030\006 \001(\010B\021\n\017timestamp_bound\"X\n\016Isolatio" + + "nLevel\022\037\n\033ISOLATION_LEVEL_UNSPECIFIED\020\000\022" + + "\020\n\014SERIALIZABLE\020\001\022\023\n\017REPEATABLE_READ\020\002B\006" + + "\n\004mode\"\326\001\n\013Transaction\022\n\n\002id\030\001 \001(\014\0222\n\016re" + + "ad_timestamp\030\002 \001(\0132\032.google.protobuf.Tim" + + "estamp\022L\n\017precommit_token\030\003 \001(\01323.google" + + ".spanner.v1.MultiplexedSessionPrecommitT" + + "oken\0229\n\014cache_update\030\005 \001(\0132\036.google.span" + + "ner.v1.CacheUpdateB\003\340A\001\"\244\001\n\023TransactionS" + + "elector\022;\n\nsingle_use\030\001 \001(\0132%.google.spa" + + "nner.v1.TransactionOptionsH\000\022\014\n\002id\030\002 \001(\014" + + "H\000\0226\n\005begin\030\003 \001(\0132%.google.spanner.v1.Tr" + + "ansactionOptionsH\000B\n\n\010selector\"L\n Multip" + + "lexedSessionPrecommitToken\022\027\n\017precommit_" + + "token\030\001 \001(\014\022\017\n\007seq_num\030\002 \001(\005B\263\001\n\025com.goo" + + "gle.spanner.v1B\020TransactionProtoP\001Z5clou" + + "d.google.com/go/spanner/apiv1/spannerpb;" + + "spannerpb\252\002\027Google.Cloud.Spanner.V1\312\002\027Go" + + "ogle\\Cloud\\Spanner\\V1\352\002\032Google::Cloud::S" + + "panner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -113,33 +132,39 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.api.FieldBehaviorProto.getDescriptor(), com.google.protobuf.DurationProto.getDescriptor(), com.google.protobuf.TimestampProto.getDescriptor(), + com.google.spanner.v1.LocationProto.getDescriptor(), }); internal_static_google_spanner_v1_TransactionOptions_descriptor = - getDescriptor().getMessageTypes().get(0); + getDescriptor().getMessageType(0); internal_static_google_spanner_v1_TransactionOptions_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_TransactionOptions_descriptor, new java.lang.String[] { - "ReadWrite", "PartitionedDml", "ReadOnly", "ExcludeTxnFromChangeStreams", "Mode", + "ReadWrite", + "PartitionedDml", + "ReadOnly", + "ExcludeTxnFromChangeStreams", + "IsolationLevel", + "Mode", }); internal_static_google_spanner_v1_TransactionOptions_ReadWrite_descriptor = - internal_static_google_spanner_v1_TransactionOptions_descriptor.getNestedTypes().get(0); + internal_static_google_spanner_v1_TransactionOptions_descriptor.getNestedType(0); internal_static_google_spanner_v1_TransactionOptions_ReadWrite_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_TransactionOptions_ReadWrite_descriptor, new java.lang.String[] { "ReadLockMode", "MultiplexedSessionPreviousTransactionId", }); internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_descriptor = - internal_static_google_spanner_v1_TransactionOptions_descriptor.getNestedTypes().get(1); + internal_static_google_spanner_v1_TransactionOptions_descriptor.getNestedType(1); internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_descriptor, new java.lang.String[] {}); internal_static_google_spanner_v1_TransactionOptions_ReadOnly_descriptor = - internal_static_google_spanner_v1_TransactionOptions_descriptor.getNestedTypes().get(2); + internal_static_google_spanner_v1_TransactionOptions_descriptor.getNestedType(2); internal_static_google_spanner_v1_TransactionOptions_ReadOnly_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_TransactionOptions_ReadOnly_descriptor, new java.lang.String[] { "Strong", @@ -150,38 +175,39 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ReturnReadTimestamp", "TimestampBound", }); - internal_static_google_spanner_v1_Transaction_descriptor = - getDescriptor().getMessageTypes().get(1); + internal_static_google_spanner_v1_Transaction_descriptor = getDescriptor().getMessageType(1); internal_static_google_spanner_v1_Transaction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_Transaction_descriptor, new java.lang.String[] { - "Id", "ReadTimestamp", "PrecommitToken", + "Id", "ReadTimestamp", "PrecommitToken", "CacheUpdate", }); internal_static_google_spanner_v1_TransactionSelector_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageType(2); internal_static_google_spanner_v1_TransactionSelector_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_TransactionSelector_descriptor, new java.lang.String[] { "SingleUse", "Id", "Begin", "Selector", }); internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageType(3); internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_MultiplexedSessionPrecommitToken_descriptor, new java.lang.String[] { "PrecommitToken", "SeqNum", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.protobuf.DurationProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.spanner.v1.LocationProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.FieldBehaviorProto.getDescriptor(); - com.google.protobuf.DurationProto.getDescriptor(); - com.google.protobuf.TimestampProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java index a33d77b45cc..025aa4cb8e6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -33,31 +34,37 @@ * * Protobuf type {@code google.spanner.v1.TransactionSelector} */ -public final class TransactionSelector extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class TransactionSelector extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.TransactionSelector) TransactionSelectorOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TransactionSelector"); + } + // Use TransactionSelector.newBuilder() to construct. - private TransactionSelector(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private TransactionSelector(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } private TransactionSelector() {} - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new TransactionSelector(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionSelector_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionSelector_fieldAccessorTable @@ -84,6 +91,7 @@ public enum SelectorCase private SelectorCase(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 +127,7 @@ public SelectorCase getSelectorCase() { } public static final int SINGLE_USE_FIELD_NUMBER = 1; + /** * * @@ -136,6 +145,7 @@ public SelectorCase getSelectorCase() { public boolean hasSingleUse() { return selectorCase_ == 1; } + /** * * @@ -156,6 +166,7 @@ public com.google.spanner.v1.TransactionOptions getSingleUse() { } return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } + /** * * @@ -176,6 +187,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseOrBuilder() } public static final int ID_FIELD_NUMBER = 2; + /** * * @@ -191,6 +203,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseOrBuilder() public boolean hasId() { return selectorCase_ == 2; } + /** * * @@ -211,6 +224,7 @@ public com.google.protobuf.ByteString getId() { } public static final int BEGIN_FIELD_NUMBER = 3; + /** * * @@ -229,6 +243,7 @@ public com.google.protobuf.ByteString getId() { public boolean hasBegin() { return selectorCase_ == 3; } + /** * * @@ -250,6 +265,7 @@ public com.google.spanner.v1.TransactionOptions getBegin() { } return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } + /** * * @@ -416,38 +432,38 @@ public static com.google.spanner.v1.TransactionSelector parseFrom( public static com.google.spanner.v1.TransactionSelector parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionSelector parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionSelector parseDelimitedFrom( java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionSelector parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.TransactionSelector parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.TransactionSelector parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -470,10 +486,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -488,7 +505,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.TransactionSelector} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.TransactionSelector) com.google.spanner.v1.TransactionSelectorOrBuilder { @@ -498,7 +515,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionSelector_fieldAccessorTable @@ -510,7 +527,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { // Construct using com.google.spanner.v1.TransactionSelector.newBuilder() private Builder() {} - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); } @@ -576,39 +593,6 @@ private void buildPartialOneofs(com.google.spanner.v1.TransactionSelector result } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.TransactionSelector) { @@ -670,7 +654,8 @@ public Builder mergeFrom( break; case 10: { - input.readMessage(getSingleUseFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetSingleUseFieldBuilder().getBuilder(), extensionRegistry); selectorCase_ = 1; break; } // case 10 @@ -682,7 +667,7 @@ public Builder mergeFrom( } // case 18 case 26: { - input.readMessage(getBeginFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage(internalGetBeginFieldBuilder().getBuilder(), extensionRegistry); selectorCase_ = 3; break; } // case 26 @@ -719,11 +704,12 @@ public Builder clearSelector() { private int bitField0_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> singleUseBuilder_; + /** * * @@ -741,6 +727,7 @@ public Builder clearSelector() { public boolean hasSingleUse() { return selectorCase_ == 1; } + /** * * @@ -768,6 +755,7 @@ public com.google.spanner.v1.TransactionOptions getSingleUse() { return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -792,6 +780,7 @@ public Builder setSingleUse(com.google.spanner.v1.TransactionOptions value) { selectorCase_ = 1; return this; } + /** * * @@ -813,6 +802,7 @@ public Builder setSingleUse(com.google.spanner.v1.TransactionOptions.Builder bui selectorCase_ = 1; return this; } + /** * * @@ -847,6 +837,7 @@ public Builder mergeSingleUse(com.google.spanner.v1.TransactionOptions value) { selectorCase_ = 1; return this; } + /** * * @@ -874,6 +865,7 @@ public Builder clearSingleUse() { } return this; } + /** * * @@ -886,8 +878,9 @@ public Builder clearSingleUse() { * .google.spanner.v1.TransactionOptions single_use = 1; */ public com.google.spanner.v1.TransactionOptions.Builder getSingleUseBuilder() { - return getSingleUseFieldBuilder().getBuilder(); + return internalGetSingleUseFieldBuilder().getBuilder(); } + /** * * @@ -910,6 +903,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseOrBuilder() return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -921,17 +915,17 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseOrBuilder() * * .google.spanner.v1.TransactionOptions single_use = 1; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> - getSingleUseFieldBuilder() { + internalGetSingleUseFieldBuilder() { if (singleUseBuilder_ == null) { if (!(selectorCase_ == 1)) { selector_ = com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } singleUseBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder>( @@ -959,6 +953,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getSingleUseOrBuilder() public boolean hasId() { return selectorCase_ == 2; } + /** * * @@ -976,6 +971,7 @@ public com.google.protobuf.ByteString getId() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -997,6 +993,7 @@ public Builder setId(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1017,11 +1014,12 @@ public Builder clearId() { return this; } - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> beginBuilder_; + /** * * @@ -1040,6 +1038,7 @@ public Builder clearId() { public boolean hasBegin() { return selectorCase_ == 3; } + /** * * @@ -1068,6 +1067,7 @@ public com.google.spanner.v1.TransactionOptions getBegin() { return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1093,6 +1093,7 @@ public Builder setBegin(com.google.spanner.v1.TransactionOptions value) { selectorCase_ = 3; return this; } + /** * * @@ -1115,6 +1116,7 @@ public Builder setBegin(com.google.spanner.v1.TransactionOptions.Builder builder selectorCase_ = 3; return this; } + /** * * @@ -1150,6 +1152,7 @@ public Builder mergeBegin(com.google.spanner.v1.TransactionOptions value) { selectorCase_ = 3; return this; } + /** * * @@ -1178,6 +1181,7 @@ public Builder clearBegin() { } return this; } + /** * * @@ -1191,8 +1195,9 @@ public Builder clearBegin() { * .google.spanner.v1.TransactionOptions begin = 3; */ public com.google.spanner.v1.TransactionOptions.Builder getBeginBuilder() { - return getBeginFieldBuilder().getBuilder(); + return internalGetBeginFieldBuilder().getBuilder(); } + /** * * @@ -1216,6 +1221,7 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getBeginOrBuilder() { return com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1228,17 +1234,17 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getBeginOrBuilder() { * * .google.spanner.v1.TransactionOptions begin = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder> - getBeginFieldBuilder() { + internalGetBeginFieldBuilder() { if (beginBuilder_ == null) { if (!(selectorCase_ == 3)) { selector_ = com.google.spanner.v1.TransactionOptions.getDefaultInstance(); } beginBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.TransactionOptions, com.google.spanner.v1.TransactionOptions.Builder, com.google.spanner.v1.TransactionOptionsOrBuilder>( @@ -1252,17 +1258,6 @@ public com.google.spanner.v1.TransactionOptionsOrBuilder getBeginOrBuilder() { return beginBuilder_; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.TransactionSelector) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java index b8f9a516075..cad31c1c653 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/transaction.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface TransactionSelectorOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.TransactionSelector) @@ -38,6 +40,7 @@ public interface TransactionSelectorOrBuilder * @return Whether the singleUse field is set. */ boolean hasSingleUse(); + /** * * @@ -52,6 +55,7 @@ public interface TransactionSelectorOrBuilder * @return The singleUse. */ com.google.spanner.v1.TransactionOptions getSingleUse(); + /** * * @@ -77,6 +81,7 @@ public interface TransactionSelectorOrBuilder * @return Whether the id field is set. */ boolean hasId(); + /** * * @@ -105,6 +110,7 @@ public interface TransactionSelectorOrBuilder * @return Whether the begin field is set. */ boolean hasBegin(); + /** * * @@ -120,6 +126,7 @@ public interface TransactionSelectorOrBuilder * @return The begin. */ com.google.spanner.v1.TransactionOptions getBegin(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java index e1e06ef2cf6..d5eec528e77 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/type.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -29,13 +30,25 @@ * * Protobuf type {@code google.spanner.v1.Type} */ -public final class Type extends com.google.protobuf.GeneratedMessageV3 +@com.google.protobuf.Generated +public final class Type extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:google.spanner.v1.Type) TypeOrBuilder { private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Type"); + } + // Use Type.newBuilder() to construct. - private Type(com.google.protobuf.GeneratedMessageV3.Builder builder) { + private Type(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } @@ -45,18 +58,12 @@ private Type() { protoTypeFqn_ = ""; } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Type(); - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TypeProto.internal_static_google_spanner_v1_Type_descriptor; } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TypeProto.internal_static_google_spanner_v1_Type_fieldAccessorTable .ensureFieldAccessorsInitialized( @@ -66,6 +73,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int CODE_FIELD_NUMBER = 1; private int code_ = 0; + /** * * @@ -81,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getCodeValue() { return code_; } + /** * * @@ -100,6 +109,7 @@ public com.google.spanner.v1.TypeCode getCode() { public static final int ARRAY_ELEMENT_TYPE_FIELD_NUMBER = 2; private com.google.spanner.v1.Type arrayElementType_; + /** * * @@ -117,6 +127,7 @@ public com.google.spanner.v1.TypeCode getCode() { public boolean hasArrayElementType() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -136,6 +147,7 @@ public com.google.spanner.v1.Type getArrayElementType() { ? com.google.spanner.v1.Type.getDefaultInstance() : arrayElementType_; } + /** * * @@ -156,6 +168,7 @@ public com.google.spanner.v1.TypeOrBuilder getArrayElementTypeOrBuilder() { public static final int STRUCT_TYPE_FIELD_NUMBER = 3; private com.google.spanner.v1.StructType structType_; + /** * * @@ -173,6 +186,7 @@ public com.google.spanner.v1.TypeOrBuilder getArrayElementTypeOrBuilder() { public boolean hasStructType() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -192,6 +206,7 @@ public com.google.spanner.v1.StructType getStructType() { ? com.google.spanner.v1.StructType.getDefaultInstance() : structType_; } + /** * * @@ -212,6 +227,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getStructTypeOrBuilder() { public static final int TYPE_ANNOTATION_FIELD_NUMBER = 4; private int typeAnnotation_ = 0; + /** * * @@ -234,6 +250,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getStructTypeOrBuilder() { public int getTypeAnnotationValue() { return typeAnnotation_; } + /** * * @@ -263,6 +280,7 @@ public com.google.spanner.v1.TypeAnnotationCode getTypeAnnotation() { @SuppressWarnings("serial") private volatile java.lang.Object protoTypeFqn_ = ""; + /** * * @@ -290,6 +308,7 @@ public java.lang.String getProtoTypeFqn() { return s; } } + /** * * @@ -345,8 +364,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io != com.google.spanner.v1.TypeAnnotationCode.TYPE_ANNOTATION_CODE_UNSPECIFIED.getNumber()) { output.writeEnum(4, typeAnnotation_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(protoTypeFqn_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, protoTypeFqn_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(protoTypeFqn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, protoTypeFqn_); } getUnknownFields().writeTo(output); } @@ -370,8 +389,8 @@ public int getSerializedSize() { != com.google.spanner.v1.TypeAnnotationCode.TYPE_ANNOTATION_CODE_UNSPECIFIED.getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(4, typeAnnotation_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(protoTypeFqn_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, protoTypeFqn_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(protoTypeFqn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, protoTypeFqn_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -465,38 +484,38 @@ public static com.google.spanner.v1.Type parseFrom( public static com.google.spanner.v1.Type parseFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Type parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Type parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); } public static com.google.spanner.v1.Type parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( PARSER, input, extensionRegistry); } public static com.google.spanner.v1.Type parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); } public static com.google.spanner.v1.Type parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + return com.google.protobuf.GeneratedMessage.parseWithIOException( PARSER, input, extensionRegistry); } @@ -519,10 +538,11 @@ public Builder toBuilder() { } @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } + /** * * @@ -533,7 +553,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * Protobuf type {@code google.spanner.v1.Type} */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:google.spanner.v1.Type) com.google.spanner.v1.TypeOrBuilder { @@ -542,7 +562,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return com.google.spanner.v1.TypeProto .internal_static_google_spanner_v1_Type_fieldAccessorTable @@ -555,15 +575,15 @@ private Builder() { maybeForceBuilderInitialization(); } - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { - getArrayElementTypeFieldBuilder(); - getStructTypeFieldBuilder(); + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetArrayElementTypeFieldBuilder(); + internalGetStructTypeFieldBuilder(); } } @@ -640,39 +660,6 @@ private void buildPartial0(com.google.spanner.v1.Type result) { result.bitField0_ |= to_bitField0_; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.Type) { @@ -737,13 +724,14 @@ public Builder mergeFrom( case 18: { input.readMessage( - getArrayElementTypeFieldBuilder().getBuilder(), extensionRegistry); + internalGetArrayElementTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { - input.readMessage(getStructTypeFieldBuilder().getBuilder(), extensionRegistry); + input.readMessage( + internalGetStructTypeFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; } // case 26 @@ -779,6 +767,7 @@ public Builder mergeFrom( private int bitField0_; private int code_ = 0; + /** * * @@ -794,6 +783,7 @@ public Builder mergeFrom( public int getCodeValue() { return code_; } + /** * * @@ -812,6 +802,7 @@ public Builder setCodeValue(int value) { onChanged(); return this; } + /** * * @@ -828,6 +819,7 @@ public com.google.spanner.v1.TypeCode getCode() { com.google.spanner.v1.TypeCode result = com.google.spanner.v1.TypeCode.forNumber(code_); return result == null ? com.google.spanner.v1.TypeCode.UNRECOGNIZED : result; } + /** * * @@ -849,6 +841,7 @@ public Builder setCode(com.google.spanner.v1.TypeCode value) { onChanged(); return this; } + /** * * @@ -868,11 +861,12 @@ public Builder clearCode() { } private com.google.spanner.v1.Type arrayElementType_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> arrayElementTypeBuilder_; + /** * * @@ -889,6 +883,7 @@ public Builder clearCode() { public boolean hasArrayElementType() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -911,6 +906,7 @@ public com.google.spanner.v1.Type getArrayElementType() { return arrayElementTypeBuilder_.getMessage(); } } + /** * * @@ -935,6 +931,7 @@ public Builder setArrayElementType(com.google.spanner.v1.Type value) { onChanged(); return this; } + /** * * @@ -956,6 +953,7 @@ public Builder setArrayElementType(com.google.spanner.v1.Type.Builder builderFor onChanged(); return this; } + /** * * @@ -985,6 +983,7 @@ public Builder mergeArrayElementType(com.google.spanner.v1.Type value) { } return this; } + /** * * @@ -1006,6 +1005,7 @@ public Builder clearArrayElementType() { onChanged(); return this; } + /** * * @@ -1020,8 +1020,9 @@ public Builder clearArrayElementType() { public com.google.spanner.v1.Type.Builder getArrayElementTypeBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getArrayElementTypeFieldBuilder().getBuilder(); + return internalGetArrayElementTypeFieldBuilder().getBuilder(); } + /** * * @@ -1042,6 +1043,7 @@ public com.google.spanner.v1.TypeOrBuilder getArrayElementTypeOrBuilder() { : arrayElementType_; } } + /** * * @@ -1053,14 +1055,14 @@ public com.google.spanner.v1.TypeOrBuilder getArrayElementTypeOrBuilder() { * * .google.spanner.v1.Type array_element_type = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder> - getArrayElementTypeFieldBuilder() { + internalGetArrayElementTypeFieldBuilder() { if (arrayElementTypeBuilder_ == null) { arrayElementTypeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.Type, com.google.spanner.v1.Type.Builder, com.google.spanner.v1.TypeOrBuilder>( @@ -1071,11 +1073,12 @@ public com.google.spanner.v1.TypeOrBuilder getArrayElementTypeOrBuilder() { } private com.google.spanner.v1.StructType structType_; - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> structTypeBuilder_; + /** * * @@ -1092,6 +1095,7 @@ public com.google.spanner.v1.TypeOrBuilder getArrayElementTypeOrBuilder() { public boolean hasStructType() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1114,6 +1118,7 @@ public com.google.spanner.v1.StructType getStructType() { return structTypeBuilder_.getMessage(); } } + /** * * @@ -1138,6 +1143,7 @@ public Builder setStructType(com.google.spanner.v1.StructType value) { onChanged(); return this; } + /** * * @@ -1159,6 +1165,7 @@ public Builder setStructType(com.google.spanner.v1.StructType.Builder builderFor onChanged(); return this; } + /** * * @@ -1188,6 +1195,7 @@ public Builder mergeStructType(com.google.spanner.v1.StructType value) { } return this; } + /** * * @@ -1209,6 +1217,7 @@ public Builder clearStructType() { onChanged(); return this; } + /** * * @@ -1223,8 +1232,9 @@ public Builder clearStructType() { public com.google.spanner.v1.StructType.Builder getStructTypeBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getStructTypeFieldBuilder().getBuilder(); + return internalGetStructTypeFieldBuilder().getBuilder(); } + /** * * @@ -1245,6 +1255,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getStructTypeOrBuilder() { : structType_; } } + /** * * @@ -1256,14 +1267,14 @@ public com.google.spanner.v1.StructTypeOrBuilder getStructTypeOrBuilder() { * * .google.spanner.v1.StructType struct_type = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< + private com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder> - getStructTypeFieldBuilder() { + internalGetStructTypeFieldBuilder() { if (structTypeBuilder_ == null) { structTypeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< + new com.google.protobuf.SingleFieldBuilder< com.google.spanner.v1.StructType, com.google.spanner.v1.StructType.Builder, com.google.spanner.v1.StructTypeOrBuilder>( @@ -1274,6 +1285,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getStructTypeOrBuilder() { } private int typeAnnotation_ = 0; + /** * * @@ -1296,6 +1308,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getStructTypeOrBuilder() { public int getTypeAnnotationValue() { return typeAnnotation_; } + /** * * @@ -1321,6 +1334,7 @@ public Builder setTypeAnnotationValue(int value) { onChanged(); return this; } + /** * * @@ -1345,6 +1359,7 @@ public com.google.spanner.v1.TypeAnnotationCode getTypeAnnotation() { com.google.spanner.v1.TypeAnnotationCode.forNumber(typeAnnotation_); return result == null ? com.google.spanner.v1.TypeAnnotationCode.UNRECOGNIZED : result; } + /** * * @@ -1373,6 +1388,7 @@ public Builder setTypeAnnotation(com.google.spanner.v1.TypeAnnotationCode value) onChanged(); return this; } + /** * * @@ -1399,6 +1415,7 @@ public Builder clearTypeAnnotation() { } private java.lang.Object protoTypeFqn_ = ""; + /** * * @@ -1425,6 +1442,7 @@ public java.lang.String getProtoTypeFqn() { return (java.lang.String) ref; } } + /** * * @@ -1451,6 +1469,7 @@ public com.google.protobuf.ByteString getProtoTypeFqnBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1476,6 +1495,7 @@ public Builder setProtoTypeFqn(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1497,6 +1517,7 @@ public Builder clearProtoTypeFqn() { onChanged(); return this; } + /** * * @@ -1524,17 +1545,6 @@ public Builder setProtoTypeFqnBytes(com.google.protobuf.ByteString value) { return this; } - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - // @@protoc_insertion_point(builder_scope:google.spanner.v1.Type) } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java index 6cbae9bdd1c..4d60e66a4d3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/type.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -32,6 +33,7 @@ * * Protobuf enum {@code google.spanner.v1.TypeAnnotationCode} */ +@com.google.protobuf.Generated public enum TypeAnnotationCode implements com.google.protobuf.ProtocolMessageEnum { /** * @@ -89,6 +91,16 @@ public enum TypeAnnotationCode implements com.google.protobuf.ProtocolMessageEnu UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TypeAnnotationCode"); + } + /** * * @@ -99,6 +111,7 @@ public enum TypeAnnotationCode implements com.google.protobuf.ProtocolMessageEnu * TYPE_ANNOTATION_CODE_UNSPECIFIED = 0; */ public static final int TYPE_ANNOTATION_CODE_UNSPECIFIED_VALUE = 0; + /** * * @@ -115,6 +128,7 @@ public enum TypeAnnotationCode implements com.google.protobuf.ProtocolMessageEnu * PG_NUMERIC = 2; */ public static final int PG_NUMERIC_VALUE = 2; + /** * * @@ -130,6 +144,7 @@ public enum TypeAnnotationCode implements com.google.protobuf.ProtocolMessageEnu * PG_JSONB = 3; */ public static final int PG_JSONB_VALUE = 3; + /** * * @@ -204,7 +219,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.TypeProto.getDescriptor().getEnumTypes().get(1); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java index 9c36f6c971b..cbe38593cf4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,10 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/type.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; /** @@ -34,6 +35,7 @@ * * Protobuf enum {@code google.spanner.v1.TypeCode} */ +@com.google.protobuf.Generated public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { /** * @@ -186,7 +188,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * - Whitespace characters are not preserved. * - If a JSON object has duplicate keys, only the first key is preserved. * - Members of a JSON object are not guaranteed to have their order - * preserved. + * preserved. * - JSON array elements will have their order preserved. *
                                * @@ -228,9 +230,30 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * INTERVAL = 16; */ INTERVAL(16), + /** + * + * + *
                                +   * Encoded as `string`, in lower-case hexa-decimal format, as described
                                +   * in RFC 9562, section 4.
                                +   * 
                                + * + * UUID = 17; + */ + UUID(17), UNRECOGNIZED(-1), ; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TypeCode"); + } + /** * * @@ -241,6 +264,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * TYPE_CODE_UNSPECIFIED = 0; */ public static final int TYPE_CODE_UNSPECIFIED_VALUE = 0; + /** * * @@ -251,6 +275,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * BOOL = 1; */ public static final int BOOL_VALUE = 1; + /** * * @@ -261,6 +286,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * INT64 = 2; */ public static final int INT64_VALUE = 2; + /** * * @@ -272,6 +298,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * FLOAT64 = 3; */ public static final int FLOAT64_VALUE = 3; + /** * * @@ -283,6 +310,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * FLOAT32 = 15; */ public static final int FLOAT32_VALUE = 15; + /** * * @@ -300,6 +328,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * TIMESTAMP = 4; */ public static final int TIMESTAMP_VALUE = 4; + /** * * @@ -310,6 +339,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * DATE = 5; */ public static final int DATE_VALUE = 5; + /** * * @@ -320,6 +350,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * STRING = 6; */ public static final int STRING_VALUE = 6; + /** * * @@ -331,6 +362,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * BYTES = 7; */ public static final int BYTES_VALUE = 7; + /** * * @@ -343,6 +375,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * ARRAY = 8; */ public static final int ARRAY_VALUE = 8; + /** * * @@ -354,6 +387,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * STRUCT = 9; */ public static final int STRUCT_VALUE = 9; + /** * * @@ -372,6 +406,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * NUMERIC = 10; */ public static final int NUMERIC_VALUE = 10; + /** * * @@ -382,13 +417,14 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * - Whitespace characters are not preserved. * - If a JSON object has duplicate keys, only the first key is preserved. * - Members of a JSON object are not guaranteed to have their order - * preserved. + * preserved. * - JSON array elements will have their order preserved. *
                                * * JSON = 11; */ public static final int JSON_VALUE = 11; + /** * * @@ -400,6 +436,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * PROTO = 13; */ public static final int PROTO_VALUE = 13; + /** * * @@ -410,6 +447,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { * ENUM = 14; */ public static final int ENUM_VALUE = 14; + /** * * @@ -425,6 +463,18 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum { */ public static final int INTERVAL_VALUE = 16; + /** + * + * + *
                                +   * Encoded as `string`, in lower-case hexa-decimal format, as described
                                +   * in RFC 9562, section 4.
                                +   * 
                                + * + * UUID = 17; + */ + public static final int UUID_VALUE = 17; + public final int getNumber() { if (this == UNRECOGNIZED) { throw new java.lang.IllegalArgumentException( @@ -481,6 +531,8 @@ public static TypeCode forNumber(int value) { return ENUM; case 16: return INTERVAL; + case 17: + return UUID; default: return null; } @@ -509,7 +561,7 @@ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType return getDescriptor(); } - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { return com.google.spanner.v1.TypeProto.getDescriptor().getEnumTypes().get(0); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java index e93e4976c57..5e035a1c696 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/type.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; +@com.google.protobuf.Generated public interface TypeOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.Type) @@ -36,6 +38,7 @@ public interface TypeOrBuilder * @return The enum numeric value on the wire for code. */ int getCodeValue(); + /** * * @@ -63,6 +66,7 @@ public interface TypeOrBuilder * @return Whether the arrayElementType field is set. */ boolean hasArrayElementType(); + /** * * @@ -77,6 +81,7 @@ public interface TypeOrBuilder * @return The arrayElementType. */ com.google.spanner.v1.Type getArrayElementType(); + /** * * @@ -104,6 +109,7 @@ public interface TypeOrBuilder * @return Whether the structType field is set. */ boolean hasStructType(); + /** * * @@ -118,6 +124,7 @@ public interface TypeOrBuilder * @return The structType. */ com.google.spanner.v1.StructType getStructType(); + /** * * @@ -150,6 +157,7 @@ public interface TypeOrBuilder * @return The enum numeric value on the wire for typeAnnotation. */ int getTypeAnnotationValue(); + /** * * @@ -186,6 +194,7 @@ public interface TypeOrBuilder * @return The protoTypeFqn. */ java.lang.String getProtoTypeFqn(); + /** * * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java index 3c41d2585b4..42c68057534 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,26 @@ * limitations under the License. */ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: google/spanner/v1/type.proto +// Protobuf Java Version: 4.33.2 -// Protobuf Java Version: 3.25.5 package com.google.spanner.v1; -public final class TypeProto { +@com.google.protobuf.Generated +public final class TypeProto extends com.google.protobuf.GeneratedFile { private TypeProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TypeProto"); + } + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { @@ -30,15 +42,15 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_Type_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_Type_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_StructType_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_StructType_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_StructType_Field_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_spanner_v1_StructType_Field_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -49,31 +61,49 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n\034google/spanner/v1/type.proto\022\021google.s" - + "panner.v1\032\037google/api/field_behavior.pro" - + "to\"\367\001\n\004Type\022.\n\004code\030\001 \001(\0162\033.google.spann" - + "er.v1.TypeCodeB\003\340A\002\0223\n\022array_element_typ" - + "e\030\002 \001(\0132\027.google.spanner.v1.Type\0222\n\013stru" - + "ct_type\030\003 \001(\0132\035.google.spanner.v1.Struct" - + "Type\022>\n\017type_annotation\030\004 \001(\0162%.google.s" - + "panner.v1.TypeAnnotationCode\022\026\n\016proto_ty" - + "pe_fqn\030\005 \001(\t\"\177\n\nStructType\0223\n\006fields\030\001 \003" - + "(\0132#.google.spanner.v1.StructType.Field\032" - + "<\n\005Field\022\014\n\004name\030\001 \001(\t\022%\n\004type\030\002 \001(\0132\027.g" - + "oogle.spanner.v1.Type*\325\001\n\010TypeCode\022\031\n\025TY" - + "PE_CODE_UNSPECIFIED\020\000\022\010\n\004BOOL\020\001\022\t\n\005INT64" - + "\020\002\022\013\n\007FLOAT64\020\003\022\013\n\007FLOAT32\020\017\022\r\n\tTIMESTAM" - + "P\020\004\022\010\n\004DATE\020\005\022\n\n\006STRING\020\006\022\t\n\005BYTES\020\007\022\t\n\005" - + "ARRAY\020\010\022\n\n\006STRUCT\020\t\022\013\n\007NUMERIC\020\n\022\010\n\004JSON" - + "\020\013\022\t\n\005PROTO\020\r\022\010\n\004ENUM\020\016\022\014\n\010INTERVAL\020\020*d\n" - + "\022TypeAnnotationCode\022$\n TYPE_ANNOTATION_C" - + "ODE_UNSPECIFIED\020\000\022\016\n\nPG_NUMERIC\020\002\022\014\n\010PG_" - + "JSONB\020\003\022\n\n\006PG_OID\020\004B\254\001\n\025com.google.spann" - + "er.v1B\tTypeProtoP\001Z5cloud.google.com/go/" - + "spanner/apiv1/spannerpb;spannerpb\252\002\027Goog" - + "le.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spann" - + "er\\V1\352\002\032Google::Cloud::Spanner::V1b\006prot" - + "o3" + "\n" + + "\034google/spanner/v1/type.proto\022\021google.s" + + "panner.v1\032\037google/api/field_behavior.proto\"\367\001\n" + + "\004Type\022.\n" + + "\004code\030\001 \001(\0162\033.google.spanner.v1.TypeCodeB\003\340A\002\0223\n" + + "\022array_element_type\030\002 \001(\0132\027.google.spanner.v1.Type\0222\n" + + "\013struct_type\030\003 \001(\0132\035.google.spanner.v1.StructType\022>\n" + + "\017type_annotation\030\004 \001(\0162%.google.spanner.v1.TypeAnnotationCode\022\026\n" + + "\016proto_type_fqn\030\005 \001(\t\"\177\n\n" + + "StructType\0223\n" + + "\006fields\030\001 \003(\0132#.google.spanner.v1.StructType.Field\032<\n" + + "\005Field\022\014\n" + + "\004name\030\001 \001(\t\022%\n" + + "\004type\030\002 \001(\0132\027.google.spanner.v1.Type*\337\001\n" + + "\010TypeCode\022\031\n" + + "\025TYPE_CODE_UNSPECIFIED\020\000\022\010\n" + + "\004BOOL\020\001\022\t\n" + + "\005INT64\020\002\022\013\n" + + "\007FLOAT64\020\003\022\013\n" + + "\007FLOAT32\020\017\022\r\n" + + "\tTIMESTAMP\020\004\022\010\n" + + "\004DATE\020\005\022\n\n" + + "\006STRING\020\006\022\t\n" + + "\005BYTES\020\007\022\t\n" + + "\005ARRAY\020\010\022\n\n" + + "\006STRUCT\020\t\022\013\n" + + "\007NUMERIC\020\n" + + "\022\010\n" + + "\004JSON\020\013\022\t\n" + + "\005PROTO\020\r" + + "\022\010\n" + + "\004ENUM\020\016\022\014\n" + + "\010INTERVAL\020\020\022\010\n" + + "\004UUID\020\021*d\n" + + "\022TypeAnnotationCode\022$\n" + + " TYPE_ANNOTATION_CODE_UNSPECIFIED\020\000\022\016\n\n" + + "PG_NUMERIC\020\002\022\014\n" + + "\010PG_JSONB\020\003\022\n\n" + + "\006PG_OID\020\004B\254\001\n" + + "\025com.google.spanner.v1B\tTypeProtoP\001Z5cloud.goog" + + "le.com/go/spanner/apiv1/spannerpb;spanne" + + "rpb\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\C" + + "loud\\Spanner\\V1\352\002\032Google::Cloud::Spanner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -81,35 +111,35 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.api.FieldBehaviorProto.getDescriptor(), }); - internal_static_google_spanner_v1_Type_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_google_spanner_v1_Type_descriptor = getDescriptor().getMessageType(0); internal_static_google_spanner_v1_Type_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_Type_descriptor, new java.lang.String[] { "Code", "ArrayElementType", "StructType", "TypeAnnotation", "ProtoTypeFqn", }); - internal_static_google_spanner_v1_StructType_descriptor = - getDescriptor().getMessageTypes().get(1); + internal_static_google_spanner_v1_StructType_descriptor = getDescriptor().getMessageType(1); internal_static_google_spanner_v1_StructType_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_StructType_descriptor, new java.lang.String[] { "Fields", }); internal_static_google_spanner_v1_StructType_Field_descriptor = - internal_static_google_spanner_v1_StructType_descriptor.getNestedTypes().get(0); + internal_static_google_spanner_v1_StructType_descriptor.getNestedType(0); internal_static_google_spanner_v1_StructType_Field_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spanner_v1_StructType_Field_descriptor, new java.lang.String[] { "Name", "Type", }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( descriptor, registry); - com.google.api.FieldBehaviorProto.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/change_stream.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/change_stream.proto new file mode 100644 index 00000000000..e7d12e6084c --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/change_stream.proto @@ -0,0 +1,451 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.spanner.v1; + +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; +import "google/spanner/v1/type.proto"; + +option csharp_namespace = "Google.Cloud.Spanner.V1"; +option go_package = "cloud.google.com/go/spanner/apiv1/spannerpb;spannerpb"; +option java_multiple_files = true; +option java_outer_classname = "ChangeStreamProto"; +option java_package = "com.google.spanner.v1"; +option php_namespace = "Google\\Cloud\\Spanner\\V1"; +option ruby_package = "Google::Cloud::Spanner::V1"; + +// Spanner Change Streams enable customers to capture and stream out changes to +// their Spanner databases in real-time. A change stream +// can be created with option partition_mode='IMMUTABLE_KEY_RANGE' or +// partition_mode='MUTABLE_KEY_RANGE'. +// +// This message is only used in Change Streams created with the option +// partition_mode='MUTABLE_KEY_RANGE'. Spanner automatically creates a special +// Table-Valued Function (TVF) along with each Change Streams. The function +// provides access to the change stream's records. The function is named +// READ_ (where is the +// name of the change stream), and it returns a table with only one column +// called ChangeRecord. +message ChangeStreamRecord { + // A data change record contains a set of changes to a table with the same + // modification type (insert, update, or delete) committed at the same commit + // timestamp in one change stream partition for the same transaction. Multiple + // data change records can be returned for the same transaction across + // multiple change stream partitions. + message DataChangeRecord { + // Metadata for a column. + message ColumnMetadata { + // Name of the column. + string name = 1; + + // Type of the column. + Type type = 2; + + // Indicates whether the column is a primary key column. + bool is_primary_key = 3; + + // Ordinal position of the column based on the original table definition + // in the schema starting with a value of 1. + int64 ordinal_position = 4; + } + + // Returns the value and associated metadata for a particular field of the + // [Mod][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.Mod]. + message ModValue { + // Index within the repeated + // [column_metadata][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.column_metadata] + // field, to obtain the column metadata for the column that was modified. + int32 column_metadata_index = 1; + + // The value of the column. + google.protobuf.Value value = 2; + } + + // A mod describes all data changes in a watched table row. + message Mod { + // Returns the value of the primary key of the modified row. + repeated ModValue keys = 1; + + // Returns the old values before the change for the modified columns. + // Always empty for + // [INSERT][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.INSERT], + // or if old values are not being captured specified by + // [value_capture_type][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ValueCaptureType]. + repeated ModValue old_values = 2; + + // Returns the new values after the change for the modified columns. + // Always empty for + // [DELETE][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.ModType.DELETE]. + repeated ModValue new_values = 3; + } + + // Mod type describes the type of change Spanner applied to the data. For + // example, if the client submits an INSERT_OR_UPDATE request, Spanner will + // perform an insert if there is no existing row and return ModType INSERT. + // Alternatively, if there is an existing row, Spanner will perform an + // update and return ModType UPDATE. + enum ModType { + // Not specified. + MOD_TYPE_UNSPECIFIED = 0; + + // Indicates data was inserted. + INSERT = 10; + + // Indicates existing data was updated. + UPDATE = 20; + + // Indicates existing data was deleted. + DELETE = 30; + } + + // Value capture type describes which values are recorded in the data + // change record. + enum ValueCaptureType { + // Not specified. + VALUE_CAPTURE_TYPE_UNSPECIFIED = 0; + + // Records both old and new values of the modified watched columns. + OLD_AND_NEW_VALUES = 10; + + // Records only new values of the modified watched columns. + NEW_VALUES = 20; + + // Records new values of all watched columns, including modified and + // unmodified columns. + NEW_ROW = 30; + + // Records the new values of all watched columns, including modified and + // unmodified columns. Also records the old values of the modified + // columns. + NEW_ROW_AND_OLD_VALUES = 40; + } + + // Indicates the timestamp in which the change was committed. + // DataChangeRecord.commit_timestamps, + // PartitionStartRecord.start_timestamps, + // PartitionEventRecord.commit_timestamps, and + // PartitionEndRecord.end_timestamps can have the same value in the same + // partition. + google.protobuf.Timestamp commit_timestamp = 1; + + // Record sequence numbers are unique and monotonically increasing (but not + // necessarily contiguous) for a specific timestamp across record + // types in the same partition. To guarantee ordered processing, the reader + // should process records (of potentially different types) in + // record_sequence order for a specific timestamp in the same partition. + // + // The record sequence number ordering across partitions is only meaningful + // in the context of a specific transaction. Record sequence numbers are + // unique across partitions for a specific transaction. Sort the + // DataChangeRecords for the same + // [server_transaction_id][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.server_transaction_id] + // by + // [record_sequence][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.record_sequence] + // to reconstruct the ordering of the changes within the transaction. + string record_sequence = 2; + + // Provides a globally unique string that represents the transaction in + // which the change was committed. Multiple transactions can have the same + // commit timestamp, but each transaction has a unique + // server_transaction_id. + string server_transaction_id = 3; + + // Indicates whether this is the last record for a transaction in the + // current partition. Clients can use this field to determine when all + // records for a transaction in the current partition have been received. + bool is_last_record_in_transaction_in_partition = 4; + + // Name of the table affected by the change. + string table = 5; + + // Provides metadata describing the columns associated with the + // [mods][google.spanner.v1.ChangeStreamRecord.DataChangeRecord.mods] listed + // below. + repeated ColumnMetadata column_metadata = 6; + + // Describes the changes that were made. + repeated Mod mods = 7; + + // Describes the type of change. + ModType mod_type = 8; + + // Describes the value capture type that was specified in the change stream + // configuration when this change was captured. + ValueCaptureType value_capture_type = 9; + + // Indicates the number of data change records that are part of this + // transaction across all change stream partitions. This value can be used + // to assemble all the records associated with a particular transaction. + int32 number_of_records_in_transaction = 10; + + // Indicates the number of partitions that return data change records for + // this transaction. This value can be helpful in assembling all records + // associated with a particular transaction. + int32 number_of_partitions_in_transaction = 11; + + // Indicates the transaction tag associated with this transaction. + string transaction_tag = 12; + + // Indicates whether the transaction is a system transaction. System + // transactions include those issued by time-to-live (TTL), column backfill, + // etc. + bool is_system_transaction = 13; + } + + // A heartbeat record is returned as a progress indicator, when there are no + // data changes or any other partition record types in the change stream + // partition. + message HeartbeatRecord { + // Indicates the timestamp at which the query has returned all the records + // in the change stream partition with timestamp <= heartbeat timestamp. + // The heartbeat timestamp will not be the same as the timestamps of other + // record types in the same partition. + google.protobuf.Timestamp timestamp = 1; + } + + // A partition start record serves as a notification that the client should + // schedule the partitions to be queried. PartitionStartRecord returns + // information about one or more partitions. + message PartitionStartRecord { + // Start timestamp at which the partitions should be queried to return + // change stream records with timestamps >= start_timestamp. + // DataChangeRecord.commit_timestamps, + // PartitionStartRecord.start_timestamps, + // PartitionEventRecord.commit_timestamps, and + // PartitionEndRecord.end_timestamps can have the same value in the same + // partition. + google.protobuf.Timestamp start_timestamp = 1; + + // Record sequence numbers are unique and monotonically increasing (but not + // necessarily contiguous) for a specific timestamp across record + // types in the same partition. To guarantee ordered processing, the reader + // should process records (of potentially different types) in + // record_sequence order for a specific timestamp in the same partition. + string record_sequence = 2; + + // Unique partition identifiers to be used in queries. + repeated string partition_tokens = 3; + } + + // A partition end record serves as a notification that the client should stop + // reading the partition. No further records are expected to be retrieved on + // it. + message PartitionEndRecord { + // End timestamp at which the change stream partition is terminated. All + // changes generated by this partition will have timestamps <= + // end_timestamp. DataChangeRecord.commit_timestamps, + // PartitionStartRecord.start_timestamps, + // PartitionEventRecord.commit_timestamps, and + // PartitionEndRecord.end_timestamps can have the same value in the same + // partition. PartitionEndRecord is the last record returned for a + // partition. + google.protobuf.Timestamp end_timestamp = 1; + + // Record sequence numbers are unique and monotonically increasing (but not + // necessarily contiguous) for a specific timestamp across record + // types in the same partition. To guarantee ordered processing, the reader + // should process records (of potentially different types) in + // record_sequence order for a specific timestamp in the same partition. + string record_sequence = 2; + + // Unique partition identifier describing the terminated change stream + // partition. + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEndRecord.partition_token] + // is equal to the partition token of the change stream partition currently + // queried to return this PartitionEndRecord. + string partition_token = 3; + } + + // A partition event record describes key range changes for a change stream + // partition. The changes to a row defined by its primary key can be captured + // in one change stream partition for a specific time range, and then be + // captured in a different change stream partition for a different time range. + // This movement of key ranges across change stream partitions is a reflection + // of activities, such as Spanner's dynamic splitting and load balancing, etc. + // Processing this event is needed if users want to guarantee processing of + // the changes for any key in timestamp order. If time ordered processing of + // changes for a primary key is not needed, this event can be ignored. + // To guarantee time ordered processing for each primary key, if the event + // describes move-ins, the reader of this partition needs to wait until the + // readers of the source partitions have processed all records with timestamps + // <= this PartitionEventRecord.commit_timestamp, before advancing beyond this + // PartitionEventRecord. If the event describes move-outs, the reader can + // notify the readers of the destination partitions that they can continue + // processing. + message PartitionEventRecord { + // Describes move-in of the key ranges into the change stream partition + // identified by + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]. + // + // To maintain processing the changes for a particular key in timestamp + // order, the query processing the change stream partition identified by + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token] + // should not advance beyond the partition event record commit timestamp + // until the queries processing the source change stream partitions have + // processed all change stream records with timestamps <= the partition + // event record commit timestamp. + message MoveInEvent { + // An unique partition identifier describing the source change stream + // partition that recorded changes for the key range that is moving + // into this partition. + string source_partition_token = 1; + } + + // Describes move-out of the key ranges out of the change stream partition + // identified by + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]. + // + // To maintain processing the changes for a particular key in timestamp + // order, the query processing the + // [MoveOutEvent][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.MoveOutEvent] + // in the partition identified by + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token] + // should inform the queries processing the destination partitions that + // they can unblock and proceed processing records past the + // [commit_timestamp][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.commit_timestamp]. + message MoveOutEvent { + // An unique partition identifier describing the destination change + // stream partition that will record changes for the key range that is + // moving out of this partition. + string destination_partition_token = 1; + } + + // Indicates the commit timestamp at which the key range change occurred. + // DataChangeRecord.commit_timestamps, + // PartitionStartRecord.start_timestamps, + // PartitionEventRecord.commit_timestamps, and + // PartitionEndRecord.end_timestamps can have the same value in the same + // partition. + google.protobuf.Timestamp commit_timestamp = 1; + + // Record sequence numbers are unique and monotonically increasing (but not + // necessarily contiguous) for a specific timestamp across record + // types in the same partition. To guarantee ordered processing, the reader + // should process records (of potentially different types) in + // record_sequence order for a specific timestamp in the same partition. + string record_sequence = 2; + + // Unique partition identifier describing the partition this event + // occurred on. + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token] + // is equal to the partition token of the change stream partition currently + // queried to return this PartitionEventRecord. + string partition_token = 3; + + // Set when one or more key ranges are moved into the change stream + // partition identified by + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]. + // + // Example: Two key ranges are moved into partition (P1) from partition (P2) + // and partition (P3) in a single transaction at timestamp T. + // + // The PartitionEventRecord returned in P1 will reflect the move as: + // + // PartitionEventRecord { + // commit_timestamp: T + // partition_token: "P1" + // move_in_events { + // source_partition_token: "P2" + // } + // move_in_events { + // source_partition_token: "P3" + // } + // } + // + // The PartitionEventRecord returned in P2 will reflect the move as: + // + // PartitionEventRecord { + // commit_timestamp: T + // partition_token: "P2" + // move_out_events { + // destination_partition_token: "P1" + // } + // } + // + // The PartitionEventRecord returned in P3 will reflect the move as: + // + // PartitionEventRecord { + // commit_timestamp: T + // partition_token: "P3" + // move_out_events { + // destination_partition_token: "P1" + // } + // } + repeated MoveInEvent move_in_events = 4; + + // Set when one or more key ranges are moved out of the change stream + // partition identified by + // [partition_token][google.spanner.v1.ChangeStreamRecord.PartitionEventRecord.partition_token]. + // + // Example: Two key ranges are moved out of partition (P1) to partition (P2) + // and partition (P3) in a single transaction at timestamp T. + // + // The PartitionEventRecord returned in P1 will reflect the move as: + // + // PartitionEventRecord { + // commit_timestamp: T + // partition_token: "P1" + // move_out_events { + // destination_partition_token: "P2" + // } + // move_out_events { + // destination_partition_token: "P3" + // } + // } + // + // The PartitionEventRecord returned in P2 will reflect the move as: + // + // PartitionEventRecord { + // commit_timestamp: T + // partition_token: "P2" + // move_in_events { + // source_partition_token: "P1" + // } + // } + // + // The PartitionEventRecord returned in P3 will reflect the move as: + // + // PartitionEventRecord { + // commit_timestamp: T + // partition_token: "P3" + // move_in_events { + // source_partition_token: "P1" + // } + // } + repeated MoveOutEvent move_out_events = 5; + } + + // One of the change stream subrecords. + oneof record { + // Data change record describing a data change for a change stream + // partition. + DataChangeRecord data_change_record = 1; + + // Heartbeat record describing a heartbeat for a change stream partition. + HeartbeatRecord heartbeat_record = 2; + + // Partition start record describing a new change stream partition. + PartitionStartRecord partition_start_record = 3; + + // Partition end record describing a terminated change stream partition. + PartitionEndRecord partition_end_record = 4; + + // Partition event record describing key range changes for a change stream + // partition. + PartitionEventRecord partition_event_record = 5; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto index d5f9b15d5b3..20d2850bb64 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 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,9 @@ syntax = "proto3"; package google.spanner.v1; +import "google/api/field_behavior.proto"; import "google/protobuf/timestamp.proto"; +import "google/spanner/v1/location.proto"; import "google/spanner/v1/transaction.proto"; option csharp_namespace = "Google.Cloud.Spanner.V1"; @@ -44,16 +46,29 @@ message CommitResponse { // The Cloud Spanner timestamp at which the transaction committed. google.protobuf.Timestamp commit_timestamp = 1; - // The statistics about this Commit. Not returned by default. + // The statistics about this `Commit`. Not returned by default. // For more information, see // [CommitRequest.return_commit_stats][google.spanner.v1.CommitRequest.return_commit_stats]. CommitStats commit_stats = 2; - // Clients should examine and retry the commit if any of the following - // reasons are populated. + // You must examine and retry the commit if the following is populated. oneof MultiplexedSessionRetry { // If specified, transaction has not committed yet. - // Clients must retry the commit with the new precommit token. + // You must retry the commit with the new precommit token. MultiplexedSessionPrecommitToken precommit_token = 4; } + + // If `TransactionOptions.isolation_level` is set to + // `IsolationLevel.REPEATABLE_READ`, then the snapshot timestamp is the + // timestamp at which all reads in the transaction ran. This timestamp is + // never returned. + google.protobuf.Timestamp snapshot_timestamp = 5; + + // Optional. A cache update expresses a set of changes the client should + // incorporate into its location cache. The client should discard the changes + // if they are older than the data it already has. This data can be obtained + // in response to requests that included a `RoutingHint` field, but may also + // be obtained by explicit location-fetching RPCs which may be added in the + // future. + CacheUpdate cache_update = 6 [(google.api.field_behavior) = OPTIONAL]; } diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto index 82f073b964f..5e30e831e64 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -152,8 +152,8 @@ message KeySet { // encoded as described [here][google.spanner.v1.TypeCode]. repeated google.protobuf.ListValue keys = 1; - // A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about - // key range specifications. + // A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more + // information about key range specifications. repeated KeyRange ranges = 2; // For convenience `all` can be set to `true` to indicate that this diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/location.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/location.proto new file mode 100644 index 00000000000..870dc0ec0a9 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/location.proto @@ -0,0 +1,388 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.spanner.v1; + +import "google/protobuf/struct.proto"; +import "google/spanner/v1/type.proto"; + +option csharp_namespace = "Google.Cloud.Spanner.V1"; +option go_package = "cloud.google.com/go/spanner/apiv1/spannerpb;spannerpb"; +option java_multiple_files = true; +option java_outer_classname = "LocationProto"; +option java_package = "com.google.spanner.v1"; +option php_namespace = "Google\\Cloud\\Spanner\\V1"; +option ruby_package = "Google::Cloud::Spanner::V1"; + +// A `Range` represents a range of keys in a database. The keys themselves +// are encoded in "sortable string format", also known as ssformat. Consult +// Spanner's open source client libraries for details on the encoding. +// +// Each range represents a contiguous range of rows, possibly from multiple +// tables/indexes. Each range is associated with a single paxos group (known as +// a "group" throughout this API), a split (which names the exact range within +// the group), and a generation that can be used to determine whether a given +// `Range` represents a newer or older location for the key range. +message Range { + // The start key of the range, inclusive. Encoded in "sortable string format" + // (ssformat). + bytes start_key = 1; + + // The limit key of the range, exclusive. Encoded in "sortable string format" + // (ssformat). + bytes limit_key = 2; + + // The UID of the paxos group where this range is stored. UIDs are unique + // within the database. References `Group.group_uid`. + uint64 group_uid = 3; + + // A group can store multiple ranges of keys. Each key range is named by an + // ID (the split ID). Within a group, split IDs are unique. The `split_id` + // names the exact split in `group_uid` where this range is stored. + uint64 split_id = 4; + + // `generation` indicates the freshness of the range information contained + // in this proto. Generations can be compared lexicographically; if generation + // A is greater than generation B, then the `Range` corresponding to A is + // newer than the `Range` corresponding to B, and should be used + // preferentially. + bytes generation = 5; +} + +// A `Tablet` represents a single replica of a `Group`. A tablet is served by a +// single server at a time, and can move between servers due to server death or +// simply load balancing. +message Tablet { + // Indicates the role of the tablet. + enum Role { + // Not specified. + ROLE_UNSPECIFIED = 0; + + // The tablet can perform reads and (if elected leader) writes. + READ_WRITE = 1; + + // The tablet can only perform reads. + READ_ONLY = 2; + } + + // The UID of the tablet, unique within the database. Matches the + // `tablet_uids` and `leader_tablet_uid` fields in `Group`. + uint64 tablet_uid = 1; + + // The address of the server that is serving this tablet -- either an IP + // address or DNS hostname and a port number. + string server_address = 2; + + // Where this tablet is located. This is the name of a Google Cloud region, + // such as "us-central1". + string location = 3; + + // The role of the tablet. + Role role = 4; + + // `incarnation` indicates the freshness of the tablet information contained + // in this proto. Incarnations can be compared lexicographically; if + // incarnation A is greater than incarnation B, then the `Tablet` + // corresponding to A is newer than the `Tablet` corresponding to B, and + // should be used preferentially. + bytes incarnation = 5; + + // Distances help the client pick the closest tablet out of the list of + // tablets for a given request. Tablets with lower distances should generally + // be preferred. Tablets with the same distance are approximately equally + // close; the client can choose arbitrarily. + // + // Distances do not correspond precisely to expected latency, geographical + // distance, or anything else. Distances should be compared only between + // tablets of the same group; they are not meaningful between different + // groups. + // + // A value of zero indicates that the tablet may be in the same zone as + // the client, and have minimum network latency. A value less than or equal to + // five indicates that the tablet is thought to be in the same region as the + // client, and may have a few milliseconds of network latency. Values greater + // than five are most likely in a different region, with non-trivial network + // latency. + // + // Clients should use the following algorithm: + // * If the request is using a directed read, eliminate any tablets that + // do not match the directed read's target zone and/or replica type. + // * (Read-write transactions only) Choose leader tablet if it has an + // distance <=5. + // * Group and sort tablets by distance. Choose a random + // tablet with the lowest distance. If the request + // is not a directed read, only consider replicas with distances <=5. + // * Send the request to the fallback endpoint. + // + // The tablet picked by this algorithm may be skipped, either because it is + // marked as `skip` by the server or because the corresponding server is + // unreachable, flow controlled, etc. Skipped tablets should be added to the + // `skipped_tablet_uid` field in `RoutingHint`; the algorithm above should + // then be re-run without including the skipped tablet(s) to pick the next + // best tablet. + uint32 distance = 6; + + // If true, the tablet should not be chosen by the client. Typically, this + // signals that the tablet is unhealthy in some way. Tablets with `skip` + // set to true should be reported back to the server in + // `RoutingHint.skipped_tablet_uid`; this cues the server to send updated + // information for this tablet should it become usable again. + bool skip = 7; +} + +// A `Group` represents a paxos group in a database. A group is a set of +// tablets that are replicated across multiple servers. Groups may have a leader +// tablet. Groups store one (or sometimes more) ranges of keys. +message Group { + // The UID of the paxos group, unique within the database. Matches the + // `group_uid` field in `Range`. + uint64 group_uid = 1; + + // A list of tablets that are part of the group. Note that this list may not + // be exhaustive; it will only include tablets the server considers useful + // to the client. The returned list is ordered ascending by distance. + // + // Tablet UIDs reference `Tablet.tablet_uid`. + repeated Tablet tablets = 2; + + // The last known leader tablet of the group as an index into `tablets`. May + // be negative if the group has no known leader. + int32 leader_index = 3; + + // `generation` indicates the freshness of the group information (including + // leader information) contained in this proto. Generations can be compared + // lexicographically; if generation A is greater than generation B, then the + // `Group` corresponding to A is newer than the `Group` corresponding to B, + // and should be used preferentially. + bytes generation = 4; +} + +// A `KeyRecipe` provides the metadata required to translate reads, mutations, +// and queries into a byte array in "sortable string format" (ssformat)that can +// be used with `Range`s to route requests. Note that the client *must* tolerate +// `KeyRecipe`s that appear to be invalid, since the `KeyRecipe` format may +// change over time. Requests with invalid `KeyRecipe`s should be routed to a +// default server. +message KeyRecipe { + // An ssformat key is composed of a sequence of tag numbers and key column + // values. `Part` represents a single tag or key column value. + message Part { + // The remaining fields encode column values. + enum Order { + // Default value, equivalent to `ASCENDING`. + ORDER_UNSPECIFIED = 0; + + // The key is ascending - corresponds to `ASC` in the schema definition. + ASCENDING = 1; + + // The key is descending - corresponds to `DESC` in the schema definition. + DESCENDING = 2; + } + + // The null order of the key column. This dictates where NULL values sort + // in the sorted order. Note that columns which are `NOT NULL` can have a + // special encoding. + enum NullOrder { + // Default value. This value is unused. + NULL_ORDER_UNSPECIFIED = 0; + + // NULL values sort before any non-NULL values. + NULLS_FIRST = 1; + + // NULL values sort after any non-NULL values. + NULLS_LAST = 2; + + // The column does not support NULL values. + NOT_NULL = 3; + } + + // If non-zero, `tag` is the only field present in this `Part`. The part + // is encoded by appending `tag` to the ssformat key. + uint32 tag = 1; + + // Whether the key column is sorted ascending or descending. Only present + // if `tag` is zero. + Order order = 2; + + // How NULLs are represented in the encoded key part. Only present if `tag` + // is zero. + NullOrder null_order = 3; + + // The type of the key part. Only present if `tag` is zero. + Type type = 4; + + // Only present if `tag` is zero. + oneof value_type { + // `identifier` is the name of the column or query parameter. + string identifier = 5; + + // The constant value of the key part. + // It is present when query uses a constant as a part of the key. + google.protobuf.Value value = 6; + + // If true, the client is responsible to fill in the value randomly. + // It's relevant only for the INT64 type. + bool random = 8; + } + + // It is a repeated field to support fetching key columns from nested + // structs, such as `STRUCT` query parameters. + repeated int32 struct_identifiers = 7; + } + + // A recipe can be associated with a table, index, or query. Tables recipes + // are used to encode read and write keys; index recipes are used for index + // reads, and query recipes are used only for SQL queries. + oneof target { + // A table name, matching the name from the database schema. + string table_name = 1; + + // An index name, matching the name from the database schema. + string index_name = 2; + + // The UID of a query, matching the UID from `RoutingHint`. + uint64 operation_uid = 3; + } + + // Parts are in the order they should appear in the encoded key. + repeated Part part = 4; +} + +// A `RecipeList` contains a list of `KeyRecipe`s, which share the same +// schema generation. +message RecipeList { + // The schema generation of the recipes. To be sent to the server in + // `RoutingHint.schema_generation` whenever one of the recipes is used. + // `schema_generation` values are comparable with each other; if generation A + // compares greater than generation B, then A is a more recent schema than B. + // Clients should in general aim to cache only the latest schema generation, + // and discard more stale recipes. + bytes schema_generation = 1; + + // A list of recipes to be cached. + repeated KeyRecipe recipe = 3; +} + +// A `CacheUpdate` expresses a set of changes the client should incorporate into +// its location cache. These changes may or may not be newer than what the +// client has in its cache, and should be discarded if necessary. `CacheUpdate`s +// can be obtained in response to requests that included a `RoutingHint` +// field, but may also be obtained by explicit location-fetching RPCs which may +// be added in the future. +message CacheUpdate { + // An internal ID for the database. Database names can be reused if a database + // is deleted and re-created. Each time the database is re-created, it will + // get a new database ID, which will never be re-used for any other database. + uint64 database_id = 1; + + // A list of ranges to be cached. + repeated Range range = 2; + + // A list of groups to be cached. + repeated Group group = 3; + + // A list of recipes to be cached. + RecipeList key_recipes = 5; +} + +// `RoutingHint` can be optionally added to location-aware Spanner +// requests. It gives the server hints that can be used to route the request to +// an appropriate server, potentially significantly decreasing latency and +// improving throughput. To achieve improved performance, most fields must be +// filled in with accurate values. +// +// The presence of a valid `RoutingHint` tells the server that the client +// is location-aware. +// +// `RoutingHint` does not change the semantics of the request; it is +// purely a performance hint; the request will perform the same actions on the +// database's data as if `RoutingHint` were not present. However, if +// the `RoutingHint` is incomplete or incorrect, the response may include +// a `CacheUpdate` the client can use to correct its location cache. +message RoutingHint { + // A tablet that was skipped by the client. See `Tablet.tablet_uid` and + // `Tablet.incarnation`. + message SkippedTablet { + // The tablet UID of the tablet that was skipped. See `Tablet.tablet_uid`. + uint64 tablet_uid = 1; + + // The incarnation of the tablet that was skipped. See `Tablet.incarnation`. + bytes incarnation = 2; + } + + // A session-scoped unique ID for the operation, computed client-side. + // Requests with the same `operation_uid` should have a shared 'shape', + // meaning that some fields are expected to be the same, such as the SQL + // query, the target table/columns (for reads) etc. Requests with the same + // `operation_uid` are meant to differ only in fields like keys/key + // ranges/query parameters, transaction IDs, etc. + // + // `operation_uid` must be non-zero for `RoutingHint` to be valid. + uint64 operation_uid = 1; + + // The database ID of the database being accessed, see + // `CacheUpdate.database_id`. Should match the cache entries that were used + // to generate the rest of the fields in this `RoutingHint`. + uint64 database_id = 2; + + // The schema generation of the recipe that was used to generate `key` and + // `limit_key`. See also `RecipeList.schema_generation`. + bytes schema_generation = 3; + + // The key / key range that this request accesses. For operations that + // access a single key, `key` should be set and `limit_key` should be empty. + // For operations that access a key range, `key` and `limit_key` should both + // be set, to the inclusive start and exclusive end of the range respectively. + // + // The keys are encoded in "sortable string format" (ssformat), using a + // `KeyRecipe` that is appropriate for the request. See `KeyRecipe` for more + // details. + bytes key = 4; + + // If this request targets a key range, this is the exclusive end of the + // range. See `key` for more details. + bytes limit_key = 5; + + // The group UID of the group that the client believes serves the range + // defined by `key` and `limit_key`. See `Range.group_uid` for more details. + uint64 group_uid = 6; + + // The split ID of the split that the client believes contains the range + // defined by `key` and `limit_key`. See `Range.split_id` for more details. + uint64 split_id = 7; + + // The tablet UID of the tablet from group `group_uid` that the client + // believes is best to serve this request. See `Group.local_tablet_uids` and + // `Group.leader_tablet_uid`. + uint64 tablet_uid = 8; + + // If the client had multiple options for tablet selection, and some of its + // first choices were unhealthy (e.g., the server is unreachable, or + // `Tablet.skip` is true), this field will contain the tablet UIDs of those + // tablets, with their incarnations. The server may include a `CacheUpdate` + // with new locations for those tablets. + repeated SkippedTablet skipped_tablet_uid = 9; + + // If present, the client's current location. This should be the name of a + // Google Cloud zone or region, such as "us-central1". + // + // If absent, the client's location will be assumed to be the same as the + // location of the server the client ends up connected to. + // + // Locations are primarily valuable for clients that connect from regions + // other than the ones that contain the Spanner database. + string client_location = 10; +} diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto index 7fbf93f8a97..7e3306a2038 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package google.spanner.v1; import "google/api/field_behavior.proto"; import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; import "google/spanner/v1/keys.proto"; option csharp_namespace = "Google.Cloud.Spanner.V1"; @@ -32,13 +33,16 @@ option ruby_package = "Google::Cloud::Spanner::V1"; // applied to a Cloud Spanner database by sending them in a // [Commit][google.spanner.v1.Spanner.Commit] call. message Mutation { - // Arguments to [insert][google.spanner.v1.Mutation.insert], [update][google.spanner.v1.Mutation.update], [insert_or_update][google.spanner.v1.Mutation.insert_or_update], and + // Arguments to [insert][google.spanner.v1.Mutation.insert], + // [update][google.spanner.v1.Mutation.update], + // [insert_or_update][google.spanner.v1.Mutation.insert_or_update], and // [replace][google.spanner.v1.Mutation.replace] operations. message Write { // Required. The table whose rows will be written. string table = 1 [(google.api.field_behavior) = REQUIRED]; - // The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written. + // The names of the columns in + // [table][google.spanner.v1.Mutation.Write.table] to be written. // // The list of columns must contain enough columns to allow // Cloud Spanner to derive values for all primary key columns in the @@ -48,11 +52,13 @@ message Mutation { // The values to be written. `values` can contain more than one // list of values. If it does, then multiple rows are written, one // for each entry in `values`. Each list in `values` must have - // exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] - // above. Sending multiple lists is equivalent to sending multiple - // `Mutation`s, each containing one `values` entry and repeating - // [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are - // encoded as described [here][google.spanner.v1.TypeCode]. + // exactly as many entries as there are entries in + // [columns][google.spanner.v1.Mutation.Write.columns] above. Sending + // multiple lists is equivalent to sending multiple `Mutation`s, each + // containing one `values` entry and repeating + // [table][google.spanner.v1.Mutation.Write.table] and + // [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in + // each list are encoded as described [here][google.spanner.v1.TypeCode]. repeated google.protobuf.ListValue values = 3; } @@ -61,15 +67,49 @@ message Mutation { // Required. The table whose rows will be deleted. string table = 1 [(google.api.field_behavior) = REQUIRED]; - // Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete. The - // primary keys must be specified in the order in which they appear in the - // `PRIMARY KEY()` clause of the table's equivalent DDL statement (the DDL - // statement used to create the table). - // Delete is idempotent. The transaction will succeed even if some or all - // rows do not exist. + // Required. The primary keys of the rows within + // [table][google.spanner.v1.Mutation.Delete.table] to delete. The primary + // keys must be specified in the order in which they appear in the `PRIMARY + // KEY()` clause of the table's equivalent DDL statement (the DDL statement + // used to create the table). Delete is idempotent. The transaction will + // succeed even if some or all rows do not exist. KeySet key_set = 2 [(google.api.field_behavior) = REQUIRED]; } + // Arguments to [send][google.spanner.v1.Mutation.send] operations. + message Send { + // Required. The queue to which the message will be sent. + string queue = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The primary key of the message to be sent. + google.protobuf.ListValue key = 2 [(google.api.field_behavior) = REQUIRED]; + + // The time at which Spanner will begin attempting to deliver the message. + // If `deliver_time` is not set, Spanner will deliver the message + // immediately. If `deliver_time` is in the past, Spanner will replace it + // with a value closer to the current time. + google.protobuf.Timestamp deliver_time = 3; + + // The payload of the message. + google.protobuf.Value payload = 4; + } + + // Arguments to [ack][google.spanner.v1.Mutation.ack] operations. + message Ack { + // Required. The queue where the message to be acked is stored. + string queue = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The primary key of the message to be acked. + google.protobuf.ListValue key = 2 [(google.api.field_behavior) = REQUIRED]; + + // By default, an attempt to ack a message that does not exist will fail + // with a `NOT_FOUND` error. With `ignore_not_found` set to true, the ack + // will succeed even if the message does not exist. This is useful for + // unconditionally acking a message, even if it is missing or has already + // been acked. + bool ignore_not_found = 3; + } + // Required. The operation to perform. oneof operation { // Insert new rows in a table. If any of the rows already exist, @@ -80,19 +120,22 @@ message Mutation { // already exist, the transaction fails with error `NOT_FOUND`. Write update = 2; - // Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then - // its column values are overwritten with the ones provided. Any - // column values not explicitly written are preserved. + // Like [insert][google.spanner.v1.Mutation.insert], except that if the row + // already exists, then its column values are overwritten with the ones + // provided. Any column values not explicitly written are preserved. // - // When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT - // NULL` columns in the table must be given a value. This holds true - // even when the row already exists and will therefore actually be updated. + // When using + // [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as + // when using [insert][google.spanner.v1.Mutation.insert], all `NOT NULL` + // columns in the table must be given a value. This holds true even when the + // row already exists and will therefore actually be updated. Write insert_or_update = 3; - // Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, it is - // deleted, and the column values provided are inserted - // instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not - // explicitly written become `NULL`. + // Like [insert][google.spanner.v1.Mutation.insert], except that if the row + // already exists, it is deleted, and the column values provided are + // inserted instead. Unlike + // [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this + // means any values not explicitly written become `NULL`. // // In an interleaved table, if you create the child table with the // `ON DELETE CASCADE` annotation, then replacing a parent row @@ -103,5 +146,11 @@ message Mutation { // Delete rows from a table. Succeeds whether or not the named // rows were present. Delete delete = 5; + + // Send a message to a queue. + Send send = 6; + + // Ack a message from a queue. + Ack ack = 7; } } diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto index ba18055e33e..5850ff97fb2 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 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 @@ syntax = "proto3"; package google.spanner.v1; +import "google/api/field_behavior.proto"; import "google/protobuf/struct.proto"; option csharp_namespace = "Google.Cloud.Spanner.V1"; @@ -26,10 +27,11 @@ option java_package = "com.google.spanner.v1"; option php_namespace = "Google\\Cloud\\Spanner\\V1"; option ruby_package = "Google::Cloud::Spanner::V1"; -// Node information for nodes appearing in a [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes]. +// Node information for nodes appearing in a +// [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes]. message PlanNode { - // The kind of [PlanNode][google.spanner.v1.PlanNode]. Distinguishes between the two different kinds of - // nodes that can appear in a query plan. + // The kind of [PlanNode][google.spanner.v1.PlanNode]. Distinguishes between + // the two different kinds of nodes that can appear in a query plan. enum Kind { // Not specified. KIND_UNSPECIFIED = 0; @@ -58,14 +60,14 @@ message PlanNode { // with the output variable. string type = 2; - // Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds - // to an output variable of the parent node. The field carries the name of - // the output variable. - // For example, a `TableScan` operator that reads rows from a table will - // have child links to the `SCALAR` nodes representing the output variables - // created for each column that is read by the operator. The corresponding - // `variable` fields will be set to the variable names assigned to the - // columns. + // Only present if the child node is + // [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds to an + // output variable of the parent node. The field carries the name of the + // output variable. For example, a `TableScan` operator that reads rows from + // a table will have child links to the `SCALAR` nodes representing the + // output variables created for each column that is read by the operator. + // The corresponding `variable` fields will be set to the variable names + // assigned to the columns. string variable = 3; } @@ -83,14 +85,15 @@ message PlanNode { map subqueries = 2; } - // The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes]. + // The `PlanNode`'s index in [node + // list][google.spanner.v1.QueryPlan.plan_nodes]. int32 index = 1; // Used to determine the type of node. May be needed for visualizing // different kinds of nodes differently. For example, If the node is a - // [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation - // which can be used to directly embed a description of the node in its - // parent. + // [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a + // condensed representation which can be used to directly embed a description + // of the node in its parent. Kind kind = 2; // The display name for the node. @@ -99,7 +102,8 @@ message PlanNode { // List of child node `index`es and their relationship to this parent. repeated ChildLink child_links = 4; - // Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes. + // Condensed representation for + // [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes. ShortRepresentation short_representation = 5; // Attributes relevant to the node contained in a group of key-value pairs. @@ -119,10 +123,34 @@ message PlanNode { google.protobuf.Struct execution_stats = 7; } +// Output of query advisor analysis. +message QueryAdvisorResult { + // Recommendation to add new indexes to run queries more efficiently. + message IndexAdvice { + // Optional. DDL statements to add new indexes that will improve the query. + repeated string ddl = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Estimated latency improvement factor. For example if the query + // currently takes 500 ms to run and the estimated latency with new indexes + // is 100 ms this field will be 5. + double improvement_factor = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. Index Recommendation for a query. This is an optional field and + // the recommendation will only be available when the recommendation + // guarantees significant improvement in query performance. + repeated IndexAdvice index_advice = 1 + [(google.api.field_behavior) = OPTIONAL]; +} + // Contains an ordered list of nodes appearing in the query plan. message QueryPlan { // The nodes in the query plan. Plan nodes are returned in pre-order starting - // with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in - // `plan_nodes`. + // with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` + // corresponds to its index in `plan_nodes`. repeated PlanNode plan_nodes = 1; + + // Optional. The advise/recommendations for a query. Currently this field will + // be serving index recommendations for a query. + QueryAdvisorResult query_advice = 2 [(google.api.field_behavior) = OPTIONAL]; } diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto index 0b8aabf8679..3851d688ce2 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,11 +18,11 @@ package google.spanner.v1; import "google/api/field_behavior.proto"; import "google/protobuf/struct.proto"; +import "google/spanner/v1/location.proto"; import "google/spanner/v1/query_plan.proto"; import "google/spanner/v1/transaction.proto"; import "google/spanner/v1/type.proto"; -option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.Spanner.V1"; option go_package = "cloud.google.com/go/spanner/apiv1/spannerpb;spannerpb"; option java_multiple_files = true; @@ -38,11 +38,10 @@ message ResultSet { ResultSetMetadata metadata = 1; // Each element in `rows` is a row whose format is defined by - // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element - // in each row matches the ith field in - // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are - // encoded based on type as described - // [here][google.spanner.v1.TypeCode]. + // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith + // element in each row matches the ith field in + // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements + // are encoded based on type as described [here][google.spanner.v1.TypeCode]. repeated google.protobuf.ListValue rows = 2; // Query plan and execution statistics for the SQL statement that @@ -50,20 +49,26 @@ message ResultSet { // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. // DML statements always produce stats containing the number of rows // modified, unless executed using the - // [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - // Other fields may or may not be populated, based on the + // [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + // Other fields might or might not be populated, based on the // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. ResultSetStats stats = 3; - // Optional. A precommit token will be included if the read-write transaction - // is on a multiplexed session. - // The precommit token with the highest sequence number from this transaction - // attempt should be passed to the + // Optional. A precommit token is included if the read-write transaction is on + // a multiplexed session. Pass the precommit token with the highest sequence + // number from this transaction attempt to the // [Commit][google.spanner.v1.Spanner.Commit] request for this transaction. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. MultiplexedSessionPrecommitToken precommit_token = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A cache update expresses a set of changes the client should + // incorporate into its location cache. The client should discard the changes + // if they are older than the data it already has. This data can be obtained + // in response to requests that included a `RoutingHint` field, but may also + // be obtained by explicit location-fetching RPCs which may be added in the + // future. + CacheUpdate cache_update = 6 [(google.api.field_behavior) = OPTIONAL]; } // Partial results from a streaming read or SQL query. Streaming reads and @@ -83,13 +88,14 @@ message PartialResultSet { // Most values are encoded based on type as described // [here][google.spanner.v1.TypeCode]. // - // It is possible that the last value in values is "chunked", + // It's possible that the last value in values is "chunked", // meaning that the rest of the value is sent in subsequent - // `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - // field. Two or more chunked values can be merged to form a - // complete value as follows: + // `PartialResultSet`(s). This is denoted by the + // [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + // Two or more chunked values can be merged to form a complete value as + // follows: // - // * `bool/number/null`: cannot be chunked + // * `bool/number/null`: can't be chunked // * `string`: concatenate the strings // * `list`: concatenate the lists. If the last element in a list is a // `string`, `list`, or `object`, merge it with the first element in @@ -100,28 +106,28 @@ message PartialResultSet { // // Some examples of merging: // - // # Strings are concatenated. + // Strings are concatenated. // "foo", "bar" => "foobar" // - // # Lists of non-strings are concatenated. + // Lists of non-strings are concatenated. // [2, 3], [4] => [2, 3, 4] // - // # Lists are concatenated, but the last and first elements are merged - // # because they are strings. + // Lists are concatenated, but the last and first elements are merged + // because they are strings. // ["a", "b"], ["c", "d"] => ["a", "bc", "d"] // - // # Lists are concatenated, but the last and first elements are merged - // # because they are lists. Recursively, the last and first elements - // # of the inner lists are merged because they are strings. + // Lists are concatenated, but the last and first elements are merged + // because they are lists. Recursively, the last and first elements + // of the inner lists are merged because they are strings. // ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] // - // # Non-overlapping object fields are combined. + // Non-overlapping object fields are combined. // {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} // - // # Overlapping object fields are merged. + // Overlapping object fields are merged. // {"a": "1"}, {"a": "2"} => {"a": "12"} // - // # Examples of merging objects containing lists of strings. + // Examples of merging objects containing lists of strings. // {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} // // For a more complete example, suppose a streaming SQL query is @@ -137,7 +143,6 @@ message PartialResultSet { // { // "values": ["orl"] // "chunked_value": true - // "resume_token": "Bqp2..." // } // { // "values": ["d"] @@ -147,11 +152,17 @@ message PartialResultSet { // This sequence of `PartialResultSet`s encodes two rows, one // containing the field value `"Hello"`, and a second containing the // field value `"World" = "W" + "orl" + "d"`. + // + // Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + // resumed from a previously yielded `resume_token`. For the above sequence of + // `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + // yields results from the `PartialResultSet` with value "orl". repeated google.protobuf.Value values = 2; - // If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must - // be combined with more values from subsequent `PartialResultSet`s - // to obtain a complete field value. + // If true, then the final value in + // [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be + // combined with more values from subsequent `PartialResultSet`s to obtain a + // complete field value. bool chunked_value = 3; // Streaming calls might be interrupted for a variety of reasons, such @@ -163,27 +174,37 @@ message PartialResultSet { // Query plan and execution statistics for the statement that produced this // streaming result set. These can be requested by setting - // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent - // only once with the last response in the stream. - // This field will also be present in the last response for DML - // statements. + // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] + // and are sent only once with the last response in the stream. This field is + // also present in the last response for DML statements. ResultSetStats stats = 5; - // Optional. A precommit token will be included if the read-write transaction - // is on a multiplexed session. - // The precommit token with the highest sequence number from this transaction - // attempt should be passed to the + // Optional. A precommit token is included if the read-write transaction + // has multiplexed sessions enabled. Pass the precommit token with the highest + // sequence number from this transaction attempt to the // [Commit][google.spanner.v1.Spanner.Commit] request for this transaction. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. MultiplexedSessionPrecommitToken precommit_token = 8 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Indicates whether this is the last `PartialResultSet` in the + // stream. The server might optionally set this field. Clients shouldn't rely + // on this field being set in all cases. + bool last = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A cache update expresses a set of changes the client should + // incorporate into its location cache. The client should discard the changes + // if they are older than the data it already has. This data can be obtained + // in response to requests that included a `RoutingHint` field, but may also + // be obtained by explicit location-fetching RPCs which may be added in the + // future. + CacheUpdate cache_update = 10 [(google.api.field_behavior) = OPTIONAL]; } -// Metadata about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet]. +// Metadata about a [ResultSet][google.spanner.v1.ResultSet] or +// [PartialResultSet][google.spanner.v1.PartialResultSet]. message ResultSetMetadata { // Indicates the field names and types for the rows in the result - // set. For example, a SQL query like `"SELECT UserId, UserName FROM + // set. For example, a SQL query like `"SELECT UserId, UserName FROM // Users"` could return a `row_type` value like: // // "fields": [ @@ -209,9 +230,11 @@ message ResultSetMetadata { StructType undeclared_parameters = 3; } -// Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet]. +// Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or +// [PartialResultSet][google.spanner.v1.PartialResultSet]. message ResultSetStats { - // [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result. + // [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this + // result. QueryPlan query_plan = 1; // Aggregated statistics from the execution of the query. Only present when @@ -230,7 +253,7 @@ message ResultSetStats { // Standard DML returns an exact count of rows that were modified. int64 row_count_exact = 3; - // Partitioned DML does not offer exactly-once semantics, so it + // Partitioned DML doesn't offer exactly-once semantics, so it // returns a lower bound of the rows modified. int64 row_count_lower_bound = 4; } diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto index d60174997b5..a6796c9f187 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; import "google/rpc/status.proto"; import "google/spanner/v1/keys.proto"; +import "google/spanner/v1/location.proto"; import "google/spanner/v1/mutation.proto"; import "google/spanner/v1/result_set.proto"; import "google/spanner/v1/transaction.proto"; @@ -66,14 +67,14 @@ service Spanner { // transaction internally, and count toward the one transaction // limit. // - // Active sessions use additional server resources, so it is a good idea to + // Active sessions use additional server resources, so it's a good idea to // delete idle and unneeded sessions. - // Aside from explicit deletes, Cloud Spanner may delete sessions for which no + // Aside from explicit deletes, Cloud Spanner can delete sessions when no // operations are sent for more than an hour. If a session is deleted, // requests to it return `NOT_FOUND`. // // Idle sessions can be kept alive by sending a trivial SQL query - // periodically, e.g., `"SELECT 1"`. + // periodically, for example, `"SELECT 1"`. rpc CreateSession(CreateSessionRequest) returns (Session) { option (google.api.http) = { post: "/v1/{database=projects/*/instances/*/databases/*}/sessions" @@ -95,7 +96,7 @@ service Spanner { option (google.api.method_signature) = "database,session_count"; } - // Gets a session. Returns `NOT_FOUND` if the session does not exist. + // Gets a session. Returns `NOT_FOUND` if the session doesn't exist. // This is mainly useful for determining whether a session is still // alive. rpc GetSession(GetSessionRequest) returns (Session) { @@ -113,9 +114,9 @@ service Spanner { option (google.api.method_signature) = "database"; } - // Ends a session, releasing server resources associated with it. This will - // asynchronously trigger cancellation of any operations that are running with - // this session. + // Ends a session, releasing server resources associated with it. This + // asynchronously triggers the cancellation of any operations that are running + // with this session. rpc DeleteSession(DeleteSessionRequest) returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1/{name=projects/*/instances/*/databases/*/sessions/*}" @@ -124,7 +125,7 @@ service Spanner { } // Executes an SQL statement, returning all results in a single reply. This - // method cannot be used to return a result set larger than 10 MiB; + // method can't be used to return a result set larger than 10 MiB; // if the query yields more data than that, the query fails with // a `FAILED_PRECONDITION` error. // @@ -136,6 +137,9 @@ service Spanner { // Larger result sets can be fetched in streaming fashion by calling // [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] // instead. + // + // The query string can be SQL or [Graph Query Language + // (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). rpc ExecuteSql(ExecuteSqlRequest) returns (ResultSet) { option (google.api.http) = { post: "/v1/{session=projects/*/instances/*/databases/*/sessions/*}:executeSql" @@ -148,6 +152,9 @@ service Spanner { // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there is no limit on // the size of the returned result set. However, no individual row in the // result set can exceed 100 MiB, and no column value can exceed 10 MiB. + // + // The query string can be SQL or [Graph Query Language + // (GQL)](https://cloud.google.com/spanner/docs/reference/standard-sql/graph-intro). rpc ExecuteStreamingSql(ExecuteSqlRequest) returns (stream PartialResultSet) { option (google.api.http) = { post: "/v1/{session=projects/*/instances/*/databases/*/sessions/*}:executeStreamingSql" @@ -177,7 +184,7 @@ service Spanner { // Reads rows from the database using key lookups and scans, as a // simple key/value style alternative to - // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be + // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method can't be // used to return a result set larger than 10 MiB; if the read matches more // data than that, the read fails with a `FAILED_PRECONDITION` // error. @@ -227,8 +234,8 @@ service Spanner { // `Commit` might return an `ABORTED` error. This can occur at any time; // commonly, the cause is conflicts with concurrent // transactions. However, it can also happen for a variety of other - // reasons. If `Commit` returns `ABORTED`, the caller should re-attempt - // the transaction from the beginning, re-using the same session. + // reasons. If `Commit` returns `ABORTED`, the caller should retry + // the transaction from the beginning, reusing the same session. // // On very rare occasions, `Commit` might return `UNKNOWN`. This can happen, // for example, if the client job experiences a 1+ hour networking failure. @@ -245,14 +252,14 @@ service Spanner { "session,single_use_transaction,mutations"; } - // Rolls back a transaction, releasing any locks it holds. It is a good + // Rolls back a transaction, releasing any locks it holds. It's a good // idea to call this for any transaction that includes one or more // [Read][google.spanner.v1.Spanner.Read] or // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and ultimately // decides not to commit. // // `Rollback` returns `OK` if it successfully aborts the transaction, the - // transaction was already aborted, or the transaction is not + // transaction was already aborted, or the transaction isn't // found. `Rollback` never returns `ABORTED`. rpc Rollback(RollbackRequest) returns (google.protobuf.Empty) { option (google.api.http) = { @@ -263,16 +270,16 @@ service Spanner { } // Creates a set of partition tokens that can be used to execute a query - // operation in parallel. Each of the returned partition tokens can be used + // operation in parallel. Each of the returned partition tokens can be used // by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to - // specify a subset of the query result to read. The same session and - // read-only transaction must be used by the PartitionQueryRequest used to - // create the partition tokens and the ExecuteSqlRequests that use the + // specify a subset of the query result to read. The same session and + // read-only transaction must be used by the `PartitionQueryRequest` used to + // create the partition tokens and the `ExecuteSqlRequests` that use the // partition tokens. // // Partition tokens become invalid when the session used to create them // is deleted, is idle for too long, begins a new transaction, or becomes too - // old. When any of these happen, it is not possible to resume the query, and + // old. When any of these happen, it isn't possible to resume the query, and // the whole operation must be restarted from the beginning. rpc PartitionQuery(PartitionQueryRequest) returns (PartitionResponse) { option (google.api.http) = { @@ -282,18 +289,18 @@ service Spanner { } // Creates a set of partition tokens that can be used to execute a read - // operation in parallel. Each of the returned partition tokens can be used + // operation in parallel. Each of the returned partition tokens can be used // by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a - // subset of the read result to read. The same session and read-only - // transaction must be used by the PartitionReadRequest used to create the - // partition tokens and the ReadRequests that use the partition tokens. There - // are no ordering guarantees on rows returned among the returned partition - // tokens, or even within each individual StreamingRead call issued with a - // partition_token. + // subset of the read result to read. The same session and read-only + // transaction must be used by the `PartitionReadRequest` used to create the + // partition tokens and the `ReadRequests` that use the partition tokens. + // There are no ordering guarantees on rows returned among the returned + // partition tokens, or even within each individual `StreamingRead` call + // issued with a `partition_token`. // // Partition tokens become invalid when the session used to create them // is deleted, is idle for too long, begins a new transaction, or becomes too - // old. When any of these happen, it is not possible to resume the read, and + // old. When any of these happen, it isn't possible to resume the read, and // the whole operation must be restarted from the beginning. rpc PartitionRead(PartitionReadRequest) returns (PartitionResponse) { option (google.api.http) = { @@ -306,15 +313,15 @@ service Spanner { // transactions. All mutations in a group are committed atomically. However, // mutations across groups can be committed non-atomically in an unspecified // order and thus, they must be independent of each other. Partial failure is - // possible, i.e., some groups may have been committed successfully, while - // some may have failed. The results of individual batches are streamed into - // the response as the batches are applied. + // possible, that is, some groups might have been committed successfully, + // while some might have failed. The results of individual batches are + // streamed into the response as the batches are applied. // - // BatchWrite requests are not replay protected, meaning that each mutation - // group may be applied more than once. Replays of non-idempotent mutations - // may have undesirable effects. For example, replays of an insert mutation - // may produce an already exists error or if you use generated or commit - // timestamp-based keys, it may result in additional rows being added to the + // `BatchWrite` requests are not replay protected, meaning that each mutation + // group can be applied more than once. Replays of non-idempotent mutations + // can have undesirable effects. For example, replays of an insert mutation + // can produce an already exists error or if you use generated or commit + // timestamp-based keys, it can result in additional rows being added to the // mutation's table. We recommend structuring your mutation groups to be // idempotent to avoid this issue. rpc BatchWrite(BatchWriteRequest) returns (stream BatchWriteResponse) { @@ -351,13 +358,13 @@ message BatchCreateSessionsRequest { } ]; - // Parameters to be applied to each created session. + // Parameters to apply to each created session. Session session_template = 2; - // Required. The number of sessions to be created in this batch call. - // The API may return fewer than the requested number of sessions. If a - // specific number of sessions are desired, the client can make additional - // calls to BatchCreateSessions (adjusting + // Required. The number of sessions to be created in this batch call. At least + // one session is created. The API can return fewer than the requested number + // of sessions. If a specific number of sessions are desired, the client can + // make additional calls to `BatchCreateSessions` (adjusting // [session_count][google.spanner.v1.BatchCreateSessionsRequest.session_count] // as necessary). int32 session_count = 3 [(google.api.field_behavior) = REQUIRED]; @@ -375,6 +382,8 @@ message Session { option (google.api.resource) = { type: "spanner.googleapis.com/Session" pattern: "projects/{project}/instances/{instance}/databases/{database}/sessions/{session}" + plural: "sessions" + singular: "session" }; // Output only. The name of the session. This is always system-assigned. @@ -395,7 +404,7 @@ message Session { google.protobuf.Timestamp create_time = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Output only. The approximate timestamp when the session is last used. It is + // Output only. The approximate timestamp when the session is last used. It's // typically earlier than the actual last use time. google.protobuf.Timestamp approximate_last_use_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -403,13 +412,14 @@ message Session { // The database role which created this session. string creator_role = 5; - // Optional. If true, specifies a multiplexed session. A multiplexed session - // may be used for multiple, concurrent read-only operations but can not be - // used for read-write transactions, partitioned reads, or partitioned - // queries. Multiplexed sessions can be created via - // [CreateSession][google.spanner.v1.Spanner.CreateSession] but not via - // [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions]. - // Multiplexed sessions may not be deleted nor listed. + // Optional. If `true`, specifies a multiplexed session. Use a multiplexed + // session for multiple, concurrent operations including any combination of + // read-only and read-write transactions. Use + // [`sessions.create`][google.spanner.v1.Spanner.CreateSession] to create + // multiplexed sessions. Don't use + // [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions] to + // create a multiplexed session. You can't delete or list multiplexed + // sessions. bool multiplexed = 6 [(google.api.field_behavior) = OPTIONAL]; } @@ -477,22 +487,22 @@ message DeleteSessionRequest { // Common request options for various APIs. message RequestOptions { - // The relative priority for requests. Note that priority is not applicable + // The relative priority for requests. Note that priority isn't applicable // for [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction]. // - // The priority acts as a hint to the Cloud Spanner scheduler and does not + // The priority acts as a hint to the Cloud Spanner scheduler and doesn't // guarantee priority or order of execution. For example: // // * Some parts of a write operation always execute at `PRIORITY_HIGH`, - // regardless of the specified priority. This may cause you to see an + // regardless of the specified priority. This can cause you to see an // increase in high priority workload even when executing a low priority // request. This can also potentially cause a priority inversion where a - // lower priority request will be fulfilled ahead of a higher priority + // lower priority request is fulfilled ahead of a higher priority // request. // * If a transaction contains multiple operations with different priorities, - // Cloud Spanner does not guarantee to process the higher priority - // operations first. There may be other constraints to satisfy, such as - // order of operations. + // Cloud Spanner doesn't guarantee to process the higher priority + // operations first. There might be other constraints to satisfy, such as + // the order of operations. enum Priority { // `PRIORITY_UNSPECIFIED` is equivalent to `PRIORITY_HIGH`. PRIORITY_UNSPECIFIED = 0; @@ -507,40 +517,53 @@ message RequestOptions { PRIORITY_HIGH = 3; } + // Container for various pieces of client-owned context attached to a request. + message ClientContext { + // Optional. Map of parameter name to value for this request. These values + // will be returned by any SECURE_CONTEXT() calls invoked by this request + // (e.g., by queries against Parameterized Secure Views). + map secure_context = 1 + [(google.api.field_behavior) = OPTIONAL]; + } + // Priority for the request. Priority priority = 1; // A per-request tag which can be applied to queries or reads, used for // statistics collection. - // Both request_tag and transaction_tag can be specified for a read or query - // that belongs to a transaction. - // This field is ignored for requests where it's not applicable (e.g. - // CommitRequest). + // Both `request_tag` and `transaction_tag` can be specified for a read or + // query that belongs to a transaction. + // This field is ignored for requests where it's not applicable (for example, + // `CommitRequest`). // Legal characters for `request_tag` values are all printable characters // (ASCII 32 - 126) and the length of a request_tag is limited to 50 // characters. Values that exceed this limit are truncated. - // Any leading underscore (_) characters will be removed from the string. + // Any leading underscore (_) characters are removed from the string. string request_tag = 2; // A tag used for statistics collection about this transaction. - // Both request_tag and transaction_tag can be specified for a read or query - // that belongs to a transaction. - // The value of transaction_tag should be the same for all requests belonging - // to the same transaction. - // If this request doesn't belong to any transaction, transaction_tag will be + // Both `request_tag` and `transaction_tag` can be specified for a read or + // query that belongs to a transaction. + // To enable tagging on a transaction, `transaction_tag` must be set to the + // same value for all requests belonging to the same transaction, including + // [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction]. + // If this request doesn't belong to any transaction, `transaction_tag` is // ignored. // Legal characters for `transaction_tag` values are all printable characters - // (ASCII 32 - 126) and the length of a transaction_tag is limited to 50 + // (ASCII 32 - 126) and the length of a `transaction_tag` is limited to 50 // characters. Values that exceed this limit are truncated. - // Any leading underscore (_) characters will be removed from the string. + // Any leading underscore (_) characters are removed from the string. string transaction_tag = 3; + + // Optional. Optional context that may be needed for some requests. + ClientContext client_context = 4 [(google.api.field_behavior) = OPTIONAL]; } -// The DirectedReadOptions can be used to indicate which replicas or regions +// The `DirectedReadOptions` can be used to indicate which replicas or regions // should be used for non-transactional reads or queries. // -// DirectedReadOptions may only be specified for a read-only transaction, -// otherwise the API will return an `INVALID_ARGUMENT` error. +// `DirectedReadOptions` can only be specified for a read-only transaction, +// otherwise the API returns an `INVALID_ARGUMENT` error. message DirectedReadOptions { // The directed read replica selector. // Callers must provide one or more of the following fields for replica @@ -553,12 +576,12 @@ message DirectedReadOptions { // Some examples of using replica_selectors are: // // * `location:us-east1` --> The "us-east1" replica(s) of any available type - // will be used to process the request. - // * `type:READ_ONLY` --> The "READ_ONLY" type replica(s) in nearest - // available location will be used to process the + // is used to process the request. + // * `type:READ_ONLY` --> The "READ_ONLY" type replica(s) in the nearest + // available location are used to process the // request. // * `location:us-east1 type:READ_ONLY` --> The "READ_ONLY" type replica(s) - // in location "us-east1" will be used to process + // in location "us-east1" is used to process // the request. message ReplicaSelection { // Indicates the type of replica. @@ -573,22 +596,22 @@ message DirectedReadOptions { READ_ONLY = 2; } - // The location or region of the serving requests, e.g. "us-east1". + // The location or region of the serving requests, for example, "us-east1". string location = 1; // The type of replica. Type type = 2; } - // An IncludeReplicas contains a repeated set of ReplicaSelection which + // An `IncludeReplicas` contains a repeated set of `ReplicaSelection` which // indicates the order in which replicas should be considered. message IncludeReplicas { // The directed read replica selector. repeated ReplicaSelection replica_selections = 1; - // If true, Spanner will not route requests to a replica outside the - // include_replicas list when all of the specified replicas are unavailable - // or unhealthy. Default value is `false`. + // If `true`, Spanner doesn't route requests to a replica outside the + // <`include_replicas` list when all of the specified replicas are + // unavailable or unhealthy. Default value is `false`. bool auto_failover_disabled = 2; } @@ -599,18 +622,18 @@ message DirectedReadOptions { repeated ReplicaSelection replica_selections = 1; } - // Required. At most one of either include_replicas or exclude_replicas + // Required. At most one of either `include_replicas` or `exclude_replicas` // should be present in the message. oneof replicas { - // Include_replicas indicates the order of replicas (as they appear in - // this list) to process the request. If auto_failover_disabled is set to - // true and all replicas are exhausted without finding a healthy replica, - // Spanner will wait for a replica in the list to become available, requests - // may fail due to `DEADLINE_EXCEEDED` errors. + // `Include_replicas` indicates the order of replicas (as they appear in + // this list) to process the request. If `auto_failover_disabled` is set to + // `true` and all replicas are exhausted without finding a healthy replica, + // Spanner waits for a replica in the list to become available, requests + // might fail due to `DEADLINE_EXCEEDED` errors. IncludeReplicas include_replicas = 1; - // Exclude_replicas indicates that specified replicas should be excluded - // from serving requests. Spanner will not route requests to the replicas + // `Exclude_replicas` indicates that specified replicas should be excluded + // from serving requests. Spanner doesn't route requests to the replicas // in this list. ExcludeReplicas exclude_replicas = 2; } @@ -630,7 +653,7 @@ message ExecuteSqlRequest { // This mode returns the query plan, overall execution statistics, // operator level execution statistics along with the results. This has a - // performance overhead compared to the other modes. It is not recommended + // performance overhead compared to the other modes. It isn't recommended // to use this mode for production traffic. PROFILE = 2; @@ -657,7 +680,7 @@ message ExecuteSqlRequest { // overrides the default optimizer version for query execution. // // The list of supported optimizer versions can be queried from - // SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS. + // `SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS`. // // Executing a SQL statement with an invalid optimizer version fails with // an `INVALID_ARGUMENT` error. @@ -677,13 +700,13 @@ message ExecuteSqlRequest { // Specifying `latest` as a value instructs Cloud Spanner to use the latest // generated statistics package. If not specified, Cloud Spanner uses // the statistics package set at the database level options, or the latest - // package if the database option is not set. + // package if the database option isn't set. // // The statistics package requested by the query has to be exempt from // garbage collection. This can be achieved with the following DDL // statement: // - // ``` + // ```sql // ALTER STATISTICS SET OPTIONS (allow_gc=false) // ``` // @@ -708,7 +731,7 @@ message ExecuteSqlRequest { // transaction with strong concurrency. // // Standard DML statements require a read-write transaction. To protect - // against replays, single-use transactions are not supported. The caller + // against replays, single-use transactions are not supported. The caller // must either supply an existing transaction ID or begin a new transaction. // // Partitioned DML requires an existing Partitioned DML transaction ID. @@ -724,20 +747,20 @@ message ExecuteSqlRequest { // to the naming requirements of identifiers as specified at // https://cloud.google.com/spanner/docs/lexical#identifiers. // - // Parameters can appear anywhere that a literal value is expected. The same + // Parameters can appear anywhere that a literal value is expected. The same // parameter name can be used more than once, for example: // // `"WHERE id > @msg_id AND id < @msg_id + 100"` // - // It is an error to execute a SQL statement with unbound parameters. + // It's an error to execute a SQL statement with unbound parameters. google.protobuf.Struct params = 4; - // It is not always possible for Cloud Spanner to infer the right SQL type - // from a JSON value. For example, values of type `BYTES` and values + // It isn't always possible for Cloud Spanner to infer the right SQL type + // from a JSON value. For example, values of type `BYTES` and values // of type `STRING` both appear in // [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. // - // In these cases, `param_types` can be used to specify the exact + // In these cases, you can use `param_types` to specify the exact // SQL type for some or all of the SQL statement parameters. See the // definition of [Type][google.spanner.v1.Type] for more information // about SQL types. @@ -759,20 +782,20 @@ message ExecuteSqlRequest { // [QueryMode.NORMAL][google.spanner.v1.ExecuteSqlRequest.QueryMode.NORMAL]. QueryMode query_mode = 7; - // If present, results will be restricted to the specified partition - // previously created using PartitionQuery(). There must be an exact + // If present, results are restricted to the specified partition + // previously created using `PartitionQuery`. There must be an exact // match for the values of fields common to this message and the - // PartitionQueryRequest message used to create this partition_token. + // `PartitionQueryRequest` message used to create this `partition_token`. bytes partition_token = 8; // A per-transaction sequence number used to identify this request. This field // makes each request idempotent such that if the request is received multiple - // times, at most one will succeed. + // times, at most one succeeds. // // The sequence number must be monotonically increasing within the // transaction. If a request arrives for the first time with an out-of-order - // sequence number, the transaction may be aborted. Replays of previously - // handled requests will yield the same response as the first execution. + // sequence number, the transaction can be aborted. Replays of previously + // handled requests yield the same response as the first execution. // // Required for DML statements. Ignored for queries. int64 seqno = 9; @@ -789,20 +812,28 @@ message ExecuteSqlRequest { // If this is for a partitioned query and this field is set to `true`, the // request is executed with Spanner Data Boost independent compute resources. // - // If the field is set to `true` but the request does not set + // If the field is set to `true` but the request doesn't set // `partition_token`, the API returns an `INVALID_ARGUMENT` error. bool data_boost_enabled = 16; - // Optional. If set to true, this statement marks the end of the transaction. - // The transaction should be committed or aborted after this statement - // executes, and attempts to execute any other requests against this - // transaction (including reads and queries) will be rejected. + // Optional. If set to `true`, this statement marks the end of the + // transaction. After this statement executes, you must commit or abort the + // transaction. Attempts to execute any other requests against this + // transaction (including reads and queries) are rejected. // - // For DML statements, setting this option may cause some error reporting to - // be deferred until commit time (e.g. validation of unique constraints). - // Given this, successful execution of a DML statement should not be assumed - // until a subsequent Commit call completes successfully. + // For DML statements, setting this option might cause some error reporting to + // be deferred until commit time (for example, validation of unique + // constraints). Given this, successful execution of a DML statement shouldn't + // be assumed until a subsequent `Commit` call completes successfully. bool last_statement = 17 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Makes the Spanner requests location-aware if present. + // + // It gives the server hints that can be used to route the request + // to an appropriate server, potentially significantly decreasing latency and + // improving throughput. To achieve improved performance, most fields must be + // filled in with accurate values. + RoutingHint routing_hint = 18 [(google.api.field_behavior) = OPTIONAL]; } // The request for [ExecuteBatchDml][google.spanner.v1.Spanner.ExecuteBatchDml]. @@ -818,16 +849,16 @@ message ExecuteBatchDmlRequest { // parameter name (for example, `@firstName`). Parameter names can contain // letters, numbers, and underscores. // - // Parameters can appear anywhere that a literal value is expected. The + // Parameters can appear anywhere that a literal value is expected. The // same parameter name can be used more than once, for example: // // `"WHERE id > @msg_id AND id < @msg_id + 100"` // - // It is an error to execute a SQL statement with unbound parameters. + // It's an error to execute a SQL statement with unbound parameters. google.protobuf.Struct params = 2; - // It is not always possible for Cloud Spanner to infer the right SQL type - // from a JSON value. For example, values of type `BYTES` and values + // It isn't always possible for Cloud Spanner to infer the right SQL type + // from a JSON value. For example, values of type `BYTES` and values // of type `STRING` both appear in // [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as // JSON strings. @@ -862,26 +893,26 @@ message ExecuteBatchDmlRequest { // Required. A per-transaction sequence number used to identify this request. // This field makes each request idempotent such that if the request is - // received multiple times, at most one will succeed. + // received multiple times, at most one succeeds. // // The sequence number must be monotonically increasing within the // transaction. If a request arrives for the first time with an out-of-order - // sequence number, the transaction may be aborted. Replays of previously - // handled requests will yield the same response as the first execution. + // sequence number, the transaction might be aborted. Replays of previously + // handled requests yield the same response as the first execution. int64 seqno = 4 [(google.api.field_behavior) = REQUIRED]; // Common options for this request. RequestOptions request_options = 5; - // Optional. If set to true, this request marks the end of the transaction. - // The transaction should be committed or aborted after these statements - // execute, and attempts to execute any other requests against this - // transaction (including reads and queries) will be rejected. + // Optional. If set to `true`, this request marks the end of the transaction. + // After these statements execute, you must commit or abort the transaction. + // Attempts to execute any other requests against this transaction + // (including reads and queries) are rejected. // - // Setting this option may cause some error reporting to be deferred until - // commit time (e.g. validation of unique constraints). Given this, successful - // execution of statements should not be assumed until a subsequent Commit - // call completes successfully. + // Setting this option might cause some error reporting to be deferred until + // commit time (for example, validation of unique constraints). Given this, + // successful execution of statements shouldn't be assumed until a subsequent + // `Commit` call completes successfully. bool last_statements = 6 [(google.api.field_behavior) = OPTIONAL]; } @@ -932,36 +963,32 @@ message ExecuteBatchDmlResponse { // Otherwise, the error status of the first failed statement. google.rpc.Status status = 2; - // Optional. A precommit token will be included if the read-write transaction - // is on a multiplexed session. - // The precommit token with the highest sequence number from this transaction - // attempt should be passed to the + // Optional. A precommit token is included if the read-write transaction + // is on a multiplexed session. Pass the precommit token with the highest + // sequence number from this transaction attempt should be passed to the // [Commit][google.spanner.v1.Spanner.Commit] request for this transaction. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. MultiplexedSessionPrecommitToken precommit_token = 3 [(google.api.field_behavior) = OPTIONAL]; } -// Options for a PartitionQueryRequest and -// PartitionReadRequest. +// Options for a `PartitionQueryRequest` and `PartitionReadRequest`. message PartitionOptions { - // **Note:** This hint is currently ignored by PartitionQuery and - // PartitionRead requests. + // **Note:** This hint is currently ignored by `PartitionQuery` and + // `PartitionRead` requests. // - // The desired data size for each partition generated. The default for this - // option is currently 1 GiB. This is only a hint. The actual size of each - // partition may be smaller or larger than this size request. + // The desired data size for each partition generated. The default for this + // option is currently 1 GiB. This is only a hint. The actual size of each + // partition can be smaller or larger than this size request. int64 partition_size_bytes = 1; - // **Note:** This hint is currently ignored by PartitionQuery and - // PartitionRead requests. + // **Note:** This hint is currently ignored by `PartitionQuery` and + // `PartitionRead` requests. // - // The desired maximum number of partitions to return. For example, this may - // be set to the number of workers available. The default for this option - // is currently 10,000. The maximum value is currently 200,000. This is only - // a hint. The actual number of partitions returned may be smaller or larger - // than this maximum count request. + // The desired maximum number of partitions to return. For example, this + // might be set to the number of workers available. The default for this + // option is currently 10,000. The maximum value is currently 200,000. This + // is only a hint. The actual number of partitions returned can be smaller or + // larger than this maximum count request. int64 max_partitions = 2; } @@ -973,48 +1000,50 @@ message PartitionQueryRequest { (google.api.resource_reference) = { type: "spanner.googleapis.com/Session" } ]; - // Read only snapshot transactions are supported, read/write and single use - // transactions are not. + // Read-only snapshot transactions are supported, read and write and + // single-use transactions are not. TransactionSelector transaction = 2; - // Required. The query request to generate partitions for. The request will - // fail if the query is not root partitionable. For a query to be root + // Required. The query request to generate partitions for. The request fails + // if the query isn't root partitionable. For a query to be root // partitionable, it needs to satisfy a few conditions. For example, if the // query execution plan contains a distributed union operator, then it must be // the first operator in the plan. For more information about other // conditions, see [Read data in // parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel). // - // The query request must not contain DML commands, such as INSERT, UPDATE, or - // DELETE. Use - // [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a - // PartitionedDml transaction for large, partition-friendly DML operations. + // The query request must not contain DML commands, such as `INSERT`, + // `UPDATE`, or `DELETE`. Use + // [`ExecuteStreamingSql`][google.spanner.v1.Spanner.ExecuteStreamingSql] with + // a `PartitionedDml` transaction for large, partition-friendly DML + // operations. string sql = 3 [(google.api.field_behavior) = REQUIRED]; - // Parameter names and values that bind to placeholders in the SQL string. + // Optional. Parameter names and values that bind to placeholders in the SQL + // string. // // A parameter placeholder consists of the `@` character followed by the // parameter name (for example, `@firstName`). Parameter names can contain // letters, numbers, and underscores. // - // Parameters can appear anywhere that a literal value is expected. The same + // Parameters can appear anywhere that a literal value is expected. The same // parameter name can be used more than once, for example: // // `"WHERE id > @msg_id AND id < @msg_id + 100"` // - // It is an error to execute a SQL statement with unbound parameters. - google.protobuf.Struct params = 4; + // It's an error to execute a SQL statement with unbound parameters. + google.protobuf.Struct params = 4 [(google.api.field_behavior) = OPTIONAL]; - // It is not always possible for Cloud Spanner to infer the right SQL type - // from a JSON value. For example, values of type `BYTES` and values - // of type `STRING` both appear in + // Optional. It isn't always possible for Cloud Spanner to infer the right SQL + // type from a JSON value. For example, values of type `BYTES` and values of + // type `STRING` both appear in // [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. // // In these cases, `param_types` can be used to specify the exact // SQL type for some or all of the SQL query parameters. See the // definition of [Type][google.spanner.v1.Type] for more information // about SQL types. - map param_types = 5; + map param_types = 5 [(google.api.field_behavior) = OPTIONAL]; // Additional options that affect how many partitions are created. PartitionOptions partition_options = 6; @@ -1055,7 +1084,7 @@ message PartitionReadRequest { // [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names // index keys in [index][google.spanner.v1.PartitionReadRequest.index]. // - // It is not an error for the `key_set` to name rows that do not + // It isn't an error for the `key_set` to name rows that don't // exist in the database. Read yields nothing for nonexistent rows. KeySet key_set = 6 [(google.api.field_behavior) = REQUIRED]; @@ -1066,9 +1095,9 @@ message PartitionReadRequest { // Information returned for each partition returned in a // PartitionResponse. message Partition { - // This token can be passed to Read, StreamingRead, ExecuteSql, or - // ExecuteStreamingSql requests to restrict the results to those identified by - // this partition token. + // This token can be passed to `Read`, `StreamingRead`, `ExecuteSql`, or + // `ExecuteStreamingSql` requests to restrict the results to those identified + // by this partition token. bytes partition_token = 1; } @@ -1089,13 +1118,13 @@ message ReadRequest { enum OrderBy { // Default value. // - // ORDER_BY_UNSPECIFIED is equivalent to ORDER_BY_PRIMARY_KEY. + // `ORDER_BY_UNSPECIFIED` is equivalent to `ORDER_BY_PRIMARY_KEY`. ORDER_BY_UNSPECIFIED = 0; // Read rows are returned in primary key order. // // In the event that this option is used in conjunction with the - // `partition_token` field, the API will return an `INVALID_ARGUMENT` error. + // `partition_token` field, the API returns an `INVALID_ARGUMENT` error. ORDER_BY_PRIMARY_KEY = 1; // Read rows are returned in any order. @@ -1106,7 +1135,7 @@ message ReadRequest { enum LockHint { // Default value. // - // LOCK_HINT_UNSPECIFIED is equivalent to LOCK_HINT_SHARED. + // `LOCK_HINT_UNSPECIFIED` is equivalent to `LOCK_HINT_SHARED`. LOCK_HINT_UNSPECIFIED = 0; // Acquire shared locks. @@ -1137,8 +1166,8 @@ message ReadRequest { // serialized. Each transaction waits its turn to acquire the lock and // avoids getting into deadlock situations. // - // Because the exclusive lock hint is just a hint, it should not be - // considered equivalent to a mutex. In other words, you should not use + // Because the exclusive lock hint is just a hint, it shouldn't be + // considered equivalent to a mutex. In other words, you shouldn't use // Spanner exclusive locks as a mutual exclusion mechanism for the execution // of code outside of Spanner. // @@ -1185,16 +1214,16 @@ message ReadRequest { // If the [partition_token][google.spanner.v1.ReadRequest.partition_token] // field is empty, rows are yielded in table primary key order (if // [index][google.spanner.v1.ReadRequest.index] is empty) or index key order - // (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the - // [partition_token][google.spanner.v1.ReadRequest.partition_token] field is - // not empty, rows will be yielded in an unspecified order. + // (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the + // [partition_token][google.spanner.v1.ReadRequest.partition_token] field + // isn't empty, rows are yielded in an unspecified order. // - // It is not an error for the `key_set` to name rows that do not + // It isn't an error for the `key_set` to name rows that don't // exist in the database. Read yields nothing for nonexistent rows. KeySet key_set = 6 [(google.api.field_behavior) = REQUIRED]; // If greater than zero, only the first `limit` rows are yielded. If `limit` - // is zero, the default is no limit. A limit cannot be specified if + // is zero, the default is no limit. A limit can't be specified if // `partition_token` is set. int64 limit = 8; @@ -1206,8 +1235,8 @@ message ReadRequest { // that yielded this token. bytes resume_token = 9; - // If present, results will be restricted to the specified partition - // previously created using PartitionRead(). There must be an exact + // If present, results are restricted to the specified partition + // previously created using `PartitionRead`. There must be an exact // match for the values of fields common to this message and the // PartitionReadRequest message used to create this partition_token. bytes partition_token = 10; @@ -1221,22 +1250,31 @@ message ReadRequest { // If this is for a partitioned read and this field is set to `true`, the // request is executed with Spanner Data Boost independent compute resources. // - // If the field is set to `true` but the request does not set + // If the field is set to `true` but the request doesn't set // `partition_token`, the API returns an `INVALID_ARGUMENT` error. bool data_boost_enabled = 15; // Optional. Order for the returned rows. // - // By default, Spanner will return result rows in primary key order except for - // PartitionRead requests. For applications that do not require rows to be + // By default, Spanner returns result rows in primary key order except for + // PartitionRead requests. For applications that don't require rows to be // returned in primary key (`ORDER_BY_PRIMARY_KEY`) order, setting // `ORDER_BY_NO_ORDER` option allows Spanner to optimize row retrieval, - // resulting in lower latencies in certain cases (e.g. bulk point lookups). + // resulting in lower latencies in certain cases (for example, bulk point + // lookups). OrderBy order_by = 16 [(google.api.field_behavior) = OPTIONAL]; // Optional. Lock Hint for the request, it can only be used with read-write // transactions. LockHint lock_hint = 17 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Makes the Spanner requests location-aware if present. + // + // It gives the server hints that can be used to route the request + // to an appropriate server, potentially significantly decreasing latency and + // improving throughput. To achieve improved performance, most fields must be + // filled in with accurate values. + RoutingHint routing_hint = 18 [(google.api.field_behavior) = OPTIONAL]; } // The request for @@ -1253,18 +1291,24 @@ message BeginTransactionRequest { // Common options for this request. // Priority is ignored for this request. Setting the priority in this - // request_options struct will not do anything. To set the priority for a + // `request_options` struct doesn't do anything. To set the priority for a // transaction, set it on the reads and writes that are part of this // transaction instead. RequestOptions request_options = 3; // Optional. Required for read-write transactions on a multiplexed session - // that commit mutations but do not perform any reads or queries. Clients - // should randomly select one of the mutations from the mutation set and send - // it as a part of this request. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. + // that commit mutations but don't perform any reads or queries. You must + // randomly select one of the mutations from the mutation set and send it as a + // part of this request. Mutation mutation_key = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Makes the Spanner requests location-aware if present. + // + // It gives the server hints that can be used to route the request + // to an appropriate server, potentially significantly decreasing latency and + // improving throughput. To achieve improved performance, most fields must be + // filled in with accurate values. + RoutingHint routing_hint = 5 [(google.api.field_behavior) = OPTIONAL]; } // The request for [Commit][google.spanner.v1.Spanner.Commit]. @@ -1285,7 +1329,7 @@ message CommitRequest { // temporary transaction is non-idempotent. That is, if the // `CommitRequest` is sent to Cloud Spanner more than once (for // instance, due to retries in the application, or in the - // transport library), it is possible that the mutations are + // transport library), it's possible that the mutations are // executed more than once. If this is undesirable, use // [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction] and // [Commit][google.spanner.v1.Spanner.Commit] instead. @@ -1297,16 +1341,16 @@ message CommitRequest { // this list. repeated Mutation mutations = 4; - // If `true`, then statistics related to the transaction will be included in + // If `true`, then statistics related to the transaction is included in // the [CommitResponse][google.spanner.v1.CommitResponse.commit_stats]. // Default value is `false`. bool return_commit_stats = 5; - // Optional. The amount of latency this request is willing to incur in order - // to improve throughput. If this field is not set, Spanner assumes requests - // are relatively latency sensitive and automatically determines an - // appropriate delay time. You can specify a batching delay value between 0 - // and 500 ms. + // Optional. The amount of latency this request is configured to incur in + // order to improve throughput. If this field isn't set, Spanner assumes + // requests are relatively latency sensitive and automatically determines an + // appropriate delay time. You can specify a commit delay value between 0 and + // 500 ms. google.protobuf.Duration max_commit_delay = 8 [(google.api.field_behavior) = OPTIONAL]; @@ -1314,13 +1358,19 @@ message CommitRequest { RequestOptions request_options = 6; // Optional. If the read-write transaction was executed on a multiplexed - // session, the precommit token with the highest sequence number received in - // this transaction attempt, should be included here. Failing to do so will - // result in a FailedPrecondition error. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. + // session, then you must include the precommit token with the highest + // sequence number received in this transaction attempt. Failing to do so + // results in a `FailedPrecondition` error. MultiplexedSessionPrecommitToken precommit_token = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Makes the Spanner requests location-aware if present. + // + // It gives the server hints that can be used to route the request + // to an appropriate server, potentially significantly decreasing latency and + // improving throughput. To achieve improved performance, most fields must be + // filled in with accurate values. + RoutingHint routing_hint = 10 [(google.api.field_behavior) = OPTIONAL]; } // The request for [Rollback][google.spanner.v1.Spanner.Rollback]. @@ -1358,18 +1408,9 @@ message BatchWriteRequest { repeated MutationGroup mutation_groups = 4 [(google.api.field_behavior) = REQUIRED]; - // Optional. When `exclude_txn_from_change_streams` is set to `true`: - // * Mutations from all transactions in this batch write operation will not - // be recorded in change streams with DDL option `allow_txn_exclusion=true` - // that are tracking columns modified by these transactions. - // * Mutations from all transactions in this batch write operation will be - // recorded in change streams with DDL option `allow_txn_exclusion=false or - // not set` that are tracking columns modified by these transactions. - // - // When `exclude_txn_from_change_streams` is set to `false` or not set, - // mutations from all transactions in this batch write operation will be - // recorded in all change streams that are tracking columns modified by these - // transactions. + // Optional. If you don't set the `exclude_txn_from_change_streams` option or + // if it's set to `false`, then any change streams monitoring columns modified + // by transactions will capture the updates made within that transaction. bool exclude_txn_from_change_streams = 5 [(google.api.field_behavior) = OPTIONAL]; } @@ -1384,6 +1425,11 @@ message BatchWriteResponse { google.rpc.Status status = 2; // The commit timestamp of the transaction that applied this batch. - // Present if `status` is `OK`, absent otherwise. + // Present if status is OK and the mutation groups were applied, absent + // otherwise. + // + // For mutation groups with conditions, a status=OK and missing + // commit_timestamp means that the mutation groups were not applied due to the + // condition not being satisfied after evaluation. google.protobuf.Timestamp commit_timestamp = 3; } diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto index fe564538466..f7cbccae8b7 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ package google.spanner.v1; import "google/api/field_behavior.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; +import "google/spanner/v1/location.proto"; option csharp_namespace = "Google.Cloud.Spanner.V1"; option go_package = "cloud.google.com/go/spanner/apiv1/spannerpb;spannerpb"; @@ -28,330 +29,7 @@ option java_package = "com.google.spanner.v1"; option php_namespace = "Google\\Cloud\\Spanner\\V1"; option ruby_package = "Google::Cloud::Spanner::V1"; -// Transactions: -// -// Each session can have at most one active transaction at a time (note that -// standalone reads and queries use a transaction internally and do count -// towards the one transaction limit). After the active transaction is -// completed, the session can immediately be re-used for the next transaction. -// It is not necessary to create a new session for each transaction. -// -// Transaction modes: -// -// Cloud Spanner supports three transaction modes: -// -// 1. Locking read-write. This type of transaction is the only way -// to write data into Cloud Spanner. These transactions rely on -// pessimistic locking and, if necessary, two-phase commit. -// Locking read-write transactions may abort, requiring the -// application to retry. -// -// 2. Snapshot read-only. Snapshot read-only transactions provide guaranteed -// consistency across several reads, but do not allow -// writes. Snapshot read-only transactions can be configured to read at -// timestamps in the past, or configured to perform a strong read -// (where Spanner will select a timestamp such that the read is -// guaranteed to see the effects of all transactions that have committed -// before the start of the read). Snapshot read-only transactions do not -// need to be committed. -// -// Queries on change streams must be performed with the snapshot read-only -// transaction mode, specifying a strong read. Please see -// [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong] -// for more details. -// -// 3. Partitioned DML. This type of transaction is used to execute -// a single Partitioned DML statement. Partitioned DML partitions -// the key space and runs the DML statement over each partition -// in parallel using separate, internal transactions that commit -// independently. Partitioned DML transactions do not need to be -// committed. -// -// For transactions that only read, snapshot read-only transactions -// provide simpler semantics and are almost always faster. In -// particular, read-only transactions do not take locks, so they do -// not conflict with read-write transactions. As a consequence of not -// taking locks, they also do not abort, so retry loops are not needed. -// -// Transactions may only read-write data in a single database. They -// may, however, read-write data in different tables within that -// database. -// -// Locking read-write transactions: -// -// Locking transactions may be used to atomically read-modify-write -// data anywhere in a database. This type of transaction is externally -// consistent. -// -// Clients should attempt to minimize the amount of time a transaction -// is active. Faster transactions commit with higher probability -// and cause less contention. Cloud Spanner attempts to keep read locks -// active as long as the transaction continues to do reads, and the -// transaction has not been terminated by -// [Commit][google.spanner.v1.Spanner.Commit] or -// [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of -// inactivity at the client may cause Cloud Spanner to release a -// transaction's locks and abort it. -// -// Conceptually, a read-write transaction consists of zero or more -// reads or SQL statements followed by -// [Commit][google.spanner.v1.Spanner.Commit]. At any time before -// [Commit][google.spanner.v1.Spanner.Commit], the client can send a -// [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the -// transaction. -// -// Semantics: -// -// Cloud Spanner can commit the transaction if all read locks it acquired -// are still valid at commit time, and it is able to acquire write -// locks for all writes. Cloud Spanner can abort the transaction for any -// reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees -// that the transaction has not modified any user data in Cloud Spanner. -// -// Unless the transaction commits, Cloud Spanner makes no guarantees about -// how long the transaction's locks were held for. It is an error to -// use Cloud Spanner locks for any sort of mutual exclusion other than -// between Cloud Spanner transactions themselves. -// -// Retrying aborted transactions: -// -// When a transaction aborts, the application can choose to retry the -// whole transaction again. To maximize the chances of successfully -// committing the retry, the client should execute the retry in the -// same session as the original attempt. The original session's lock -// priority increases with each consecutive abort, meaning that each -// attempt has a slightly better chance of success than the previous. -// -// Under some circumstances (for example, many transactions attempting to -// modify the same row(s)), a transaction can abort many times in a -// short period before successfully committing. Thus, it is not a good -// idea to cap the number of retries a transaction can attempt; -// instead, it is better to limit the total amount of time spent -// retrying. -// -// Idle transactions: -// -// A transaction is considered idle if it has no outstanding reads or -// SQL queries and has not started a read or SQL query within the last 10 -// seconds. Idle transactions can be aborted by Cloud Spanner so that they -// don't hold on to locks indefinitely. If an idle transaction is aborted, the -// commit will fail with error `ABORTED`. -// -// If this behavior is undesirable, periodically executing a simple -// SQL query in the transaction (for example, `SELECT 1`) prevents the -// transaction from becoming idle. -// -// Snapshot read-only transactions: -// -// Snapshot read-only transactions provides a simpler method than -// locking read-write transactions for doing several consistent -// reads. However, this type of transaction does not support writes. -// -// Snapshot transactions do not take locks. Instead, they work by -// choosing a Cloud Spanner timestamp, then executing all reads at that -// timestamp. Since they do not acquire locks, they do not block -// concurrent read-write transactions. -// -// Unlike locking read-write transactions, snapshot read-only -// transactions never abort. They can fail if the chosen read -// timestamp is garbage collected; however, the default garbage -// collection policy is generous enough that most applications do not -// need to worry about this in practice. -// -// Snapshot read-only transactions do not need to call -// [Commit][google.spanner.v1.Spanner.Commit] or -// [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not -// permitted to do so). -// -// To execute a snapshot transaction, the client specifies a timestamp -// bound, which tells Cloud Spanner how to choose a read timestamp. -// -// The types of timestamp bound are: -// -// - Strong (the default). -// - Bounded staleness. -// - Exact staleness. -// -// If the Cloud Spanner database to be read is geographically distributed, -// stale read-only transactions can execute more quickly than strong -// or read-write transactions, because they are able to execute far -// from the leader replica. -// -// Each type of timestamp bound is discussed in detail below. -// -// Strong: Strong reads are guaranteed to see the effects of all transactions -// that have committed before the start of the read. Furthermore, all -// rows yielded by a single read are consistent with each other -- if -// any part of the read observes a transaction, all parts of the read -// see the transaction. -// -// Strong reads are not repeatable: two consecutive strong read-only -// transactions might return inconsistent results if there are -// concurrent writes. If consistency across reads is required, the -// reads should be executed within a transaction or at an exact read -// timestamp. -// -// Queries on change streams (see below for more details) must also specify -// the strong read timestamp bound. -// -// See -// [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]. -// -// Exact staleness: -// -// These timestamp bounds execute reads at a user-specified -// timestamp. Reads at a timestamp are guaranteed to see a consistent -// prefix of the global transaction history: they observe -// modifications done by all transactions with a commit timestamp less than or -// equal to the read timestamp, and observe none of the modifications done by -// transactions with a larger commit timestamp. They will block until -// all conflicting transactions that may be assigned commit timestamps -// <= the read timestamp have finished. -// -// The timestamp can either be expressed as an absolute Cloud Spanner commit -// timestamp or a staleness relative to the current time. -// -// These modes do not require a "negotiation phase" to pick a -// timestamp. As a result, they execute slightly faster than the -// equivalent boundedly stale concurrency modes. On the other hand, -// boundedly stale reads usually return fresher results. -// -// See -// [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp] -// and -// [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness]. -// -// Bounded staleness: -// -// Bounded staleness modes allow Cloud Spanner to pick the read timestamp, -// subject to a user-provided staleness bound. Cloud Spanner chooses the -// newest timestamp within the staleness bound that allows execution -// of the reads at the closest available replica without blocking. -// -// All rows yielded are consistent with each other -- if any part of -// the read observes a transaction, all parts of the read see the -// transaction. Boundedly stale reads are not repeatable: two stale -// reads, even if they use the same staleness bound, can execute at -// different timestamps and thus return inconsistent results. -// -// Boundedly stale reads execute in two phases: the first phase -// negotiates a timestamp among all replicas needed to serve the -// read. In the second phase, reads are executed at the negotiated -// timestamp. -// -// As a result of the two phase execution, bounded staleness reads are -// usually a little slower than comparable exact staleness -// reads. However, they are typically able to return fresher -// results, and are more likely to execute at the closest replica. -// -// Because the timestamp negotiation requires up-front knowledge of -// which rows will be read, it can only be used with single-use -// read-only transactions. -// -// See -// [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness] -// and -// [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp]. -// -// Old read timestamps and garbage collection: -// -// Cloud Spanner continuously garbage collects deleted and overwritten data -// in the background to reclaim storage space. This process is known -// as "version GC". By default, version GC reclaims versions after they -// are one hour old. Because of this, Cloud Spanner cannot perform reads -// at read timestamps more than one hour in the past. This -// restriction also applies to in-progress reads and/or SQL queries whose -// timestamp become too old while executing. Reads and SQL queries with -// too-old read timestamps fail with the error `FAILED_PRECONDITION`. -// -// You can configure and extend the `VERSION_RETENTION_PERIOD` of a -// database up to a period as long as one week, which allows Cloud Spanner -// to perform reads up to one week in the past. -// -// Querying change Streams: -// -// A Change Stream is a schema object that can be configured to watch data -// changes on the entire database, a set of tables, or a set of columns -// in a database. -// -// When a change stream is created, Spanner automatically defines a -// corresponding SQL Table-Valued Function (TVF) that can be used to query -// the change records in the associated change stream using the -// ExecuteStreamingSql API. The name of the TVF for a change stream is -// generated from the name of the change stream: READ_. -// -// All queries on change stream TVFs must be executed using the -// ExecuteStreamingSql API with a single-use read-only transaction with a -// strong read-only timestamp_bound. The change stream TVF allows users to -// specify the start_timestamp and end_timestamp for the time range of -// interest. All change records within the retention period is accessible -// using the strong read-only timestamp_bound. All other TransactionOptions -// are invalid for change stream queries. -// -// In addition, if TransactionOptions.read_only.return_read_timestamp is set -// to true, a special value of 2^63 - 2 will be returned in the -// [Transaction][google.spanner.v1.Transaction] message that describes the -// transaction, instead of a valid read timestamp. This special value should be -// discarded and not used for any subsequent queries. -// -// Please see https://cloud.google.com/spanner/docs/change-streams -// for more details on how to query the change stream TVFs. -// -// Partitioned DML transactions: -// -// Partitioned DML transactions are used to execute DML statements with a -// different execution strategy that provides different, and often better, -// scalability properties for large, table-wide operations than DML in a -// ReadWrite transaction. Smaller scoped statements, such as an OLTP workload, -// should prefer using ReadWrite transactions. -// -// Partitioned DML partitions the keyspace and runs the DML statement on each -// partition in separate, internal transactions. These transactions commit -// automatically when complete, and run independently from one another. -// -// To reduce lock contention, this execution strategy only acquires read locks -// on rows that match the WHERE clause of the statement. Additionally, the -// smaller per-partition transactions hold locks for less time. -// -// That said, Partitioned DML is not a drop-in replacement for standard DML used -// in ReadWrite transactions. -// -// - The DML statement must be fully-partitionable. Specifically, the statement -// must be expressible as the union of many statements which each access only -// a single row of the table. -// -// - The statement is not applied atomically to all rows of the table. Rather, -// the statement is applied atomically to partitions of the table, in -// independent transactions. Secondary index rows are updated atomically -// with the base table rows. -// -// - Partitioned DML does not guarantee exactly-once execution semantics -// against a partition. The statement will be applied at least once to each -// partition. It is strongly recommended that the DML statement should be -// idempotent to avoid unexpected results. For instance, it is potentially -// dangerous to run a statement such as -// `UPDATE table SET column = column + 1` as it could be run multiple times -// against some rows. -// -// - The partitions are committed automatically - there is no support for -// Commit or Rollback. If the call returns an error, or if the client issuing -// the ExecuteSql call dies, it is possible that some rows had the statement -// executed on them successfully. It is also possible that statement was -// never executed against other rows. -// -// - Partitioned DML transactions may only contain the execution of a single -// DML statement via ExecuteSql or ExecuteStreamingSql. -// -// - If any error is encountered during the execution of the partitioned DML -// operation (for instance, a UNIQUE INDEX violation, division by zero, or a -// value that cannot be stored due to schema constraints), then the -// operation is stopped at that point and an error is returned. It is -// possible that at this point, some partitions have been committed (or even -// committed multiple times), and other partitions have not been run at all. -// -// Given the above, Partitioned DML is good fit for large, database-wide, -// operations that are idempotent, such as deleting old rows from a very large -// table. +// Options to use for transactions. message TransactionOptions { // Message type to initiate a read-write transaction. Currently this // transaction type has no options. @@ -361,19 +39,47 @@ message TransactionOptions { enum ReadLockMode { // Default value. // - // If the value is not specified, the pessimistic read lock is used. + // * If isolation level is + // [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE], + // locking semantics default to `PESSIMISTIC`. + // * If isolation level is + // [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ], + // locking semantics default to `OPTIMISTIC`. + // * See + // [Concurrency + // control](https://cloud.google.com/spanner/docs/concurrency-control) + // for more details. READ_LOCK_MODE_UNSPECIFIED = 0; // Pessimistic lock mode. // - // Read locks are acquired immediately on read. + // Lock acquisition behavior depends on the isolation level in use. In + // [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE] + // isolation, reads and writes acquire necessary locks during transaction + // statement execution. In + // [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ] + // isolation, reads that explicitly request to be locked and writes + // acquire locks. + // See + // [Concurrency + // control](https://cloud.google.com/spanner/docs/concurrency-control) for + // details on the types of locks acquired at each transaction step. PESSIMISTIC = 1; // Optimistic lock mode. // - // Locks for reads within the transaction are not acquired on read. - // Instead the locks are acquired on a commit to validate that - // read/queried data has not changed since the transaction started. + // Lock acquisition behavior depends on the isolation level in use. In + // both + // [SERIALIZABLE][google.spanner.v1.TransactionOptions.IsolationLevel.SERIALIZABLE] + // and + // [REPEATABLE_READ][google.spanner.v1.TransactionOptions.IsolationLevel.REPEATABLE_READ] + // isolation, reads and writes do not acquire locks during transaction + // statement execution. + // See + // [Concurrency + // control](https://cloud.google.com/spanner/docs/concurrency-control) for + // details on how the guarantees of each isolation level are provided at + // commit time. OPTIMISTIC = 2; } @@ -383,8 +89,6 @@ message TransactionOptions { // Optional. Clients should pass the transaction ID of the previous // transaction attempt that was aborted if this transaction is being // executed on a multiplexed session. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. bytes multiplexed_session_previous_transaction_id = 2 [(google.api.field_behavior) = OPTIONAL]; } @@ -430,7 +134,7 @@ message TransactionOptions { // Executes all reads at the given timestamp. Unlike other modes, // reads at a specific timestamp are repeatable; the same read at // the same timestamp always returns the same data. If the - // timestamp is in the future, the read will block until the + // timestamp is in the future, the read is blocked until the // specified timestamp, modulo the read's deadline. // // Useful for large scale consistent reads such as mapreduces, or @@ -461,6 +165,41 @@ message TransactionOptions { bool return_read_timestamp = 6; } + // `IsolationLevel` is used when setting the [isolation + // level](https://cloud.google.com/spanner/docs/isolation-levels) for a + // transaction. + enum IsolationLevel { + // Default value. + // + // If the value is not specified, the `SERIALIZABLE` isolation level is + // used. + ISOLATION_LEVEL_UNSPECIFIED = 0; + + // All transactions appear as if they executed in a serial order, even if + // some of the reads, writes, and other operations of distinct transactions + // actually occurred in parallel. Spanner assigns commit timestamps that + // reflect the order of committed transactions to implement this property. + // Spanner offers a stronger guarantee than serializability called external + // consistency. For more information, see + // [TrueTime and external + // consistency](https://cloud.google.com/spanner/docs/true-time-external-consistency#serializability). + SERIALIZABLE = 1; + + // All reads performed during the transaction observe a consistent snapshot + // of the database, and the transaction is only successfully committed in + // the absence of conflicts between its updates and any concurrent updates + // that have occurred since that snapshot. Consequently, in contrast to + // `SERIALIZABLE` transactions, only write-write conflicts are detected in + // snapshot transactions. + // + // This isolation level does not support read-only and partitioned DML + // transactions. + // + // When `REPEATABLE_READ` is specified on a read-write transaction, the + // locking semantics default to `OPTIMISTIC`. + REPEATABLE_READ = 2; + } + // Required. The type of transaction. oneof mode { // Transaction may write. @@ -477,7 +216,7 @@ message TransactionOptions { // on the `session` resource. PartitionedDml partitioned_dml = 3; - // Transaction will not write. + // Transaction does not write. // // Authorization to begin a read-only transaction requires // `spanner.databases.beginReadOnlyTransaction` permission @@ -485,21 +224,28 @@ message TransactionOptions { ReadOnly read_only = 2; } - // When `exclude_txn_from_change_streams` is set to `true`: - // * Mutations from this transaction will not be recorded in change streams - // with DDL option `allow_txn_exclusion=true` that are tracking columns - // modified by these transactions. - // * Mutations from this transaction will be recorded in change streams with - // DDL option `allow_txn_exclusion=false or not set` that are tracking - // columns modified by these transactions. + // When `exclude_txn_from_change_streams` is set to `true`, it prevents read + // or write transactions from being tracked in change streams. + // + // * If the DDL option `allow_txn_exclusion` is set to `true`, then the + // updates + // made within this transaction aren't recorded in the change stream. + // + // * If you don't set the DDL option `allow_txn_exclusion` or if it's + // set to `false`, then the updates made within this transaction are + // recorded in the change stream. // // When `exclude_txn_from_change_streams` is set to `false` or not set, - // mutations from this transaction will be recorded in all change streams that - // are tracking columns modified by these transactions. - // `exclude_txn_from_change_streams` may only be specified for read-write or - // partitioned-dml transactions, otherwise the API will return an - // `INVALID_ARGUMENT` error. + // modifications from this transaction are recorded in all change streams + // that are tracking columns modified by these transactions. + // + // The `exclude_txn_from_change_streams` option can only be specified + // for read-write or partitioned DML transactions, otherwise the API returns + // an `INVALID_ARGUMENT` error. bool exclude_txn_from_change_streams = 5; + + // Isolation level for the transaction. + IsolationLevel isolation_level = 6; } // A transaction. @@ -522,16 +268,22 @@ message Transaction { // Example: `"2014-10-02T15:01:23.045123456Z"`. google.protobuf.Timestamp read_timestamp = 2; - // A precommit token will be included in the response of a BeginTransaction + // A precommit token is included in the response of a BeginTransaction // request if the read-write transaction is on a multiplexed session and // a mutation_key was specified in the // [BeginTransaction][google.spanner.v1.BeginTransactionRequest]. // The precommit token with the highest sequence number from this transaction // attempt should be passed to the [Commit][google.spanner.v1.Spanner.Commit] // request for this transaction. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. MultiplexedSessionPrecommitToken precommit_token = 3; + + // Optional. A cache update expresses a set of changes the client should + // incorporate into its location cache. The client should discard the changes + // if they are older than the data it already has. This data can be obtained + // in response to requests that included a `RoutingHint` field, but may also + // be obtained by explicit location-fetching RPCs which may be added in the + // future. + CacheUpdate cache_update = 5 [(google.api.field_behavior) = OPTIONAL]; } // This message is used to select the transaction in which a @@ -562,8 +314,10 @@ message TransactionSelector { // When a read-write transaction is executed on a multiplexed session, // this precommit token is sent back to the client -// as a part of the [Transaction] message in the BeginTransaction response and -// also as a part of the [ResultSet] and [PartialResultSet] responses. +// as a part of the [Transaction][google.spanner.v1.Transaction] message in the +// [BeginTransaction][google.spanner.v1.BeginTransactionRequest] response and +// also as a part of the [ResultSet][google.spanner.v1.ResultSet] and +// [PartialResultSet][google.spanner.v1.PartialResultSet] responses. message MultiplexedSessionPrecommitToken { // Opaque precommit token. bytes precommit_token = 1; diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto index 734cfb54cda..e3e85a770af 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -175,6 +175,10 @@ enum TypeCode { // For example, `P1Y2M3DT4H5M6.5S` represents time duration of 1 year, 2 // months, 3 days, 4 hours, 5 minutes, and 6.5 seconds. INTERVAL = 16; + + // Encoded as `string`, in lower-case hexa-decimal format, as described + // in RFC 9562, section 4. + UUID = 17; } // `TypeAnnotationCode` is used as a part of [Type][google.spanner.v1.Type] to diff --git a/renovate.json b/renovate.json index 167bf279fe7..7ca27641fa9 100644 --- a/renovate.json +++ b/renovate.json @@ -20,17 +20,6 @@ ".github/workflows/samples.yaml" ], "customManagers": [ - { - "customType": "regex", - "fileMatch": [ - "^.kokoro/presubmit/graalvm-native.*.cfg$" - ], - "matchStrings": [ - "value: \"gcr.io/cloud-devrel-public-resources/graalvm.*:(?.*?)\"" - ], - "depNameTemplate": "com.google.cloud:sdk-platform-java-config", - "datasourceTemplate": "maven" - }, { "customType": "regex", "fileMatch": [ @@ -41,16 +30,6 @@ ], "depNameTemplate": "com.google.cloud:sdk-platform-java-config", "datasourceTemplate": "maven" - }, - { - "fileMatch": [ - "^.github/workflows/hermetic_library_generation.yaml$" - ], - "matchStrings": [ - "uses: googleapis/sdk-platform-java/.github/scripts@v(?.+?)\\n" - ], - "depNameTemplate": "com.google.api:gapic-generator-java", - "datasourceTemplate": "maven" } ], "packageRules": [ @@ -73,7 +52,6 @@ "^org.jacoco:", "^org.codehaus.mojo:", "^org.sonatype.plugins:", - "^com.coveo:", "^com.google.cloud:google-cloud-shared-config" ], "semanticCommitType": "build", @@ -111,15 +89,10 @@ "^com.fasterxml.jackson.core" ], "groupName": "jackson dependencies" - }, - { - "matchPackagePatterns": [ - "^com.google.api:gapic-generator-java", - "^com.google.cloud:sdk-platform-java-config" - ], - "groupName": "SDK platform Java dependencies" } ], "semanticCommits": true, - "dependencyDashboard": true -} \ No newline at end of file + "dependencyDashboard": true, + "prConcurrentLimit": 0, + "prHourlyLimit": 0 +} diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index cc7900ed246..cbe88a08fec 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -14,7 +14,7 @@ com.google.cloud.samples shared-configuration - 1.2.0 + 1.2.2 @@ -23,8 +23,8 @@ 1.8 UTF-8 0.31.1 - 2.54.0 - 3.54.0 + 2.84.0 + 3.85.0 @@ -33,7 +33,7 @@ com.google.cloud google-cloud-spanner - 6.81.1 + 6.112.0 @@ -100,7 +100,7 @@ com.google.truth truth - 1.4.4 + 1.4.5 test @@ -116,7 +116,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.6.0 + 3.6.1 add-snippets-source @@ -145,8 +145,10 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.2 + 3.5.5 + 10 + false java-sample-integration-tests java-client-mr-integration-tests @@ -157,6 +159,9 @@ mysample quick-db + + **/SpannerSampleIT.java + diff --git a/samples/pom.xml b/samples/pom.xml index 7f027400da9..d72a58cea5d 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -18,7 +18,7 @@ com.google.cloud.samples shared-configuration - 1.2.0 + 1.2.2 @@ -39,7 +39,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 true diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 9a6e4d0e30e..b991052f679 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -14,7 +14,7 @@ com.google.cloud.samples shared-configuration - 1.2.0 + 1.2.2 @@ -23,8 +23,8 @@ 1.8 UTF-8 0.31.1 - 2.54.0 - 3.54.0 + 2.84.0 + 3.85.0 @@ -32,7 +32,7 @@ com.google.cloud google-cloud-spanner - 6.82.0 + 6.113.1-SNAPSHOT @@ -99,7 +99,7 @@ com.google.truth truth - 1.4.4 + 1.4.5 test @@ -115,7 +115,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.6.0 + 3.6.1 add-snippets-source @@ -144,8 +144,10 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.2 + 3.5.5 + 10 + false java-sample-integration-tests java-client-mr-integration-tests @@ -157,6 +159,9 @@ mysample-instance quick-db + + **/SpannerSampleIT.java + diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index df0488ac116..5891a36b359 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -16,7 +16,7 @@ com.google.cloud.samples shared-configuration - 1.2.0 + 1.2.2 @@ -34,7 +34,7 @@ com.google.cloud libraries-bom - 26.50.0 + 26.78.0 pom import @@ -111,10 +111,73 @@ com.google.truth truth - 1.4.4 + 1.4.5 test + + + integration-tests + + true + + + + + org.apache.maven.plugins + maven-failsafe-plugin + 3.5.5 + + 10 + false + + java-sample-integration-tests + java-client-mr-integration-tests + nam11 + us-east1 + cmek-test-key-ring + cmek-test-key + mysample + quick-db + + + **/SpannerSampleIT.java + + + + + + + + slow-tests + + + + org.apache.maven.plugins + maven-failsafe-plugin + 3.5.5 + + 10 + false + + java-sample-integration-tests + java-client-mr-integration-tests + nam11 + us-east1 + cmek-test-key-ring + cmek-test-key + mysample + quick-db + + + **/SpannerSampleIT.java + + + + + + + @@ -172,23 +235,6 @@ - - org.apache.maven.plugins - maven-failsafe-plugin - 3.5.2 - - - java-sample-integration-tests - java-client-mr-integration-tests - nam11 - us-east1 - cmek-test-key-ring - cmek-test-key - mysample - quick-db - - - org.apache.maven.plugins maven-checkstyle-plugin diff --git a/samples/snippets/src/main/java/com/example/spanner/ChangeStreamsTxnExclusionSample.java b/samples/snippets/src/main/java/com/example/spanner/ChangeStreamsTxnExclusionSample.java new file mode 100644 index 00000000000..10a7c4b26d4 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/ChangeStreamsTxnExclusionSample.java @@ -0,0 +1,68 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.Statement; + +/** + * Sample showing how to set exclude transaction from change streams in different write requests. + */ +public class ChangeStreamsTxnExclusionSample { + + static void setExcludeTxnFromChangeStreams() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-instance"; + final String instanceId = "my-project"; + final String databaseId = "my-database"; + + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final DatabaseClient databaseClient = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + readWriteTxnExcludedFromChangeStreams(databaseClient); + } + } + + // [START spanner_set_exclude_txn_from_change_streams] + static void readWriteTxnExcludedFromChangeStreams(DatabaseClient client) { + // Exclude the transaction from allowed tracking change streams with alloww_txn_exclusion=true. + // This exclusion will be applied to all the individual operations inside this transaction. + client + .readWriteTransaction(Options.excludeTxnFromChangeStreams()) + .run( + transaction -> { + transaction.executeUpdate( + Statement.of( + "INSERT Singers (SingerId, FirstName, LastName)\n" + + "VALUES (1341, 'Virginia', 'Watson')")); + System.out.println("New singer inserted."); + + transaction.executeUpdate( + Statement.of("UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111")); + System.out.println("Singer first name updated."); + + return null; + }); + } + // [END spanner_set_exclude_txn_from_change_streams] + +} diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigExample.java new file mode 100644 index 00000000000..b4c4f8736e2 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigExample.java @@ -0,0 +1,105 @@ +/* + * 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.spanner; + +// [START spanner_create_instance_with_asymmetric_autoscaling_config] + +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import com.google.spanner.admin.instance.v1.AutoscalingConfig; +import com.google.spanner.admin.instance.v1.CreateInstanceRequest; +import com.google.spanner.admin.instance.v1.Instance; +import com.google.spanner.admin.instance.v1.InstanceConfigName; +import com.google.spanner.admin.instance.v1.ProjectName; +import com.google.spanner.admin.instance.v1.ReplicaSelection; +import java.util.concurrent.ExecutionException; + +class CreateInstanceWithAsymmetricAutoscalingConfigExample { + + static void createInstance() { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + String instanceId = "my-instance"; + createInstance(projectId, instanceId); + } + + static void createInstance(String projectId, String instanceId) { + try (Spanner spanner = + SpannerOptions.newBuilder() + .setProjectId(projectId) + .build() + .getService(); + InstanceAdminClient instanceAdminClient = spanner.createInstanceAdminClient()) { + // Set Instance configuration. + String configId = "nam-eur-asia3"; + String displayName = "Descriptive name"; + + // Create an autoscaling config. + // When autoscaling_config is enabled, node_count and processing_units fields + // need not be specified. + // The read-only replicas listed in the asymmetric autoscaling options scale independently + // from other replicas. + AutoscalingConfig autoscalingConfig = + AutoscalingConfig.newBuilder() + .setAutoscalingLimits( + AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(1).setMaxNodes(2)) + .setAutoscalingTargets( + AutoscalingConfig.AutoscalingTargets.newBuilder() + .setHighPriorityCpuUtilizationPercent(65) + .setStorageUtilizationPercent(95)) + .addAsymmetricAutoscalingOptions( + AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder() + .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("europe-west1"))) + .addAsymmetricAutoscalingOptions( + AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder() + .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("europe-west4"))) + .addAsymmetricAutoscalingOptions( + AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder() + .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("asia-east1"))) + .build(); + Instance instance = + Instance.newBuilder() + .setAutoscalingConfig(autoscalingConfig) + .setDisplayName(displayName) + .setConfig( + InstanceConfigName.of(projectId, configId).toString()) + .build(); + + // Creates a new instance + System.out.printf("Creating instance %s.%n", instanceId); + try { + // Wait for the createInstance operation to finish. + Instance instanceResult = instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()).get(); + System.out.printf("Asymmetric Autoscaling instance %s was successfully created%n", + instanceResult.getName()); + } catch (ExecutionException e) { + System.out.printf( + "Error: Creating instance %s failed with error message %s%n", + instance.getName(), e.getMessage()); + } catch (InterruptedException e) { + System.out.println("Error: Waiting for createInstance operation to finish was interrupted"); + } + } + } +} +// [END spanner_create_instance_with_asymmetric_autoscaling_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAutoscalingConfigExample.java index 0a6e21ea620..4d0793820af 100644 --- a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAutoscalingConfigExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceWithAutoscalingConfigExample.java @@ -24,6 +24,7 @@ import com.google.spanner.admin.instance.v1.AutoscalingConfig; import com.google.spanner.admin.instance.v1.CreateInstanceRequest; import com.google.spanner.admin.instance.v1.Instance; +import com.google.spanner.admin.instance.v1.Instance.Edition; import com.google.spanner.admin.instance.v1.InstanceConfigName; import com.google.spanner.admin.instance.v1.ProjectName; import java.util.concurrent.ExecutionException; @@ -66,6 +67,7 @@ static void createInstance(String projectId, String instanceId) { .setDisplayName(displayName) .setConfig( InstanceConfigName.of(projectId, configId).toString()) + .setEdition(Edition.ENTERPRISE) .build(); // Creates a new instance diff --git a/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java b/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java new file mode 100644 index 00000000000..390ac6c3b21 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java @@ -0,0 +1,121 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +// [START spanner_database_add_split_points] + +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; +import com.google.protobuf.ListValue; +import com.google.protobuf.Value; +import com.google.spanner.admin.database.v1.DatabaseName; +import com.google.spanner.admin.database.v1.SplitPoints; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class DatabaseAddSplitPointsSample { + + /*** + * Assume DDL for the underlying database: + *
                                {@code
                                +   * CREATE TABLE Singers (
                                +   * SingerId INT64 NOT NULL,
                                +   * FirstName STRING(1024),
                                +   * LastName STRING(1024),
                                +   *  SingerInfo BYTES(MAX),
                                +   * ) PRIMARY KEY(SingerId);
                                +   *
                                +   *
                                +   * CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName);
                                +   * }
                                + */ + + static void addSplitPoints() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + String instanceId = "my-instance"; + String databaseId = "my-database"; + addSplitPoints(projectId, instanceId, databaseId); + } + + static void addSplitPoints(String projectId, String instanceId, String databaseId) + throws IOException { + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService(); + DatabaseAdminClient databaseAdminClient = spanner.createDatabaseAdminClient()) { + List splitPoints = new ArrayList<>(); + + // table key + com.google.spanner.admin.database.v1.SplitPoints splitPointForTable = + SplitPoints.newBuilder() + .setTable("Singers") + .addKeys( + com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder() + .setKeyParts( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("42").build()) + .build())) + .build(); + + // index key without table key part + com.google.spanner.admin.database.v1.SplitPoints splitPointForIndex = + SplitPoints.newBuilder() + .setIndex("SingersByFirstLastName") + .addKeys( + com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder() + .setKeyParts( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("John").build()) + .addValues(Value.newBuilder().setStringValue("Doe").build()) + .build())) + .build(); + + // index key with table key part, first key is the index key and second is the table key + com.google.spanner.admin.database.v1.SplitPoints splitPointForIndexWitTableKey = + SplitPoints.newBuilder() + .setIndex("SingersByFirstLastName") + .addKeys( + com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder() + .setKeyParts( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("Jane").build()) + .addValues(Value.newBuilder().setStringValue("Doe").build()) + .build())) + .addKeys( + com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder() + .setKeyParts( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("38").build()) + .build())) + .build(); + + splitPoints.add(splitPointForTable); + splitPoints.add(splitPointForIndex); + splitPoints.add(splitPointForIndexWitTableKey); + databaseAdminClient.addSplitPoints( + DatabaseName.of(projectId, instanceId, databaseId), splitPoints); + + } catch (Exception e) { + // If the operation failed during execution, expose the cause. + throw (SpannerException) e.getCause(); + } + } +} +// [END spanner_database_add_split_points] diff --git a/samples/snippets/src/main/java/com/example/spanner/IsolationLevelAndReadLockModeSample.java b/samples/snippets/src/main/java/com/example/spanner/IsolationLevelAndReadLockModeSample.java new file mode 100644 index 00000000000..ca2e1a9d751 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/IsolationLevelAndReadLockModeSample.java @@ -0,0 +1,115 @@ +/* + * Copyright 2026 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.spanner; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions; +import com.google.cloud.spanner.Statement; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; + +public class IsolationLevelAndReadLockModeSample { + + // [START spanner_isolation_level] + static void isolationLevelSetting(DatabaseId db) { + // The isolation level specified at the client-level will be applied to all + // RW transactions. + DefaultReadWriteTransactionOptions transactionOptions = + DefaultReadWriteTransactionOptions.newBuilder() + .setIsolationLevel(IsolationLevel.SERIALIZABLE) + .build(); + SpannerOptions options = + SpannerOptions.newBuilder() + .setDefaultTransactionOptions(transactionOptions) + .build(); + Spanner spanner = options.getService(); + DatabaseClient dbClient = spanner.getDatabaseClient(db); + dbClient + // The isolation level specified at the transaction-level takes precedence + // over the isolation level configured at the client-level. + .readWriteTransaction(Options.isolationLevel(IsolationLevel.REPEATABLE_READ)) + .run(transaction -> { + // Read an AlbumTitle. + String selectSql = + "SELECT AlbumTitle from Albums WHERE SingerId = 1 and AlbumId = 1"; + String title = null; + try (ResultSet resultSet = transaction.executeQuery(Statement.of(selectSql))) { + if (resultSet.next()) { + title = resultSet.getString("AlbumTitle"); + } + } + System.out.printf("Current album title: %s\n", title); + + // Update the title. + String updateSql = + "UPDATE Albums " + + "SET AlbumTitle = 'New Album Title' " + + "WHERE SingerId = 1 and AlbumId = 1"; + long rowCount = transaction.executeUpdate(Statement.of(updateSql)); + System.out.printf("%d record updated.\n", rowCount); + return null; + }); + } + // [END spanner_isolation_level] + + // [START spanner_read_lock_mode] + static void readLockModeSetting(DatabaseId db) { + // The read lock mode specified at the client-level will be applied to all + // RW transactions. + DefaultReadWriteTransactionOptions transactionOptions = + DefaultReadWriteTransactionOptions.newBuilder() + .setReadLockMode(ReadLockMode.OPTIMISTIC) + .build(); + SpannerOptions options = + SpannerOptions.newBuilder() + .setDefaultTransactionOptions(transactionOptions) + .build(); + Spanner spanner = options.getService(); + DatabaseClient dbClient = spanner.getDatabaseClient(db); + dbClient + // The read lock mode specified at the transaction-level takes precedence + // over the read lock mode configured at the client-level. + .readWriteTransaction(Options.readLockMode(ReadLockMode.PESSIMISTIC)) + .run(transaction -> { + // Read an AlbumTitle. + String selectSql = + "SELECT AlbumTitle from Albums WHERE SingerId = 1 and AlbumId = 1"; + String title = null; + try (ResultSet resultSet = transaction.executeQuery(Statement.of(selectSql))) { + if (resultSet.next()) { + title = resultSet.getString("AlbumTitle"); + } + } + System.out.printf("Current album title: %s\n", title); + + // Update the title. + String updateSql = + "UPDATE Albums " + + "SET AlbumTitle = 'New Album Title' " + + "WHERE SingerId = 1 and AlbumId = 1"; + long rowCount = transaction.executeUpdate(Statement.of(updateSql)); + System.out.printf("%d record updated.\n", rowCount); + return null; + }); + } + // [END spanner_read_lock_mode] +} \ No newline at end of file diff --git a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java new file mode 100644 index 00000000000..ef03ed7d88a --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java @@ -0,0 +1,70 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.Statement; + +/** + * Sample showing how to set the last statement option when a DML statement is the last statement in + * a transaction. + */ +public class LastStatementSample { + + static void insertAndUpdateUsingLastStatement() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + final String instanceId = "my-instance"; + final String databaseId = "my-database"; + + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final DatabaseClient databaseClient = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + insertAndUpdateUsingLastStatement(databaseClient); + } + } + + // [START spanner_dml_last_statement] + static void insertAndUpdateUsingLastStatement(DatabaseClient client) { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.of( + "INSERT Singers (SingerId, FirstName, LastName)\n" + + "VALUES (54213, 'John', 'Do')")); + System.out.println("New singer inserted."); + + // Pass in the `lastStatement` option to the last DML statement of the transaction. + transaction.executeUpdate( + Statement.of( + "UPDATE Singers SET Singers.LastName = 'Doe' WHERE SingerId = 54213\n"), + Options.lastStatement()); + System.out.println("Singer last name updated."); + + return null; + }); + } + // [END spanner_dml_last_statement] + +} diff --git a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java new file mode 100644 index 00000000000..1c583a71b39 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java @@ -0,0 +1,69 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.Statement; + +/** + * Sample showing how to set the last statement option when a DML statement is the last statement in + * a transaction. + */ +public class PgLastStatementSample { + + static void insertAndUpdateUsingLastStatement() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + final String instanceId = "my-instance"; + final String databaseId = "my-database"; + + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final DatabaseClient databaseClient = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + insertAndUpdateUsingLastStatement(databaseClient); + } + } + + // [START spanner_postgresql_dml_last_statement] + static void insertAndUpdateUsingLastStatement(DatabaseClient client) { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.of( + "INSERT INTO Singers (SingerId, FirstName, LastName) " + + "VALUES (54214, 'John', 'Do')")); + System.out.println("New singer inserted."); + + // Pass in the `lastStatement` option to the last DML statement of the transaction. + transaction.executeUpdate( + Statement.of("UPDATE Singers SET LastName = 'Doe' WHERE SingerId = 54214\n"), + Options.lastStatement()); + System.out.println("Singer last name updated."); + + return null; + }); + } + // [END spanner_postgresql_dml_last_statement] + +} diff --git a/samples/snippets/src/main/java/com/example/spanner/SpannerSample.java b/samples/snippets/src/main/java/com/example/spanner/SpannerSample.java index d406225c28b..a01b00c0f6c 100644 --- a/samples/snippets/src/main/java/com/example/spanner/SpannerSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/SpannerSample.java @@ -679,24 +679,25 @@ static void readOnlyTransaction(DatabaseClient dbClient) { // ReadOnlyTransaction must be closed by calling close() on it to release resources held by it. // We use a try-with-resource block to automatically do so. try (ReadOnlyTransaction transaction = dbClient.readOnlyTransaction()) { - ResultSet queryResultSet = + try (ResultSet queryResultSet = transaction.executeQuery( - Statement.of("SELECT SingerId, AlbumId, AlbumTitle FROM Albums")); - while (queryResultSet.next()) { - System.out.printf( - "%d %d %s\n", - queryResultSet.getLong(0), queryResultSet.getLong(1), queryResultSet.getString(2)); - } + Statement.of("SELECT SingerId, AlbumId, AlbumTitle FROM Albums"))) { + while (queryResultSet.next()) { + System.out.printf( + "%d %d %s\n", + queryResultSet.getLong(0), queryResultSet.getLong(1), queryResultSet.getString(2)); + } + } // queryResultSet.close() is automatically called here try (ResultSet readResultSet = transaction.read( - "Albums", KeySet.all(), Arrays.asList("SingerId", "AlbumId", "AlbumTitle"))) { + "Albums", KeySet.all(), Arrays.asList("SingerId", "AlbumId", "AlbumTitle"))) { while (readResultSet.next()) { System.out.printf( "%d %d %s\n", readResultSet.getLong(0), readResultSet.getLong(1), readResultSet.getString(2)); } - } - } + } // readResultSet.close() is automatically called here + } // transaction.close() is automatically called here } // [END spanner_read_only_transaction] diff --git a/samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.java b/samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.java new file mode 100644 index 00000000000..3c73a7591d1 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.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 + * + * 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.spanner; + +import com.google.cloud.Timestamp; +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.Statement.StatementFactory; +import java.time.LocalDate; + +public class UnnamedParametersExample { + + static void executeQueryWithUnnamedParameters() { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + String instanceId = "my-instance"; + String databaseId = "my-database"; + + executeQueryWithUnnamedParameters(projectId, instanceId, databaseId); + } + + static void executeQueryWithUnnamedParameters( + String projectId, String instanceId, String databaseId) { + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + StatementFactory statementFactory = client.getStatementFactory(); + + // Insert a row with unnamed parameters + client + .readWriteTransaction() + .run( + transaction -> { + Statement statement = statementFactory + .withUnnamedParameters("INSERT INTO Students(StudentId, Name, IsNRI, AvgMarks, " + + "JoinedAt, PinCode, CreatedAt) VALUES(?, ?, ?, ?, ?, ?, ?)", + 1000001, + "Google", + false, + (float) 34.5, + LocalDate.of(2024, 3, 31), + "123456", + Timestamp.now()); + transaction.executeUpdate(statement); + + return null; + }); + System.out.println("Row is inserted."); + + // Query the table with unnamed parameters + try (ResultSet resultSet = + client + .singleUse() + .executeQuery( + statementFactory.withUnnamedParameters( + "SELECT * FROM Students WHERE StudentId = ?", 1000001))) { + while (resultSet.next()) { + System.out.println(resultSet.getString("Name")); + } + } + System.out.println("Row is fetched."); + } + } +} diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/archived/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/archived/CreateInstanceWithAutoscalingConfigExample.java index f8a683865ac..0502fba5eda 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/archived/CreateInstanceWithAutoscalingConfigExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/archived/CreateInstanceWithAutoscalingConfigExample.java @@ -28,6 +28,7 @@ import com.google.cloud.spanner.SpannerOptions; import com.google.spanner.admin.instance.v1.AutoscalingConfig; import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; +import com.google.spanner.admin.instance.v1.Instance.Edition; import java.util.concurrent.ExecutionException; class CreateInstanceWithAutoscalingConfigExample { @@ -62,6 +63,7 @@ static void createInstance(String projectId, String instanceId) { .setInstanceConfigId(InstanceConfigId.of(projectId, configId)) .setAutoscalingConfig(autoscalingConfig) .setDisplayName("Descriptive name") + .setEdition(Edition.ENTERPRISE) .build(); OperationFuture operation = instanceAdminClient.createInstance(instanceInfo); diff --git a/samples/snippets/src/test/java/com/example/spanner/ChangeStreamsTxnExclusionSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/ChangeStreamsTxnExclusionSampleIT.java new file mode 100644 index 00000000000..fecf8189f46 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/ChangeStreamsTxnExclusionSampleIT.java @@ -0,0 +1,98 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import static com.example.spanner.SampleRunner.runSample; +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.KeySet; +import com.google.cloud.spanner.Mutation; +import com.google.common.collect.ImmutableList; +import java.util.Arrays; +import java.util.Collections; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Integration tests for {@link ChangeStreamsTxnExclusionSample} */ +@RunWith(JUnit4.class) +public class ChangeStreamsTxnExclusionSampleIT extends SampleTestBase { + + private static DatabaseId databaseId; + + @BeforeClass + public static void createTestDatabase() throws Exception { + final String database = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + instanceId, + database, + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId INT64 NOT NULL," + + " FirstName STRING(1024)," + + " LastName STRING(1024)," + + " SingerInfo BYTES(MAX)" + + ") PRIMARY KEY (SingerId)")) + .get(); + databaseId = DatabaseId.of(projectId, instanceId, database); + } + + @Before + public void insertTestData() { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + client.write( + Arrays.asList( + Mutation.newInsertBuilder("Singers") + .set("SingerId") + .to(1L) + .set("FirstName") + .to("first name 1") + .set("LastName") + .to("last name 1") + .build(), + Mutation.newInsertBuilder("Singers") + .set("SingerId") + .to(2L) + .set("FirstName") + .to("first name 2") + .set("LastName") + .to("last name 2") + .build())); + } + + @After + public void removeTestData() { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + client.write(Collections.singletonList(Mutation.delete("Singers", KeySet.all()))); + } + + @Test + public void testSetExcludeTxnFromChangeStreamsSampleSample() throws Exception { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + String out = + runSample( + () -> ChangeStreamsTxnExclusionSample.readWriteTxnExcludedFromChangeStreams(client)); + assertThat(out).contains("New singer inserted."); + assertThat(out).contains("Singer first name updated."); + } +} diff --git a/samples/snippets/src/test/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigSampleIT.java new file mode 100644 index 00000000000..b29115ddd0f --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/CreateInstanceWithAsymmetricAutoscalingConfigSampleIT.java @@ -0,0 +1,37 @@ +/* + * 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.spanner; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.spanner.admin.database.v1.InstanceName; +import org.junit.Test; + +public class CreateInstanceWithAsymmetricAutoscalingConfigSampleIT extends SampleTestBaseV2 { + + @Test + public void testCreateInstanceWithAsymmetricAutoscalingConfig() throws Exception { + String instanceId = idGenerator.generateInstanceId(); + String out = + SampleRunner.runSample( + () -> CreateInstanceWithAsymmetricAutoscalingConfigExample + .createInstance(projectId, instanceId)); + assertThat(out) + .contains(String.format("Asymmetric Autoscaling instance %s", + InstanceName.of(projectId, instanceId).toString())); + } +} diff --git a/samples/snippets/src/test/java/com/example/spanner/DatabaseAddSplitPointsIT.java b/samples/snippets/src/test/java/com/example/spanner/DatabaseAddSplitPointsIT.java new file mode 100644 index 00000000000..c9215b78cdc --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/DatabaseAddSplitPointsIT.java @@ -0,0 +1,57 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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.spanner; + +import static org.junit.Assert.assertTrue; + +import com.google.cloud.spanner.DatabaseId; +import com.google.common.collect.ImmutableList; +import java.util.concurrent.ExecutionException; +import org.junit.Before; +import org.junit.Test; + +public class DatabaseAddSplitPointsIT extends SampleTestBase { + private static String databaseId; + + @Before + public void setup() throws ExecutionException, InterruptedException { + databaseId = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + databaseAdminClient + .newDatabaseBuilder(DatabaseId.of(projectId, instanceId, databaseId)) + .build(), + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId INT64 NOT NULL," + + " FirstName STRING(1024)," + + " LastName STRING(1024)" + + ") PRIMARY KEY (SingerId)", + " CREATE INDEX IF NOT EXISTS SingersByFirstLastName ON Singers(FirstName," + + " LastName)")) + .get(); + } + + // TODO: Enable the test once the issue with split points is resolved + // @Test + public void testAddSplits() throws Exception { + final String out = + SampleRunner.runSample( + () -> DatabaseAddSplitPointsSample.addSplitPoints(projectId, instanceId, databaseId)); + assertTrue(out.contains("")); + } +} diff --git a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java new file mode 100644 index 00000000000..89026b5f92b --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java @@ -0,0 +1,61 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import static com.example.spanner.SampleRunner.runSample; +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.common.collect.ImmutableList; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Integration tests for {@link LastStatementSample} */ +@RunWith(JUnit4.class) +public class LastStatementSampleIT extends SampleTestBase { + + private static DatabaseId databaseId; + + @BeforeClass + public static void createTestDatabase() throws Exception { + final String database = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + instanceId, + database, + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId INT64 NOT NULL," + + " FirstName STRING(1024)," + + " LastName STRING(1024)," + + " SingerInfo BYTES(MAX)" + + ") PRIMARY KEY (SingerId)")) + .get(); + databaseId = DatabaseId.of(projectId, instanceId, database); + } + + @Test + public void testSetLastStatementOptionSample() throws Exception { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + String out = runSample(() -> LastStatementSample.insertAndUpdateUsingLastStatement(client)); + assertThat(out).contains("New singer inserted."); + assertThat(out).contains("Singer last name updated."); + } +} diff --git a/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java new file mode 100644 index 00000000000..d6d8d43f6a0 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java @@ -0,0 +1,75 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import static com.example.spanner.SampleRunner.runSample; +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Dialect; +import com.google.common.collect.ImmutableList; +import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; +import java.util.Collections; +import java.util.concurrent.TimeUnit; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Integration tests for {@link PgLastStatementSample} */ +@RunWith(JUnit4.class) +public class PgLastStatementSampleIT extends SampleTestBase { + + private static DatabaseId databaseId; + + @BeforeClass + public static void createTestDatabase() throws Exception { + final String database = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + databaseAdminClient + .newDatabaseBuilder(DatabaseId.of(projectId, instanceId, database)) + .setDialect(Dialect.POSTGRESQL) + .build(), + Collections.emptyList()) + .get(10, TimeUnit.MINUTES); + final OperationFuture updateOperation = + databaseAdminClient.updateDatabaseDdl( + instanceId, + database, + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId bigint NOT NULL," + + " FirstName character varying(1024)," + + " LastName character varying(1024)," + + " PRIMARY KEY (SingerId)" + + ")"), + null); + updateOperation.get(10, TimeUnit.MINUTES); + databaseId = DatabaseId.of(projectId, instanceId, database); + } + + @Test + public void testSetLastStatementOptionSample() throws Exception { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + String out = runSample(() -> PgLastStatementSample.insertAndUpdateUsingLastStatement(client)); + assertThat(out).contains("New singer inserted."); + assertThat(out).contains("Singer last name updated."); + } +} diff --git a/samples/snippets/src/test/java/com/example/spanner/SpannerSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/SpannerSampleIT.java index d59152b407c..a3b12caa392 100644 --- a/samples/snippets/src/test/java/com/example/spanner/SpannerSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/SpannerSampleIT.java @@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertTrue; +import com.google.api.gax.rpc.FailedPreconditionException; import com.google.cloud.Timestamp; import com.google.cloud.spanner.DatabaseId; import com.google.cloud.spanner.ErrorCode; @@ -643,8 +644,13 @@ private static void deleteAllBackups(String instanceId) throws InterruptedExcept attempts++; databaseAdminClient.deleteBackup(backup.getName()); break; - } catch (SpannerException e) { - if (e.getErrorCode() == ErrorCode.FAILED_PRECONDITION + } catch (SpannerException | FailedPreconditionException e) { + ErrorCode errorCode = ErrorCode.FAILED_PRECONDITION; + + if (e instanceof SpannerException) { + errorCode = ((SpannerException) e).getErrorCode(); + } + if (errorCode == ErrorCode.FAILED_PRECONDITION && e.getMessage() .contains( "Please try deleting the backup once the restore or post-restore optimize " diff --git a/samples/snippets/src/test/java/com/example/spanner/UnnamedParametersIT.java b/samples/snippets/src/test/java/com/example/spanner/UnnamedParametersIT.java new file mode 100644 index 00000000000..d6c900dd60e --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/UnnamedParametersIT.java @@ -0,0 +1,61 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import static org.junit.Assert.assertTrue; + +import com.google.cloud.spanner.DatabaseId; +import com.google.common.collect.ImmutableList; +import java.util.concurrent.ExecutionException; +import org.junit.Before; +import org.junit.Test; + +public class UnnamedParametersIT extends SampleTestBase { + private static String databaseId; + + @Before + public void setup() throws ExecutionException, InterruptedException { + databaseId = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + databaseAdminClient + .newDatabaseBuilder(DatabaseId.of(projectId, instanceId, databaseId)) + .build(), + ImmutableList.of( + "CREATE TABLE Students (" + + " StudentId INT64 NOT NULL PRIMARY KEY," + + " Name STRING(1024) NOT NULL," + + " IsNRI BOOL NOT NULL," + + " AvgMarks FLOAT32 NOT NULL," + + " JoinedAt DATE NOT NULL," + + " PinCode INT64 NOT NULL," + + " CreatedAt TIMESTAMP NOT NULL" + + ")")) + .get(); + } + + @Test + public void testUnnamedParameters() throws Exception { + final String out = + SampleRunner.runSample( + () -> UnnamedParametersExample.executeQueryWithUnnamedParameters(projectId, instanceId, + databaseId)); + assertTrue(out.contains("Row is inserted.")); + assertTrue(out.contains("Google")); + assertTrue(out.contains("Row is fetched.")); + } +} diff --git a/synth.metadata b/synth.metadata index 9622106469d..9f19ee9c447 100644 --- a/synth.metadata +++ b/synth.metadata @@ -68,41 +68,16 @@ ".kokoro/coerce_logs.sh", ".kokoro/common.cfg", ".kokoro/common.sh", - ".kokoro/continuous/java8.cfg", ".kokoro/dependencies.sh", ".kokoro/nightly/integration.cfg", ".kokoro/nightly/java11.cfg", - ".kokoro/nightly/java7.cfg", ".kokoro/nightly/java8-osx.cfg", - ".kokoro/nightly/java8-win.cfg", ".kokoro/nightly/java8.cfg", ".kokoro/populate-secrets.sh", - ".kokoro/presubmit/clirr.cfg", ".kokoro/presubmit/dependencies.cfg", ".kokoro/presubmit/graalvm-native.cfg", ".kokoro/presubmit/integration.cfg", ".kokoro/presubmit/java11.cfg", - ".kokoro/presubmit/java7.cfg", - ".kokoro/presubmit/java8-osx.cfg", - ".kokoro/presubmit/java8-win.cfg", - ".kokoro/presubmit/java8.cfg", - ".kokoro/presubmit/linkage-monitor.cfg", - ".kokoro/presubmit/lint.cfg", - ".kokoro/release/bump_snapshot.cfg", - ".kokoro/release/common.cfg", - ".kokoro/release/common.sh", - ".kokoro/release/drop.cfg", - ".kokoro/release/drop.sh", - ".kokoro/release/promote.cfg", - ".kokoro/release/promote.sh", - ".kokoro/release/publish_javadoc.cfg", - ".kokoro/release/publish_javadoc.sh", - ".kokoro/release/publish_javadoc11.cfg", - ".kokoro/release/publish_javadoc11.sh", - ".kokoro/release/snapshot.cfg", - ".kokoro/release/snapshot.sh", - ".kokoro/release/stage.cfg", - ".kokoro/release/stage.sh", ".kokoro/trampoline.sh", "CODE_OF_CONDUCT.md", "CONTRIBUTING.md", diff --git a/versions.txt b/versions.txt index 745b2174e24..975d46f0cc4 100644 --- a/versions.txt +++ b/versions.txt @@ -1,13 +1,13 @@ # Format: # module:released-version:current-version -proto-google-cloud-spanner-admin-instance-v1:6.82.0:6.82.0 -proto-google-cloud-spanner-v1:6.82.0:6.82.0 -proto-google-cloud-spanner-admin-database-v1:6.82.0:6.82.0 -grpc-google-cloud-spanner-v1:6.82.0:6.82.0 -grpc-google-cloud-spanner-admin-instance-v1:6.82.0:6.82.0 -grpc-google-cloud-spanner-admin-database-v1:6.82.0:6.82.0 -google-cloud-spanner:6.82.0:6.82.0 -google-cloud-spanner-executor:6.82.0:6.82.0 -proto-google-cloud-spanner-executor-v1:6.82.0:6.82.0 -grpc-google-cloud-spanner-executor-v1:6.82.0:6.82.0 +proto-google-cloud-spanner-admin-instance-v1:6.113.0:6.113.1-SNAPSHOT +proto-google-cloud-spanner-v1:6.113.0:6.113.1-SNAPSHOT +proto-google-cloud-spanner-admin-database-v1:6.113.0:6.113.1-SNAPSHOT +grpc-google-cloud-spanner-v1:6.113.0:6.113.1-SNAPSHOT +grpc-google-cloud-spanner-admin-instance-v1:6.113.0:6.113.1-SNAPSHOT +grpc-google-cloud-spanner-admin-database-v1:6.113.0:6.113.1-SNAPSHOT +google-cloud-spanner:6.113.0:6.113.1-SNAPSHOT +google-cloud-spanner-executor:6.113.0:6.113.1-SNAPSHOT +proto-google-cloud-spanner-executor-v1:6.113.0:6.113.1-SNAPSHOT +grpc-google-cloud-spanner-executor-v1:6.113.0:6.113.1-SNAPSHOT